Pagini recente » Cod sursa (job #2846344) | Cod sursa (job #3004133) | Cod sursa (job #310750) | Cod sursa (job #2764911) | Cod sursa (job #362686)
Cod sursa(job #362686)
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
using namespace std;
bool cifra(string& s,unsigned int& i){
return (s[i]>='0' and s[i]<='9');
}
int numar(string& s,unsigned int&i){
int rez=0;
while(cifra(s,i)){
rez*=10;rez+=s[i]-'0';
i++;
}
return rez;
}
int main(){
ifstream in("evaluare.in");
ofstream out("evaluare.out");
string s;
in>>s;
stack<int> operanzi;
stack<char> operatori;
unsigned int i=0;
while(i<s.length()){
if(cifra(s,i)){
operanzi.push(numar(s,i));
}else if(s[i]=='+'){
i++;
if(operatori.empty()) operatori.push('+');
else{
if(operatori.top()=='+'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b+a);
operatori.pop();
}
else if(operatori.top()=='-'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b-a);
operatori.pop();
}else if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
operatori.push('+');
}
}else if(s[i]=='-'){
i++;
if(operatori.empty()) operatori.push('-');
else{
if(operatori.top()=='+'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b+a);
operatori.pop();
}
else if(operatori.top()=='-'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b-a);
operatori.pop();
}else if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
operatori.push('-');
}
}else if(s[i]=='*'){
i++;
if(operatori.empty()) operatori.push('*');
else{
if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
operatori.push('*');
}
}else if(s[i]=='/'){
i++;
if(operatori.empty()) operatori.push('/');
else{
if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
operatori.push('/');
}
}else if(s[i]=='('){
i++;
operatori.push('(');
}else if(s[i]==')'){
i++;
while(operatori.top()!='('){
if(operatori.top()=='+'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b+a);
operatori.pop();
}
else if(operatori.top()=='-'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b-a);
operatori.pop();
}else if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
}
operatori.pop();
}
}
while(!operatori.empty()){
if(operatori.top()=='+'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b+a);
operatori.pop();
}
else if(operatori.top()=='-'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b-a);
operatori.pop();
}else if(operatori.top()=='*'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b*a);
operatori.pop();
}
else if(operatori.top()=='/'){
int a,b;
a=operanzi.top();operanzi.pop();
b=operanzi.top();operanzi.pop();
operanzi.push(b/a);
operatori.pop();
}
}
out<<operanzi.top();
}