Μετάβαση στο περιεχόμενο
Topos Uranos

Περίληψη

Μια συνθήκη είναι μια έκφραση της οποίας η τιμή είναι αληθής ή ψευδής. Το μάθημα αυτό μελετά πώς κατασκευάζονται οι συνθήκες στη C++: τους έξι σχεσιακούς τελεστές, που συγκρίνουν δύο τιμές και παράγουν ένα bool· τους τρεις λογικούς συνδέσμους, &&, || και !, που συνδυάζουν συνθήκες όπως η σύζευξη, η διάζευξη και η άρνηση της λογικής· και την προτεραιότητα που τους διατάσσει μεταξύ τους και σε σχέση με την αριθμητική. Μελετά επίσης δύο γνωρίσματα στα οποία η C++ απομακρύνεται από τη μαθηματική γραφή: την αλυσίδα 1 < x < 5, που μεταγλωττίζεται και δεν σημαίνει αυτό που φαίνεται, και την αποτίμηση βραχυκύκλωσης, κατά την οποία ο δεύτερος τελεσταίος του && και του || δεν αποτιμάται όταν ο πρώτος έχει ήδη κρίνει το αποτέλεσμα, πράγμα που επιτρέπει να προστατευθεί μια επικίνδυνη πράξη. Κλείνει με την άρνηση σύνθετων συνθηκών μέσω των νόμων του Ντε Μόργκαν, επαληθευμένη με πίνακες αληθείας, και με το κεντρικό του παράδειγμα: τη συνθήκη του δίσεκτου έτους και την άρνησή της. Η ενότητα δεν έχει ακόμη αποφάσεις: οι συνθήκες αποτιμώνται και τυπώνονται ως true ή false, και το μάθημα Αποφάσεις θα τις βάλει να κατευθύνουν το πρόγραμμα.

Μαθησιακοί στόχοι

  1. Να γράφετε στη C++ σύνθετες συνθήκες που μεταφράζουν διατυπώσεις όπως «το xx βρίσκεται μεταξύ 1 και 10, συμπεριλαμβανομένων των άκρων».
  2. Να αρνείστε μια σύνθετη συνθήκη με τους νόμους του Ντε Μόργκαν και να επαληθεύετε την ισοδυναμία με έναν πίνακα αληθείας.
  3. Να χρησιμοποιείτε την αποτίμηση βραχυκύκλωσης για να προστατεύετε μια πράξη, όπως στο count != 0 && total / count > 2.
  4. Να εντοπίζετε το σφάλμα της γραφής 1 < x < 5, να εξηγείτε τι υπολογίζει και να το διορθώνετε.

Η συνθήκη ως έκφραση

Το μάθημα Χαρακτήρες, λογικές τιμές, μετατροπές και σταθερές παρουσίασε τον τύπο bool, με τις δύο τιμές του true και false, και το μάθημα Αριθμητικές πράξεις έδειξε ότι μια έκφραση έχει ένα δέντρο, που το καθορίζουν η προτεραιότητα και η προσεταιριστικότητα, και έναν τύπο, που τον καθορίζουν οι τελεσταίοι της. Το μάθημα αυτό ενώνει τις δύο ιδέες. Μια συνθήκη είναι μια έκφραση τύπου bool: όχι μια εντολή που ρωτά κάτι, αλλά ένας υπολογισμός του οποίου το αποτέλεσμα είναι μια απάντηση. Το count < 10 υπολογίζεται όπως το count + 1: παίρνονται οι τελεσταίοι, εφαρμόζεται ο τελεστής και προκύπτει μια τιμή, μόνο που η τιμή είναι true ή false αντί για αριθμό. Αν αυτό ισχύει, ό,τι ισχύει για τις αριθμητικές εκφράσεις ισχύει και για τις συνθήκες: έχουν προτεραιότητα, έχουν δέντρο, μπορούν να αποθηκευτούν σε μια μεταβλητή με όνομα (const bool inRange{…}) και μπορούν να τυπωθούν. Από αυτό προκύπτει το ερώτημα που διατρέχει το μάθημα: δεδομένης μιας πρότασης («το έτος είναι δίσεκτο», «η ηλικία είναι μεταξύ 18 και 65»), ποια έκφραση έχει ακριβώς αυτή την τιμή αλήθειας για όλα τα δυνατά δεδομένα;