Program Strom; type pVrchol = ^Vrchol; pVnitrniVrchol = ^VnitrniVrchol; pList = ^List; Vrchol = object levy, pravy : pVrchol; procedure pridej(syn : pVrchol; doleva : boolean); procedure vypis; virtual; abstract; function vyhodnot : integer; virtual; abstract; constructor con; destructor des; end; VnitrniVrchol = object(Vrchol) op : char; procedure vypis; virtual; function vyhodnot : integer; virtual; end; List = object(Vrchol) hodnota : integer; procedure vypis; virtual; function vyhodnot : integer; virtual; end; constructor Vrchol.con; begin end; destructor Vrchol.des; begin end; procedure Vrchol.pridej(syn : pVrchol; doleva : boolean); begin if doleva then levy := syn else pravy := syn; end; procedure VnitrniVrchol.vypis; begin write('('); levy^.vypis; write(op); pravy^.vypis; write(')'); end; function VnitrniVrchol.vyhodnot : integer; begin case op of '+': vyhodnot := levy^.vyhodnot + pravy^.vyhodnot; '-': vyhodnot := levy^.vyhodnot - pravy^.vyhodnot; end; end; procedure List.vypis; begin write(hodnota); end; function List.vyhodnot : integer; begin vyhodnot := hodnota; end; function vytvorList(hodnota : integer) : pVrchol; var p : pList; begin new(p, con); p^.hodnota := hodnota; vytvorList := p; end; function vytvorVnitrniVrchol(op : char) : pVrchol; var p : pVnitrniVrchol; begin new(p, con); p^.op := op; vytvorVnitrniVrchol := p; end; function vytvorVrchol(s : string) : pVrchol; var cislo, chyba : integer; begin Val(s, cislo, chyba); if chyba > 0 then vytvorVrchol := vytvorVnitrniVrchol(s[1]) else vytvorVrchol := vytvorList(cislo); end; function postavStrom(var s : string) : pVrchol; var p : PVrchol; mezera : integer; begin mezera := pos(' ',s); if mezera <= 0 then p := vytvorVrchol(s) else p := vytvorVrchol(Copy(s,1,mezera - 1)); postavStrom := p; if mezera > 0 then Delete(s,1,mezera); if typeof(p^) = typeof(List) then exit; p^.pridej(postavStrom(s), TRUE); p^.pridej(postavStrom(s), FALSE); end; var koren : pVrchol; s : string; begin read(s); {vyraz v prefixove notaci - napr + + 12 7 - -9 36} koren := postavStrom(s); koren^.vypis; writeln; write(koren^.vyhodnot); end.