program Proga; const Chisla: set of Char = ['0', '1','2','3','4','5','6','7','8','9']; Znaki: set of Char = ['+','-','*']; type bt = string; Adr = ^Derevo; Derevo = record L: Adr; R: Adr; Inf: Integer; end; var TextFile: Text; Der1, Der2: Adr; Dat: bt; N: Integer; A1: Integer; function Pered(TT: Adr; var N: Integer): Adr; var C: Char; D, X: Integer; const A: bt = ''; begin if N <= Length(Dat) then begin A := ''; Inc(N); C := Dat[N]; if C in Chisla then begin D := N; while (Dat[D] in Chisla) and (D <= Length(Dat)) do begin A := A + Dat[D]; Inc(D); end; if D - 1 = N then A := Dat[N]; Val(A, A1, X); N := D; TT^.L := nil; TT^.R := nil; TT^.Inf := A1; end else begin TT^.L := Pered(TT^.L, N); if Dat[N] = '-' then TT^.Inf := -1 else if Dat[N] = '+' then TT^.Inf := -2 else if Dat[N] = '*' then TT^.Inf := -3; TT^.R := Pered(TT^.R, N); end; end; end; function Rezult(Tree: Adr): Integer; var B: Integer; begin if Tree^.L = nil then Rezult := Tree^.Inf else begin case Tree^.Inf of -1: Rezult := Rezult(Tree^.L) - Rezult(Tree^.R); -2: Rezult := Rezult(Tree^.L) + Rezult(Tree^.R); -3: Rezult := Rezult(Tree^.L) * Rezult(Tree^.R); end; end; end; begin Assign(TextFile, 'D:\Work\TextFile.txt'); Reset(TextFile); New(Der1); New(Der2); Der1 := nil; Der2 := Der1; Readln(TextFile, Dat); N := 0; Pered(Der1, N); Writeln(Rezult(Der1)); end.