Pagini recente » Cod sursa (job #2932452) | Cod sursa (job #1628555) | Cod sursa (job #252817) | Cod sursa (job #1543629) | Cod sursa (job #2315938)
#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";
}