| 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.
|
|
| | | | | | | |