Здравствуйте! Помогите пожалуйста. Есть такая задача, которую надо сделать отдельными процедурами для массивов и для линейных динамических списков:
Два массива обмениваются числами так, чтобы в одном оказались только четные значения, а в другом - нечетные значения. Затем привести количество чисел к одинаковой длине путем удаления начальных значений. Исходные данные считываются из текстового файла.
Я написал процедуру для массива, но не могу понять, как реализовать примерно этот же алгоритм, применяя списки?
Код:
procedure MASSIV;
type aa=array [1..n] of integer;
var A,B: aa;
i: integer;
ka,kb: integer;
procedure SOZDANIEMASSIVA(var C:aa; var kolzap:integer);
begin
clrscr;
i := 0;
Reset(f1);
while not seekeof(f1) do
begin
inc(i);
read(f1, C[i]);
end;
kolzap := i;
end;
procedure VIVODMASSIVA(txt: string; C:aa; k:integer);
var
i: integer;
begin
writeln(txt);
for i := 1 to k do
write(C[i]:3);
writeln;
end;
procedure RABOTAMASSIVA;
var k,i,j:integer;
procedure urezaniemassiva;
var j,i: integer;
begin
if ka<kb then
for j:=1 to (kb-ka) do begin
for i:=1 to n-1 do
B[i]:=B[i+1];
Dec(kb);
end else
for j:=1 to (ka-kb) do begin
for i:=1 to n-1 do
A[i]:=A[i+1];
Dec(ka);
end;
end;
begin
j:=kb+1;
i:=1;
while i <= ka do begin
if (A[i]mod 2 = 0) then begin
B[j]:=A[i];
Inc(j);
for k:=i to n-1 do begin
A[k]:=A[k+1];
end;
Dec (ka);
end else Inc(i);
end;
kb:=j-1;
j:=ka+1;
i:=1;
while i <= kb do begin
if (B[i]mod 2 = 1) then begin
A[j]:=B[i];
Inc(j);
for k:=i to n-1 do begin
B[k]:=B[k+1];
end;
Dec (kb);
end else Inc(i);
end;
ka:=j-1;
urezaniemassiva;
end;
begin
SOZDANIEMASSIVA(A,ka);
SOZDANIEMASSIVA(B,kb);
VIVODMASSIVA('Созданный массив A',A,ka);
VIVODMASSIVA('Созданный массив B',B,kb);
RABOTAMASSIVA;
VIVODMASSIVA('После обработки А',A,ka);
VIVODMASSIVA('После обработки В',B,kb);
Writeln('Enter-Return to Main Manu');
Readln;
end;