Сформировать список из двух других по правилу - Turbo Pascal
Формулировка задачи:
Используя описание
список = ^ звено
звено = record
элемент: тип элемента
следующий список
end
Написать программу , которая формирует список L, включив в него по одному разу элементы, которые входят хотя бы в один из списков L1 и L2.
Решение задачи: «Сформировать список из двух других по правилу»
textual
Листинг программы
type
tList = ^tLink;
tLink = record
N : Real;
X : tList;
end;
var
L, L1, L2, Cur, T, S : tList;
i : Integer;
begin
L1 := nil;
L2 := nil;
L := nil;
Randomize;
for i := 1 to 20 do
begin
New(Cur); Cur^.N := Random(19) - 9; Cur^.X := L1; L1 := Cur;
end;
for i := 1 to 20 do
begin
New(Cur); Cur^.N := Random(19) - 9; Cur^.X := L2; L2 := Cur;
end;
Write('L1 = '); Cur := L1; while Cur <> nil do begin Write(Cur^.N:3); Cur := Cur^.X; end; WriteLn;
Write('L2 = '); Cur := L2; while Cur <> nil do begin Write(Cur^.N:3); Cur := Cur^.X; end; WriteLn;
Cur := L1;
while Cur <> nil do
begin
T := L; i := 0; while (T <> nil) and (i = 0) do if T^.N = Cur^.N then i := 1 else T := T^.X;
if i = 0 then begin New(T); T^.N := Cur^.N; T^.X := nil; if L = nil then L := T else S^.X := T; S := T; end;
Cur := Cur^.X;
end;
Cur := L2;
while Cur <> nil do
begin
T := L; i := 0; while (T <> nil) and (i = 0) do if T^.N = Cur^.N then i := 1 else T := T^.X;
if i = 0 then begin New(T); T^.N := Cur^.N; T^.X := nil; if L = nil then L := T else S^.X := T; S := T; end;
Cur := Cur^.X;
end;
Write(' L = '); Cur := L; while Cur <> nil do begin Write(Cur^.N:3); Cur := Cur^.X; end; WriteLn;
end.
Объяснение кода листинга программы
- Создается тип данных
tList, который представляет собой указатель на структуруtLink. В структуреtLinkесть два поля: целое числоNи указатель на списокX. - Создаются три переменные типа
tList: L, L1 и L2. Изначально все они равны нулю. - Задается начальное значение для случайной генерации чисел от 1 до 19.
- Запускается цикл, который повторяется 20 раз. В каждой итерации цикла создается новый объект
tLinkи присваивается одной из переменных L, L1 или L2. ЗначениеNв новом объекте генерируется случайным образом от 1 до 19. ЗначениеXв новом объекте устанавливается равным значению переменной, которая была использована для создания нового объекта. - После завершения каждой итерации цикла, значения переменных L, L1 и L2 обновляются, чтобы отразить добавление нового объекта в список.
- В конце программы выводятся значения переменных L, L1 и L2.