Cod sursa(job #1644214)

Utilizator yoshicumin3andrew t yoshicumin3 Data 9 martie 2016 22:03:46
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <cstdio>

using namespace std;

int citire(FILE* f){
    char cif;
    int n=0;
    do{
        cif=fgetc(f);
        if('0'<=cif && cif<='9')
            n=n*10+cif-'0';
    }while('0'<=cif && cif<='9');
    ungetc(cif,f);
    return n;
}

int prod(FILE *f);  //prototipul functiilor folosite
int rest(FILE *f);

int suma(FILE* f){
    int suma=prod(f);
    char cif;
    do{
        cif=fgetc(f);
        if(cif=='+')
            suma+=prod(f);
        else
            if(cif=='-')
                suma-=prod(f);
    }while(cif=='+' || cif=='-');
    ungetc(cif,f);
    return suma;
}

int prod(FILE *f){
    int produs=rest(f);
    char cif;
    do{
        cif=fgetc(f);
        if(cif=='*')
            produs*=rest(f);
        else
            if(cif=='/')
                produs/=rest(f);
    }while(cif=='*' || cif=='/');
    ungetc(cif,f);
    return produs;
}

int rest(FILE *f){
    int paran=0;
    char cif;
    cif=fgetc(f);
    if(cif=='('){
        paran=suma(f);
        cif=fgetc(f);   //citeste si ')'
    }
    else{
        ungetc(cif,f);  //daca am ajuns aici inseamna ca am inceput sa citim un numar, deci deja citim un numar, deci uitam ca i-am citit deja prima cifra si il citim oficial
        paran=citire(f);
    }
    return paran;
}

int main()
{
    FILE *f;
    f=fopen("evaluare.in","r");
    FILE *g;
    g=fopen("evaluare.out","w");
    fprintf(g,"%d",suma(f));
return 0;
}