Показать сообщение отдельно
Старый 16.05.2014, 22:49   #1 (permalink)
andrew_ryaba
Новичок
 
Регистрация: 30.11.2013
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Pascal. Обмен числами между динамическими списками

Здравствуйте! Помогите пожалуйста. Есть такая задача, которую надо сделать отдельными процедурами для массивов и для линейных динамических списков:
Два массива обмениваются числами так, чтобы в одном оказались только четные значения, а в другом - нечетные значения. Затем привести количество чисел к одинаковой длине путем удаления начальных значений. Исходные данные считываются из текстового файла.
Я написал процедуру для массива, но не могу понять, как реализовать примерно этот же алгоритм, применяя списки?
Код:
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;
andrew_ryaba вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070