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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Помощ за задачи на C/C++ (merged)

Featured Replies

 

Чакай flare да се включи той ще ти каже :)   Благодаря все пак !! :)

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

  • Отговори 941
  • Прегледи 234,5k
  • Създадено
  • Последен отговор

Чакай flare да се включи той ще ти каже :)   Благодаря все пак !! :)

Използвай тага CODE /CODE

за кода че, ще ти се скара :) А ще стане и по-четлив.

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

Използвай тага CODE /CODE за кода че, ще ти се скара

Официално се скарвам... :Ptux ще ме правиш модератор ли, недай си Боже...

проблема е че ми извежда единствено средния успех по математика ,без този по Физика и ПИК

Всъщност проблема, който ти виждаш, се причинява от подло сложен scanf точно след извеждането на гореспоменатия успех. След това програмата чака да въвеждаш, ти я чакаш да извежда - класически дедлок

Обаче има и други нещица... при въвеждане на факултетния номер, спецификатора ти е грешен при тип int ползваш "%f".

Продължаваме. следващите два принта за средни оценки - защо подаваш адресите на променливите, а не самите тях?

И за кой ли път:

Хора. Основно предимство на това да имаш компилатор и статични типове е, че първият предупреждава за несъответствия на вторите. ГЛЕДАЙТЕ СИ ПРЕДУПРЕЖДЕНИЯТА ОТ КОМПИЛАТОРА. Те не се печатат за да ви пълнят екрана.

Официално се скарвам... :Ptux ще ме правиш модератор ли, недай си Боже...

.....

Е да ти е по-лесно за четене :)

Е да ти е по-лесно за четене :)

Много меко казано. Разликата е като да четеш грозен ръкопис спрямо форматиран печат. Всъщност имах предвид, че "скарването" е модераторска функция.

Пак пиша за задачата търсеща уеб сървъри в списък с ИП адреси.

 

Какво мислите за това решение дали е вярно???

#include<stdio.h> //printf#include<string.h>    //strlen#include<sys/socket.h>    //socket#include<arpa/inet.h> //inet_addr int main(int argc , char *argv[]){    int sock;    struct sockaddr_in server;    char message[1000]="GET /HTTP/1.1nn" , server_reply[2000];         //Create socket    sock = socket(AF_INET , SOCK_STREAM , 0);    if (sock == -1)    {        printf("Could not create socket");    }    puts("Socket created");         server.sin_addr.s_addr = inet_addr("194.153.145.104");    server.sin_family = AF_INET;    server.sin_port = htons( 80 );     //Connect to remote server    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)    {        perror("connect failed. Error");        return 1;    }         puts("Connectedn");	        //Send some data        send(sock , message , strlen(message) , 0)                recv(sock , server_reply , 2000 , 0)        if(strlen(server_replay) !=0)		{            printf("server");        }             close(sock);    return 0;}

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

Вчера се поупражнявах за задачите и се старая да намаля грешките които правя, тъй като искам да стана програмист. Та мисълта ми е следната написах една програмка от учебника,като условието е следното :За N студента са дадени Факултетен номер и 5 оценки, да се въведат данните и да се изведат Факултетните номера на студентите които имат само 6-ци.  

#include <stdlib.h>#include <stdio.h>#include <math.h>void main(){ int N,i;printf("Broqt na studentite e: ");scanf("%d",&N);int *stud=new int [N];float **oc;oc=new float*[N];for(i=0;i<N;i++)for(int k=1;k<=5;k++)oc[i]=new float[k];if(!stud){printf("Masivite ne sa syzdadeni !n"); return;}if(!oc){printf("Masivyt ne e syzdaden !n");return;}for(int i=0;i<N;i++){printf("Vavedete FN na %d-q student: ",i+1);scanf("%d",&stud[i]);}for(i=0;i<N;i++)for(int k=1;k<=5;k++){printf("Vavedete ocenka %d na %d-q student: ",k,i+1);scanf("%f",&oc[i][k]);}for(int i=0;i<N;i++)for(int k=1;k<=5;k++){int br=0;{ if(oc[i][k]>=5.50) br++;{ if(br==5)printf("Fakultetnite nomera na studentite koito imat samo 6-ci: n %d",stud[i]);delete []stud;delete []oc;}}}}

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

Вчера се поупражнявах за задачите и се старая да намаля грешките които правя, тъй като искам да стана програмист.

Можеш да почнеш, като например последваш съвета на tux да ползваш тага CODE. Това е, ако поне малко уважаваш събеседниците си във форума.

После пиши по един израз на ред в програмите си. Обратното затруднява ужасно много четенето и съответно е предпоставка за грешки. Да не се повтарям - това чете ли го?

 

Та мисълта ми е следната написах една програмка от учебника,като условието е следното :За N студента са дадени Факултетен номер и 5 оценки, да се въведат данните и да се изведат Факултетните номера на студентите които имат само 6-ци.

Мисълта ти я разбрах(май), но не и проблема. :)

Можеш да почнеш, като например последваш съвета на tux да ползваш тага CODE. Това е, ако поне малко уважаваш събеседниците си във форума.

После пиши по един израз на ред в програмите си. Обратното затруднява ужасно много четенето и съответно е предпоставка за грешки. Да не се повтарям - това чете ли го?

 

Мисълта ти я разбрах(май), но не и проблема. :)

Подозирам, че колегата има компилационен проблем с кода, който е постнал - форматирайки го в човешки вид се появяват няколко отварящи и затварящи скоби, които летят свободно. Освен това има и чисто логически проблеми по самия код:

 

 

Вчера се поупражнявах за задачите и се старая да намаля грешките които правя, тъй като искам да стана програмист. Та мисълта ми е следната написах една програмка от учебника,като условието е следното :За N студента са дадени Факултетен номер и 5 оценки, да се въведат данните и да се изведат Факултетните номера на студентите които имат само 6-ци.

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

void main()

{ int N,i;

printf("Broqt na studentite e: ");

scanf("%d",&N);

int *stud=new int [N];

float **oc;

oc=new float*[N];

for(i=0;i<N;i++)

for(int k=1;k<=5;k++)

oc=new float[k];  <= Сигурни ли сме, че ос е създаден правилно ?

if(!stud){printf("Masivite ne sa syzdadeni !n"); return;}

if(!oc){printf("Masivyt ne e syzdaden !n");return;} <= Тази проверка трябва да е преди момента на първо ползване на масива "ос"

for(int i=0;i<N;i++)

{

printf("Vavedete FN na %d-q student: ",i+1);

scanf("%d",&stud);

}

for(i=0;i<N;i++)

for(int k=1;k<=5;k++)

{

printf("Vavedete ocenka %d na %d-q student: ",k,i+1);

scanf("%f",&oc[k]);

}

for(int i=0;i<N;i++)

for(int k=1;k<=5;k++){int br=0;

{ if(oc[k]>=5.50) br++; <= Индексите на масивите започват от 0, не от 1, това за к=5 ще даде Runtime грешка.

{ if(br==5)

printf("Fakultetnite nomera na studentite koito imat samo 6-ci: n %d",stud);

delete []stud;

delete []oc; <= Къде изтриваме oc ?

}

}

}

}

За съжаление нямам под ръка C/C++ компилатор, за да верифицирам кода си, но мисля, че трябва да е нещо подобно:

 

#include <stdlib.h>#include <stdio.h>#include <math.h>void main(){ 	int N,i;	printf("Broqt na studentite e: ");	scanf("%d",&N);	int *stud=new int [N];	float **oc;	oc=new float*[N];//?	if(!oc){		printf("Masivyt ne e syzdaden !n");		return;	}	for(i=0;i<N;i++)		oc[i]=new float[5];	if(!stud){		printf("Masivite ne sa syzdadeni !n"); 		return;	}	for(int i=0;i<N;i++){		printf("Vavedete FN na %d-q student: ",i+1);		scanf("%d",&stud[i]);	}	for(i=0;i<N;i++)		for(int k=0;k<5;k++){			printf("Vavedete ocenka %d na %d-q student: ",k,i+1);			scanf("%f",&oc[i][k]);		}	printf("Fakultetnite nomera na studentite koito imat samo 6-ci:n");	for(int i=0;i<N;i++)		for(int k=0;k<5;k++){			if(oc[i][k]<5.50) 				break;			if(k==4)				printf("%dn",stud[i]);		}	delete []stud;	for (int t=0; t<N; t++)		delete [] oc[t];//?	delete []oc;} 

Поздрави !

Подозирам, че колегата има компилационен проблем с кода, който е постнал - форматирайки го в човешки вид се появяват няколко отварящи и затварящи скоби, които летят свободно. Освен това има и чисто логически проблеми по самия код:

Компилира си се. Не можеш да видиш съответстващите скоби, щото както обелязах е писал по 10 (образно казано) израза на ред.

Относно гадаенето на грешките - ако ти се занимава заповядай :) Аз смятам че ако някой има нужда от помощ опитва да цени времето на тези които му помагат, а не им задава гатанки от тип "ха познайте дали, къде и как ми гърми програмата!"...

Сега по същество - не съм съгласен с първия ти коментар, както и със начина, по който се прави възстановяването от грешка в тази програма. По стандарт, new никога не връща NULL, а хвърля ексепшън (което е обичайната практика за "фатални" грешки в C++), така че проверките за върната стойност са безсмислени.

Другите коментари, които си писал са така.

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

 

Сега по същество - не съм съгласен с първия ти коментар, както и със начина, по който се прави възстановяването от грешка в тази програма. По стандарт, new никога не връща NULL, а хвърля ексепшън (което е обичайната практика за "фатални" грешки в C++), така че проверките за върната стойност са безсмислени.

Разбирам. Подведох се по самият flow на програмата, и не съм обръщал внимание за такъв вид особености. Прав сте за забележката. 

 

P.S. 

"Компилира си се."

За пореден път се убеждавам, че само с текстов редактор не е достатъчно :).

За пореден път се убеждавам, че само с текстов редактор не е достатъчно :).

Е става си - за скоби поне. Обаче ако беше правилно форматирана програмата, този проблем изобщо нямаше да стои. Аз затова се дразня от такъв "изсипан" код. И какво толкова има не мога да ги разбера тия хора - дори от мързел да е, прекарват през indent с опция Керниган-Ричи и готово...

Добър вечер! Имам нужда от малко чуждо мнение и оглед на това, което съм написал, защото не работи. Става въпрос за програма със едносвързан линеен списък на C. Проблемът според мен е в цикъла за търсене в самия свързан списък - програмата зацикля и не знам как да я оправя. Ето го кода:

----------------------------------------------------EDIT-------------------------------------------------
Оправих се. Махам големия блок код да не разширявам темата - поствам готовия код в пейстбин ако някой има нужда - http://pastebin.com/TF0bg54b

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

Благодаря много за помощта!Радвам се че го има форума за да има кой да учи нас младшите програмисти, благодаря   отново!!!

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

Може ли да ми помогнете с една задача за "даскало" ?

Да се напише програма, която дефинира структура, описваща книгите в библиотека със следните полета за всяка книга:

*заглавие на книгата

*автор

*година на издаване

*цена

*брой

 

Програмата да включва функции реализиращи следните дейности:

1.Въвеждане на данните за n книги (1<=n<=25)

2.Извеждане на броят на книгите, чийто автор предварително се въвежда от клавиатурата.

3.Сортиране на книгите във възходящ ред по полето цена.

4.Извеждане на сортиран списъл на всичките книги.

 

Трябва ми горе-долу главната част на програмата.Началото и краят знам как ще станат, но средата и какви функций трябва да дефинирам ? Проблемът е че когато са го преподавали това мен ме е нямало,а учебник също нямаме.

Благодаря предварително !

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

Може ли да ми помогнете с една задача за "даскало" ?   Трябва ми горе-долу главната част на програмата. Началото и краят знам как ще станат, но средата и какви функций трябва да дефинирам ?

Бихте ли приложили кода, който сте написали до този момент ? Реализирайте идеята си за началото и края, за можем да работим с дефинираните от Вас същности.    P.S. Дефинирайте какво означава

"Трябва ми горе-долу главната част на програмата."

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

Може ли някой да ми помогне за 2 задачи

 

 

1. Да се състави програма на С++, която намира и извежда стоиностите на функцията и средната стойност на функцията: у=pi+(m*v*v)/2 където pi са елементите на масив p(p0,p1,p2...pn) като n<=20 2. Да се състави програма на С++, която намира и извежда стоиностите на функцията и средната стойност на функцията: y=(sin(x-pi))/(x+pi) където pi са елементите на масив p(p0,p1,p2...pn) като n<=30

 

Благодаря предварително.

Здравейте! Имам една задача за домашна за създаване на фунцкия за преобразуване на едносвързан списък в балансирано двоично дърво за търсене.

 

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

void printnode(int n,int h) {  for(int i=0;i<h;i++)    cout<<"t";  cout<<n<<endl; } void show(elem *t,int h) {  if(t)  {show(t->right,h+1);  printnode(t->key,h);  show(t->left,h+1);  } }  

не ми изкарва абсолютно нищо.

 

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

 

Ето го и кода,който съм написал:

 

#include <iostream> using namespace std; struct elem1 { int key1; elem1 *next1; }*start; struct elem { int key; elem *left,*right; }*root=NULL; void push1(); void add_b(int n); void add(int m,elem *&t); void list(); void preorder(elem *t); int main() {start=NULL; push1(); list(); preorder(root);   return 0; } void add_b(int n) {   elem1 *p;   p=start;   start=new elem1;   start->key1=n;   start->next1=p; } void push1() {   int n,i;   cout<<"n vavedete broq na chislata koito iskate da vavedete n";   cin>>i;   cout<<"n vavedete chisla n";  for(int j=0;j<i;j++)  { cin>>n; cout<<"n";   add_b(n);  } } void list() {   elem1 *p=start;   if(start)   {   while(p)   {   cout<<p->key1; add(p->key1,root);   cout<<"n";   p=p->next1;   }   }   else cout<<"spisakat e prazen n"; } void add(int m,elem *&t) {   if(t==NULL)   {   t=new elem;   t->key=m;   t->left=t->right=NULL;   }   else   {   if(t->key<m)   add(m,t->right);   if(t->key>m)   add(m,t->left);   } } void preorder(elem *t) {   if(t)   {   cout<<t->key<<" ";   preorder(t->left);   preorder(t->right);   } }  

 

Може ли някой да ми помогне за 2 задачи

 

 

1. Да се състави програма на С++, която намира и извежда стоиностите на функцията и средната стойност на функцията: у=pi+(m*v*v)/2 където pi са елементите на масив p(p0,p1,p2...pn) като n<=20 2. Да се състави програма на С++, която намира и извежда стоиностите на функцията и средната стойност на функцията: y=(sin(x-pi))/(x+pi) където pi са елементите на масив p(p0,p1,p2...pn) като n<=30

 

Благодаря предварително.

Здравейте,

 

Ще приложа идеята си чрез псевдо-код с изричната умисъл самата реализация Вие да я съставите. Ако по самият код имате проблеми, приложете го и ще коментираме проблемите върху него.

 

И двете задачи са едва ли не еднакви - разликата е само в приложената формула. Това дава доста идеи върху самата реализация.

 

1. Нека започнем с по-простата - директна реализация:

//Задача 1:void kinetic_energy (int [] array, int array_size, int m, int v){        //m*v^2/2 е формулата за кинетична енергия, поради това и метода носи това име	if (n < 0) {		cout << "N is less than zero" << endl;		return;	}	double sumFunction = 0;	double temporaryResult;	for (int i = 0; i < array_size; i++) {		temporaryResult = array[i] + (m*v*v)/2;		sumFunction += temporaryResult;		cout << "For i = " << i << " y = " << temporaryResult << endl;	}	cout << "Mean value for y is: " << (sumFunction/n) << endl;}//Задача 2:void sine_formula (int [] array, int array_size, int x){	if (n < 0) {		cout << "N is less than zero" << endl;		return;	}	double sumFunction = 0;	double temporaryResult;	for (int i = 0; i < array_size; i++) {		temporaryResult = (sin(x-array[i]))/(x+array[i]);		//Забележка: sin работи с радиани, затова ,ако array[i] е 		//в градуси, горната формула се замества с:		//temporaryResult = (sin((x-array[i])*PI/180))/(x+array[i]);		sumFunction += temporaryResult;		cout << "For i = " << i << " y = " << temporaryResult << endl;	}	cout << "Mean value for y is: " << (sumFunction/n) << endl;}

2. Създаване на функция, която взема като параметър друга функция.

 

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

void mean(int vArray[], int array_size, double (*functionPtr)(int, int, int), int currentArrayValue ,int invokedFunctionParam1, int invokedFunctionParam2){	if (n < 0) {		cout << "N is less than zero" << endl;		return 0;	}	double sumFunction = 0;	double temporaryResult;	for (int i = 0; i < array_size; i++) {		temporaryResult = (*functionPtr)(currentArrayValue, invokedFunctionParam1, invokedFunctionParam2);		sumFunction += temporaryResult;		cout << "For i = " << i << " y = " << temporaryResult << endl;	}	cout << "Mean value for y is: " << (sumFunction/n) << endl;	return (sumFunction/n);}double kinetic_energy (int currentArrayValue, int m, int v){	return currentArrayValue + (m*v*v)/2;}double sine_formula (int currentArrayValue, int x, int not_used){	return temporaryResult = (sin(x-currentArrayValue))/(x+currentArrayValue);}

Двете ги давам само като идея - не очаквам да се компилират или изпълнят веднага, но да дадат някаква насока на razbivacha88. Освен това самото попълване на параметри и масиви, както и main процедурата, трябва да се напишат допълнително. 

 

Успех !

 

@throwing_stones

 

Ще се опитам да огледам кода, който е даден, но като идея, можете да използвате таговете [cоde] [/cоde], за да го оградите и форматирате.

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

  • 2 месеца по-късно...

Здр. Може ли някой да ми помогне, имам една задача за курсова работа и немога да се справя, написал съм един сорс но незнам дали е така.Ако може някой да ми помогне ще съм много благодарен.
зад. Едномерен масив съдържа М на брой числа (m<15). Да се напише програма за прехвърляне в нов масив на тези от числата,които са по-малки от средноаритметичната стойност на всички стойности в масива.

#include <iostream>
using namespace std;
#define M 15
double a[M] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
double *b;
double mean_a(double a[], unsigned elems)
{
double mean = 0;
for (int i = 0; i < elems; mean += a[i++]);
if (elems)
mean /= elems;
return mean;
}
unsigned mean_c(double a[], double mean_a, unsigned elems)
{
unsigned count = 0;
for (int i = 0; i < elems; i++)
if (a < mean_a)
count++;
return count;
}
double *set_b(double a[], unsigned size_a, double mean_a, unsigned count)
{
double *b = new double [count];
unsigned j = 0;
for (int i = 0; i < size_a; i++)
if (a < mean_a)
b[j++] = a;
return b;
}
main()
{
double mean = mean_a(a, M);
cout << "Mean of a[" << M << "] is " << mean << endl;
unsigned count = mean_c(a, mean, M);
cout << "Count of elems < mean of a[" << M << "] is " << count << endl;
double *b = set_b(a, M, mean, count);
for (int i = 0; i < count; i++)
cout << "b[" << (i + 1) << "] = " << b << endl;
return 0;
}

Здравейте, ще напиша коментарите си по кода inline:

...
double mean_a(double a[], unsigned elems)
{
double mean = 0;
for (int i = 0; i < elems; mean += a[i++]); // Сравняваме unsigned int (elems) със нормален int (i). Тука компилатора се кара ...
if (elems)
mean /= elems; //Защо правим тази гимнастика тука ?! Проверката за elems е по-добре да е преди цикъла и директно да прекратява метода, ако е 0. 
return mean;
}
unsigned mean_c(double a[], double mean_a, unsigned elems)
{
unsigned count = 0;
for (int i = 0; i < elems; i++)  // Сравняваме unsigned int (count) със нормален int (i). Тука компилатора се кара ...
if (a < mean_a)
count++;
return count;
}
double *set_b(double a[], unsigned size_a, double mean_a, unsigned count)
{
double *b = new double [count];
unsigned j = 0;
for (int i = 0; i < size_a; i++)  // Сравняваме unsigned int (size_a) със нормален int (i). Тука компилатора се кара ...
if (a < mean_a)
b[j++] = a;
return b;
}
main() //Метода трябва да се додекларира, че връща int, както е записано в return клаузата.
{
double mean = mean_a(a, M);
cout << "Mean of a[" << M << "] is " << mean << endl;
unsigned count = mean_c(a, mean, M);
cout << "Count of elems < mean of a[" << M << "] is " << count << endl;
double *b = set_b(a, M, mean, count);
for (int i = 0; i < count; i++)  // Сравняваме unsigned int (count) със нормален int (i). Тука компилатора се кара ...
cout << "b[" << (i + 1) << "] = " << b << endl;

//Като добра препоръка е, въпреки, че излизаме от метода да ударим едно delete b ... просто да ни стане като навик :)
return 0;
}

Попреправих Вашия код, и добавих коментираните модификации:

#include <iostream>using namespace std;#define M 15double a[M] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };double *b;double mean_a(double a[], unsigned elems){	if (!elems) 	{		return 0;	}	double sum = 0;	for (unsigned int i = 0; i < elems; sum += a[i++]);	return sum/elems;}unsigned mean_c(double a[], double mean, unsigned elems){	unsigned count = 0;	for (unsigned int i = 0; i < elems; i++)	{		if (a[i] < mean)		{			count++;		}	}	return count;}double *set_b(double a[], unsigned size_a, double mean, unsigned count){	double *b = new double [count];	unsigned j = 0;	for (unsigned int i = 0; i < size_a; i++)	{		if (a[i] < mean)		{			b[j++] = a[i];		}	}	return b;}int main(){	double meanValue = mean_a(a, M);	cout << "Mean of a[" << M << "] is " << meanValue << endl;	unsigned count = mean_c(a, meanValue, M);	cout << "Count of elems < mean of a[" << M << "] is " << count << endl;	double *b = set_b(a, M, meanValue, count);	for (unsigned int i = 0; i < count; i++)	{		cout << "b[" << (i + 1) << "] = " << b[i] << endl;	}	delete b;	return 0;}

Не съм добавял логика за динамично попълване на стартовия масив  (а), но това мисля, че не е голям проблем да се направи и от Вас. 

 

Поздрави !

 

P.S. Можете за по-добра четимост на кода да ползвате таговете [сode][/сode] на форума :).

Здравейте, ще напиша коментарите си по кода inline:

Попреправих Вашия код, и добавих коментираните модификации:

#include <iostream>using namespace std;#define M 15double a[M] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };double *b;double mean_a(double a[], unsigned elems){	if (!elems) 	{		return 0;	}	double sum = 0;	for (unsigned int i = 0; i < elems; sum += a[i++]);	return sum/elems;}unsigned mean_c(double a[], double mean, unsigned elems){	unsigned count = 0;	for (unsigned int i = 0; i < elems; i++)	{		if (a[i] < mean)		{			count++;		}	}	return count;}double *set_b(double a[], unsigned size_a, double mean, unsigned count){	double *b = new double [count];	unsigned j = 0;	for (unsigned int i = 0; i < size_a; i++)	{		if (a[i] < mean)		{			b[j++] = a[i];		}	}	return b;}int main(){	double meanValue = mean_a(a, M);	cout << "Mean of a[" << M << "] is " << meanValue << endl;	unsigned count = mean_c(a, meanValue, M);	cout << "Count of elems < mean of a[" << M << "] is " << count << endl;	double *b = set_b(a, M, meanValue, count);	for (unsigned int i = 0; i < count; i++)	{		cout << "b[" << (i + 1) << "] = " << b[i] << endl;	}	delete b;	return 0;}

Не съм добавял логика за динамично попълване на стартовия масив  (а), но това мисля, че не е голям проблем да се направи и от Вас. 

 

Поздрави !

 

P.S. Можете за по-добра четимост на кода да ползвате таговете [сode][/сode] на форума :).

Благодаря ти безкрайно много.Незнам какво щеше да правя.Понеже съм 1 курс и несъм много наясно с нещата.Много се радвам че ми помогна.Още веднъж много ти благодаря, и дано един ден да стана като теб, за да мога да помагам и аз,защото е много трудно да се нуждаеш от помощ, а да няма кои да ти помогне. Благодаря!

Благодаря ти безкрайно много.Незнам какво щеше да правя.Понеже съм 1 курс и несъм много наясно с нещата.Много се радвам че ми помогна.Още веднъж много ти благодаря, и дано един ден да стана като теб, за да мога да помагам и аз,защото е много трудно да се нуждаеш от помощ, а да няма кои да ти помогне. Благодаря!

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

Да се състави програма,която съдържа следните функции:
-Съставяне на два динамично представени стека с целочислени данни, съдържащи се във външен файл.
-Сортиране на елементите в стековете по метода чрез прост избор/селекция.
-Запис на изходните резултати във външен файл.
Главна функция main()-с меню за избор на функции и проверка за състоянието на данните

Някви насоки и разяснение? Не трябва да използвам масиви

Да се състави програма,която съдържа следните функции:

-Съставяне на два динамично представени стека с целочислени данни, съдържащи се във външен файл.

-Сортиране на елементите в стековете по метода чрез прост избор/селекция.

-Запис на изходните резултати във външен файл.

Главна функция main()-с меню за избор на функции и проверка за състоянието на данните

Някви насоки и разяснение? Не трябва да използвам масиви

Е, ако има структура от данни по-неподходяща за сортиране от стек... Значи не мога да разбера от условието, дали четеш два стека с данни от файла или е подсказка за решение т.е. един стек с данни и един за сортирането. Все тая.

Ей ти насоки:

а) кво е тва проста селекция? да не е пряка селекция (selection sort)

б) ако зависеше от мен и ако не е хитруване, "изпомпвам" стека в един списък, сортирам списъка и обратно в стека.

в) иначе ако само стекове са позволени, правя един работен стек, и прехвърлям елементите от единия в другия. всеки път  с един по-малко и намирам последователно най-големия или най-малкия от останалите и ги оставям "отдолу" така, че да е сортиран.

пример. ("върха" на стека е отляво)

итерация 1: Начален Стек: 5, 7, 2, 11, 4, 3 Работен Стек: Празен Максимална стойност: Неизвестна Брой елементи за вадене: Неизвестен

итерация 2: НачаленСтек: Празен Работен Стек: 5, 7, 2, 4, 3   Максимална стойност: 11 Брой елементи за вадене: 5

итерация 3(слагаме 11 "отдолу" в началния стек): НачаленСтек:  5, 7, 4, 3, 11   Работен Стек:  Празен Минимална стойност: 2 Брой елементи за вадене: 4

итерация 4(слагаме 2 "отдолу" в работния стек): НачаленСтек:  11   Работен Стек: 5, 4, 3, 2 Максимална стойност: 7 Брой елементи за вадене: 3

итерация 5(слагаме 7 "отдолу" в началния стек): НачаленСтек:  5, 4, 7, 11   Работен Стек: 2  Минимална стойност: 3 Брой елементи за вадене: 2

итерация 6(слагаме 3 "отдолу" в работния стек): НачаленСтек:  7, 11   Работен Стек:  4, 3, 2 Максимална стойност: 5, Брой елементи за вадене: 1

итерация 6(слагаме 5 "отдолу" в началния стек): НачаленСтек: 5,7, 11   Работен Стек:  4, 3, 2 Минимална стойност: 4, Брой елементи за вадене: 0

и сега (елементи за вадене 0) издърпваме работния в началния стек и е сортиран.

 

Добавка: Тук случайно видях че се е случило да са сортирани елементите още в итерация 4 - та може да се проверява дали не са сортирани елементите в нужния ред при преместването за избягване на излишни итерации.

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

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

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

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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