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

इंफिक्स को प्रीफिक्स एक्सप्रेशन में बदलें


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

पहले इन्फिक्स एक्सप्रेशन उलट जाता है। ध्यान दें कि उद्घाटन और समापन कोष्ठक को उलटने के लिए भी उलट दिया जाएगा।

उदाहरण के लिए:व्यंजक:A + B * (C - D)

व्यंजक को उलटने के बाद होगा:) D – C (* B + A

इसलिए हमें शुरुआती कोष्ठक को बंद करने वाले कोष्ठक में बदलना होगा और इसके विपरीत।

उलटने के बाद, व्यंजक पोस्टफ़िक्स . में बदल जाता है इंफिक्स टू पोस्टफिक्स एल्गोरिथम का उपयोग करके फॉर्म। उसके बाद फिर से उपसर्ग अभिव्यक्ति प्राप्त करने के लिए उपसर्ग अभिव्यक्ति को उलट दिया जाता है।

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

Input:
Infix Expression: x^y/(5*z)+2
Output:
Prefix Form Is: +/^xy*5z2

एल्गोरिदम

infixToPrefix(infix)

इनपुट - उपसर्ग रूप में बदलने के लिए इन्फिक्स व्यंजक।

आउटपुट - उपसर्ग अभिव्यक्ति।

Begin
   reverse the infix expression
   for each character ch of reversed infix expression, do
      if ch = opening parenthesis, then
         convert ch to closing parenthesis
      else if ch = closing parenthesis, then
         convert ch to opening parenthesis
   done

   postfix := find transformed infix expression to postfix expression
   prefix := reverse recently calculated postfix form
   return prefix
End

उदाहरण

#include<iostream>
#include<stack>
#include<locale> //for function isalnum()
#include<algorithm>
using namespace std;

int preced(char ch) {
   if(ch == '+' || ch == '-') {
      return 1;    //Precedence of + or - is 1
   }else if(ch == '*' || ch == '/') {
      return 2;    //Precedence of * or / is 2
   }else if(ch == '^') {
      return 3;    //Precedence of ^ is 3
   }else {
      return 0;
   }
}

string inToPost(string infix) {
   stack<char> stk;
   stk.push('#');    //add some extra character to avoid underflow
   string postfix = "";   //initially the postfix string is empty
   string::iterator it;

   for(it = infix.begin(); it!=infix.end(); it++) {
      if(isalnum(char(*it)))
         postfix += *it;    //add to postfix when character is letter or number
      else if(*it == '(')
         stk.push('(');
      else if(*it == '^')
         stk.push('^');
      else if(*it == ')') {
         while(stk.top() != '#' && stk.top() != '(') {
            postfix += stk.top();    //store and pop until ( has found
            stk.pop();
         }

         stk.pop();    //remove the '(' from stack
      }else {
         if(preced(*it) > preced(stk.top()))
            stk.push(*it);    //push if precedence is high
         else {
            while(stk.top() != '#' && preced(*it) <= preced(stk.top())) {
               postfix += stk.top();    //store and pop until higher precedence is found
               stk.pop();
            }
            stk.push(*it);
         }
      }
   }

   while(stk.top() != '#') {
      postfix += stk.top();    //store and pop until stack is not empty

      stk.pop();

   }
   return postfix;
}

string inToPre(string infix) {
   string prefix;
   reverse(infix.begin(), infix.end());    //reverse the infix expression
   string::iterator it;

   for(it = infix.begin(); it != infix.end(); it++) {    //reverse the parenthesis after reverse
      if(*it == '(')
         *it = ')';
      else if(*it == ')')
         *it = '(';
   }

   prefix = inToPost(infix);                 //convert new reversed infix to postfix form.
   reverse(prefix.begin(), prefix.end());    //again reverse the result to get final prefix form
   return prefix;
}

int main() {
   string infix = "x^y/(5*z)+2";
   cout << "Prefix Form Is: " << inToPre(infix) << endl;
}

आउटपुट

Prefix Form Is: +/^xy*5z2

  1. Convert.ToByte विधि सी # में

    Convert.ToByte विधि का उपयोग निर्दिष्ट मान को 8-बिट अहस्ताक्षरित पूर्णांक में बदलने के लिए किया जाता है। मान लें कि हमारे पास एक चर चर है। Char charVal = ‘a’; अब, इसे 8-बिट अहस्ताक्षरित पूर्णांक में बदलें। byte byteVal = Convert.ToByte(charVal); आइए अब एक और उदाहरण देखें। उदाहरण using

  1. किसी ऑब्जेक्ट x को पायथन में एक्सप्रेशन स्ट्रिंग में कैसे बदलें?

    str फ़ंक्शन किसी ऑब्जेक्ट को पायथन में एक स्ट्रिंग प्रस्तुति में परिवर्तित करता है। अजगर में repr () नामक एक और फ़ंक्शन है जो ऑब्जेक्ट को एक्सप्रेशन स्ट्रिंग में कनवर्ट करता है। __repr__ का लक्ष्य स्पष्ट होना है जबकि __str__ का पठनीय होना है। किसी वस्तु के आधिकारिक स्ट्रिंग प्रतिनिधित्व की गणना करने

  1. पाइथन में हेक्स स्ट्रिंग को int में कैसे परिवर्तित करें?

    हेक्स स्ट्रिंग्स में आमतौर पर 0x उपसर्ग होता है। यदि आपके पास यह उपसर्ग और वैध स्ट्रिंग है, तो आप पूर्णांक प्राप्त करने के लिए int(string, 0) का उपयोग कर सकते हैं। फ़ंक्शन को उपसर्ग से आधार की स्वचालित रूप से व्याख्या करने के लिए बताने के लिए 0 प्रदान किया जाता है। उदाहरण के लिए: >>> int(&q