Pagini recente » Cod sursa (job #1550916) | Cod sursa (job #1667525) | Cod sursa (job #1544326) | Cod sursa (job #1236517) | Cod sursa (job #1974921)
#include <fstream>
#include <cstring>
using namespace std;
char op[100001],s[100001],pr[256];
int od[100001],v1,v2,nr;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int calcul (int a, int b, char ch){
switch (ch){
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
}
int main()
{
f>>s;pr['+']=pr['-']=1;
pr['/']=pr['*']=2;
for(int i=0;s[i]!=0;i++)
if(s[i]=='('){
op[++v1]='(';
}
else
if(s[i]==')'){
while(op[v1]!='('){
nr=calcul(od[v2-1],od[v2],op[v1]);
v1--;
v2--;
od[v2]=nr;
}
v1--;// eliminam (
}
else
if(s[i]>='0' &&s[i]<='9'){
nr=0;
int j=i;
while(s[j]>='0'&&s[j]<='9'&&s[j]!=0){
nr=nr*10+s[j]-'0';
j++;
}
if(i==1&&s[i-1]=='-'||i>1&&s[i-1]=='-'&&strchr("+-/*(",s[i-2])!=0)
nr=-nr;
od[++v2]=nr;
i=j-1;
}
else{
while(v1>0&&pr[s[i]]<=pr[op[v1]]){
nr=calcul(od[v2-1],od[v2],op[v1]);
v1--;
v2--;
od[v2]=nr;
}
op[++v1]=s[i];
}
while(v1>0)
{
nr=calcul(od[v2-1],od[v2],op[v1]);
v1--;
v2--;
od[v2]=nr;
}
g<<od[1];
return 0;
}