Cod sursa(job #250276)

Utilizator cameleonGeorgescu Dan cameleon Data 30 ianuarie 2009 15:07:19
Problema Evaluarea unei expresii Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream.h>
#include <string.h>
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char e[100000]; long S[100000]; char op [100000]; int v1,v;
int n,i;

long numar(int &i)
	{
	long x=0;
	while(e[i]>='0'&&e[i]<='9'&&i<n)
	{x=x*10+(e[i]-'0');  i++;}
	i--;
	return x;
	}

long calcul (long a, long b, char o)
	{
	switch (o)
		{
		case '+': a+=b; break;
		case '-': a-=b; break;
		case '*': a*=b; break;
		case '/': a/=b; break;
		}
	return a;
	}

int prioritate (char a)
	{
	switch (a)
		{
		case '+':
		case '-': return 1;
		case '*':
		case '/': return 2;
		case '(': return 0;
		}
	}

int main ()                             //  Zennon
	{
	f.getline(e,10000);
	n = strlen(e);
	for(i=0;i<n;i++)
	switch (e[i])
		{
		case '+':
		case '-':
		case '*':
		case '/': while(prioritate(op[v1])>=prioritate(e[i]))
			{S[v-1]=calcul(S[v-1], S[v], op[v1]); v--; v1--;}
			op[++v1]=e[i]; break;

		case '(': v1++;
			  op[v1]=e[i];
			  break;
		case ')': while( op[v1]!='(')
				{
				S[v-1]=calcul(S[v-1], S[v], op[v1]);
				v1--;v--;
				}
			  v1--;
			  break;
		default:  v++; S[v]=numar(i);

		}
	while (v1)
		{
			S[v-1]=calcul(S[v-1], S[v], op[v1]);
			v1--; v--;
		}
	g<<S[1];
	f.close();
	g.close();
return 0;

	}