Cod sursa(job #565700)

Utilizator nautilusCohal Alexandru nautilus Data 28 martie 2011 10:32:21
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#define dmax 100010
using namespace std;

char s[dmax];
int poz;

int grad1();
int grad2();
int valoare();

void citire()
{
 ifstream fin("evaluare.in");
 
 fin.get(s,dmax);
 
 fin.close();
}


int grad1()
{
 int rez;
 
 rez = grad2();
 
 while (s[poz] == '+' || s[poz] == '-')
	 {
	  poz++;
	  
	  if (s[poz - 1] == '+')
		  rez += grad2(); else
		  rez -= grad2();
	 }
 
 return rez;
}


int grad2()
{
 int rez;
 
 rez = valoare();
 
 while (s[poz] == '*' || s[poz] == '/')
	 {
	  poz++;
	  
	  if (s[poz - 1] == '*')
		  rez *= valoare(); else
		  rez /= valoare();
	 }
 
 return rez;
}


int valoare()
{
 int rez=0;
 
 if (s[poz] >= '0' && s[poz] <= '9')
	 while (s[poz] >= '0' && s[poz] <= '9')
		 {
		  rez = rez * 10 + (s[poz] - '0');
		  poz++;
		 } else
	 {
	  poz++; /*sar peste '(' */
	  rez = grad1();
	  poz++; /*sar peste ')' */
	 }
	
 return rez;
}


void afisare()
{
 ofstream fout("evaluare.out");
 
 fout<<grad1();
 
 fout.close();
}

int main()
{
	
 citire();
 afisare();
	
 return 0;
}