Pagini recente » Cod sursa (job #3225796) | Cod sursa (job #385407) | Cod sursa (job #2538801) | Cod sursa (job #2554487) | Cod sursa (job #2634322)
#include <fstream>
using namespace std;
ifstream cin ("evaluare.in") ;
ofstream cout ("evaluare.out") ;
char s[100005] ;
int poz ;
/**
-eval() face operatiile de + sau -
-produs() face operatiile de * sau /
-termen() extrage termenul (il face din caracter numar) si verifica daca
este caracter sau paranteza
-ele se tot apeleaza una pe alta ca sa poata progresa (recursivitate indirecta)
**/
int eval () ;
int produs () ;
int termen () ;
int eval ()
{
int aux = produs () ;
while (s[poz] == '+' || s[poz] == '-')
{
if (s[poz++] == '+')
aux += produs() ;
else
aux -= produs() ;
}
return aux ;
}
int produs ()
{
int aux = termen() ;
while (s[poz] == '*' || s[poz] == '/')
{
if (s[poz++] == '*')
aux *= termen() ;
else
aux /= termen() ;
}
return aux ;
}
int termen()
{
int aux = 0 ;
if (s[poz] == '(')
{
poz++ ;
aux = eval() ;
poz++ ;
return aux ;
}
while (s[poz] >='0' && s[poz] <= '9')
aux = aux * 10 + (s[poz++] - '0');
return aux ;
}
void rez ()
{
cin >> s ;
cout << eval() ;
}
int main()
{
rez() ;
return 0;
}