Cod sursa(job #1865877)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 2 februarie 2017 11:28:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <cctype>
FILE *fin,*fout;
char ch;
int e();
int t();
int f();
int e()
{
    int ans=t();
    while(ch=='+' || ch=='-')
    {
        if(ch=='+')
        {
            ch=fgetc(fin);
            ans+=t();
        }
        else
        {
            ch=fgetc(fin);
            ans-=t();
        }
    }
    return ans;
}
int t()
{
    int ans=f();
    while(ch=='*' || ch=='/')
    {
        if(ch=='*')
        {
            ch=fgetc(fin);
            ans*=f();
        }
        else
        {
            ch=fgetc(fin);
            ans/=f();
        }
    }
    return ans;
}
int f()
{
    int ans=0;
    if(ch=='(')
    {
        ch=fgetc(fin);
        ans=e();
        ch=fgetc(fin);
    }
    else
    {
        signed char s=1;
        if(ch=='-')
            s=-1,ch=fgetc(fin);
        while(isdigit(ch))
        {
            ans=ans*10+ch-'0';
            ch=fgetc(fin);
        }
        ans*=s;
    }
    return ans;
}
int main()
{
    fin=fopen("evaluare.in","r");
    fout=fopen("evaluare.out","w");
    ch=fgetc(fin);
    fprintf(fout,"%d",e());
    fclose(fin);
    fclose(fout);
    return 0;
}