zadach419.PAS

{* Задача 419 *}

Unit ZADACH419;
Interface
Implementation
Begin
 writeln('Данные о пассажирах включают фамилию пассажира номер места и общий вес . багажа Программа должна выполнять вывод данных о пассажире по указанной фамилии находить пассажиров имеющих багаж с минимальным и максимальным весом и выводить данные о них в табличной форме');
End.

Program zadach419;
Uses crt; {Подключаем модуль crt}
Type {создаем новый тип переменной записи}
  RecPas = Record       PasFio : String;
  NMes, VesBag : word;
  End;
Var {* Объявление переменных *}
  PasArr                 : Array[byte] Of RecPas;
  Pmenu                  : byte; {выбор пункта меню}
  i                      : word; {счетчик}
  {Процедура для формирования шапки результирующих таблиц}
  {очищаем экран}
  {Процедура для завершения результирующих таблиц}
  {Задерживаем экран}
  {Процедура для вывода основной таблицы}
Procedure WriteScr(Fio : String;
Nmes                   : word);
VesBag                 : word);
Var {* Необходимые переменные *}
  StrNmes      : String;
  StrVesBag    : String{переводим число в строку}
  {Выводим результат на экран}
  writeln('| ' : 19 - length(Fio), Nmes, ' | ';
  Fio          : 19 - length(Fio), Nmes, ' | ';
  ' | '        : 19 - length(Fio), Nmes, ' | '{процедура для ввода списка пассажиров в массив}
Var {* В работе нам потребуются переменные: *}
  yn                           : char; {Запускаем цикл для ввода исходных данных}
  {очищаем экран}
  i := i + 1; {увеличиваем счетчик на 1}
  {Запрашиваем исходные данные}
  write('Введите ФИО пассажира : ');
  write('Введите номер места   : ');
  write('Введите вес багажа    : '); {Запрашиваем о добавлении записи}
  {Цикл заканчивается если введено n}
  {Процедура для поиска пассажира по фамилии}
Var {* В работе нам потребуются переменные: *}
  Fio                              : String;
  t                                : byte; {Очищаем экран}
  {Ввод исходных данных}
  write('Введите фамилию пассажира : '); {Процедура для вывода на экран шапки результирующей таблицы}
  {Цикл для перебора всех записей в массиве на поиск совпадений}
For t := 1 To i Do{Если совпадение найдено то выводим запись в результирующую таблицу}
  {Процедура для вывода результирующей линии в таблице}
{Процедура для поиска по багажу}
Procedure SearhPasBag(par        : String[3]); {Параметр par может принимать значения либо min либо max}
Var {* Необходимые переменные *}
  t       : byte;
  SearhEl : word;
  Begin
If i > 0 Then
Begin
  SearhEl := PasArr[1].VesBag; {В зависимости от параметра ищем максимальный/минимальный элемент}
  If par = 'max' Then
  Begin
    For t := 1 To i Do {Сравниваем по полю записи VesBag}
      If PasArr[t].VesBag > SearhEl Then
        SearhEl := PasArr[t].VesBag;
  End;
  Else Begin
    For t := 1 To i Do {* Увеличиваем t от 1 до i с шагом 1 *}
      If PasArr[t].VesBag0 Then {если счетчик 0}
        For t := 1 To i Do {Выводим все записи массива }
          with PasArr[t] Do
          Begin
            WriteScr(PasFio, Nmes, VesBag); {на экран}
          End;
  WriteScrEnd(); {завершаем таблицу}
End;
Begin
  i := 0;
  Repeat     clrscr; {Основное меню}
    writeln('Выбирите действие: ');
  writeln; {* Пропускаем одну строку *}
  writeln('1. Ввод нового пассажира.');
  writeln('2. Вывод списка пассажиров.');
  writeln('3. Поиск пассажиров по фамилии');
  writeln('4. Вывод списка пассажиров с максимальным весом багажа');
  writeln('5. Вывод списка пассажиров с минимальным весом багажа');
  writeln('0. Выход');
  writeln; {выывод сообщения и ввод пункта меню}
  write('Выбирите пункт меню и нажмите ENTER: ');
  readln(Pmenu); {В зависимости от выбранного пункта меню запускаем соответсвующую процедуру}
  Case Pmenu Of        1 : InputPas();
    2 : SearhPasAll();
  3 : SearhPasFio();
  4 : SearhPasBag('max');
  5 : SearhPasBag('min');
End;
Until Pmenu = 0; {цикл заканчивается если выбран 0}
writeln; {задерживаем экран}
writeln('Выполнение программы завершено! Для выхода нажминте любую клавишу...');
Repeat
  Until keypressed; {* Ждем нажатия клавиши *}
  End..