Cod sursa(job #2315938)

Utilizator BotzkiBotzki Botzki Data 10 ianuarie 2019 19:54:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <string>
#include <stack>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int NMAX=100005;
char s[NMAX+5];
char *p;
//Trebuie sa calculam sumele si diferentele + -
//Trebuie sa calculam parantezele/ numerele simple
//Trebuie sa calculam prosule * /
int evaluare_inmultit_si_impartit();
int evaluare_inmultit_si_impartit();
int evaluare_adunari_si_scaderi();
int evaluare_paranteze_si_nr()
{
    int nr=0;
   if(*p=='(')
   {
       p++;
       nr=evaluare_adunari_si_scaderi();
       p++;// trec peste ')';
   }
   else
   {
       //avem nr
       while(*p>='0' and *p<='9')
       {
           nr=nr*10+(*p-'0');
           p++;
       }
   }
   return nr;
}
int evaluare_inmultit_si_impartit()
{
    int nr=0;
    nr=evaluare_paranteze_si_nr();
    while(*p=='*' or *p=='/')
    {
         if(*p=='*')
       {
           p++;//sarim peste operator
         nr=nr*evaluare_paranteze_si_nr();
         continue;
       }
        else
       {
           p++;//sarim peste operator
         nr=nr/evaluare_paranteze_si_nr();
         continue;
       }
    }
    return nr;
}
int evaluare_adunari_si_scaderi()
{
    int nr=0;
    nr=evaluare_inmultit_si_impartit();
    while(*p=='+' or *p=='-')
    {
       if(*p=='+')
       {
           p++;//sarim peste operator
         nr=nr+evaluare_inmultit_si_impartit();
         continue;
       }
        else
       {
           p++;//sarim peste operator
         nr=nr-evaluare_inmultit_si_impartit();
         continue;
       }
    }
    return nr;
}

 int main()
 {
     fin>>s;
     p=s;
    fout<<evaluare_adunari_si_scaderi()<<"\n";
 }