Τελικό μήνυμα: (συγγνώμη για την έκταση και τον χρόνο σας όποιος αντέξει! )(σε συνέχεια του προηγούμενου...)
Επειδή δεν έχει γίνει από όλους αντιληπτή η αιτία των διαφωνιών και πολλοί πιστεύουν πως δεν υπάρχει καν θέμα προβληματισμού, ας καταγράψουμε πιο ξεκάθαρα τις 3 (και όχι 2!) διαφορετικές εικασίες για τον τρόπο λειτουργίας της Για (ακολουθώ περίπου το στυλ του Παναγιώτη σε περίπου_αλγοριθμική_μορφή_για_λόγους_συντομίας. Προσοχή δεν είναι αλγόριθμος - δεν θέλουμε σκόπιμα σε αλγορίθμους να προκαλούμε άπειρες επαναλήψεις για προφανείς λόγους! Έτσι δεν είναι;

):
ΤΡΟΠΟΙ ΛΕΙΤΟΥΡΓΙΑΣ ΤΗΣ ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ...ΜΕ_ΒΗΜΑΕΙΚΑΣΙΑ_1:Αν βήμα = 0 τότε έχουμε:
Αν αρχική<=τελική τότε
ι<-αρχική
Όσο ι<= τελική επανάλαβε
<εντολές>
ι<-ι+β (δηλαδή ι<-ι+0)
Τέλος_επανάληψης
!
άρα άπειρες επαναλήψεις αλλιώς (δηλαδή
αν αρχική>τελική) τότε έχουμε:
ι<-αρχική
Όσο ι>= τελική επανάλαβε
<εντολές>
ι<-ι+β (δηλαδή ι<-ι+0)
Τέλος_επανάληψης
!
άρα πάλι άπειρες επαναλήψεις Τέλος_αν
αλλιώς αν β>0 τότε έχουμε:
ι<-αρχική
Όσο ι<= τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική >= αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
αλλιώς (δηλαδή αν β<0) έχουμε:
ι<-αρχική
Όσο ι>= τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική <= αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
Τέλος_αν
Παρατηρήσεις: 1. Η εικασία αυτή είναι συμβατή με αυτό που λέει ο Τσιωτάκης Παναγιώτης, και ο Γιώργος Καρκαμάνης, και ίσως οι περισσότεροι...
2. Πλεονέκτημα:
Όταν β=0 έχουμε άπειρες επαναλήψεις σε κάθε περίπτωση άρα είναι συμβατό (ας πούμε) και με το βιβλίο.
4. Μειονέκτημα: Είναι πολύπλοκο αφού όταν το β=0 τότε ελέγχει επιπλέον το αν αρχική<=τελική ώστε να προκαλέσει σκόπιμα άπειρες επαναλήψεις σε κάθε περίπτωση!!!
3. Έτσι, αν θεωρήσουμε ότι αυτό λέει και το βιβλίο (λέμε: ΑΝ!!), τότε όντως κατά την υλοποίηση κάποιου διερμηνευτή ή μεταγλωττιστή η ΓΙΑ θα έπρεπε να δουλεύει κάπως έτσι!!!
ΕΙΚΑΣΙΑ_2 (η οποία ξεφύτρωσε από το πουθενά!)Αν βήμα = 0 τότε έχουμε:
Αν αρχική<=τελική τότε
ι<-αρχική
Όσο ι>= τελική επανάλαβε
<εντολές>
ι<-ι+β (δηλαδή ι<-ι+0)
Τέλος_επανάληψης
!
άρα καμία επανάληψη!!!! αλλιώς (δηλαδή
αν αρχική>τελική) τότε έχουμε:
ι<-αρχική
Όσο ι<= τελική επανάλαβε
<εντολές>
ι<-ι+β (δηλαδή ι<-ι+0)
Τέλος_επανάληψης
!
άρα πάλι καμία επανάληψη!!!! Τέλος_αν
αλλιώς αν β>0 τότε έχουμε:
ι<-αρχική
Όσο ι<= τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική>=αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
αλλιώς (δηλαδή αν β<0) έχουμε:
ι<-αρχική
Όσο ι>= τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική<=αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
Τέλος_αν
Παρατηρήσεις: 1. Είναι το ίδιο με την πρώτη εικασία μόνο που (αυθαίρετα κι εγώ - γιατί όχι; ) όταν το β=0 έχω αλλάξει τα >= σε <= και αντιθέτως!!!
2.
Όταν β=0 τότε δεν έχουμε καθόλου επαναλήψεις σε κάθε περίπτωση!!!3. Μειονέκτημα: Η εικασία αυτή είναι δεν συμβατή με το βιβλίο, για αυτό βέβαια δεν την υποστηρίζει κανένας από εμάς!!!
4. Μειονέκτημα: Είναι το ίδιο πολύπλοκο αφού όταν το β=0 τότε ελέγχει επιπλέον το αν αρχική<=τελική ώστε να μην προκαλέσει άπειρες επαναλήψεις σε καμία περίπτωση!!! (τουλάχιστον όμως γίνεται για καλό σκοπό! βλ. επόμενο)
5. Πλεονέκτημα: Δεν έχουμε ποτέ άπειρες επαναλήψεις πράγμα που όντως ποτέ δεν το θέλουμε. Άρα κατά κάποιο τρόπο θα προστατευόταν έτσι ο προγραμματιστής από απροσεξίες και... κακοτοπιές (

).
Βέβαια ισοδυναμεί με το:
Αν β>0 τότε έχουμε:
ι<-αρχική
Όσο ι<= τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική>=αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
αλλιώς_αν β<0 έχουμε:
ι<-αρχική
Όσο ι>=τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική<=αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
Τέλος_αν
Οπότε έτσι εξαλείφεται το μειονέκτημα της πολυπλοκότητας. Παραμένει όμως η ασυμβατότητα με το βιβλίο!
ΕΙΚΑΣΙΑ_3Αν β>=0 τότε έχουμε:
ι<-αρχική
Όσο ι<=τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε
Αν τελική >= αρχική τότε έχουμε κάποιες επαναλήψεις, ή και άπειρες επαναλήψεις αν το β=0 !
Αν όμως τελική < αρχική δεν έχουμε καμία επανάληψη ακόμα κι αν β=0!!!αλλιώς (δηλαδή αν β<0) έχουμε:
ι<-αρχική
Όσο ι>=τελική επανάλαβε
<εντολές>
ι<-ι+β
Τέλος_επανάληψης
! οπότε Αν τελική <= αρχική τότε έχουμε κάποιες επαναλήψεις
! αλλιώς δεν έχουμε καμία επανάληψη
Τέλος_αν
Παρατηρήσεις: 1. Σε αυτήν δεν μας πολυαπασχολεί η περίπτωση του β=0, απλά προκύπτει από μόνο του ότι μπορεί να
έχουμε άπειρες επαναλήψεις (αν τελική >= αρχική) ή καμία επανάληψη (αν τελική< αρχική)2. Πλεονέκτημα: Όταν β=0 έχουμε άπειρες επαναλήψεις στην 1η περίπτωση, άρα είναι συμβατό με το ένα και μοναδικό παράδειγμα του βιβλίου!
3. Πλεονέκτημα: Δεν είναι πολύπλοκος άρα υλοποιείται εύκολα σε κάποιον διερμηνευτή ή μεταγλωττιστή.
4. Το σημαντικότερο τώρα: Αν υποθέσουμε ότι απλά οι συγγραφείς του βιβλίου δεν σκέφτηκαν καν την περίπτωση του "β=0 και τελική< αρχική" (που δεν είναι και τόσο δύσκολο να έχει συμβεί αυτό!), που στο κάτω κάτω δεν αναφέρεται καν, τότε η εικασία αυτή είναι ΠΛΗΡΩΣ συμβατή και με το βιβλίο!!!
Για να δούμε τώρα ποιαν θα διαλέγαμε εμείς:1) Αν δεν ήμασταν δεσμευμένοι από το βιβλίο να τολμήσω να υποθέσω ότι θα διαλέγαμε την ΕΙΚΑΣΙΑ_2;;;;!!!! Είναι ίσως η καλύτερη! Επειδή όμως εκ των πραγμάτων είμαστε δεσμευμένοι, την απορρίπτουμε ασυζητητί.
2) ʼρα θα μένει η ΕΙΚΑΣΙΑ_1 και ΕΙΚΑΣΙΑ_3.
Για να δούμε τώρα ποιαν θα διάλεγαν οι συγγραφείς αν ήταν πιο προσεκτικοί:1) Υποστηρίζω λοιπόν (και πάνω σε αυτό περιμένω και τις απόψεις σας!!) ότι ΔΕΝ θα διάλεγαν την ΕΙΚΑΣΙΑ_1 για τον εξής λόγο: Θα ήταν σαν να ήθελαν με το ζόρι να «τιμωρήσουν» τον προγραμματιστή επειδή έβαλε απερίσκεπτα το β=0!!! Είναι όμως δυνατόν σε προγραμματιστική δομή επανάληψης που εντάσσεται στη λογική του δομημένου προγραμματισμού (και άρα που δεν είναι «πρέπον» να χρησιμοποιείται η goto για έξοδο από το βρόχο) να αποτελεί αυτοσκοπό στον ορισμό λειτουργίας της η δημιουργία άπειρων επαναλήψεων;;;; Μα τότε δεν είναι σαν να επιδιώκουμε την παραβίαση του κριτηρίου της περατότητας;
2) ʼρα μένει η ΕΙΚΑΣΙΑ_2 και ΕΙΚΑΣΙΑ_3.
3) Ξέρουμε λόγω του βιβλίου ότι την ΕΙΚΑΣΙΑ_2 τελικά δεν την επέλεξαν και ορθά κατά τη γνώμη μου (το εξηγώ παρακάτω αναφερόμενος στις πραγματικές γλώσσες προγραμματισμού).
4) ʼρα θεωρώ ότι έχουν επιλέξει την ΕΙΚΑΣΙΑ_3.
Η τομή τού τι επιλέγουμε εμείς και τι οι συγγραφείς είναι η ΕΙΚΑΣΙΑ_3. Βέβαια, ατυχώς, οι συγγραφείς δεν περιέγραψαν αναλυτικά τις περιπτώσεις για το β=0 (ή, για να μην τους αδικούμε, μπορεί να μην έκριναν σκόπιμο να το κάνουν), και είμαστε τώρα εμείς εδώ να διαφωνούμε...
ΝΑ ΞΑΝΑΤΟΝΙΣΩ ΟΜΩΣ ΤΟ ΕΞΗΣ:
Το ότι προκύπτουν άπειρες επαναλήψεις δεν μπορεί να είναι επιδιωκόμενο αποτέλεσμα του ορισμού λειτουργίας των εντολών επανάληψης, είτε από τους συγγραφείς είτε από τον εκάστοτε οργανισμό που βγάζει μια νέα γλώσσα (δεν μπορεί δηλαδή να ισχύει η ΕΙΚΑΣΙΑ_1), αλλά είναι το αναπόφευκτο αποτέλεσμα του πραγματικού τρόπου λειτουργίας των εντολών αυτών. Και εξηγούμαι:
Ξεχνάμε ότι όλες οι εντολές, σε όποια γλώσσα προγραμματισμού υψηλού επιπέδου και να είναι διατυπωμένες, τελικά μεταφράζονται σε γλώσσα μηχανής για να εκτελεστούν στον υπολογιστή; Αν έχετε προγραμματίσει σε assembly, που είναι πολύ κοντά στη γλώσσα μηχανής, θα ξέρετε ότι οι βρόχοι δημιουργούνται με τη βοήθεια αρκετών ξεχωριστών εντολών: για την αρχικοποίηση κάποιας «μεταβλητής», για την μεταβολή της κατά κάποιο βήμα, για τον έλεγχό της σε σχέση με κάποιο όριο ώστε να προκληθεί έξοδος από το βρόχο ή επιστροφή ξανά από την αρχή, κλπ. Θα λέγαμε δηλαδή ότι οι βρόχοι επανάληψης περισσότερο μοιάζουν με Όσο ή με Μέχρις_ότου παρά με Για. Το ότι υπάρχει η Για στις γλώσσες υψηλού επιπέδου γίνεται για λόγους ευκολίας του προγραμματιστή, ώστε να υπάρχει ένα ακόμα επίπεδο αφαίρεσης της πολυπλοκότητας των εντολών. Τελικά όμως κι αυτή μεταφράζεται σε γλώσσα μηχανής με το ίδιο τρόπο. Και ενώ στις πραγματικές γλώσσες η υλοποίηση της ΓΙΑ θα μπορούσε να αντιστοιχεί πάντα στην ΕΙΚΑΣΙΑ_2 (για λόγους που εξηγήσαμε) ωστόσο ούτε καν γίνεται αυτό, αφού δεν θεωρείται τόσο πολύ σημαντικό, και αφού ότι κανένας λογικός προγραμματιστής δεν θα έπαιζε με το βήμα ώστε αυτό να γίνει 0. Είπαμε, οι προγραμματιστές ξέρουν τις συνέπειες και αποφεύγουν τις κακοτοπιές (!!!). Υποστηρίζω δηλαδή (χωρίς να έχω κάνει και στατιστική μελέτη) ότι ακόμα και στις πραγματικές γλώσσες τις περισσότερες φορές υλοποιείται η ΕΙΚΑΣΙΑ_3, λιγότερες ίσως η ΕΙΚΑΣΙΑ_2, και σπανιότερα η ΕΙΚΑΣΙΑ_1. ʼρα ορθά, και πάντα κατά τη γνώμη μου, οι συγγραφείς έχουν επιλέξει την ΕΙΚΑΣΙΑ_3!!!
Και για να ολοκληρώσω κι εγώ κάποτε (ως Νίκος και όχι ως Πετρούλα...), πιστεύω ότι η ανάλυση λειτουργίας της Για (στο αρχικό μήνυμά μου και με το οποίο ξεκίνησε η αλυσίδα) ικανοποιεί τις διδακτικές ανάγκες για τους σκοπούς του μαθήματος, αλλά ορθά περιλαμβάνει και τους όποιους προβληματισμούς για να μην πέσουμε από μόνοι μας στο λάκο (δηλαδή να μην υποπέσουμε σε επιστημονικές αυθαιρεσίες) και βρεθεί κανένας και μας καρφώσει πισώπλατα!!!