Страница 1 из 1
Сортировка массива структур
Добавлено: 16 дек 2009, 20:12
request
Почему-то сортировка не работает. Вообще совсем. Даже не знаю в чем дело, в сортировке или в структуре. Помогите, пожалуйста, исправить.
Код: Выделить всё
typedef struct
{
char name [20];
int group;
int mark[5];
} STUDENT;
Код: Выделить всё
void sort(STUDENT a[])
{
int i,j;
STUDENT p;
for (i=0; i<10; i++)
{for (j=1; j<i; j++)
{
if (strcmpi(a[i].name, a[j].name)>0)
{
p = a[i];
a[i] = a[j];
a[j] = p;
}
}
}
}
Re: Сортировка массива структур
Добавлено: 16 дек 2009, 23:04
L.A.V.
Во первых что в твоем понимании "не работает. Вобще совсем"

:
- не компилится, выдает кучу ошибок;
- программа запускается, осуществляет ввод, вывод массива, но при этом алгоритм сортировки не работает должным образом.
Нужное обвести фломастером.
Во вторых укажи название алгоритма сортировки.
Из того что ты прислал могу дать следующий совет:
Проверь корректность содержимого полей структур, особенно тех полей, которые проверяются функцией strcmpi.
То есть, все ли поля name инициализированы? Строки заканчиваются нуль литерой(\0)? Не находится ли в них мусор?
Re: Сортировка массива структур
Добавлено: 16 дек 2009, 23:35
request
если бы были какие-то другие симптомы, так бы и написал)) все нормально компилится, ни одной ошибки, просто не работает. как будто ее вообще нет. остальное все как часы, заполнение и вывод. строка в нужном поле берется с помощью fgets (то есть должны нулем заканчиваться, если я правильно понимаю?), потом идет проверка чтобы там были только буквы и пробелы.
сортировку кстати пробовал разную, по-моему до нее просто дело не доходит. хотя у меня стаж обучения три недели, я ничего не гарантирую и в полной растерянности.
Re: Сортировка массива структур
Добавлено: 17 дек 2009, 08:52
1nclude
Во первых замечание по твоей структуре - в int mark должна храниться оценка насколько я понимаю, если так то зачем массив из 5?
Во вторых по сортировке,вместо:
попробуй делать вот так

:
Код: Выделить всё
if( strlen(a[i].name) > strlen(a[j].name) )
И я бы на твоём месте заменил пузырёк на быструю сортировку.
Re: Сортировка массива структур
Добавлено: 18 дек 2009, 15:28
IceFlame
Re: Сортировка массива структур
Добавлено: 18 дек 2009, 15:39
L.A.V.
1nclude массив оценок нужен скорее всего для хранения нескольких оценок по предметам, либо несколько итоговых оценок по предмету.
При этом strlen не решит задачи, так как имена студентов, скорее всего должны сортироваться по алфавиту а не по длине имени

.
Проблема в том, что в самом алгоритме сортировки (если это пузырек) ошибка.
Вобщем,
request,
тыц сюда, и смори что не правильно.
Если найдешь ошибку твой код заработает, даю гарантию

При этом изменяя условия в if, ты сможешь сортировать студентов по группам, и по оценкам.
Дерзай, что не понятно будет, спрашивай.
Re: Сортировка массива структур
Добавлено: 19 дек 2009, 13:06
1nclude
L.A.V., ну всё равно хранить оценки по предметам в массиве константной длинны не айс. А если предметов станет больше или меньше?
Циферку поменяем?

Вообщем мало информации о выбранной топикстартером стратегии использования записей о студентах, что бы делать какие либо выводы.
Насчёт сортировки, да, скорее всего я ошибся, раз уж топикстартер применяет strcmpi, то наверное не просто так. Хотя от топикстартера что то нет вестей.