type tSpis = ^rSpis; rSpis = record N : Integer; Next : tSpis; end;
var First : tSpis; L : Word;
procedure IniSpis(L : Word);
var Cur, Last : tSpis;
begin
while L > 0 do begin New(Cur); Cur^.N := Random(201) - 100; Cur^.Next := nil; if First = nil then First := Cur else Last^.Next := Cur; Last := Cur; Dec(L); end;
end;
procedure OutSpis;
var Cur : tSpis;
begin
Cur := First; while Cur <> nil do begin Write(Cur^.N, #32); Cur := Cur^.Next; end; WriteLn;
end;
procedure DelOdd;
var Cur, Pred, Tmp : tSpis;
begin
Pred := nil; Cur := First; while Cur <> nil do if Odd(Cur^.N) then if Cur = First then begin First := Cur^.Next; Dispose(Cur); Cur := First; end else begin Tmp := Cur; Cur := Cur^.Next; if Pred <> nil then Pred^.Next := Cur; Dispose(Tmp); end else begin Pred := Cur; Cur := Cur^.Next; end;
end;
function Summ : Longint;
var Cur : tSpis; S : Longint;
begin
Cur := First; S := 0; while Cur <> nil do begin S := S + Cur^.N; Cur := Cur^.Next; end; Summ := S;
end;
begin
First := nil; Randomize; Write('Число элементов списка: '); ReadLn(L);
IniSpis(L); WriteLn('Список заполнен случайными числами: '); OutSpis;
DelOdd; WriteLn('Удалены все нечётные числа: '); OutSpis;
WriteLn('Сумма чётных чисел равна ', Summ);
end.