Pagini recente » Cod sursa (job #3173872) | Cod sursa (job #410508) | Cod sursa (job #2560835) | Cod sursa (job #2455662) | Cod sursa (job #1110608)
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char S[100000];
int REZ[100000],krez;
int k,x,i;
char c;
char E[100005];
int priority(char c)
{
if (c=='(')
return -1;
if (c=='+' || c=='-')
return 0;
return 1;
}
int calcul(int a, int b, int op)
{
if (op=='+')
return a+b;
if (op=='-')
return a-b;
if (op=='*')
return a*b;
if (op=='/')
{
if(b!=0)
return a/b;
}
}
int main()
{
k=0;
krez=0;
f.getline(E+1,100001);
E[0]='(';
strcat(E,")");
for (i=0;E[i]!='\0';i++)
{
c=E[i];
if (c=='(')
{
S[++k]=c;
continue;
}
if (c==')')
{
while (S[k]!='(')
{
krez--;
REZ[krez]=calcul(REZ[krez],REZ[krez+1],S[k]);
k--;
}
k--;
continue;
}
if (c>='0' && c<='9')
{
x=0;
while(E[i]!='\0' && E[i]>='0' && E[i]<='9')
{
x=x*10+(E[i]-'0');
i++;
}
i--;
REZ[++krez]=x;
continue;
}
if (c=='+' || c=='-' || c=='*' || c=='/')
{
while (priority(S[k])>=priority(c))
{
krez--;
REZ[krez]=calcul(REZ[krez],REZ[krez+1],S[k]);
k--;
}
S[++k]=c;
continue;
}
}
g<<REZ[1];
f.close();
g.close();
return 0;
}