Pagini recente » Cod sursa (job #2232156) | Cod sursa (job #636697) | Cod sursa (job #1874362) | Cod sursa (job #253391) | Cod sursa (job #2228818)
#include<fstream>
#include<string.h>
#include<vector>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string postf, inf;
int n, m;
char w;
vector<char>stivcik;
long evaluare(){
vector<long> stiva;
long num;
int i = 0;
while(i<n){
while(postf[i]==' ' || postf[i]=='\t') ++i;
if(postf[i]>47 && postf[i]<58){
num = 0;
while(i<n && postf[i]>47 && postf[i]<58){
num*=10;
num+=(postf[i]-48);
++i;
}
stiva.push_back(num);
}
if(postf[i]=='+'){
long op1 = stiva.back();
stiva.pop_back();
long op2 = stiva.back();
stiva.pop_back();
stiva.push_back(op1+op2);
i++;
}
if(postf[i]=='*'){
long op1 = stiva.back();
stiva.pop_back();
long op2 = stiva.back();
stiva.pop_back();
stiva.push_back(op1*op2);
i++;
}
if(postf[i]=='-'){
long op1 = stiva.back();
stiva.pop_back();
long op2 = stiva.back();
stiva.pop_back();
stiva.push_back(op2-op1);
i++;
}
if(postf[i]=='/'){
long op1 = stiva.back();
stiva.pop_back();
long op2 = stiva.back();
stiva.pop_back();
stiva.push_back(op2/op1);
i++;
}
}
return stiva.back();
}
int imp(char s){
if(s=='(') return 0;
if(s == '+' || s=='-') return 1;
return 2;
}
void conversie(){
int i = 0;
n = 0;
while(i<m){
w = inf[i];
if(w>47 && w<58){
postf[n++] = inf[i];
if(inf[i+1]<48 || inf[i+1]>57){ postf[n++] = ' ';}
}
else if(w=='('){
stivcik.push_back('(');
}
else if(w==')'){
char aux = stivcik.back();
while(aux!='('){
postf[n++] = aux;
postf[n++] = ' ';
stivcik.pop_back();
aux = stivcik.back();
}
stivcik.pop_back();
}
else{
if(stivcik.empty()) stivcik.push_back(w);
else{
while(!stivcik.empty() && imp(stivcik.back())>imp(w)){
postf[n++] = stivcik.back();
postf[n++] = ' ';
stivcik.pop_back();
}
stivcik.push_back(w);
}
}
i++;
}
while(!stivcik.empty()){
postf[n++] = stivcik.back();
postf[n++] = ' ';
stivcik.pop_back();
}
}
int main ()
{
getline(fin,inf);
m = inf.size();
conversie();
fout<<evaluare();
return 0;
}