Cod sursa(job #635461)

Utilizator gicu_01porcescu gicu gicu_01 Data 19 noiembrie 2011 11:51:33
Problema Evaluarea unei expresii Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char s[];

int val(int left,int right)
{
    int t,i;
    t=0;
    for (i=left; i<=right; i++) t=t*10+s[i]-'0';
    return t;
}

int eval(int left,int right,int r)
{
    int i,p1,p2,k;
    p1=p2=k=0;
    for (i=left; i<=right; i++)
     if (s[i]=='(') k++; else
      if (s[i]==')') k--; else
       if (k==0)
       {
           if (s[i]=='+') return eval(left,i-1,1)+eval(1+i,right,1)*r; else
           if (s[i]=='-') return eval(left,i-1,1)-eval(1+i,right,-1)*r; else
           if (s[i]=='*') p1=i; else
           if (s[i]=='/') p2=i;
       }
    if (p1>p2) return eval(left,p1-1,1)*eval(1+p1,right,1); else
    if (p2>0) return eval(left,p2-1,1)/eval(1+p2,right,1); else
    if (s[left]=='(') eval(left+1,right-1,1); else
    return val(left,right);
}


int main()
{
    FILE *in,*out;
    in=fopen("evaluare.in","r");
    fgets(s,100000,in);
    fclose(in);
    out=fopen("evaluare.out","w");
    printf(out,"%i",eval(0,strlen(s)-1,1));
    fclose(out);
    return 0;
}