По заданному выражению в префиксной форме надо построить бинарное дерево и вычислить его.
Вот нашел вариат задачи, которая на входе получает выражение в префиксной форме и выводит его в виде бинарного дерева.
http://forum.pascal.net.ru/index.php?showtopic=6208
Но прога обрабатыеат выражение как строку. Подскажите как написать какую-нибудь процедурку для вычисления этого выражения. Т.е. я ввожу например *+235, а на выходе получаю соответственно бинарное дерево и результат выражения. И объясните пожалуйста каким образом происходит вычисление выражения. Как строится дерево я вроде понял а вот как его вычислить не доходит.
Вот програ с линка который я написал. Можно ли ее доработать?
Заранее всем спасибо.
.
Uses Crt, Graph;
Type
TType = Char;
PTTree = ^TTree;
TTree = Record
Data: TType;
Left, Right: PTTree;
End;
procedure PrintTreeGraph(root: pttree);
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;
Var
s: string;
grDriver: integer;
grMode: integer;
ErrCode: Integer;
begin
global_root := nil;
writeln ('Vvedite virazenie v prefixnoy forme: ');
readln (s);
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
М | Пользуемся тегами CODE ! klem4 |