Pagini recente » Cod sursa (job #2859728) | Cod sursa (job #249841) | Cod sursa (job #1124431) | Cod sursa (job #2937983) | Cod sursa (job #2297830)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int termen(int&);
int expresie(int&);
int factor(int&);
int numar(int&);
int expresie(int &p)
{
int rasp=termen(p);
while(p<s.size() and (s[p]=='-' or s[p]=='+'))
{
p++;
if(s[p-1]=='-') rasp-=termen(p);
else rasp+=termen(p);
}
fout << __PRETTY_FUNCTION__ << rasp << '\n';
return rasp;
}
int termen(int &p)
{
int rasp=factor(p);
while(p<s.size() and (s[p]=='*' or s[p]=='/'))
{
p++;
if(s[p-1]=='*') rasp*=factor(p);
else rasp/=factor(p);
}
fout << __PRETTY_FUNCTION__ << rasp << '\n';
return rasp;
}
int factor(int &p)
{
int rasp=0;
if(s[p]=='(')
{
p++;
rasp=expresie(p);
if(s[p]==')') p++;
}
else rasp=numar(p);
fout << __PRETTY_FUNCTION__ << rasp << '\n';
return rasp;
}
int numar(int &p)
{
int rasp=0;
if(p==6)
{
int ok=1;
}
while(p<s.size() and s[p]>='0' and s[p]<='9')
{
rasp*=10;
rasp+=(s[p]-'0');
p++;
}
fout << __PRETTY_FUNCTION__ << rasp << '\n';
return rasp;
}
int main()
{
int p=0;
fin >> s;
fout << expresie(p);
return 0;
}
/// O expresie este un termen sau o suma de termeni.
/// Un termen este un factor sau un produs de factori.
/// Un factor este un numar sau o expresie intre paranteze.