Pagini recente » Cod sursa (job #3293767) | Cod sursa (job #3292587) | Cod sursa (job #3292370) | Cod sursa (job #3278512) | Cod sursa (job #3294058)
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
string s; // șirul ce conține expresia
int pos; // poziția curentă de parcurgere în șir
// (Opțional) Funcție care sare peste eventualele spații, dacă există.
void skipSpaces() {
while (pos < s.size() && isspace(s[pos])) {
pos++;
}
}
// Declarație înaintea funcției parseFactor, pentru a permite apel recursiv.
int parseExpression();
// Funcția parseFactor: evaluează un factor (fie număr, fie expresie între paranteze)
int parseFactor() {
skipSpaces();
int result = 0;
// Dacă întâlnește o paranteză deschisă, evaluează expresia din interior
if (s[pos] == '(') {
pos++; // sare peste '('
result = parseExpression();
skipSpaces();
pos++; // sare peste ')'
return result;
} else {
// Procesare număr (susține și semnul negativ)
bool negative = false;
if (s[pos] == '-') {
negative = true;
pos++;
}
while (pos < s.size() && isdigit(s[pos])) {
result = result * 10 + (s[pos] - '0');
pos++;
}
return negative ? -result : result;
}
}
// Funcția parseTerm: evaluează factori separați prin '*' sau '/'
int parseTerm() {
int result = parseFactor();
skipSpaces();
while (pos < s.size() && (s[pos] == '*' || s[pos] == '/')) {
char op = s[pos++];
int nextFactor = parseFactor();
if (op == '*')
result = result * nextFactor;
else // op == '/' → împărțire întreagă
result = result / nextFactor;
skipSpaces();
}
return result;
}
// Funcția parseExpression: evaluează o expresie cu termeni separați prin '+' sau '-'
int parseExpression() {
int result = parseTerm();
skipSpaces();
while (pos < s.size() && (s[pos] == '+' || s[pos] == '-')) {
char op = s[pos++];
int nextTerm = parseTerm();
if (op == '+')
result = result + nextTerm;
else // op == '-'
result = result - nextTerm;
skipSpaces();
}
return result;
}
int main() {
cout << "Introduceti expresia aritmetica: ";
getline(cin, s);
pos = 0;
// Evaluează expresia
int result = parseExpression();
// Afișează rezultatul în terminal
cout << "Rezultatul evaluarii este: " << result << endl;
return 0;
}