Αν...λογική μεταβλητή?

Ξεκίνησε από john81, 08 Δεκ 2009, 10:00:23 ΠΜ

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

john81

Καλημέρα, είναι η πρώτη φορά που γράφω στο στέκι. Η σύνταξη της Αν είναι "Αν συνθήκη τότε". Γράφοντας τον παρακάτω αλγόριθμο -παρόλο που δεν όρισα συνθήκη -εμφάνισε έξοδο(σε γλώσσες όπως την C κάτι τέτοιο επιτρέπεται). Εδώ όμως γιατί;

ΠΡΟΓΡΑΜΜΑ Απορία
ΜΕΤΑΒΛΗΤΕΣ
  ΛΟΓΙΚΕΣ: χ

ΑΡΧΗ
  χ <- ΨΕΥΔΗΣ

  ΑΝ χ ΤΟΤΕ
    ΓΡΑΨΕ 'Η χ είναι αληθής'
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ 'Η χ είναι ψευδής'
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Σας ευχαριστώ εκ των προτέρων

sstergou

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

Μία μεταβλητή αποτελεί από μόνη της έκφραση. Μία λογική μεταβλητή λοιπόν είναι έγκυρη συνθήκη.




P.Tsiotakis

δε θα την έγραφα ποτέ έτσι στα παιδιά, προσωπικά...

gthal

Γιατί Παναγιώτη; Με ενδιαφέρει από παιδαγωγικής σκοπιάς.
Φιλικά,
Γιώργος Θαλασσινός

pgrontas

Και όμως αν βάλεις ένα ωραίο όνομα στην μεταβλητή, ο αλγόριθμος διαβάζεται πολύ ωραία.
Για παράδειγμα δεν διαβάζεται καλύτερα το
Αν βρέθηκε τότε...
από το
Αν βρέθηκε=Αληθής τότε...
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gthal

Κι εμένα μ' αρέσει, και με λίγη εξήγηση το καταλαβαίνουν οι μαθητές και τους αρέσει.
Επίσης είναι ένα από τα επιχειρήματά μου γιατί να προτιμούν τις λογικές μεταβλητές αντί
αριθμητικών ή αλφαριθμητικών ('ΝΑΙ' / 'ΟΧΙ') flags που προτείνουν διαισθητικά κάποιοι μαθητές
Φιλικά,
Γιώργος Θαλασσινός

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

Και εγώ έχω τοποθετηθεί υπέρ μιας τέτοιας χρήσης των λογικών μεταβλητών (https://alkisg.mysch.gr/steki/index.php?topic=2373.msg19393#msg19393)... Όμως απλά το αναφέρω μια-δυο φορές στους μαθητές και δεν επιμένω πολύ αφού και το σχολικό βιβλίο δεν ακολουθεί αυτήν τακτική (βλ. αλγόριθμο σειριακής αναζήτησης) ούτε και εμβαθύνει στη χρήση των λογικών μεταβλητών (κακώς κατά τη γνώμη μου!). Οπότε τελικά ίσως και να προκαλεί σύγχυση! Αλήθεια, είναι σίγουρο ότι όλοι οι βαθμολογητές θα το λάβουν ως σωστό;  :o

evry


Κατά τη γνώμη μου όχι μόνο πρέπει να το παίρνουμ σωστό αλλά θα έτσι θα έπρεπε να ήταν από την αρχή!!!
Δυστυχώς δεν έχουμε κάποια ένδειξη από το διδακτικό πακέτο που να μας λέει ότι μπορούμε να το χρησιμοποιούμε (αν και δεν είμαι και από τους καλύτερους γνώστες του ΔΠ, Ο Τσιωτάκης θα μπορεί να απαντήσει εδώ), οπότε προσωπικά δεν θα πρότεινα στους μαθητές μου κάτι τέτοιο, γιατί ποτέ δεν ξέρεις σε τι βαθμολογητή/τρια θα πέσεις
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

sstergou

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

Ακόμη:
Ο κώδικας
Κώδικας: "Αλγόριθμος"
Αν α > 3 τότε

είναι ο ίδιος με
Κώδικας: "Αλγόριθμος"
Αν α > 3 = Αληθής

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

Γιατί να υπάρχει πρόβλημα με αυτό ;
Κώδικας: "Αλγόριθμος"
μεγαλύτερος_του_3 <- α > 3
Αν μεγαλύτερος_του_3 τότε


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

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

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

Ναι στην χρήση  λογικών μεταβλητών αλλά πάντα με την χρήση συνθηκών
Αν χ=αληθής τότε
είναι πιο απλο και κατανοητή

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

sstergou

Μία λογική μεταβλητή είναι συνθήκη.
Αν δεν μπορούμε να την γράψουμε αυτούσια σε μία εντολή αν τότε στην ουσία καταργούμε και τον λόγο ύπαρξής της αφού το ίδιο πράγμα μπορούμε να το κάνουμε χρησιμοποιώντας αριθμητικές ή αλφαριθμητικές μεταβλητές.
π.χ.
Κώδικας: Αλγόριθμος
Όσο i<=N και θέση=0


gpapargi

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

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

Παράθεση από: gpapargi στις 09 Δεκ 2009, 12:36:12 ΜΜ
Ίσως μπορούμε να το πούμε ως εξής:
Η συνθήκη αποτιμάται και παίρνει μια τιμή αληθής ή ψευδής. Αν βάλεις στη θέση της κατευθείαν το αληθής ή ψευδής απλά γλιτώνεις ένα βήμα. Είναι σαν να βάζεις κατευθείαν το αποτέλεσμα. Από αυτό το σημείο θα περάσει και η συνθήκη μετά την αποτίμησή της.
Συμφωνώ , απλώς εκτιμώ πως σε πολλά παιδιά θα φαίνεται δυσνόητο

sstergou

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

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

P.Tsiotakis

Συμφωνώ με το Γιώργο, δε συζητάμε για σωστό και λάθος εδώ, αλλά για το κρίνουμε σωστότερο για το μαθητή


Παράθεση από: Καρκαμάνης Γεώργιος στις 09 Δεκ 2009, 09:47:10 ΠΜ
Είμαι κάτα της χρήσης μιας μόνο μεταβλητής στην συνθήκη και δεντο διδάσκω ποτέ στα παιδιά.

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

Ναι στην χρήση  λογικών μεταβλητών αλλά πάντα με την χρήση συνθηκών
Αν χ=αληθής τότε
είναι πιο απλο και κατανοητή

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

pgrontas

#15
Πάντως δεν έχω καταλάβει γιατί θεωρείτε ότι τα παιδιά δεν καταλαβαίνουν την ύπαρξη συνθήκης με μόνο λογική μεταβλητή. Μπορεί να μην είναι προφανές, αλλά μετά την πρώτη εξήγηση πιστεύω γίνεται κατανοητό.
Έχετε συγκεκριμένα παραδείγματα παρανοήσεων;
Αντίθετα η άλλη άποψη έχει 3 λογικά επιχειρήματα:
1. Αποτίμηση με ένα βήμα λιγότερο (όχι τόσο σημαντικό)
2. Πιο ευανάγνωστο αλγόριθμο (για μένα πολύ σημαντικό)
3. Γιατί αλλιώς καταργείται ο λόγος ύπαρξης των λογικών μεταβλητών (σούπερ σημαντικό)
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

sstergou

Οπότε αν κατάλαβα καλά όλοι συμφωνούμε για την ορθότητα της συνθήκης η οποία περιλαμβάνει μόνο μία λογική μεταβλητή. Η παιδαγωγική προσέγγιση του καθενός μπορεί να διαφέρει. Προσωπικά στα παραδείγματά μου χρησιμοποιώ και τους δύο τρόπους σύνταξης
1)Αν λμ = Αληθής τότε
2)Αν λμ τότε
νομίζω έτσι καταλαβαίνουν καλύτερα τον σκοπό ύπαρξης αυτών των μεταβλητών. Είναι το μοναδικό σοβαρό επιχείρημα που μπορώ να σκεφτώ όταν κάποιος μαθητής/τρια με ρωτήσει "γιατί δεν το κάνουμε με μετρητή, το ίδιο δεν είναι;". Σαφώς και είναι το ίδιο αλλά οι λογικές μεταβλητές είναι καταλληλότερες γιατί αποτελούν από μόνες τους έγκυρες συνθήκες και μπορούν να χρησιμοποιηθούν χωρίς συγκριτικούς τελεστές. Εκτός από τη χρήση τους σε κάποιες άλλες εξεζητημένες τεχνικές δεν νομίζουν ότι προσφέρουν κάτι παραπάνω στο μάθημα.

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

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

Π.χ. Το:

Αν ΕίναιΌλοιΆρτιοι τότε  ...

είναι πιο λογικό (στην κυριολεξία!) από το:

Αν ΕίναιΌλοιΆρτιοι=αληθής τότε  ...

Αλλά και το:

Αν όχι ΕίναιΌλοιΆρτιοι τότε  ...

είναι πιο λογικό (στην κυριολεξία!) από το:

Αν ΕίναιΌλοιΆρτιοι=ψευδής τότε  ...

Τότε γιατί δεν βάζουμε:

Αν ΕίναιΌλοιΆρτιοι=1 τότε  ...

και να τελειώνουμε καταργώντας τις λογικές μεταβλητές;

Σε μία μελλοντική αλλαγή/ανανέωση του βιβλίου θα ήθελα οι λογικές μεταβλητές να έχουν περισσότερο χώρο! Να πω μάλιστα πως έχω ξεκινήσει μία εργασία πάνω σε αυτό το ζήτημα...

pgrontas

Παράθεση από: Νίκος Αδαμόπουλος στις 09 Δεκ 2009, 04:40:35 ΜΜ
Αν όχι ΕίναιΌλοιΆρτιοι τότε  ...
Επίσης, με βάση το παραπάνω παράδειγμα του Νίκου, θέλω να πω ότι το αγγλικό not μεταφράζεται και ως ΔΕΝ.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

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

Μεγάλε λες και είσαι μέσα στη σκέψη μου! Την ώρα που έγραφα το παραπάνω μήνυμα σκεφτόμουν ποια θα ήταν μια καλύτερη απόδοση του not για την περίπτωσή μας! Το "Δεν" που είπες, το "ΔενΙσχύει", "ΔενΕίναι" ....  :)

evry

#20
  Συνήθως ο λόγος που κάποια πράγματα στο μάθημά μας φαίνονται στα παιδιά δυσνόητα είναι ότι δεν έχουν καταλάβει πως δουλεύουν. Απλά μαθαίνουν έναν τυφλοσούρτη που τους κάνει να νιώθουν ασφαλή και αυτό είναι όλο. Αν τους βγάλεις έξω από αυτά παθαίνουν blackout.
    Για παράδειγμα εδώ δεν έχουν καταλάβει ότι ουσιαστικά το αποτέλεσμα της έκφρασης α>0 είναι του ίδιου τύπου με την τιμή μιας λογικής μεταβλητής, δηλαδή ότι κανονικά θα έπρεπε να μπορώ να γράψω 
θετικός <- α>0
δηλαδή ότι οι εκφράσεις θετικός, α>0 είναι το ίδιο (από θέμα τιμής) και άρα αφού μπορώ να γράψω
Αν  α>0 Τότε             και όχι    Αν  α>0 = Αληθής  Τότε     
με τον ίδιο ακριβώς τρόπο μπορώ να γράψω
Αν  θετικός  Τότε             και όχι    Αν  θετικός = Αληθής  Τότε     

   Τέτοια προβλήματα υποδηλώνουν παρανόηση του μαθητή σε κάτι πιο θεμελιακό.
1-2 παραδείγματα για να καταλάβετε τι εννοώ είναι τα παρακάτω
Σίγουρα έχετε δει κώδικα μαθητή του στυλ
   Διάβασε χ
   α[ι] <- χ

Γιατί δεν γράφει κατευθείαν Διάβασε α[ι]
ή γιατί αν του δώσουμε την έκφραση α[α[ι]ι] θα κολλήσει?
Μήπως επειδή δεν έχει κατανοήσει ότι το α[ι] δεν είναι πίνακας αλλά στοιχείο πίνακα, δηλαδή ουσιαστικά μια ακόμα μεταβλητή που μπορεί να χρησιμοποιηθεί όπως ακριβώς χρησιμοποιείται και οποιαδήποτε άλλη ακέραια μεταβλητή?

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

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

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

Παράθεση από: evry στις 09 Δεκ 2009, 06:12:47 ΜΜ
Άρα όταν κάτι δεν το καταλαβαίνουν τα παιδιά δεν σημαίνει ότι είναι κάτι που θα πρέπει να αποφύγουμε. Απλά θα πρέπει να βρούμε τα αίτια αυτής της παρανόησης.

Σωστός!

gthal

Να 'μαι κι εγώ, καθυστερημένος...
Έχει πάρει φωτιά βλέπω το topic, ωραίες και σεβαστές όλες οι απόψεις!
Πράγματι είναι ένα θέμα που δυσκολεύει πολλούς μαθητές γιατί απαιτεί ένα παραπάνω επίπεδο κατανόησης.
Αλλά επειδή από κάποιους μαθητές  σαφώς το θέλουμε αυτό το παραπάνω επίπεδο κατανόησης (και τους το οφείλουμε, ε;), εγώ εξηγώ την εναλλακτική με τη λογική μεταβλητή (είναι και μια εκπληκτική ευκαιρία να διευρύνουν την κατανόησή τους στο τι είναι λογική έκφραση - και γενικότερα έκφραση) , και στα επόμενα χρησιμοποιώ αρχικά τον κλασσικό τρόπο (=αληθής) και θυμίζω ότι μπορεί να γραφεί και αλλιώς ή ρωτάω "πώς θέλετε να το βάλουμε, έτσι ή αλλιώς?" (πολύ συχνά επιλέγουν τη λογική μεταβλητή)

Τα επιχειρήματα που γράφτηκαν υπέρ, με εκφράζουν συνολικά.
Θα ήθελα όμως να γράψω και κάτι πιο προσωπικό, σχεδόν γραφικό ίσως, που πιστεύω όμως ότι αντιστοιχεί σε όλους μας κάπου.
Υπάρχουν κάποιες στιγμές όταν μελετάμε αυτό που μας αρέσει, στις οποίες ανακαλύπτουμε κάτι, μας αποκαλύπτεται μια μαγεία, στιγμές που μας κάνουν να το αγαπήσουμε περισσότερο. Μια τέτοια φωτεινή στιγμή για μένα ήταν όταν έμαθα/ανακάλυψα ότι είναι το ίδιο αν βάλω σκέτη τη λογική μεταβλητή αντί για συνθήκη. Ήταν μια στιγμή στην οποία πείστηκα ότι αυτό το οικοδόμημα (ο προγραμματισμός - η συγκεκριμένη γλώσσα - ας το πούμε όπως θέλουμε) είναι συνεπές με τον εαυτό του! Ήταν λογικό να λειτουργεί έτσι και λειτουργούσε πράγματι έτσι! Τέτοια σημεία, που εμένα με φώτισαν και με ενθουσίασαν, θέλω να τα μεταδίδω στους μαθητές μου και ίσως σε κάποιους να αποκαλύψουν κάτι, ίσως σε άλλους να μην πουν τίποτα. Πιστέψτε με ότι κάποια προσωπάκια πάντως φωτίζονται σ' αυτό το σημείο και για μένα αξίζει μια αναφορά και μόνο για αυτό.
Φιλικά,
Γιώργος Θαλασσινός

Vangelis

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