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