🖥️ Εκσφαλμάτωση λογικών λαθών στα υποπρογράμματα
Στην ενότητα αυτή, θα ασχοληθούμε με την εκσφαλμάτωση λογικών λαθών που μπορεί να εμφανιστούν σε υποπρογράμματα. Τα λάθη αυτά συχνά σχετίζονται με τη λανθασμένη κλήση υποπρογραμμάτων ή την εσφαλμένη διαχείριση παραμέτρων.
💸 Παράδειγμα 9 – Εκσφαλμάτωση λογικού λάθους σε πρόγραμμα που χρησιμοποιεί υποπρόγραμμα
Ένα πρόγραμμα διαβάζει τα μηνιαία έσοδα και έξοδα μιας επιχείρησης για το πρώτο εξάμηνο και τα καταχωρεί σε πίνακες. Στη συνέχεια, χρησιμοποιεί μια συνάρτηση για να υπολογίσει τους μήνες στους οποίους υπήρχε ζημία (δηλαδή, όταν τα έσοδα ήταν μικρότερα από τα έξοδα). Τέλος, εμφανίζει το πλήθος των μηνών με ζημία.
📝 Πίνακας Εσόδων και Εξόδων
Μήνας | Έσοδα | Έξοδα |
---|---|---|
1ος μήνας | 2000 | 2000 |
2ος μήνας | 2000 | 2200 |
3ος μήνας | 2300 | 2300 |
4ος μήνας | 2500 | 2100 |
5ος μήνας | 1800 | 1500 |
6ος μήνας | 2100 | 2000 |
🔍 Κώδικας Προγράμματος
ΠΡΟΓΡΑΜΜΑ ΕΛΕΓΧΟΣ_ΖΗΜΙΑΣ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι, Πλήθος, Μήνες_με_ζημία
ΠΡΑΓΜΑΤΙΚΕΣ: ΕΣΟΔΑ[6], ΕΞΟΔΑ[6]
ΑΡΧΗ
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 6
ΓΡΑΨΕ 'Δώσε τα έσοδα του ', Ι, 'ου μήνα:'
ΔΙΑΒΑΣΕ ΕΣΟΔΑ[Ι]
ΓΡΑΨΕ 'Δώσε τα έξοδα του ', Ι, 'ου μήνα:'
ΔΙΑΒΑΣΕ ΕΞΟΔΑ[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Μήνες_με_ζημία <- Υπολογισμός(ΕΣΟΔΑ, ΕΞΟΔΑ)
ΓΡΑΨΕ 'Μήνες που είχαν ζημία:', Μήνες_με_ζημία
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ Υπολογισμός(Πίνακας1, Πίνακας2): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι, Πλήθος
ΠΡΑΓΜΑΤΙΚΕΣ: Πίνακας1[6], Πίνακας2[6]
ΑΡΧΗ
Πλήθος <- 0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 6
ΑΝ Πίνακας2[Ι] < Πίνακας1[Ι] ΤΟΤΕ
Πλήθος <- Πλήθος + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Υπολογισμός <- Πλήθος
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
🔎 Ανάλυση Λάθους
Το πρόγραμμα προσπαθεί να υπολογίσει τους μήνες στους οποίους τα έξοδα ήταν μικρότερα από τα έσοδα, αντί για τους μήνες στους οποίους τα έσοδα ήταν μικρότερα από τα έξοδα. Αυτός ο λάθος έλεγχος οδηγεί σε λανθασμένο αποτέλεσμα.
🖥️ Πίνακας Τιμών (Συμπληρωμένος)
Ι | Πίνακας1[Ι] (Έσοδα) | Πίνακας2[Ι] (Έξοδα) | Πλήθος |
---|---|---|---|
1 | 2000 | 2000 | 0 |
2 | 2000 | 2200 | 0 |
3 | 2300 | 2300 | 0 |
4 | 2500 | 2100 | 1 |
5 | 1800 | 1500 | 2 |
6 | 2100 | 2000 | 3 |
Σύμφωνα με τον πίνακα, μόνο 3 μήνες είχαν ζημία, αλλά το πρόγραμμα δεν το υπολογίζει σωστά.
🔍 Ανάλυση και Προτεινόμενες Διορθώσεις
i) Δοκιμαστική εκτέλεση
Με βάση την εκφώνηση, μόνο 3 μήνες είχαν ζημία, αλλά το πρόγραμμα υπολογίζει λανθασμένα μόνο 1 μήνα.
ii) Λογικό λάθος
Το λάθος προέρχεται από τη συνάρτηση Υπολογισμός. Η συνάρτηση υπολογίζει λανθασμένα το πόσα στοιχεία του Πίνακα2 (έξοδα) είναι μικρότερα από τα αντίστοιχα στοιχεία του Πίνακα1 (έσοδα). Στην πραγματικότητα, θα έπρεπε να συγκρίνει τα στοιχεία του Πίνακα1 με εκείνα του Πίνακα2.
🖥️ Προτεινόμενες Διορθώσεις
Η εντολή της γραμμής 12 πρέπει να αντικατασταθεί με την εξής:
Μήνες_με_ζημία <- Υπολογισμός(ΕΞΟΔΑ, ΕΣΟΔΑ)
Εναλλακτικά, μπορεί να γίνει αλλαγή στη δήλωση της συνάρτησης στη γραμμή 16:
ΣΥΝΑΡΤΗΣΗ Υπολογισμός(Πίνακας2, Πίνακας1): ΑΚΕΡΑΙΑ
Μια άλλη διόρθωση είναι η συνθήκη στη γραμμή 23, η οποία πρέπει να αλλάξει σε:
ΑΝ Πίνακας1[Ι] < Πίνακας2[Ι] ΤΟΤΕ
Συμβουλή
Κατά την εκσφαλμάτωση προγραμμάτων που χρησιμοποιούν υποπρογράμματα, δώστε προσοχή:
- στην κλήση του υποπρογράμματος και το πέρασμα των παραμέτρων
- στα λοιπά λογικά λάθη που μπορεί να εμφανίζονται και στο κύριο πρόγραμμα και στα υποπρογράμματα
Ο Ευκλείδης λειτουργεί μέσω τεχνητής νοημσύνης