Γενικό Λύκειο > Δομή ακολουθίας

Μια λογική μεταβλητή αποτελεί λογική συνθήκη;

(1/4) > >>

wmaster:
Καλημέρα,
βλέπω, σε προτεινόμενα διαγωνίσματα, μια λογική συνθήκη να περίεχει μόνο λογική μεταβλητή χωρίς συγκριτικό τελεστή.
π.χ. με δεδομένο ότι η Χ είναι λογική μεταβλητή
       Αν Χ Τότε
Η εντολή αυτή είναι έγκυρη στις περισσότερες γλώσσες προγραμματισμού. Στην ΓΛΩΣΣΑ, σύμφωνα με το σχολικό βιβλίο : "Η συνθήκη είναι μια λογική έκφραση", σελ 39 και "Μια έκφραση μπορεί να αποτελείται από μια μόνο μεταβλητή ή σταθερά", σελ.37 (ΟΧΙ ΛΟΓΙΚΗ ΕΚΦΡΑΣΗ) Από αυτά συμπεραίνεται ότι και στην ΓΛΩΣΣΑ μάλλον ισχύει το ίδιο. Όμως στην σελ. 139 το βιβλίο αναφέρει "Στις λογικές εκφράσεις γίνεται σύγκριση της τιμής μίας έκφρασης, που βρίσκεται αριστερά από το συγκριτικό τελεστή με την τιμή μιας άλλης έκφρασης που βρίσκεται δεξιά".. ...
Κατά την γνώμη μου θα πρέπει να αποφεύγεται. Είναι πιο απλό και "καθαρό" να χρησιμοποιείται συγκριτικός τελεστής στις συνθήκες :
Αν Χ=ΑΛΗΘΗΣ τότε 


pgrontas:
Διαφωνώ κάθετα.

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

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

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


Στην ουσία τώρα:
Το "Αν Χ=ΑΛΗΘΗΣ" είναι πλεονασμός. Ελέγχεται ότι το "Χ=ΑΛΗΘΗΣ" είναι αληθής, ενώ μπορεί να ελεγχθεί αν το Χ είναι αληθής. Σαφώς απλούστερο είναι το δεύτερο.
Αυτό έχει αρνητικές συνέπειες στην ανάγνωσιμότητα του κώδικα, όπου με κατάλληλα ονόματα μεταβλητών (ένα επιπλέον κίνητρο) ο μαθητής μπορεί να καταλαβαίνει άμεσα τι κάνει ο αλγόριθμος (πχ. αν βρέθηκε, αν είναι_ταξινομημένος κλπ.)

Τέλος ειδικά στο μάθημά πρέπει να στοχεύουμε στο: Programs must be written for people to read, and only incidentally for machines to execute (Harold Abelson).

wmaster:
Στην σελίδα 139 δεν αναφέρομε σε κάποιο παράδειγμα αλλά στην παράγραφο "Για τη σύνταξη μιας λογικής έκφρασης ή συνθήκης χρησιμοποιούνται σταθερές, μεταβλητές, αριθμητικές παραστάσεις, συγκριτικοί και λογικοί τελεστές, καθώς και παρενθέσεις. Στις λογικές εκφράσεις γίνεται σύγκριση της τιμής μίας έκφρασης, που βρίσκεται αριστερά από το συγκριτικό
τελεστή με την τιμή μιας άλλης έκφρασης που βρίσκεται δεξιά. Το αποτέλεσμα είναι μία λογική τιμή ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ.
Αμέσως παρακάτω, στον πίνακα, στα παραδείγματα που δίνονται, δεν υπάρχει κάτι τέτοιο παράδειγμα που αναφέρεις.

Δεν λέω ότι δεν γίνεται στις γλώσσες προγραμματισμού, αλλά στην ΓΛΩΣΣΑ υπάρχει τουλάχιστον ασάφεια.

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

Ο καθένας κάνει τις επιλογές του.

bugman:
To θέμα της έκφρασης στη ΓΛΩΣΣΑ έχει ένα σκοτεινό σημείο. Αν καλέσουμε ένα υποπρόγραμμα και δώσουμε μια έκφραση λογική ως όρισμα, τότε η τυπική παράμετρος θα πάρει την τιμή της. Αν δώσουμε μόνο μια λογική μεταβλητή τότε η τυπική παράμετρος θα είναι η μεταβλητή που δώσαμε. Για να το αποφύγουμε αυτό πρέπει να περάσουμε την λογική μεταβλητή με παρενθέσεις, ώστε ο διερμηνευτής να περάσει μόνο την τιμή.
Σε όποια εντολή η ΓΛΩΣΣΑ ζητάει συνθήκη αυτή θα περαστεί με τιμή, έτσι ακόμα και για μια λογική μεταβλητή οι παρενθέσεις δεν χρειάζονται.
Αν έχουμε όμως μια αριθμητική μεταβλητή, έστω ακέραια, δεν μπορούμε να την βάλουμε μόνη της όπως μια λογική μεταβλητή γιατί η ΓΛΩΣΣΑ δεν έχει κανόνα μετατροπής. Αναγκαστικά πρέπει να βάλουμε τελεστή. Αν για παράδειγμα το Χ έχει τιμή 1 τότε μια Χ<>0 ή Χ!=0 κάνει την μετατροπή σε λογική, ώστε η μη μηδενική τιμή να είναι αληθής, και η μηδενική να είναι ψευδής. Μπορούμε να φτιάξουμε μια συνάρτηση που θα μετατρέπει μια λογική έκφραση σε 0 για ψευδής και -1 για αληθής (γενικά το -1 παίζει για αληθής, το συμπληρωματικό του -1 είναι το 0, όταν χρησιμοποιούμε αρνητικούς με δυαδική απεικόνιση το συμπλήρωμα του δύο).

pgrontas:
@wmaster Δεν ισχυρίστηκα ότι το Χ = ΑΛΗΘΗΣ είναι λάθος, αλλά ότι το να θεωρήσουμε το μια λογική μεταβλητή ως λογική έκφραση και να το βάζουμε σκέτο στις συνθήκες έχει κάποια πλεονεκτήματα.

Όταν αναφέρθηκα σε παράδειγμα στην σελίδα 139, εννοούσα την παράγραφο  που έφερες ως παράδειγμα:

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

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

Δηλαδή αν έπεφτε Σ-Λ στις εξετάσεις: Σε μια λογική εκφράση πρέπει να υπάρχει οπωσδήποτε συγκριτικός τελεστής και κάποιος απαντούσε Λ δεν θα το έπιανες σωστό. Αυτό εννοείς; Κατά συνέπεια και λογική έκφραση μόνο με λογικούς τελεστές και λογικές μεταβλητές γίνεται αποδεκτή;

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Μετάβαση στην πλήρη έκδοση