Задача. Задана последовательность слов. Определить частоту вхождения каждого из слов в последовательности.
Для решения задачи любое слово ищется в дереве, которое на начальном этапе пусто. Если слово найдено, то счетчик его вхождений увеличивается на 1, если нет, то слово включается в дерево с единичным значением счетчика.
Program Poisk;
Uses
Crt;
Type
Words = ^WordTree;
WordTree = record
Data: string;
k: integer;
Left, Right: Words;
end;
Var
n: integer;
kd: Words;
x: string;
f: text;
Procedure Tree(x: string; Var p: Words);
Begin
if p=nil
then
begin
new(p);
with p^ do
begin
k:= 1;
Data:= x;
Left:= Nil;
Right:= Nil;
end;
end;
else
if x>p^.Data
then
Tree(x. p^.Left)
else
if x<p^.Data
then
Tree(x. p^.Right)
else
Inc(p^.k);
End;
Procedure PrintTree(t: Words; h: integer);
Var
i: integer;
Begin
if t <> Nil
then
with t^ do
begin
PrintTree(Left, h+1);
for i:= 1 to h do
write(' ');
writeln(Data, ',(', k, ')');
PrintTree(Right, h+1);
end;
End;
Begin
ClrScr;
assign(f, 'c:\f.dan');
reset(f);
write('n=');
readln(n);
kd:= Nil;
while n>0 do
begin
readln(f,x);
Tree(x, kd);
Dec(n);
end;
close(f);
PrintTree(kd, 0);
readln;
End.
Эта задача называется задачей поиска по дереву с включением.
Задание. Наберите программу, протестируйте ее, вставьте комментарий, приготовьтесь объяснить учителю принцип поиска по дереву с включением. По желанию можете усложнить текст задачи, усовершенствовать ее решение или внести еще какие-либо изменения.