Τα λάθη που μπορεί να παρουσιαστούν σε ένα πρόγραμμα είναι:
Λάθη κατά την υλοποίηση (συντακτικά λάθη)
Λάθη κατά την εκτέλεση (λάθη χρόνου εκτέλεσης)
Λογικά λάθη
📊 Συγκριτικός Πίνακας Κατηγοριών Λαθών
Χαρακτηριστικό
Συντακτικά
Χρόνου Εκτέλεσης
Λογικά
Πότε εμφανίζονται
Κατά τη συγγραφή / μεταγλώττιση
Κατά την εκτέλεση
Κατά την εκτέλεση
Ανίχνευση
Από το μεταγλωττιστή / IDE
Με εντολές παγίδευσης
Μόνο με testing
Επίπτωση
Αδυναμία εκτέλεσης
Crash / αντικανονικός τερματισμός
Λάθος αποτελέσματα
Δυσκολία εντοπισμού
Εύκολη (αυτόματη)
Μεσαία
Δύσκολη
Παραδείγματα
Λάθος συνταξης, λάθος δεσμευμένη λέξη
Διαίρεση με 0, υπερχείλιση, καταστροφή δίσκου
Λάθος συνθήκη, λάθος τελεστής
🔧 Λάθη Κατά την Υλοποίηση (Συντακτικά Λάθη)
Προκαλούνται κυρίως από λανθασμένη σύνταξη εντολών του προγράμματος.
Τέτοια λάθη μπορεί να είναι η λανθασμένη συγγραφή μιας δεσμευμένης λέξης της γλώσσας προγραμματισμού ή η χρήση μιας δομής ελέγχου χωρίς την εντολή τερματισμού της.
Ένα λάθος που προκαλείται κατά τη συγγραφή του προγράμματος, ανιχνεύεται από το μεταγλωττιστή, ο οποίος εμφανίζει προς τον προγραμματιστή κάποιο προειδοποιητικό μήνυμα.
Αν το πρόγραμμα περιέχει ένα λάθος αυτής της μορφής, δεν επιτρέπεται η εκτέλεσή του, μέχρι να το διορθώσει ο προγραμματιστής.
Τα σύγχρονα προγραμματιστικά περιβάλλοντα μας προφυλάσσουν αυτόματα από τα λάθη κατά την υλοποίηση, αφού παρέχουν εργαλεία αυτόματου ελέγχου σύνταξης των εντολών και παρακολουθούν τον προγραμματιστή κατά τη συγγραφή του προγράμματος.
Μόλις διαπιστώσουν κάποιο συντακτικό λάθος, σταματούν και απαιτούν τη διόρθωσή του. Συνήθως αντιλαμβάνονται ακριβώς το λάθος που δημιουργήθηκε και προτείνουν αναλυτικά τον τρόπο διόρθωσής του, εμφανίζοντας σε ενημερωτικό πλαίσιο την ορθή σύνταξη της εντολής.
⏱️ Λάθη Κατά την Εκτέλεση (Λάθη Χρόνου Εκτέλεσης)
Τα λάθη που προκαλούνται κατά το χρόνο εκτέλεσης του προγράμματος είναι πιο επώδυνα, γιατί συνήθως εμφανίζονται σε πραγματικό περιβάλλον εκτέλεσης.
Τις περισσότερες φορές προκαλούν τον αντικανονικό τερματισμό της εφαρμογής και το κρέμασμα (crash) του συστήματος.
Όταν ένα λάθος προκληθεί κατά την εκτέλεση της εφαρμογής, είναι δυνατό να αντιμετωπισθεί μόνο με τη χρήση εντολών προγράμματος που το παγιδεύουν και εκτελούν τις κατάλληλες διαδικασίες χειρισμού.
Η πρόληψη τέτοιων λαθών είναι αρκετά δύσκολη, αφού συνήθως οφείλονται σε καταστάσεις που δεν είναι εύκολο να ελεγχθούν από τον προγραμματιστή, ενώ πολλές φορές εμφανίζονται μετά από μεγάλο χρονικό διάστημα.
Τέτοια λάθη είναι δυνατό να προκληθούν από:
την κλήση μιας διαδικασίας με δεδομένα που δεν μπορεί να χειριστεί (π.χ. αναζήτηση διαγραμμένων αρχείων, διαίρεση αριθμού με το μηδέν, υπερχείλιση αριθμητικής μεταβλητής)
δυσλειτουργία του υλικού μέρους του υπολογιστή (π.χ. καταστροφή σκληρού δίσκου, τερματισμός σύνδεσης δικτύου, αποσύνδεση του χρήστη)
🧠 Λογικά Λάθη
Τα λογικά λάθη είναι συνήθως λάθη σχεδιασμού και δεν προκαλούν τη διακοπή της εκτέλεσης του προγράμματος.
Ενώ ο μεταγλωττιστής της γλώσσας προγραμματισμού δεν ανιχνεύει κανένα συντακτικό λάθος και κατά την εκτέλεση του προγράμματος δεν παρουσιάζονται ανεπιθύμητες καταστάσεις σφαλμάτων, τελικά δεν παράγονται τα επιθυμητά αποτελέσματα.
Η ανίχνευση τέτοιων λαθών δεν είναι δυνατό να πραγματοποιηθεί από κάποιο εργαλείο του υπολογιστή και διαπιστώνονται μόνο με τη διαδικασία ελέγχου (testing) και την ανάλυση των αποτελεσμάτων των δοκιμών.
🐛 Διαδικασία Εκσφαλμάτωσης (Debugging)
Η διαδικασία ελέγχου, εντοπισμού και διόρθωσης των σφαλμάτων ενός προγράμματος καλείται εκσφαλμάτωση (debugging).
Στόχος της διαδικασίας εκσφαλμάτωσης είναι ο εντοπισμός των σημείων του προγράμματος που προκαλούν προβλήματα στη λειτουργία του.
Η εργασία της εκσφαλμάτωσης δεν είναι εύκολη, απαιτεί βαθιά γνώση της γλώσσας προγραμματισμού και φυσικά αντίστοιχες ικανότητες από τον προγραμματιστή.
Για τον εντοπισμό ενός λάθους δεν υπάρχουν ιδιαίτερα μυστικά και τρικ. Η εκσφαλμάτωση είναι ένα πρόβλημα λογικής και όσο πιο καλά αντιλαμβάνεται ο προγραμματιστής τον τρόπο που εργάζεται το πρόγραμμα, τόσο πιο εύκολα και σύντομα θα εντοπίσει λάθη που προκαλούν προβλήματα.
Σε ένα σύγχρονο προγραμματιστικό περιβάλλον δεν χρειάζεται ιδιαίτερη μνεία για τα λάθη που παρουσιάζονται κατά το χρόνο σχεδιασμού, αφού αυτά είναι συντακτικά λάθη και τις περισσότερες φορές το περιβάλλον προγραμματισμού τα ανιχνεύει αυτόματα και προτείνει τη διόρθωσή τους ή τα εντοπίζει ο προγραμματιστής.
Τα λάθη που κυρίως μας απασχολούν στη φάση της εκσφαλμάτωσης είναι τα λογικά λάθη και τα λάθη που παρουσιάζονται κατά το χρόνο εκτέλεσης του προγράμματος.
Η εκσφαλμάτωση τέτοιων λαθών μπορεί να γίνει μέσα από εργαλεία εκσφαλμάτωσης ή από ειδικές εντολές ή συναρτήσεις που προσφέρει το περιβάλλον.
🔀 Εκσφαλμάτωση Λογικών Λαθών στις Δομές Επιλογής
Σε μια δομή επιλογής μπορεί να εμφανιστούν λογικά λάθη που σχετίζονται με:
τη συνθήκη ή τις συνθήκες
τις ομάδες εντολών που εκτελούνται όταν μια συνθήκη είναι αληθής ή ψευδής
⚠️ Σημείωση: Μερικές φορές κατά την εκτέλεση της δομής επιλογής εμφανίζονται λανθασμένα αποτελέσματα, τα οποία σχετίζονται με λογικά λάθη σε προηγούμενες εντολές, που επηρεάζουν την τιμή που λαμβάνει η συνθήκη.
📝 Παράδειγμα Λάθους σε Δομή Επιλογής
Έστω ότι θέλουμε να ελέγξουμε αν ένας αριθμός είναι θετικός ή όχι:
! ΛΑΘΟΣ: Χρήση = αντί για >=
ΑΝ x > 0 ΤΟΤΕ
ΕΜΦΑΝΙΣΕ "Θετικός"
ΑΛΛΙΩΣ_ΑΝ x = 0 ΤΟΤΕ
ΕΜΦΑΝΙΣΕ "Μηδέν"
ΑΛΛΙΩΣ
ΕΜΦΑΝΙΣΕ "Αρνητικός"
ΤΕΛΟΣ_ΑΝ
! Αν x = 0, το παραπάνω είναι σωστό.
! Αλλά αν η συνθήκη ήταν x >= 0 για "Μη αρνητικός",
! και ξεχάσουμε το =, τότε το 0 θα πάει στο ΑΛΛΙΩΣ!
❌ Κοινό λάθος: Χρήση > αντί για >= ή < αντί για <= στις συνθήκες. Αυτό οδηγεί σε παράλειψη ακραίας τιμής.
🔄 Εκσφαλμάτωση Λογικών Λαθών στις Δομές Επανάληψης
Σε μια δομή επανάληψης μπορεί να εμφανιστούν λογικά λάθη που σχετίζονται με:
τη συνθήκη επανάληψης ή τερματισμού
την αρχικοποίηση της συνθήκης
την ενημέρωση της συνθήκης εντός του βρόχου επανάληψης
τις εντολές που περιλαμβάνονται εντός του βρόχου
Πολλές φορές τα πιθανά σενάρια ελέγχου ενός προγράμματος είναι πάρα πολλά. Για τον λόγο αυτό, δε θα ασχοληθούμε με την εξαντλητική μελέτη όλων των πιθανών σεναρίων ελέγχου. Θα μελετήσουμε κάποια συνηθισμένα λάθη και θα ασχοληθούμε με την ανάδειξη καλών πρακτικών για την εκσφαλμάτωση των δομών επανάληψης.
📋 Συμβουλές για Δομές Επανάληψης
Κατά την εκσφαλμάτωση των δομών επανάληψης χρειάζεται να δίνετε προσοχή στα εξής:
στους συγκριτικούς και τους λογικούς τελεστές των συνθηκών επανάληψης ή τερματισμού
στην αρχικοποίηση της συνθήκης
στην ενημέρωση της συνθήκης εντός του βρόχου
στην αλληλουχία των εντολών του βρόχου και στη σειρά εκτέλεσής τους
στο κριτήριο της περατότητας
στην πρώτη επανάληψη και στην περίπτωση που ο βρόχος επανάληψης δεν πρέπει να εκτελεστεί ούτε μία φορά
στην τελευταία επανάληψη
💡 Σημείωση: Στους υπολογισμούς που γίνονται εντός των δομών επανάληψης χρειάζεται να δοθεί ιδιαίτερη προσοχή στο αν θα συμπεριλάβουμε στον υπολογισμό την τιμή που λαμβάνει κάποια μεταβλητή στην τελευταία επανάληψη.
📝 Παράδειγμα Λάθους σε Δομή Επανάληψης
Υπολογισμός παραγοντικού με λάθος συνθήκη:
! ΛΑΘΟΣ: Η συνθήκη σταματάει στο 4 αντί για 5
fact ← 1
i ← 1
ΟΣΟ i < 5 ΕΠΑΝΑΛΑΒΕ ! Θα έπρεπε i <= 5
fact ← fact * i
i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Αποτέλεσμα: 24 αντί για 120 (5!)
❌ Κοινό λάθος: Χρήση < αντί για <= οδηγεί σε παράλειψη της τελευταίας επανάληψης. Πάντα ελέγχουμε την τελευταία τιμή!
📊 Εκσφαλμάτωση Προγραμμάτων με Πίνακες
💡 Συμβουλή: Κατά την εκσφαλμάτωση προγραμμάτων που χρησιμοποιούν πίνακες χρειάζεται να δίνετε ιδιαίτερη προσοχή:
στο μέγεθος των πινάκων κατά τη δήλωσή τους
στους δείκτες των πινάκων κατά την προσπέλασή τους
στη μη υπέρβαση των ορίων του πίνακα
! ΛΑΘΟΣ: Πρόσβαση εκτός ορίων πίνακα
ΔΗΛΩΣΕ Π[1..5]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6 ! Λάθος: ο πίνακας έχει 5 θέσεις
ΔΙΑΒΑΣΕ Π[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Όταν i = 6, προσπελαύνουμε μη υπαρκτή θέση!
📞 Εκσφαλμάτωση Προγραμμάτων με Υποπρογράμματα
💡 Συμβουλή: Κατά την εκσφαλμάτωση προγραμμάτων που χρησιμοποιούν υποπρογράμματα χρειάζεται να δίνεται προσοχή στον εντοπισμό λογικών λαθών που σχετίζονται με:
την κλήση του υποπρογράμματος και το πέρασμα των παραμέτρων
τα λοιπά λογικά λάθη που εμφανίζονται και στα υποπρογράμματα
Κάθε πρόγραμμα πρέπει να ελεγχθεί για τη σωστή λειτουργία του, δηλαδή να επιβεβαιωθεί ότι παράγει τα αποτελέσματα που πρέπει. Είναι συνηθισμένη πρακτική, κατά το στάδιο της υλοποίησης να πραγματοποιούνται ανασκοπήσεις κώδικα από ομάδες προγραμματιστών προκειμένου να εντοπιστούν συνηθισμένα λάθη. Αυτή η τεχνική δεν εξασφαλίζει τον εντοπισμό όλων των λαθών και γι' αυτό ακολουθείται πιο συστηματική προσέγγιση με τη χρήση σεναρίων ελέγχου.
📝 Σενάριο Ελέγχου (Test Case)
Ένα σενάριο ελέγχου περιγράφει τα δεδομένα εισόδου ολόκληρου του προγράμματος ή τμήματος του προγράμματος (διαδικασία, συνάρτηση) και τα αναμενόμενα αποτελέσματα. Τα σενάρια ελέγχου εκτελούνται, είτε σε πραγματικό περιβάλλον προγραμματισμού είτε εικονικά με δημιουργία πίνακα τιμών των μεταβλητών. Σε περίπτωση αποκλίσεων μεταξύ των αναμενόμενων και των πραγματικών αποτελεσμάτων, υπάρχει λάθος το οποίο πρέπει να εντοπιστεί και να διορθωθεί.
🎯 Έλεγχος Μαύρου Κουτιού
Μια δημοφιλής τεχνική ελέγχου είναι ο έλεγχος μαύρου κουτιού (black-box testing). Ονομάζεται έτσι επειδή τα δεδομένα εισόδου στα σενάρια ελέγχου προκύπτουν από τις προδιαγραφές του προγράμματος, αγνοώντας εντελώς τον κώδικα. Δηλαδή το πρόγραμμα μοιάζει σαν να βρίσκεται μέσα σε ένα μαύρο κουτί που κρύβει το περιεχόμενό του.
📐 Ισοδύναμα Διαστήματα (Equivalence Partitioning)
Ιδανικά θα θέλαμε να ελέγξουμε όλες τις τιμές εισόδου και όλα τα πιθανά αποτελέσματα. Αυτό όμως είναι αδύνατο. Γι' αυτό προσπαθούμε να βρούμε αντιπροσωπευτικές τιμές για τα δεδομένα εισόδου που θα παράγουν αντιπροσωπευτικά αποτελέσματα. Το πρώτο βήμα είναι η δημιουργία ισοδύναμων διαστημάτων τιμών (equivalence partitioning) για τα δεδομένα εισόδου. Τα διαστήματα θεωρούνται ισοδύναμα, καθώς αν δεν υπάρχουν λάθη, τότε όλες οι τιμές ενός διαστήματος εισόδου θα παράγουν τιμές που θα ανήκουν στο ίδιο διάστημα αποτελεσμάτων. Είναι σημαντικό να δημιουργούνται διαστήματα και για τις μη έγκυρες τιμές εισόδου, καθώς δεν μπορούμε να είμαστε σίγουροι ότι ένα πρόγραμμα θα τροφοδοτείται μόνο με έγκυρες τιμές.
🔍 Ανάλυση Ακραίων Τιμών (Boundary Value Analysis)
Μετά τον καθορισμό των διαστημάτων πρέπει να επιλεγούν τιμές για τα σενάρια ελέγχου που να καλύπτουν όλα τα διαστήματα. Αφού τα διαστήματα είναι ισοδύναμα, μπορεί να επιλεγεί οποιαδήποτε τιμή από κάθε διάστημα. Μια καλύτερη στρατηγική είναι να γίνει έλεγχος των ακραίων τιμών κάθε διαστήματος (boundary value analysis), καθώς η εμπειρία έχει δείξει ότι τα περισσότερα λάθη γίνονται σε αυτά τα σημεία. Αυτό είναι λογικό, αν σκεφτούμε ότι τα διαστήματα τιμών θα υλοποιηθούν με κάποια μορφή δομής επιλογής, οπότε μπορεί να υπάρχουν λάθη στις λογικές συνθήκες, π.χ. συμπερίληψη ακραίας τιμής (<= αντί για <, >= αντί για >), παράλειψη ακραίας τιμής (< αντί για <=, > αντί για >=).
Η τεχνική που περιγράφηκε ανωτέρω, μπορεί να εφαρμοστεί και σε υποπρογράμματα. Αυτό είναι συνηθισμένο σε μεγάλα προγράμματα που αποτελούνται από χιλιάδες γραμμές κώδικα τα οποία είναι οργανωμένα σε υποπρογράμματα. Σε αυτές τις περιπτώσεις πρώτα ελέγχεται κάθε υποπρόγραμμα μεμονωμένα. Αφού διαπιστωθεί η ορθή λειτουργία του καθενός, μόνο τότε πραγματοποιείται έλεγχος ολόκληρου του προγράμματος.
🎯 Συνοπτικές Συμβουλές Εκσφαλμάτωσης
✅ Checklist για Δομές Επανάληψης:
✓ Αρχικοποίηση μετρητή / συνθήκης
✓ Ενημέρωση μέσα στον βρόχο
✓ Συγκριτικός τελεστής (<= vs <)
✓ Περατότητα (τερματίζει ποτέ;)
✓ Πρώτη επανάληψη (ιδίως αν δεν πρέπει να τρέξει)
✓ Τελευταία επανάληψη (τιμή που λαμβάνεται)
✅ Checklist για Πίνακες:
✓ Μέγεθος δήλωσης vs χρήση
✓ Δείκτες ξεκινούν από 1 (στην ΑΕΠΠ)
✓ Όρια προσπέλασης (μη υπέρβαση)
✅ Checklist για Υποπρογράμματα:
✓ Ορθή κλήση
✓ Σωστό πέρασμα παραμέτρων
✓ Έλεγχος κάθε υποπρογράμματος μεμονωμένα (black-box)
💡 Συμβουλή: Κάνε κλικ σε κάθε ερώτηση για να δεις την αναλυτική απάντηση.
Ερώτηση 1: Να αναφέρετε τις κατηγορίες λαθών που μπορεί να παρουσιαστούν σε ένα πρόγραμμα.
▼
Τα λάθη που μπορεί να παρουσιαστούν σε ένα πρόγραμμα είναι:
Λάθη κατά την υλοποίηση (συντακτικά λάθη)
Λάθη κατά την εκτέλεση (λάθη χρόνου εκτέλεσης)
Λογικά λάθη
Ερώτηση 2: Τι γνωρίζετε για τα λάθη κατά την υλοποίηση;
▼
Τα λάθη κατά το χρόνο υλοποίησης προκαλούνται κυρίως από λανθασμένη σύνταξη εντολών προγράμματος.
Τέτοια λάθη μπορεί να είναι η λανθασμένη συγγραφή μιας δεσμευμένης λέξης της γλώσσας προγραμματισμού ή η χρήση μιας δομής ελέγχου χωρίς την εντολή τερματισμού της.
Ένα λάθος που προκαλείται κατά τη συγγραφή του προγράμματος, ανιχνεύεται από το μεταγλωττιστή, ο οποίος εμφανίζει προς τον προγραμματιστή κάποιο προειδοποιητικό μήνυμα.
Αν το πρόγραμμα περιέχει ένα λάθος αυτής της μορφής, δεν επιτρέπεται η εκτέλεσή του, μέχρι να το διορθώσει ο προγραμματιστής.
Τα σύγχρονα προγραμματιστικά περιβάλλοντα μας προφυλάσσουν αυτόματα από τα λάθη κατά την υλοποίηση, αφού παρέχουν εργαλεία αυτόματου ελέγχου σύνταξης των εντολών και παρακολουθούν τον προγραμματιστή κατά τη συγγραφή του προγράμματος.
Μόλις διαπιστώσουν κάποιο συντακτικό λάθος, σταματούν και απαιτούν τη διόρθωσή του. Συνήθως αντιλαμβάνονται ακριβώς το λάθος που δημιουργήθηκε και προτείνουν αναλυτικά τον τρόπο διόρθωσής του, εμφανίζοντας σε ενημερωτικό πλαίσιο την ορθή σύνταξη της εντολής.
Ερώτηση 3: Τι γνωρίζετε για τα λάθη κατά την εκτέλεση;
▼
Τα λάθη που προκαλούνται κατά το χρόνο εκτέλεσης του προγράμματος είναι πιο επώδυνα, γιατί συνήθως εμφανίζονται σε πραγματικό περιβάλλον εκτέλεσης.
Τις περισσότερες φορές προκαλούν τον αντικανονικό τερματισμό της εφαρμογής και το κρέμασμα (crash) του συστήματος.
Όταν ένα λάθος προκληθεί κατά την εκτέλεση της εφαρμογής, είναι δυνατό να αντιμετωπισθεί μόνο με τη χρήση εντολών προγράμματος που το παγιδεύουν και εκτελούν τις κατάλληλες διαδικασίες χειρισμού.
Η πρόληψη τέτοιων λαθών είναι αρκετά δύσκολη, αφού συνήθως οφείλονται σε καταστάσεις που δεν είναι εύκολο να ελεγχθούν από τον προγραμματιστή, ενώ πολλές φορές εμφανίζονται μετά από μεγάλο χρονικό διάστημα.
Τέτοια λάθη είναι δυνατό να προκληθούν από την κλήση μιας διαδικασίας με δεδομένα που δεν μπορεί να χειριστεί, όπως η αναζήτηση διαγραμμένων αρχείων, η προσπάθεια διαίρεσης ενός αριθμού με το μηδέν, η υπερχείλιση μιας αριθμητικής μεταβλητής ή από δυσλειτουργία του υλικού μέρους του υπολογιστή, όπως η καταστροφή του σκληρού δίσκου του συστήματος, ο τερματισμός μιας σύνδεσης δικτύου και η αποσύνδεση του χρήστη.
Ερώτηση 4: Τι γνωρίζετε για τα λογικά λάθη;
▼
Τα λογικά λάθη είναι συνήθως λάθη σχεδιασμού και δεν προκαλούν τη διακοπή της εκτέλεσης του προγράμματος.
Ενώ ο μεταγλωττιστής της γλώσσας προγραμματισμού δεν ανιχνεύει κανένα συντακτικό λάθος και κατά την εκτέλεση του προγράμματος δεν παρουσιάζονται ανεπιθύμητες καταστάσεις σφαλμάτων, τελικά δεν παράγονται τα επιθυμητά αποτελέσματα.
Η ανίχνευση τέτοιων λαθών δεν είναι δυνατό να πραγματοποιηθεί από κάποιο εργαλείο του υπολογιστή και διαπιστώνονται μόνο με τη διαδικασία ελέγχου (testing) και την ανάλυση των αποτελεσμάτων των δοκιμών.
Ερώτηση 5: Τι γνωρίζετε για τη διαδικασία της εκσφαλμάτωσης;
▼
Η διαδικασία ελέγχου, εντοπισμού και διόρθωσης των σφαλμάτων ενός προγράμματος καλείται εκσφαλμάτωση (debugging).
Στόχος της διαδικασίας εκσφαλμάτωσης είναι ο εντοπισμός των σημείων του προγράμματος που προκαλούν προβλήματα στη λειτουργία του.
Η εργασία της εκσφαλμάτωσης δεν είναι εύκολη, απαιτεί βαθιά γνώση της γλώσσας προγραμματισμού και φυσικά αντίστοιχες ικανότητες από τον προγραμματιστή.
Για τον εντοπισμό ενός λάθους δεν υπάρχουν ιδιαίτερα μυστικά και τρικ. Η εκσφαλμάτωση είναι ένα πρόβλημα λογικής και όσο πιο καλά αντιλαμβάνεται ο προγραμματιστής τον τρόπο που εργάζεται το πρόγραμμα, τόσο πιο εύκολα και σύντομα θα εντοπίσει λάθη που προκαλούν προβλήματα.
Σε ένα σύγχρονο προγραμματιστικό περιβάλλον δεν χρειάζεται ιδιαίτερη μνεία για τα λάθη που παρουσιάζονται κατά το χρόνο σχεδιασμού, αφού αυτά είναι συντακτικά λάθη και τις περισσότερες φορές το περιβάλλον προγραμματισμού τα ανιχνεύει αυτόματα και προτείνει τη διόρθωσή τους ή τα εντοπίζει ο προγραμματιστής.
Τα λάθη που κυρίως μας απασχολούν στη φάση της εκσφαλμάτωσης είναι τα λογικά λάθη και τα λάθη που παρουσιάζονται κατά το χρόνο εκτέλεσης του προγράμματος.
Η εκσφαλμάτωση τέτοιων λαθών μπορεί να γίνει μέσα από εργαλεία εκσφαλμάτωσης ή από ειδικές εντολές ή συναρτήσεις που προσφέρει το περιβάλλον.
Ερώτηση 6: Ποια λάθη εμφανίζονται στις δομές επιλογής;
▼
Σε μια δομή επιλογής μπορεί να εμφανιστούν λογικά λάθη που σχετίζονται με:
τη συνθήκη ή τις συνθήκες
τις ομάδες εντολών που εκτελούνται όταν μια συνθήκη είναι αληθής ή ψευδής
Μερικές φορές κατά την εκτέλεση της δομής επιλογής εμφανίζονται λανθασμένα αποτελέσματα, τα οποία σχετίζονται με λογικά λάθη σε προηγούμενες εντολές, που επηρεάζουν την τιμή που λαμβάνει η συνθήκη.
Ερώτηση 7: Ποια λάθη εμφανίζονται στις δομές επανάληψης;
▼
Σε μια δομή επανάληψης μπορεί να εμφανιστούν λογικά λάθη που σχετίζονται με:
τη συνθήκη επανάληψης ή τερματισμού
την αρχικοποίηση της συνθήκης
την ενημέρωση της συνθήκης εντός του βρόχου επανάληψης
τις εντολές που περιλαμβάνονται εντός του βρόχου
Ερώτηση 8: Τι πρέπει να προσέχουμε κατά την εκσφαλμάτωση δομών επανάληψης;
▼
Κατά την εκσφαλμάτωση των δομών επανάληψης χρειάζεται να δίνουμε προσοχή στα εξής:
στους συγκριτικούς και τους λογικούς τελεστές των συνθηκών επανάληψης ή τερματισμού
στην αρχικοποίηση της συνθήκης
στην ενημέρωση της συνθήκης εντός του βρόχου
στην αλληλουχία των εντολών του βρόχου και στη σειρά εκτέλεσής τους
στο κριτήριο της περατότητας
στην πρώτη επανάληψη και στην περίπτωση που ο βρόχος επανάληψης δεν πρέπει να εκτελεστεί ούτε μία φορά
στην τελευταία επανάληψη
Στους υπολογισμούς που γίνονται εντός των δομών επανάληψης χρειάζεται να δοθεί ιδιαίτερη προσοχή στο αν θα συμπεριλάβουμε στον υπολογισμό την τιμή που λαμβάνει κάποια μεταβλητή στην τελευταία επανάληψη.
Ερώτηση 9: Τι πρέπει να προσέχουμε κατά την εκσφαλμάτωση προγραμμάτων με πίνακες;
▼
Κατά την εκσφαλμάτωση προγραμμάτων που χρησιμοποιούν πίνακες χρειάζεται να δίνουμε ιδιαίτερη προσοχή:
στο μέγεθος των πινάκων κατά τη δήλωσή τους
στους δείκτες των πινάκων κατά την προσπέλασή τους
στη μη υπέρβαση των ορίων του πίνακα
Ερώτηση 10: Τι πρέπει να προσέχουμε κατά την εκσφαλμάτωση προγραμμάτων με υποπρογράμματα;
▼
Κατά την εκσφαλμάτωση προγραμμάτων που χρησιμοποιούν υποπρογράμματα χρειάζεται να δίνεται προσοχή στον εντοπισμό λογικών λαθών που σχετίζονται με:
την κλήση του υποπρογράμματος και το πέρασμα των παραμέτρων
τα λοιπά λογικά λάθη που εμφανίζονται και στα υποπρογράμματα
Ερώτηση 11: Τι είναι το σενάριο ελέγχου (test case);
▼
Ένα σενάριο ελέγχου (test case) περιγράφει τα δεδομένα εισόδου ολόκληρου του προγράμματος ή τμήματος του προγράμματος (διαδικασία, συνάρτηση) και τα αναμενόμενα αποτελέσματα. Τα σενάρια ελέγχου εκτελούνται, είτε σε πραγματικό περιβάλλον προγραμματισμού είτε εικονικά με δημιουργία πίνακα τιμών των μεταβλητών. Σε περίπτωση αποκλίσεων μεταξύ των αναμενόμενων και των πραγματικών αποτελεσμάτων, υπάρχει λάθος το οποίο πρέπει να εντοπιστεί και να διορθωθεί.
Ερώτηση 12: Τι είναι ο έλεγχος μαύρου κουτιού (black-box testing);
▼
Ο έλεγχος μαύρου κουτιού (black-box testing) είναι μια δημοφιλής τεχνική ελέγχου. Ονομάζεται έτσι επειδή τα δεδομένα εισόδου στα σενάρια ελέγχου προκύπτουν από τις προδιαγραφές του προγράμματος, αγνοώντας εντελώς τον κώδικα. Δηλαδή το πρόγραμμα μοιάζει σαν να βρίσκεται μέσα σε ένα μαύρο κουτί που κρύβει το περιεχόμενό του.
Ερώτηση 13: Τι είναι η μέθοδος ισοδύναμων διαστημάτων (equivalence partitioning);
▼
Η μέθοδος ισοδύναμων διαστημάτων (equivalence partitioning) είναι μια στρατηγική για τη δημιουργία αντιπροσωπευτικών τιμών για τα δεδομένα εισόδου. Τα διαστήματα θεωρούνται ισοδύναμα, καθώς αν δεν υπάρχουν λάθη, τότε όλες οι τιμές ενός διαστήματος εισόδου θα παράγουν τιμές που θα ανήκουν στο ίδιο διάστημα αποτελεσμάτων. Είναι σημαντικό να δημιουργούνται διαστήματα και για τις μη έγκυρες τιμές εισόδου, καθώς δεν μπορούμε να είμαστε σίγουροι ότι ένα πρόγραμμα θα τροφοδοτείται μόνο με έγκυρες τιμές.
Ερώτηση 14: Τι είναι η ανάλυση ακραίων τιμών (boundary value analysis);
▼
Η ανάλυση ακραίων τιμών (boundary value analysis) είναι μια στρατηγική ελέγχου που εστιάζει στις ακραίες τιμές κάθε διαστήματος. Η εμπειρία έχει δείξει ότι τα περισσότερα λάθη γίνονται σε αυτά τα σημεία. Αυτό είναι λογικό, αν σκεφτούμε ότι τα διαστήματα τιμών θα υλοποιηθούν με κάποια μορφή δομής επιλογής, οπότε μπορεί να υπάρχουν λάθη στις λογικές συνθήκες, π.χ. συμπερίληψη ακραίας τιμής (<= αντί για <, >= αντί για >), παράλειψη ακραίας τιμής (< αντί για <=, > αντί για >=).
Ερώτηση 15: Γιατί ονομάζεται «μαύρο κουτί» η τεχνική black-box testing;
▼
Ονομάζεται «μαύρο κουτί» επειδή ο ελεγκτής αγνοεί εντελώς τον εσωτερικό κώδικα του προγράμματος. Τα δεδομένα εισόδου προκύπτουν μόνο από τις προδιαγραφές του προγράμματος. Το πρόγραμμα μοιάζει σαν να βρίσκεται μέσα σε ένα μαύρο κουτί που κρύβει το περιεχόμενό του — δεν βλέπουμε τι υπάρχει μέσα, μόνο τα δεδομένα που δίνουμε και τα αποτελέσματα που παίρνουμε.
🎯 Οδηγίες: Επίλεξε μία απάντηση σε κάθε ερώτηση. Θα δεις άμεση ανατροφοδότηση.
1. Ποιος ανιχνεύει τα συντακτικά λάθη ενός προγράμματος;
Ο προγραμματιστής κατά την εκτέλεση
Ο μεταγλωττιστής
Το λειτουργικό σύστημα
Ο χρήστης του προγράμματος
✅ Σωστά! Ο μεταγλωττιστής ανιχνεύει τα συντακτικά λάθη κατά τη συγγραφή του προγράμματος και εμφανίζει προειδοποιητικά μηνύματα.
❌ Λάθος. Τα συντακτικά λάθη ανιχνεύονται από τον μεταγλωττιστή κατά τη μεταγλώττιση του προγράμματος.
2. Τι προκαλούν συνήθως τα λάθη κατά την εκτέλεση του προγράμματος;
Αυτόματη διόρθωση του κώδικα
Εμφάνιση προειδοποιητικών μηνυμάτων
Αντικανονικό τερματισμό και crash του συστήματος
Αλλαγή της γλώσσας προγραμματισμού
✅ Σωστά! Τα λάθη χρόνου εκτέλεσης προκαλούν αντικανονικό τερματισμό της εφαρμογής και κρέμασμα (crash) του συστήματος.
❌ Λάθος. Τα λάθη κατά την εκτέλεση προκαλούν αντικανονικό τερματισμό και crash του συστήματος.
3. Ποια λάθη δεν ανιχνεύει ο μεταγλωττιστής;
Τα λογικά λάθη
Τα συντακτικά λάθη
Τα λάθη χρόνου εκτέλεσης
Κανένα από τα παραπάνω
✅ Σωστά! Ο μεταγλωττιστής δεν ανιχνεύει τα λογικά λάθη. Αυτά διαπιστώνονται μόνο με testing και ανάλυση αποτελεσμάτων.
❌ Λάθος. Ο μεταγλωττιστής δεν ανιχνεύει τα λογικά λάθη, τα οποία είναι λάθη σχεδιασμού.
4. Τι ονομάζεται η διαδικασία ελέγχου, εντοπισμού και διόρθωσης σφαλμάτων ενός προγράμματος;
Μεταγλώττιση
Εκσφαλμάτωση (debugging)
Κωδικοποίηση
Αλγοριθμοποίηση
✅ Σωστά! Η εκσφαλμάτωση (debugging) είναι η διαδικασία ελέγχου, εντοπισμού και διόρθωσης των σφαλμάτων.
❌ Λάθος. Η σωστή απάντηση είναι εκσφαλμάτωση (debugging).
5. Ποια λάθη μας απασχολούν κυρίως στη φάση της εκσφαλμάτωσης;
Μόνο τα συντακτικά
Μόνο τα λογικά
Τα λογικά και τα λάθη χρόνου εκτέλεσης
Κανένα από τα παραπάνω
✅ Σωστά! Τα λάθη που κυρίως μας απασχολούν είναι τα λογικά λάθη και τα λάθη που παρουσιάζονται κατά το χρόνο εκτέλεσης.
❌ Λάθος. Τα συντακτικά λάθη ανιχνεύονται αυτόματα. Τα λάθη που μας απασχολούν είναι τα λογικά και τα λάθη χρόνου εκτέλεσης.
6. Σε μια δομή επανάληψης, τι από τα παρακάτω ΔΕΝ χρειάζεται να προσέχουμε;
Την αρχικοποίηση της συνθήκης
Την ενημέρωση της συνθήκης εντός του βρόχου
Το κριτήριο της περατότητας
Το χρώμα του φόντου της οθόνης
✅ Σωστά! Το χρώμα του φόντου δεν έχει σχέση με τη λογική του προγράμματος.
❌ Λάθος. Το χρώμα του φόντου δεν επηρεάζει τη λειτουργία του βρόχου. Τα υπόλοιπα είναι κρίσιμα στοιχεία.
7. Τι είναι ο έλεγχος μαύρου κουτιού (black-box testing);
Έλεγχος από προδιαγραφές χωρίς να βλέπουμε τον κώδικα
Έλεγχος μόνο του εσωτερικού κώδικα
Έλεγχος μόνο των συντακτικών λαθών
Έλεγχος μόνο της εμφάνισης του προγράμματος
✅ Σωστά! Στον έλεγχο μαύρου κουτιού τα δεδομένα εισόδου προκύπτουν από τις προδιαγραφές του προγράμματος, αγνοώντας εντελώς τον κώδικα.
❌ Λάθος. Ο έλεγχος μαύρου κουτιού εξετάζει το πρόγραμμα από τις προδιαγραφές του, χωρίς να βλέπουμε τον εσωτερικό κώδικα.
8. Τι περιγράφει ένα σενάριο ελέγχου (test case);
Μόνο τα δεδομένα εισόδου
Τα δεδομένα εισόδου και τα αναμενόμενα αποτελέσματα
Μόνο τον κώδικα του προγράμματος
Μόνο τα λάθη που βρέθηκαν
✅ Σωστά! Ένα test case περιγράφει τα δεδομένα εισόδου και τα αναμενόμενα αποτελέσματα.
❌ Λάθος. Το test case περιλαμβάνει τόσο τα δεδομένα εισόδου όσο και τα αναμενόμενα αποτελέσματα.
9. Σύμφωνα με την ανάλυση ακραίων τιμών, πού εμφανίζονται τα περισσότερα λάθη;
Στη μέση των διαστημάτων
Σε τυχαίες τιμές
Στις ακραίες τιμές των διαστημάτων
Σε μη έγκυρες τιμές μόνο
✅ Σωστά! Η εμπειρία έχει δείξει ότι τα περισσότερα λάθη γίνονται στις ακραίες τιμές των διαστημάτων (π.χ. <= αντί για <).
❌ Λάθος. Τα περισσότερα λάθη εμφανίζονται στις ακραίες τιμές των διαστημάτων (boundary values).
10. Τι είναι η μέθοδος ισοδύναμων διαστημάτων (equivalence partitioning);
Δημιουργία ισοδύναμων ομάδων τιμών εισόδου για έλεγχο
Διαίρεση του προγράμματος σε ίσα μέρη
Έλεγχος μόνο των έγκυρων τιμών
Καταμέτρηση των γραμμών κώδικα
✅ Σωστά! Η μέθοδος ισοδύναμων διαστημάτων δημιουργεί ομάδες (διαστήματα) τιμών εισόδου που θεωρούνται ισοδύναμες ως προς τα αποτελέσματα.
❌ Λάθος. Η μέθοδος ισοδύναμων διαστημάτων δημιουργεί ομάδες τιμών εισόδου που θεωρούνται ισοδύναμες.
11. Ποιο είναι το πρώτο βήμα στον έλεγχο μαύρου κουτιού;
Ανάγνωση του κώδικα
Δημιουργία ισοδύναμων διαστημάτων τιμών
Εκτέλεση του προγράμματος
Διόρθωση των λαθών
✅ Σωστά! Το πρώτο βήμα είναι η δημιουργία ισοδύναμων διαστημάτων τιμών (equivalence partitioning) για τα δεδομένα εισόδου.
❌ Λάθος. Το πρώτο βήμα είναι η δημιουργία ισοδύναμων διαστημάτων τιμών για τα δεδομένα εισόδου.
12. Πώς αντιμετωπίζονται τα λάθη χρόνου εκτέλεσης;
Αυτόματα από το IDE
Με ανασκόπηση κώδικα
Με εντολές προγράμματος που τα παγιδεύουν
Δεν αντιμετωπίζονται
✅ Σωστά! Τα λάθη χρόνου εκτέλεσης αντιμετωπίζονται με εντολές προγράμματος που τα παγιδεύουν και εκτελούν κατάλληλες διαδικασίες χειρισμού.
❌ Λάθος. Τα λάθη χρόνου εκτέλεσης αντιμετωπίζονται με εντολές προγράμματος που τα παγιδεύουν.
13. Σε μεγάλα προγράμματα με υποπρογράμματα, πώς γίνεται ο έλεγχος;
Πρώτα κάθε υποπρόγραμμα μεμονωμένα, μετά ολόκληρο το πρόγραμμα
Μόνο ολόκληρο το πρόγραμμα μαζί
Μόνο τα υποπρογράμματα που έχουν σφάλματα
Τυχαία επιλογή υποπρογραμμάτων
✅ Σωστά! Σε μεγάλα προγράμματα πρώτα ελέγχεται κάθε υποπρόγραμμα μεμονωμένα και μετά ολόκληρο το πρόγραμμα.
❌ Λάθος. Πρώτα ελέγχεται κάθε υποπρόγραμμα μεμονωμένα και αφού διαπιστωθεί η ορθή λειτουργία του καθενός, πραγματοποιείται έλεγχος ολόκληρου του προγράμματος.
14. Γιατί η πρόληψη των λαθών χρόνου εκτέλεσης είναι δύσκολη;
Γιατί ο μεταγλωττιστής δεν τα ανιχνεύει
Γιατί οφείλονται σε καταστάσεις που δεν είναι εύκολο να ελεγχθούν
Γιατί εμφανίζονται μόνο σε παλιούς υπολογιστές
Γιατί δεν υπάρχουν εργαλεία εκσφαλμάτωσης
✅ Σωστά! Η πρόληψη είναι δύσκολη γιατί οφείλονται σε καταστάσεις που δεν είναι εύκολο να ελεγχθούν από τον προγραμματιστή και πολλές φορές εμφανίζονται μετά από μεγάλο χρονικό διάστημα.
❌ Λάθος. Η πρόληψη είναι δύσκολη γιατί οφείλονται σε καταστάσεις που δεν είναι εύκολο να ελεγχθούν από τον προγραμματιστή.
15. Ποια από τα παρακάτω είναι παράδειγμα λάθους χρόνου εκτέλεσης;
Λανθασμένη συγγραφή δεσμευμένης λέξης
Χρήση > αντί για >= σε συνθήκη
Διαίρεση αριθμού με το μηδέν
Λάθος αρχικοποίηση μεταβλητής
✅ Σωστά! Η διαίρεση με το μηδέν είναι κλασικό παράδειγμα λάθους χρόνου εκτέλεσης. Τα υπόλοιπα είναι συντακτικό (α) και λογικό (β, γ) λάθος.
❌ Λάθος. Η διαίρεση με το μηδέν είναι λάθος χρόνου εκτέλεσης. Τα υπόλοιπα είναι συντακτικό (α) και λογικό (β, γ) λάθος.
🏆 Τελικό Σκορ
💪 Προκλήσεις: Προσπάθησε να τις λύσεις μόνος σου πριν δεις την απάντηση!
Δίνεται το παρακάτω πρόγραμμα που υπολογίζει το άθροισμα των ακεραίων από 1 έως 10. Να εντοπίσετε και να διορθώσετε το λογικό λάθος.
ΑΡΧΗ
sum ← 0
i ← 1
ΟΣΟ i <= 10 ΕΠΑΝΑΛΑΒΕ
sum ← sum + i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ sum
ΤΕΛΟΣ
Λύση: Το λάθος είναι ότι η μεταβλητή i δεν ενημερώνεται μέσα στον βρόχο. Ο βρόχος θα εκτελείται επ' άπειρον γιατί η συνθήκη i <= 10 θα είναι πάντα αληθής.
Διόρθωση:
ΑΡΧΗ
sum ← 0
i ← 1
ΟΣΟ i <= 10 ΕΠΑΝΑΛΑΒΕ
sum ← sum + i
i ← i + 1 ! Ενημέρωση του μετρητή
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ sum
ΤΕΛΟΣ
Άσκηση 2: Λάθος στη Συνθήκη (Παράλειψη Τελευταίας Τιμής)
⭐⭐⭐
Δίνεται το παρακάτω πρόγραμμα που υπολογίζει το παραγοντικό του 5. Να εντοπίσετε και να διορθώσετε το λογικό λάθος.
ΑΡΧΗ
fact ← 1
i ← 1
ΟΣΟ i < 5 ΕΠΑΝΑΛΑΒΕ
fact ← fact * i
i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ fact
ΤΕΛΟΣ
Λύση: Το λάθος είναι στη συνθήκη του βρόχου. Η συνθήκη i < 5 σταματάει όταν το i γίνει 5, άρα ο πολλαπλασιασμός γίνεται μέχρι το 4 (1×2×3×4 = 24) αντί για 5 (1×2×3×4×5 = 120).
Διόρθωση: Η συνθήκη πρέπει να είναι i <= 5 ή i < 6.
ΑΡΧΗ
fact ← 1
i ← 1
ΟΣΟ i <= 5 ΕΠΑΝΑΛΑΒΕ ! Διόρθωση: <= αντί για <
fact ← fact * i
i ← i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ fact
ΤΕΛΟΣ
Άσκηση 3: Λάθος Αρχικοποίησης
⭐⭐
Δίνεται το παρακάτω πρόγραμμα που υπολογίζει το άθροισμα 10 αριθμών που δίνει ο χρήστης. Να εντοπίσετε και να διορθώσετε το λογικό λάθος.
ΑΡΧΗ
sum ← 10
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΔΙΑΒΑΣΕ x
sum ← sum + x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ sum
ΤΕΛΟΣ
Λύση: Το λάθος είναι στην αρχικοποίηση του sum. Το άθροισμα πρέπει να αρχικοποιείται σε 0, όχι σε 10. Με sum ← 10, το τελικό αποτέλεσμα θα είναι μεγαλύτερο κατά 10 από το σωστό.
Διόρθωση:
ΑΡΧΗ
sum ← 0 ! Διόρθωση: 0 αντί για 10
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΔΙΑΒΑΣΕ x
sum ← sum + x
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ sum
ΤΕΛΟΣ
Άσκηση 4: Έλεγχος Μαύρου Κουτιού
⭐⭐⭐
Ένα πρόγραμμα δέχεται ως είσοδο έναν ακέραιο αριθμό και εμφανίζει «Θετικός» αν είναι > 0, «Αρνητικός» αν είναι < 0, και «Μηδέν» αν είναι 0. Να γράψετε test cases χρησιμοποιώντας την ανάλυση ακραίων τιμών και ισοδύναμων διαστημάτων.
Λύση:
Ισοδύναμα διαστήματα:
Θετικοί αριθμοί: (0, +∞)
Αρνητικοί αριθμοί: (-∞, 0)
Μηδέν: {0}
Μη έγκυρες τιμές: (π.χ. κείμενο, κενή είσοδος)
Test Cases (ακραίες τιμές):
Είσοδος
Αναμενόμενο Αποτέλεσμα
Σχόλιο
1
Θετικός
Ακραία θετική (όριο)
-1
Αρνητικός
Ακραία αρνητική (όριο)
0
Μηδέν
Ακραία τιμή (κοινό όριο)
100
Θετικός
Εσωτερικό θετικού διαστήματος
-100
Αρνητικός
Εσωτερικό αρνητικού διαστήματος
Άσκηση 5: Λάθος σε Πίνακα (Υπέρβαση Ορίων)
⭐⭐⭐
Δίνεται το παρακάτω πρόγραμμα που διαβάζει 5 αριθμούς σε πίνακα και τους εμφανίζει. Να εντοπίσετε και να διορθώσετε το λάθος.
ΑΡΧΗ
ΔΗΛΩΣΕ Π[1..5]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6 ! Προσοχή εδώ
ΔΙΑΒΑΣΕ Π[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΕΜΦΑΝΙΣΕ Π[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ
Λύση: Ο πρώτος βρόχος τρέχει από 1 μέχρι 6, αλλά ο πίνακας έχει μόνο 5 θέσεις (1..5). Όταν i = 6, προσπελαύνουμε μη υπαρκτή θέση — υπέρβαση ορίων πίνακα (λάθος χρόνου εκτέλεσης).
Διόρθωση:
ΑΡΧΗ
ΔΗΛΩΣΕ Π[1..5]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 ! Διόρθωση: 5 αντί για 6
ΔΙΑΒΑΣΕ Π[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΕΜΦΑΝΙΣΕ Π[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ
Άσκηση 6: Λάθος Λογικής Συνθήκης (<= vs <)
⭐⭐⭐
Ένα πρόγραμμα ελέγχει αν ο βαθμός ενός μαθητή είναι «Άριστος» (>= 18), «Πολύ Καλός» (16-17), «Καλός» (13-15), «Μέτριος» (10-12) ή «Κάτω από τη βάση» (< 10). Βρείτε το λάθος:
Το παρακάτω πρόγραμμα υπολογίζει το μέσο όρο 5 βαθμών. Βρείτε όλα τα λάθη.
ΑΡΧΗ
sum ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΔΙΑΒΑΣΕ βαθμος
sum ← βαθμος ! Λάθος 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ ← sum / 5
ΕΜΦΑΝΙΣΕ ΜΟ
ΤΕΛΟΣ
Λύση:
Λάθος 1: Η εντολή sum ← βαθμος αντικαθιστά το άθροισμα αντί να προσθέτει. Πρέπει να είναι sum ← sum + βαθμος.
Λάθος 2 (υπονοούμενο): Αν ο βρόχος δεν εκτελεστεί καμία φορά (π.χ. σε άλλη παραλλαγή), το sum θα είναι 0 και ο ΜΟ θα είναι 0. Σε αυτή την περίπτωση με ΓΙΑ ο βρόχος εκτελείται πάντα, αλλά σε ΟΣΟ θα έπρεπε να προσέχουμε και την περίπτωση μηδενικής εκτέλεσης.
Διόρθωση:
ΑΡΧΗ
sum ← 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΔΙΑΒΑΣΕ βαθμος
sum ← sum + βαθμος ! Σωστό: πρόσθεση όχι αντιστοίχιση
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ ← sum / 5
ΕΜΦΑΝΙΣΕ ΜΟ
ΤΕΛΟΣ