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

C++ प्रोग्राम: स्टैक का उपयोग करके एक्सप्रेशन का मूल्यांकन करना


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

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

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

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

एल्गोरिदम

postfixEvaluation(postfix)

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

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

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

उदाहरण कोड

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

float scanNum(char ch) {
    int value;
    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); // 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();
}

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

आउटपुट

The result is: 39

  1. C++ प्रोग्राम का उपयोग करके प्रोग्राम कैसे लॉन्च करें? C++ प्रोग्राम का उपयोग करके प्रोग्राम कैसे लॉन्च करें?

    सिस्टम कमांड का उपयोग करके एप्लिकेशन लॉन्च करना यहां हम देखेंगे कि C++ प्रोग्राम का उपयोग करके नोटपैड जैसे किसी थर्ड-पार्टी एप्लिकेशन को कैसे शुरू किया जाए। यह प्रोग्राम बहुत सरल है; हम कमांड प्रॉम्प्ट कमांड का उपयोग करके यह कार्य कर सकते हैं। हम system() फ़ंक्शन के अंदर एप्लिकेशन नाम पास करेंगे। य

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

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

  1. - टर्नरी एक्सप्रेशन का मूल्यांकन करने का C++ प्रोग्राम

    मान लीजिए हमारे पास एक एक्सप्रेशन है जो टर्नरी एक्सप्रेशन को रखता है, हमें एक्सप्रेशन के परिणाम का मूल्यांकन करना है। यह T और F जैसे कुछ मानों को सत्य और असत्य के लिए और ? और : वर्णों का समर्थन करता है। कुछ गुण हैं: दिए गए स्ट्रिंग की लंबाई 10000 से कम या बराबर होनी चाहिए। सशर्त एक्सप्रेशन दाएं से