Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ сортировка пузырьком, что за ошибка

Автор: Дёнис 19.12.2006 21:37

Всем привет, подскажите пожалуйста как исправить данную ошибку.. Это программа на сортировку методом пузырька.. код вроде верный, а ругается на неописанную константу вроде.. dry.gif


#include <stdio.h>
#include <math.h>
int main ()
{
int size;
printf("size=");
scanf("%d",&size);
{ int i, j, bound=size-1, exchange;
double row[size], temp;
for (i=0; i<size; i++)
row[i]=i/(2.0+i)-sin(i*i/(2.0+i));
for (i=0; i<size; i++)
printf("%crow[%d]=%5.2f",i%4?'\t':'\n',i,row[i]);
do {
for (j=0, exchange=0; j < bound; j++)
if (row[j]>row[j+1])
{ temp=row[j];
row[j]=row[j+1];
row[j+1]=temp;
exchange=j+1;
}
bound=exchange-1;
}
while (bound > 0);
printf("\nResult:");
for (i=0; i<size; i++)
printf("%crow[%d]=%5.2f",i%4?'\t':'\n',i,row[i]);
}
return 0;
}

Автор: Michael_Rybak 19.12.2006 21:46

gcc компилит нормально.

Автор: volvo 19.12.2006 22:16

int size;
не может использоваться как размер массива, это переменная, а должна быть - константа, о чем тебе и говорит компилятор...

Автор: Michael_Rybak 19.12.2006 22:20

А вот кстати gnu нормально работает с неконстантными размерами. Очень был удивлен, обнаружив недавно.

Автор: volvo 19.12.2006 22:26

Это только GNU имеет такое расширение... Вообще-то, это отклонение от стандарта, поэтому я не пользуюсь этой вещью...

Автор: Michael_Rybak 19.12.2006 22:27

+1, я тоже не пользуюсь.

Автор: Дёнис 19.12.2006 22:53

спасибо volvo сейчас буду исправлять.. good.gif

Michael_Rybak объясните деревенскому что есть gcc lol.gif

Автор: volvo 19.12.2006 22:55

ГНУтый компилятор:
http://gcc.gnu.org/

Автор: Дёнис 19.12.2006 23:07

пасиба, буду знать... прогу пока так и не смог исправить до работоспособности почему-то... сейчас буду в вашем gcc пробовать)

Автор: volvo 19.12.2006 23:16

Цитата(Дёнис @ 19.12.2006 18:07)
прогу пока так и не смог исправить до работоспособности почему-то...
Все, что тебе нужно было сделать - заменить массив на динамический (при использовании С++ это будет выглядеть так):


// double row[size], temp; /* Эта строка не нужна */
double *row, temp;
row = new double[size]; // Выделяем место под массив

// после окончания работы с массивом не забудь его освободить ...


Если ты используешь чистый С - соответственно, вместо new используй malloc ...

Автор: Дёнис 20.12.2006 0:11

всё, исправил, спасибо огромное volvo сам бы в этом месте не додумался бы наверно.. blum.gif