Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка по алфавиту
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ChesterBennington
здравствуйте.
задание:
"Стрyктyра записи исходного документа – типизированный файл: курс, группа, номер в списке, фамилия, оценки по 4 предметам. Напечатать в выходном докyменте:Упорядоченный по алфавиту список студентов указанной группы."
возникла проблема со второй половиной задания и сортировкой по алфавиту.
прошу помощи в написании программы или описание подробного алгоритма работы.
заранее благодарю.

const m=100;
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, j, numgrup : integer;
stud : array [1..m] of students;

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
writeln('введите номер группы');
readln (numgrup);

end;
end.

Федосеев Павел
Думаю, что тут тебе будут нужна динамическая структура типа "список".

А структура программы, видимо, потребует изменения:
1. Меню с выбором (ввод в файл, вывод списка, выход)
2. Если ввод, то вызов подпрограммы ввода (у тебя уже готовый кусок кода, нужно только в виде поппрограммы оформить).
3. Если вывод, то
1) ввод номера группы
2) открытие файла
3) считываем данные на одного студента
4) если он не из нужной группы, то переход к п. 3)
5) если из нужной, то добавляем данные о нём в сортированный динамический список
6) переход к п.3)
7) когда чтение из файла завершено, то распечатываем по-порядку содержимое динамического списка
8) очищаем список

Можно просто считать в список, а потом отсортировать.

Здесь в FAQ есть пояснения о дин. структурах. Ссылка на FAQ выделена красным цветом вверху страницы.
Также есть примеры на форуме - это частые вопросы.

Сразу попробую предостеречь от частой ошибки, при создании типа для элемента списка все поля запихивают в один record, а лучше разделить эти вещи, например, так
type
PLink = ^TLink;
TLink = record
Info: students;
Next: PLink;
end;

Объём писанины велик. Потому - мне лень. Но твой код помогу подправить.

PS Ещё может быть у тебя тема "Внешняя сортировка", тогда нужно сортировать в файле. Это несколько сложнее, но алгоритмы существуют уже около 50 лет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.