πλήρης αποτίμηση λογ. εκφράσεων - Γιατί;

Ξεκίνησε από gthal, 08 Φεβ 2011, 11:09:56 ΠΜ

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

gthal

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

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

Όταν κάνουμε τη σειριακή αναζήτηση και "ανακαλύπτουμε" τον αλγόριθμο με τα παιδιά, ξεκινώντας από τη ΓΙΑ και καθώς την αλλάζουμε σε ΟΣΟ για τους γνωστούς λόγους, εκεί κάποιοι μαθητές πάρα πολύ συχνά αναφωνούν με χαρά "το βρήκα!" :
Διάβασε Χ
i<-1
Όσο i<=N και Α[i]<>X επανάλαβε
  i <- i +1
τέλος_επανάληψης

Υπέροχη αλγοριθμική σκέψη μέσα από την απλότητά της!
Τότε βρίσκομαι στην πολύ δυσάρεστη θέση να απαντήσω ότι αυτό είναι σωστό, όμως ο τρόπος που έχει υλοποιηθεί η ΓΛΩΣΣΑ (γιατί άραγε; ) δε μας επιτρέπει να το γράψουμε και εξηγώ το γιατί. Αισθάνομαι πάντα ότι τη στιγμή εκείνη καταστρέφω κάτι παρά δημιουργώ :(

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

Και μια άσκηση που τη θεωρώ ωραία και πρωτότυπη για τη στιγμή που την πρωτοσυναντούν οι μαθητές:
"... κερδίζουν οι 10 πρώτοι και αν κάποιοι ισοβαθμούν στην τελευταία θέση να κερδίζουν όλοι"
Κατά τη γνώμη μου, ένας μαθητής που μετά την ταξινόμηση συνεχίζει κάπως έτσι
i<-11
ΟΣΟ i<=N ΚΑΙ Α[i]=A[10] ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ i
  i <- i+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ήδη έχει κάνει ένα βήμα στην αναλυτικο-συνθετική του ικανότητα και στην αλγοριθμική του σκέψη. Δε θα ήθελα να χρειάζεται να του το μειώσω επισημαίνοντας ότι ο κώδικάς του θα "χτυπήσει" εξαιτίας ενός αψυχολόγητου περιορισμού της ΓΛΩΣΣΑΣ, και να του το φορτώσω με λογικές μεταβλητές και ελέγχους για ξεπεραστεί αυτή η δυσκολία. Πολλοί θα χάσουν και την ουσία του ερωτήματος ή το ενδιαφέρον για τη λύση, αν το βάρος των υπόλοιπων "μπιχλιμπιδιών" τους πέσει πολύ.
Αν δε, το έγραφε σε ψευδογλώσσα, τότε (δική μου άποψη είναι ότι) δεν θα είχα ούτε το δικαίωμα να του πω ότι θα "χτυπήσει". Δεν "χτυπάει" η ψευδογλώσσα. Δεν είναι καν για να τρέξει στον υπολογιστή. Βέβαια, έτσι που την ορίζει το βιβλίο, την έχει ανάγει -πολύ κακώς για μένα- σε γλώσσα προγραμματισμού (μπορούμε να την περνάμε κι από διερμηνευτή!). Και μάλιστα σε μια δίδυμη αδερφή της ΓΛΩΣΣΑΣ με εντελώς επουσιώδεις διαφορές. Κι αυτό βέβαια είναι ένα ολόκληρο διαφορετικό θέμα, στο οποίο πολλοί θα διαφωνούμε και είναι αυτό νομίζω που γέννησε τις μεγάλες μας διαφορές στο θέμα του περσινού Μαΐου. Η ψευδογλώσσα, έναντι στην ψευδογλώσσατου βιβλίου, όπως έχει τονίσει και κάπου αλλού ο Ευριπίδης.
Φιλικά,
Γιώργος Θαλασσινός

lp

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

Κάνω κάτι λάθος;
Λέων Προκόπης
2ο ΓΕΛ Ναυπλίου

gthal

Στο "Εργαλεία" --> "Επιλογές"  διάλεξε το tab "Γλώσσα"
εκεί έχει μια επιλογή "Να γίνεται πλήρης αποτίμηση των λογικών εκφράσεων"
προφανώς σ' εσένα δεν είναι επιλεγμένη.
Αν την επιλέξεις, το τμήμα αυτό θα χτυπήσει.
Και (νομίζω) από default θεωρούμε ότι η ΓΛΩΣΣΑ κάνει πλήρη αποτίμηση. Ή μήπως κάνω λάθος;
(ναι, για το Ν σωστά φαντάστηκες)
Φιλικά,
Γιώργος Θαλασσινός

gpapargi

Γιώργο είμαι υπέρ της πλήρους αποτίμησης για 2 λόγους:

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

Συμφωνώ ότι ψευδής και αληθής = ψευδής όπως και ψευδής και ψευδής = ψευδής. Δηλαδή ψευδής και κάτι (που είναι ψευδής ή αληθής) μας κάνει ψευδής. Αλλά εδώ έχουμε κάτι που δεν έχει νόημα γιατί τι α[ν+1] δεν υπάρχει. Ψευδής και κάτι που δεν έχει νόημα δεν ορίζεται. Δηλαδή δεν είναι καλά ορισμένη η πράξη. Το χρησιμοποιούμε προγραμματιστικά γιατί μας βολεύει λόγω του ότι δεν μπλέκουμε με λεπτομέρειες. Όμως εδώ είναι εκπαιδευτικό το ζήτημα και προτιμώ να ξέρει ο μαθητής κάθε στιγμή τι ακριβώς κάνει. Γενικά θέλω να καταλάβει γρήγορα ότι ο υπολογιστής (γενικά αυτός που εκτελεί τον αλγόριθμο) κάνει αυτό που του είπαμε να κάνει και όχι αυτό που θέλουμε να κάνει. Θέλω δηλαδή στα πρώτα του βήματα ο μαθητής να καταλαβαίνει το ακριβές νόημα αυτού που γράφει. Νομίζω θα του κάνει καλό.

Πέρα από αυτό δες και το εξής:

Αν υπάρχει η μερική αποτίμηση συνθηκών τότε το

Όσο i<=N και Α<>X επανάλαβε

Είναι διαφορετικό από το

Όσο Α<>X και i<=N επανάλαβε

Στην πρώτη περίπτωση θα αποτιμηθεί πρώτα το i<=N και θα βει ψευδής η συνθήκη, ενώ στη δεύτερη περίπτωση θα αποτιμηθεί πρώτα το Α<>X και θα χτυπήσει error γιατί βγήκαμε έξω από το όριο του πίνακα. Δείχνει δηλαδή σαν να μην ισχύει η αντιμεταθετική ιδιότητα του τελεστή ΚΑΙ. Αυτό εμένα δε μου αρέσει... ειδικά σε εκπαιδευτικό περιβάλλον. Το είχαμε δοκιμάσει παλιά από ότι θυμάμαι με τον Άλκη.

Για τους παραπάνω λόγους εγώ είχα στηρίξει την άποψη υπέρ της πλήρους αποτίμησης. Είχαν στηριχτεί και οι 2 απόψεις τότε με επιχειρήματα. Τελικά επικράτησε η πλήρης αποτίμηση. 

Για το θέμα ΓΛΩΣΣΑΣ/ψευδογλώσσας εγώ πιστεύω ότι δεν πρέπει να δεχόμαστε λύσεις σε ψευδογλώσσα που δεν έχουν ελπίδα να μεταφερθούν στο «διπλανό» προγραμματιστικό περιβάλλον που είναι η ΓΛΩΣΣΑ. Αυτό καθαρά για παιδαγωγικούς σκοπούς.

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

ι<-0
Αρχή επανάληψης
   ι<-ι+1
   ...
Μέχρις_ότου ι=ν ή ...

Δηλαδή η αλλαγή του μετρητή στην αρχή. Είσαι μονίμως εντός ορίων του πίνακα και πρώτα φτάνεις στο στοιχείο και μετά το επεξεργάζεσαι. Θα έλεγα είναι ο «φυσικός» τρόπος να σαρώνεις πίνακα. Δεν είναι τυχαίο ότι όταν το πράγμα δυσκολέψει (πχ στην έξυπνη φυσαλίδα) το γυρίζουμε σε Μέχρις_ότου. Την Όσο την προτιμάω γιατί δε θέλω να απομακρύνω πολύ τους μέτριους από τη λύση του βιβλίου. Θα αισθάνονται ανασφάλεια.

gthal

Χαίρομαι που σε "βλέπω" Γιώργο!
Παράθεση από: gpapargi στις 09 Φεβ 2011, 09:25:53 ΠΜ
Αλλά εδώ έχουμε κάτι που δεν έχει νόημα γιατί τι α[ν+1] δεν υπάρχει.
Θα έλεγα ακριβώς έτσι πρέπει να δούμε τη μερική αποτίμηση: με την προϋπόθεση ότι η πρώτη συνθήκη ισχύει, θα κοιταχθεί η δεύτερη. Άρα στην Όσο i<=N και Α[ι]<>X όσο το i είναι μικρότερο ή ίσο του Ν, έχει νόημα το Α[ι]. Γιαυτό και επίτηδες μπαίνει η i<=N πρώτη ώστε να εξασφαλίζει ότι το Α[ι] στη δεύτερη συνθήκη έχει νόημα. Το αντίστροφο δεν θα δούλευε.

Παράθεση από: gpapargi στις 09 Φεβ 2011, 09:25:53 ΠΜ
Δείχνει δηλαδή σαν να μην ισχύει η αντιμεταθετική ιδιότητα του τελεστή ΚΑΙ. Αυτό εμένα δε μου αρέσει... ειδικά σε εκπαιδευτικό περιβάλλον. Το είχαμε δοκιμάσει παλιά από ότι θυμάμαι με τον Άλκη.
χμμ  αυτό είναι ένα καλό επιχείρημα! Ούτε εμένα μου αρέσει για εκπαιδευτικό περιβάλλον - κατά τα άλλα δεν έχω πρόβλημα να το δεχθώ.

Αυτό βέβαια τώρα μου φαίνεται ότι προκαλεί κατ' ανάγκη μια άλλη ασυνέπεια:
Πολλοί από εμάς θα λέγαμε ως τώρα ότι αυτό:
Αν συνθήκη_1 τότε
  Αν συνθήκη_2 τότε

είναι ισοδύναμο με:
Αν συνθήκη_1 και συνθήκη_2 τότε

Αυτό πλέον δεν είναι αλήθεια διότι:
Αν i<=N τότε
  Αν Α[ι] = 0 τότε ....

δεν είναι ισοδύναμο με
Αν i<=N και Α[ι]=0 τότε
Φιλικά,
Γιώργος Θαλασσινός

gpapargi

Παράθεση από: gthal στις 09 Φεβ 2011, 01:24:34 ΜΜ
Θα έλεγα ακριβώς έτσι πρέπει να δούμε τη μερική αποτίμηση: με την προϋπόθεση ότι η πρώτη συνθήκη ισχύει, θα κοιταχθεί η δεύτερη. Άρα στην Όσο i<=N και Α[ι]<>X όσο το i είναι μικρότερο ή ίσο του Ν, έχει νόημα το Α[ι]. Γιαυτό και επίτηδες μπαίνει η i<=N πρώτη ώστε να εξασφαλίζει ότι το Α[ι] στη δεύτερη συνθήκη έχει νόημα. Το αντίστροφο δεν θα δούλευε.

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

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

Κάποιες όμοιες συζητήσεις:

https://alkisg.mysch.gr/steki/index.php?topic=2473.0
https://alkisg.mysch.gr/steki/index.php?topic=752.0

Ως προς την τεχνική πλευρά του ζητήματος, παραθέτω ένα απόσπασμα:

Παράθεση από: Νίκος Αδαμόπουλος στις 08 Δεκ 2009, 01:26:13 ΠΜ
...

Σε κάποιες γλώσσες αυτό το χαρακτηριστικό δεν υποστηρίζεται και οι λογικοί τελεστές αποτιμούν κανονικά όλες τις προτάσεις μιας λογικής έκφρασης, π.χ. fortran, vb.

Σε κάποιες άλλες η "μερική αποτίμηση" είναι ο μόνος τρόπος αποτίμησης των λογικών εκφράσεων, π.χ. C, C++.

Στις πιο σύγχρονες γλώσσες (π.χ. σε Java, Perl, PHP, Python, Ruby, VB.NET) υποστηρίζονται και οι δύο τρόποι υπολογισμού χρησιμοποιώντας διαφορετικούς τελεστές, για παράδειγμα με τους τελεστές and και andalso, or και orelse.

Βλ. http://en.wikipedia.org/wiki/Short-circuit_evaluation
...

Επομένως, αφού υπάρχουν 3 διαφορετικές προσεγγίσεις στις γλώσσες προγραμματισμού, και αφού στο βιβλίο δεν αναφέρεται τίποτα σχετικό, γιατί εμείς να υιοθετήσουμε ειδικά την "μερική αποτίμηση" για τους τελεστές ΚΑΙ και Ή;

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

Όσο done=ψευδής και ι<=N και table[ι]<=key επανάλαβε

(αν και αρχικά δίνουν το ... table[ι]<key  ... )

Δεν θυμάμαι ποτέ να μου έχουν προτείνει από μόνοι τους άλλη λύση, π.χ. με λογική μεταβλητή, ή με βίαιη αλλαγή του ι <- Ν+1, κ.λπ. Βέβαια εξηγώ στα παιδιά ότι αφού μάλλον έχουμε πλήρη αποτίμηση λογικών εκφράσεων, τότε θα πρέπει να στραφούν σε άλλες προσεγγίσεις... Ωστόσο δεν είμαι σίγουρος αν, παιδαγωγικά πάντα και στο πλαίσιο της διδακτικής, είναι καλύτερη η μία ή η άλλη άποψη...

gthal

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

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

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

Μααα... και εγώ "μερική αποτίμηση" έβαλα! Επισυνάπτω και εικόνα! Δες το 3ο από τα αποτελέσματα... και ωω ναι:

Έχει μόνο από το Στέκι τα:

Όρια πίνακα - 7 Φεβ. 2008
πλήρης αποτίμηση λογ. εκφράσεων - Γιατί;‎ - 8 Φεβ. 2011
Εσπερινά 2010‎ - 22 Μάιος 2010
Αποτίμηση Συνθήκης και Πίνακες σε Αλγόριθμο‎ - 8 Δεκ. 2009
Προτεραιότητα ελέγχου παράστασης σε επανάληψη‎ - 25 Μάιος 2008
Περισσότερα αποτελέσματα από το users.sch.gr »


Το 4ο και 1ο είναι τα links έστειλα..., το 2ο είναι ... εμμ χμμ ...  το δικό σου θέμα (!), το δε 3ο είναι για αυτό που είχα παρατηρήσει για ένα θέμα των εσπερινών 2010 και που πρόσφατα σχολίασε ο Σέργιος: https://alkisg.mysch.gr/steki/index.php?topic=3599.msg37061#msg37061

gthal

χμμ..  πολύ ενδιαφέρον! Λοιπόν, κοίτα να δεις τι γίνεται :  (μου έχει σπάσει πολλές φορές τα νεύρα αυτή η αναζήτηση, γιατί ξέρω ότι υπάρχει αυτό που ψάχνω αλλά δεν το βρίσκω)
εγώ δεν ψάχνω στο google, ψάχνω μέσα το φόρουμ (στο κουτάκι πάνω δεξιά που λέει αναζήτηση)
μάλιστα, θεωρούσα ότι αν βρίσκομαι στο "Το Στέκι των Πληροφορικών » Γενικό Λύκειο » Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον »", η αναζήτηση θα περιοριστεί μόνο εκεί, και όχι σε όλα τα τόπικς του φόρουμ (που, εν μέρει συμβαίνει μάλλον, γιατί και πιο γρήγορα τελειώνει η αναζήτηση και πιο περιορισμένα αποτελέσματα δίνει).
Ε λοιπόν, αν το κάνω αναζητώντας τη "μερική αποτίμηση", ξέρεις τι μου βγάζει; Μόνο το προηγούμενο μήνυμά σου (που φυσικά δεν υπήρχε ως χθες) !
Αν βγω σε όλο το φόρουμ και αναζητήσω το ίδιο πράγμα, τώρα βλέπω ότι μου δίνει πολύ περισσότερα αποτελέσματα (αν και  βρίσκονται στο "Το Στέκι των Πληροφορικών » Γενικό Λύκειο » Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον »")
Αν μάλιστα βγω στο Google να ψάξω όλο το web, όπως λες κι εσύ, θα βρω ακόμα πιο εύκολα ό,τι είναι στο "Το Στέκι των Πληροφορικών » Γενικό Λύκειο » Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον »:D
Ομολογώ ότι δεν καταλαβαίνω τι παίζει ...  ::) :angel:
Φιλικά,
Γιώργος Θαλασσινός