program Project1;
type
(*Тип, описывающий элемент списка.*)
TPElem = ^TElem;
TElem = record
Data : Integer;
PNext : TPElem;
end;
(*Тип, описывающий список.*)
TList = record
PFirst : TPElem;
PLast : TPElem;
end;
(*Процедуры для работы со списком.*)
(*Удаление всего списка из памяти и инициализация.*)
procedure ListFree(var aList : TList);
var
PNext, PDel : TPElem;
begin
if aList.PFirst = nil then Exit;
PNext := aList.PFirst;
while PNext <> nil do begin
PDel := PNext;
PNext := PNext^.PNext;
Dispose(PDel);
end;
aList.PFirst := nil;
aList.PLast := nil;
end;
(*Добавление элемента в конец списка.*)
procedure ListAdd(var aList : TList; const aPElem : TPElem);
begin
if aPElem = nil then Exit;
aPElem^.PNext := nil;
if aList.PFirst = nil then begin
aList.PFirst := aPElem;
aList.PLast := aPElem;
end else begin
aList.PLast^.PNext := aPElem;
aList.PLast := aPElem;
end;
end;
var
S : String;
i, Num, Code : Integer;
PElem, PNext : TPElem;
List1, List2 : TList;
begin
(*Инициализация списков.*)
ListFree(List1);
ListFree(List2);
repeat
(*Ввод элементов первого списка.*)
Writeln('Введите целые числа в первый список.');
Writeln('Для прекращения ввода введите знак отличный от: [''-'', ''+'', ''0''..''9''].');
repeat
Readln(S);
Val(S, Num, Code);
if Code = 0 then begin
New(PElem);
PElem^.Data := Num;
ListAdd(List1, PElem);
end;
until Code <> 0;
(*Перебор элементов первого списка и составление второго списка.*)
PNext := List1.PFirst;
i := 0;
Num := 0;
while PNext <> nil do begin
Inc(i);
if i mod 2 <> 0 then begin
Num := PNext^.Data;
end else begin
New(PElem);
PElem^.Data := Num - PNext^.Data;
ListAdd(List2, PElem);
Num := 0;
end;
PNext := PNext^.PNext;
end;
(*Показываем на экране элементы второго списка.*)
Writeln('Элементы второго списка:');
PNext := List2.PFirst;
i := 0;
while PNext <> nil do begin
Inc(i);
if i > 1 then Write(', ');
Write(PNext^.Data);
PNext := PNext^.PNext;
end;
if i = 0 then Write('Второй список пуст.');
Writeln;
(*Удаление списков из памяти.*)
ListFree(List1);
ListFree(List2);
Writeln('Повторить - Enter. Выход - любой символ + Enter.');
Readln(S);
until S <> '';
end.
Похожие записи/страницы:
- Составить программу, которая формирует список, добавляет в него произвольное количество компонент, выполняет…
- Написать программу, которая формирует стек, осуществляет добавление элементов в стек, удаление элементов по…
- Пример работы с динамическим списком (добавление, удаление, вывод ) - Pascal(Паскаль)
- Описать процедуру или функцию, которая переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы…
- Подсчитать в списке количество слов, содержащих цифры, а затем удалить все цифры списка - Pascal(Паскаль)
- Дан список вещественных чисел. Написать функцию переноса в начало его последнего элемента - Pascal(Паскаль)
- Используя описание: список = ^ звено; звено = record элемент: тип элемента; следующий: список; end Написать…
- Описать функцию, подсчитывающую количество слов списка L, которые начинаются с той же литеры, что и следующее…