Αποστολέας Θέμα: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ  (Αναγνώστηκε 2960 φορές)

Παππάς Παναγιώτης

  • Νέος
  • *
  • Μηνύματα: 3
ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« στις: 09 Μάι 2009, 03:14:33 μμ »
Καλημέρα συνάδελφοι
Καταρχήν θέλω να ευχαριστήσω κι εγώ με τη σειρά μου όλους σας για την πολύ σημαντική βοήθεια που προσφέρετε για την όσο το δυνατόν πληρέστερη διδασκαλία του μαθήματος.
Τις τελευταίες μέρες αντιμετώπισα ένα πρόβλημα και θα ήθελα να παραθέσω ενώπιον όλων σας μια "λύση" που πρότεινα στα παιδιά και να ζητήσω να τη σχολιάσετε.
Έκανα τα θέματα του ΟΕΦΕ 2009 και στο τελευταίο ερώτημα στο 4ο θέμα (να τυπωθούν τα ονόματα των μαθητών που το σύνολο των απουσιών τους είναι μεγαλύτερο από 30 και έχουν σε κάποιο μήνα πάνω από 5 απουσίες, αν θυμάμαι καλά) τους είπα ότι πρέπει να χρησιμοποιήσουν σημαία. Όπως και όταν τους έκανα το 3ο Θέμα από τις εξετάσεις του 2005 (αν θυμόσαστε, να χαρακτηρίσουμε ένα πίνακα Β ως μέσο ή μη ενός άλλου Α) διαμαρτυρήθηκαν για άλλη μια φορά ότι δεν μπορούν να καταλάβουν αν χρειάζεται σε μια άσκηση η χρήση αυτού του τύπου των μεταβλητών (των σημαιών δηλαδή) και πόσο μάλλον πως να τις χρησιμοποιήσουν.
Έψαξα και στο στέκι φυσικά, αλλά και σε βιβλία μου από το Πανεπιστήμιο αλλά δεν βρήκα κάποιο σχετικό κανόνα και έτσι "σχεδίασα" (με επιφύλαξη χρησιμοποιώ τον όρο) έναν εμπειρικό κανόνα για να τους βοηθήσω στο μέτρο του δυνατού, τον οποίο και παραθέτω παρακάτω με την παράκληση να τον σχολιάσετε και να τον διορθώσετε.


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

1η:για να ικανοποιείται η γενικότερη συνθήκη πρέπει να ικανοποιούνται ταυτόχρονα μια σειρά από επιμέρους συνθήκες,    άρα μιλάμε για μια συνθήκη της μορφής (Σ1 και Σ2 και ... και Σν)
παράδειγμα, στο 4ο θέμα, 5ο υποερώτημα από τον ΟΕΦΕ 2009 για να πούμε ότι ισχύει για την i γυναίκα ότι η ορμόνη προγεστερόνη αυξάνει καθημερινά συνεχώς από την 10η έως την 18η μέρα πρέπει να ισχύει:

ΠΡ[i,10]<ΠΡ[i,11] και ΠΡ[i,11]<ΠΡ[i,12] και ΠΡ[i,12]<ΠΡ[i,13] και ΠΡ[i,13]<ΠΡ[i,14] και ΠΡ[i,14]<ΠΡ[i,15] και ΠΡ[i,15]<ΠΡ[i,16] και ΠΡ[i,16]<ΠΡ[i,17] και ΠΡ[i,17]<ΠΡ[i,18]

Επειδή αν η παραδοχή αφορούσε περισσότερες μέρες θα χρειαζόταν μία σελίδα στο απαντητικό φύλλο (!!!) για να καταγράψουν την συνθήκη είναι μονόδρομος (θα μπορούσαν βέβαια να έχουν κι ένα μετρητή και να μετράνε πόσες μέρες η μέτρηση είναι μεγαλύτερη από την προηγούμενη αλλά θεωρώ ότι είναι το ίδιο πράγμα) ένας άλλος τρόπος που δεν είναι άλλος από την χρήση λογικής μεταβλητής - σημαίας. Αφού λοιπόν για να ικανοποιείται η γενικότερη συνθήκη  πρέπει να ικανοποιούνται ταυτόχρονα όλες οι επιμέρους (τελεστής ΚΑΙ) ξεκινάμε με την παραδοχή "έστω ότι ισχύει η γενικότερη συνθήκη" και στην συνέχεια αν μία από τις επιμέρους δεν ισχύει (ΨΕΥΔΗΣ) αλλάζουμε και την σημαία σε ψευδή.
Άρα η γενική λύση είναι:

Ισχύει <- Αληθής
Για i από 1 μέχρι Ν
  Αν Σi (δηλαδή η iοστή από τις συνθήκες) = ψευδής τότε
     Ισχύει <- Ψευδής
  Τέλος_Αν
Τέλος_Επανάληψης
Αν Ισχύει=Αληθής τότε
   Εμφάνισε ότι ισχύει η γενικότερη συνθήκη
αλλιώς
   Εμφάνισε ότι ισχύει η γενικότερη συνθήκη
Τέλος_Αν

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


2η:για να ικανοποιείται η γενικότερη συνθήκη πρέπει να ικανοποιείται έστω κάποια από μια σειρά από επιμέρους συνθήκες,    άρα μιλάμε για μια συνθήκη της μορφής (Σ1 ή Σ2 ή ... ή Σν)
Παράδειγμα: σε ένα δισδιάστατο πίνακα με απουσίες μαθητών ΑΠ[120,9] να εμφανίζουμε τους αριθμούς των μαθητών που σε κάποιον από τους 9 μήνες έχουν περισσότερες από 5 απουσίες. Κατ’ αντιστοιχία με την 1η περίπτωση, για να ισχύει η γενικότερη συνθήκη για τον iοστό μαθητή πρέπει να ισχύει:
ΑΠ[i,1]>5 ή ΑΠ[i,2]>5 ή ΑΠ[i,3]>5 ή ΑΠ[i,4]>5 ή ΑΠ[i,5]>5 ή ΑΠ[i,6]>5 ή ΑΠ[i,7]>5 ή ΑΠ[i,8]>5 ή ΑΠ[i,9]>5
Οπότε για τους ίδιους λόγους με παραπάνω (για να μην είναι η λύση ένα στρέμμα!!!) πάμε στην χρήση της σημαίας. Αφού λοιπόν για να ικανοποιείται η γενικότερη συνθήκη  πρέπει να ικανοποιείται τουλάχιστον μία από τις επιμέρους (τελεστής Ή) ξεκινάμε με την παραδοχή "έστω ότι δεν ισχύει η γενικότερη συνθήκη" και στην συνέχεια αν μία από τις επιμέρους ισχύει (ΑΛΗΘΗΣ) αλλάζουμε και την σημαία σε αληθή.
ʼρα η γενική λύση είναι:
Ισχύει <- Ψευδής
Για i από 1 μέχρι Ν
  Αν Σi (δηλαδή η iοστή από τις συνθήκες) = Αληθής τότε
     Ισχύει <- Αληθής
  Τέλος_Αν
Τέλος_Επανάληψης
Αν Ισχύει=Αληθής τότε
   Εμφάνισε ότι ισχύει η γενικότερη συνθήκη
αλλιώς
   Εμφάνισε ότι ισχύει η γενικότερη συνθήκη
Τέλος_Αν

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

Υ.Γ. συγνώμη αν υπήρξα εκτενής και σας κούρασα

ntzios kostas

  • Καθηγητής Πληροφορικής
  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 599
    • Ανάπτυξη Εφαρμογών
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #1 στις: 09 Μάι 2009, 05:17:40 μμ »
Πολλοί μαθητές το ίδιο το πρόβλημα το λύνουν πιο εύκολα χρησιμοποιώντας μετρητή που μετράει πόσες φορές εντοπίζεται κάτι που χαλάει την γενικότητα. Αν θέλεις να χρησιμοποιήσεις λογικές μεταβλητές για δοκίμασε να γράψει αντί για μεταβλητή με όνομα υπάρχει το όνομα υπάρχει_λάθος. Νομίζω ότι το δέχονται πιο εύκολα οι μαθητές.

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

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

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3219
  • I love you 3000
    • Panagiotis Tsiotakis
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #2 στις: 09 Μάι 2009, 05:53:47 μμ »
Εν ολίγοις Παναγιώτη, χρησιμοποιούμε τη λογική μεταβλητή κυρίως όταν το πρόβλημα είναι  πρόβλημα απόφασης (έτσι κουμπώνει και με τη θεωρία τους).

Εμμέσως έτσι χρησιμοποιείται και η done στη σειριακή αναζήτηση (και ως διακόπτης).

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

ΥΓ: αυτή η άσκηση μήπως είναι ΟΕΦΕ 2008;

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3168
  • to Iterate is human to Recurse divine
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #3 στις: 09 Μάι 2009, 10:28:53 μμ »

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

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

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3219
  • I love you 3000
    • Panagiotis Tsiotakis
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #4 στις: 09 Μάι 2009, 10:56:04 μμ »
Ευρυπίδη, όπως θα έχεις προσέξει, προσωπικά έχω κάνει προσπάθεια να αναδείξω τα προβλήματα απόφασης (και ειδικά μετά το θέμα 3 του 2005), αν και το βιβλίο το είχα σχεδιάσει νωρίτερα.

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

klitos

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 133
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #5 στις: 10 Μάι 2009, 05:44:57 πμ »
Συμφωνω στο οτι ειναι προβλημα αποφασης η χρηση των λογικων μεταβλητών.
Τα περισσοτερα προβληματα που λυνονται με λογικες μπορουμε να τα λυσουμε και με μετρητη,ο οποιος (μετρητης) εχει και την επιπλεον πληροφορία για το πληθος.
Η πρώτη επαφη που εχουν τα παιδια με τις λογικες μεταβλητες ειναι η σειριακη αναζήτηση. Εννοώ οτι εκει καταλαβαινουν την αξια της , οτι δηλαδη πρεπει να σταματησει η αναζήτηση μολις συμβεί ενα γεγονός. Τους δινω λοιπόν ασκήσεις που εχουν ερωτήσεις του στυλ
1."να σταματά οταν..."
2."την πρωτη φορά που θα ικανοποιείται μια συνθήκη να..."
3."αν δεν βρεθεί τοτε να ...κάνει αντιγραφή ... να μετρά οτι δεν βρέθηκε κλπ"
Και τους ζητώ να βρούν ποιες απο αυτές μπορουν να γινουν με μετρητη και ποιες οχι ... οποτε καταλαβαινουν νομιζω την αξια της χρησης των λογικων.
Βεβαια οι καλοι μαθητες μπορουν να καταλαβουν και να επεκτεινουν την χρηση τους και σε συνθετοτερα προβληματα ( γενικοτερη συνθηκη κλπ).
Αφου τονισω την χρησιμοτητα των λογικων τους αφηνω να αποφασισουν ποτε ειναι απαραιτητη η χρηση τους και ποτε οχι (δικαιολογωντας την απαντηση).
κλητος χατζηγεωργιου

Παππάς Παναγιώτης

  • Νέος
  • *
  • Μηνύματα: 3
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #6 στις: 10 Μάι 2009, 08:49:24 πμ »
Συμφωνώ κι εγώ ότι μπορούμε κάλλιστα να χρησιμοποιήσουμε μετρητή στη θέση μιας λογικής μεταβλητής.
Άλλωστε και η σειριακή θα μπορούσε να τροποποιηθεί και να χρησιμοποιεί μετρητή στη θέση της λογικής μεταβλητής.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3168
  • to Iterate is human to Recurse divine
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #7 στις: 10 Μάι 2009, 01:58:35 μμ »

  Οι λογικές μεταβλητές υπάρχουν μόνο και μόνο για λόγους "ωραιοποίησης" του κώδικα αν είναι δόκιμος ο όρος. Δηλαδή αν τον διαβάσει κάποιος τρίτος να μπορεί να καταλάβει τι γίνεται. Ωστόσο οι μαθητές προτιμούν τους μετρητές και θα πρέπει να σταθούμε σε αυτό. Η γνώμη μου είναι ότι δεν έχουμε σοβαρό λόγο να πιέζουμε για τη χρήση λογικών μεταβλητών. Άλλωστε η μόνη χρήση λογικής μεταβλητής στο βιβλίο είναι στη σειριακή αναζήτηση, όπου είναι προφανές ότι την αντέγραψαν από κάποιο ξενόγλωσσο βιβλίο και δεν μπήκαν στον κόπο να αλλάξουν καν τα ονόματα των μεταβλητών!! Δηλαδή αν το done το έκαναν Βρέθηκε δεν θα ήταν πολύ καλύτερα?

Οι λογικές μεταβλητές χρησιμοποιούνται σε 2 περιπτώσεις.
1. Όταν θέλουμε να ελέγξουμε αν υπάρχει κάποιο αντικείμενο σε ένα σύνολο αντικειμένων που έχει κάποια ιδιότητα, δηλαδή πρόβλημα ύπαρξης. Τέτοιο είναι το πρόβλημα της αναζήτησης. Εκεί θα μπορούσαμε να γράψουμε το παρακάτω αντί για τον κώδικα του σχολικού βιβλίου

Κώδικας: [Επιλογή]
count <- 0
i <- 1
pos <- 0
ΟΣΟ count = 0 ΚΑΙ i <= N ΕΠΑΝΑΛΑΒΕ
    ΑΝ table[i] = key ΤΟΤΕ
          count <- count + 1     ! ή count <- 1
          pos <- i
    ΤΕΛΟΣ_ΑΝ
    i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

Κώδικας: [Επιλογή]
i <- 1
pos <- 0
ΟΣΟ pos = 0 ΚΑΙ i <= N ΕΠΑΝΑΛΑΒΕ
    ΑΝ table[i] = key ΤΟΤΕ
          pos <- i
    ΤΕΛΟΣ_ΑΝ
    i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

Κώδικας: [Επιλογή]
count <- 0
i <- 1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
    ΑΝ table[i] mod 2 = 0 ΤΟΤΕ
          count <- count + 1   
    ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ count = N ΤΟΤΕ
    ΓΡΑΨΕ 'ΝΑΙ ΙΣΧΥΕΙ'
ΤΕΛΟΣ_ΑΝ

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

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

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3219
  • I love you 3000
    • Panagiotis Tsiotakis
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #8 στις: 10 Μάι 2009, 03:22:01 μμ »
Τες πα το θέμα είναι ότι μέχρις στιγμής δεν έχω βρει κανένα μαθητή που να προτιμά τη λύση με τις λογικές μεταβλητές (εκτός φυσικά από εκείνους που τη μαθαίνουν απέξω >:D)

Ενώ η λύση με μετρητές δεν είναι εύκολο να απομνημονευθεί   :angel:

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #9 στις: 10 Μάι 2009, 03:31:40 μμ »
Μια άλλη χρήση των λογικών μεταβλητών είναι η εύκολη εναλλαγή μεταξύ δύο καταστάσεων.
Για παράδειγμα στην άσκηση για τον υπολογισμό της σειράς του ημιτόνου
ημ(χ) = (χ^1)/1! - (χ^3) /3! + (χ^5)/5!+....

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

π.χ.
Κώδικας: [Επιλογή]
σ<-0
πρόσθεση<- Αληθής
Αρχή_επανάληψης
...
Αν πρόσθεση τότε
  σ <- σ + όρος
Αλλιώς
  σ <- σ - όρος
Τέλος_Αν
πρόσθεση <- ΟΧΙ πρόσθεση
...
Μέχρις_Ότου(όροι = όριο)
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3168
  • to Iterate is human to Recurse divine
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #10 στις: 10 Μάι 2009, 05:03:39 μμ »
Πράγματι, απλά εδώ ουσιαστικά μπορείς να έχεις και μια αριθμητική μεταβλητή που να γίνεται 0 ή 1. Δηλαδή η αναπαράσταση μιας δίτιμης μεταβλητής με λογική τιμή είναι απλά θέμα μοντελοποίησης. Στη C ας πούμε έχουμε 0 για ψευδές και οτιδήποτε άλλο για αληθές.
Στο συγκεκριμένο παράδειγμα μια ενδιαφέρουσα λύση θα ήταν να θέταμε αρχικά μια μεταβλητή 

πρόσημο = 1 ή -1 και στη συνέχεια θα είχαμε μέσα στην επανάληψη

ΗΜν(χ) <- ΗΜν-2(χ) + πρόσημο * (χ^ν)ν!
πρόσημο <- πρόσημο * (-1)

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

Μια άλλη χρήση των λογικών μεταβλητών είναι η εύκολη εναλλαγή μεταξύ δύο καταστάσεων.
Για παράδειγμα στην άσκηση για τον υπολογισμό της σειράς του ημιτόνου
ημ(χ) = (χ^1)/1! - (χ^3) /3! + (χ^5)/5!+....

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

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3168
  • to Iterate is human to Recurse divine
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #11 στις: 10 Μάι 2009, 05:06:45 μμ »
Προφανώς είναι, δεν είπε κανείς το αντίθετο, απλά πάλι εμπειρικά έχω δει ότι όσοι χρησιμοποιούν μετρητές καταλαβαίνουν τι κάνουν ενώ όσοι χρησιμοποιούν λογικές μεταβλητές σε ένα μεγαλύτερο ποσοστό έχουν μάθει απέξω έναν τυφλοσούρτη χωρίς να καταλαβαίνουν τι κάνουν.
  Για παράδειγμα δε μαθαίνουν πολλοί μαθητές απέξω τον αλγόριθμο της σειριακής αναζήτησης όπως τον έχει το βιβλίο?

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

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

Ενώ η λύση με μετρητές δεν είναι εύκολο να απομνημονευθεί   :angel:
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2787
  • Πύργος Ηλείας
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #12 στις: 11 Μάι 2009, 09:40:14 πμ »
Πράγματι, απλά εδώ ουσιαστικά μπορείς να έχεις και μια αριθμητική μεταβλητή που να γίνεται 0 ή 1. Δηλαδή η αναπαράσταση μιας δίτιμης μεταβλητής με λογική τιμή είναι απλά θέμα μοντελοποίησης. Στη C ας πούμε έχουμε 0 για ψευδές και οτιδήποτε άλλο για αληθές.

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

Ακόμα και στη C μπορείς να γράψεις:

brethike=0; /* ή brethike=1 ή brethike=...*/
.....
if (!b) ....

εννοώντας:

Βρέθηκε <- Ψευδής  ! ή Βρέθηκε <- Αληθής
.....
Αν όχι Βρέθηκε τότε....


Δηλαδή δεν χρειάζεται να γράψεις:

if (b==0) ....

ή αντίστοιχα:

Αν Βρέθηκε=ψευδής τότε....


Βέβαια δεν νομίζω ότι είναι σκόπιμο να οδηγήσουμε τα παιδιά στο: "Αν Βρέθηκε τότε... " αντί του "Αν βρέθηκε=αληθής τότε..." αφού και το βιβλίο δεν το κάνει... (αν και μία μικρή αναφορά στο ότι αυτά είναι ισοδύναμα δεν θα έκανε κακό!).

Πιστεύω όμως ότι το να παρακάμπτουμε τελείως τις λογικές μεταβλητές για λόγους ευκολίας δεν είναι σωστό... Δηλαδή το ότι κάποιοι συνάδελφοι ακόμα και τη σειριακή αναζήτηση τη διδάσκουν με μετρητή μού φαίνεται αδιανόητο...
« Τελευταία τροποποίηση: 11 Μάι 2009, 10:07:23 πμ από Νίκος Αδαμόπουλος »

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3168
  • to Iterate is human to Recurse divine
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #13 στις: 11 Μάι 2009, 10:29:05 πμ »

 Εντάξει δεν είπαμε να φτάσουμε στα άκρα, αλλά νομίζω ότι πριν εισάγεις τις λογικές μεταβλητές μπορείς να τους δώσεις ένα - δύο προβλήματα να δεις πως θα τα αντιμετωπίσουν, ή και να τους "κατευθύνεις" προς μια λύση με μετρητή αφού και στην περίπτωση μετρητή την ίδια μεθοδολογία τιμής-φρουρού ακολουθούμε. Απλά βαφτίζεις τα 0, 1 (ή 0, <>0) ψευδές/αληθές. Στη συνέχεια μιλάς για λογικές μεταβλητές και η μετάβαση είναι κάπως πιο ομαλή.
 
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1095
Απ: ΧΡΗΣΗ ΜΕΤΑΒΛΗΤΩΝ ΣΗΜΑΙΑΣ
« Απάντηση #14 στις: 11 Μάι 2009, 10:40:44 πμ »
Όλοι ξέρουμε πως τα παιδια πάντα ξάχνουν για την έυκολη λύση, και η λύση με τον μετρητή τους έρχεται πιο εύκολα στο μυαλό τους και τους είναι πιο κατανοητή γιατί έχουν λύσει και 50 ασκήσεις με αυτούς, παρά με λογική μεταβλητή.

Παράθεση
Πράγματι, απλά εδώ ουσιαστικά μπορείς να έχεις και μια αριθμητική μεταβλητή που να γίνεται 0 ή 1. Δηλαδή η αναπαράσταση μιας δίτιμης μεταβλητής με λογική τιμή είναι απλά θέμα μοντελοποίησης. Στη C ας πούμε έχουμε 0 για ψευδές και οτιδήποτε άλλο για αληθές.
Στο συγκεκριμένο παράδειγμα μια ενδιαφέρουσα λύση θα ήταν να θέταμε αρχικά μια μεταβλητή 

πρόσημο = 1 ή -1 και στη συνέχεια θα είχαμε μέσα στην επανάληψη

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