var pristi: char; function Vyraz: integer; forward; function Faktor: integer; var x: integer; begin if (pristi>='0') and (pristi<='9') then begin x := 0; while (pristi>='0') and (pristi<='9') do begin x := 10*x + ord(pristi)-ord('0'); read( pristi ) end; Faktor := x end else if pristi='(' then begin read( pristi ); Faktor := Vyraz; if pristi<>')' then RunError( 777 ); read( pristi ) end else RunError( 778 ) end; function Clen: integer; var C: integer; zn: char; begin C := Faktor; while (pristi='*') or (pristi='/') do begin zn := pristi; read( pristi ); if (zn='*') then C := C * Faktor else C := C div Faktor end; Clen := C end; function Vyraz: integer; var V: integer; zn: char; begin V := Clen; while (pristi='+') or (pristi='-') do begin zn := pristi; read( pristi ); if (zn='+') then V := V + Clen else V := V - Clen end; Vyraz := V end; begin read( pristi ); writeln( Vyraz ); readln; readln end. function Hodnota: integer; var zn: char; x: integer; begin read( zn ); case zn of '+': Hodnota := Hodnota() + Hodnota(); '-': Hodnota := Hodnota() - Hodnota(); '*': Hodnota := Hodnota() * Hodnota(); '/': Hodnota := Hodnota() div Hodnota(); '0'..'9': begin x := 0; while (zn>='0') and (zn<='9') do begin x := 10*x + ord(zn) - ord('0'); read( zn ) end; Hodnota := x end; end; end; begin writeln( Hodnota ); readln; readln end. const MAX = 100; var Zasobnik: array[1..MAX] of integer; N: integer; function Hodnota: integer; var zn: char; x: integer; begin read( zn ); while (zn <> '.') do begin if (zn>='0') and (zn <='9') then begin x := 0; while (zn>='0') and (zn <='9') do begin x := 10*x + ord(zn)-ord('0'); read( zn ) end; N := N+1; Zasobnik[ N ] := x end else if (zn='+') then begin Zasobnik[ N-1 ] := Zasobnik[N-1] + Zasobnik[N]; N := N-1 end else if (zn='-') then begin Zasobnik[ N-1 ] := Zasobnik[N-1] - Zasobnik[N]; N := N-1 end else if (zn='*') then begin Zasobnik[ N-1 ] := Zasobnik[N-1] * Zasobnik[N]; N := N-1 end else if (zn='/') then begin Zasobnik[ N-1 ] := Zasobnik[N-1] div Zasobnik[N]; N := N-1 end; read( zn ); end; if N<>1 then RunError( 777 ); Hodnota := Zasobnik[1] end; begin N := 0; writeln( Hodnota ); readln; readln; end. type PVyraz = ^TVyraz; TVyraz = record operace: char; hodnota: integer; L, P: PVyraz end; function Vyraz( operace: char; hodnota: integer; L,P: PVyraz ): PVyraz; var n: PVyraz; begin new( n ); n^.operace := operace; n^.hodnota := hodnota; n^.L := L; n^.P := P; Vyraz := n end; const NIC = 12345678; function Hodnota( vyraz: PVyraz ): integer; begin if vyraz^.L=NIL then Hodnota := vyraz^.Hodnota else case vyraz^.operace of '+': Hodnota := Hodnota( vyraz^.L ) + Hodnota( vyraz^.P ); '-': Hodnota := Hodnota( vyraz^.L ) - Hodnota( vyraz^.P ); '*': Hodnota := Hodnota( vyraz^.L ) * Hodnota( vyraz^.P ); '/': Hodnota := Hodnota( vyraz^.L ) div Hodnota( vyraz^.P ); end; end; var v: PVyraz; begin v := Vyraz( '+', NIC, Vyraz( ' ', 15, NIL, NIL ), Vyraz( '*', NIC, Vyraz( ' ', 3, NIL, NIL ), vyraz( ' ', 4, NIL, NIL ) ) ); writeln( Hodnota( v ) ) ;readln ;readln end. type PPrvek = ^TPrvek; TPrvek = record Hodnota: integer; Dalsi: PPrvek end; var seznam: PPrvek; konec: PPrvek; procedure Vytiskni( zac: PPrvek ); var p: PPrvek; begin p := zac; while p<>NIL do begin write( p^.Hodnota,' ' ); p := p^.Dalsi end; writeln( '...KONEC' ) end; function Prvek( x: integer; Dalsi: PPrvek ): PPrvek; var n: PPrvek; begin new( n ); n^.Hodnota := x; n^.Dalsi := Dalsi; Prvek := n end; procedure VymazPosledniPrvek( var seznam: PPrvek ); var p, pred: PPrvek; begin if seznam=NIL then RunError( 777 ) else if seznam^.Dalsi=NIL then begin dispose( seznam ); seznam := NIL end else begin p := seznam; pred := NIL; while p^.Dalsi<>NIL do begin pred := p; p := p^.Dalsi end; dispose( p ); pred^.Dalsi := NIL end end; begin writeln( MemAvail ); writeln( MaxAvail ); seznam := Prvek( 10, Prvek( 20, Prvek( 30, Prvek( 40, Prvek( 50, Prvek( 60, Prvek( 70, Prvek( 80, Prvek( 90, Prvek( 100, NIL )))))))))); Vytiskni( seznam ); readln; while TRUE do begin VymazPosledniPrvek( seznam ); Vytiskni( seznam ); readln end; end.