🔍 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής
Στις δομές επιλογής μπορούν να εμφανιστούν λογικά λάθη που συνήθως σχετίζονται με:
- Τις συνθήκες που ελέγχονται.
- Τις ομάδες εντολών που εκτελούνται όταν η συνθήκη είναι αληθής ή ψευδής.
Συχνά, τα λανθασμένα αποτελέσματα οφείλονται σε λάθος τιμές από προηγούμενες εντολές, οι οποίες επηρεάζουν τη συνθήκη.
🧑🏫 Παράδειγμα 4 – Λογικά λάθη σε δομή επιλογής
Η εκφώνηση περιγράφει ένα πρόγραμμα που διαβάζει την ηλικία ενός επιβάτη και υπολογίζει την τιμή του εισιτηρίου ανάλογα με την ηλικία του. Εάν η ηλικία είναι πάνω από 18, ο επιβάτης πληρώνει κανονικό εισιτήριο 1€. Διαφορετικά, πληρώνει μισό εισιτήριο.
💻 Κώδικας Προγράμματος σε ΓΛΩΣΣΑ [5.7]
ΠΡΟΓΡΑΜΜΑ Αντίτιμο_εισιτηρίου
ΣΤΑΘΕΡΕΣ
Κανονικό_εισιτήριο = 1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ηλικία
ΠΡΑΓΜΑΤΙΚΕΣ: Αντίτιμο
ΑΡΧΗ
ΓΡΑΨΕ 'Δώσε ηλικία'
ΔΙΑΒΑΣΕ ηλικία
ΑΝ ηλικία > 18 ΤΟΤΕ
Αντίτιμο <- Κανονικό_εισιτήριο
ΑΛΛΙΩΣ
Αντίτιμο <- 0.5*Κανονικό_εισιτήριο
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'Το αντίτιμο του εισιτηρίου είναι:', Αντίτιμο
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
❗ Απάντηση
Τιμές εισόδου για έλεγχο
Α/Α | Τιμή εισόδου (Ηλικία) | Αναμενόμενο αποτέλεσμα (Αντίτιμο) | Αποτέλεσμα συνθήκης ηλικία > 18 | Τιμή μεταβλητής Αντίτιμο | Ορθότητα αποτελέσματος |
---|---|---|---|---|---|
1 | 17 | 0.5 | ψευδής | 0.5 | Σωστό |
2 | 18 | 0.5 | ψευδής | 0.5 | Λάθος |
3 | 19 | 1 | αληθής | 1 | Σωστό |
Συμπέρασμα - Προτάσεις διόρθωσης
Το πρόγραμμα εμφανίζει λάθος αποτέλεσμα όταν η ηλικία είναι 18. Αυτό συμβαίνει γιατί η συνθήκη ηλικία > 18
πρέπει να γίνει ηλικία >= 18
για να καλύπτει σωστά την περίπτωση των 18 ετών.
💧 Παράδειγμα Χρέωσης Ύδρευσης
Ας δούμε ένα άλλο παράδειγμα για τον υπολογισμό χρέωσης ύδρευσης με βάση τα κυβικά που καταναλώθηκαν. Ο υπολογισμός γίνεται κλιμακωτά ανάλογα με την ποσότητα κατανάλωσης.
💻 Κώδικας Προγράμματος Χρέωσης Ύδρευσης
ΠΡΟΓΡΑΜΜΑ Χρέωση_ύδρευσης
ΣΤΑΘΕΡΕΣ
πάγιο = 8
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ: κυβικά, οφειλή
ΑΡΧΗ
ΓΡΑΨΕ 'Δώσε τα κυβικά που καταναλώθηκαν'
ΔΙΑΒΑΣΕ κυβικά
ΑΝ κυβικά < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Μη αποδεκτή τιμή.'
ΑΛΛΙΩΣ_ΑΝ κυβικά < 10 ΤΟΤΕ
οφειλή <- 8 + κυβικά*0.4
ΑΛΛΙΩΣ_ΑΝ κυβικά <= 20 ΤΟΤΕ
οφειλή <- 8 + 10*0.4 + (κυβικά - 10)*0.5
ΑΛΛΙΩΣ
οφειλή <- 8 + 10*0.4 + 10*0.5 + (κυβικά - 20)*0.6
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'Οφειλή=', οφειλή
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Τιμές εισόδου και αποτελέσματα
Α/Α | Τιμή εισόδου (κυβικά) | Αληθής συνθήκη (1η στη σειρά) | Αναμενόμενο αποτέλεσμα (Οφειλή) | Έξοδος προγράμματος | Ορθότητα αποτελέσματος |
---|---|---|---|---|---|
1 | -1 | ΑΝ κυβικά < 0 | Μη αποδεκτή τιμή | Μη αποδεκτή τιμή | Σωστό |
2 | 0 | ΑΛΛΙΩΣ_ΑΝ κυβικά < 10 | 8 | 8 | Σωστό |
3 | 8 | ΑΛΛΙΩΣ_ΑΝ κυβικά < 10 | 8 + 8*0.4 = 8+3.2 = 11.2 | 11.2 | Σωστό |
4 | 10 | ΑΛΛΙΩΣ_ΑΝ κυβικά <= 20 | 8 + 10*0.4 = 12 | 12 | Σωστό |
5 | 15 | ΑΛΛΙΩΣ_ΑΝ κυβικά <= 20 | 12 + 5*0.5 = 14.5 | 14.5 | Σωστό |
6 | 20 | ΑΛΛΙΩΣ_ΑΝ κυβικά <= 20 | 12 + 10*0.5 = 17 | 17 | Σωστό |
7 | 21 | ΑΛΛΙΩΣ | 17 + 1*0.6 = 17.6 | 9.6 | Λάθος |
Συμπεράσματα - Προτάσεις διορθώσεων
Η τιμή εισόδου 21 οδηγεί σε λανθασμένο αποτέλεσμα. Η εντολή στην 18η γραμμή χρειάζεται διόρθωση.
Προτεινόμενη Διόρθωση [5.9]
οφειλή <- 8 + 10*0.4 + 10*0.5 + (κυβικά - 20)*0.6
Παρατήρηση:
Όταν η μεταβλητή κυβικά έχει τιμή 10, οι συνθήκες κυβικά < 10
και κυβικά <= 10
έχουν το ίδιο αποτέλεσμα.
Ο Ευκλείδης λειτουργεί μέσω τεχνητής νοημσύνης