Cod sursa(job #2223307)

Utilizator david.sachelarieDavid Sachelarie david.sachelarie Data 19 iulie 2018 18:13:49
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.42 kb
#include <stdio.h>
#include <stdlib.h>

char v[100000];

int j;
int n;

int multiply();
int buildElement();

int evaluateExpression(){
    int nr=multiply(),nr2;
    while(j<n && (v[j]=='+' || v[j]=='-')){
        if(v[j]=='+'){
            j++;
            nr2=multiply();
            nr+=nr2;
        }
        else if(v[j]=='-'){
            j++;
            nr2=multiply();
            nr-=nr2;
        }
    }
    return nr;
}

int multiply(){
    int nr=buildElement(),nr2;
    while(v[j]=='*' || v[j]=='/'){
        if(v[j]=='*'){
            j++;
            nr2=buildElement();
            nr*=nr2;
        }
        else if(v[j]=='/'){
            j++;
            nr2=buildElement();
            nr/=nr2;
        }
    }
    return nr;
}

int buildElement(){
    int nr=0;
    if(v[j]=='('){
        j++;
        nr=evaluateExpression();
        j++; /*trecem peste ")" */
    }
    else{
        while(v[j]>='0' && v[j]<='9'){
            nr=nr*10+v[j]-'0';
            j++;
        }
    }
    return nr;
}

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

    char a;
    int i=0;
    a=fgetc(fin);
    while(a!=EOF && a!='\n'){
        v[i]=a;
        i++;
        a=fgetc(fin);
    }

    n=i;
    fprintf(fout, "%d\n" ,evaluateExpression());
    fclose(fin);
    fclose(fout);
    return 0;
}