
- •Расчетно-графическая работа по дисциплине «Информатика и программирование»
- •Цель: сформировать практические навыки разработки консольных приложений с использованием:
- •Задание
- •Порядок выполнения
- •Var o: ordlist; z:OrdIntType;
- •Interface
- •Implementation
- •Var z:plist; k:pnode;
- •Var p: pNode;
- •If (IsEmpty(l) and IsEmpty(t)) or IsEmpty(t) then exit;
- •If IsEmpty(l) and not IsEmpty(t) then
- •Interface
- •Var p:pnode;
- •Var p: pNode;
- •Var I:integer; k:pnode;
- •Var p:pnode; I:integer;
- •Var p,l,z:pnode;
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;