Infix Expressions VS Postfix Expressions, και πώς να φτιάξετε μια καλύτερη αριθμομηχανή JavaScript

Εάν θέλετε να κάνετε τον Απλό Υπολογιστή σας πολύ πιο έξυπνο, αυτή η ανάρτηση είναι για εσάς.

Ίσως ρωτάτε, "Τι συμβαίνει με την απλή αριθμομηχανή μου." Λοιπόν, μπορεί να κάνει όλες τις λειτουργίες σωστά, αλλά η ακολουθία στην οποία τις κάνει είναι πιθανώς λάθος.

Ο απλός υπολογιστής περιέχει μόνο τέσσερις λειτουργίες: προσθήκη, αφαίρεση, διαίρεση και πολλαπλασιασμό. Πολλοί από εμάς μπορεί να έχουν μελετήσει στο γυμνάσιο για την προτεραιότητα των χειριστών: η διαίρεση και ο πολλαπλασιασμός έχουν την ίδια προτεραιότητα και έχουν υψηλότερη προτεραιότητα από την προσθήκη και την αφαίρεση, οι οποίες έχουν την ίδια προτεραιότητα.

Μια γρήγορη ανακεφαλαίωση της προτεραιότητας του χειριστή μπορεί να βρεθεί εδώ: //www.math.utah.edu/online/1010/precedence/.

Ο λόγος που τονίζω την προτεραιότητα του χειριστή είναι επειδή ένας απλός υπολογιστής εκτελεί λάθος τους περισσότερους υπολογισμούς. Για παράδειγμα, το 1 + 2x3 πρέπει να είναι ίσο με το 7 σύμφωνα με έναν κανονικό υπολογιστή, αλλά ο απλός υπολογιστής δίνει ένα αποτέλεσμα 9.

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

Δεν μπορούμε να κατηγορήσουμε τον απλό υπολογιστή. Άλλωστε, έπρεπε να είναι απλό. Τώρα ίσως αρχίσετε να σκέφτεστε πώς να αναδιατάξετε τους χειριστές, έτσι ώστε να έχετε το σωστό αποτέλεσμα. Ναι, είστε στο σωστό δρόμο. Για αυτό, πρέπει να γνωρίζουμε δύο ακόμη έννοιες στην επιστήμη των υπολογιστών: τις εκφράσεις Infix και τις εκφράσεις Postfix.

Με απλά λόγια, οι αριθμητικές εκφράσεις που κατανοούμε είναι εκφράσεις Infix και η αριθμητική έκφραση που κατανοεί ο υπολογιστής είναι εκφράσεις Postfix.

Και οι εκφράσεις infix και postfix δημιουργούν τα ίδια αποτελέσματα. Είναι απλώς οι άνθρωποι που χρησιμοποιούνται για την επίλυση των εκφράσεων infix και οι υπολογιστές χρησιμοποιούνται για την επίλυση των εκφράσεων μετά την επιδιόρθωση.

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

Μέχρι τώρα πρέπει να σκεφτείτε πώς να μετατρέψετε την έκφραση infix που εισήγαγε ο χρήστης σας σε μια έκφραση μετά την επιδιόρθωση. Υπάρχει ένας αλγόριθμος που μετατρέπει μια παράσταση infix σε μια έκφραση postfix που μπορεί να βρεθεί εδώ .

Δείτε πώς φαίνεται αυτή η διαδικασία:

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

Τελικά, το πρωταρχικό κίνητρο της μετατροπής μιας έκφρασης infix σε μια έκφραση μετά την επιδιόρθωση είναι να διατηρηθεί η προτεραιότητα των χειριστών ενώ ο υπολογιστής αξιολογεί την έκφραση.

Δείτε την πλήρως λειτουργική αριθμομηχανή μου που ενσωματώνει αυτές τις αρχές εδώ .