{
------------------------------------------------------------------------------- 
Autor: Jan Kohlhof
Email: kohj@hrz.tu-chemnitz.de
-------------------------------------------------------------------------------
}

program ausdruck_berechnen;
uses crt,stackunit;

var ausdruck:string;

function berechnen(ausdruck:string):integer;
var 	p,s:stack;
	c:char;
	op,op1:integer;
begin
init(s);init(p);
repeat
 c:=ausdruck[1];
 ausdruck:=copy(ausdruck,2,length(ausdruck));
 if(length(ausdruck)=0)and(c<>'#')then
  begin
   writeln('Fehler');
   exit;
  end;
  case c of
   '(','+','-','*': push(s,ord(c));
          '0'..'9': push(p,ord(c)-ord('0'));
 	       ')': begin
	             op:=pop(s);
		      case op of
		     	ord('+'): push(p,pop(p)+pop(p));
			ord('*'): push(p,pop(p)*pop(p));
			ord('-'): begin
			           op1:=pop(p);
				   push(p,pop(p)-op1);
			          end;
                        else      begin
		                   writeln('Fehler');
		                   exit;
		                  end;
		     end;
		     if(chr(pop(s))<>'(')then
		      begin
		       writeln('Fehler im Ausdruck');
		       exit;
		      end;
		   end;
   else if c<>'#' then
    begin
     writeln('Fehler im Ausdruck');
     exit;
    end;
  end;  
until (c='#');
if isempty(s) then
 begin
  if not isempty(p) then berechnen:=pop(p)
  else writeln('Fehler,p isempty');
  if not isempty(p) then 
   begin
    writeln('Fehler');
    exit;
   end;
 end
else writeln('Fehler,s not isempty');
end;

begin
writeln('Ausdruck berechnen');
writeln('------------------');
  write('Bitte Ausdruck eingeben:');readln(ausdruck);
writeln(berechnen(ausdruck));
end.