Pagini recente » Cod sursa (job #967738) | Cod sursa (job #1094490) | Cod sursa (job #2968244) | Cod sursa (job #2180814) | Cod sursa (job #2051140)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char expresie[100001];
char stivasemn[100001];
int polish[100001];
int eval[100001];
int i,nr,k,t,a,b,n;
char semn;
int main(){
fin>>expresie+1;
n=strlen(expresie+1);
expresie[0]='(';
expresie[n+1]=')';
for(i=0;i<=n+1;i++){
nr=0;
if(expresie[i]>='0' && expresie[i]<='9'){
while(expresie[i]>='0' && expresie[i]<='9'){
nr=nr*10+expresie[i]-'0';
++i;
}
--i;
polish[++t]=nr;
continue;
}
if(expresie[i]=='*' || expresie[i]=='/'){
while(k>0 && (stivasemn[k]=='*' || stivasemn[k]=='/')){
if(stivasemn[k]=='*')
polish[++t]=-1;
else
polish[++t]=-2;
--k;
}
}
if(expresie[i]=='+' || expresie[i]=='-'){
while(stivasemn[k]!='('){
if(stivasemn[k]=='+')
polish[++t]=-3;
if(stivasemn[k]=='-')
polish[++t]=-4;
if(stivasemn[k]=='*')
polish[++t]=-1;
else
polish[++t]=-2;
--k;
}
}
if(expresie[i]==')'){
while(stivasemn[k]!='('){
if(stivasemn[k]=='*')
polish[++t]=-1;
if(stivasemn[k]=='/')
polish[++t]=-2;
if(stivasemn[k]=='+')
polish[++t]=-3;
if(stivasemn[k]=='-')
polish[k]=-4;
--k;
}
--k;
continue;
}
stivasemn[++k]=expresie[i];
}
//corect pana aici!!! modifica evaluarea
k=0;
for(i=1;i<=t;i++){
if(polish[i]>=0)
eval[++k]=polish[i];
else{
b=eval[k];
--k;
a=eval[k];
if(polish[i]==-3){
eval[k]=a+b;
}
if(polish[i]==-4){
eval[k]=a-b;
}
if(polish[i]==-1){
eval[k]=a*b;
}
if(polish[i]==-2)
eval[k]=a/b;
}
}
fout<<eval[k];
return 0;
}