- •Расчетно-графическая работа по дисциплине «Информатика и программирование»
- •Цель: сформировать практические навыки разработки консольных приложений с использованием:
- •Задание
- •Порядок выполнения
- •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;
Implementation
procedure AddInPos(var L:plist; a:t; p:pnode);
Var z:plist; k:pnode;
begin
z:=createl;
k:=l.first;
while k.next<>p do
k:=k.next;
z.first:=k.next;
z.last:=l.last;
k.next:=nil;
l.last:=k;
addright(l,a);
merge(l,z);
end;
//------------------------------------------------------------------------------
function ListToStr(L: PList): String;
//Распечатывает поле key всех элементов списка,
//начиная с головы списка
Var p: pNode;
begin
if L <> nil
then
begin
{if Size(L) = 0 then begin Result:= Result + 'no elements'; exit end; }
Result:= 'Size = ' + IntToStr(Size(L)) + '| Elements: ';
p:= L^.first;
while p <> nil do
begin
Result:=Result+'('+FloatToStr(p^.key.re)+','+FloatToStr(p^.key.im)+'),';
p:= p^.next
end;
delete(result,length(result),1);
end
else
Result:= 'List not exist';
end;
//------------------------------------------------------------------------------
function PredLast(L: PList; var Pred: PNode): PNode;
//Возвращает укзатель на предпоследний и последний элементы списка
//В случае отсутствия последнего и/или предпоследнего узла - возвращается nil.
begin
Pred:= nil;
if (L <> nil) then
with L^ do
case size of
0: begin Result:= nil end;
1: begin Result:= first; Pred:= nil end;
else
Result:= first;
while Result^.next <> nil do
begin
pred:= Result;
Result:= Result^.next
end
end
else
Result:= nil
end;
//------------------------------------------------------------------------------
function CreateE(key: T): PNode;
//Создаёт элемент списка
begin
try
new(Result);
Result^.key:= key;
Result^.next:= nil
except
on EOutOfMemory do begin
raise;
end;
end;
end;
//------------------------------------------------------------------------------
function CreateL: PList;
//Создаёт пустой список
begin
try
new(Result);
Result^.first:= nil;
Result^.last:= nil;
Result^.size:= 0
except
on EOutOfMemory do begin
raise;
end;
end;
end;
//------------------------------------------------------------------------------
function Size(L: PList): integer;
//Возвращет число элементов списка L
begin
if L <> nil
then
Result:= L^.size
else//Список не существует
raise EListEmpty.Create('List is empty');//Result:= -1
end;
//------------------------------------------------------------------------------
function IsEmpty(L: PList): Boolean;
//Определяет пуст ли список L
begin
Result:= False;
if L <> nil
then
if L^.first = nil
then
Result:= True;
end;
//------------------------------------------------------------------------------
procedure AddRight(L: PList; E: T);
//Добавляет элемент к списку справа
begin
if (L <> nil)
then
with L^ do
case size of
0: begin
first:= CreateE(E);
last:= first;
inc(size)
end;
else
Last^.next:= CreateE(E);
Last:= Last^.next;
inc(size)
end
end;
//------------------------------------------------------------------------------
procedure AddLeft(L: PList; E: T);
//Добавляет элемент к списку слева
var p: PNode;
begin
if (L <> nil)
then
with L^ do
case size of
0: begin
first:= CreateE(E);
last:= first;
inc(size)
end;
else
p:= CreateE(E);
p^.next:= First;
First:= p;
inc(size)
end
end;
//------------------------------------------------------------------------------
function Head(L: PList): T;
//Выделяет из списка L элемент списка, который является его головой,
//и возвращает указатель на него
var p: PNode;
begin
if L = nil
then//Список не существует
exit;
with L^ do begin
if size = 0
then // Список пуст
begin raise EListEmpty.Create('Список пуст'); exit end;
Result:= first^.key;
p:= first;
first:= first^.next;
dispose(p);
dec(size);
if size = 0
then
begin last:= nil; first:= nil end
end
end;
//------------------------------------------------------------------------------
procedure EmptyList(L: PList);
//Опустошает список
begin
if L <> nil then
while L^.size <> 0 do Head(L)
end;
//------------------------------------------------------------------------------
procedure Merge(L,T: PList);
//Объединяет два списка
begin
if (T = nil) and (L = nil)
then exit;