Pagini recente » Cod sursa (job #1203516) | Cod sursa (job #2333094) | Cod sursa (job #2086006) | Cod sursa (job #951180) | Cod sursa (job #2682338)
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
stack <char> ops;
stack <long long> numbers;
long long a, b;
int getResult(long long n1, long long n2, char c) {
if (c == '+')
return n2+n1;
else if (c == '-')
return n2-n1;
else if (c == '*')
return n2*n1;
else if (c == '/')
return n2/n1;
else
return 0;
}
void evaluate() {
string op;
while (ops.empty() == false) {
op = ops.top();
ops.pop();
if (op[0] == '(')
break;
a = numbers.top();
numbers.pop();
b = numbers.top();
numbers.pop();
numbers.push(getResult(a, b, op[0]));
}
}
bool isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')');
}
int getOperatorPriority(char c) {
if (c == '(' || c == ')')
return 0;
else if (c == '+' || c == '-')
return 1;
else if (c == '*' || c == '/')
return 2;
}
string nextToken = "";
bool readToken(string& token) {
char c;
token = nextToken;
nextToken = "";
if (token != "")
return true;
while (f >> c) {
if (isOperator(c))
if (token != "") {
nextToken = c;
return true;
} else {
token = c;
return true;
}
else
token += c;
}
return (token != "");
}
long long convertToInt(string n)
{
char str[n.size()];
for (long long i = 0; i < n.size(); i++)
str[i] = n[i];
return atoi(str);
}
int main() {
string token;
while (readToken(token)) {
if (token == "(") {
ops.push(token[0]);
} else if (token == ")") {
evaluate();
} else if (isOperator(token[0])) {
if (ops.empty() == false && getOperatorPriority(token[0]) < getOperatorPriority(ops.top()))
evaluate();
ops.push(token[0]);
} else {
long long nr = convertToInt(token);
numbers.push(nr);
}
}
evaluate();
g << numbers.top();
return 0;
}