Λογότυπο ήδη-έτερον

🔍 Εκσφαλμάτωση λογικών λαθών στις δομές επιλογής

Στις δομές επιλογής μπορούν να εμφανιστούν λογικά λάθη που συνήθως σχετίζονται με:

  • Τις συνθήκες που ελέγχονται.
  • Τις ομάδες εντολών που εκτελούνται όταν η συνθήκη είναι αληθής ή ψευδής.

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

🧑‍🏫 Παράδειγμα 4 – Λογικά λάθη σε δομή επιλογής

Η εκφώνηση περιγράφει ένα πρόγραμμα που διαβάζει την ηλικία ενός επιβάτη και υπολογίζει την τιμή του εισιτηρίου ανάλογα με την ηλικία του. Εάν η ηλικία είναι πάνω από 18, ο επιβάτης πληρώνει κανονικό εισιτήριο 1€. Διαφορετικά, πληρώνει μισό εισιτήριο.

💻 Κώδικας Προγράμματος σε ΓΛΩΣΣΑ [5.7]

ΠΡΟΓΡΑΜΜΑ Αντίτιμο_εισιτηρίου
ΣΤΑΘΕΡΕΣ
  Κανονικό_εισιτήριο = 1
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ηλικία
  ΠΡΑΓΜΑΤΙΚΕΣ: Αντίτιμο
ΑΡΧΗ
  ΓΡΑΨΕ 'Δώσε ηλικία'
  ΔΙΑΒΑΣΕ ηλικία
  ΑΝ ηλικία > 18 ΤΟΤΕ
    Αντίτιμο <- Κανονικό_εισιτήριο
  ΑΛΛΙΩΣ
    Αντίτιμο <- 0.5*Κανονικό_εισιτήριο
  ΤΕΛΟΣ_ΑΝ
  ΓΡΑΨΕ 'Το αντίτιμο του εισιτηρίου είναι:', Αντίτιμο
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

❗ Απάντηση

Τιμές εισόδου για έλεγχο

Α/ΑΤιμή εισόδου (Ηλικία)Αναμενόμενο αποτέλεσμα (Αντίτιμο)Αποτέλεσμα συνθήκης ηλικία > 18Τιμή μεταβλητής ΑντίτιμοΟρθότητα αποτελέσματος
1170.5ψευδής0.5Σωστό
2180.5ψευδής0.5Λάθος
3191αληθής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Μη αποδεκτή τιμήΜη αποδεκτή τιμήΣωστό
20ΑΛΛΙΩΣ_ΑΝ κυβικά < 1088Σωστό
38ΑΛΛΙΩΣ_ΑΝ κυβικά < 108 + 8*0.4 = 8+3.2 = 11.211.2Σωστό
410ΑΛΛΙΩΣ_ΑΝ κυβικά <= 208 + 10*0.4 = 1212Σωστό
515ΑΛΛΙΩΣ_ΑΝ κυβικά <= 2012 + 5*0.5 = 14.514.5Σωστό
620ΑΛΛΙΩΣ_ΑΝ κυβικά <= 2012 + 10*0.5 = 1717Σωστό
721ΑΛΛΙΩΣ17 + 1*0.6 = 17.69.6Λάθος

Συμπεράσματα - Προτάσεις διορθώσεων

Η τιμή εισόδου 21 οδηγεί σε λανθασμένο αποτέλεσμα. Η εντολή στην 18η γραμμή χρειάζεται διόρθωση.

Προτεινόμενη Διόρθωση [5.9]

οφειλή <- 8 + 10*0.4 + 10*0.5 + (κυβικά - 20)*0.6

Παρατήρηση:

Όταν η μεταβλητή κυβικά έχει τιμή 10, οι συνθήκες κυβικά < 10 και κυβικά <= 10 έχουν το ίδιο αποτέλεσμα.

Ο Ευκλείδης λειτουργεί μέσω τεχνητής νοημσύνης