Pagini recente » Cod sursa (job #2939301) | Cod sursa (job #964608) | Cod sursa (job #2542465) | Cod sursa (job #1456459) | Cod sursa (job #2939293)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char e[100010];
int c;
int suma(), produs(), factor(), numar();
int main()
{
f>>e;
g<<suma();
return 0;
}
int suma()
{
int ret=produs();
while(e[c]=='+' || e[c]=='-')
{
if(e[c]=='+')
{
c++;
ret+=produs();
}
else
{
c++;
ret-=produs();
}
}
return ret;
}
int produs()
{
int ret=factor();
while(e[c]=='*' || e[c]=='/')
{
if(e[c]=='*')
{
c++;
ret*=factor();
}
else
{
c++;
ret/=factor();
}
}
return ret;
}
int factor()
{
//cazul 1:factorul este o paranteza(suma de termeni)
if(e[c]=='(')
{
c++;
int ret=suma();
c++;
return ret;///dupa evaluarea parantezei cursorul ajunge pe ')'.Trec peste.
}
///cazul 2:factorul este un numar
return numar();
}
int numar()
{
int ret=0;
while(isdigit(e[c]))
{
ret=10*ret+e[c]-'0';
c++;
}
return ret;
}