Pagini recente » Cod sursa (job #3040616) | Cod sursa (job #809351) | Cod sursa (job #1908509) | Cod sursa (job #132422) | Cod sursa (job #2884704)
#include<bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100002];
char operatii[3][3]={"+-","*/","^"};
char cifre[11]={"0123456789"};
char *p=s;
char *z=s;
const int nivelMax=2;
int eval(int x);
int oper(int x,int y,char op){
switch(op){
case '+':
return x+y;
case '-':
return x-y;
case '*':
return x*y;
case '/':
return x/y;
}
return 0;
}
int el(){
int rez=0;
if(*p=='('){
++p;
rez=eval(0);
++p;
}
else{
while(strchr(cifre,*p)&&!((p!=NULL)&&(p[0]=='\0')))
rez=rez*10+*(++p-1)-'0';
cout<<rez<<'\n';
}
return rez;
}
int eval(int niv){
int rez;
if(niv==nivelMax)
rez=el();
else
rez=eval(niv+1);
while(strchr(operatii[niv],*p)&&!((p!=NULL)&&(p[0]=='\0')))
rez=oper(rez,eval(niv+1),*(++p-1));
return rez;
}
int main()
{
f>>s;
g<<eval(0)<<'\n';
f.close();
g.close();
return 0;
}