Pagini recente » Cod sursa (job #1093893) | Cod sursa (job #1041513) | Cod sursa (job #1055613) | Cod sursa (job #2980341) | Cod sursa (job #2680748)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
stack < char > ops;
vector < int > v;
char s[100005];
int aa;
int priority[505];
char ch;
int no[505];
int chars[505];
stack < int > numb;
void operand(char ch) {
if (priority[ch]==1) {
ops.push(ch);
}
else if (priority[ch]==2) {
ops.push(ch);
}
else if (priority[ch]==3) {
while (ops.empty()==0 && priority[ops.top()]==2) {
v.push_back(no[ops.top()]);
ops.pop();
}
ops.push(ch);
}
else {
while (ops.empty()==0 && ops.top()!='(') {
v.push_back(no[ops.top()]);
ops.pop();
}
ops.pop();
}
}
int calculate(int a, int b, int op) {
if (op == -3) {
return a*b;
}
else if (op == -4) {
return a/b;
}
else if (op == -5) {
return a+b;
}
else {
return a-b;
}
}
void number_and_priority_init() {
priority['('] = 1;
priority['*'] = priority['/'] = 2;
priority['+'] = priority['-'] = 3;
priority[')'] = 4;
no['(']=-1; chars[1]='(';
no[')']=-2; chars[2]=')';
no['*']=-3; chars[3]='*';
no['/']=-4; chars[4]='/';
no['+']=-5; chars[5]='+';
no['-']=-6; chars[6]='-';
}
int main()
{
f >> s;
ch = s[aa];
number_and_priority_init();
while (ch!='\0') {
if (isdigit(ch)!=0) {
int nr = 0;
while (isdigit(ch)!=0) {
nr = nr*10 + (ch-'0');
ch = s[++aa];
}
v.push_back(nr);
}
else {
operand(ch);
ch = s[++aa];
}
}
while (ops.empty()==0) {
v.push_back(no[ops.top()]);
ops.pop();
}
for (int i=0;i<v.size();i++) {
if (v[i]>=0) {
numb.push(v[i]);
}
else {
int nr1 = numb.top();
numb.pop();
int nr2 = numb.top();
numb.pop();
numb.push(calculate(nr2,nr1,v[i]));
}
}
g << numb.top();
return 0;
}