Cod sursa(job #2136847)

Utilizator rares1012Rares Cautis rares1012 Data 20 februarie 2018 12:03:45
Problema Evaluarea unei expresii Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.28 kb
#include <stdio.h>
#include <stdlib.h>

char s[100000];

int k=0;
int expresie();
int termen();
int factor();

int expresie(){
    int sum=termen();
    while(s[k]=='-' || s[k]=='+')
        {
            if(s[k]=='+')
            {
                k++;
                sum+=termen();
            }
            else
            {
                k++;
                sum-=termen();
            }
        }
    return sum;
}

int termen(){
    int prod=factor();
    while(s[k]=='*' || s[k]=='/'){
        if(s[k]=='*')
            {
                k++;
                prod*=factor();
            }
        else {
            k++;
            prod/=factor();
        }
    }
    return prod;
}

int factor(){
    int val=0,semn=1;
    while(s[k]=='-')
    {
        k++;
        semn*=-1;
    }
    while(s[k]=='('){
        k++;
        val=expresie();
        k++;
        return semn*val;
    }
    while(s[k]>='0' && s[k]<='9'){
        val=val*10+(s[k]-'0');
        k++;
    }
    return val*semn;
}

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