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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Проблем при компилиране на функции

Featured Replies

Здравейте имам задача със следното условие. На пръв поглед, това което съм написал като код не съдържа грешки. Задачата се компилира и тръгва, но спира след извеждането на масива от двата фор-а в мейна. Не намирам видима причина за това състояние. Ако някой има някаква идея, какво не и е наред, моля да сподели. Благодаря предварително.

/*Да се напишат 4 функции:1 - въвежда по стълбове правоъгълна матрица;2 - установява дали редица от реални числа е растяща3 - слива две, сортирани във възходящ ред редици от реални числа4 - извежда елементите на редицатаКато се използват тези функции да се напише програма,която въвежда по стълбобе правоъгълна матрица от реални числа,слива онези стълбове на матрицата, които са растящи и извежда получената редица.*/#include<stdlib.h>#include<stdio.h>#define size 100void FillByColumns(float a[][size], int rows, int cols){	for(int i=0;i<cols;i++)	{		for(int j=0;j<rows;j++)		{			printf("A[%d][%d]: ",j,i);			scanf_s("%f",&a[j][i]);		}	}}int isProgressive(float a[], int len){	int progressive = 0;	for(int i=0;i<len-1;i++)	{		if(a[i+1]>a[i])		{			progressive=1;		}		else		{			progressive=0;		}	}	return progressive;}void MergeSequence(float seq[], float newSeq[], int *seqIndex, int newSeqIndex){	int j = *seqIndex;	for(int i=0; i<newSeqIndex; i++)	{		seq[j] = newSeq[i];		j++;	}}void PrintSequence(float seq[], int length){	float temp;	for(int i=0;i<length;i++)	{		for(int j=i;j<length;j++)		{			if(seq[i] > seq[j])			{				temp=seq[i];				seq[i]=seq[j];				seq[j]=temp;			}		}	}	for(int i=0;i<length;i++)	{		printf("%d ",seq[i]);	}}void main(){	float arr[size][size];	float sequence[size];	int rows, cols;	int progressiveRow = 0;	int sequenceLength = 0;		do{		printf("Rows: ");		scanf_s("%d",&rows);		printf("Cols: ");		scanf_s("%d",&cols);	}while(((rows<0)||(rows>size))&&((cols<0)||(cols>size)));		FillByColumns(arr,rows,cols);	for(int i=0;i<rows;i++)	{		for(int j=0;j<cols;j++)		{			printf("%2.1f ",arr[i][j]);		}		printf("n");	}	float swap[size];	int k=0;	for(int i=0;i<cols;i++)	{		for(int j=0;j<rows;j++)		{			swap[k]=arr[j][i];			k++;		}		//progressiveRow = isProgressive(swap,cols);		if(isProgressive(swap,cols)==1)		{			MergeSequence(sequence,swap,&sequenceLength,cols);		}		k=0;	}	PrintSequence(sequence,sequenceLength);	system("Pause");}

Сложил си неправилно заглавие. Очевидно проблемът ти е грешка при изпълнение (т.е. логическа), а не грешка при компилация.

Защо реши че програмата ти "спира" след двата for-a? Нямам в момента компилатор за да я пробвам, но директно мога да ти кажа причина, защо след тях програмата няма да изпечата нищо, преди да свърши (вероятно това имаш предвид). Променливата sequenceLength се инициализира в началото на главната функция на 0 и след това не се променя.изобщо. Тъй като функцията printSequence (която май и сортира - смени си именуването или я разбий) взема дължината която ще обработва от нея, просто не прави нищо. Ти вероятно отчакваш mergeSequence да променя sequenceLength, но няма да стане както си го направил. Ползвай вътре или директно *seqIndex, или ако държиш да е с друга променлива (не виждам защо) нека и тя да е указател който да сочи където и seqIndex. Обаче цялата функция ти е грешно написана, мисля. Щом ще сливаш, трябва да започваш от индекса до който си стигнал, а не от 0 всеки път. Също isProgressive няма да работи. Така както е написана ще ти върне резултат базиран само на последните две числа, а не на цялата редица. Логиката за такива проверки е друга. Използвай break, когато проверката за две поредно нарастващи числа не мине - от този момент е ясно, че редицата не е възходяща, няма смисъл да обикаляш до края.

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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