Ανάλυση λειτουργίας της "Για"

Ξεκίνησε από Νίκος Αδαμόπουλος, 11 Φεβ 2009, 12:22:59 ΜΜ

« προηγούμενο - επόμενο »

Νίκος Αδαμόπουλος

Γεια σας κι από μένα

Θέτω υπό την κρίση σας μια ανάλυση για τον τρόπο λειτουργίας της Για...από...μέχρι...με_βήμα
που έχω αναρτήσει στο http://dide.ilei.sch.gr/keplinet/education/aepp_for.php και που έχουμε συμπεριλάβει στο Ενημερωτικό Δελτίο μας (για να το διαφημίσουμε και λίγο! ) στο http://dide.ilei.sch.gr/keplinet/ed/ed23_jan_2009.pdf

Με εκτίμηση

Νικόλαος Αδαμόπουλος
Υπεύθυνος ΚΕ.ΠΛΗ.ΝΕ.Τ. ΔΔΕ Ηλείας

Ταχ. Διεύθ:
   2ο ΕΠΑ.Λ. Πύργου
   (περιοχή Κοκκιλώνι)
   27100 Πύργος
Τηλ: 26210-27316
Email: plinet [at] dide.ilei.sch.gr
URL: http://dide.ilei.sch.gr/keplinet



gpapargi

Καλημέρα

Η Για και οι μετατροπές είναι μια πονεμένη ιστορία που εμένα τουλάχιστο με έχει απασχολήσει πολύ.

Αυτό που αναφέρεις στο τέλος ως δύσκολο θέμα στις εξετάσεις, είχε σχολιαστεί παλαιότερα από το στέκι. Σίγουρα θα σε ενδιαφέρει η κουβέντα. Φαίνεται πως η λύση που προτάθηκε από την επιτροπή (αλλά και όλο το θέμα) ήταν λάθος. Διάβασέ το μέχρι το τέλος.
https://alkisg.mysch.gr/steki/index.php?topic=1157.0

Το πλήθος των βημάτων της Για καθώς και η τελική τιμή του μετρητή είχε συζητηθεί και για την περίπτωση δεκαδικών αριθμών στα παρακάτω links
Απόδειξη
https://alkisg.mysch.gr/steki/index.php?topic=287.msg1953#msg1953

Συμπεράσματα:
https://alkisg.mysch.gr/steki/index.php?topic=287.msg2037#msg2037

Τέλος ένα θέμα σκοτεινό ακόμα (για μένα) είναι το πως ακριβώς προκύπτει ότι με βήμα 0 έχουμε ατέρμονα βρόχο. Δε μου αρκεί το ότι το λέει το βιβλίο. Το βιβλίο θα πρέπει να ορίσει μια μετατροπή σε Όσο μέσω της οποίας θα αποδειχτεί το ότι το πλήθος των επαναλήψεων της Για είναι άπειρο. 

sstergou

Παράθεση από: gpapargi στις 11 Φεβ 2009, 02:27:09 ΜΜ
Δε μου αρκεί το ότι το λέει το βιβλίο. Το βιβλίο θα πρέπει να ορίσει μια μετατροπή σε Όσο μέσω της οποίας θα αποδειχτεί το ότι το πλήθος των επαναλήψεων της Για είναι άπειρο.

Γιατί πρέπει η για να μετατρέπεται πάντα σε όσο;
Δεν μπορεί να είναι μια ξεχωριστή δομή που ορίζεται διαφορετικά;

Αυτή η μετατροπή δεν είναι σωστή;

Κώδικας: Ψευδογλώσσα
Για ι από 1 μέχρι 10 με_βήμα 0
Εμφάνισε ι
Τέλος_επανάληψης

ι<-1
Όσο ι<=10 επανάλαβε 
Εμφάνισε ι
ι<- ι + 0
Τέλος_επανάληψης

Νίκος Αδαμόπουλος

#3
Παράθεση από: gpapargi στις 11 Φεβ 2009, 02:27:09 ΜΜ
Το πλήθος των βημάτων της Για καθώς και η τελική τιμή του μετρητή είχε συζητηθεί και για την περίπτωση δεκαδικών αριθμών στα παρακάτω links

Ουπς! Ούτε που σκέφτηκα τους δεκαδικούς! Πράγματι δεν μπορεί να μπει το DIV. Ωστόσο η λογική του τύπου παραμένει η ίδια μόνο που αντί για div μπαίνει το A_M. Κατά άλλα δεν βλέπω κάποιο collision... Thnks. Θα το διορθώσω.

Και γενικά δεν βλέπω διαφορές σε σχέση με τις επικρατούσες απόψεις...

gpapargi

Είναι και το θέμα του 2001 με τη μετατροπής από Μέχρις_ότου σε Για. Για Α=1.1 και Μ=4 οι 2 ψευδοκώδικες δίνουν διαφορετικά αποτελέσματα. Είμαι βέβαιος ότι ξέφυγε το θέμα της επιτροπής.

gpapargi

Παράθεση από: sstergou στις 11 Φεβ 2009, 02:50:43 ΜΜ
Παράθεση από: gpapargi στις 11 Φεβ 2009, 02:27:09 ΜΜ
Δε μου αρκεί το ότι το λέει το βιβλίο. Το βιβλίο θα πρέπει να ορίσει μια μετατροπή σε Όσο μέσω της οποίας θα αποδειχτεί το ότι το πλήθος των επαναλήψεων της Για είναι άπειρο.

Γιατί πρέπει η για να μετατρέπεται πάντα σε όσο;
Δεν μπορεί να είναι μια ξεχωριστή δομή που ορίζεται διαφορετικά;

Αυτή η μετατροπή δεν είναι σωστή;

Κώδικας: Ψευδογλώσσα
Για ι από 1 μέχρι 10 με_βήμα 0
Εμφάνισε ι
Τέλος_επανάληψης

ι<-1
Όσο ι<=10 επανάλαβε 
Εμφάνισε ι
ι<- ι + 0
Τέλος_επανάληψης


Δες το εξής παράδειγμα:
Για ι από 5 μέχρι 1 με_βήμα 0
  Εμφάνισε ι
Τέλος_επανάληψης

Με βάση τη μετατροπή που γράφεις (δηλαδή χρήση του τελεστή <= όταν το βήμα είναι 0) έχουμε

ι<-5
Όσο ι<=1 επανάλαβε
  Εμφάνισε ι
  ι<-ι+0
Τέλος_επανάληψης

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

Η ουσία είναι η εξής:
Κάθε εντολή επανάληψης πρέπει να έχει ένα σημείο που να σηματοδοτεί το τέλος της, ένα σημείο που να σηματοδοτεί την αρχή της (εκεί που θα επιστρέψει μετά το σημείο τέλους) και το σημαντικότερο: μια συνθήκη (στην αρχή ή στο τέλος) βάση της οποίας θα γίνει η διακοπή του βρόχου. Στη "Για"  δεν ξέρουμε ποια είναι αυτή η συνθήκη.

Για να το πω με άλλα λόγια:
Ποιο είναι το διάγραμμα ροής της Για σε κάθε περίπτωση βήματος έτσι ώστε να έχουμε ατέρμονα βρόχο όταν το βήμα είναι 0;

sstergou

Εγώ πάλι νομίζω ότι ο τελεστής εξαρτάται από την αρχική και την τελική τιμή και όχι από το βήμα.
Αν η αρχική τιμή είναι μικρότερη από την τελική, ο τελεστής είναι "<=" αλλιώς ο τελεστής είναι ">="

Οπότε το παράδειγμά σου
Κώδικας: Ψευδογλώσσα
Για ι από 5 μέχρι 1 με_βήμα 0
  Εμφάνισε ι
Τέλος_επανάληψης


θα το μετέτρεπα σε

Κώδικας: Ψευδογλώσσα
ι<-5
Όσο ι>=1 επανάλαβε
  Εμφάνισε ι
  ι<-ι+0
Τέλος_επανάληψης

Το οποίο δίνει επίσης ατέρμονα βρόχο.

Αλλά ακόμη και αν αποδειχτεί ότι έχεις δίκιο και πάλι δεν καταλαβαίνω γιατί ο ορισμός της για πρέπει να περνάει μέσω της όσο.

Νίκος Αδαμόπουλος

Λοιπόν, εντάξει... Τώρα μόλις διάβασα πιο συστηματικά όλη την κουβέντα που είχε γίνει από πέρυσι για το θέμα του 2001. Η αλήθεια είναι ότι δεν την είχα υπόψη μου (το παραδέχομαι: ενώ είχα υπόψη μου το Στέκι, ωστόσο δεν το χρησιμοποιούσα. Υπόσχομαι ενεργή συμμετοχή από δω και πέρα για να μου δοθεί άφεση αμαρτιών!).

Το κείμενο (για το οποίο ανέβασα το αρχικό post) έχει κυρίως εκπαιδευτικό χαρακτήρα και σκοπό, αλλά και να προβληματίσει (ελαφρώς μόνο όμως) σε κάποια "σκοτεινά" σημεία.

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

Ως προς αυτά που αναφέρονται μεταξύ sstergou και gpapargi, ακριβώς αυτό εννοούσα κι εγώ στην διατύπωση "Όμως δεν διευκρινίζεται τι θα γίνει, για παράδειγμα, στην περίπτωση: Για i από 5 μέχρι 1 με_βήμα 0. Θα έχουμε άπειρες επαναλήψεις ή δεν θα έχουμε καμία;". Άρα κι εδώ ο σκοπός του κειμένου για ελαφρό προβληματισμό επιτελείται μια χαρά :) )!!!

Ωστόσο δεν είμαι της γνώμης να εμπλέκουμε τους μαθητές με τέτοια πράγματα γιατί θα χαθεί η ουσία. Ούτως ή άλλως όταν κάποιος προγραμματίζει σε πραγματικό κώδικα είναι ελεύθερος να διαμορφώσει τον κώδικά του όπως θέλει και να αποφεύγει τις κακοτοπιές... Όλα τα άλλα έχουν ακαδημαϊκό ενδιαφέρον μόνο…

(Χο, χο, ξεκίνησε κουβέντα: μόλις είδα κι άλλο post οπότε συμπληρώνω: )

Δεν νομίζω ότι ο τελεστής αλλάζει έτσι απλά από "<=" σε ">=" επειδή θα μας βόλευε! Νομίζω ότι απλά οι συγγραφείς δεν το πολυσκέφτηκαν και για αυτό υπάρχει αυτή η ασάφεια. Μην πάμε τώρα εμείς να θεμελιώσουμε ακαδημαϊκά κάτι που απλά ξέφυγε από τους άλλους. Εδώ ακόμα και οι διαφορετικές υλοποιήσεις  μεταγλωττιστών για επίσημες - υπαρκτές γλώσσες είναι δυνατόν να συμπεριφέρονται διαφορετικά σε τέτοιες "κακοτοπιές" που απλά μπορούμε να τις αποφεύγουμε...

Από την άλλη κανείς δεν λέει ότι "ο ορισμός της Για πρέπει να περνάει μέσω της όσο" αλλά και πάλι τελικά το θέμα είναι πώς θα πραγματοποιείται η υλοποίησή της στον μεταγλωττιστή...

Νίκος Αδαμόπουλος

Παράθεση από: sstergou στις 12 Φεβ 2009, 10:15:02 ΠΜ
Εγώ πάλι νομίζω ότι ο τελεστής εξαρτάται από την αρχική και την τελική τιμή και όχι από το βήμα.
Αν η αρχική τιμή είναι μικρότερη από την τελική, ο τελεστής είναι "<=" αλλιώς ο τελεστής είναι ">="

Οπ, οπ!!! Συνάδελφοι προσοχή... Μην τα απλοποιούμε τόσο πολύ! Τότε στο παράδειγμα του βιβλίου "Για κ από 5 μέχρι 1" θα είχαμε άπειρες επαναλήψεις!!! Δεν γίνεται αυτό ούτε στις κανονικές γλώσσες...

gpapargi

Παράθεση από: sstergou στις 12 Φεβ 2009, 10:15:02 ΠΜ
Εγώ πάλι νομίζω ότι ο τελεστής εξαρτάται από την αρχική και την τελική τιμή και όχι από το βήμα.
Αν η αρχική τιμή είναι μικρότερη από την τελική, ο τελεστής είναι "<=" αλλιώς ο τελεστής είναι ">="

Υπάρχει στη σελίδα 44 στα πλάγια το παράδειγμα "Για ι από 5 μέχρι 1" που δεν εκτελείται καμία φορά.

Παράθεση από: sstergou στις 12 Φεβ 2009, 10:15:02 ΠΜ
Αλλά ακόμη και αν αποδειχτεί ότι έχεις δίκιο και πάλι δεν καταλαβαίνω γιατί ο ορισμός της για πρέπει να περνάει μέσω της όσο.

Υπάρχει το διάγραμμα ροής της Για στη σελίδα 43 του σχολικού.

Επίσης δες κάτω κάτω στο link
https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645

Πάει να εξηγήσει κάτι αλλά νομίζω ότι τα κάνει πιο πολύ σαλάτα. Ορίζει τη Για αλλιώς στη ΓΛΩΣΣΑ και αλλιώς στην ψευδογλώσσα και δεν εξηγεί πως προκύπτουν οι άπειρες επαναλήψεις στην ψευδογλώσσα με βήμα 0.

Νίκος Αδαμόπουλος

#10
Παράθεση από: gpapargi στις 12 Φεβ 2009, 12:06:13 ΜΜ
Επίσης δες κάτω κάτω στο link
https://alkisg.mysch.gr/steki/index.php?topic=912.msg8645#msg8645

Πάει να εξηγήσει κάτι αλλά νομίζω ότι τα κάνει πιο πολύ σαλάτα. Ορίζει τη Για αλλιώς στη ΓΛΩΣΣΑ και αλλιώς στην ψευδογλώσσα και δεν εξηγεί πως προκύπτουν οι άπειρες επαναλήψεις στην ψευδογλώσσα με βήμα 0.

Κι εγώ δεν συμφωνώ με αυτή τη διαφορετική προσέγγιση για τη ΓΛΩΣΣΑ ούτε καταλαβαίνω από πού προέκυψε... Δεν πρόκειται να την υιοθετήσω κι ούτε θεωρώ πως με αυτό θα δημιουργήσω τελικά πρόβλημα στους μαθητές...

sstergou

Παράθεση από: gpapargi στις 12 Φεβ 2009, 12:06:13 ΜΜ
Υπάρχει στη σελίδα 44 στα πλάγια το παράδειγμα "Για ι από 5 μέχρι 1" που δεν εκτελείται καμία φορά.

Σύμφωνοι. Αναφερόμουν στη ειδική περίπτωση όπου το βήμα είναι 0.
Όσο για το διάγραμμα αναφέρεται σε συγκεκριμένο παράδειγμα, δεν είναι γενικός κανόνας μετατροπής.

Παράθεση από: Νίκος Αδαμόπουλος στις 12 Φεβ 2009, 10:55:05 ΠΜ
Δεν νομίζω ότι ο τελεστής αλλάζει έτσι απλά από "<=" σε ">=" επειδή θα μας βόλευε! Νομίζω ότι απλά οι συγγραφείς δεν το πολυσκέφτηκαν και για αυτό υπάρχει αυτή η ασάφεια. Μην πάμε τώρα εμείς να θεμελιώσουμε ακαδημαϊκά κάτι που απλά ξέφυγε από τους άλλους.
Και εγώ τα ίδια υποστηρίζω. Έλα όμως που η επιτροπή αλλά και οι κάθε είδους υπεύθυνοι μας τραβάνε προς τα πίσω

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

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

Κώδικας: Ψευδογλώσσα
Για μ από αρχή μέχρι τελος με_βήμα β
Τέλος_επανάληψης


Κώδικας: Ψευδογλώσσα
μ <- αρχή
Όσο ΣυνθήκηΓια(μ, τέλος, β) επανάλαβε
μ <- μ + β
Τέλος_επανάληψης

Αλγόριθμος ΣυνθήκηΓια(αρχή, τέλος, β)
βήμαΘετικό <- β > 0
βήμαΑρνητικό <- β <0
απομακρύνεται <- (αρχή < τέλος και βήμαΑρνητικό) ή (αρχή > τέλος και βήμαΘετικό)
Αν απομακρύνεται τότε
  ΣυνθήκηΓια <- ψευδής
αλλιώς
  Αν βήμαΘετικό τότε
    ΣυνθήκηΓια <- αρχή <= τέλος
  αλλιώς 
    ΣυνθήκηΓια <- αρχή >= τέλος
Τέλος_αν
Τέλος ΣυνθήκηΓια


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

P.Tsiotakis

Προσωπικά, απο το σχολικό βιβλίο έχω καταλάβει το παρακάτω:

Αν βήμα = 0 τότε  ! πρώτα αυτός ο έλεγχος
  Άπειρες επαναλήψεις
Αλλιώς_αν β >0 τότε
  Αν τελική >= αρχική τότε
     κάποιες επαναλήψεις
  Αλλιώς
     ΚΑΜΙΑ επανάληψη
  Τέλος_αν
Αλλιώς
  Αν τελική <= αρχική τότε
     κάποιες επαναλήψεις
  Αλλιώς
     ΚΑΜΙΑ επανάληψη
  Τέλος_αν
Τέλος_αν

και οφείλω να πω οτι είναι ιδιαίτερα απλός αλγόριθμος

Νίκος Αδαμόπουλος

Παράθεση από: sstergou στις 12 Φεβ 2009, 05:13:21 ΜΜ
Και εγώ τα ίδια υποστηρίζω. Έλα όμως που η επιτροπή αλλά και οι κάθε είδους υπεύθυνοι μας τραβάνε προς τα πίσω

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

Άρα μέχρι στιγμής συμφωνούμε όλοι:
1. Υπάρχει ασάφεια στο τι κάνει το "Για ι από 5 μέχρι 1 με_βήμα 0".
2. Η μετατροπή "Για ι από 5 μέχρι 1 με_βήμα 0" σε Όσο μάς απασχολεί μόνο κατά την υλοποίηση ενός διερμηνευτή ή μεταγλωττιστή.
3. Πιστεύουμε (και ελπίζουμε) ότι κανένα σοβαρό μέλος επιτροπής εξετάσεων δεν θα βάλει θέμα πάνω σε αυτήν την κακοτοπιά...

Από κει και πέρα πιστεύω ότι:
1. Δεν υπάρχει λόγος να εμπλέξουμε τους μαθητές πάνω σε αυτό και να τους αγχώνουμε...
2. Ας μην βλέπουμε το δέντρο και χάνουμε το δάσος, ή με άλλα λόγια: εμάς μας νοιάζει περισσότερο το πώς θα διδάξουμε τους αλγορίθμους (σε μαθητές ας μην ξεχνάμε) και λιγότερο η θεωρητική (ακαδημαϊκή) τακτοποίηση του θέματος. Δηλαδή εμένα προσωπικά δεν με χαλάει κιόλας η συγκεκριμένη ασάφεια. Ας είναι το κερασάκι που ομορφαίνει την τούρτα! Αν δεν υπήρχε κι αυτό τότε τι θα βρίσκαμε για να κουβεντιάζουμε και να προβληματιζόμαστε; Τίποτα στην ζωή δεν είναι πλήρως τακτοποιημένο. Και οι άνθρωποι αρρωσταίνουν, και το περιβάλλον χάνει την ισορροπία του, και οι μηχανές χαλάνε, και οι υπολογιστές έχουν πεπερασμένα όρια για τους αριθμούς, και τα λογισμικά δεν καλύπτουν όλες τις δυνατές καταστάσεις και κολλάνε, και τα προϊόντα δεν είναι πλήρως συμβατά με τα πρότυπα........

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

Υ.Γ. Ακόμα κι αυτό που μόλις ανάρτησε ο Τσιωτάκης Παναγιώτης νομίζω είναι πλήρως συμβατό με την ανάλυση του κειμένου, οπότε μπορώ να κοιμάμαι ήσυχος :)

P.Tsiotakis

Κε Αδαμόπουλε, χαίρομαι πολύ που βλέπω κάποιον πληνετ να συμμετέχει στο φορουμ. Το site είναι πάρα πολύ ωραίο και άξιο προς μίμηση...

ps: Γνωριστήκαμε στην Πάτρα;

Στο μέλλον θα μιλάμε στον ενικό  :)

gpapargi

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

Στάθη το διάγραμμα ροής της Για πρέπει να είναι συγκεκριμένο στη δομή του ανεξάρτητα από το παράδειγμα. Στο συγκεκριμένο φαίνεται καθαρά ότι η συνθήκη  είναι στην αρχή και άρα ισοδυναμεί με κάποια Όσο. Δεν είναι συνεπές να θεωρούμε το ΔΡ της Για  άλλοτε με συνθήκη στην αρχή και άλλοτε με συνθήκη στο τέλος.

Εγώ θέλω να ξέρω ένα σαφή ορισμό που να δένει και με όσα λέει το βιβλίο. Δηλαδή να έχει έλεγχο στην αρχή (Όσο) και να έχει τέτοια συνθήκη που να καταλήγει σε ατέρμονα βρόχο όταν το βήμα είναι 0. Τέτοιος ορισμός δεν υπάρχει. Επίσης δεν είναι σωστό να λέμε απλά ότι έχουμε ατέρμονα βρόχο όταν το βήμα είναι 0. Αυτό είναι κάτι που πρέπει να προκύψει από τη συνθήκη και τη μηδενική αύξηση του μετρητή.

Καρκαμάνης Γεώργιος

Νομίζω ότι ο αλγόριθμος που ανέπτυξε ο Παναγιώτης για την εντολή ΓΙΑ καλύπτει όλες τις περιπτώσεις.
Βέβαια το πρόβλημα είναι πως θα εξηγήσουμε ότι για βήμα=0 έχουμε άπειρες επαναλήψεις.
Νομίζω πως όσο και να το αναλύσουμε δεν πρόκειται να βρούμε τρόπο να το εξηγήσουμε και γι΄αυτό το αποδέχομαι έτσι όπως είναι "Βήμα μηδέν τότε άπειρες επαναλήψεις"

gpapargi

Παράθεση από: Καρκαμάνης Γεώργιος στις 16 Φεβ 2009, 01:54:00 ΠΜ
Βέβαια το πρόβλημα είναι πως θα εξηγήσουμε ότι για βήμα=0 έχουμε άπειρες επαναλήψεις.
Νομίζω πως όσο και να το αναλύσουμε δεν πρόκειται να βρούμε τρόπο να το εξηγήσουμε και γι΄αυτό το αποδέχομαι έτσι όπως είναι "Βήμα μηδέν τότε άπειρες επαναλήψεις"

Γιατί το αποδέχεσαι; Το ότι δεν μπορούμε να εξηγήσουμε γιατί με βήμα 0 έχουμε άπειρες επαναλήψεις... αποδεικνύει (δια της εις άτοπον απαγωγής) ένα πράγμα: Ότι η "Για" δεν έχει οριστεί με κάποιο συνεπή τρόπο.

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

Καρκαμάνης Γεώργιος

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

Αν η αρχική τιμή <= τελική τιμή και το βήμα μηδέν
τότε μπαίνουμε μέσα στο βρόχο αλλά δεν αυξάνεται ποτέ η τιμή του μετρητή με αποτέλεσμα να μην μπορεί να ξεπεράσει ποτέ την τελική τιμή για να τερματίσει

Αν η αρχική τιμή >= τελική τιμή και το βήμα μηδέν
τότε μπαίνουμε μέσα στο βρόχο αλλά δεν μειώνεται ποτέ η τιμή του μετρητή με αποτέλεσμα να μην ξεπεράσει ποτέ την τελική τιμή για να τερματίσει


P.Tsiotakis

Αφενός, συμφωνώ στην αιτιολόγηση με τον Γιώργο Καρκαμάνη

αφετέρου για τη διδασκαλία της αλγοριθμικής σκέψης στους μαθητές μου, μου φτάνουν αυτά

gpapargi

Η αιτιολόγηση του Γιώργου, αν και λογική, είναι αυθαίρετη. Πουθενά το διδακτικό πακέτο για τη μετατροπή από Για σε Όσο δε στηρίζεται στα όρια του μετρητή αλλά στο πρόσημο του βήματος.

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

Νίκος Αδαμόπουλος

#21
Με την ιδιότητα αυτού που άρχισε το συγκεκριμένα θέμα, εκφράζω την γνώμη ότι αυτή η κουβέντα έπρεπε να είχε κλείσει στο 15ο μήνυμα!

Ακούστηκαν οι διαφορετικές απόψεις και προσπάθησα να καταγράψω εκεί ένα συμπέρασμα με λίγο φιλοσοφικό-ποιητικό τρόπο (που μου άρεσε έτσι καλύτερα και σαν εκπαιδευτικός που θέλω να αυτοχαρακτηρίζομαι). Ήμουν σχεδόν σίγουρος ότι θα ακολουθούσαν κι άλλα μηνύματα αλλά είχα αποφασίσει να μην συνεχίσω κι εγώ.

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

Έτσι αποφάσισα να δώσω λίγο χρόνο ώστε να καταγράψω κάποια πράγματα με περισσότερο τεχνοκρατικό τρόπο (που δεν μου αρέσει πάντα!).

Λόγω έκτασης, θα ακολουθήσουν λοιπόν άλλα 2 μηνύματα κάπως μεγάλα...

Νίκος Αδαμόπουλος

#22
Σε αυτό το μήνυμα κάποιοι σχολιασμοί και λεπτομέρειες:

Παράθεση από: Καρκαμάνης Γεώργιος στις 17 Φεβ 2009, 01:39:54 ΠΜ
Γιώργο το αποδέχομαι για την απλούστευση των περιπτώσεων.
Νομίζω πως όλοι έχουμε κατασταλάξει ότι για βήμα μηδέν υπάρχει ατέρμων βρόχος.

Το ότι το αποδεχόμαστε (κατά τη διδασκαλία) και για τις 2 περιπτώσεις (1η:  βήμα 0 και αρχική <= τελική, 2η: βήμα 0 και αρχική > τελική) ενώ το βιβλίο το αναφέρει με σαφήνεια μόνο για τη μια (και θα εξηγήσω στο επόμενο μήνυμα γιατί το λέω αυτό!), πιθανώς να το κάνουμε όλοι για λόγους απλούστευσης ή και γιατί δεν είναι σκόπιμο να ζαλίζουμε τα παιδάκια, ούτε και ηθικό να προσπαθούμε να τους κάνουμε τους έξυπνους...

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

Επίσης, αναφέρθηκε:

Παράθεση από: Καρκαμάνης Γεώργιος στις 17 Φεβ 2009, 01:39:54 ΠΜ
Παραθέτω την δική μου απόδειξη η οποία δεν είναι κομψή αλλά μπορεί να βοηθήσει έναν μαθητή να καταλάβει :

Αν η αρχική τιμή <= τελική τιμή και το βήμα μηδέν
τότε μπαίνουμε μέσα στο βρόχο αλλά δεν αυξάνεται ποτέ η τιμή του μετρητή με αποτέλεσμα να μην μπορεί να ξεπεράσει ποτέ την τελική τιμή για να τερματίσει

Αν η αρχική τιμή >= τελική τιμή και το βήμα μηδέν
τότε μπαίνουμε μέσα στο βρόχο αλλά δεν μειώνεται ποτέ η τιμή του μετρητή με αποτέλεσμα να μην ξεπεράσει ποτέ την τελική τιμή για να τερματίσει

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

Επίσης, αναφέρθηκε:

Παράθεση από: Τσιωτάκης Παναγιώτης στις 12 Φεβ 2009, 08:15:31 ΜΜ
Προσωπικά, απο το σχολικό βιβλίο έχω καταλάβει το παρακάτω:

Αν βήμα = 0 τότε  ! πρώτα αυτός ο έλεγχος
  Άπειρες επαναλήψεις
Αλλιώς_αν β >0 τότε
  Αν τελική >= αρχική τότε
     κάποιες επαναλήψεις
  Αλλιώς
     ΚΑΜΙΑ επανάληψη
  Τέλος_αν
Αλλιώς
  Αν τελική <= αρχική τότε
     κάποιες επαναλήψεις
  Αλλιώς
     ΚΑΜΙΑ επανάληψη
  Τέλος_αν
Τέλος_αν

και οφείλω να πω οτι είναι ιδιαίτερα απλός αλγόριθμος

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

Παράθεση από: Καρκαμάνης Γεώργιος στις 16 Φεβ 2009, 01:54:00 ΠΜ
Νομίζω ότι ο αλγόριθμος που ανέπτυξε ο Παναγιώτης για την εντολή ΓΙΑ καλύπτει όλες τις περιπτώσεις.

Μα όλες οι διαφορετικές εικασίες καλύπτουν όλες τις περιπτώσεις! Ωστόσο, πώς θα διαλέξουμε κάποια;

Με την ευκαιρία: Δεν μπορούμε να το αποκαλούμε "αλγόριθμο"! Δεν γίνεται σε έναν αλγόριθμο να βάζουμε άπειρες επαναλήψεις με την έννοια ότι το κάνουμε σκόπιμα. Εκτός κι αν το εννοούμε σαν "τρόπο_ανάλυσης_λειτουργίας_της_Για_σε_αλγοριθμική _μορφή_για_λόγους_συντομίας".

Με τη λογική λοιπόν ότι αυτά είναι εικασίες, εξηγείται και γιατί ο gpapargi λέει:

Παράθεση από: gpapargi στις 13 Φεβ 2009, 08:43:49 ΠΜ
Παναγιώτη το ότι έχουμε άπειρες επαναλήψεις αν το βήμα είναι 0 δεν πρέπει να το δεχόμαστε σαν αξίωμα. Είναι κάτι που πρέπει να προκύψει... Ας μου επιτραπεί η έκφραση… "δεν είναι αξίωμα, είναι θεώρημα"

Διαφωνώ κάθετα με το:

Παράθεση από: Καρκαμάνης Γεώργιος στις 17 Φεβ 2009, 01:39:54 ΠΜ
....μπορεί να βοηθήσει έναν μαθητή να καταλάβει :

Γιατί να είναι καλύτερο να καταλάβει ο μαθητής κάτι για το οποίο υπάρχει ασάφεια και δεν είμαστε καν σίγουροι; Εγώ συνήθως προσπερνάω τη δεύτερη περίπτωση (για βήμα 0 και αρχική > τελική), ενώ κάποιες λίγες φορές αφού οι μαθητές με ρώτησαν σχετικά, τους είπα: "ξέρετε η περίπτωση αυτή στο βιβλίο δεν αναφέρεται με σαφήνεια και μπράβο σας που το σκεφτήκατε! - όντως μπορεί να ισχύει ότι θα γίνουν άπειρες επαναλήψεις αλλά μπορεί να ισχύει και το ότι θα γίνουν 0 επαναλήψεις - ωστόσο επειδή πάνω σε αυτό πιστεύω και ελπίζω ότι δεν θα πέσει τίποτα στις εξετάσεις ας περιοριστούμε σε αυτά που λέει το βιβλίο για να είμαστε καλυμμένοι!". Δεν είναι περισσότερο τίμιο και παιδαγωγικό αυτό; Δηλαδή φοβόμαστε να πούμε στα παιδιά ότι δεν είναι όλα τέλεια;

Παράθεση από: Τσιωτάκης Παναγιώτης στις 17 Φεβ 2009, 10:18:32 ΠΜ
για τη διδασκαλία της αλγοριθμικής σκέψης στους μαθητές μου, μου φτάνουν αυτά

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

Και μόνο που υπάρχει αυτή η συζήτηση, αυτό δείχνει (προσέξτε: δεν λέω αποδεικνύει - είναι βαριά κουβέντα το "αποδεικνύει"!) ότι όντως υφίσταται η συγκεκριμένη ασάφεια...

Μη βιαστείτε να απαντήσετε σε αυτό το μήνυμα... Θα ακολουθήσει κι άλλο...

Νίκος Αδαμόπουλος

#23
Τελικό μήνυμα: (συγγνώμη για την έκταση και τον χρόνο σας – όποιος αντέξει! )

(σε συνέχεια του προηγούμενου...)

Επειδή δεν έχει γίνει από όλους αντιληπτή η αιτία των διαφωνιών και πολλοί πιστεύουν πως δεν υπάρχει καν θέμα προβληματισμού, ας καταγράψουμε πιο ξεκάθαρα τις 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!!!

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

evry


Άσκηση 1ου εξαμήνου!!!! στο τμήμα πληροφορικής του ΕΚΠΑ

http://cgi.di.uoa.gr/~ip/iphw0809_5.pdf

και μετά καθόμαστε και ασχολούμαστε για το μηδενικό βήμα της Για.

Απλά ξέρετε ποια είναι η απορία μου ρε παιδιά? Αφού ξέρουν ότι η Για δεν ορίζεται καλά ειδικά με βήμα 0, αφού ξέρουν ότι η ισοδυναμία αλγορίθμων δεν είναι καλά ορισμένη γιατί τα βάζουν στις εξετάσεις?  ???
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

Παράθεση από: evry στις 18 Φεβ 2009, 03:50:36 ΜΜ
Απλά ξέρετε ποια είναι η απορία μου ρε παιδιά? Αφού ξέρουν ότι η Για δεν ορίζεται καλά ειδικά με βήμα 0, αφού ξέρουν ότι η ισοδυναμία αλγορίθμων δεν είναι καλά ορισμένη γιατί τα βάζουν στις εξετάσεις?  ???

Εντάξει ρε συ... αν δεν μου έχει ξεφύγει κάτι νομίζω η μόνη φορά ήταν το 2001:

------------------------------
Δίνεται η δο΅ή επανάληψης.

Για i από τι΅ή1 ΅έχρι τι΅ή2 ΅ε_βή΅α β
  Εντολές
Τέλος_επανάληψης

Να ΅ετατρέψετε την παραπάνω δο΅ή σε ισοδύνα΅η δο΅ή επανάληψης Όσο...επανάλαβε.

-----------------------------

Πιθανή λύση:


i <- τι΅ή1
Αν β > 0 τότε
  Όσο i ≤ τιμή2 επανάλαβε
    Εντολές
    i <-i + β
  Τέλος_επανάληψης
αλλιώς
  Όσο i ≥ τιμή2 επανάλαβε
    Εντολές
    i <-i + β
  Τέλος_επανάληψης
Τέλος_αν

Να σημειώσουμε πως θεωρούμε ότι το β δεν μπορεί να είναι 0 γιατί τότε η εκφώνηση θα είχε πρόβλημα περατότητας.

------------------------------------

Και τελειώσαμε... Δεν νομίζω ότι ήταν στο πνεύμα του θέματος να εξετάσουμε το β=0....

evry


Νομίζω ότι το 2005 είχαν δώσει στο θέμα 1 πάλι μια δομή Για με βήμα 0 ενώ αρκετοί λένε ότι δε μπορούμε να έχουμε βήμα 0 στη Για. Για να το δώσουν προφανώς το θώρησαν σωστό απλά έπρεπε να πεις ότι παραβιάζει το κριτήριο της περατότητας. Είναι όμως σαν να παραδέχονται ότι μπορείς να χρησιμοποιήσεις τη δομή Για με βήμα 0.

Αλλά και γενικότερα αυτό με τις ισοδύναμες δομές επανάληψης δεν νομίζω ότι στέκεται πολύ καλά από θέμα αυστηρότητας
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Νίκος Αδαμόπουλος

#27
Παράθεση από: evry στις 18 Φεβ 2009, 06:27:02 ΜΜ
Νομίζω ότι το 2005 είχαν δώσει στο θέμα 1 πάλι μια δομή Για με βήμα 0 ....

Ναι! Ήταν το:

Ποιο κριτήριο δεν ικανοποιεί ο παρακάτω αλγόριθμος και γιατί;
S←0
Για Ι από 2 μέχρι 10 με_βήμα 0
  S←S+I
Τέλος_επανάληψης
Εμφάνισε S

(Μονάδες 5)

Όμως αυτό δεν νομίζω να προβλημάτισε κανέναν...