IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Упорядочить целые числа в строке, Pelles C for Windows
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 125
Пол: Женский

Репутация: -  1  +


сама задача такая:
Задана строка, содержащая вещественные числа (максимум 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 ... и здесь должно быть условие, что число целое, наверное


а дальше что делать? создавать массив с этими числами и там сортировать или как?

видела в Интернете решение этой задачи, но что-то там все непонятно.
спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






В общем, добрался я до компилятора, наконец, поборол свою лень запустить Code::Blocks smile.gif

Вот какой бред вышел у меня:
#include <stdio.h>
#include <string.h>

typedef struct _pair
{
unsigned start, finish;
} PAIR;

int main()
{
double arr[20];
PAIR data[20];
unsigned i, j, k, n, counter = 0;
char *p, t[128] = {0}, s[128] = "12.3 11 5.75 42 7.12 14 12 5.77";

p = s;
while((i = sscanf(p, "%lf%n", &arr[counter], &n)) == 1)
{
if(arr[counter] == (int)arr[counter])
{
data[counter].finish = (data[counter].start = p - s) + n;
counter += 1;
}
p += n;
}
data[counter].start = strlen(s);

// Банальный "пузырек"
for(i = 0; i < counter; i++)
{
for(j = counter - 1; j > i; j--)
{
if(arr[j-1] < arr[j])
{
double x;
x = arr[j-1]; arr[j-1] = arr[j]; arr[j] = x;
}
}
}

i = k = 0; p = t;
do
{
while(i <= data[k].start)
{
*p++ = s[i];
i += 1;
}
if(i < strlen(s))
{
int nprint;
nprint = sprintf(p, "%d", (int)arr[k]);
while(i < data[k].finish) i += 1;

p += nprint;
k += 1;
}
else break;
} while(1);

printf("Before: %s\n", s);
printf("After: %s\n", t);
return 0;
}


Вот чего выдает:
Before: 12.3 11 5.75 42 7.12 14 12 5.77
After: 12.3 42 5.75 14 7.12 12 11 5.77

Process returned 0 (0x0) execution time : 0.000 s
Press any key to continue.



Но у этого коде есть один недостаток. Попробуй догадаться, что именно я имею в виду. Если нужны комментарии - добавлю...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.06.2024 20:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name