| Uses Crt;
 |   
 |  
  |  
 |   
 |  
  | Type PList = ^ List;
 |  { описание элемента хранения узла списка и }
 |  
  | List = record
 |  { указателя на узел списка }
 |  
  | info: word; link: plist;
 |   
 |  
  | end;
 |   
 |  
  |  
 |   
 |  
  | var f: PList; cod,n: byte; sum: word;
 |   
 |  
  |  
 |   
 |  
  | Procedure Create1(var first: PList;
 n: byte);
 var p: PList; i: byte;
 begin
 first:=nil;
 |  { first – указатель на первый узел списка }
 { n – количество узлов в списке }
  
 { создание пустого списка }
 |  
  | for i:=1 to n do begin
 |   
 |  
  | new(p);
 |  { создание узла списка }
 |  
  | write(‘Значение инф. поля‘, i, ‘-го элемента списка = ‘);
 |   
 |  
  | readln(p^.info);
 |  { заполнение информационного поля узла }
 |  
  | p^.link:=first;
 |  { установка связи между вставленным узлом и списком }
 |  
  | first:=p;
 |  { новое значение указателя на первый узел }
 |  
  | end;
 end;
 |   
 |  
  |  
 |   
 |  
  | Procedure Print(first: PList);
 |  { просмотр информац. полей узлов списка }
 |  
  | var p: PList; i: byte;
 |   
 |  
  | begin i:=0;
 |   
 |  
  | while (p <> nil) do begin
 |   
 |  
  | inc(i);
 |   
 |  
  | writeln(‘Информационное поле ‘, i, ‘-го элемента списка = ‘, p^.info);
 |   
 |  
  | p:=p^.link;
 |   
 |  
  | end;
 |   
 |  
  | end;
 |   
 |  
  |  
 |   
 |  
  | Procedure Work(first: PList; var s: word);
 |  { суммирование значений информ. }
 |  
  | var p: PList;
 |  { полей узлов списка }
 |  
  | begin s:=0;
 |   
 |  
  | while (p <> nil) do begin
 |   
 |  
  | s:=s+p^.info; p:=p^.link;
 |   
 |  
  | end;
 |   
 |  
  | end;
 |   
 |  
  |  
 |   
 |  
  | Procedure Destroy(var first: PList);
 |  { разрушение списка }
 |  
  | begin
 |   
 |  
  | ...
 |   
 |  
  | end;
 |   
 |  
  |  
 |   
 |  
  | Procedure Message;
 |  { вспомогательная процедура }
 |  
  | begin
 |   
 |  
  | writeln(‘Список пуст‘); write(‘Нажмите любую клавишу‘); readkey
 |   
 |  
  | end;
 |   
 |  
  |  
 |   
 |  
  | begin
 |   
 |  
  | f:=nil;
 |  { первоначально список пуст }
 |  
  | repeat Clrscr;
 |   
 |  
  | writeln(‘1-Создание 2-Просмотр 3–Обработка 4–Разрушение 5-Выход‘);
 |   
 |  
  | write(‘Код действия = ‘); readln(cod);
 |   
 |  
  | case cod of
 |   
 |  
  | 1: begin
 |  { создание списка }
 |  
  | write(‘Количество узлов в списке = ‘); readln(n);
 |   
 |  
  | Сreate(f,n); write(‘Нажмите любую клавишу‘); readkey
 |   
 |  
  | end;
 |   
 |  
  | 2: begin
 |  { просмотр списка }
 |  
  | if f=nil then Message
 |   
 |  
  | else begin
 |   
 |  
  | Print(f); write(‘Нажмите любую клавишу‘); readkey
 |   
 |  
  | end;
 |   
 |  
  | 3: begin
 |  { обработка списка }
 |  
  | if f=nil then Message
 |   
 |  
  | else begin
 |   
 |  
  | Work(f,sum); writeln(‘Сумма значений инф. полей = ‘, sum);
 |   
 |  
  | write(‘Нажмите любую клавишу‘); readkey
 |   
 |  
  | end;
 |   
 |  
  | 4: begin
 |  { разрушение списка }
 |  
  | if f=nil then Message
 |   
 |  
  | else begin
 |   
 |  
  | Destroy(f); writeln(‘Список разрушен‘);
 |   
 |  
  | write(‘Нажмите любую клавишу‘); readkey
 |   
 |  
  | end;
 |   
 |  
  | 5: Destroy(f)
 |  { выход }
 |  
  | end;
 |   
 |  
  | until (cod = 5); Clrscr
 |   
 |  
  | end.
 |   
 |  
  |   |    |    |    |    |    |    |