Εκσφαλμάτωση
Κατά την υλοποίηση ενός προγράμματος είναι αναμενόμενο αυτό να περιέχει λάθη. Ο εντοπισμός των λαθών και η επιδιόρθωση τους ονομάζεται Εκσφαλμάτωση. Τα λάθη διακρίνονται σε τρείς μεγάλες κατηγορίες:
- Συντακτικά Λάθη (Λάθη κατά την υλοποίηση)
- Λάθη που οδηγούν σε αντικανονικό τερματισμό του προγράμματος (Λάθη κατά την εκτέλεση)
- Λογικά Λάθη
Η κατηγορία στην οποία υπάγεται ένα λάθος εξαρτάται από το πότε γίνεται αντιληπτό. Ας ξαναδούμε το σχήμα στο κεφάλαιο 6.7 του πρώτου σχολικού βιβλίου που δείχνει τα στάδια που ακολουθούνται προκειμένου να καταλήξει ένα πρόγραμμα σε μορφή κατάλληλη για εκτέλεση από τον υπολογιστή.
- Τα λάθη που γίνονται αντιληπτά από τον Μεταγλωτιστή ονομάζονται Συντακτικά και είναι εύκολο να εντοπιστούν και διορθωθούν (Παραδείγματα: χ→3 , 5#3, Διάβασεε χ)
- Όταν τρέχουμε ένα εκτελέσιμο πρόγραμμα και αυτό σταματήσει ξαφνικά πριν προλάβει να ολοκληρωσει τότε λέμε ότι έχουμε Λάθος που οδηγεί σε αντικανονικό τερματισμό. (Παραδείγματα: Σε πίνακα 10 κελιών εμφανίζουμε το ενδέκατο κελί, διάιρεση με το 0)
- Αν τρέξουμε ένα πρόγραμμα και αυτό μας δώσει λάθος αποτελέσματα τότε λέμε οτι έχει Λογικό λάθος. Τα λογικά λάθη είναι δυσκολότερο να εντοπιστούν διότι δεν μπορεί ούτε ο διερμηνευτής ούτε ο μεταγλωττιστής να τα εντοπίσουν. (Παράδειγμα: για τον υπολογισμό της διακρίνουσας γράφουμε Δ←β-4*α*γ και όχι Δ←β^2-4*α*γ)
Συντακτικά Λάθη (Λάθη κατά την υλοποίηση)
Περιγραφή | Παράδειγμα | Επεξήγηση |
---|---|---|
Λανθασμένη γραφή μιας δεσμευμένης λέξης. | ΔΙΑΒΑΣΕΕ | Το σωστό είναι ΔΙΑΒΑΣΕ |
Δομή ελέγχου ή επανάληψης χωρίς κάποια δεσμευμένη λέξη. | ΑΝ Χ>1 | Λείπει το ΤΟΤΕ |
Παράλειψη γραφής μιας λέξης – εντολής. | ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΒΛΗΤΕΣ | Λείπει το όνομα του προγράμματος. |
Παράλειψη δήλωσης μεταβλητών | ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Χ ΑΡΧΗ Υ←2 | Η μεταβλητή Υ δεν έχει δηλωθεί. |
Εκχώρηση λανθασμένου τύπου δεδομένων σε μια μεταβλητή με εντολή εκχώρησης | ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Χ ΑΡΧΗ Χ← "Καλημέρα" | Η μεταβλητή έχει δηλωθεί ακέραια. |
Χρήση λάθος συμβόλων | Χ←5:2 Χ -> 3.14 | Ο τελεστής της διαίρεσης είναι / Το σύμβολο της εκχώρησης είναι ← |
Λάθος όνομα μεταβλητής/ προγράμματος, υποπρογράμματος | _χ ←2 | δεν επιτρέπεται μια μεταβλητή να αρχίζει με _ |
Λανθασμένος αριθμός παραμέτρων κατά την κλήση-δήλωση ενός υποπρογράμματος | ΓΡΑΨΕ Α_Τ(Χ,Υ) | Η συνάρτηση Α_Τ() εχει μόνο μία παράμετρο. |
Εκχώρηση τιμής σε σταθερά | ΠΡΟΓΡΑΜΜΑ ΣΤΑΘΕΡΕΣ Χ=3 ΑΡΧΗ Χ ← 5 | Η σταθερά Χ δεν επιτρέπεται να μεταβληθεί. |
Παραλειψη τελεστων ή τελεστέων σε εκφρααση | Χ ← Χ 5 | Λείπει ο τελεστής ανάμεσα στο Χ και το 5. |
Το πρόγραμμα που ακολουθεί έχει συντακτικά λάθη. Η επεξήγηση των οπίων φαίνεται στα σχόλια.
ΠΡΟΓΡΑΜΑ ΛΑΘΗ ! Λανθασμένη σύνταξη δεσμευμενης λέξης
ΣΤΑΘΕΡΕΣ
π = 3.14
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι ! Παράλειψη δήλωσης μεταβλητών
ΠΡΑΓΜΑΤΙΚΗ: Σ
! Παράλειψη γραφής της λέξης ΑΡΧΗ
Σ <- "0" ! Εκχώρηση λανθασμένου τύπου δεδομένων
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ βαθ[Ι]
Σ <- Σ + Βαθ[Ι
! Δομή επιλογής ή επανάληψης χωρίς εντολή τερματισμού
ΓΡΑΨΕ "Ο μέσος όρος είναι : Σ 10 ! παραλειψη τελεστή σε εκφρααση
ΓΡΑΨΕ "Η απόλυτη τιμή του Σ είναι:", Α_Τ(Σ,Ι) ! Λανθασμένος αριθμός παραμέτρων κατά την κλήση-δήλωση ενός υποπρογράμματος
π <-10 ! ·Εκχώρηση τιμής σε σταθερά
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Λάθη που οδηγούν σε αντικανονικό τερματισμό του προγράμματος (Λάθη κατά την εκτέλεση)
Περιγραφή | Παράδειγμα | Επεξήγηση |
---|---|---|
Διαίρεση με μηδέν, Αρνητικό υπόρριζο, εφαπτομένη 90ο , λογάριθμος μη θετικού αριθμού | ΔΙΑΒΑΣΕ Χ ΓΡΑΨΕ 1/Χ | Αν δοθεί ως Χ το 0 τότε το πρόγραμμα θα σταματήσει. |
Είσοδος (με χρήση της ΔΙΑΒΑΣΕ) διαφορετικού τύπου δεδομένων απ' ότι έχει δηλωθεί μια μεταβλητή | ΠΡΟΓΡΑΜΜΑ ΤΕΣΤ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Χ ΑΡΧΗ ΔΙΑΒΑΣΕ Χ | Αν δοθεί ως Χ Π.Χ. ο αριθμός 3,14 τότε το πρόγραμμα θα σταματήσει. |
Κλήση υποπρογράμματος με δεδομένα διαφορετικού τύπου στις πραγματικές παραμέτρους απ' ότι στις τυπικές. | ΓΡΑΨΕ Τ_Ρ("Κρήτη") | Η συνάρτηση δέχεται μόνο αριθμούς. |
Χρήση μη αρχικοποιημένης μεταβλητής | ! δεν έχει αρχικοποιηθεί η μεταβλητή πλ. πλ←πλ+1 | Πρέπει οπωσδήποτε η πλ να έχει αρχικοποιηθεί. |
Χρήση δείκτη σε πίνακα ο οποίος είναι εκτός ορίων. Π.χ. αν ο πίνακας έχει 100 κελιά και γράψουμε Π[-4], Π[0], Π[101] κλπ | ||
Υπερχείλιση αριθμητικής μεταβλητής | χ← 1000000^10000000 | Οι αριθμοί που μπορεί να διαχειριστεί ο υπολογιστής δεν είναι άπειροι. Υπάρχει ένα κατώτατο και ένα ανώτατο όριο τιμών. |
Δυσλειτουργία υλικού | ||
Λογικά Λάθη
Τα λογικά λάθη είναι δυσκολότερο να εντοπιστούν διότι δεν μπορεί ούτε ο διερμηνευτής ούτε ο μεταγλωττιστής να τα εντοπίσουν. Τέτοια λάθη παρουσιάζονται όταν η εντολή που γράφουμε δεν υπολογίζει αυτό που θέλαμε αλλά κάτι άλλο. Έστω ότι θέλουμε να φτιάξουμε τμήμα προγράμματος που διαβάζει δύο αριθμούς και υπολογίζει τον μέσο όρο τους.
ΔΙΑΒΑΣΕ x,y
ΜΟ ← (x+y)/3
ΓΡΑΨΕ ΜΟ
Το λάθος σε αυτή την περίπτωση είναι ότι ο τύπος του μέσου όρου είναι (x+y)/2 και όχι (x+y)/3.
Περιγραφή | Παράδειγμα | Επεξήγηση |
---|---|---|
Αρχικοποίηση μεταβλητής με λάθος τιμή (πχ 5 αντί για 0 που θα έπρεπε) | π ← 3.84 ΓΡΑΨΕ Π*R^2 | Η μεταβλητή θα έπρεπε να πάρει την τιμή 3.14! |
Λανθασμένη εκτίμηση της ιεραρχίας αριθμητικών τελεστών σε αριθμητική έκφραση | Χ ← α+β/2 | Αν θέλουμε η Χ να είναι ο μέσος όρος τότε είναι λάθος διότι πρώτα θα γίνει η διαίρεση και μετά η πρόσθεση. |
Λανθασμένη επιλογή τελεστών | ΑΝ Χ>=0 ή χ<=20 ΤΟΤΕ | Αντί για ή θα πρέπει να μπεί η και ώστε η Χ να είναι στο διάστημα [0,20]. |
Δομή με άπειρες επαναλήψεις (ατέρμων βρόχος) | ΟΣΟ χ=χ ΕΠΑΝΑΛΑΒΕ | Η ΟΣΟ δεν τερματίζεται ποτέ. |
Ερωτήσεις ανάπτυξης απο Πανελλαδικές εξετάσεις
- Πότε εντοπίζονται τα συντακτικά λάθη ενός προγράμματος και πότε τα λογικά; (2009-Θ1Γ2α)
- (2009-Θ1Γ2β) Δίνονται οι παρακάτω λανθασμένες εντολές για τον υπολογισμό του μέσου όρου δύο αριθμών: Γ ← Α+Β/2 Γ ← (Α+Β/2) Γ ← (Α+Β):2 Γ ← (Α+Β):2 Να γράψετε στο τετράδιό σας τον αριθμό της κάθε εντολής (1, 2, 3, 4) και δίπλα τη λέξη συντακτικό ή τη λέξη λογικό, ανάλογα με το είδος του λάθους.
- (2017-ΘΒ2) Το ακόλουθο πρόγραμμα έχει σκοπό να διαβάζει 10 θετικούς αριθμούς και να υπολογίζει και να εμφανίζει το γινόμενο όσων από αυτούς είναι πολλαπλάσιοι και του 3 και του 5 (συγχρόνως). Στο πρόγραμμα, όμως, υπάρχουν λάθη.
α) Να εντοπίσετε τα λάθη αυτά και στο τετράδιό σας να γράψετε τον αριθμό της γραμμής που βρίσκεται το λάθος και τον χαρακτήρα του (συντακτικό ή λογικό).
β) Στη συνέχεια να γράψετε το σωστό πρόγραμμα διορθώνοντας τα λάθη που εντοπίσατε.
1 Πρόγραμμα Αριθμοί 2 Μεταβλητές 3 Πραγματικές: Χ 4 Ακέραιες: Ρ, i 5 Αρχή 6 Ρ←0 7 Για i από 1 μέχρι 10 8 Διάβασε Χ 9 Αν Χ MOD 3 = 0 Η MOD 5 = 0 τότε 10 Ρ←Ρ*Χ 11 Τέλος_επανάληψης 12 Τέλος_επανάληψης 13 Γράψε Ρ 14 Τέλος_προγράμματος
Σημείωση: Θεωρείστε ότι κατά την εκτέλεση του προγράμματος θα δοθεί τουλάχιστον ένας τέτοιος αριθμός. - x
- x
- x