сама задача такая: Задана строка, содержащая вещественные числа (максимум 20 чисел). Упорядочить целые числа в строке по убыванию.
ну вот, если вводить так:
{char str[6]; float a[20]; int i=0; while(1) { printf("vvedite cislo"); gets(str); if (str[0]==0) break; float c; sscanf(str,"%lf",&c); if ... и здесь должно быть условие, что число целое, наверное
а дальше что делать? создавать массив с этими числами и там сортировать или как?
видела в Интернете решение этой задачи, но что-то там все непонятно. спасибо)
volvo
17.12.2010 5:32
Стоп... Ты выделение неправильно сделала
Цитата
Задана строка, содержащая вещественные числа (максимум 20 чисел). Упорядочить целые числа в строке по убыванию.
Так что в строке и что сортировать?
Lapp
17.12.2010 8:11
Цитата(volvo @ 17.12.2010 1:32)
Стоп... Ты выделение неправильно сделала Так что в строке и что сортировать?
Ну, целые - тоже вещественные. Можно предположить, что сртировать нужно те, у которых нулевая дробная часть. Но все равно неясно - что делать с остальными? оставить на местах?..
*оля*
17.12.2010 15:34
как я понимаю, не целые должны на местах остаться, а целые нужно упорядочить. только можно ли упорядочить их прямо в строке? если их отдельно записывать в массив, то мы же уже не будем потом знать на какое место их вставлять в строку.
а как определить, что у числа нулевая дробная часть?
volvo
17.12.2010 15:56
Цитата
можно ли упорядочить их прямо в строке?
Скорее всего - можно. Надо попробовать. А если нельзя, то придется хранить числа в отдельном массиве, а также хранить где-то позицию начала того или иного числа (чтобы потом восстановить исходную строку)...
Цитата
а как определить, что у числа нулевая дробная часть?
double x; if(x == (int)x) ...
?
*оля*
17.12.2010 16:42
{double a[20]; int i=0; int n=0; while (1){ char str[6]; printf("vvedite cislo"); gets(str); if(str[0]==0) break; double c; sscanf(str, "%lf", &c); a[i]=c; i+=i; } n=i; for (int j=0; j<=n; j++) {printf("%lf ", a[j]);} return 0; }
а что здесь неправильно? почему-то не не присваиваются элементам массива вводимые числа.
ой, что-то я c типами напутала, сейчас исправлю
volvo
17.12.2010 16:58
Чтение неправильное. Все проще гораздо:
int n, size = 0; // Вводишь всю строку s, а потом ее разбираешь:
p = s; // Чтоб не портить основную строку while((i = sscanf(p, "%lf%n", &a[size], &n)) == 1) { size += 1; p += n; }
volvo
17.12.2010 22:08
В общем, добрался я до компилятора, наконец, поборол свою лень запустить Code::Blocks