Pagini recente » Cod sursa (job #428584) | Cod sursa (job #2231578) | Cod sursa (job #546116) | Cod sursa (job #980885) | Cod sursa (job #389457)
Cod sursa(job #389457)
#include <cstdio>
#include <cstring>
#define LMAX 1001
void expresie();
void termen();
void factor();
int calculare();
char c[LMAX];
char rez[LMAX];
int i=0;
int lc,lrez=0;
int main()
{
freopen("polonez.in","r",stdin);
freopen("polonez.out","w",stdout);
fgets(c,LMAX,stdin);
lc=strlen(c);
while(!c[lc] || c[lc]=='\n' || c[lc]==EOF)
lc--;
expresie();
printf("%d",calculare());
return 0;
}
void expresie()
{
termen();
char a;
while((c[i]=='+' || c[i]=='-') && i<lc)
{
a=c[i];
i++;
termen();
rez[++lrez]=a;
}
}
void termen()
{
factor();
char a;
while((c[i]=='*'|| c[i]=='/')&& i<lc)
{
a=c[i];
i++;
termen();
rez[++lrez]=a;
}
}
void factor()
{
if(c[i]=='(' && i<lc)
{
i++;
expresie();
i++;
}
else
{
while(c[i]>='0' && c[i]<='9')
rez[++lrez]=c[i++];
rez[++lrez]=' ';
}
}
int calculare()
{
int N[LMAX],nr=0;
int x;
for(int i=1;i<=lrez;i++)
if(rez[i]>='0' && rez[i]<='9')
{
x=0;
while(rez[i]>='0' && rez[i]<='9')
x=x*10+rez[i++]-'0';
N[++nr]=x;
}
else if(rez[i]=='+' || rez[i]=='-' || rez[i]=='*' || rez[i]=='/')
{
if(rez[i]=='+') N[nr-1]+=N[nr];
else if(rez[i]=='-') N[nr-1]-=N[nr];
else if(rez[i]=='*') N[nr-1]*=N[nr];
else N[nr-1]/=N[nr];
nr--;
}
return N[1];
}