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

🖥️ Εκσφαλμάτωση λογικών λαθών στα υποπρογράμματα

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


💸 Παράδειγμα 9 – Εκσφαλμάτωση λογικού λάθους σε πρόγραμμα που χρησιμοποιεί υποπρόγραμμα

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

📝 Πίνακας Εσόδων και Εξόδων

ΜήναςΈσοδαΈξοδα
1ος μήνας20002000
2ος μήνας20002200
3ος μήνας23002300
4ος μήνας25002100
5ος μήνας18001500
6ος μήνας21002000

🔍 Κώδικας Προγράμματος

ΠΡΟΓΡΑΜΜΑ ΕΛΕΓΧΟΣ_ΖΗΜΙΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ι, Πλήθος, Μήνες_με_ζημία
  ΠΡΑΓΜΑΤΙΚΕΣ: ΕΣΟΔΑ[6], ΕΞΟΔΑ[6]
ΑΡΧΗ
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 6
    ΓΡΑΨΕ 'Δώσε τα έσοδα του ', Ι, 'ου μήνα:'
    ΔΙΑΒΑΣΕ ΕΣΟΔΑ[Ι]
    ΓΡΑΨΕ 'Δώσε τα έξοδα του ', Ι, 'ου μήνα:'
    ΔΙΑΒΑΣΕ ΕΞΟΔΑ[Ι]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Μήνες_με_ζημία <- Υπολογισμός(ΕΣΟΔΑ, ΕΞΟΔΑ)
  ΓΡΑΨΕ 'Μήνες που είχαν ζημία:', Μήνες_με_ζημία
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΣΥΝΑΡΤΗΣΗ Υπολογισμός(Πίνακας1, Πίνακας2): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ι, Πλήθος
  ΠΡΑΓΜΑΤΙΚΕΣ: Πίνακας1[6], Πίνακας2[6]
ΑΡΧΗ
  Πλήθος <- 0
  ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 6
    ΑΝ Πίνακας2[Ι] < Πίνακας1[Ι] ΤΟΤΕ
      Πλήθος <- Πλήθος + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Υπολογισμός <- Πλήθος
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

🔎 Ανάλυση Λάθους

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

🖥️ Πίνακας Τιμών (Συμπληρωμένος)

ΙΠίνακας1[Ι] (Έσοδα)Πίνακας2[Ι] (Έξοδα)Πλήθος
1200020000
2200022000
3230023000
4250021001
5180015002
6210020003

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


🔍 Ανάλυση και Προτεινόμενες Διορθώσεις

i) Δοκιμαστική εκτέλεση
Με βάση την εκφώνηση, μόνο 3 μήνες είχαν ζημία, αλλά το πρόγραμμα υπολογίζει λανθασμένα μόνο 1 μήνα.

ii) Λογικό λάθος
Το λάθος προέρχεται από τη συνάρτηση Υπολογισμός. Η συνάρτηση υπολογίζει λανθασμένα το πόσα στοιχεία του Πίνακα2 (έξοδα) είναι μικρότερα από τα αντίστοιχα στοιχεία του Πίνακα1 (έσοδα). Στην πραγματικότητα, θα έπρεπε να συγκρίνει τα στοιχεία του Πίνακα1 με εκείνα του Πίνακα2.


🖥️ Προτεινόμενες Διορθώσεις

  • Η εντολή της γραμμής 12 πρέπει να αντικατασταθεί με την εξής:

    Μήνες_με_ζημία <- Υπολογισμός(ΕΞΟΔΑ, ΕΣΟΔΑ)
    
  • Εναλλακτικά, μπορεί να γίνει αλλαγή στη δήλωση της συνάρτησης στη γραμμή 16:

    ΣΥΝΑΡΤΗΣΗ Υπολογισμός(Πίνακας2, Πίνακας1): ΑΚΕΡΑΙΑ
    
  • Μια άλλη διόρθωση είναι η συνθήκη στη γραμμή 23, η οποία πρέπει να αλλάξει σε:

    ΑΝ Πίνακας1[Ι] < Πίνακας2[Ι] ΤΟΤΕ
    

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