Лекция: Пример программы

 

{Определить, входит ли список L1 в список L2}

Program Spisok;

Uses Crt, M_Spis;

 

{Решение поставленной задачи}

Function Rez(head1,head2:Ref):Boolean;

Var

tec1,

tec2:Ref;

Begin

Rez:=False; {предполагаем, что L1 не входит в L2}

tec2:=head2;

While tec2<>Nil

Do Begin

tec1:=head1;

While (tec2^.inf<>tec1^.inf)And(tec2^.sled<>Nil)

Do tec2:=tec2^.sled;

If tec2^.inf=tec1^.inf

Then Begin

While (tec2^.inf=tec1^.inf)And(tec2<>Nil)And(tec1<>Nil)

Do Begin

tec1:=tec1^.sled;

tec2:=tec2^.sled;

End;

If tec1=Nil

Then Begin

Rez:=True; {L1 входит в L2}

Exit;

End

Else Continue;

End;

tec2:=tec2^.sled;

End;

End;

 

{Рисование окна на экране}

Procedure Okno(x1,y1,x2,y2,bkcl,cl:Byte;title:String);

Var i:Byte;

Begin

Window(x1,y1,x2,y2);

TextBackGround(bkcl);

TextColor(cl);

ClrScr;

WriteLn(' ',title);

Window(x1,y1+1,x2,y2);

End;

 

 

{Основная программа}

Var

head1,

head2:Ref;

Begin

TextBackGround(1);

ClrScr;

Okno(45,1,80,5,12,10,'Исходный список L1:');

Okno(45,6,80,10,12,10,'Исходный список L2:');

Okno(45,12,80,18,13,10,'Результат:');

Okno(1,20,80,25,2,15,'Задача:');

WriteLn(' Определить, входит ли список L1 в список L2.');

Okno(1,1,43,18,14,10,'Ввод:');

WriteLn('Создание списка L1.');

SozdSpis(head1);

Okno(45,1,80,5,12,10,'Исходный список L1:');

Vivod(head1);

Okno(1,1,43,18,14,10,'Ввод:');

WriteLn('Создание списка L2.');

SozdSpis(head2);

Okno(45,6,80,10,12,10,'Исходный список L2:');

Vivod(head2);

If Pust(head1) Or Pust(head2)

Then Begin

Okno(45,12,80,18,13,10,'Результат:');

WriteLn('Один из списков пуст.');

Write('Нажмите <Enter>.');

ReadLn;

Exit;

End;

Okno(45,12,80,18,13,10,'Результат:');

If Rez(head1,head2)

Then WriteLn('Список L1 входит в список L2')

Else WriteLn('Список L1 не входит в список L2');

Write('Для продолжения нажмите Enter->');

ReadLn;

End.

 


Unit M_Spis;{Модуль работы со списком}

 

Interface

Type

TElem=Byte;

Ref=^Spis;

Spis=Record

inf:TElem;

sled:Ref;

End;

Procedure InitSpis(Var head,zam:Ref); {инициализации списка}

Function Pust(head:Ref):Boolean; {проверка списка на пустоту}

Procedure VSpisok(Var head,zam:Ref;nov:TElem);{добавление нового

элемента в конец списка}

Procedure SozdSpis(Var head:Ref); {создание списка}

Procedure Vivod(head:Ref); {просмотр списка}

 

Implementation

 

{Процедура инициализации списка}

Procedure InitSpis(Var head,zam:Ref);

Begin

head:=Nil;

zam:=Nil;

End;

 

{Проверка списка на пустоту}

Function Pust(head:Ref):Boolean;

Begin

If head=Nil

Then Pust:=True {список пуст}

Else Pust:=False; {список не пуст}

End;

 

{Процедура добавления одного элемента в конец списка}

Procedure VSpisok(Var head,zam:Ref;nov:TElem);

Var

tec:Ref;

Begin

New(tec);

tec^.inf:=nov;

tec^.sled:=Nil;

If Pust(head)

Then head:=tec

Else zam^.sled:=tec;

zam:=tec;

End;

 

{Процедура создания списка}

Procedure SozdSpis(Var head:Ref);

Var

inf:TElem;

zam:Ref;

Begin

InitSpis(head,zam);

WriteLn('Вводите числа одной строкой через пробел.');

WriteLn('Признак конца ввода — ввод 0.');

Read(inf);

While inf<>0

Do Begin

VSpisok(head,zam,inf);

Read(inf);

End;

ReadLn;

End;

 

{Просмотр списка}

Procedure Vivod(head:Ref);

Var

prom:Ref;

Begin

prom:=head;

While prom<>Nil

Do Begin

Write(prom^.inf,' ');

prom:=prom^.sled;

End;

WriteLn;

WriteLn('Нажмите <Enter>');

ReadLn;

End;

 

End.

 


еще рефераты
Еще работы по информатике