Сформировать списки list1 и list2 - Pascal

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

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

Помогите пожалуйста решить задачу. Со списками вообще беда. Сформировать списки List1 List2 из списка List по следующему правилу: в список List1 занести порядковые номера положительных компонентов, а в список List2 отрицательных, считая считая от начала список List. В начало списка List1 и в конец List2 добавить порядковые номера нулевых компонентов списка List.

Решение задачи: «Сформировать списки list1 и list2»

textual
Листинг программы
program ListProg;
uses
  crt;
type
  PNode = ^Node;
  Node  = record
  Data : integer;
  Next : PNode;
  end;
  TList = record
  First, Last : PNode;
  end;
procedure InitList(var aList : TList);
begin
  aList.First := nil; aList.Last := nil;
end;  
procedure AddList(var aList : TList; a : integer);
var PElem : PNode;
begin
  New(PElem);
  PElem^.Data := a;
  PElem^.Next := nil;
  if aList.First = nil then
   begin
    aList.First := PElem;
    aList.Last := aList.First;
   end
  else
   begin
    aList.Last^.Next := PElem;
    aList.Last := PElem;
   end;   
  aList.Last^.Next := nil; 
end;
procedure AddBegList(var aList : TList; a : integer);
var PElem : PNode;
begin
  New(PElem);
  PElem^.Data := a;
  PElem^.Next := nil;
  if aList.First = nil then
   begin
    aList.First := PElem;
    aList.Last := aList.First;
    aList.Last^.Next := nil; 
   end
  else
   begin
    PElem^.Next := aList.First;
    aList.First := Pelem;
   end;   
end;
procedure PrintList(aList : TList);
begin
  if aList.First = nil then begin
   writeln('List empty.');
   exit;
  end;
  while aList.First <> nil do begin
   write(aList.First^.Data:4);
   aList.First := aList.First^.Next;
  end;
  writeln;
end;
procedure FreeMem(aList : TList);
var PElem : PNode; 
begin
  while aList.First <> nil do begin
   PElem := aList.First;
   aList.First := aList.First^.Next;
   dispose(PElem);  
  end;
end;
var
  List1, List2, List : TList;
  M, i : integer;
  PElem : PNode;
begin
  clrscr;
  write('Количество элементов списка List : '); readln(M);
  InitList(List);
  randomize;
  for i := 1 to M do AddList(List,random(51)-25);
  writeln('List : ');
  PrintList(List);
  InitList(List1);
  InitList(List2);
  i := 0;
  PElem := List.First;
  while PElem <> nil do begin
   inc(i);
   if PElem^.Data > 0 then AddList(List1,i)
   else if PElem^.Data < 0 then AddList(List2,i);
   PElem := PElem^.Next;
  end;
  i := 0;
  PElem := List.First;
  while PElem <> nil do begin
   inc(i);
   if PElem^.Data = 0 then begin 
   AddBegList(List1,i);
   AddList(List2,i);
   end;
   PElem := PElem^.Next;
  end;
  writeln('List1 : ');
  PrintList(List1);
  writeln('List2 : ');
  PrintList(List2);
  FreeMem(List);
  FreeMem(List1);
  FreeMem(List2);
  readln;
end.

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

  1. В данной программе создаются два списка: List и List1.
  2. В цикле для каждого элемента списка List вызывается функция AddList, которая добавляет элемент в список List1 или List2 в зависимости от значения элемента.
  3. В цикле для каждого элемента списка List вызывается функция AddBegList, которая добавляет элемент в начало списка List1 и List2.
  4. Затем вызывается функция PrintList для вывода содержимого списков List1 и List2.
  5. В конце программы вызывается функция FreeMem для освобождения памяти, выделенной под списки.

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


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

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

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