Τρίτη, 18 Νοεμβρίου 2008

Απλά προβλήματα (Γυμνασιακού επιπέδου)

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

Επειδή πιστεύουμε ότι όσα πιο πολλά προβλήματα λύνει κάποιος, τόσο πιο εύκολο είναι να λύσει κι άλλα, δίνουμε εδώ μερικά είδη προβλημάτων με την επίλυσή τους. Δοκιμάστε να τα λύσετε πριν διαβάσετε την λύση που ακολουθεί.


Πρόβλημα 02 : Μοιράζουμε δυό γαϊδουριών άχυρο;

Έχουμε δέκα κιλά άχυρο να το μοιράσουμε σε δυό γαϊδούρια που το ένα πρέπει να φάει ένα κιλό περισσότερο από το άλλο. Πόσα κιλά άχυρο θα δώσουμε στο καθένα γαϊδούρι;

Απρόσεκτη σκέψη : Πολλοί άνθρωποι απαντούν αμέσως έξι και τέσσερα, που δεν είναι η σωστή απάντηση.

Σωστή επίλυση : Δίνουμε ένα κιλό άχυρο στο γαϊδούρι που πρέπει να φάει περισσότερο.
Χωρίζουμε τα υπόλοιπα 10-1=9 κιλά στην μέση και δίνουμε από 9/2=4.5 κιλά άχυρο στα δυό γαϊδούρια. Έτσι, το ένα γαϊδούρι θα φάει συνολικά 1+4.5=5.5 κιλά άχυρο και το άλλο 4.5 κιλά άχυρο.


Πρόβλημα 03 : Το θέλετε με σαλιγκάρι ή με ναυαγό;

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

Απρόσεκτη σκέψη : Ανεβαίνει 3-2=1 μέτρο ανά 24ωρο, άρα θα χρειαστεί 10/1=10 εικοσιτετράωρα.

Σωστή επίλυση : Αφαιρούμε τα 3 μέτρα της τελευταίας νύχτας από τα 10. Μένουν 10-3=7 μέτρα.
Κάθε 24ωρο ανεβαίνει 1 μέτρο. Θα χρειαστεί 7/1=7 εικοσιτετράωρα για να καλύψει την απόσταση των 7 μέτρων. Την επόμενη νύχτα θα ανέβει 3 μέτρα, όπως κάθε νύχτα, θα φτάσει (7+3=10) στην κορυφή και θα είναι εκεί το πρωί της όγδοης μέρας (και βέβαια δεν θα γλιστρήσει!).

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

Απρόσεκτη σκέψη : Κολυμπάει 6-4=2 μίλια το 24ωρο, άρα θα χρειαστεί 20/2=10 εικοσιτετράωρα.

Σωστή επίλυση : Αφαιρούμε τα 6 μίλια της τελευταίας μέρας από τα 20. Μένουν 20-6=14 μίλια.
Κάθε 24ωρο πλησιάζει 2 μίλια στην ακτή. Θα χρειαστεί 14/2=7 εικοσιτετράωρα για να καλύψει την απόσταση των 14 μιλίων. Την επόμενη μέρα θα κολυμπήσει έξι μίλια και θα φτάσει στην ακτή, άρα θα είναι εκεί το βράδι της 8ης ημέρας (και βέβαια δεν θα ξαναπέσει στην θάλασσα!).


Πρόβλημα 04 : Πότε γεμίζει η δεξαμενή;

Έχουμε δυό βρύσες σε μια δεξαμενή νερού. Η βρύση Α την γεμίζει σε έξι ώρες. Η βρύση Β έχει μεγαλύτερη παροχή νερού και την γεμίζει σε τέσσερις ώρες. (Όταν οι βρύσες ανοίγουν εννοείται ότι δίνουν αμέσως και συνεχώς την μέγιστη παροχή νερού).
Ανοίγουμε την βρύση Α στις 09:00 το πρωί.
Στις 10:30 αποφασίζουμε να ανοίξουμε και την βρύση Β.
Ποια ώρα πρέπει να κλείσουμε τις βρύσες, ώστε να είναι γεμάτη κατά 75% η δεξαμενή;
(Το διατύπωσα ώστε να φαίνεται δύσκολο, αλλά σημασία είπαμε ότι έχει η μεθοδική σκέψη!)

Επίλυση : Η βρύση Α γεμίζει την δεξαμενή σε 6 ώρες, άρα σε μία ώρα γεμίζει το 1/6 της δεξαμενής.
Η μία ώρα έχει 60 λεπτά και οι 6 ώρες έχουν 60*6=360 λεπτά.
Ξανά : Η βρύση Α γεμίζει την δεξαμενή σε 360 λεπτά, άρα σε ένα λεπτό γεμίζει το 1/360 της δεξαμενής.
(Με άλλο τρόπο : την ώρα (60 λεπτά) γεμίζει το 1/6, άρα το λεπτό γεμίζει το (1/6)/60=1/(6*60)=1/360 της δεξαμενής).

Τρέχοντας η βρύση Α επί (10:30)-(09:00)=90 λεπτά θα γεμίσει το 90*(1/360)=90/360=1/4 της δεξαμενής. (Επαλήθευση : Σε 6 ώρες ολόκληρη, άρα σε (6/4=1.5) μιάμιση ώρα το 1/4 της δεξαμενής).

Η βρύση Β γεμίζει την δεξαμενή σε 4 ώρες (=240 λεπτά). Σε μία ώρα (=60 λεπτά) γεμίζει το 1/4 της δεξαμενής. Σε ένα λεπτό γεμίζει το 1/240 της δεξαμενής. (Απλούστατο!)

Τρέχοντας μαζί οι δυό βρύσες κάθε λεπτό γεμίζουν το (1/360)+(1/240)=1/144 της δεξαμενής. Ή (αν άνοιγαν μαζί) θα την γέμιζαν σε 144 λεπτά (=2 ώρες και 24 λεπτά).

Στο πρόβλημά μας δεν θέλουμε να γεμίσουμε ολόκληρη (τα 100/100) την δεξαμενή, αλλά τα 75/100 της.
Συνάμα έχει ήδη γεμίσει το 1/4 της δεξαμενής από την βρύση Α, που την ανοίξαμε πρώτη.

Άρα, θέλουμε να γεμίσουμε το (75/100)-(1/4)=(75/100)-(25/100)=50/100=1/2 της δεξαμενής με τις δύο βρύσες ανοικτές, δηλαδή γεμίζοντας το 1/144 της δεξαμενής ανά λεπτό. Πόσα λεπτά θα μείνουν ανοικτές μαζί οι βρύσες; Θα μείνουν (1/2)/(1/144)=144/2=72 λεπτά (=1 ώρα και 12 λεπτά).
Οι βρύσες πρέπει να κλείσουν ώρα (10:30)+(1:12)=11:42.

Επαλήθευση :
Η βρύση Α έτρεξε 90+72=162 λεπτά και γέμισε τα 162*(1/360)=162/360 της δεξαμενής.
Η βρύση Β έτρεξε 72 λεπτά και γέμισε τα 72*(1/240)=72/240 της δεξαμενής.
Αυτά πρέπει να έχουν άθροισμα 75/100 (=75%). Και έχουν!
(162/360)+(72/240)=(324/720)+(216/720)=(540/720)=3/4=75/100.

Παρόμοια είναι τα προβλήματα με άδειασμα της δεξαμενής.


Πρόβλημα 05 : Δύο ανόμοια δοχεία νερού

Υπάρχουν δύο δοχεία Α και Β, κενά και χωρίς ενδείξεις, χωρητικότητας 7 λίτρων και 3 λίτρων αντίστοιχα, και απεριόριστη ποσότητα νερού από μια βρύση για να τα γεμίζουμε. Θέλουμε να βρούμε την συντομότερη σωστή σειρά επιτρεπτών χειρισμών, αποκλειστικά και μόνο των δύο δοχείων, ώστε να έχουμε τελικά στο δοχείο Α ακριβώς 5 λίτρα νερού.
Οι επιτρεπτοί χειρισμοί είναι:
(α) πλήρες γέμισμα ενός δοχείου με νερό από την βρύση,
(β) μετάγγιση ποσότητας νερού από ένα δοχείο μέχρι να γεμίσει το άλλο,
(γ) μετάγγιση όλης της ποσότητας νερού του ενός δοχείου στο άλλο, μόνο αν χωράει εκεί,
(δ) πλήρες άδειασμα ενός δοχείου.

Περίπτωση πρώτη, όπου η βρύση έχει απεριόριστα λίτρα (lt) νερού.
Σχόλιο : Εδώ τα γεμίσματα (14 lt) μείον τα αδειάσματα (6 lt) αφήνουν στα δοχεία 8 lt, (το Α έχει 5 lt, το Β έχει 3 lt). Τα 8 βήματα είναι τα ελάχιστα.
ΠρινΠράξηΜετά
(Α=0, Β=0)Βήμα 1. Γεμίζουμε από την βρύση το άδειο Α με 7 lt(Α=7, Β=0)
(Α=7, Β=0)Βήμα 2. Μεταγγίζοντας 3 lt από το Α γεμίζουμε το Β(Α=4, Β=3)
(Α=4, Β=3)Βήμα 3. Αδειάζουμε το Β(Α=4, Β=0)
(Α=4, Β=0)Βήμα 4. Μεταγγίζοντας 3 lt από το Α γεμίζουμε το Β(Α=1, Β=3)
(Α=1, Β=3)Βήμα 5. Αδειάζουμε το Β(Α=1, Β=0)
(Α=1, Β=0)Βήμα 6. Μεταγγίζουμε το 1 λίτρο του Α στο άδειο Β(Α=0, Β=1)
(Α=0, Β=1)Βήμα 7. Γεμίζουμε από την βρύση το άδειο Α με 7 lt(Α=7, Β=1)
(Α=7, Β=1)Βήμα 8. Μεταγγίζοντας 2 lt από το Α γεμίζουμε το Β(Α=5, Β=3)

Περίπτωση όπου η βρύση έχει μόνο 12 lt νερού.
Σχόλιο : Εδώ τα γεμίσματα (12 lt) μείον τα αδειάσματα (7 lt) αφήνουν στα δοχεία 5 lt, (το Α έχει 5 lt, το Β είναι άδειο). Τα βήματα είναι περισσότερα, είναι 10.
ΠρινΠράξηΜετά
(Α=0, Β=0)Βήμα 1. Γεμίζουμε από την βρύση το άδειο Β με 3 lt(Α=0, Β=3)
(Α=0, Β=3)Βήμα 2. Μεταγγίζουμε τα 3 lt του Β μέσα στο Α(Α=3, Β=0)
(Α=3, Β=0)Βήμα 3. Γεμίζουμε από την βρύση το άδειο Β με 3 lt(Α=3, Β=3)
(Α=3, Β=3)Βήμα 4. Μεταγγίζουμε τα 3 lt του Β μέσα στο Α(Α=6, Β=0)
(Α=6, Β=0)Βήμα 5. Γεμίζουμε από την βρύση το άδειο Β με 3 lt(Α=6, Β=3)
(Α=6, Β=3)Βήμα 6. Μεταγγίζοντας 1 λίτρο από το Β γεμίζουμε το Α(Α=7, Β=2)
(Α=7, Β=2)Βήμα 7. Αδειάζουμε το Α(Α=0, Β=2)
(Α=0, Β=2)Βήμα 8. Μεταγγίζουμε τα 2 lt του Β στο άδειο Α(Α=2, Β=0)
(Α=2, Β=0)Βήμα 9. Γεμίζουμε από την βρύση το άδειο Β με 3 lt(Α=2, Β=3)
(Α=2, Β=3)Βήμα 10. Μεταγγίζουμε τα 3 lt του Β μέσα στο Α(Α=5, Β=0)



Πρόβλημα 06 : Ακριβολογίες
Πήγατε στο περίπτερο και αγοράσατε με ένα δίευρο μια απλή εφημερίδα που κόστιζε 1 ευρώ και 30 λεπτά.
Ο περιπτεράς σάς έδωσε ρέστα δύο σύγχρονα μεταλλικά νομίσματα, κανονικές υποδιαιρέσεις του Ευρώ (όχι κάλπικα) συνολικής αξίας 70 λεπτών, αλλά το ένα δεν είναι πενηντάλεπτο. Υπάρχει εξήγηση;

Επίλυση : Κανονικά θα έπρεπε να μη γράψω την λύση. Οι περισσότεροι απαντούν ότι είναι αδύνατον.

Και όμως, υπάρχει εξήγηση : [Είναι το άλλο!]
Μπορεί να το είχατε βρει, ένα πενηντάλεπτο και ένα εικοσάλεπτο είναι η μοναδική λύση. Όμως, αν σας δυσκόλεψε, το πρόβλημα έλεγε [το ένα δεν είναι πενηντάλεπτο], δεν έλεγε [κανένα από τα δύο δεν είναι πενηντάλεπτο].
Τώρα, γιατί το μυαλό μας βάζει παραπανίσια στοιχεία στο πρόβλημα, είναι κάτι που αγνοώ.

Το ίδιο κάνουμε στην Γεωμετρία όταν μας δίνουν απλά [ένα τρίγωνο] και εμείς σχεδιάζουμε ένα [σχεδόν ισοσκελές] ή [σχεδόν ορθογώνιο] τρίγωνο.

Το ίδιο κάνουμε όταν μας δώσουν ένα κύκλο να τον κόψουμε [στα δύο με μια γραμμή] και εμείς τον κόβουμε [σε δύο ίσα κομμάτια με μια κατακόρυφη γραμμή]. (Το έχω δοκιμάσει σε πολλές τάξεις, και έχει πλάκα. Μόνο ο Οβελίξ έκοψε άνισα τα τρία κομμάτια στην τούρτα της Κλεοπάτρας!).

Πρέπει να έχουμε το μυαλό μας καθαρό.

Τρίτη, 11 Νοεμβρίου 2008

Πράξεις και τελεστές πράξεων και RPN

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

Έχουμε ένα σύνολο R με πραγματικούς αριθμούς.
Παίρνουμε πρώτα έναν αριθμό α από το σύνολο R.
Παίρνουμε ακόμη έναν αριθμό β από το σύνολο R.
Οι δυό αριθμοί κρατάνε τη σειρά τους, (πρώτα ο α και μετά ο β), κρατάνε την διάταξή τους, είναι ένα διατεταγμένο ζεύγος (α, β).
Η πράξη που θέλουμε να κάνουμε στο ζευγάρι αριθμών (α, β) συμβολίζεται με ένα τελεστή, ας πούμε Τ, και δίνει ένα αποτέλεσμα γ.
[Πιθανή γραφή : γ = ( α Τ β ) ]

Αν είναι αριθμητική πράξη ([πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση, ύψωση σε δύναμη] όταν δηλαδή ο τελεστής είναι [+, -, *, /, ^]) τότε το γ είναι αριθμός που ανήκει επίσης στο σύνολο R. (Υπάρχουν κι άλλες πράξεις, όπως η ακέραια διαίρεση (με τελεστή \, όπου [7 \ 3] δίνει πηλίκο 2 και υπόλοιπο 1), που διαφέρει από την κανονική διαίρεση ([7 / 3] δίνει πηλίκο 2.3333..., ή μικτό 2 1/3). Για την ακέραια διαίρεση έχουμε ορίσει συναρτήσεις, όπως είναι η DIV και η MOD).

Αν είναι συγκριτική πράξη ([μεγαλύτερο από, μεγαλύτερο ή ίσο, ίσο, μικρότερο ή ίσο, μικρότερο, διάφορο από] όταν δηλαδή ο τελεστής είναι [>, >=, =, <=, <, <>]) τότε το γ είναι μία από τις δύο λογικές τιμές : Αληθής ή Ψευδής. (Υπάρχουν ακόμα οι λογικές πράξεις, (ο τελεστής είναι ΚΑΙ, Ή, ΌΧΙ), που γίνονται σε μεταβλητές (ή εκφράσεις) που έχουν λογικές τιμές, και πάλι το αποτέλεσμα είναι μία από τις δύο λογικές τιμές : Αληθής ή Ψευδής).

Υπάρχουν τρεις τρόποι να γράψουμε τον τελεστή της πράξης και το ζευγάρι (α, β).
(Τ α β), συμβολισμός prefix, ο τελεστής μπροστά. (Προτάθηκε το 1920 από τον Πολωνό μαθηματικό Jan Lukasiewicz).
(α Τ β), συμβολισμός infix, ο τελεστής ανάμεσα.
(α β Τ), συμβολισμός postfix, ο τελεστής ακολουθεί. (Προτάθηκε το 1960 από τους F. L. Bauer και E. W. Dijkstra).

Ο μόνος γνωστός τρόπος για τους μαθητές είναι με τον τελεστή ανάμεσα από τα (α, β).
Για να μην υπάρχουν παρεξηγήσεις, με ποιά σειρά θα γίνουν οι πράξεις, δίνουμε στους τελεστές ιεραρχία εκτέλεσης. Επίσης, χρησιμοποιούμε παρενθέσεις.

Προηγείται η ύψωση σε δύναμη (α^β).
Δεύτερες πράξεις σε ιεραρχία είναι ο πολλαπλασιασμός (α*β) και η διαίρεση (α/β).
Ακολουθούν τρίτες σε ιεραρχία η πρόσθεση (α+β) και η αφαίρεση (α-β).
Αν σε μία έκφραση υπάρχουν παρενθέσεις, βρίσκεται πρώτα η τιμή της έκφρασης της πιο εσωτερικής παρένθεσης.
Αν σε μία έκφραση υπάρχουν πράξεις ίσης ιεραρχίας, εκτελούνται από αριστερά προς τα δεξιά.
Οι συγκριτικοί τελεστές έχουν μικρότερη ιεραρχία.
Οι λογικοί τελεστές έχουν μικρότερη από όλους, αλλά μεταξύ τους (αν θυμάμαι καλά!) προηγείται ο ΌΧΙ, μετά ο ΚΑΙ, μετά ο Ή. Το σωστό είναι να βάζουμε παρενθέσεις, για να μην υπάρχει αμφιβολία.

Ας δούμε ένα παράδειγμα εκτέλεσης πράξεων (Συμβολίζουμε τα ενδιάμεσα αποτελέσματα (results) με R1, R2, κλπ) :
(α - β * (γ + δ * ε)) - ζ / η
(α - β * (γ + R1)) - ζ / η
(α - β * (R2)) - ζ / η
(α - R3) - ζ / η
(R4) - ζ / η
R4 - R5
R6

Μια ενδιαφέρουσα παρατήρηση είναι ότι ο συμβολισμός του Πολωνού (Polish notation) Lukasiewicz και ο συμβολισμός με τον τελεστή να ακολουθεί (ανάστροφος συμβολισμός του Πολωνού, Reverse Polish Notation, RPN) δεν χρειάζονται παρενθέσεις!

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

Ας ξαναγράψουμε (δια "μαγικού τρόπου") την έκφραση του προηγούμενου παραδείγματος σε RPN μορφή :
α β γ δ ε * + * - ζ η / -
α β γ R1 + * - ζ η / -
α β R2 * - ζ η / -
α R3 - ζ η / -
R4 ζ η / -
R4 R5 -
R6

Όπως βλέπετε, γίνονται οι ίδιες πράξεις. Κάθε τελεστής εφαρμόζεται σε δύο παράγοντες/προσθετέους/κλπ αριστερά του.

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

Δείτε τον "μαγικό τρόπο" σε λειτουργία (αριστερά τα στοιχεία της έκφρασης, στη μέση [ο σωρός των τελεστών] και δεξιά [η έκφραση RPN]) :
στοιχεία της έκφρασηςο σωρός των τελεστώνη έκφραση RPNσχόλιο
( (

α ( α
- (- α
β (- αβ
* (-* αβ
( (-*( αβ
γ (-*( αβγ
+ (-*(+ αβγ
δ (-*(+ αβγδ
* (-*(+* αβγδ
ε (-*(+* αβγδε
) (-*(+*) αβγδε και αφού έκλεισε παρένθεση

(-* αβγδε*+
) (-*) αβγδε*+ και αφού έκλεισε παρένθεση


αβγδε*+*-
- - αβγδε*+*-
ζ - αβγδε*+*-ζ
/ -/ αβγδε*+*-ζ
η -/ αβγδε*+*-ζη
τέλος στοιχείων
αβγδε*+*-ζη/-

Ένα αρχαίο Fortran πρόγραμμα που έκανε στοιχειώδη μετατροπή έκφρασης σε Polish μορφή δίνεται παρακάτω :


______PROGRAM ALGPOL
C_________CASE STUDY 15 - (MAC CRACKEN ?)
C_________TRANSLATING ALGEBRAIC EXPRESSIONS TO POLISH NOTATION
______INTEGER BLANK,LPAREN,RPAREN,PLUS,MINUS,ASTRSK,SLASH,SOURCE(80),
_____1OPSTCK(80),POLISH(80),SHIER(80),OHIER(80)
______DATA BLANK,LPAREN,RPAREN,PLUS,MINUS,ASTRSK,SLASH/' ','(',')','+',
_____1'-','*','/'/
C_________
C_________INITIALIZE ARRAYS TO ZERO OR BLANK
_1001 DO 1002 L = 1, 80
______SHIER(L) = 0
______OHIER(L) = 0
______OPSTCK(L) = BLANK
______POLISH(L) = BLANK
_1002 CONTINUE
C_________READ A DATA CARD
______READ (10, 2001) SOURCE
C_________WRITE ALGEBRAIC STRING,(IN FORTRAN STYLE)
______WRITE(12, 2002) SOURCE
C_________L POINTS TO THE CURRENT CARD COLUMN
______L = 1
C_________ASSIGN HIERARCHY NUMBERS AND TEST FOR FIRST BLANK
_1003 IF(SOURCE(L) .EQ. BLANK) GO TO 1009
______IF(SOURCE(L) .EQ. LPAREN) GO TO 1004
______IF(SOURCE(L) .EQ. RPAREN) GO TO 1005
______IF(SOURCE(L) .EQ. PLUS .OR. SOURCE(L) .EQ. MINUS) GO TO 1006
______IF(SOURCE(L) .EQ. ASTRSK .OR. SOURCE(L) .EQ. SLASH) GO TO 1007
______GO TO 1008
_1004 SHIER(L) = 1
______GO TO 1008
_1005 SHIER(L) = 2
______GO TO 1008
_1006 SHIER(L) = 3
______GO TO 1008
_1007 SHIER(L) = 4
_1008 L = L + 1
______IF(L .GT. 80) GO TO 1009
______GO TO 1003
_1009 N = L - 1
C_________IF N IS NOW ZERO, CARD WAS BLANK, GO TO EXIT
______IF(N .EQ. 0) GO TO 1016
C_________INITIALIZE HIERARCHY NUMBERS
______OHIER(1) = - 1
C_________INITIALIZE POINTERS
______I = 1
______J = 2
______K = 1
C_________CHECK FOR OPERAND
_1010 IF(SHIER(I) .EQ. 0) GO TO 1012
C_________CHECK FOR RIGHT PARENTHESIS
______IF(SHIER(I) .EQ. 2) GO TO 1011
C_________OTHER OPERATOR IF HERE %% MOVE TO OPERATOR STACK
______OPSTCK(J) = SOURCE(I)
______OHIER(J) = SHIER(I)
______I = 1 + I
______J = J + 1
______GO TO 1010
C_________DELETE CORRESPONDING LEFT PARENTHESIS
_1011 I = 1 + I
______J = J - 1
______GO TO 1013
C_________MOVE OPERAND TO POLISH STRING
_1012 POLISH(K) = SOURCE(I)
______I = 1 + I
______K = K + 1
C_________CHECK HIERARCHY RANKINGS
_1013 IF (OHIER(J-1) .GE. SHIER(I)) GOTO 1014
C_________CHECK FOR END OF SOURCE STRING
______IF(I .GE. L) GO TO 1015
______GO TO 1010
C_________MOVE OPERATOR TO POLISH STRING
_1014 POLISH(K) = OPSTCK(J-1)
______K = K + 1
______J = J - 1
______GO TO 1013
C_________WRITE POLISH STRING
_1015 WRITE(12, 2003) POLISH
______GO TO 1001
C_________EXIT POINT
______STOP 1001
C_________I/O FORMATS
_2001 FORMAT(80A1)
_2002 FORMAT(* ALGEBRAIC NOTATION *,80A1)
_2003 FORMAT(* POLISH NOTATION *,80A1/)
______END


Μετατρέψτε το στην γλώσσα που χρησιμοποιείτε συνήθως και δοκιμάστε το με εκφράσεις όπως οι παρακάτω (που δεν είναι όλες αλγεβρικά σωστές!) :

A+(B/C)/(D+(E+F)/(G*H-I/(J/K+L)))-M*N
A*(B+C)
(A+B)*C
A+B*C+D
(A+B)*(C+D)
A-B/C
(A-B)/C
A/B/C
(A/B)/C
A*B/C*D/E
A*B-C+D
A*B-(C+D)
A*(B-C)+D
A*(B-C+D)
A
(((A)))
((A)+((B)))
A+B+C+D
(A+B)+(C+D)
A+B/C+D/(E+F+G-H/I)*J
(((A+B)*C+D)*E+F)*G
A+B*(C+D*(E+F*(G+H)))
AB*CD+EF-*/
AB*3.C-/BB+*

Καλή διασκέδαση!