Pagini recente » Cod sursa (job #2408106) | Cod sursa (job #2100452) | Cod sursa (job #448193) | Cod sursa (job #2932126) | Cod sursa (job #2669597)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
char s[100005];
stack <char> semne;
stack <int> numere;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int calcul(int a, int b, char o)
{
if(o=='*')
return a*b;
if(o=='-')
return a-b;
if(o=='+')
return a+b;
if(o=='/')
return a/b;
}
int ordine(char x,char y)
{
if(x=='(')
return 1;
if(y=='(' && (x=='*' || x=='/' || x=='+' || x=='-'))
return 1;
if((x=='*' || x=='/')&&(y=='+' || y=='-'))
return 1;
return 0;
}
void formare()
{
int n=strlen(s),ok=1,i=0;
while(i<n)
{
if(s[i]<'0' || s[i]>'9')
{
if(semne.empty() || ordine(s[i],semne.top()))
semne.push(s[i]);
else
{
if(s[i]==')')
{
while(semne.top()!='(')
{
int a=numere.top();
numere.pop();
int b=numere.top();
numere.pop();
numere.push(calcul(b,a,semne.top()));
semne.pop();
}
semne.pop();
}
else
{
int a=numere.top();
numere.pop();
int b=numere.top();
numere.pop();
numere.push(calcul(b,a,semne.top()));
semne.pop();
semne.push(s[i]);
}
}
}
else
{
int nr=0;
while((s[i]>'0' || s[i]=='0') && (s[i]<'9' || s[i]=='9'))
nr=nr*10+(s[i]-'0'), i++;
i--;
numere.push(nr);
}
i++;
}
int r;
while(!semne.empty())
{
int a=numere.top();
numere.pop();
int b=numere.top();
numere.pop();
r=(calcul(b,a,semne.top()));
numere.push(r);
semne.pop();
}
g<<r;
}
int main()
{
f.get(s,100005);
// cout<<s;
formare();
return 0;
}