Πρόσθεση χαρακτήρων + Λογικές Εκφράσεις

Ξεκίνησε από Γιώργος, 16 Νοε 2005, 12:04:37 ΜΜ

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

Γιώργος

Καλημέρα συνάδερφοι. Θέλω να εκφράσω μια απορία  ως προς το πόσο είναι επιτρεπτή η πρόσθεση χαρακτήρων στον αλγόριθμο ή στην ΓΛΩΣΣΑ δηλ η έκφραση χ<-- 'α' + 'β' είναι αποδεκτή ή όχι. Εννοείται ότι το αποτέλεσμα θα είναι η συννένωση των δυο χαρακτήρων α και β και όχι η πρόσθεσή τους. Αυτό γνωρίζει καποιος αν είναι αποδεκτο και εφικτό; Το βιβλίο δεν αναφέρει καποιο παράδειγμα με χαρακτήρες για άυτό ρωτώ αν κάποιος συνάδερφος γνωρίζει κατι .

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

Άρης Βερνάρδος

Αγαπητέ Γιώργο,
από τη στιγμή που το σχ. βιβλίο δεν προβλέπει κάτι, θεωρώ ότι αποκλείεται να ζητηθεί. Κάτι τέτοιο θα είχε νόημα αν το σχ. βιβλίο συνοδευόταν από επίσημο compiler, που όπως ξέρεις δεν υπάρχει.
Το μόνο που θα μπορούσαμε να κάνουμε θα ήταν υποθέσεις, βλέποντας τι ισχύει σε άλλες γλώσσες προγραμματισμού, αλλά νομίζω ότι κάτι τέτοιο δεν θα ήταν ασφαλές.
Α. Βερνάρδος
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Ε.Μ.Π.
Καθηγητής Πληροφορικής ΠΕ19

P.Tsiotakis


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

Με εκτίμηση,

Sergio

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

Αντίθετα οι συγκριτικοί μπορούν να χρησιμοποιηθούν για να συγκρίνουν... συγκρίσιμα!!!  Αριθμούς μεταξύ τους (3 < 5: Αληθής), χαρακτήρες μεταξύ τους ("Παναγιώτης" > "Σέργιος": Ψευδής ) ή λογικές τιμές (βρέθηκε = ΨΕΥΔΗΣ).

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

P.Tsiotakis

Για τη σύγκριση μεταξύ λογικών μεταβλητών μπορούν να χρησιμοποιηθούν μόνο οι τελεστές = και <> (μου διαφεύγει κάτι; )

Π.χ.  Αν σημαία = αληθής τότε
ή       Αν done <> αληθής τότε

Δεν μπορώ να καταλάβω σε τι θα ωφελούσε η σύγκριση (>, >=, <, <=) μεταξύ δυο λογικών μεταβλητών

Α, και κάτι άλλο: Πιστεύω οτι η διατύπωση

    Αν done τότε   ! αν done = αληθής
ή  Αν όχι done τότε   ! αν done = ψευδής

δεν είναι σωστή (δεν έχει σχέση με το στόχο του μαθήματος)

Με εκτίμηση,

alkisg

Αν θυμάμαι καλά το λέει ξεκάθαρα στο βιβλίο, ότι οι μόνοι συγκριτικοί τελεστές που επιτρέπονται στις λογικές μεταβλητές είναι οι = και <>. Επομένως σ' αυτό υπάρχει επίσημη απάντηση.

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

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

Sergio

Σύγκριση Λογικών Μεταβλητών:
Συμφωνώ και με τους δύο.  Βιβλίο Μαθητή, σελ.166: «...η σύγκριση λογικών έχει έννοια μόνο στην περίπτωση του ίσιου (=) και του διάφορου (<>), αφού οι τιμές που μπορούν να έχουν είναι ΑΛΗΘΗΣ και ΨΕΥΔΗΣ...».  Το βιβλίο (και κατ επέκταση το μάθημα) δε δείχνει να απασχολείται με τα τεχνικά της υλοποίησης των λογικών (1 / 0) και καλά κάνει.  Τα τεχνικά της εσωτερική αναπαράστασης λογικών παραστάσεων δεν αφορούν τους μαθητές ή το μάθημα στο επίπεδο που διδάσκεται.

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

Η συνθήκη ορίζεται ως μία λογική έκφραση (ΒΜ, σελ.33) και αυτό πιστεύω αντιπροσωπεύει όλα τα παρακάτω:
-      α = 2
-      Βρέθηκε = ΑΛΗΘΗΣ
-      β > γ ΚΑΙ χ = ψ
-      «Παναγιώτης» <= «Άλκης»
-      ΟΧΙ Βρέθηκε
όπως αντίστοιχα αριθμητικές εκφράσεις μπορούμε να θεωρήσουμε όλα τα παρακάτω:
-      α + 3
-      3 * 5 + 2
-      7
-      β

Γιατί το απλό και σκέτο β (αριθμητική μεταβλητή) ή το 7 (αριθμητική σταθερά) να μπορεί να θεωρηθεί αριθμητική έκφραση ενώ το εξίσου απλό και σκέτο Βρέθηκε (λογική μεταβλητή) ή ΑΛΗΘΗΣ (λογική σταθερά) να μη μπορεί να θεωρηθεί λογική έκφραση, επομένως συνθήκη;

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

   Βρέθηκε <-- Όνομα[ i ] = Ζητούμενο_όνομα

Ως ισοδύναμου με το:

   ΑΝ Όνομα[ i ] = Ζητούμενο_όνομα ΤΟΤΕ
               Βρέθηκε <-- ΑΛΗΘΗΣ
   ΤΕΛΟΣ_ΑΝ

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

Είμαι της γνώμης ότι είναι μέσα στους στόχους του μαθήματος να μπορούν οι μαθητές να κατανοούν ότι οτιδήποτε αποτιμάται σε ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ αποτελεί λογική έκφραση επομένως:
- μπορεί να αποδώσει τιμή σε λογική μεταβλητή
- μπορεί να χρησιμοποιηθεί για τη λήψη απόφασης εν είδη συνθήκης

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

P.Tsiotakis

Ξεφύλλισα προσεκτικά τα βιβλία του διδακτικού πακέτου για να βεβαιωθώ και δεν βρήκα ούτε ένα σημείο που να αποδίδει το αποτέλεσμα μιας συνθήκης σε λογική μεταβλητή Π.χ. γ <-  (α > β)

Δεν συναντάμε ούτε την διατύπωση "Αν done τότε" ούτε καν στο βιβλίο καθηγητή (που είναι γραμμένο πιο χαλαρά  ??? )

Γιατί αυτό; Για τον απλούστατο λόγο οτι δεν είναι κάτι που θα καταννοήσουν εύκολα οι μαθητές (κατά τη γνώμη μου θα τους μπερδέψει περισσότερο) και προσωπικά δεν αντιλαμβάνομαι και το λόγο

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

Με εκτίμηση,

Βαγγέλης Κανίδης

Σέργιε πιστεύω ότι εκφράσεις όπως
 Βρέθηκε <-- Όνομα[ i ] = Ζητούμενο_όνομα
δεν έχουν παιδαγωγική αξία στα πλαίσια των στόχων του μαθήματος, αντίθετα θα μπερδέψουν τους μαθητές.  Το πρόβλημα δεν είναι  η κατασκευή του βέλτιστου κώδικα αλλα η κατανόηση και η χρήση απλών δομών κώδικα.  Αν κάποιος θέλει αργότερα να ασχοληθεί καλώς να ορίσει στο club.

Προσωπικα την παραπάνω έκφραση αν την συναντούσα σε λύση άσκησης στις γενικές εξετάσεις θα την θεωρούσα λάθος.  

Sergio

Βαγγέλη, συμφωνώ απόλυτα και μάλιστα, προσωπικά, θα «αποδοκίμαζα» τη χρήση τέτοιων προγραμματιστικών πρακτικών και σε πραγματικό περιβάλλον.  Νομίζω ότι είναι πολύ καταλληλότερη η δομή:

  ΑΝ Όνομα[ i ] = Ζητούμενο_όνομα ΤΟΤΕ
     Βρέθηκε <-- ΑΛΗΘΗΣ
  ΤΕΛΟΣ_ΑΝ

από την:

  Βρέθηκε <-- Όνομα[ i ] = Ζητούμενο_όνομα

και σε επαγγελματικό περιβάλλον (πόσο μάλλον στα πλαίσια διδασκαλίας αλγοριθμικής σε μαθητές Λυκείου).  Στη δημιουργία ευανάγνωστου κώδικα σίγουρα βοηθά πολύ η παραδοχή ότι ο κώδικας πρέπει να γράφεται για human processors (τον κώδικα για computer processors τον αναλαμβάνει ο compiler)  Είναι γνωστή, και η πρόσφατη δουλειά του Knuth στο συγκεκριμένο θέμα όπου με γενικό τίτλο Literate Programming υποστηρίζει στο ίδιο μήκος κύματος: «...Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do...»  Εξάλλου, από τις αρχές της δεκαετίας του 80 που άρχισε να συζητιέται ο όρος Software Crisis, η αντίληψη που επικρατεί είναι ότι αυτό που προέχει είναι η αναγνωσιμότητα, η απλότητα και η συντηρησιμότητα του κώδικα (δεδομένων και των τεχνολογικών αλμάτων στο χώρο του hardware που καθιστούν το κέρδος σε απόδοση ενός δυσανάγνωστου αλλά αποτελεσματικού κώδικα αμφισβητήσιμα).

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

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

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

Δηλαδή θα προτείνουμε στους μαθητές:
-      να κατασκευάζουν αριθμητικές εκφράσεις (π.χ. 3+α*2)
-      να εκχωρούν τα αποτελέσματα των αριθμητικών εκφράσεων σε αριθμητικές μεταβλητές (π.χ. β <-- 3 + α*2)
-      να κατασκευάζουν λογικές εκφράσεις (π.χ. Α>5 ΚΑΙ Α<13)
-      αλλά να μην κατανοούν ότι μπορούν να εκχωρούν τα αποτελέσματα των λογικών εκφράσεων σε λογικές μεταβλητές (π.χ. εντός_ορίων <-- Α>5 ΚΑΙ Α<13) γιατί είναι λάθος;

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

Όχι όμως να παρουσιάζουμε ασυνέπειες στις έννοιες που διδάσκουμε.

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

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

Η έκφραση:
Είναι_πολύτεκνος <-- αριθμός_παιδιών > 3

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

ΑΝ αριθμός_παιδιών > 3 ΤΟΤΕ
  Είναι_Πολύτεκνος <-- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
  Εϊναι_Πολύτεκνος <-- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ

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

Τι νομίζετε;

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