Pagini recente » Cod sursa (job #2566405) | Cod sursa (job #2819763) | Cod sursa (job #3230083) | Cod sursa (job #2288602) | Cod sursa (job #1651334)
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
struct stiva1
{
float semne[100010];
float ordin[100010];
int ultimul=-1;
}stk1;
struct stiva2
{
float numere[100010];
int ultimul_nr=-1;
}stk2;
void push1(int semn, int ordin)
{
stk1.ultimul++;
stk1.semne[stk1.ultimul] = semn;
stk1.ordin[stk1.ultimul] = ordin;
}
void push2(float nr)
{
stk2.ultimul_nr++;
stk2.numere[stk2.ultimul_nr] = nr;
}
void pop1()
{
stk1.ultimul--;
}
void pop2()
{
stk2.ultimul_nr--;
}
int main()
{
freopen( "evaluare.in", "r", stdin);
freopen( "evaluare.out", "w", stdout);
char s[100010];
int i=0,x=0,k=0;
cin>>s;
s[strlen(s)-1]='#';
while(s[i]!='\0')
{
switch (s[i])
{
case '+':
push1(s[i],1+k);
x=0;
break;
case '-':
push1(s[i],1+k);
x=0;
break;
case '*':
push1(s[i],2+k);
x=0;
break;
case '/':
push1(s[i],2+k);
x=0;
break;
case '(':
k=k+10;
break;
case ')':
k=k-10;
break;
case '#':
push1(s[i],0);
x=0;
break;
default:
x = x * 10 + int(s[i]-'0');
if(s[i+1]<'0'||s[i+1]>'9')
{
push2(x);
}
break;
}
i++;
if(stk2.ultimul_nr>=1&&stk1.ordin[stk1.ultimul-1]>=stk1.ordin[stk1.ultimul])
{
pop2();
pop2();
pop1();
if(stk1.semne[stk1.ultimul]=='/')
{
float rez = stk2.numere[stk2.ultimul_nr+1] / stk2.numere[stk2.ultimul_nr+2];
push2(rez);
}
if(stk1.semne[stk1.ultimul]=='*')
{
float rez = stk2.numere[stk2.ultimul_nr+1] * stk2.numere[stk2.ultimul_nr+2];
push2(rez);
}
if(stk1.semne[stk1.ultimul]=='+')
{
float rez = stk2.numere[stk2.ultimul_nr+1] + stk2.numere[stk2.ultimul_nr+2];
push2(rez);
}
if(stk1.semne[stk1.ultimul]=='-')
{
float rez = stk2.numere[stk2.ultimul_nr+1] - stk2.numere[stk2.ultimul_nr+2];
push2(rez);
}
pop1();
i--;
}
}
cout<<stk2.numere[stk2.ultimul_nr];
// for(i=0;i<=stk1.ultimul;i++)
// cout<<stk1.ordin[i]<<" ";
//cout<<endl;
//for(i=0;i<=stk2.ultimul_nr;i++)
// cout<<stk2.numere[i]<<" ";
return 0;
}