Pagini recente » Cod sursa (job #2569966) | Cod sursa (job #2038749) | Cod sursa (job #834263) | Cod sursa (job #2922181) | Cod sursa (job #299087)
Cod sursa(job #299087)
#include<fstream.h>
#include<string.h>
int prioritate(char c)
{
if (c=='(') return 0;
if (c=='+' || c=='-') return 1;
if (c=='*'||c=='/') return 2;
return 3;
}
char a1[100000],a2[100000],a3[100000],semn[]="+-*/";
int n2=-1,n3=-1,n=-1;
long b[50000],nr;
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int i;
f.get(a1,105);
for(i=0;a1[i];i++)
{
if(a1[i]>='0'&&a1[i]<='9')
{
while(a1[i]>='0'&&a1[i]<='9')
a3[++n3]=a1[i++];
i--;
a3[++n3]=' ';
}
if(a1[i]=='(') a2[++n2]=a1[i];
if(a1[i]==')')
{
while(a2[n2]!='(')
{
a3[++n3]=a2[n2--];
}
n2--;
}
if(strchr(semn,a1[i]))
{
while(prioritate(a1[i])<=prioritate(a2[n2])&&n2>=0)
a3[++n3]=a2[n2--];
a2[++n2]=a1[i];
}
}
while(n2>-1) a3[++n3]=a2[n2--];
for(i=0;i<=n3;i++)
{
if(a3[i]>='0'&&a3[i]<='9')
{
nr=0;
while(a3[i]>='0'&&a3[i]<='9')
nr=nr*10+a3[i++]-'0';
b[++n]=nr;
}
if(strchr(semn,a3[i]))
{
switch(a3[i])
{
case '+':b[n-1]+=b[n];n--; break;
case '-':b[n-1]-=b[n];n--; break;
case '*':b[n-1]*=b[n];n--; break;
case '/':b[n-1]/=b[n];n--; break;
}
}
}
g<<b[n];
f.close();
g.close();
return 0;
}