Примеры задач, решаемых с помощью списка
Задание. Просмотрите предложенные решения задач и приготовьтесь объяснить алгоритм их решения учителю. Если необходимо, то наберите программы на компьютере и просмотрите их действие.
Задача 1. Проверить есть ли и сколько раз встречается список М1 в списке М2.
Program BaranovA;
Uses
Crt;
Type
EXS = ^ S;
S = Record
Data : integer;
Next : EXS;
End;
Var
u, x, m1, m2 : EXS;
i, Kol : integer;
Procedure Poisk(Var x1, x2 : EXS);
Var
m3, m4 : EXS;
Begin
Kol := 0;
m3 := m1;
m4 := m2;
while m4 <> Nil do
begin
if m4^.Data = m3^.Data
then
begin
m3 := m3^.Next;
m4 := m4^.Next;
if m3 = Nil
then
begin
Kol := Kol+1;
m3 := m1;
end;
end;
else
begin
m3 := m1;
m4 := m4^.Next;
end;
end;
End;
Procedure Init (Var u : EXS);
Var
y : EXS;
Digit : integer;
Begin
writeln('Введите список. Конец ввода – 0');
u := Nil;
read(Digit);
while Digit <> 0 do
begin
new(y);
y^.Next := Nil;
y^.Data := Digit;
if u = Nil
then
u := y
else
x^.Next := y;
x := y;
read(Digit);
end;
writeln;
End;
Procedure Print(X : EXS);
Begin
while X <> Nil do
begin
write(X^.Data : 5);
X := X^.Next;
end;
readln;
writeln;
End;
Begin
ClrScr;
Init(m1);
Init(m2);
writeln('***Список 1***');
Print(m1);
writeln('***Список 2***');
Print(m2);
Poisk(m1, m2);
writeln('Список 1 встречается в списке 2 ', Kol, ' раз(а)');
readln;
End.
Задача 2. Из текстового файла, состоящего из строк, сформировать список, запросить слово и удалить это слово из списка.
Program ;
Uses
Crt;
Type
EXS = ^ Spisok;
Spisok = record
Data : string;
Next : EXS;
end;
Var
Golova_Spiska, Golova_Spiska_Udalen_ : EXS;
F : text;
S, St : string;
Procedure Smotr(x : EXS);
Begin
TextColor(LightRed);
write('Ваш список...');
while x <> Nil do
begin
writeln (x^.Data,' ');
x := x^.Next;
end;
End;
Procedure reading;
Begin
reset (F);
writeln('Ваш файл...');
while no Eof(F) do
begin
readln (F, St);
writeln (St);
end;
close (F);
End;
Procedure CreateFile;
Begin
writeln('Создание файла');
write('Введите имя файла...');
readln(S);
assign (F, S);
rewrite('Вводите текст в файл (окончание ввода - <Enter>');
repeat
readln(St);
writeln (F, St);
until St = '';
write('Файл создан');
close (F);
readln;
End;
Procedure Proverka;
Var
x, y, u : EXS;
i : integer;
Begin
reset (F);
while not Eof (F) do
begin
readln (F, St[i]);
while i < Length (St) do
begin
new (x);
x^.Next := Nil;
if (St[i] <> '') or (St[i] <> St[Length(St)])
then
x^.Data := x^.Data + St[i];
if u = Nil
then
u := x
else
y^.Next := x;
y := x;
end;
end;
close (F);
Smotr (u);
End;
Begin
ClrScr;
TextColor (White);
CreateFile;
Proverka;
End.
Дата добавления: 2015-05-16; просмотров: 640;