Вопрос № 173221: мм. вопрос следующий, точнее задание: Нужен код на паскале, с использованием указателей (списков) вместо массива:
Код:
Вопрос № 173221:
мм. вопрос следующий, точнее задание: Нужен код на паскале, с использованием указателей (списков) вместо массива:
Код:
{заполнение массива А случайными числами} writeln('Massiv A:'); a[1]:=random(5); for i:=1 to (N-1) do begin repeat begin a[i+1]:=random(n+1); end; until
(a[i]<=a[i+1]); end; writeln; For i:=1 to n do write(a[i],' ');
{* Список *} TList=object public constructor Init; destructor Done;virtual; {* Очистка списка *} procedure Clear; {* Добавляет данные *} procedure Add(Data:TData); {* Удаляет узел *} procedure Remove(Node:PNode); {* Возвращает количество элементов *} function GetCount:Word;
{* Указатель на 1й узел *} function First:PNode; {* На следующий узел *} function Next(Node:PNode):PNode; {* Указатель на последний узел *} function Last:PNode; {* На предыдущий узел *} function Prev(Node:PNode):PNode; {* Сортировка списка *} procedure Sort(Predicate:TPredicate); private Root:TNode; Count:Word; end;
function TNode.GetData:TData; begin
GetData:=Data; end;
constructor TList.Init; begin Root.Prev:=@Root; Root.Next:=@Root; Count:=0; end;
destructor TList.Done; begin Clear; end;
procedure TList.Clear; begin while Count>0 do begin Remove(Root.Next); end; end;
procedure TList.Add(Data:TData); var Node:PNode; begin New(Node); Node^.Data:=Data; Node^.Next:=@Root; Node^.Prev:=Root.Prev;
Root.Prev^.Next:=Node; Root.Prev:=Node; Inc(Count); end;
function TList.GetCount:Word; begin GetCount:=Count; end;
procedure TList.Remove(Node: PNode); begin if Count>0 then begin Node^.Prev^.Next:=Node^.Next; Node^.Next^.Prev:=Node^.Prev; Dispose(Node); Dec(Count); end; end;
function TList.First:PNode; begin if Count&g
t;0 then First:=Root.Next else First:=Nil; end;
function TList.Next(Node: PNode):PNode; begin if Node^.Next<>@Root then Next:=Node^.Next else Next:=Nil; end;
function TList.Last:PNode; begin if Count>0 then Last:=Root.Prev else Last:=Nil; end;
function TList.Prev(Node: PNode):PNode; begin if Node^.Prev<>@Root then Prev:=Node^.Prev else Prev:=Nil; end;
procedure TList.Sort(Predicate:
TPredicate); var Node,LastNode,Tmp:PNode; begin if Count>1 then begin Node:=Root.Next; LastNode:=@Root; while Node<>LastNode do begin while Node^.Next<>LastNode do begin Tmp:=Node^.Next; if Predicate(Node^.Data,Tmp^.Data) then Node:=Node^.Next else begin Node^.Prev^.Next:=Tmp; Tmp^.Prev:=Node^.Prev; Node^
.Prev:=Tmp; Node^.Next:=Tmp^.Next; Tmp^.Next^.Prev:=Node; Tmp^.Next:=Node; end;<
br> end; LastNode:=LastNode^.Prev; Node:=Root.Next; end; end; end;
{* Заполняет список *} procedure CreateList(var List:TList;Count:Word); begin List.Clear; while Count>0 do begin List.Add(Random(100)); Dec(Count); end; end;
{* Выводит список *} procedure PrintList(var List:TList;Msg:String); var Node:PNode; begin WriteLn(Msg); Node:=List.First;
while Node<>Nil do begin Write(Node^.GetData,' '); Node:=List.Next(Node); end; WriteLn; end;
{* Предикат для сортировки *} function Less(Item1:TData;Item2:TData):Boolean; begin Less:=Item1<Item2; end;
{* Сливает сортированные списки *} procedure MergeSortedLists(var SrcList1,SrcList2:TList;var DstList:TList); var Node1,Node2:PNode; begin if (@DstLis
t<>@SrcList1) and (@DstList<>@SrcList2) then begin DstList.Clear; Node1:=SrcList1.First; Node2:=SrcList2.First; while (Node1<>Nil) and (Node2<>Nil) do begin if Node1^.GetData<Node2^.GetData then begin DstList.Add(Node1^.GetData); Node1:=SrcList1.Next(Node1); end else begin DstList.Add(Node2^.GetData); Node2:=SrcList2.Next(Node2); end; end; while
Node1<>Nil do begin DstList.Add(Node1^.GetData); Node1:=SrcList1.Next(Node1); end; while Node2<>Nil do begin DstList.Add(Node2^.GetData); Node2:=SrcList2.Next(Node2); end; end; end;
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.