IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Бинарные деревья поиска, Определить пути в дереве, имеющие только
FENIX
сообщение 26.04.2005 17:21
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Задание:
Дан текстовый файл. Построить дерево поиска из символов этого файла. Определить пути в дереве, имеющие только согласные буквы. Все эти вершины отметить цветом.

Моя задумка заключается в следующем: в процедуре Print сравнивать входящую информацию с инфой в массиве и, соответственно, менять цвет.
Но что-то ничего не сравнивается sad.gif
Не могу понять, как сделать правильно.


Program Lab;
Uses Crt;

Const n = 19;

Alphabet : array [1..n] of String =
  ('b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n', 'p', 'q', 'r',
  's', 't', 'v', 'w', 'x', 'z');

Type DataType = String;

Type BTreePtr = ^BTree;

BTree = object
       Data : DataType;
       Barrier : boolean;
       Left, Right : BTreePtr;
       LLen, RLen : word;
       Constructor Init;
       Destructor Done;
       Procedure Print(K : word);
       Procedure Add_Search(D : DataType); virtual;
       {Procedure Main;}
end;

Constructor BTree.Init;
begin
  Barrier := TRuE;
end;

Destructor BTree.Done;
begin
  If not Barrier then
  begin
     Dispose(Left, Done);
     Dispose(Right, Done);
  end;
end;

Procedure BTree.Add_Search(D : DataType);
begin
  If Barrier then
  begin
     Data := D;
     Barrier := false;
     New(Left, Init);
     New(Right, Init);
  end
  else
  If D < Data then
  Left^.Add_Search(D) else Right^.Add_Search(D);
end;

==============================

Procedure BTree.Print(K : word);
var i : word;
begin
  If not Barrier then
  begin
     Left^.Print(k + 4);
     For i := 1 to n do
     If Data = Alphabet[i] then
     begin
        TextColor(Yellow);
     end
     else
     TextColor(7);
     writeln(Data : k);
     Right^.Print(k + 4);
  end;
end;

==============================

var B1 : BTree;
  input : text;
  s, sl : string;
  i : word;

BEGIN
  ClrScr;
  assign(input, 'Lab_12.txt');
  reset(input);
  writeln('BEFORE - ', MemAvail, ' bytes.');
  writeln;
  B1.Init;

  While not EOF (input) do
  begin
     sl := '';
     Readln(input, s);
     If s[length(s)] <> ' '
     then s := s + ' ';
        For i := 1 to length(s) do
           If s[i] <> ' '
           then sl := sl + s[i]
           else
           If length(sl) <> 0 then
           begin
              B1.Add_Search(sl);
              sl := '';
           end;
  end;

  B1.Print(4);
  {B1.Main;}
  writeln;
  B1.Done;
  writeln('AFTER - ', MemAvail, ' bytes.');
  readln;

END.


Сообщение отредактировано: FENIX - 26.04.2005 17:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
FENIX
сообщение 27.04.2005 12:45
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Сегодня уточнил задание - необходимо также напечатать (в виде строки из букв после вывода дерева) сами пути. Как? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 12:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"