Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

पोस्टफिक्स एक्सप्रेशन का मूल्यांकन

एक गणितीय एक्सप्रेशन को हल करने के लिए, हमें प्रीफिक्स या पोस्टफिक्स रूप की आवश्यकता होती है। इनफिक्स को पोस्टफिक्स में बदलने के बाद, सही उत्तर खोजने के लिए पोस्टफिक्स मूल्यांकन एल्गोरिदम की आवश्यकता होती है।

यहां भी हमें पोस्टफिक्स एक्सप्रेशन को हल करने के लिए स्टैक डेटा संरचना का उपयोग करना होगा।

पोस्टफिक्स एक्सप्रेशन से, जब कुछ ऑपरेंड मिलते हैं, तो उन्हें स्टैक में पुश किया जाता है। जब कोई ऑपरेटर मिलता है, तो स्टैक से दो आइटम पॉप किए जाते हैं और सही क्रम में ऑपरेशन किया जाता है। उसके बाद, परिणाम को भविष्य के उपयोग के लिए स्टैक में भी पुश किया जाता है। पूरे एक्सप्रेशन को पूरा करने के बाद, अंतिम परिणाम स्टैक टॉप में भी स्टोर होता है।

इनपुट और आउटपुट

इनपुट: पोस्टफिक्स एक्सप्रेशन: 53+62/*35*+
आउटपुट: परिणाम है: 39

एल्गोरिदम

postfixEvaluation(postfix)

इनपुट: मूल्यांकन के लिए पोस्टफिक्स एक्सप्रेशन
आउटपुट: पोस्टफिक्स रूप का मूल्यांकन करने के बाद उत्तर

शुरुआत
    पोस्टफिक्स एक्सप्रेशन में प्रत्येक कैरेक्टर ch के लिए, करें
        यदि ch एक ऑपरेटर ⨀ है, तो
            a := स्टैक से पहला तत्व पॉप करें
            b := स्टैक से दूसरा तत्व पॉप करें
            res := b ⨀ a
            res को स्टैक में पुश करें
        अन्यथा यदि ch एक ऑपरेंड है, तो
            ch को स्टैक में जोड़ें
    पूर्ण
    स्टैक टॉप का तत्व वापस करें
अंत

उदाहरण (C++ कोड)

#include <iostream>
#include <cmath>
#include <stack>
using namespace std;

float scanNum(char ch) {
    int value = ch;
    return float(value - '0');
}

int isOperator(char ch) {
    if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^')
        return 1;
    return -1;
}

int isOperand(char ch) {
    if(ch >= '0' && ch <= '9')
        return 1;
    return -1;
}

float operation(int a, int b, char op) {
    if(op == '+') return b + a;
    else if(op == '-') return b - a;
    else if(op == '*') return b * a;
    else if(op == '/') return b / a;
    else if(op == '^') return pow(b, a);
    else return INT_MIN;
}

float postfixEval(string postfix) {
    int a, b;
    stack stk;
    string::iterator it;
    
    for(it = postfix.begin(); it != postfix.end(); it++) {
        if(isOperator(*it) != -1) {
            a = stk.top(); stk.pop();
            b = stk.top(); stk.pop();
            stk.push(operation(a, b, *it));
        } else if(isOperand(*it) > 0) {
            stk.push(scanNum(*it));
        }
    }
    return stk.top();
}

int main() {
    string post = "53+62/*35*+";
    cout << "The result is: " << postfixEval(post);
}

आउटपुट

The result is: 39
  1. Python से पोस्टऑर्डर ट्रैवर्सल से एक्सप्रेशन ट्री कैसे बनाएं और मूल्यांकन करें? Python से पोस्टऑर्डर ट्रैवर्सल से एक्सप्रेशन ट्री कैसे बनाएं और मूल्यांकन करें?

    पोस्टफिक्स एक्सप्रेशन से स्टैक-आधारित एल्गोरिदम से एक्सप्रेशन ट्री बनाएं और रिकर्सिवली मूल्यांकन करें। एल्गोरिदम buildTree(postfix): स्टैक में (नोड, साइड) टपल्स रखें। पोस्टफिक्स से पॉप करके ट्री बनाएं। evaluate(root): अगर नोड न्यूमेरिक तो वैल्यू रिटर्न। वरना लेफ्ट/राइट रिकर्सिवली मूल्यांकन करके ऑपर

  1. - पायथन में बूलियन अभिव्यक्ति पार्स करना

    मान लीजिए हमारे पास एक बूलियन अभिव्यक्ति है, हमें उस अभिव्यक्ति का मूल्यांकन करने के बाद परिणाम ढूंढना है। एक अभिव्यक्ति या तो हो सकती है: t, जो True का मूल्यांकन करती है; f, जो False का मूल्यांकन करती है; !(expression), जो आंतरिक अभिव्यक्ति का तार्किक NOT है; &(expr1,expr2,...), जो 2 या अधिक आंतर

  1. - Python में स्ट्रिंग का मूल्यांकन करके ऑब्जेक्ट कैसे लौटाएं?

    बिल्ट-इन `eval()` फंक्शन को एक स्ट्रिंग तर्क की आवश्यकता होती है। हालांकि Python इंटरप्रेटर स्ट्रिंग को Python एक्सप्रेशन के रूप में मानता है और यदि यह वैध है तो इसका मूल्यांकन करता है और एक्सप्रेशन से परिणामी टाइप ऑब्जेक्ट लौटाता है। अंकगणितीय एक्सप्रेशन वाली स्ट्रिंग >>> x = eval(2+2) &g