Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Прехвърляне в нов масив с указатели

Featured Replies

Проблема в програмата е, че не създава правилно масив от всички числа различни от нула.

 

Във void move е проблематичното място и ако може с указатели да я поправите, понеже се опитвам да ги науча. Благодаря предварително.

#include <iostream>using namespace std;#define N 30int A[N], i, n, k, j;void input(){	do	{		cout<<"n Razmer na masiva: ";		cin>>n;	}	while (n<0 || n>N);	for (i=0;i<n;i++)    {    cout<<"n A["<<i+1<<"]=";    cin>>A[i];    }}void move(int *nb, int *pc){	for (i=0;i<n;i++)        if (A[i]!=0)    {        *nb=A[i];        nb++;        (*pc)++;    }    for (i=0;i<*pc;i++,nb++)    cout<<"n B["<<i+1<<"]="<<*nb<<endl;}void sredno(){    int sp=0;    float srednoto=0, sm=0;	for (i=0;i<n;i++)        if (A[i]!=0)		{			sm+=A[i];			sp++;        }        srednoto=sm/sp;		cout<<"n Sredno-aritmetichno = "<<srednoto<<endl;}void minimalno (){    int m=A[0];		for (i=1;i<n;i++)		if (A[i]<0 && m>A[i])		{			m=A[i];			k=i;		}		cout<<"n Minimalnoto otricatelno chislo e "<<m<<" s poreden nomer "<<k+1<<"."<<endl;}int main(){	int B[30], ch;	int a=0, b=0;	input();	do	{		cout<<"n 1. Prehvurlqne na chisla razlichni ot nula v nov masiv.";		cout<<"n 2. Izchislqvane sredno-aritmetichno ot chislata v masiva.";		cout<<"n 3. Minimalnoto otricatelno chislo v masiva.";		cout<<"n 4. Izhod.";		do		{		  cout<<"n Izberete deistvie: ";		  cin>>ch;		}		while (ch<1 || ch>4);		switch(ch)		{		case 1: move (&a, &b); break;		case 2: sredno(); break;		case 3: minimalno (); break;		}	}	while (ch!=4);    return 0;}

Редактирано от Spydoc (преглед на промените)

Ако искаш да се научиш, зарежи тази програма засега и препрочети всичко за указатели, което намериш.Конкретните проблеми по move съм ги сложил в коментари. М/у другото ти ли писа този код?

Във void move е проблематичното място и ако може с указатели да я поправите, понеже се опитвам да ги науча. Благодаря предварително.

// Първо функцията очаква като първи параметър масив, а не указател към цяло число// Това се разбира от имплементацията, не от дефиницията. (затова и въпросът за авторството на кода)// Тоест за първи параметър и подай масива B а не указател към променлива-число.//  Иначе още след първото увеличение на nb ще почнеш да пишеш на непозволено място.void move(int *nb, int *pc){	for (i=0;i<n;i++)        if (A[i]!=0)    {        *nb=A[i];        nb++;        (*pc)++;    }// Към този момент, указателят nb сочи след последната стойност, която си прехвърлил.// С цикълът отдолу, продължаваш да го увеличаваш, с което той ще сочи към неинициализирани стойности.// Вместо това направи още един указател и променяй него в циклите, за да може оригиналният винаги// да ти сочи към началото за да може да се "върнеш" когато искаш.    for (i=0;i<*pc;i++,nb++)    cout<<"n B["<<i+1<<"]="<<*nb<<endl;}

Редактирано от flare (преглед на промените)

Проблема в програмата е, че не създава правилно масив от всички числа различни от нула.

Само това да и е проблема, като изключим input() всичко друго е сбъркано.minimalno () ако всички числа са положителни ще върне А[0] Няма да получиш вярното средно аритметично ако изключваш нулевите елементина 1, 0, 2, 3, средно аритметичното е 1.5 а не 2За кашата с move() flare вече е писал. 

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.