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

C++ प्रोग्राम में रिवर्स पोलिश नोटेशन का मूल्यांकन करें


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

पोस्टफ़िक्स एक्सप्रेशन से, जब कुछ ऑपरेंड मिलते हैं, तो उन्हें स्टैक में धकेल दिया जाता है। जब कुछ ऑपरेटर मिलते हैं, तो दो आइटम स्टैक से पॉप किए जाते हैं और फिर ऑपरेशन सही क्रम में किया जाता है। उसके बाद, परिणाम को भविष्य में उपयोग के लिए स्टैक में भी धकेल दिया जाता है। पूरे एक्सप्रेशन को पूरा करने के बाद फाइनल रिजल्ट भी स्टैक टॉप में स्टोर हो जाता है। तो यदि व्यंजक “53+62/*35*+” है, तो उत्तर 39

. होगा

आइए चरणों को देखें -

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

उदाहरण(C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include<iostream>
#include<cmath>
#include<stack>
#include<climits>
using namespace std;
float scanNum(char ch){
   int value;
   value = ch;
   return float(value-'0');//return float from character
}
int isOperator(char ch){
   if(ch == '+'|| ch == '-'|| ch == '*'|| ch == '/' || ch == '^')
      return 1;//character is an operator
   return -1;//not an operator
}
int isOperand(char ch){
   if(ch >= '0' && ch <= '9')
      return 1;//character is an operand
   return -1;//not an operand
}
float operation(int a, int b, char op){
   //Perform operation
   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); //find b^a
   else
      return INT_MIN; //return negative infinity
}
float postfixEval(string postfix){
   int a, b;
   stack<float> stk;
   string::iterator it;
   for(it=postfix.begin(); it!=postfix.end(); it++){
      //read elements and perform postfix evaluation
      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);
}

इनपुट

"53+62/*35*+"

आउटपुट

The result is: 39

  1. सी ++ प्रोग्राम रिकर्सन का उपयोग करके एक वाक्य को उलटने के लिए

    एक स्ट्रिंग एक आयामी वर्ण सरणी है जिसे एक शून्य वर्ण द्वारा समाप्त किया जाता है। एक स्ट्रिंग के विपरीत विपरीत क्रम में एक ही स्ट्रिंग है। उदाहरण के लिए। Original String: Apple is red Reversed String: der si elppA एक प्रोग्राम जो रिकर्सन का उपयोग करके एक स्ट्रिंग के रूप में एक वाक्य को उलट देता है,

  1. सी ++ प्रोग्राम एक नंबर रिवर्स करने के लिए

    किसी संख्या को उलटने का अर्थ है उसके अंकों को उल्टे क्रम में संग्रहित करना। उदाहरण के लिए:यदि संख्या 6529 है, तो आउटपुट में 9256 प्रदर्शित होता है। किसी संख्या को उलटने का कार्यक्रम इस प्रकार दिया गया है - उदाहरण #include <iostream> using namespace std; int main() {    int num = 63

  1. सी ++ में टर्नरी अभिव्यक्ति का मूल्यांकन करने का कार्यक्रम

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