Pagini recente » Cod sursa (job #3279748) | Cod sursa (job #511263) | Cod sursa (job #1607622) | Cod sursa (job #476596) | Cod sursa (job #305790)
Cod sursa(job #305790)
#include<stdlib.h>
#include<fstream>
#include<string>
#include<stack>
#include<vector>
using namespace std;
ifstream fin;
ofstream fout;
stack<char>st;
stack<int>v;
string expresion,form;
inline int op(char c)
{
if(c=='+'||c=='-') return 1;
if(c=='*'||c=='/') return 2;
return 0;
}
int main()
{int i,p,a,b;
fin.open("evaluare.in");
getline(fin,expresion);
fin.close();
for(i=0;i<expresion.length();) /*transformarea in forma poloneza*/
{if(expresion[i]>='0'&&expresion[i]<='9')
{while(expresion[i]>='0'&&expresion[i]<='9') form.push_back(expresion[i++]);
form.push_back('.');continue;
}
if(expresion[i]=='('){st.push(expresion[i++]); continue;}
if(expresion[i]==')')
{while(!st.empty()&&st.top()!='(') form.push_back(st.top()),st.pop();
st.pop(); ++i; continue;
}
p=op(expresion[i]);
while(!st.empty()&&p<=op(st.top())) form.push_back(st.top()),st.pop();
st.push(expresion[i++]);
}
while(!st.empty()) form.push_back(st.top()),st.pop();
for(i=0;i<form.length();) /*evaluarea expresie*/
if(form[i]>='0'&&form[i]<='9')
{v.push(atoi(&form[i]));
while(form[i]>='0'&&form[i]<='9') ++i;
++i; continue;
}else {b=v.top(); v.pop(); a=v.top(); v.pop();
switch(form[i])
{
case '+': v.push(a+b);break;
case '-': v.push(a-b);break;
case '*': v.push(a*b);break;
case '/': v.push(a/b);break;
} ++i;
}
fout.open("evaluare.out"); fout<<v.top(); v.pop();
fout.close();
return 0;
}