Program STOS; {vyhodnoti spravnost zapisu zavorek } uses Crt; { leva zavorka PUSH} { prava zavorka POP} type UkazZas=^PrvekZas; PrvekZas=record Data:char; Dalsi:UkazZas end; var Vyraz:string; Z:UkazZas; I,Del:integer; Znak, Zavorkap: char; Chyba, T:boolean; procedure Push (Znak:char; var Top:UkazZas); { zaradi Znak do zasobniku } var Pom:UkazZas; begin new(Pom); Pom^.Data:=Znak; Pom^.Dalsi:=Top; Top:=Pom { novy vrchol} end; function Prazdny(Top:UkazZas):Boolean; begin Prazdny:=Top=nil end; procedure Pop (var Znak:char; var Top:UkazZas); { odebere Znak ze zasobniku } begin T:=false; if Prazdny(Top) then begin T:= true; writeln('chybi leva zavorka') end else begin Znak:=Top^.Data; Top:=Top^.Dalsi end end; { hlavni program} begin repeat Z:=nil; ClrScr; Chyba:=false; write('Zadej vyraz: '); readln(Vyraz); Del:=Length(vyraz); for I:=1 to Del do begin Znak:=Vyraz[I]; if Znak in ['(','[','{'] then Push(Znak,Z); if Znak in [')',']','}'] then begin Pop(Zavorkap,Z); case Zavorkap of '(': if Znak<>')' then Chyba:=true; '[': if Znak<>']' then Chyba:=true; '{': if Znak<>'}' then Chyba:=true; end; end; end; if not T then if (Prazdny(Z)) and (Chyba=false) then writeln(' vyraz je spravne ') else writeln(' chybi prava zavorka '); GoToXY(50,24); Write('Pokracovat Y/N? '); Znak:=ReadKey until not (Znak in ['y','Y']); end.