Cod sursa(job #670442)

Utilizator Buzu_Tudor_RoCont vechi Buzu_Tudor_Ro Data 29 ianuarie 2012 11:07:28
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.96 kb
Program evaluez_expresia;
var fi,fo : text;
    i:longint;
    s:array[1..100001] of char;

Function expresie:longint; forward;

Function Factor:longint;
var x:longint;
begin
     x:=0;
     if s[i]='(' then begin
                      i:=i+1;
                      x:=expresie;
                      i:=i+1;
                      end
                 else while (s[i]>='0') and (s[i]<='9') do begin
                                                           x:=x+ord(s[i])-48;
                                                           i:=i+1;
                                                           end;
     factor:=x;
end;

Function Termen:longint;
var y:longint;
begin
    y:=factor;
    while (s[i]='*') or (s[i]='/') do if s[i]='*' then begin
                                                    i:=i+1;
                                                    y:=y*factor;
                                                    end
                                               else begin
                                                    i:=i+1;
                                                    y:=y div factor;
                                                    end;
    termen:=y;
end;

Function expresie:longint;
var z:longint;
begin
    z:=termen;
    while (s[i]='+') or (s[i]='-') do if s[i]='+' then begin
                                                       i:=i+1;
                                                       z:=z+termen;
                                                       end
                                                  else begin
                                                       i:=i+1;
                                                       z:=z-termen;
                                                       end;
    expresie:=z;
end;

begin
    assign(fi,'evaluare.in'); reset(fi);  read(fi,s);
    assign(fo,'evaluare.out'); rewrite(fo); i:=1;
    write(fo,expresie);
    close(fi); close(fo);
end.