Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή ακολουθίας => Μήνυμα ξεκίνησε από: Γιώργος στις 16 Νοε 2005, 12:04:37 ΜΜ

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

Γιώργο, χρειάστηκε να τροποποιήσω λίγο το αρχικό θέμα γιατί με την κουβέντα τελικά πήρε και άλλη διάσταση... Σέργιος
Τίτλος: Re: Πρόσθεση χαρακτήρων
Αποστολή από: Άρης Βερνάρδος στις 16 Νοε 2005, 04:15:53 ΜΜ
Αγαπητέ Γιώργο,
από τη στιγμή που το σχ. βιβλίο δεν προβλέπει κάτι, θεωρώ ότι αποκλείεται να ζητηθεί. Κάτι τέτοιο θα είχε νόημα αν το σχ. βιβλίο συνοδευόταν από επίσημο compiler, που όπως ξέρεις δεν υπάρχει.
Το μόνο που θα μπορούσαμε να κάνουμε θα ήταν υποθέσεις, βλέποντας τι ισχύει σε άλλες γλώσσες προγραμματισμού, αλλά νομίζω ότι κάτι τέτοιο δεν θα ήταν ασφαλές.
Τίτλος: Re: Πρόσθεση χαρακτήρων
Αποστολή από: P.Tsiotakis στις 17 Νοε 2005, 11:26:49 ΠΜ

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

Με εκτίμηση,
Τίτλος: Re: Πρόσθεση χαρακτήρων
Αποστολή από: Sergio στις 17 Νοε 2005, 11:53:29 ΠΜ
Εύστοχη η τοποθέτηση του Παναγιώτη.  Αφού οι τελεστές έχουν ορισθεί σαφώς ως αριθμητικοί, ασφαλώς και δε δικαιούνται να χρησιμοποιηθούν σε πράξεις με χαρακτήρες.

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

Δε νομίζω όμως ότι πρέπει να μας απασχολήσει η αποτίμηση ανισοτήτων μεταξύ λογικών.  Μάλλον ξεφεύγει ε;;
Τίτλος: Re: Πρόσθεση χαρακτήρων
Αποστολή από: P.Tsiotakis στις 18 Νοε 2005, 08:58:21 ΠΜ
Για τη σύγκριση μεταξύ λογικών μεταβλητών μπορούν να χρησιμοποιηθούν μόνο οι τελεστές = και <> (μου διαφεύγει κάτι; )

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

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

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

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

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

Με εκτίμηση,
Τίτλος: Re: Πρόσθεση χαρακτήρων
Αποστολή από: alkisg στις 18 Νοε 2005, 11:28:28 ΠΜ
Αν θυμάμαι καλά το λέει ξεκάθαρα στο βιβλίο, ότι οι μόνοι συγκριτικοί τελεστές που επιτρέπονται στις λογικές μεταβλητές είναι οι = και <>. Επομένως σ' αυτό υπάρχει επίσημη απάντηση.

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

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

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

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

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

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

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

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

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

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

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

Τι νομίζετε;
Τίτλος: Re: Πρόσθεση χαρακτήρων + Λογικές Εκφράσεις
Αποστολή από: P.Tsiotakis στις 21 Νοε 2005, 03:02:20 ΜΜ
Ξεφύλλισα προσεκτικά τα βιβλία του διδακτικού πακέτου για να βεβαιωθώ και δεν βρήκα ούτε ένα σημείο που να αποδίδει το αποτέλεσμα μιας συνθήκης σε λογική μεταβλητή Π.χ. γ <-  (α > β)

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

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

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

Με εκτίμηση,
Τίτλος: Re: Πρόσθεση χαρακτήρων + Λογικές Εκφράσεις
Αποστολή από: Βαγγέλης Κανίδης στις 21 Νοε 2005, 10:34:41 ΜΜ
Σέργιε πιστεύω ότι εκφράσεις όπως
 Βρέθηκε <-- Όνομα[ i ] = Ζητούμενο_όνομα
δεν έχουν παιδαγωγική αξία στα πλαίσια των στόχων του μαθήματος, αντίθετα θα μπερδέψουν τους μαθητές.  Το πρόβλημα δεν είναι  η κατασκευή του βέλτιστου κώδικα αλλα η κατανόηση και η χρήση απλών δομών κώδικα.  Αν κάποιος θέλει αργότερα να ασχοληθεί καλώς να ορίσει στο club.

Προσωπικα την παραπάνω έκφραση αν την συναντούσα σε λύση άσκησης στις γενικές εξετάσεις θα την θεωρούσα λάθος.  
Τίτλος: Re: Πρόσθεση χαρακτήρων + Λογικές Εκφράσεις
Αποστολή από: Sergio στις 22 Νοε 2005, 01:17:44 ΠΜ
Βαγγέλη, συμφωνώ απόλυτα και μάλιστα, προσωπικά, θα «αποδοκίμαζα» τη χρήση τέτοιων προγραμματιστικών πρακτικών και σε πραγματικό περιβάλλον.  Νομίζω ότι είναι πολύ καταλληλότερη η δομή:

  ΑΝ Όνομα[ 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 ΤΟΤΕ
  Είναι_Πολύτεκνος <-- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
  Εϊναι_Πολύτεκνος <-- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ

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

Τι νομίζετε;

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