Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2008, 13:46   #1
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию Сортировка массива структур

есть массив структур,
struct {
char name[];
int nomer;
int golos;
int mesto;
} pesni[5];
в ходе работы программы переменная golos меняется. как отсортировать по порядку (по убыванию) эти структуры? чтобы результат этой сортировки(т.е. вот этот порядок по перемен. golos) записался в перем. mesto.
я пробывал следущее
Код:
view plaincopy to clipboardprint?
for(ar=0;ar<5; ar++)
for(k=0;k<5-1;k++)
{
if (pesni[k].golos<pesni[k+1].golos)
{
max=pesni[k+1].mesto;
pesni[k+1].mesto=pesni[k].mesto;
pesni[k].mesto=max;
}
}
// printf("\n mesto %c %c",pesni[0].mesto,pesni[2].mesto);
// fprintf(fp,"\n\n%c %d",pesni[0].mesto,pesni[0].golos);
// fprintf(fp,"\n%c %d\n\n",pesni[2].mesto,pesni[2].golos); проверка
}
отсортировать методом пузырька, но т.к сравниваю я по golos, а менять мне надо mesto, то ниче не получилось ай нид хелп...

ну вот в структуре 2 перем.: golos и mesto. изначально в mesto записаны номера структур (т.к. это массив структур)
потом golos меняется, например:
pesni[0].golos=4; - pesni[0].mesto=1;
pesni[1].golos=2; - pesni[1].mesto=2;
pesni[2].golos=7; - pesni[2].mesto=3

а места (mesto) должны назначится в соответствии с этим, т.е.
pesni[0].golos=4; - pesni[0].mesto=2;
pesni[1].golos=2; - pesni[1].mesto=3;
pesni[2].golos=7; - pesni[2].mesto=1;

ну вот что-то типа того...
arturka вне форума Ответить с цитированием
Старый 21.06.2008, 14:15   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
for(ar=0;ar<5; ar++)
for(k=0;k<5-1;k++)
{
if (pesni[k].golos<pesni[k+1].golos)
{
max=pesni[k+1].mesto;
pesni[k+1].mesto=pesni[k].mesto;
pesni[k].mesto=max;
}
}
Сортируйте не место, а всю запись.
for(ar=0;ar<5; ar++)
for(k=0;k<5-1;k++)
{
if (pesni[k].golos<pesni[k+1].golos)
{
max=pesni[k+1];
pesni[k+1]=pesni[k];
pesni[k]=max;
}
}
А потом в цикле месту присваивайте порядковый номер записи.
max должно быть типа запись.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива С/С++ Dagget Помощь студентам 1 16.07.2008 12:18
Сортировка массива...? Roberto Помощь студентам 2 11.04.2008 13:32
Сортировка массива RIO Помощь студентам 1 05.04.2008 17:39
Сортировка массива vitalik007 Общие вопросы Delphi 2 22.09.2007 20:04