Cod sursa(job #1714764)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 9 iunie 2016 12:33:52
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.49 kb
#include <stdio.h>
#include <stdlib.h>

FILE *fin, *fout;

int curChar;

void advance(){
    curChar = fgetc(fin);
}

int NUMAR(){
    int val = 0;
    do{
        val = val * 10 + curChar - '0';
        advance();
    } while(curChar >= '0' && curChar <= '9');
    return val;
}

int FACTOR(){
    int val;
    switch (curChar){
        case '(':
            advance();
            val = EXPRESIE();
            break;
        case '-':
            advance();
            val = -FACTOR();
            break;
        case '+':
            advance();
            val = FACTOR();
            break;
        default:
            val = NUMAR();
            break;
    }
    return val;
}

int TERMEN(){
    int val = FACTOR();
    while(curChar == '*' || curChar == '/'){
        if(curChar == '*'){
            advance();
            val *= FACTOR();
        } else {
            advance();
            val /= FACTOR();
        }
    }
    return val;
}

int EXPRESIE(){
    int val = TERMEN();
    while(curChar == '+' || curChar == '-'){
        if(curChar == '+'){
            advance();
            val += TERMEN();
        } else {
            advance();
            val -= TERMEN();
        }
    }
    advance();

    return val;
}

int main()
{
    fin = fopen("evaluare.in", "r");
    fout = fopen("evaluare.out", "w");

    advance();

    fprintf(fout, "%d", EXPRESIE());

    fclose( fin );
    fclose( fout );

    return 0;
}