Cod sursa(job #1670201)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 31 martie 2016 15:49:44
Problema Evaluarea unei expresii Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char first;
FILE *fi, *fo;

int E(), T(), F(), Nr();

int main()
{
    fi=fopen("evaluare.in", "r");
    fo=fopen("evaluare.out", "w");
    first=fgetc(fi);
    fprintf(fo, "%d", E());
    fclose(fi);
    fclose(fo);
    return 0;
}

int E(){
    int s=0;
    if(first=='-')
        s-=T();
    else
        s+=T();
    while(first=='+' || first=='-'){
        if(first=='-'){
            first=fgetc(fi);
            s-=T();
        }
        else{
            first=fgetc(fi);
            s+=T();
        }
        first=fgetc(fi);
    }
    return s;
}

int T(){
    int p=F();
    while(first=='*' || first=='/'){
        if(first=='*'){
            first=fgetc(fi);
            p=p*F();
        }
        else{
            first=fgetc(fi);
            p=p/F();
        }
    }
    return p;
}

int F(){
    if(first=='('){
        first=fgetc(fi);
        return E();
    }
    return Nr();
}

int Nr(){
    int nr=0;
    do{
        nr=nr*10+first-'0';
        first=fgetc(fi);
    }while(isdigit(first));
    return nr;
}