Cod sursa(job #1076754)

Utilizator hrazvanHarsan Razvan hrazvan Data 10 ianuarie 2014 15:46:45
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.5 kb
#include <stdio.h>
#define LENGHT 100000
int exp ();
int term ();
int fact ();
char s [ LENGHT ];
int p;

int exp (){
    int rez = term ();
    while ( s[ p ] == '+' || s[ p ] == '-' ){
        if ( s[ p ] == '+' ){
            p++;
            rez += term ();
        }
        else{
            p++;
            rez -= term ();
        }
    }
    return rez;
}
int term (){
    int rez;
    rez = fact ();
    while ( s[ p ] == '*' || s[ p ] == '/' ){
        if ( s[ p ] == '*' ){
            p++;
            rez *= fact ();
        }
        else {
            p++;
            rez /= fact ();
        }
    }
    return rez;
}
int fact (){
    int minus = 1, rez;
    if( s[ p ] == '(' ){
        p++;
        while ( s[ p ] == '-' ){
            minus = -minus;
            p++;
        }
        rez = exp ();
        rez *= minus;
        p++;
        return rez;
    }
    while ( s[ p ] == '-' ){
        minus = -minus;
        p++;
    }
    rez = 0;
    while ( s[ p ] >= '0' && s[ p ] <= '9' ){
        rez *= 10;
        rez += s[ p ] - '0';
        p++;
    }
    return rez * minus;
}

int main()
{
    FILE *in = fopen ( "evaluare.in", "r" );
    char ch = fgetc ( in );
    int ind = 0;
    while ( ch != EOF && ch != '\n' ){
        s [ ind ] = ch;
        ind++;
        ch = fgetc ( in );
    }
    fclose ( in );
    FILE *out = fopen ( "evaluare.out", "w" );
    fprintf ( out, "%d", exp () );
    fclose ( out );
    return 0;
}