Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

Var Ch : Char;

Begin

While Ch<>'N' Do

Begin {Формируется элемент списка}

New(s2);

s2^.next := s1;

s1 := s2;

Writeln(‘Номер рейса ');

Readln(s2^.n);

Writeln('Пункт прибытия ');

Readln(s2^.Punkt);

Writeln('Дата вылета ');

Readln(s2^.date);

Writeln('Количество билетов ');

Readln(s2^.count);

Writeln те1п('Продолжить?(У/М)');

Readln(Ch);

Ch := Up'case(Ch); {Переход к новому элементу}

End;

End;

Procedure Ochered;

Var Ch : Char;

Begin

While Ch<>'N' Do

Begin {Формируется элемент очереди. Запись в начало (в хвост)}

New(o2);

o2^.next := о1; {Ссылка на следующий элемент}

o1^.Pred := о2; {Ссылка на предыдущий элемент в следующем элементе}

o1:=o2; {о1 - ссылка на первый элемент}

Writeln('Фaмилия ');

Readln(o2^.Fam);

Writeln('Пункт прибытия ');

Readln(o2^.Punkt);

Writeln('Дата вылета ');

Readln(o2^.date);

Writeln('Пpoдoлжить?(Y/N)');

Readln(Ch);

Ch := Upcase(Ch); {Переход к новому элементу}

End;

o2^.pred := Nil; {В первом элементе (в хвосте очереди) предыдущий отсутствует}

End;

Procedure Pokupka;

Label Met1;

Begin

o2 := оЗ; {Выбираем последний элемент очереди}

Writeln ('Фамилия ',o2^.Fam);

Writeln('Пункт прибытия ‘,o2^.Punkt);

Writeln(‘Дата вылета ',o2^.date);

s2 := s1; {Перебираем все элементы списка}

While s2 <> Nil Do

Begin

if (o2^.date = s2^.date) and {Если дата и пункт прибытия совпадают} (o2^.Punkt = s2^.Punkt) and

(s2^.count <> 0) Then {и билеты имеются в наличии,}

Begin {то соответствующее сообщение и}

Writeln ('Билет продан. Удаляетесь из очереди!');

{количество билетов уменьшается на 1}

s2^.count := s2^.count - 1;

Goto Met1;

End;

s2 := s2^.next; {Переход к следующему элементу списка}

End;

{Для этого пассажира билета нет}

o3^.next := о1; о1 := оЗ; o1^.pred := Nil; {Переставляем в хвост очереди}

Met1:o3 := o2^.pred; {Пассажир удаляется из очереди}

o3^.next := Nil;

Dispose(o2);

End;

Procedure Vspisok;

{Вывод списка начинается с первого элемента списка}

Begin

s2 := s1;

While s2 <> Nil do

Begin

Writeln(‘Номер рейса \s2\n); Writeln('пункт прибытия ',s2^.Punkt);

Writeln('Дата вылета ',s2^.date);

Writeln ('Количество билетов ',s2^.count);

s2 := s2^.next;

End;

End;

Procedure Vochered;

{Вывод очереди с последнего элемента очереди (с головы)}

Begin

о2 := оЗ;

While 02<>Nil Do

Begin

Writeln('Фамилия ',o2^.Fam);

Writeln('Пункт прибытия ',о2^. Punkt);

Writeln('Дата вылета ',o2^.date);

о2 := о2 .pred;

End;

End;

Begin {Исполняемая часть программы}

Repeat {Цикл выбора пункта меню}

For i := 1 to 8 do

Writeln(i:7,' ':5,men[i]); {Вывод меню}

Write('Bauje желание ?');

Readln(a); {Ввод номера пункта меню}

Case a of

  1. : Begin New(s1); s1 := Nil; Spisok; End; {Формируем новый список}

  2. : Spisok; {Добавляем элемент в список}

  3. : Begin {Формируем новую очередь}

New(o3); New(o1); o1:=Nil;

New(o2); оЗ :=o2; o2^.next := o1; o1 := o2;

{оЗ - указатель на последний элемент}

Writeln('Фaмилия ');

Readln(o2^.Fam);

Writeln('Пункт прибытия ');

Readln(o2^.Punkt);

Writeln('flaTa вылета ');

Readln(o2^.date);

Ochered;

End;

  1. : Ochered; {Добавляем элемент в очередь}

  2. : Pokupka; {Обеспечим билетом последнего в очереди}

  3. : Vspisok; {Выводим содержимое списка}

  1. : Vochered; {Выводим содержимое очереди}

End;

Until a = 8; {8 - конец работы}

End.