1ο θέμα Όσο<-->Για

Ξεκίνησε από evry, 06 Ιουν 2007, 12:38:55 ΠΜ

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

gpapargi

Δεν τα διδάσκω johnny, τα είπαμε αυτά. Διδάσκω σαφώς την αποφυγή τους και έκανα και σαματά για το θέμα της goto που εξετάστηκε.  Το ερώτημα ήταν "αν είναι δυνατό να γίνει" και όχι "αν πρέπει να γίνεται" ή αν πρέπει να τα διδάσκουμε. Δες από την αρχή τις τοποθετήσεις μου στο συγκεκριμένο θέμα. Ο Ευριπίδης αναρωτήθηκε γιατί αυτοί που απάντησαν ότι γίνεται είναι καλοί και σκεπτόμενοι μαθητές.

johnny_xp

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

alkisg

Παράθεση από: johnny_xp στις 07 Ιουν 2007, 10:46:40 ΠΜ
...όλες οι πολύ γνωστές γλώσσες προγραμματισμού υποστηρίζουν κάποια εντολή μορφής goto ή break (ή exit για την Basic). Ωστόσο, είναι κοινή άποψη πλέον ότι οι εντολές αυτές πρέπει να εξαλειφθούν. ... Επίσης ας αναφέρω ότι η γλώσσα προγραμματισμού Eiffel, η οποία είναι πολύ σύγχρονη και έχει ως σκοπό να εξαλείψει πολλές “ασθένειες” τέτοιας μορφής δεν υποστηρίζει καν αδόμητες διακλαδώσεις κώδικα.

Μιας και είμαστε στο θέμα, ας πούμε και την αντίθετη γνώμη:
Δεν είναι κοινή άποψη ότι οι εντολές τύπου goto πρέπει να εξαλειφθούν.
Οι break, continue, οι return στη μέση των συναρτήσεων, ο χειρισμός exceptions, η retry της Eiffel αλλά και μερικές περιπτώσεις χρήσης της goto είναι σχεδόν γενικά αποδεκτές.

Εκτός από το κλασσικό paper του Knuth υπέρ της (προσεγμένης) χρήσης της goto, το παρακάτω link τα γράφει πολύ εμπεριστατωμένα, σχολιάζοντας μάλιστα και το αρχικό κείμενο του Dijkstra που θεωρείται η "βίβλος κατά του goto":
http://david.tribble.com/text/goto.html

Και μου άρεσε ο παρακάτω κώδικας που παραθέτει από έναν LR parser, που πραγματικά με goto είναι πιο ευκολοδιάβαστος παρά χωρίς goto:
Κώδικας: C
int parse()
{
    Token   tok;

reading:
    tok = gettoken();
    if (tok == END)
        return ACCEPT;
shifting:
    if (shift(tok))
        goto reading;
reducing:
    if (reduce(tok))
        goto shifting;
    return ERROR;
}


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

P.Tsiotakis


Τετράδιο μαθητή: Συμβουλές – Υποδείξεις (υπόδειξη σημαίνει να το κάνεις έτσι)

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

Σελ. 78
- Η εντολή ΓΙΑ χρησιμοποιείται μόνο για προκαθορισμένο αριθμό επαναλήψεων. Αν λοιπόν ξέρεις τον αριθμό των επαναλήψεων ή μπορείς να τον υπολογίσεις, τότε να χρησιμοποιείς την εντολή ΓΙΑ.
- Ποτέ μη χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τη μεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα. ΛΕΕΙ ΟΤΙ ΤΟ ΕΠΙΤΡΕΠΕΙ Η ΓΛΩΣΣΑ;; Λέει οτι επιτρέπεται στα πλαίσια του μαθήματός μας;


Βιβλίο καθηγητή:
Σελ 50 -  10. Η δομή «Για μεταβλητή από τ1 μέχρι τ2 με_βήμα β» αποτελεί ένα επαναληπτικό σχήμα ορισμένων φορών επανάληψης.

Σελ. 69 - ... Ωστόσο αν ο αριθμός των φορών επανάληψης είναι γνωστός εκ των προτέρων, είναι προτιμότερο να χρησιμοποιείται η δομή Για.

Σελ. 170 - διδακτικός στόχος 8ου κεφαλαίου: Να επιλέγουν την καλύτερη δομή επανάληψης και να χρησιμοποιούν την κατάλληλη εντολή.


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

Σελ 173 – Η ΓΛΩΣΣΑ υποστηρίζει 3 εντολές επανάληψης...η εντολή ΓΙΑ , με την οποία ο βρόχος επαναλαμβάνεται για προκαθορισμένο αριθμό φορών.

Σελ 178 – Πολλές φορές ο αριθμός των επαναλήψεων που πρέπει να εκτελεστούν είναι γνωστός από την αρχή. Αν και αυτού του είδους οι επαναλήψεις μπορούν να αντιμετωπιστούν με τη χρήση των ΌΣΟ και ΜΕΧΡΙΣ_ΟΤΟΥ, η ΓΛΩΣΣΑ διαθέτει και την εντολή ΓΙΑ.
Στη συμβουλή αριστερά γράφει για προκαθορισμένο αριθμό επαναλήψεων.

Σελ 179 - στη συμβουλή δεξιά: Κάθε επανάληψη που εκτελείται με μια εντολή ΓΙΑ, μπορεί να υλοποιηθεί και με τη χρήση ΌΣΟ και ΜΕΧΡΙΣ_ΟΤΟΥ.
Το ανάποδο δεν αναφέρεται πουθενά.

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

Σελ 121 - Υπάρχει η εντολή "έξοδος από βρόχο", αλλά δεν τολμάει να αλλάξει την τιμή του μετρητή για να το πετύχει.

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



Και σε τελική ανάλυση ΓΙΑΤΙ πρέπει να συζητάμε κάτι τέτοιο. Η ενόχλησή μου είναι οτι 5 χρόνια παλεύω για μια κοινή αντιμετώπιση κάποιων θεμάτω στο μάθημα αυτό και νομίζω οτι η ελικοειδής προσέγγιση ταιριάζει σε μας : είμαστε στο σημείο που αρχίσαμε.

Αν στους μαθητές τεθεί το πλαίσιο χρήσης των 3 δομών επανάληψης όπως περιγράφεται στο διδακτικό πακέτο στις σελίδες που παρουσίασα, που είναι το πρόβλημα και οι ασάφειες;
Για να επιτευχθεί αυτό πρέπει να ξεφύγουμε όλοι από τις γλώσσες προγραμματισμού. Μιλάμε για την αλγοριθμική και την ψευδογλώσσα εδώ, σε ένα μάθημα λυκείου ΜΕ ΣΥΓΚΕΚΡΙΜΕΝΟ ΠΛΑΙΣΙΟ : πρόγραμμα σπουδών...

@ pgrontas τα σέβη είναι για τους μητροπολίτες...  :)

pgrontas

#19
Τελευταίο post από μένα σε αυτό το θέμα, γιατί όντως παρατράβηξε χωρίς να βγει άκρη.

@ptsiotakis To post σου ήταν εκτενέστατο, αλλά δεν προσέθεσε κάτι.
Σημειώνω λέξεις: προτιμότερο, συμβουλή, υπόδειξη, δεν τολμάει. Δεν δείχνουν απουσία δυνατότητας. Δείχνουν προτροπή.

Το ΠΟΤΕ ... για μένα σημαίνει ότι μπορείς να κάνεις κάτι, αλλά μην το κάνεις γιατί είναι λάθος, απαγόρευση όπως σωστά είπες. Απαγορεύεις κάτι ακριβώς επειδή είναι δυνατό, γιατί αν δεν ήταν δυνατό ποιο νόημα θα είχε η απαγόρευση;

Συμφωνώ με όλα όσα έγραψες αλλά δεν θα μπορούσαν να ρωτήσουν αν η δομή ΟΣΟ συνίσταται να μετατρέπεται σε ΓΙΑ, να τελειώνουν? Γιατί προσπαθούν να μπερδέψουν κάποια παιδιά - γιατί η συγκεκριμένη διατύπωση δεν προσφέρεται για κάτι άλλο. Η' γιατί ζητούν μονολεκτική απάντηση;

Επιπλέον όλα αυτό το θέμα δεν σχετίζεται με καμία γλώσσα προγραμματισμού γιατί αφορά ψευδογλώσσα και την ΔΟΜΗ της ΕΠΑΝΑΛΗΨΗΣ που υπάρχει ανεξάρτητα από την υλοποίηση της. Ήταν λάθος που ανέφερα συγκεκριμένες γλώσσες.

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


Με φιλικούς χαιρετισμούς
Π. Γροντάς

ΥΓ: Τα σέβη είναι για την ιδιότητα του αρχιερέα της ΑΕΠΠ (χωρίς να θέλω να προσβάλλω τους υπόλοιπους)  ;D

Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

P.Tsiotakis

Αγαπητό μου τέκνον    :)   Π(αναγιώτη;)

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

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

Η Για που σπάει πάντως δε εκτελεί προκαθορισμένο αριθμό επαναλήψεων  :-[


filippos

Ακόμα και δω ασάφεια βρήκαμε;;

Έλεος ρε παιδιά :(

gpapargi

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

Για ι από 1 μέχρι 2 με_βήμα 0 ! ατέρμνων βρόχος
  Αν συνθήκη τότε
    πήγαινε έξω από το βρόχο
  Τέλος_αν
Τέλος_επανάληψης

Σου λέει λοιπόν το παιδί ότι είναι δυνατό να γίνει γιατί το έκανα παραπάνω. Πως θα του πεις ότι δε γίνεται; Το μόνο που μπορείς να του πεις είναι ότι δεν πρέπει να γίνεται γιατί είναι κακή τεχνική. Αν του δείξεις τα αποσπάσματα μέσα από το βιβλίο θα σου πει: «Εγώ το έκανα, το βιβλίο εννοεί ότι δεν πρέπει να γίνεται».

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

gouvasg

Παράθεση από: gpapargi στις 12 Ιουν 2007, 10:10:17 ΠΜ
Είμαστε κλάδος θετικών επιστημών. Αυτά που λέμε πρέπει να έχουν συνέπεια. Αν το βιβλίο λέει ότι κάτι δε γίνεται αλλά κάποιος καταφέρνει και το κάνει, σημαίνει είτε ότι το βιβλίο κάνει λάθος, είτε δεν καταλάβαμε τι ακριβώς εννοεί το βιβλίο. Εδώ εγώ πιστεύω ότι ισχύει το δεύτερο. 


η αλήθεια είναι οτι φέτος μετά τις πανελλήνιες άρχισα να αισθάνομαι και λίγο θεολόγος... :)
Γεώργιος Γκούβας
Μηχ. Η/Υ-Σ
www.gouvas.eu

EleniK

@gouvasg
Γιατί το λες αυτό ???

Αν εξαιρέσουμε το 1ο θέμα (και συγκεκρικένα το 1Γ και το Σ-Λ με τη συνάρτηση και το διάβασμα) τα υπόλοιπα θέματα ήταν μια χαρά. Το 2ο έξυπνο, μη αναμενόμενο, σχετικά απλό. Το 3ο πολύ ωραίο θέμα !!! Το 4ο είναι το αναμενόμενο θέμα των πινάκων αλλά καλά συνδυασμένο με δομές επιλογές για να μην εχουμε του κλασικούς τυφλοσούρτες. Βατό. Λογική η δυσκολία των θεμάτων στο σύνολό τους.

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

Καλώς λοιπόν υπάρχουν οι κριτικές αλλά ας μην απαξιώνουμε τα πάντα.

Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19