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

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

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

 
 Ответить  Открыть новую тему 
> Фамильное представление ДЕРЕВА, ...графически отобразить...
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Вобщем, есть выражение:
Код
X = (C+1+4*D)/(1+A/2)
. Его надо представить в виде префиксной записи. Если не ошибаюсь это выглядит так:
Код
= X / + + C 1 * 1 / 4 D A 2
(ужас какой!!!)
А главное - нарисовать в виде фамильного дерева:
Код
 =

X                           /

        +                                        +

C       1         *                     1                /
                                                             
               4        D                            A         2  


*)прикреплю файл с нормальным изображением - тут понятно плохо

Я СОВСЕМ не понимаю КАК, вводя выражение (вот ту самую префиксную запись), вывести на экран графическое представление дерева!!! Помогите, плз!!! Я просто не представляю как это сделать и тихо впадаю в панику... sad.gif


Прикрепленные файлы
Прикрепленный файл  tree.doc ( 24 килобайт ) Кол-во скачиваний: 409
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

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

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


по каким правилам вы делали преобразование??

и куда потеряли третий плюс??

Код
= X / + C + 1 * 4 D + 1 / A 2


далее по выражению однозначно строится дерево (тк эта строка -- свернутое представление дерева). Но так красиво на паскале не получится.Прикрепленное изображение


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


да как же его строить-то? sad.gif

ну не клацает у меня в голове! не клацает!!!
не могу понять - для элементов выражения надо зараннее забивать положение (корень-узел-лист), либо есть способ просто ввести выражение и получить графическое представление по заданным параметрам???

_______________
я не волшебник, я только учусь ;) велосипед выдумать не смогу, а исходников похожих у меня нет и найти не получается sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Jill, по-моему, ты ошибаешься:
Цитата
(C+1+4*D)/(1+A/2)
в префиксной форме будет выглядеть вот так:
Цитата
/+C+1*4D+1/A2


Теперь нужно по этой строке построить бинарное дерево (бинарное - если ты хочешь пользоваться процедурой из FAQ-а для отрисовки дерева: FAQ: Деревья (процедура PrintTreeGraph), если хочешь сделать это самостоятельно - дерево может быть не обязательно бинарным...) smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


пасиба, с этим разобралась :-)

_____________
это моя первая задача....по деревьям...сложно пока
и примеров подобных нет sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


офф...

подскажите, плз, каким макаром запустить пример в факе? при попытке запуска uses TreeUnit пишет "не найден TreeUnit.TPU"
TreeUnit.PAS в той же папке

что куда размещать?

не пойму никак... мне бы посмотреть... sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Вот пример использования: Деревья
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Сообщения были разделены в тему Проблема с подключением Graph.TPU, все дальнейшие вопросы связанные именно с подключением модулей решаем там, сюда возвращаемся только для обсуждений по теме...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Jill, попробуй вот это (процедура Build строит дерево из префиксной строки, пока строка для простоты задана константой, можно вводить ее непосредственно в программе... Не забудь добавить реализацию PrintTreeGraph из FAQ):
Uses Crt, Graph;

Type
TType = Char;
PTTree = ^TTree;
TTree = Record
Data: TType;
Left, Right: PTTree;
End;

Procedure PrintTreeGraph(root: PTTree);
{
!!! Здесь - реализация процедуры PrintTreeGraph !!!
}

var
global_root: pttree;

Procedure Build(Var root: PTTree;
Expr: String; Var Shift: Integer);
Begin
New(root);
Root^.Data := Expr[Shift];
Root^.Left := nil;
Root^.Right := nil;
If (Expr[Shift] in ['+','*','-','/']) Then Begin
Inc(Shift);
Build(Root^.Left, Expr, Shift);
Build(Root^.Right, Expr, Shift);
End
Else Inc(Shift)
End;

Const
i: integer = 1;
s: String =
'/+C+1*4D+1/A2';

Var
grDriver: integer;
grMode: integer;
ErrCode: Integer;

begin
global_root := nil;
Build(global_root, s, i);

grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode <> grOk then begin
Writeln('Graphics error:', GraphErrorMsg(ErrCode)); Halt(100);
end;
PrintTreeGraph(global_root);
readln;
CloseGraph;
end.


Цитата(virt @ 15.09.05 12:32)
Но так красиво на паскале не получится
А если попробовать? ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Цитата(volvo @ 16.09.05 1:21)
А если попробовать?  ;)


volvo, пробую!!! это ж на экран должно выводиться?
не выводится ничего sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

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

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


А что происходит при запуске программы (поточнее) ?

Сообщение отредактировано: Romtek -


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Цитата(Romtek @ 16.09.05 11:23)
А что происходит при запуске программы (поточнее) ?


значится так: программа запускается (то бишь, в ошибки всякие не впадает), НО! возвращается к синему экрану с листингом / readln не помогает...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Знаток
****

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

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


Что видно при нажатии Alt - F5 ?
"Error: Graphics not initialized" ?

Сообщение отредактировано: Romtek -


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Цитата(Romtek @ 16.09.05 11:47)
Что видно при нажатии Alt - F5 ?
"Error: Graphics not initialized" ?



ууууууес! закинула EGAVGA.BGI в рабочую папку...........ииииииииииии.......

РЕБЯТЫ, Я ВАС ПРОСТО-ТАКИ ЛЮБЛЮ!!! СПАААААААААААСИБО!!!! ЭТО ПРОСТО СУПЕР!!! УРРРРРРРРРРААААААААА!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


последний маааааааленький вопросик:
дописала полностью префисную строку
  s: String =
'=X/+C+1*4D+1/A2';


изображение символов 4 D немного накладывается
с остальными - все ок
где это подправить можно?

Сообщение отредактировано: Jill -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Jill, к сожалению, это пока не исправляется... sad.gif Чем больше "глубина" дерева, тем меньше места для рисования остается на каждом последующем уровне. А ты сразу "отобрала" половину экрана для никому не нужной ветви "X=". Я не думаю, что это тоже должно включаться в дерево, т.к. обычно дерево строится по выражению, которое необходимо вычислить (т.е. по выражению справа от знака равенства...)

Но в любом случае, для исправления "наложения" придется переписывать процедуру полностью...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Цитата(volvo @ 16.09.05 12:59)
Я не думаю, что это тоже должно включаться в дерево, т.к. обычно дерево строится по выражению, которое необходимо вычислить (т.е. по выражению справа от знака равенства...)


ок, значит так и надо smile.gif спасибо большое - очень красиво получается smile.gif и не нуже совсем там этот Х!!! ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 27.04.2024 9:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name