Вобщем, есть выражение:
по каким правилам вы делали преобразование??
и куда потеряли третий плюс??
да как же его строить-то?
ну не клацает у меня в голове! не клацает!!!
не могу понять - для элементов выражения надо зараннее забивать положение (корень-узел-лист), либо есть способ просто ввести выражение и получить графическое представление по заданным параметрам???
_______________
я не волшебник, я только учусь ;) велосипед выдумать не смогу, а исходников похожих у меня нет и найти не получается
Jill, по-моему, ты ошибаешься:
пасиба, с этим разобралась :-)
_____________
это моя первая задача....по деревьям...сложно пока
и примеров подобных нет
офф...
подскажите, плз, каким макаром запустить пример в факе? при попытке запуска uses TreeUnit пишет "не найден TreeUnit.TPU"
TreeUnit.PAS в той же папке
что куда размещать?
не пойму никак... мне бы посмотреть...
Вот пример использования: http://forum.pascal.net.ru/index.php?showtopic=6129&view=findpost&p=46185
Сообщения были разделены в тему http://forum.pascal.net.ru/index.php?showtopic=6212&view=findpost&p=46613, все дальнейшие вопросы связанные именно с подключением модулей решаем там, сюда возвращаемся только для обсуждений по теме...
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.
А что происходит при запуске программы (поточнее) ?
Что видно при нажатии Alt - F5 ?
"Error: Graphics not initialized" ?
последний маааааааленький вопросик:
дописала полностью префисную строку
s: String =
'=X/+C+1*4D+1/A2';
Jill, к сожалению, это пока не исправляется... Чем больше "глубина" дерева, тем меньше места для рисования остается на каждом последующем уровне. А ты сразу "отобрала" половину экрана для никому не нужной ветви "X=". Я не думаю, что это тоже должно включаться в дерево, т.к. обычно дерево строится по выражению, которое необходимо вычислить (т.е. по выражению справа от знака равенства...)
Но в любом случае, для исправления "наложения" придется переписывать процедуру полностью...