Сформировать списки 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.
Объяснение кода листинга программы
- В данной программе создаются два списка: List и List1.
- В цикле для каждого элемента списка List вызывается функция AddList, которая добавляет элемент в список List1 или List2 в зависимости от значения элемента.
- В цикле для каждого элемента списка List вызывается функция AddBegList, которая добавляет элемент в начало списка List1 и List2.
- Затем вызывается функция PrintList для вывода содержимого списков List1 и List2.
- В конце программы вызывается функция FreeMem для освобождения памяти, выделенной под списки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д