Pagini recente » Cod sursa (job #1244511) | Cod sursa (job #3335284) | Cod sursa (job #3335165) | Cod sursa (job #3330430) | Cod sursa (job #3335164)
#include <fstream>
using namespace std;
int expresie(const string& s, int& p);
int termen(const string& s, int& p);
int factor(const string& s, int& p);
int numar(const string& s, int& p);
int expresie(const string& s, int& p) {
//E=T+T+...T
int result=termen(s,p);
while (p<s.size()&&{s[p]=='+' || s[p]=='-'}) {
int sign = {s[p]=='+' ? 1:-1};
p++;
result += sign * termen(s,p);
}
return result;
}
int termen(const string& s, int& p) {
//T=F*/F*/F...F
int result=factor(s,p);
while(p<s.size() && (s[p] == '*' || s[p] == '/')) {
bool mul= (s[p] == '*');
p++;
int fact= factor(s,p);
if (mul)
result*=fact;
else
result/=fact;
}
return result;
}
int factor(const string& s, int& p) {
if (s[p]=='(') {
p++;
int result=expresie(s,p);
p++;
return result;
}
else
return numar(s,p);
}
int numar(const string& s, int& p) {
int sign = 1;
if(s[p]=='-') {
sign=-1;
p++;
}
int nr=0;
for(;p<s.size() && isdigit(s[p]); p++) {
nr=nr*10+s[p] - '0';
}
return sign*nr;
}
int main()
{
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
string s; cin>>s;
int p=0;
cout<<expresie(s,p) << "\n";
return 0;
}