Μήπως είναι αργός ο υπολογιστής μου ???
Ας προσπάθήσουμε να το εξακριβώσουμε .......
Οι επόμενοι αλγόριθμοι αφορούν την εύρεση ΜΚΔ δύο φυσικών αριθμών..... Φυσικά το ενδιαφέρον δεν βρίσκεται εδω......!
.... αλλα στο γεγονός των επαναλήψεων που εκτελούν. Νομίζω ότι θα συμφωνήσουμε πως ο πρωταρχικός μας σκοπός δεν είναι εξ αρχής ο βέλτιστος αλγόριθμος, αλλά απλώς ένας αλγόριθμος που λύνει σώστα το πρόβλημα μας, για κάθε όμως συνδιασμό δεδομένων, ή εν πάσει περιπτώση για κάθε συνδιασμό δεδομένων που βρίσκονται μέσα σε κάποια όρια που θέτουμε εμείς εξ αρχής.
Ο επόμενος αλγόριθμος υλοποιεί μια πρόταση για τη εύρευση ΜΚΔ δύο φυσικών αριθμών, και αποτελεί μια λύση ενός μαθητή μου, που όπως παρατηρεί κανείς εύκολα, μαλλον χαρακτηρίζεται από λίγο "περίπλοκη" σκέψη. Ηταν μεγάλη η έκπληξη μου όταν τον είδα, και ομολογώ ότι πραγματικά χάρικα πολύ, γιατι όπως κατανοείτε, αυτή η λύση δίνει "βούτυρο στο ψωμί" κάθε διδάσκοντα, για να μιλήσει για το τι σημαίνει "βέλτιστη λύση" και ρεαλιστικός χρόνος εκτελεσης ενός αλγοριθμου. Το μόνο που του πρόσθεσα ήταν ο μετρητής των ελέγχων (επαναλήψεων ακριβέστερα) που εκτελεί ο συγκεκριμένος αλγόριθμος......
Και όταν λοιπόν τον "δοκιμάσαμε" μπροστά στη γλωσσομάθεια και παρατηρήσε το μετρήσιμο πραγματικά χρόνο για τον υπολογισμό ΜΚΔ μεταξύ πχ 9856 και 8960 (υπολογίζει φυσικά σωστά το ΜΚΔ=896) παρατήρησε πως ο αλγόριθμος του εκτελεί 80.298.626 επαναλήψεις....... Δεν το σηζητούμε να δοκιμάσετε πχ 98560 και 89600 ..... αν δεν κολήσει ο Η/Υ καλίτερα δοκιμάστε να πάτε καμιά βολτίτσα....... Κλείνω παραθέτωντας τον αλγόριθμο (ελπίζοντας πως δεν έγινα κουραστικός).... και φυσικά θα ήθελα τα σχολια σας επί του θέματος......
ΠΡΟΓΡΑΜΜΑ Μεγιστος_Κοινός_Διαιρέτης_1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Α,Β,i,j,ΜΚΔ,ελ
ΛΟΓΙΚΕΣ: βρεθηκε
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 1ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Α
ΜΕΧΡΙΣ_ΟΤΟΥ Α>0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 2ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Β
ΜΕΧΡΙΣ_ΟΤΟΥ Β>0
ελ <-- 0
βρεθηκε <-- ψευδής
i <-- Α
ΟΣΟ (i>=1) ΚΑΙ (ΟΧΙ βρεθηκε) ΕΠΑΝΑΛΑΒΕ
j <-- Β
ΟΣΟ (j>=1) ΚΑΙ (ΟΧΙ βρεθηκε) ΕΠΑΝΑΛΑΒΕ
ΑΝ (Α MOD i =0) ΚΑΙ (Β MOD j=0) ΚΑΙ (i=j) ΤΟΤΕ
βρεθηκε <-- αληθής
ΜΚΔ <-- i
ΤΕΛΟΣ_ΑΝ
j <-- j-1
ελ <-- ελ+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <-- i-1
ελ <-- ελ+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Μεγιστος Κοινός Διαιρέτης των ',Α, ' και ',Β,' είναι το ', ΜΚΔ
ΓΡΑΨΕ 'Πραγματοποιήθηκαν ',ελ, ' έλεγχοι'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
!---------------------------------------------------
ΠΡΟΓΡΑΜΜΑ Μεγιστος_Κοινός_Διαιρέτης_2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Α,Β,ΜΚΔ,ελ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 1ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Α
ΜΕΧΡΙΣ_ΟΤΟΥ Α>0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 2ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Β
ΜΕΧΡΙΣ_ΟΤΟΥ Β>0
ΜΚΔ <-- Α
ΑΝ Β<Α ΤΟΤΕ
ΜΚΔ <-- Β
ΤΕΛΟΣ_ΑΝ
ελ <-- 0
ΟΣΟ ((Α MOD ΜΚΔ)<>0) Η((Β MOD ΜΚΔ)<>0) ΕΠΑΝΑΛΑΒΕ
ΜΚΔ <-- ΜΚΔ-1
ελ <-- ελ +1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Μεγιστος Κοινός Διαιρέτης των ',Α, ' και ',Β,' είναι το ', ΜΚΔ
ΓΡΑΨΕ 'Πραγματοποιήθηκαν ',ελ, ' έλεγχοι'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Και φυσικά ο μεγαλιώδης αλγόριθμος του Ευκλείδη που για τους αριθμούς 9856 και 8960 (εκτελεί 3 επαναλήψεις !!!!!!!!!!!) . Αν αυτό δεν είναι εντυπωσιακό για ένα μαθητή τοτε τι είναι ????
ΠΡΟΓΡΑΜΜΑ Μεγιστος_Κοινός_Διαιρέτης_Ευκλείδη
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:Α,Β,temp,ΜΚΔ,ελ
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 1ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Α
ΜΕΧΡΙΣ_ΟΤΟΥ Α>0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε 2ο θετικό ακέραιο'
ΔΙΑΒΑΣΕ Β
ΜΕΧΡΙΣ_ΟΤΟΥ Β>0
ΓΡΑΨΕ 'Μεγιστος Κοινός Διαιρέτης των ',Α, ' και ',Β
temp <-- Α
ελ <-- 0
ΟΣΟ temp<>0 ΕΠΑΝΑΛΑΒΕ
temp <-- Β MOD Α
Β <-- Α
Α <-- temp
ελ <-- ελ +1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΚΔ <-- Β
ΓΡΑΨΕ 'Eίναι το ', ΜΚΔ
ΓΡΑΨΕ 'Πραγματοποιήθηκαν ',ελ, ' έλεγχοι'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ