Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зайцев М. Г. / РГР.docx
Скачиваний:
41
Добавлен:
02.01.2020
Размер:
41.8 Кб
Скачать

If (IsEmpty(l) and IsEmpty(t)) or IsEmpty(t) then exit;

If IsEmpty(l) and not IsEmpty(t) then

begin

L^.first:= T^.first;

L^.size := T^.size;

L^.last := T^.last;

T^.size:= 0;

T^.first:= nil;

T^.Last:= nil;

exit;

end;

with L^ do

begin

Last^.next:= T^.First;

Last:= T^.Last;

size:= T^.size + size

end;

T^.size:= 0;

T^.first:= nil;

T^.Last:= nil;

end;

//------------------------------------------------------------------------------

procedure DelList(var L: PList);

//Удаляет список из памяти

begin

if L <> nil then begin

EmptyList(L);

Dispose(L);

L:= nil;

end

end;

end.

unit OrderedList;

Interface

uses UList, SysUtils;

type

OrdList=PList;

OrdIntType=file of T;

//----------------Вызов главного меню-------------------------------------------

procedure MainMenu(o:ordlist;var f:OrdIntType);

//----------------Проверка на пустоту списка------------------------------------

function OrdIsEmpty(o:ordlist): Boolean;

//----------------Преобразование типизированного файла в список-----------------

function DatInOrd(var f:OrdIntType):OrdList;

//----------------Преобразование списка в файл----------------------------------

procedure OrdInDat(o:ordlist;var f:OrdIntType);

//----------------Ссылка на место вставки---------------------------------------

function InsPos(o:ordlist;a:t):pnode;

//----------------Вывод списка в строку-----------------------------------------

function OrdInStr(o:ordlist):string;

//----------------Нахождение размера списка-------------------------------------

function OrdSize(o:ordlist):integer;

//----------------Вывод элемента по индексу-------------------------------------

function OrdFind(o:ordlist; j:integer):t;

//----------------Очищение списка-----------------------------------------------

procedure OrdEmptyList(o: ordList);

//----------------Вывод индекса нужного элемента--------------------------------

function OrdFindElm(o:ordlist; j:t):integer;

//----------------Удаляет нужный элемент----------------------------------------

procedure OrdDelElmnt(o: ordlist;a:t);

//----------------Вставить значение---------------------------------------------

procedure Inserto(var o:ordlist; a:t);

implementation

procedure OrdInDat(o:ordlist;var f:OrdIntType);

var i:integer; p:pnode;

begin

i:=1;

rewrite(f);

p:=o.first;

while i<>size(o)+1 do

begin

write(f,p.key);

p:=p.next;

i:=i+1;

end;

closefile(f);

end;

function DatInOrd(var f:OrdIntType):OrdList;

var i:T;

begin

i.re:=0;i.im:=0;

reset(f);

result:=createl;

while not eof(f) do

begin

read(f,i);

inserto(result,i);

end;

closefile(f);

end;

procedure MainMenu(o:ordlist;var f:OrdIntType);

var i,k:integer;z:T;

begin

o:=DatInOrd(f);

i:=0; reset(f);

while i<>8 do

begin

writeln('//----------------------------------------------------------------');

writeln('1-Ввод элемента');

writeln('2-Вывод списка');

writeln('3-Подсчет количества элементов');

writeln('4-Вывод элемента по номеру его индекса');

writeln('5-Опустошить список');

writeln('6-Проверить наличие элемента');

writeln('7-Удалить элемент из списка');

writeln('8-Выход');

writeln('//----------------------------------------------------------------');

Write('Введите номер операции: ');

read(i);

if (ordisempty(o))then

begin

if i=1 then

begin

write('Введите элемент списка re, im: ');

readln(z.re, z.im);

inserto(o,z);

end

else writeln('Эту операцию нельзя выполнить на пустом списке');

end

else

case i of

1:begin

write('Введите элемент списка re, im: ');

readln(z.re, z.im);

inserto(o,z);

end;

2:writeln(OrdInStr(o));

3:writeln('Размер: ',OrdSize(o));

4:begin

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

readln(k);

if OrdSize(o)>=k

then begin

z:=OrdFind(o,k);

writeln('Элемент с индексом ', k, ': (',z.re, ';', z.im, ')');

end else writeln('Такого числа нет');

end;

5:begin

OrdEmptyList(o);

writeln('Список опустошен');

end;

6: begin

write('Введите элемент re, im: ');

readln(z.re, z.im);

if OrdFindElm(o,z)<>-1

then writeln('Элемент (',z.re, ';', z.im,') с индексом: ',OrdFindElm(o,z))

else writeln('Такого числа нет');

end;

7:begin

Write('Введите элемент для удаления re, im: ');

readln(z.re, z.im);

if ordFindElm(o,z)<>-1

then OrdDelElmnt(o,z)

else writeln('Такого числа нет');

end;

else begin

OrdInDat(o,f);

DelList(o);

exit;

end;

end;

end;

OrdInDat(o,f);

DelList(o);

end;

function OrdIsEmpty(o:ordlist): Boolean;

begin

Result:= False;

if o <> nil

then

if o^.first = nil

then

Result:= True;

end;

function InsPos(o:ordlist;a:t):pnode;