Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка по алфавиту
Форум «Всё о Паскале» > 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 лет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.