Cod sursa(job #538685)

Utilizator vendettaSalajan Razvan vendetta Data 21 februarie 2011 20:27:33
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.6 kb
const f = 'evaluare.in';g = 'evaluare.out';
const max = 100001;
var
    s : array [1..max] of char;
    i : longint;

function termen : longint;forward;
function factor : longint;forward;

function eval : longint;
    var
        r : longint;
    begin
        r := termen;
        while (s[i] = '+') or (s[i] = '-') do
            begin
            if s[i] = '+' then begin inc( i );r := r+termen; end;
            if s[i] = '-' then begin inc( i );r := r-termen; end;
            end;
        eval := r;
    end;

function termen : longint;
    var
        r : longint;
    begin
        r := factor;
        while (s[i] = '*') or (s[i] = '/') do
            begin
            if s[i] = '*' then begin inc( i );r := r*factor; end;
            if s[i] = '/' then begin inc( i );r := r div factor; end;
            end;
        termen := r;
    end;

function factor : longint;
    var
        r : longint;
    begin
        r := 0;
        if s[i] = '(' then
            begin
            inc( i );
            r := eval;
            inc( i );
            end
        else
            begin
            while (s[i] >= '0') and (s[i] <= '9') do
                begin
                r:=r* 10+ ord( s[i] )- ord( '0');
                inc( i );
                end;
            end;
        factor:=r;
    end;


begin
    assign( input,f );reset( input );
    assign( output,g );rewrite( output );
    while not eof( input ) do
        begin
        inc( i );
        read( s[i] );
        end;
    i:=1;
    writeln(eval);
    close( input );close( output );
end.