сортировка по алфавиту

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
Masquerade of heroes
Сообщения: 2
Зарегистрирован: 14 дек 2014, 17:39

14 дек 2014, 17:49

здравствуйте. возникли проблемы с сортировкой по алфавиту, прощу помощи.

задание: вводим курс, группу, номер в списке, фамилию, оценки по четырем предметам. записываем всё это в файл f. далее в файл f2 нужно записать эти же данные, но фамилии отсортировать по алфавиту.

type students = record
kurs : byte;
grup : byte;
numb : byte;
fam : string[15];
pr1, pr2, pr3, pr4 : string[15];
opr1, opr2, opr3, opr4 : byte;
end;

var a : students;
F : text;
F2 : file of students;
n, i : integer;

begin
write('Введите кол-во студентов: ');
readln(n);
assign(F,'G:\pract\zapisi\spisok.doc');
rewrite(F);
with a do
begin
for i:= 1 to n do
begin
write('Введите курс ',i,' студента: ');
readln(kurs);
write('Введите группу ',i,' студента: ');
readln(grup);
write('Введите номер в списке ',i,' студента: ');
readln(numb);
write('Введите фамилию ',i,' студента: ');
readln(fam);
write('Название первого предмета для ',i,' студента: ');
readln(pr1);
write('Оценка по первому предмету для ',i,' студента: ');
readln(opr1);
write('Название второго предмета для ',i,' студента: ');
readln(pr2);
write('Оценка по второму предмету для ',i,' студента: ');
readln(opr2);
write('Название третьего предмета для ',i,' студента: ');
readln(pr3);
write('Оценка по третьему предмету для ',i,' студента: ');
readln(opr3);
write('Название четвертого предмета для ',i,' студента: ');
readln(pr4);
write('Оценка по четвертому предмету для ',i,' студента: ');
readln(opr4);
write(F, a);
end;
end;
close(F);


assign(F2,'G:\ptact\zapisi\alfav.doc');
reset(F);
rewrite(F2);
while not eof(F) do
begin
{сортировка}

end.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

15 дек 2014, 10:42

Рассматриваем сравнение больше/меньше для двух строк
Без оптимизаций и очевидных действий

1. Обычное сравнение строк - если равны, то (строка1 равна строка2), выход
2. Номер символа = 1
3. Если нет такого символа в строке1 - то (строка1 меньше строка2), выход
4. Если нет такого символа в строке2 - то (строка1 больше строка2), выход
5. Если КодСимвола(НижнийРегистр(символ1)) = КодСимвола(НижнийРегистр(символ2)) то (Номер символа = Номер символа + 1), (Переход к строке 3)
6. Если КодСимвола(НижнийРегистр(символ1)) < КодСимвола(НижнийРегистр(символ2)) то (строка1 меньше строка2), выход
7. Если КодСимвола(НижнийРегистр(символ1)) > КодСимвола(НижнийРегистр(символ2)) то (строка1 больше строка2), выход

Далее оборачиваем это все в функцию и реализуем любой известный алгоритм сортировки.
It's a long way to the top if you wanna rock'n'roll
Ответить