Cod sursa(job #173598)

Utilizator alexch16Chelariu Alexandru alexch16 Data 7 aprilie 2008 21:06:33
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream.h>
#include <string.h>
//#include <conio.h>

ofstream fout("ecutie.out");

char ec[1000];
int ind, N;

void Citire()
{
  ifstream fin("ecuatie.in");

  fin.get(ec, 1000);

  N = strlen(ec);

  fin.close();
}

float expr();
float factor();
float var();

float factor()
{
  float t;

   if (ec[ind] == '(' || ec[ind] == ')')
   {
    ind++;
    t = expr();
    ind++;
   }
  else
  {
    t=0;

    while (ind<N && ec[ind] != '+' && ec[ind] != '-' && ec[ind] != '*' && ec[ind] != '(' && ec[ind] !=')')
    {
      t = t*10+ec[ind]-'0';
      ind++;
    }
    //ind++;
  }

  return t;
}

float var()
{
  float t = factor();

  while (ind<=N && ec[ind] == '*' || ec[ind] == '/')
  {
     //ind++;
     if (ec[ind] == '*'){ ind++;
     t *= factor();
     }
     else
       if (ec[ind] == '/'){ ind++;
       t /= factor();
     }
  }

  return t;
}

float expr()
{
 float t = var();

  while(ind<=N && ec[ind] == '+' || ec[ind] == '-')
  {
    if (ec[ind] == '+')
     {
	ind++;
	t += var();
     }
    else
      if (ec[ind] == '-')
      {
	ind++;
	t -= var();
      }
  }

  return t;
}

int main()
{
  //clrscr();

  Citire();

  fout<<expr()<<"\n";

  return 0;

 //getch();
}