Программа


{ Список }
PROGRAM AirLinerReserver(input,output);
CONST QuantityPlace=5;   { Количество мест в ряду }
      QuantityLine=10;   { Количество рядов в салоне }
TYPE Place=packed array[1..3] of char; { Тип - место }
     LineType=array[1..QuantityPlace] of Place; { Тип - ряд }
     AirLinerType=^LineRec; { Тип - ссылка на ряд }
     LineRec=record          { Тип - элемент списка }
               Line:LineType;
               Next,Pred:AirLinerType
             end;
VAR  AirLiner:AirLinerType; { Самолет }
     P:Place;                { Переменная - место }
PROCEDURE ReservePlase(var F:AirLinerType);  { Процедура резервирования мест }
  Var Buf:AirLinerType; { Буфер для создания элемента списка }
      j:1..QuantityLine; { Счетчик рядов в салоне }
      i:1..QuantityPlace; { Счетчик мест в ряду }
      k:1..3; { Счетчик символов при вводе инициалов }
  Begin
    Randomize;
    F:=nil;  { Сброс ссылки списка }
    for j:=1 to QuantityLine do { Цикл резервирования по самолету }
    begin
      New(Buf); { Создание элемента списка }
      for i:=1 to QuantityPlace do { Цикл резервирования по ряду }
      begin
        for k:=1 to 3 do Buf^.Line[i][k]:=Chr(Random(26)+Ord('A'));
        { Резервирование места: }
        (* Write('Введите инициалы пассажира для места ',QuantityLine-j+1,'/',i,' ');
                                                           { Вывод подсказки }
        for k:=1 to 3 do Read(Buf^.Line[i][k]); { Ввод "пассажира" }
        ReadLn { Пропуск конца строки }  *)
      end;
      { Вставка в список: }
      Buf^.Next:=F;
      Buf^.Pred:=nil;
      if F<>nil then F^.Pred:=Buf;
      F:=Buf
    end
  End;
PROCEDURE ViewAirLiner(F:AirLinerType);  { Процедура просмотра салона }
  Var i:0..QuantityLine; { Счетчик рядов }
      j:1..QuantityPlace; { Счетчик мест в ряду }
  Begin
    i:=0; { Начальное определение счетчика рядов }
    while F<>nil do  { Цикл просмотра салона }
    begin
      i:=i+1;  { Переопределение счетчика рядов }
      Write(i:2,'  '); { Вывод номера ряда }
      for j:=1 to QuantityPlace do Write(' [',F^.Line[j],'] '); { Вывод места }
      WriteLn; { Вывод конца строки }
      F:=F^.Next { Переход к следующему ряду }
    end;
  End;
PROCEDURE GetPlace(F:AirLinerType;L,P:integer;var Answer:Place);
                                          { Процедура выборки значения места }
  var i:integer;  { Счетчик цикла }
  Begin
    for i:=2 to L do F:=F^.Next; { Продвижение по списку до заданного ряда }
    Answer:=F^.Line[P];  { Определение значения места }
  End;
PROCEDURE DisposerList(var L:AirLinerType); { Процедура удаления списка }
  Begin
    if L<>nil then begin   { Если переменная существует, то }
                     DisposerList(L^.NEXT);  { удаление хвоста списка }
                     Dispose(L);             { удаление переменной }
                     L:=nil { Переопределение ссылки }
                   end
  End;
BEGIN
  WriteLn; { Пропуск строки }
  ReservePlase(AirLiner); { Резервирование }
  WriteLn; { Пропуск строки }
  ViewAirLiner(AirLiner); { Просмотр }
  WriteLn; { Пропуск строки }
  GetPlace(AirLiner,7,QuantityPlace div 2 +1,P); { Получение значения места }
  WriteLn('Место ',7,'/',QuantityPlace div 2 +1,': [',P,']'); { Вывод значения места }
  GetPlace(AirLiner,QuantityLine,QuantityPlace div 2 +1,P); { Получение значения места }
  WriteLn('Место ',QuantityLine,'/',QuantityPlace div 2 +1,': [',P,']');  { Вывод значения места }
  DisposerList(AirLiner)
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию