Хелпикс

Главная

Контакты

Случайная статья





Алгоритм процедуры ViewList. Текст программы



Алгоритм процедуры ViewList

             (root: PList)

Заданы: указатель на начало списка

1. ActivePoint= root^. next; текущий элемент – второй в списке (первый – пустой)

2. Если ActivePoint ≠ nil, то к п. 3, иначе к п. 6; пока не пройден весь список

3. Вывод числа, записанного в поле value

4.  ActivePoint=ActivePoint^. Next; переход к следующему элементу списка

5. Переход к п. 2

6. Конец.

 

Текст программы

program WorkWithList;

type PList= ^List;

List= record

             Value: real;

             Next: PList;

          end;

var

MyList: PList;

k: integer;

 

procedure DeleteList(var root: PList);

var DelElem: PList;

begin

While root < > nil do begin

DelElem: =root;

root: =root^. Next;

Dispose(DelElem);

end; {end of while}

end; {end of DeleteList}

 

function GetNumber(var Buf: real): boolean;

var S: string;

errCode: integer;

begin

GetNumber: = false;

Buf: =0;

repeat

Write('Введите элемент списка: ');

ReadLn(S);

if Length(S)=0 then exit;

val(S, Buf, errCode);

if errCode < > 0 then

WriteLn('Ошибка ввода! ');

until errCode = 0;

GetNumber: = true;

end;

 

procedure CreateList(var root: PList; var k: integer);

var ActivePoint, NewElem: PList;

buf: real;

 

begin

WriteLn('Введите список  вещественных чисел. Для окончания ввода введите пустую строку');

New(Root);

k: =0;

ActivePoint: =Root;

while GetNumber(buf, k) do begin

if MaxAvail < 2*SizeOf(List) then begin

    WriteLn('Нет свободной памяти!!! ');

    DeleteList(root);

    Halt;

end; {end of if}

New(NewElem);

Inc(k);

NewElem^. Value: =buf;

ActivePoint^. Next: =NewElem;

ActivePoint: =NewElem;

ActivePoint^. Next: = nil;

end; {end of while}

ActivePoint^. Next: = nil;

end; {end of CreateList}

 

procedure MoveElem(var FromP, Top: PList);

var buf: Plist;

begin

buf: =FromP^. next;

FromP^. next: =buf^. next;

buf^. next: =Top^. next;

Top^. next: =buf;

Top: =buf;

end; {end of MoveEl}

 

procedure SortList(root: PList; k: integer);

var EndSub, EndZero, NowP: PList;

begin

EndSub: =root;

NowP: =root;

EndZero: =root;

while EndZero^. next< > nil do

EndZero: =EndZero^. next;

while k> 0 do begin

if NowP^. next^. value< 0 then

    begin

       MoveEl(NowP, EndSub);

       Dec(k);

   end;

if NowP^. next^. value=0 then

   begin

      if k> 1 then

         MoveEl(NowP, EndZero);

         Dec(k);

   end;

if NowP^. next^. value> 0 then

    begin

       NowP: =NowP^. next;

       Dec(k);

    end;

end; {end of while}

end; {end of WorkWithList}

 

 

procedure ViewList(root: PList);

var ActivePoint: PList;

begin

ActivePoint: = root^. next;

while ActivePoint < > nil do begin

WriteLn(ActivePoint^. Value);

ActivePoint: =ActivePoint^. Next;

end; {end of while}

end; {end of ViewList}

 

Begin

CreateList(MyList, k);

SortList(MyList, k);

WriteLn;

WriteLn('Преобразованный список: ');

  ViewList(MyList);

Deletelist(MyList);

End.


 

Результаты работы программы:

1.

Введите список вещественных чисел. Для окончания ввода введите 

пустую строку.             

Введите элемент списка: 7

Введите элемент списка -4

Введите элемент списка: 0

Введите элемент списка: 7. 8

Введите элемент списка: -6. 43

Введите элемент списка: 0

Введите элемент списка: 2

Введите элемент списка:

 

Преобразованный список:

-4. 0000000000E+00

-6. 4300000000E+00

7. 0000000000E+00

7. 8000000000E+00

2. 0000000000E+00

0. 0000000000E+00

0. 0000000000E+00

 

2.

Введите список вещественных чисел. Для окончания ввода введите 

пустую строку.             

Введите элемент списка: fgh

Ошибка ввода!

Введите элемент списка: 0

Введите элемент списка:

 

Преобразованный список:

0. 0000000000E+00

 

3.

Введите список вещественных чисел. Для окончания ввода введите 

пустую строку.             

Введите элемент списка:

 

Преобразованный список:



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.