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

Ξεκίνησε από gpapargi, 09 Φεβ 2010, 01:27:57 ΜΜ

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

Στη δομή Για ... από ... μέχρι

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

gpapargi

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

Μερικά θέματα προς συζήτηση είναι τα εξής:

Πρέπει να είναι το ίδιο αυτό που συμβαίνει σε ψευδογλώσσα και αυτό που συμβαίνει σε ΓΛΩΣΣΑ ή μπορεί να συμβαίνει και κάτι διαφορετικό;

Ποιο είναι ακριβώς αυτό που πρέπει να συμβαίνει;

gpapargi

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

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

sstergou

Συμφωνώ ότι πρέπει να είναι το ίδιο σε γλώσσα και ψευδογλώσσα.
Προτείνω η συνθήκη να είναι <= για βήμα  μεγαλύτερο ή ίσο του 0 και >= για αρνητικό βήμα.

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


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

Και εγώ προς κάτι τέτοιο κλίνω, και επιχειρηματολογώ:

1. Από πέρυσι ( https://alkisg.mysch.gr/steki/index.php?topic=1797.msg13024#msg13024 ) είχα προσπαθήσει να αναλύσω και να καταγράψω όλες τις υποψήφιες μετατροπές σε Όσο (εικασία 1, 2 και 3). Παρόλο που μπορεί κάποιος να ισχυριστεί ότι ίσως είναι λάθος να θέλουμε ντε και καλά να βρούμε το ισοδύναμο της Για σε Όσο, ωστόσο η ιστορία δείχνει ότι αν δεν το κάνουμε θα το έχουμε συνέχεια μπροστά μας. Το ίδιο το βιβλίο και οι εκάστοτε θεματοδότες μάς ωθούν προς κάτι τέτοιο. Τότε λοιπόν είχα καταλήξει - δεν επαναλαμβάνω εδώ τα επιχειρήματα - στη μετατροπή (εικασία 3):

Για ι από α μέχρι τ με_βήμα β
   <εντολές>
Τέλος_επανάληψης

ι<-α
Αν β>=0 τότε
   Όσο ι<=τ επανάλαβε
     <εντολές>
     ι<-ι+β
   Τέλος_επανάληψης
αλλιώς
   Όσο ι>=τ επανάλαβε
     <εντολές>
     ι<-ι+β
   Τέλος_επανάληψης
Τέλος_αν

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

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

4. Αν θέλουμε συμμετρία, προτείνω την εικασία 1 ή 2 από τις παραπάνω. Όμως η πρώτη δεν είναι κομψή στη διατύπωσή της αφού είναι αρκετά πολύπλοκη μόνο και μόνο για να προκαλέσει με το ζόρι άπειρες επαναλήψεις σε όλες τις περιπτώσεις όπου το βήμα είναι 0. Τη δεύτερη μάλλον δεν θα την ήθελε κανένας μας!

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

Σε κάθε περίπτωση αν εμείς δεν μπορούμε να καταλήξουμε στο τι προτιμάμε και τι προτείνουμε, τότε ας μη ζητάμε από τους συγγραφείς να μας δείξουν πώς γίνεται η μετατροπή γιατί δεν πρόκειται να γίνει. Αν περιμένουμε το αντίθετο τότε μάλλον κοροϊδεύουμε τους εαυτούς μας! Στο κάτω κάτω την αλγοριθμική σκέψη μπορούμε να την αναπτύξουμε ακόμα και με την παρουσία της συγκεκριμένης ασάφειας!!! Δεν χάλασε κι ο κόσμος! Διδασκαλία κάνουμε, δεν γράφουμε τον κώδικα του λογισμικού ελέγχου πυρηνικού αντιδραστήρα!

alkisg

Τι περιμένουμε να εμφανίσει το παρακάτω πρόγραμμα;
ΠΡΟΓΡΑΜΜΑ Ασάφεια
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ι
ΑΡΧΗ
  ι <- 1
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ ι
    ΓΡΑΨΕ ι
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Δεν είμαι σίγουρος ότι το διδακτικό ζητούμενο είναι μια εύληπτη μετατροπή σε ΟΣΟ. Ίσως είναι πιο σημαντική η εύληπτη *λειτουργία* της ΓΙΑ... αυτό δηλαδή που λέει το βιβλίο ότι απαγορεύεται η αλλαγή της τελικής τιμής και του βήματος μέσα στη ΓΙΑ, να αποτελεί μέρος του ορισμού της (όπως είναι και στην Pascal), και όχι απλή συμβουλή.
Δηλαδή, να συμπεριλαμβάνεται στον ορισμό της ΓΙΑ η φράση «η αρχική τιμή, η τελική τιμή και το βήμα αποτιμούνται μόνο μια φορά πριν την εκτέλεση της ΓΙΑ. Όχι σε κάθε επανάληψη».

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

Παράθεση από: alkisg στις 10 Φεβ 2010, 08:44:24 ΠΜ
Ίσως είναι πιο σημαντική η εύληπτη *λειτουργία* της ΓΙΑ... αυτό δηλαδή που λέει το βιβλίο ότι απαγορεύεται η αλλαγή της τελικής τιμής και του βήματος μέσα στη ΓΙΑ, να αποτελεί μέρος του ορισμού της (όπως είναι και στην Pascal), και όχι απλή συμβουλή.
Δηλαδή, να συμπεριλαμβάνεται στον ορισμό της ΓΙΑ η φράση «η αρχική τιμή, η τελική τιμή και το βήμα αποτιμούνται μόνο μια φορά πριν την εκτέλεση της ΓΙΑ. Όχι σε κάθε επανάληψη».

... δεν διαφωνώ. Και όχι μόνο στην Pascal! Ακόμα και στην VB ορίζεται ότι:

Number of Iterations. Visual Basic evaluates the iteration values start, end, and step only once, before the loop begins. If your statement block changes end or step, these changes do not affect the iteration of the loop.

evry

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

   Για ι από 4 μέχρι 5 με βήμα -1

και η απάντησή τους ήταν ότι κάνει άπειρες επαναλήψεις διότι ξεκινάμε από το 4 και θέλουμε να φτάσουμε στο 5, για αυτό έχουν στο μυαλό τους το <= και όχι το >=. Οπότε αν μειώνουμε κάθε φορά κατά -1 πάμε στο -άπειρο.
   Αν ανακατασκευάσουμε την Για θα πρέπει να το κάνουμε με έναν τρόπο που να είναι πιο κοντά στη λογική του μαθητή και να μπορεί να διδαχθεί εύκολα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

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

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

evry

ναι ρε οκ, δεν διαφωνώ απλά αυτή η αλλαγή της συνθήκης με βάση το πρόσημο του βήματος εδώ μου κάθεται >:(
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Σπύρος Δουκάκης

Άρα αν κατάλαβα προτείνουμε:
1.
Κατά την πρώτη εκτέλεση της εντολής Για i από τ1 μέχρι τ2 με_βήμα β, συμβαίνουν τα ακόλουθα:
Εκχώρηση της αρχικής τιμής τ1 στη μεταβλητή i
Έλεγχος του πρόσημου του βήματος β
Σύγκριση της μεταβλητής i με την τελική τιμή τ2
Εκτέλεση των εντολών της επανάληψης (αν επιτρέπεται)

Πότε δεν εκτελείται η Για;
Όταν τ1 > τ2 και β > 0
Όταν τ1 < τ2 και β < 0

2.
Αν το βήμα είναι μηδέν τότε
α) Άπειρες φορές στην περίπτωση που τ1 <= τ2
β) Καμία φορά στην περίπτωση που τ1 >= τ2

Γιατί να μην πούμε απλά ότι
* αν το βήμα είναι μηδέν είναι λάθος και δεν εκτελείται ή
* δεν μπορεί να έχει βήμα μηδέν η Για;
Ώστε να μην μπλέκουμε τα παιδιά με κάτι που δεν έχει και τόσο νόημα;

3.
Δεν επιτρέπεται αλλαγή των: αρχική τιμή, τελική τιμή και βήμα κατά την εκέτλεση. Αυτές αποτιμούνται μόνο μια φορά πριν την εκτέλεση της ΓΙΑ. Άρα αλλαγή σημαίνει λάθος

Ερωτήσεις:

α) Υπάρχει η εντολή Έξοδος στη Για;
β) Το ΔΡ της Για είναι της Όσο ή φτιάχνουμε ένα ειδικό ΔΡ;

sstergou

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

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

Θα πω όμως 2-3 πράγματα για την αποτίμηση των τιμών μια φορά πριν την έναρξη της επανάληψης.
1. Σε τι θα ωφελήσει αυτό; Μπορεί να αξιοποιηθεί παιδαγωγικά ή θα είναι άλλος ένας κανόνας;
2. Αν μαθητής γράψει τέτοιο κώδικα σαν αυτόν που έγράψε ο Άλκης τι θα περιμένει να γίνει; Τι είναι πιο διαισθητικό;
3. Οι τιμές υπολογίζονται μια φορά για να αποφύγουμε μεταβλητό αριθμό επαναλήψεων. Αυτό σημαίνει ότι θα πρέπει να απαγορεύσουμε και την αλλαγή του μετρητή μέσα στην επανάληψη;

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

Με λίγα λόγια λέω : "Όσο το δυνατόν λιγότεροι κανόνες, η κατανόηση των δομών πρέπει να είναι διαισθητική"

sstergou

Παράθεση από: sdoukakis στις 10 Φεβ 2010, 02:04:26 ΜΜ
α) Υπάρχει η εντολή Έξοδος στη Για;

Ναι, εδώ υπάρχει η GOTO ! Χεχε, αστειεύομαι, δεν βλέπω κανένα νόημα σε αυτή την εντολή στα πλαίσια του μαθήματός μας.

gpapargi

 Ο λόγος που φαίνεται πιο λογικό στους μαθητές  η Για ι από 1 μέχρι 10 με_βημα -1 να κάνει άπειρες επαναλήψεις είναι ότι υποσυνείδητα τη μετατρέπουν σε Μεχρις_οτου και όχι σε Όσο. Και εμένα αυτό μου φαίνεται πιο λογικό. Ωστόσο καλώς ή κακώς το βιβλίο τη θεώρει ισοδύναμη της Όσο. Οπότε νομίζω ότι αυτό πρέπει να το θεωρήσουμε δεδομένο. Διαφορετικά ξεμακραίνουμε από το βιβλίο και πάμε για όχι για διορθώσεις αλλά για εξ' αρχής δημιουργία βιβλίου. Νομίζω πως το σκεπτικό μας πρέπει να είναι να μείνουμε όσο γίνεται πιο κοντά στο βιβλίο και να διορθώσουμε μόνο ασαφή σημεία δηλαδή να κάνουμε τις ελάχιστες απολύτως αναγκαίες αλλαγές.

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

gpapargi

Παράθεση από: sstergou στις 09 Φεβ 2010, 07:57:08 ΜΜ
Το αν η συνθήκη δίνει άπειρες ή καμία επαναλήψεις δεν είναι κάτι που πρέπει να ξέρουμε εκ των προτέρων αλλά κάτι που προκύπτει από την μετατροπή.

Αυτό για μένα είναι το σημαντικότερο όλων. Ξέρουμε ότι το "Για ι από 1 μέχρι 5 με βήμα -1" δεν εκτελεί καμία επανάληψη. Αλλά αυτό δεν είναι κάτι που το δεχόμαστε επειδή λέει το βιβλίο. Είναι κάτι που προκύπτει από τη μετατροπή σε Όσο.  Έτσι ακριβώς πρέπει να γίνει και στο βήμα 0.

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

Δεν είναι αξίωμα ότι η Για με βήμα 0 είναι ατέρμων βρόχος. Είναι κάτι που προκύπτει από τη μετατροπή. Είναι... ας πούμε θεώρημα.

sstergou

Μάλλον συμφωνούμε για την μετατροπή σε όσο. Το θέμα είναι αν η αποτίμηση του βήματος, της αρχικής τιμής και της τελικής τιμής γίνεται μια φορά στην αρχή ή όχι. Επίσης ένα θέμα είναι και η αλλαγή του μετρητή μέσα στην Για.
Προσθέτω ψηφοφορία.

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