ΥπολογιστέςΛογισμικό

RPN: αλγόριθμος, μέθοδοι και παραδείγματα

RPN σχηματίζεται μία φορά τη βάση ενός προγραμματιστή υπολογιστών στον κόσμο. Σήμερα δεν είναι τόσο γνωστή. Ως εκ τούτου, κόμικς εικονογράφηση, που απεικονίζει μια «αντίστροφη» Πολωνικά ρολά λουκάνικο έξω, μπορεί ακόμα να παρεξηγηθεί από κάποιους γνώστες προγραμματιστές. Όχι πολύ καλά να εξηγήσει το αστείο, αλλά στην προκειμένη περίπτωση θα είναι πλήρως δικαιολογημένη.

εμπήγω

Όλες οι προγραμματιστές και οι περισσότεροι μαθητές είναι εξοικειωμένοι με τη χρήση των φορέων. Για παράδειγμα, οι τιμές έκφραση x + άθροισμα για τις μεταβλητές x και y μεταχειρισμένων σύμβολο συν. Λιγότερο γνωστό είναι το γεγονός ότι αυτή είναι δανεισμένη από τα μαθηματικά συμβολισμό, που ονομάζεται InFix σημειογραφία, στην πραγματικότητα, είναι ένα μεγάλο πρόβλημα για τις μηχανές. Ο εν λόγω φορέας λαμβάνει ως έχουν είσοδο δύο τιμές που καταγράφονται στα αριστερά και δεξιά. Στον προγραμματισμό σημειογραφία που χρησιμοποιείται προαιρετικά με λειτουργίες σημάδια. Για παράδειγμα, x + y μπορεί να γραφτεί ως συνάρτηση της πτυχής (x, y), στην οποία ο μεταγλωττιστής και τελικά μετατρέπει InFix σημειογραφία. Ωστόσο, όλοι γνωρίζουν τα μαθηματικά είναι πολύ καλό για να μην χρησιμοποιούν αριθμητικές εκφράσεις, οι οποίες αποτελούν ένα είδος εσωτερικής μίνι-γλώσσα σχεδόν σε όλες τις γλώσσες προγραμματισμού.

τύπο μεταφραστής

Το πρώτο πραγματικά επιτυχημένο γλώσσα Fortran προγραμματισμού έχει γίνει τόσο μεγάλο βαθμό, διότι η αριθμητική έκφραση (δηλαδή τύπος ..) Η μετατροπή (εκπομπή) στον κώδικα, εξ ου και το όνομά του - Μετάφραση τύπου. Πριν από αυτό, έπρεπε να γράψουν, για παράδειγμα, διπλωμένο στη μορφή λειτουργιών (και να πολλαπλασιάσει (β, γ)). Σε COBOL πρόβλημα της εφαρμογής της αυτόματης τύπο μετατροπής θεωρήθηκε πολύ δύσκολο, επειδή οι προγραμματιστές έπρεπε να γράψει τα πράγματα όπως Προσθέστε το Α στο Β Mutliply Με C.

Τι είναι λάθος με InFix;

Το πρόβλημα είναι, ότι οι επιχειρήσεις έχουν τέτοιες ιδιότητες η προτεραιότητα και η προτεραιότητά. Εξαιτίας αυτού, ο ορισμός της συνάρτησης InFix γίνεται μη-τετριμμένη εργασία. Για παράδειγμα, ο πολλαπλασιασμός έχει υψηλότερη προτεραιότητα από πρόσθεση ή αφαίρεση, πράγμα που σημαίνει ότι η έκφραση 2 + 3 * 4 δεν είναι ίσο με το άθροισμα των 2 και 3, πολλαπλασιάζεται με 4, όπως θα ήταν κατά την εκτέλεση των φορέων από αριστερά προς τα δεξιά. Στην πραγματικότητα, πολλαπλασιάστε 3 από 4 και προσθέστε 2. Αυτό το παράδειγμα απεικονίζει ότι ο υπολογισμός της έκφρασης InFix συχνά απαιτεί μια αλλαγή της τάξης των φορέων και τελεστέους. Επιπλέον, είναι απαραίτητη η χρήση στηρίγματα για να φαίνονται πιο σαφή συμβολισμό. Για παράδειγμα, (2 + 3) * (4 + 5), δεν μπορεί να γραφτεί χωρίς τις παρενθέσεις, γιατί 2 + 3 * 4 + 5 σημαίνει ότι θα πρέπει να πολλαπλασιάσει 3 με 4 και προσθέστε 2 και 5.

Η σειρά με την οποία θέλετε να υπολογίσετε τις επιχειρήσεις απαιτεί μια μακρά θυμόμαστε. Εξαιτίας αυτού, οι μαθητές που αρχίζουν να μαθαίνουν αριθμητική, παίρνουν συχνά το λάθος αποτελέσματα, ακόμη και αν οι πραγματικές εργασίες εκτελούνται σωστά. Είναι απαραίτητο να διδάξει τη σειρά των δηλώσεων δράση από την καρδιά. Πρώτον, η προσφυγή πρέπει να πραγματοποιηθεί μέσα σε παρένθεση, στη συνέχεια, πολλαπλασιασμό και διαίρεση, και, τέλος, πρόσθεση και αφαίρεση. Αλλά υπάρχει ένας άλλος τρόπος γραφής μαθηματικών εκφράσεων όπως InFix συμβολισμός είναι μόνο μία από τις πιθανές «μικρές γλώσσες» που μπορούν να προστεθούν σε άλλα.

Πρόθεμα και postfix συμβολισμοί

Δύο από τις πιο γνωστές εναλλακτικές λύσεις είναι να καταγράψει το χειριστή πριν ή μετά τελεστές της. Είναι γνωστό ως πρόθεμα και το postfix συμβολισμό. Logician Γιαν Lukasevich εφηύρε το πρώτο το 1920. Έζησε στην Πολωνία, οπότε ο δίσκος ονομάζεται πολωνικά. Postfix έκδοση, αντίστοιχα, που ονομάζεται αντίστροφη πολωνική σημειογραφία (ARF). Η μόνη διαφορά μεταξύ αυτών των δύο μεθόδων είναι η κατεύθυνση προς την οποία να διαβάσει το αρχείο (από αριστερά προς τα δεξιά ή προς τα δεξιά προς τα αριστερά), οπότε αρκεί να εξετάσει λεπτομερώς μόνο μία από αυτές. Ο χειριστής OPN είναι γραμμένο μετά τελεστές της. Έτσι, η έκφραση ΑΒ + αντιπροσωπεύει ένα παράδειγμα RPN για το Α + Β

Απεριόριστος αριθμός των τελεστών

Το άμεσο πλεονέκτημα της σημείωσης είναι ότι συνοψίζει την n-adic χειριστή και InFix συμβολισμός είναι πραγματικά λειτουργεί με δύο τελεστές μόνο, τ. Ε είναι εγγενώς κατάλληλο μόνο για δυαδικές πράξεις. Για παράδειγμα, ABC @ είναι η αντίστροφη Πολωνική έκφρασης χρησιμοποιώντας τριαδικά σήμα, το οποίο είναι η μέγιστη τιμή του Α, Β και C. Στην περίπτωση αυτή, ο χειριστής ενεργεί στα αριστερά των τριών ίδιας τελεστή και αντιστοιχεί σε μια κλήση συνάρτησης @ (Α, Β, C). Αν προσπαθήσετε να γράψετε το σύμβολο @ ως InFix, όπως ένα @ π.Χ. ή κάτι τέτοιο, γίνεται σαφές ότι απλά δεν λειτουργεί.

Η προτεραιότητα που δίνεται από τη σειρά

RPN έχει άλλο ένα πλεονέκτημα το ότι η προτεραιότητα των φορέων μπορεί να εκπροσωπείται από την σειρά εμφάνισης τους. Την ίδια στιγμή δεν χρειάζεται τιράντες, αν και μπορούν να συμπεριληφθούν ως χαρακτήρες πράξεις για τη διευκόλυνση της μετατροπής από InFix συμβολισμό. Για παράδειγμα, ΑΒ + C * - μονοσήμαντη ισοδύναμο (Α + Β) * C, έτσι ώστε ο πολλαπλασιασμός δεν μπορεί να υπολογιστεί μέχρι την προσθήκη εκτελείται, η οποία δίνει μια δεύτερη τελεστέο για πολλαπλασιασμό. Δηλαδή, αν η υπολογιζόμενη ΑΒ + C * από ένα χειριστή σε έναν χρόνο, παίρνουμε ΑΒ + C * -> (ΑΒ +) * C -> (Α + Β) * Γ

αλγόριθμος υπολογισμού

Ο χειριστής OPN φαίνεται το ίδιο με μια λειτουργία που παίρνει ως ορίσματα δύο τιμές γραμμένο στα αριστερά της. Επιπλέον, είναι ένα φυσικό συμβολισμό για χρήση σε γλώσσες προγραμματισμού, όπως ο τρόπος υπολογισμού της αντιστοιχεί στις πράξεις στοίβα και η ανάγκη για την ανάλυση αποβάλλεται. Για παράδειγμα, η παγιδευτή στην έκφραση 5 + 6 * 7 θα εμφανιστεί ως 5, 6, 7 *, +, και μπορεί να υπολογιστεί απλά με σάρωση από αριστερά προς τα δεξιά και να γράφουν τις τιμές σε μια στοίβα. Κάθε φορά που ένα κοινό σημάδι της λειτουργίας, που επιλέγεται από τον άνω εξάρτημα 2 της μνήμης του υπολογιστή, ο χειριστής χρησιμοποιείται και το αποτέλεσμα επιστρέφεται στη μνήμη. Όταν το τελικό αποτέλεσμα της έκφρασης υπολογισμού θα είναι στην κορυφή της στοίβας.

Για παράδειγμα:

  • S = () 5, 6, 7, *, + 5 τοποθετείται στη στοίβα.
  • S = (5) 6, 7, *, + 6 τοποθετείται στη στοίβα.
  • S = (5, 6), 7 *, 7 + τοποθετήστε τη στοίβα.
  • S = (5, 6, 7), * 2 + επιλέξετε τιμές από τη στοίβα, χρήση * και τοποθετήστε το αποτέλεσμα στη στοίβα.
  • S = (5, 6 * 7) = (5, 42) + 2 τιμές που επιλέγονται από τη στοίβα, για να εφαρμόσει το + και να θέσει το αποτέλεσμα στη στοίβα.
  • S = (5 + 42) = (47) υπολογισμός ολοκληρώνεται, το αποτέλεσμα αποθηκεύεται στη κορυφή της στοίβας.

Αυτός ο αλγόριθμος μπορεί να ελεγχθεί RPN κατ 'επανάληψη, αλλά κάθε φορά που θα λειτουργήσει, δεν έχει σημασία πόσο περίπλοκη την αριθμητική έκφραση.

OPN και στοίβες συνδέονται στενά. Αυτό το παράδειγμα δείχνει πώς μπορείτε να χρησιμοποιήσετε τη μνήμη για τον υπολογισμό της αξίας των αντίστροφη πολωνική σημειογραφία. Λιγότερο προφανές είναι ότι μπορείτε να χρησιμοποιήσετε τη στοίβα, μετατρέποντας πρότυπο έκφρασης InFix σε οξεία νεφρική ανεπάρκεια.

Παραδείγματα των γλωσσών προγραμματισμού

Pascal RPN συνειδητοποίησε σαν αυτό (δείχνει το μέρος του προγράμματος).

Για να διαβάσετε τους αριθμούς και τους φορείς του κύκλου που ονομάζεται διαδικασία, η οποία καθορίζει εάν το διακριτικό αριθμό ή σύμβολο λειτουργία. Στην πρώτη περίπτωση, η τιμή που αποθηκεύεται στη στοίβα, και η δεύτερη από τις δύο άνω αριθμούς στοίβα αντίστοιχη δράση εκτελείται και το αποτέλεσμα αποθηκεύεται.

toktype: = num?

διαβάστε (s)?

αν c στο [ '+', '-', '*', '/'] στη συνέχεια να αρχίσει

αν eoln τότε cn: = '' άλλο να διαβάσει (cn)?

αν cn = «» τότε

περίπτωση α

'+': Toktype: = προσθέσετε? '-': toktype: = sub?

'*': Toktype: = πολ? '/': Toktype: = div

τέλος

else begin

αν a = '-' και μετά SGN: = -1 άλλο σφάλμα: = c <> '+'?

με: = cn

τέλος

τελειώσει?

αν (όχι σφάλμα) και (toktype = num) τότε getnumber?

αν toktype <> NUM στη συνέχεια να αρχίσει

y = ποπ? x: = ποπ?

αν δεν είναι λάθος, στη συνέχεια,

περίπτωση toktype της

προσθέστε: z: = x + y? υπο: z: = x-y? mul: z: = x * y? div: z: = x / y

τέλος

ώθησης (z)?

RPN C-εφαρμογή (όπως φαίνεται μέρος του προγράμματος):

για (s = strtok (s, w)? s? s = strtok (0, w)) {

α = strtod (s, & ε)?

αν (ε> α) ώθησης (α)?

#define rpnop (x) printf ( "% c:", * s), b = ποπ (), a = ποπ (), ώθησης (x)

else if (* s == '+') rpnop (α + β)?

else if (* s == '-') rpnop (α - β)?

else if (* s == '*') rpnop (α * β)?

else if (* s == '/') rpnop (a / b)?

#undef rpnop

}

υλοποιήσεις υλικού

Σε εκείνες τις ημέρες, όταν η τεχνολογία των υπολογιστών ήταν πολύ ακριβό, θεωρήθηκε μια καλή ιδέα για να αναγκάσει τους ανθρώπους να χρησιμοποιούν αλεξικέραυνα. Το 1960-ες., Ως τώρα, δεν ήταν δυνατό να αγοράσει τους υπολογιστές, που εργάζονται σε αντίστροφη πολωνική σημειογραφία. Για να προσθέσετε 2 και 3 από αυτούς πρέπει να εισάγετε 2, στη συνέχεια, 3, και πατήστε το κουμπί «συν». Με την πρώτη ματιά, οι τελεστές εισόδου στον χειριστή φαινόταν περίπλοκο και δύσκολο να θυμόμαστε, αλλά μετά από λίγο κάποιοι είναι εξαρτημένοι από αυτόν τον τρόπο σκέψης και δεν μπορούσε να καταλάβει γιατί οι άλλοι επιμένουν στην ηλίθια InFix, η οποία είναι τόσο περίπλοκη και έτσι είναι περιορισμένη.

Burroughs εταιρεία, ακόμη και έχτισε ένα κεντρικό υπολογιστή, το οποίο δεν είχε καμία άλλη μνήμη, εκτός στοίβα. Το μόνο πράγμα που κάνει το μηχάνημα - εφάρμοσε την αλγόριθμους και μεθόδους RPN στην κεντρική στοίβα. Όλες τις πράξεις της θεωρήθηκαν ως φορείς απαγωγέων, η οποία ισχύει για τις ανώτερες τιμές n. Για παράδειγμα, η ομάδα πήρε την επιστροφή Διεύθυνση από την κορυφή της στοίβας, και ούτω καθεξής. Δ Η αρχιτεκτονική μιας τέτοιας μηχανής ήταν απλό, αλλά δεν είναι αρκετά γρήγορη για να ανταγωνιστεί με τις πιο συνηθισμένες αρχιτεκτονικές. Πολλοί, όμως, ακόμα για το γεγονός ότι μια τέτοια απλή και κομψή προσέγγιση στην πληροφορική, όπου κάθε προγράμματος ήταν μια έκφραση της OPN, βρήκε τη συνέχισή της.

Μια φορά υπολογιστές με RPN ήταν δημοφιλής, και μερικοί άνθρωποι εξακολουθούν να τους δίνουν το προβάδισμα. Επιπλέον, ανέπτυξαν ένα σωρό προσανατολισμένη γλώσσες, όπως η Forth. Σήμερα είναι ελάχιστα χρησιμοποιημένο, αλλά ακόμα νοσταλγική από πρώην χρήστες του.

Έτσι ποια είναι η αστεία έννοια για Αντίστροφη Πολωνική λουκάνικο;

Αν υποθέσουμε ότι ο φορέας εκμετάλλευσης του λουκάνικου, σε InFix συμβολισμό, θα πρέπει να είναι εντός του κυλίνδρου, όπως στα συμβατικά hot dog. Η RPN βρίσκεται σε δύο ίσα μέρη ετοιμαστείτε μεταξύ τους μετά τον υπολογισμό. Τώρα έρχεται το δύσκολο μέρος - μουστάρδα. Είναι ήδη στο λουκάνικο, τ. Ε Ήδη υπολογίζεται ως μοναδιαίος τελεστής. Πιστεύεται ότι η μουστάρδα θα πρέπει επίσης να εμφανίζεται ως ανυπολόγιστος και ως εκ τούτου θα πρέπει να μετακινηθεί προς τα δεξιά του λουκάνικου ... Αλλά είναι δυνατόν, αυτό θα απαιτούσε πολύ μεγάλη στοίβα ...

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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