Μεταβλητή ελέγχου της ΓΙΑ-ΑΠΟ-ΜΕΧΡΙ...

Ξεκίνησε από MIMIS, 12 Δεκ 2006, 07:26:47 ΜΜ

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

MIMIS

Τελικά η μεταβλητή ελέγχου μπορεί να αλλάξει μέσα στη ΓΙΑ;

Στο βιβλίο δε λέει τίποτα νομίζω.
Σε βοήθημα (Σαββ'αλας) λέει οτι απαγορεύεται.
Αλλοι λένε ότι απλά η ΓΙΑ αγνοεί οποιαδήποτε αλλαγή του i και συνεχίζει με τις δικές της τιμές.
Αλλοι λένε ότι συμμετέχει κανονικά και το i αυξάνει κανονικά όταν π.χ
     Για i από 1 μέχρι 10
          i<- i+1
     Tέλος_επαν.
δηλαδή θα εκτελεστεί 5 φορές, αντί για 10.

Η αλήθεια είναι οτι εξαρτάται από τη γλώσσα και τον compiler.
εμείς όμως τι λέμε;
ο καθένας τα δικά του όπως πολλές φορές;

Wizard

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

MIMIS

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

P.Tsiotakis

Με τόσες φήμες και τον καθένα να λέει ό,τι του φαίνεται καλύτερο ή ό,τι θα ήθελε να συμβαίνει δεν πρέπει να μπει μια σειρά με βάση την απλότητα, το συμφέρον του μαθητή (αυτός δίνει εξετάσεις) και κυρίως τους στόχους του μαθήματος;

Στο βιβλίο μου στη σελίδα 185, αναφέρω: "...δεν πρέπει να τροποποιούμε εντός του βρόχου την τιμή του μετρητή.... γιατί σε αυτήν την περίπτωση οδηγούμαστε σε δυσνόητους....".
Στο βιβλίο καθηγητή, στη σελίδα 78 αναφέρει: "Ποτέ μη χρησιμοποιείς εντολές που αλλάζουν ...τη μεταβλητή που ελέγχει την επανάληψη...γιατί οδηγούν σε προγράμματα δυσνότητα...".

Το βιβλίο καθηγητή είναι πιο "αυστηρό" από αυτά που γράφω εγώ  (ποτέ > δεν πρέπει)

Γιατί λοιπόν κάποιος καθηγητής να γράψει το παρακάτω;
   Για i από 1 μέχρι 10
      i <- i+1
   Tέλος_επανάληψης

Ξέρει κανείς την απάντηση;

Με εκτίμηση,

Τσιωτάκης Παναγιώτης

johnny_xp

Και πάλι ανοίγουμε ένα θέμα το οποίο δεν υπάρχει... Υπάρχουν γλώσσες προγραμματισμού στις οποίες επιτρέπεται η αλλαγή του μετρητή και άλλες στις οποίες δεν επιτρέπεται. Αλλά και πάλι σε αυτές στις οποίες επιτρέπετε δεν συνίσταται. Το θέμα είναι πολύ απλό και δεν χρειάζεται να το περιπλέκουμε: αν υφίσταται η ανάγκη εντός του βρόχου ΓΙΑ να αλλάξεις τον μετρητή, τότε κακώς έγραψες βρόχο ΓΙΑ. Αυτό είναι το ουσιώδες και αυτό πρέπει να καταλάβουν οι μαθητές. Άλωστε όλοι μας τους λέμε να χρησιμοποιύν ΓΙΑ όταν ξέρουν εκ των προτέρων πόσες επαναλήψεις θέλουν. Αλλάζωντας την τιμή του μετρητή καταστρατηγείς αυτό.
Τα υπόλοιπα αποτελούν ερωτήσεις-τρικ στις οποίες, γενικά, δεν υφίσταται μονοσήμαντη απάντηση.

P.Tsiotakis


Δε θα μπορούσα να συμφωνήσω περισσότερο με την προηγούμενη απάντηση...

Με την παρατήρηση οτι σε αυτό το forum που αναφέρεται στο μάθημα της Γ Λυκείου, δεν χρειάζεται η συζήτηση για τις γλώσσες προγραμματισμού.

Γιατί λοιπόν, να ασχολούμαστε με ερωτήσεις τρικ και σπαζοκεφαλιές; Για να μας βλέπουν οι μαθητές μας ως "μικρούς θεούς";

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

Με εκτίμηση,

Τσιωτάκης Παναγιώτης

MIMIS

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

johnny_xp

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

P.Tsiotakis


Μα αυτό είναι ακριβώς το θέμα. Ότι ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ να έχει πλήρες σύνολο η ΓΛΩΣΣΑ.
Κι αυτό γιατί δεν είναι πραγματική γλώσσα προγραμματισμού. Και δεν χρησιμοποιείται για την διδασκαλία προγραμματισμού.

Τα περίεργα και πονηρά, τα σκεφτόμαστε και τα προκαλούμε εμείς..

Την αναφορά στο τετράδιο μαθητή (σελ 78) την πρωτοανέφερε ο @wizard...

Με εκτίμηση,

Τσιωτάκης Παναγιώτης

gpapargi

Καλημέρα

Όντως αυτά λέει το σχολικό βιβλίο, αλλά για μένα θα πρέπει να εξηγούμε και το λόγο για τον οποίο συμβαίνει κάτι πέρα από το να παραπέμπουμε σε αυτό. Είχε θέσει αυτό το ερώτημα παλαιότερα ένας μαθητής και προσπάθησα τότε να δώσω μια απάντηση.
Είναι το ερώτημα 3 στη σελίδα
https://alkisg.mysch.gr/steki/index.php?topic=286.0

και έδωσα μια απάντηση επικαλούμενος τις αρχές και τη φιλοσοφία του προγραμματισμού που ξεφεύγει από το «ότι δίνει σωστό αποτέλεσμα μας κάνει».

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

Από ότι καταλαβαίνω οι μαθητές που χρησιμοποιούν αυτή τη λύση θέλουν να πουν κάτι σαν αυτό που γράφω παρακάτω

Για ι από 1 μέχρι 100
Εντολές
   Αν συνθήκη τότε
        Τερμάτισε την εντολή «Για»
   Τελος_αν
Τέλος_επανάληψης

Αυτό το «Τερμάτισε την εντολή Για» το πετυχαίνουν με την άστοχη κίνηση της αλλαγής του μετρητή (ι < - 100).

Αυτό μπορεί να αλλάξει. Ξέρουμε ότι η «Για» μετατρέπεται σε «Όσο» τελείως μηχανικά ως εξής:

ι< - 1
Όσο ι <= 100 επανάλαβε
Εντολές
   Αν συνθήκη τότε
        Τερμάτισε την εντολή «Όσο»
   Τελος_αν
ι < - ι+1
Τέλος_επανάληψης

Τώρα αυτό το «Τερμάτισε την εντολή Όσο» γίνεται εύκολα με μια λογική μεταβλητή πχ τερμάτισε < - Αληθής
Φυσικά η συνθήκη της «Όσο» θα πρέπει να συμπληρωθεί με τον έλεγχο της λογικής μεταβλητής έτσι ώστε να τερματίζεται ο βρόχος. Έτσι έχουμε:

τερμάτισε < -  Ψευδής
ι< - 1
Όσο ι <= 100 και τερμάτισε = Ψευδής επανάλαβε
Εντολές
   Αν συνθήκη τότε
        Τερμάτισε < - Αληθής
   Τελος_αν
ι < - ι+1
Τέλος_επανάληψης

Δεν είναι ότι καλύτερο αφού θα μπορούσε ο μαθητής να σκεφτεί διαφορετικά και να γράψει:
Όσο ι<=100 και αντίστροφη_συνθήκη επανάλαβε
…

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

Μου έτυχε φέτος αυτή η κουβέντα στην τάξη. Του έδειξα τα παραπάνω και του σύστησα έντονα να ενσωματώσει τη συνθήκη που θα προκαλέσει διακοπή της «Για» μέσα στον έλεγχο μιας  «Όσο».


Vangelis

Απ΄ότι κατάλαβα το πρόβλημα του MIMIS είναι τι θα γίνει αν πέσει κάτι τέτοιο στις εξετάσεις και όχι κατά πόσο είναι σωστό να το διδάσκουμε έτσι.   Η απάντηση φυσικά σε αυτό είναι ότι αποκλείεται να πέσει τέτοιο θέμα.  Τα θέματα κοσκινίζονται και ξανακοσκινίζονται  απο δέκα πλευρές κάτι τόσο χοντρό δεν περνάει με τίποτα. Αυτοί που βάζουν τα θέματα είναι έμπειροι συνάδελφοι και επιπλέον ελέγχονται απο πανεπιστημιακούς.   
Περίμενα ότι στην δεύτερη παρέμβασή του ο ΜΙΜΙΣ θα έβαζε την παράμετρο αν ο μαθητής  λύσει μια άσκηση με αυτόν τον τρόπο πως θα βαθμολογηθεί.  Εκεί  δεν υπάρχει συμφωνία όλοι θεωρούμε ότι δεν είναι η σωστή αντιμετώπιση της άσκησης αλλά διαφωνούμε στο τι θα κόψουμε από τις μονάδες που παίρνει η άσκηση. 

Sergio

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

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

Θα συμφωνήσω με το Βαγγέλη ότι κάτι σαν αυτό που υπονοεί ο ΜΙΜΙS δεν υπάρχει περίπτωση να ζητηθεί σε εξετάσεις... θα αποτελούσε σαφή παραβίαση των διδακτικών στόχων, της λογικής και του πνεύματος του μαθήματος από την ίδια την επιτροπή.  Και σε όλα τα μέχρι τώρα θέματα η επιτροπή έχει δείξει ότι δεν έχει τέτοιους ... σκοπούς :-)

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

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

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

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

Η έμφαση θα πρέπει μάλλον να δίνεται στην αναγνώριση διαφορών όπως: γνωστός ή μη αριθμός επαναλήψεων / δόμηση μίας συνθήκης συνέχειας / διαφορές στο νόημα και τη χρήση μίας συνθήκης συνέχειας και συνθήκης τερματισμού / αναγνώριση καταστάσεων με ελάχιστο αριθμό επαναλήψεων (μία ή περισσότερες)

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

michalis

Δηλαδή αν ένας μαθητής ψάχνει σε πινακα 100 θέσεων έναν άριθμό πχ το 22 και πρέπει αφού το βρει να τελείωσει το ψάξιμο και γράψει

Για i  απο 1 μέχρι 100
Αν ( Π = 23 ) τότε
i <- 101 !ωστε να ξεπεραστεί το πάνω όριο για να μην γίνει η επανάληψη
τέλος_αν
Τέλος_επανάληψης

πού ειναι το λάθος?? αν του πεις οτι έκανε λάθος θα σου απαντήσει οτι χρησιμοποίησε το Για επειδή ξέρει το πλήθος των επαναλήψεων (εδώ η απαντηση είναι απλή, οτι δεν γνωρίζει μετά απο πόσες επαναλήψεις θα βρει το 23) αλλα αν σου πει οτι αν ισχύει η συνθήκη του Αν αυτό θα έχει ως αποτέλεσμα να εκτελεστεί η εντολή που περιέχεται για i<-101 οποτε το i αλλάζει κ τελείωνει η επανάληψη.

gpapargi

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

Γιατί να μην τερματίσουμε την εντολή «Για» χρησιμοποιώντας μια εντολή goto που θα μας οδηγήσει αμέσως μετά το βρόχο; Γιατί να τερματίζουμε όλους τους βρόχους έτσι; Είναι σίγουρα πιο ευφυές  και πιο δομημένο από το να πειράζεις το μετρητή μιας εντολής που φτιάχτηκε για κάποιο συγκεκριμένο σκοπό.

evry


Μιχάλη  Κατ'αρχήν ο μαθητής δεν ξέρει τον αριθμό των επαναλήψεων που θα εκτελεστούν, ξέρει τον μέγιστο αριθμό επαναλήψεων που θα εκτελεστούν. Έχει διαφορά. Άρα κατ'αρχήν χρησιμοποίησε λάθος δομή επανάληψης όσον αφορά τους διδακτικούς στόχους του μαθήματος όπως παρατήρησε ο Σέργιος.
Το θέμα εκεί είναι πόσο θα κόψεις. Δεν μπορείς σίγουρα να το κόψεις όλο, διότι εκτός του ότι είναι λογικά και επιστημονικά σωστό, δουλεύει κανονικότατα. Κατά τη γνώμη μου θα πρέπει να κόψεις κάτι αλλά όχι πολύ και αυτό εξαρτάται από το θέμα και τη βαρύτητα που έχει στον συνολικό αλγόριθμο.
Επίσης δεν αρκεί να βάλεις i<--101 και το i<--100 μια χαρά κάνει τη δουλειά του.

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

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