Mari Carmen نشر 20 نوفمبر 2020 أرسل تقرير نشر 20 نوفمبر 2020 #include<iostream> #include<string> #include<stack> using namespace std; bool isOperator(char ch) { if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%' || ch == '>' || ch == '<' || ch == '<=' || ch == '>=' || ch == '==' || ch == '!=' || ch == '&&' || ch == '||' || ch == '(') return true; else return false; } int precedence(char op) { if (op == '*' || op == '/' || op == '%') return 100; else if (op == '(') return 0; else if (op == '+' || op == '-') return 50; else if (op == '>' || op == '<' || op == '<=' || op == '>=') return 40; else if (op == '==' || op == '!=') return 30; else if (op == '&&') return 20; else if (op == '||') return 10; } double evaluate(double x, double y, char op) { if (op == '+') return y + x; else if (op == '-') return y - x; else if (op == '*') return y * x; else if (op == '/') if (x != 0) return y / x; else { cout << "divbyzero"; return 0; } else { cout << "invalid operator"; return -1; } } void main() { string exp; // infix cout << "input exp" << endl; getline(cin, exp); string postfix = ""; int j = 0; stack <char> s; for (int i = 0; i < exp.length(); i++) { if (exp[i] == '(') s.push(exp[i]); else if (exp[i] == ')') { while (!s.empty() && s.top() != '(') { postfix += s.top(); s.pop(); } //end while s.pop(); // to remove ( from stack } else if (exp[i] >= '0' && exp[i] <= '9') { postfix += exp[i]; } else if (isOperator(exp[i]) && s.empty()) { s.push(exp[i]); } else if (isOperator(exp[i]) && !s.empty()) { while (!s.empty() && precedence(exp[i]) <= precedence(s.top())) { postfix += s.top(); s.pop(); } s.push(exp[i]); } } while (!s.empty()) { postfix += s.top(); s.pop(); } cout << "postfix= " << postfix << endl; // Evaluation part stack <double> d; for (int i = 0; i < postfix.length(); i++) { if (!isOperator(postfix[i]) - 0) d.push(postfix[i]-'0'); else { double x = d.top(); d.pop(); double y = d.top(); d.pop(); double z = evaluate(x, y, postfix[i]); d.push(z); } }// end loop postfix double res = d.top(); d.pop(); cout << "Final result=" << res << endl; if (!d.empty()) cout << " Bad result" << endl; } ممكن مساعده كيف اعمل logic expiration اقتباس
السؤال
Mari Carmen
ممكن مساعده كيف اعمل logic expiration
0 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.