Pagini recente » Cod sursa (job #1077825) | Cod sursa (job #1080846) | Cod sursa (job #2009208) | Cod sursa (job #184533) | Cod sursa (job #1462920)
//Varianta cu recursivitate indirecta
#include <fstream>
#include <string.h>
using namespace std;
#define MAXSIR 100005
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char str[MAXSIR],*p;
int adunare();
int produs();
int calcul();
int main()
{
cin.getline(str,MAXSIR); p=str;
cout<<adunare();
}
int adunare()
{
int val=produs();
while(*p=='+' || *p=='-')
{
if(*p=='+')
{
++p;
val+=produs();
continue;
}
if(*p=='-')
{
++p;
val-=produs();
continue;
}
break;
}
return val;
}
int produs()
{
int val=calcul();
while(*p=='*' || *p=='/')
{
if(*p=='*')
{
++p;
val*=calcul();
continue;
}
if(*p=='/')
{
++p;
val/=calcul();
continue;
}
break;
}
return val;
}
int calcul()
{
int val=0;
if(*p=='(')
{
++p;
val+=adunare();
++p;
}
else
{
while(isdigit(*p))
{
val=val*10+*p-'0';
++p;
}
}
return val;
}