Pagini recente » Cod sursa (job #2302402) | Cod sursa (job #2761499) | Argumentatia | Cod sursa (job #21704) | Cod sursa (job #895811)
Cod sursa(job #895811)
#include <cstdio>
#include <iostream>
using namespace std;
char S[100001], *p=S, chr;
long i,n=-1;
long adunare();
long factor();
long numar()
{
long r=0;
if (*p=='(')
{
++p;
r=adunare();
++p;
}
else while (*p>='0' && *p<='9')
{
r=r*10+(*p)-'0';
++p;
}
return r;
}
long factor()
{
long r=numar();
while (*p=='*' || *p=='/')
{
switch (*p)
{
case '*':
++p;
r*=numar();
break;
case '/':
++p;
r/=numar();
break;
}
}
return r;
}
long adunare()
{
long r=factor();
while (*p=='+' || *p=='-')
{
switch (*p)
{
case '+':
++p;
r+=factor();
break;
case '-':
++p;
r-=factor();
break;
}
}
return r;
}
int main ()
{
FILE *f,*g;
f=fopen("evaluare.in", "r");
g=fopen("evaluare.out", "w");
//CITIRE S
fscanf(f, "%c", &chr);
while (chr!=10)
{
S[++n]=chr;
if (fscanf(f, "%c", &chr)==EOF) break;
}
fprintf(g, "%d", adunare());
//for (i=0; i<=n; i++) fprintf(g, "%c", S[i]);
fclose(f); fclose(g);
return 0;
}