|
|||
Алгоритм процедуры 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. Введите список вещественных чисел. Для окончания ввода введите пустую строку. Введите элемент списка:
Преобразованный список:
|
|||
|