ΥΠΕΡΒΑΣΗ ΟΡΙΩΝ ΠΙΝΑΚΑ, ΤΙ ΛΑΘΟΣ ΘΕΩΡΕΙΤΑΙ;

Ξεκίνησε από kanti, 18 Απρ 2024, 08:43:09 ΜΜ

« προηγούμενο - επόμενο »

kanti

η υπέρβαση ορίου στον πίνακα θεωρείται συντακτικό ή χρόνου εκτέλεσης;
πχ. για Ι απο 1 μέχρι 5
         γράψε Α[Ι+1]
      Τέλος_επανάληψης             σε πίνακα Α[5];

petrosp13

Με βάση λυμένο παράδειγμα του νέου βιβλίου, είναι λάθος κατά την εκτέλεση
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kanti

Ναι συμφωνώ λόγω του παραδείγματος. αν  όμως η εντολή είναι π.χ.
διαβασε Α[6]                  ! αλλά σε πίνακα Α[5]

δεν είναι συντακτικό κανονικά;
:-\

NIKOS_KALYVAS

#3
Το λευκό σχολικό βιβλίο ( ΣΥΜΠΛΗΡΩΜΑΤΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΥΛΙΚΟ) κακώς κατά την άποψή μου εντάσσει αυτό του είδους λάθος κάτω από τον τίτλο  "Εκσφαλμάτωση λογικών λαθών σε πίνακες". Πόσο μάλλον μπερδεύει τον μαθητή όταν κατά την εικονική εκτέλεση του παραδείγματος το χαρακτηρίζει αντικανονικού τερματισμού.

Στο πράσινο βιβλίο αναφέρεται:

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

Επομένως δεν μπορεί να χαρακτηριστεί λογικό λάθος ένα λάθος που προκαλεί αντικανονικό τερματισμό του προγράμματος.

Όταν "βγαίνουμε" εκτός των ορίων του πίνακα είναι λάθος που οδηγεί σε αντικανονικό τερματισμό.
ΝΙΚΟΣ ΚΑΛΥΒΑΣ
Καθηγητής Πληροφορικής (ΠΕ86)

pgrontas

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


Παράθεση από: NIKOS_KALYVAS στις 18 Απρ 2024, 11:58:31 ΜΜΤο λευκό σχολικό βιβλίο ( ΣΥΜΠΛΗΡΩΜΑΤΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΥΛΙΚΟ) κακώς κατά την άποψή μου εντάσσει αυτό του είδους λάθος κάτω από τον τίτλο  "Εκσφαλμάτωση λογικών λαθών σε πίνακες". Πόσο μάλλον μπερδεύει τον μαθητή όταν κατά την εικονική εκτέλεση του παραδείγματος το χαρακτηρίζει αντικανονικού τερματισμού.


Εδώ σας θέλω
Παράθεση από: kanti στις 18 Απρ 2024, 11:27:48 ΜΜΝαι συμφωνώ λόγω του παραδείγματος. αν  όμως η εντολή είναι π.χ.
διαβασε Α[6]                  ! αλλά σε πίνακα Α[5]

δεν είναι συντακτικό κανονικά;
Αν το A mod 5 με Α πραγματική μεταβλητή είναι συντακτικό λάθος (σύμφωνα με τους θεματοδότες του 2023), γιατί και το Α[6] με Α πίνακα 5 θέσεων να μην είναι;
Δυστυχώς αυτές είναι οι συνέπειες από θέματα που αγγίζουν γκρίζες περιοχές (του βιβλίου) με λανθασμένο τρόπο.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Παράθεση από: pgrontas στις 19 Απρ 2024, 07:43:13 ΠΜΣτην πραγματικότητα τα λάθη αντικανονικού τερματισμού είναι μια ειδική κατηγορία λογικού λάθους, όταν το λάθος αποτέλεσμα είναι ο πρόωρος τερματισμός του προγράμματος.

Μπορούμε να το πάμε και ακόμα παραπέρα, ότι "ο αντικανονικός τερματισμός δεν είναι απαραίτητα λάθος προγραμματιστή",
αλλά ότι "ο αντικανονικός τερματισμός είναι μία μέθοδος αντιμετώπισης μιας προβληματικής κατάστασης, η οποία διαγνώστηκε είτε από το ίδιο το πρόγραμμα, είτε από κάποια βιβλιοθήκη (runtime system), είτε από το λειτουργικό σύστημα". Η προβληματική κατάσταση μπορεί να προκλήθηκε από λογικό λάθος, μπορεί και όχι.

Π.χ. if not enough memory, raise exception and terminate program, είναι αντικανονικός τερματισμός χωρίς "λάθος" από την πλευρά των προγραμματιστών. Άμα θες να φορτώσεις 10G εικόνα σε 4GB RAM, δεν το υποστηρίζουμε, τέλος.
Δεν είναι τόσο σημαντικό αν αυτός ο κώδικας ήταν μέρος του προγράμματος, μιας βιβλιοθήκης ή του λειτουργικού.

tsioulak

Παράθεση από: pgrontas στις 19 Απρ 2024, 07:43:13 ΠΜΕδώ σας θέλωΑν το A mod 5 με Α πραγματική μεταβλητή είναι συντακτικό λάθος (σύμφωνα με τους θεματοδότες του 2023), γιατί και το Α[6] με Α πίνακα 5 θέσεων να μην είναι;
Δυστυχώς αυτές είναι οι συνέπειες από θέματα που αγγίζουν γκρίζες περιοχές (του βιβλίου) με λανθασμένο τρόπο.
Συνάδελφε, στην πραγματική ζωή αυτό που λες ίσως χτυπούσε syntax ίσως και όχι, ανάλογα τον compiler.
Εγώ συμφωνώ μαζί σου ότι αφού βάζεις το float(A) mod 5 να χτυπά syntax error τότε μάλλον θα έπρεπε να είναι syntax error και το A[6] σε πίνακα μεγέθους 5 ΑΛΛΑ δεν μπορούσε να είμαστε σίγουροι αν δεν ξέρουμε τον compiler.

Ένας ακόμη λόγος να γυρίσουμε σε μια κανονική γλώσσα προγραμματισμού.

ΥΓ. Τα κάνανε μαντάρα οι συγραφείς όσον αφορά τις κατηγορίες λαθών, πληροφορίες σκορπισμένες σε 4 σημεία σε πολλαπλά βιβλία, δίχως ακριβείς ορισμούς και ελάχιστα παραδείγματα, αν δεν πέσουν στις πανελλαδικές δεν μπορούμε να ξέρουμε τι ισχύει τελικά.

pgrontas

#7
Παράθεση από: tsioulak στις 23 Απρ 2024, 11:53:21 ΠΜΣυνάδελφε, στην πραγματική ζωή αυτό που λες ίσως χτυπούσε syntax ίσως και όχι, ανάλογα τον compiler.
Εγώ συμφωνώ μαζί σου ότι αφού βάζεις το float(A) mod 5 να χτυπά syntax error τότε μάλλον θα έπρεπε να είναι syntax error και το A[6] σε πίνακα μεγέθους 5 ΑΛΛΑ δεν μπορούσε να είμαστε σίγουροι αν δεν ξέρουμε τον compiler.

Ένας ακόμη λόγος να γυρίσουμε σε μια κανονική γλώσσα προγραμματισμού.

ΥΓ. Τα κάνανε μαντάρα οι συγραφείς όσον αφορά τις κατηγορίες λαθών, πληροφορίες σκορπισμένες σε 4 σημεία σε πολλαπλά βιβλία, δίχως ακριβείς ορισμούς και ελάχιστα παραδείγματα, αν δεν πέσουν στις πανελλαδικές δεν μπορούμε να ξέρουμε τι ισχύει τελικά.
Αν και γενικά συμφωνούμε, μια 'λεπτή' αλλά ουσιαστική επισήμανση:
Στην πραγματική ζωή το ότι θα το έπιανε ο compiler δεν το κάνει συντακτικό. Πολλοί compilers πιάνουν και σημασιολογικά λάθη, αλλά αυτό δεν αλλάζει την φύση τους.
Και ακριβώς επειδή η συμπεριφορά των compilers ποκιλλει, έχει μεγαλύτερη σημασία η εξήγηση της φύσης του λάθους.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson