Динамические списки - некорректный вывод - Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте господа. Спасибо вашему форуму и всем в частности, многое почерпнул тут и не возникало необходимости задавать "глупые вопросы". Но мой черёд настал, поведайте мне, что я делаю не так, списки L1 И L2 выводятся только последними элементами.
type
  Link = ^Node;
  Node = record
    X: integer;
    Next: Link;
  end;
 
var
  L, l1, l2: link;
 
procedure input(var L: link);
var
  p: link;
begin
  write('Введите значения через пробел: ');
  if eoln then {интересная функция - end of line}
    L := nil
  else
  begin
    new(p); 
    read(p^.x);
    L := p;
    while not eoln do
    begin
      new(p^.next); 
      read(p^.next^.x );
      p := p^.next
    end;
    p^.next := nil
  end;
  readln
end;
 
procedure output(L: link);
begin
  write('Список L =>    ');
  while L <> nil do
  begin
    write(L^.x);
    L := L^.next
  end;
  writeln
end;
 
procedure split(L: link; var L1, L2: link);
var
  k: link;
begin
  L1 := nil;L2 := nil;
  while L <> nil do 
  begin
    new(k);
    k^.x := L^.x;
    if odd(L^.x) then begin
      if L1 <> nil then L1^.next := k;
      L1 := k;
    end else begin
      if L2 <> nil then L2^.next := k;
      L2 := k;
    end;
    L := L^.next;
  end;
end;

begin
  input(L);
  output(L);
  {dispose(L);}
  split (L, L1, L2);
  output (L1);
  output (L2);
end.
Написать функцию, которая использует исходный список L и создает два новых списка L1 и L2. L1 содержит нечетные числа, а L2 – четные делал по образу и подобию, но в процедуре split я явно ошибся

Решение задачи: «Динамические списки - некорректный вывод»

textual
Листинг программы
function HeapFunc(Size: Word): Integer; far;
begin
  HeapFunc:=1;
end;
var p: Pointer;
begin
  HeapError:=@HeapFunc;
  WriteLn('MemAvail: ',MemAvail,', MaxAvail: ',MaxAvail);
  repeat GetMem(p,1024*8) until p=nil;
  WriteLn('MemAvail: ',MemAvail,', MaxAvail: ',MaxAvail);
end.

Объяснение кода листинга программы

  1. Функция HeapFunc принимает один параметр Size, который представляет собой размер динамического списка, и возвращает целочисленное значение, представляющее ошибку в случае, если размер списка превышает доступное количество памяти.
  2. Переменная HeapFunc инициализируется значением 1, которое, вероятно, является идентификатором функции или обработчика ошибок.
  3. Переменная p инициализируется указателем на функцию HeapFunc.
  4. Переменная HeapError инициализируется адресом функции HeapFunc.
  5. Выводится сообщение с информацией о доступной и максимальной доступной памяти.
  6. Запускается цикл repeat, который запрашивает у системы память до тех пор, пока не будет выделено 1024 байт памяти.
  7. После каждого выделения памяти выводится сообщение с информацией о доступной и максимальной доступной памяти.
  8. Конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы