कम्प्युटरसफ्टवेयर

RPN: अल्गोरिदम, विधि र उदाहरण

RPN एक पटक संसारमा कम्प्युटर प्रोग्रामर को आधार गठन। आज यो यति प्रसिद्ध छैन। तसर्थ, हास्य चित्रण, बाहिर एक "reverse" पोलिश ससेज रोल चित्रण गर्ने, अझै पनि केही ज्ञान प्रोग्रामर द्वारा गलत बुझयो गर्न सकिन्छ। छैन राम्रो तरिकाले मजाक व्याख्या, तर यो मामला मा यो पूर्णतया जायज हुनेछ।

infix

सबै प्रोग्रामर, र सबै भन्दा विद्यार्थी संचालक को प्रयोग परिचित छन्। उदाहरणका लागि, चर एक्स र वाई प्रयोग प्लस साइन लागि अभिव्यक्ति x + summation मान। कम राम्रो यो वास्तवमा, मिसिन लागि ठूलो समस्या छ, गणित संकेतन, infix संकेतन भनिन्छ देखि उधारो छ भन्ने तथ्यलाई ज्ञात छ। रूपमा इनपुट दुई मान बायाँ र दायाँ मा लिपिबद्ध छन् यस संचालक प्राप्त गर्दछ। कार्यक्रम मा संकेतन संकेत अपरेसन संग वैकल्पिक प्रयोग। उदाहरणका लागि, X + Y संकलक र अन्ततः धर्मान्तरित जसमा infix संकेतन गुना (एक्स, वाई) को एक समारोह, लेखिएको गर्न सकिन्छ। तथापि, सबैले गणित जो लगभग हरेक कार्यक्रम भाषामा आन्तरिक मिनी-भाषा एक प्रकारको गठन गणित अभिव्यक्ति, प्रयोग गर्न पनि राम्रो छ थाह छ।

सूत्र अनुवादक

पहिलो साँच्चै सफल फोर्ट्रान Language कार्यक्रम भाषा भएको छ त हदसम्म किनभने गणित अभिव्यक्ति (अर्थात् सूत्र ..) यो परिवर्तित (प्रसारण) कोड मा, यो यसैले नाम - सूत्र अनुवाद। कि पूर्व, उनि, उदाहरणका लागि, लेख्न कार्य को रूप मा जोडेको थियो (र गुणन (ख, ग))। को प्रोग्रामर सी द्वारा बी Mutliply गर्न एक थप्नुहोस् जस्तै कुराहरू लेख्न थियो किनभने स्वचालित रूपान्तरण सूत्र लागू को COBOL समस्या धेरै गाह्रो मानिन्थ्यो

infix गलत के हो?

समस्या संचालक पूर्वता र associativity जस्ता गुणहरू छ, छ। यस कारण, infix समारोह को परिभाषा गैर-तुच्छ कार्य बन्नेछ। उदाहरणका लागि, गुणन उच्च जो अभिव्यक्ति 2 + 3 * 4 रूपमा दायाँ बायाँ देखि संचालक को प्रदर्शन हुनेछ, 4 ले गुणन 2 र 3 को योगफल, बराबर छैन भन्ने हो, साथै वा घटाउ भन्दा पूर्वता छ। वास्तवमा, 4 गुणा 3 र थप 2 यो उदाहरण infix अभिव्यक्ति को गणना अक्सर संचालक र operands को क्रम मा परिवर्तन आवश्यक देखाउँछ। साथै, यो थप स्पष्ट संकेतन हेर्न ब्रेसहरू प्रयोग गर्न आवश्यक छ। उदाहरणका लागि, (2 + 3) * (4 + 5) छैन कोष्ठकमा बिना, 2 + 3 * 4 + 5 तपाईं 4 द्वारा 3 गुणा र 2 र 5 थप्न आवश्यक अर्थ किनभने लिखित गर्न सकिन्छ।

जसमा तपाईं संचालक गणना गर्न चाहनुहुन्छ क्रम लामो सम्झना आवश्यक छ। यस कारण, गणित सिक्न अक्सर सुरु गर्ने विद्यार्थी पनि यदि वास्तविक सञ्चालन सही प्रदर्शन गर्दै छन्, गलत परिणाम प्राप्त। यो हृदय द्वारा कार्य बयान क्रम सिकाउन आवश्यक छ। पहिलो, कार्य कोष्ठकमा, त्यसपछि गुणन र भाग, र अन्तमा साथै र घटाउ मा बाहिर हुनुपर्छ। तर त्यहाँ गणितीय अभिव्यक्ति लेखन infix संकेतन मात्र थप गर्न थप गर्न सकिन्छ कि सम्भव "सानो भाषाहरू" को छ रूपमा अर्को तरिका हो।

उपसर्ग र प्रत्यय संकेतन

सबैभन्दा चिरपरिचित विकल्प दुई अघि वा यसको operands पछि अपरेटर रेकर्ड छ। तिनीहरूले उपसर्ग र प्रत्यय संकेतन रूपमा परिचित छन्। Logician Yan Lukasevich 1920 मा पहिलो आविष्कार। उहाँले पोल्याण्ड बस्थे, त्यसैले रेकर्ड पोलिस भनिन्छ। प्रत्यय संस्करण, क्रमशः, रिवर्स पोलिस संकेतन (ARF) भनिन्छ। यसलाई विस्तार विचार गर्न तिनीहरूलाई को केवल एक suffices त्यसैले यी दुई विधिहरू बीच मात्र फरक, रेकर्ड पढ्न (दायाँ वा दायाँ बायाँ बायाँ देखि) जसमा निर्देशन छ। को OPN अपरेटर यसको operands पछि लेखिएको छ। तसर्थ, अभिव्यक्ति अटल बिहारी + A + बी लागि एउटा उदाहरण RPN प्रतिनिधित्व

operands अनगिन्ती

संकेतन को तत्काल फाइदा यो N-adic अपरेटर संक्षिप्त छ र infix संकेतन दुई operands काम गर्छ मात्र साँच्चै हो, टी। ई मात्र बाइनरी सञ्चालनका लागि बित्तिकै उपयुक्त हुनुहुन्छ। उदाहरणका लागि, एबीसी @ triadic चिन्ह अपरेटर तीन अपेरान्ड नै बाँयामा कार्य अधिकतम ए, बी र सी को यो मामला मा मूल्य छ र एक समारोह कल @ गर्न पत्राचार जो प्रयोग गरेर उल्टो पोलिस अभिव्यक्ति हो (ए, बी, सी)। तपाईं यस्तो @ ई.पू. वा केही जस्तो रूपमा infix, रूप @ प्रतीक लेख्न प्रयास भने, यो स्पष्ट हुन्छ कि यो केवल काम गर्दैन।

आदेश दिएको प्राथमिकता

RPN को संचालक को प्राथमिकता आफ्नो उपस्थिति को क्रम प्रतिनिधित्व गर्न सकिन्छ कि अर्को फाइदा छ। तिनीहरू वर्ण सञ्चालन infix संकेतन देखि रूपान्तरण सुविधा समावेश हुन सक्छ हुनत एकै समयमा, ब्रेसहरू आवश्यक कहिल्यै। उदाहरणका लागि, एबी C * - unambiguous बराबर (A + बी) * सी, गुणन छैन गुणन लागि दोस्रो अपेरान्ड दिन्छ जो प्रदर्शन वाहेक, सम्म गणना गर्न सक्नुहुन्छ। > (अटल बिहारी +) * सी - -> (A + बी) * सी यदि गणना अटल बिहारी C * एक समयमा एउटा अपरेटर द्वारा, हामी अटल बिहारी C * प्राप्त गर्ने छ

गणना अल्गोरिदम

को OPN अपरेटर तर्क दुई मान उनको बाँया मा लिखित रूपमा लिन्छ कि एक समारोह जस्तै देखिन्छ। साथै, यो यसको गणना को तरिका को थाक सञ्चालन गर्न पत्राचार र पार्सिङ लागि आवश्यकता सफाया छ रूपमा, कार्यक्रम भाषामा प्रयोगको लागि एक प्राकृतिक संकेतन छ। उदाहरणका लागि, अभिव्यक्ति 5 + 6 * 7 मा arrester 5, 6, 7 * + रूपमा प्रकट हुनेछ, र दायाँ बायाँ देखि यो स्क्यानिङ गरेर बस गणना गर्न सकिन्छ र एक थान मा मान लेख्नुहोस्। सञ्चालनको एक साधारण चिन्ह, कम्प्युटर मेमोरी माथिल्लो तत्व 2 द्वारा चयन, अपरेटर प्रयोग गरिन्छ जब र परिणाम स्मृति फर्के। जब गणना अभिव्यक्ति अन्त परिणाम थाक को शीर्ष मा हुनेछ।

उदाहरणका लागि:

  • एस = () 5, 6, 7, *, + 5 थान राखिएको।
  • एस = (5) 6, 7, *, + 6 थान राखिएको।
  • एस = (5, 6), 7 *, 7 + को थाक ठाँउ।
  • एस = (5, 6, 7), * 2 + को थाक, प्रयोग * देखि मान चयन र थाक मा परिणाम ठाँउ।
  • एस = (5, 6 * 7) = (5, 42) + 2 मान + लागू र थाक मा परिणाम राख्नका लागि थाक देखि चयन।
  • एस = (5 + 42) = (47) गणना पूरा भएको छ, परिणाम थाक शीर्ष भण्डारण गरिएको छ।

यो तर्कको बारम्बार RPN जाँच गर्न सकिन्छ, तर प्रत्येक समय यो काम गर्नेछ कुनै कुरा कसरी परिसर गणित अभिव्यक्ति।

OPN र स्ट्याकहरूको राम्ररी लिङ्क छन्। यो उदाहरण उल्टो पोलिस संकेतन को मूल्य गणना गर्न स्मृति कसरी प्रयोग गर्ने देखाउनुहुन्छ। कम स्पष्ट तपाईं तीव्र गुर्दे विफलता मानक infix अभिव्यक्ति रूपान्तरण, को थाक प्रयोग गर्न सक्ने छ।

कार्यक्रम भाषाहरूको उदाहरण

पास्कल RPN बुझे जस्तै यो (कार्यक्रम को भाग देखाउँछ)।

टोकन नम्बर वा चिन्ह सञ्चालन कि निर्धारण जो प्रक्रिया भनिन्छ चक्र, मा संख्या र संचालक पढ्न। पहिलो मामला मा, थाक भण्डारण गरिएका मूल्य र दुई माथिल्लो थाक संख्या अनुरूप कार्य को दोस्रो गरिन्छ र परिणाम भण्डारण गरिएको छ।

toktype: = num;

पढ्न (हरू);

मा ग [ '+', '-', '*', '/'] त सुरु

यदि त्यसपछि eoln CN: = '' अरू पढ्न (CN);

यदि CN = '' त्यसपछि

एक को मामला

'+': Toktype: = थप्न; '-': toktype: = उप;

'*': Toktype: = mul; '/': Toktype: = div

अन्त

अरू सुरु

यदि एक = '-' त्यसपछि SGN: = -1 अरू त्रुटि: = ग <> '+';

संग: = CN

अन्त

अन्त;

यदि (छैन त्रुटि) र (toktype = नम) त्यसपछि getnumber;

त्यसपछि toktype <> num सुरु यदि

वाई = पप; एक्स: = पप;

छैन भने र त्रुटि

को मामला toktype

थप: Z: = x + y; उप: Z: = एक्स-वाई; mul: Z: = एक्स * वाई; div: Z: = एक्स / Y

अन्त

पुस (Z);

सी-कार्यान्वयन RPN (कार्यक्रम देखाइएको भाग):

लागि (हरू = strtok (हरू, W); को; को = strtok (0, W)) {

एक = strtod (हरू, र ई);

यदि (ई> हरू) पुस (क);

#define rpnop (X) printf ( "% c:", * हरू), ख = पप (), एक = पप (), पुस (X)

अरू भने (* को == '+') rpnop (एक + ख);

अरू भने (* को == '-') rpnop (एक - ख);

अरू भने (* को == '*') rpnop (एक * ख);

अरू भने (* को == '/') rpnop (एक / ख);

#undef rpnop

}

हार्डवेयर कार्यान्वयनको

ती दिन, कम्प्युटर प्रविधि धेरै महंगा थियो जब, यो एक राम्रो विचार वृद्धि arresters प्रयोग गर्न मान्छे जबरजस्ती गर्न लाग्यो थियो। 1960-एँ मा।, अब, यो सम्भव जो उल्टो पोलिस संकेतन मा काम क्यालकुलेटर, किन्न थियो। 2 थप्न र तिनीहरूलाई को 3 2, त्यसपछि 3 प्रविष्ट गर्नुपर्छ, र "प्लस" बटन थिच्नुहोस्। पहिलो नजर मा, परिचालक इनपुट operands जटिल र सम्झना गर्न कठिन देखिन्थ्यो, तर एक समय पछि केही सोच को यो तरिका गर्न आदी छन् र किन अरु त जटिल छ र त सीमित छ जो मूर्ख infix, मा जिद्दी बुझ्न सकिएन।

Burroughs कम्पनी पनि थाक बाहेक कुनै अन्य स्मृति थियो जो एक mainframe, बनाए। मात्र कुरा मिसिन बनाउँछ कि - केन्द्रीय थाक गर्न एल्गोरिदम र विधिहरू RPN लागू गरियो। यसको सञ्चालनका सबै माथिल्लो N मान लागू जो arresters संचालक, रूप मानिन्छ थिए। उदाहरणका लागि, टीम थप साधारण architectures संग प्रतिस्पर्धा गर्न थाक शीर्ष फिर्ती ठेगाना लिए, र यति मा। डी यस्तो मिसिन को वास्तुकला सरल, तर छिटो। धेरै तथापि, अझै पनि यस्तो सरल र शिष्ट जहाँ हरेक कार्यक्रम OPN अभिव्यक्ति थियो कम्प्युटिङ गर्न दृष्टिकोण, यसको लडी फेला भन्ने तथ्यलाई पछुताउनु।

RPN एक समय क्यालकुलेटर लोकप्रिय थिए, र केही मान्छे अझै पनि तिनीहरूलाई प्राथमिकता दिनुहोस्। साथै, तिनीहरूले यस्तो अगाडी रूपमा थाक-उन्मुख भाषाहरु, विकास गरे। आज यो सानो प्रयोग, तर अझै पनि आफ्नो पूर्व प्रयोगकर्ताहरूको nostalgic छ।

त्यसैले रिवर्स पोलिस ससेज बारेमा अर्थ Jokes के हो?

हामी ससेज को ओपरेटर, infix संकेतन, यो रोल भित्र पारंपरिक हट डग जस्तै हुनुपर्छ भन्ने मान्छु भने। को RPN सही दुई आधा गणना पछि तयार therebetween प्राप्त स्थित छ। तोरी - अब गाह्रो भाग आउँछ। त्यो टी, को ससेज मा पहिले देखि नै छ। ई पहिले नै unary अपरेटर रूपमा गणना। यो तोरी पनि uncalculated रूपमा देखाइएको गर्नुपर्छ भनेर हुन र यसैले ससेज को सही गर्न उत्प्रेरित हुनुपर्छ विश्वास छ ... तर यो सम्भव छ, यो को धेरै ठूलो थाक आवश्यक थियो ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ne.atomiyme.com. Theme powered by WordPress.