Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Θεωρία => Μήνυμα ξεκίνησε από: epsilonXi στις 09 Μαρ 2021, 11:57:27 ΠΜ

Τίτλος: κατηγορίες σφαλμάτων
Αποστολή από: epsilonXi στις 09 Μαρ 2021, 11:57:27 ΠΜ
δοκιμάζω:

Κώδικας (glossa) [Επιλογή]
ΠΡΟΓΡΑΜΜΑ πχ
ΑΡΧΗ
  ΓΡΑΨΕ 'ααα'
  ΓΡΑΨΕ Τ_Ρ(1,2)
  ΓΡΑΨΕ 'βββ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


και παίρνω έξοδο:
Δεν έκλεισε η δεξιά παρένθεση της ενσωματωμένης συνάρτησης «Τ_Ρ».
δηλαδή δεν ξεκίνησε καν να τρέξει, σφάλμα σύνταξης

δοκιμάζω:
Κώδικας (glossa) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ πχ
ΑΡΧΗ
  ΓΡΑΨΕ 'ααα'
  ΓΡΑΨΕ Τ_Ρ('α')
  ΓΡΑΨΕ 'βββ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


και παίρνω έξοδο:
Η ενσωματωμένη συνάρτηση «Τ_Ρ» δεν μπορεί να δεχτεί αυτό το όρισμα.
«'α'»: αλφαριθμητική σταθερά
δηλαδή δεν ξεκίνησε καν να τρέξει, σφάλμα σύνταξης

δοκιμάζω:
Κώδικας (glossa) [Επιλογή]
ΠΡΟΓΡΑΜΜΑ πχ
ΑΡΧΗ
  ΓΡΑΨΕ 'ααα'
  ΓΡΑΨΕ Τ_Ρ(-1)
  ΓΡΑΨΕ 'βββ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


και παίρνω έξοδο:
ααα
Σφάλμα «?sfa?µ??? ?e?t?????a p?a?µat???? a???µ??» κατά την αποτίμηση της ενσωματωμένης συνάρτησης «Τ_Ρ».
Τιμή ορίσματος: «-1» = -1
δηλαδή ξεκινάει και τρέχει και πετάει σφάλμα χρόνου εκτέλεσης

και «αναρωτιέμαι»
μήπως το τί σφάλμα είναι ένα κάποιο σφάλμα έχει να κάνει με την υλοποίηση του compiler/interpreter/ide
Τίτλος: Απ: κατηγορίες σφαλμάτων
Αποστολή από: alkisg στις 09 Μαρ 2021, 12:30:32 ΜΜ
Είναι κάποιο από τα παραπάνω που σου φαίνεται μη αναμενόμενο;

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

Το τρίτο, ο υπολογισμός του `Τ_Ρ(-1)` στην ΓΡΑΨΕ, δεν γίνεται από τον μεταγλωττιστή αλλά κατά τον χρόνο εκτέλεσης, από τις βιβλιοθήκες (runtime) του προγράμματος.

Όμως προσοχή, στο παρακάτω παράδειγμα, η ίδια έκφραση είναι λάθος χρόνου μεταγλώττισης:

Κώδικας (glossa) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ ΑρνητικόΌριο
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[Α_Μ(Τ_Ρ(-1))]
ΑΡΧΗ
  ΓΡΑΨΕ 'ΟΚ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Αυτό γιατί ο Διερμηνευτής είναι υποχρεωμένος να υπολογίσει το μέγεθος του πίνακα και άρα να αποτιμήσει το Τ_Ρ(-1) ΠΡΙΝ παράξει τον εκτελέσιμο κώδικα.

Στην πράξη τα πράγματα είναι ακόμα πιο πολύπλοκα, αφού μερικά προχωρημένα περιβάλλοντα προσπαθούν να κάνουν όσο περισσότερους ελέγχους μπορούν (linting) για να προειδοποιήσουν σχετικά τους developers, και έτσι θα ανιχνεύσουν το σφάλμα στην `ΓΡΑΨΕ Τ_Ρ(-1)` ακόμα και κατά τον στατικό έλεγχο. Σ' αυτήν την περίπτωση δεν λέγεται συντακτικό το λάθος αφού δεν παραβιάζεται κανένας συντακτικός κανόνας. Μπορεί να προκαλέσει compilation warning ή compilation error, ανάλογα με τις ρυθμίσεις.

Το linting όμως ξεφεύγει από τους στόχους του μαθήματος, οπότε καλύτερα να θεωρήσουμε ότι ΔΕΝ έχουμε τέτοιον προχωρημένο compiler στα πλαίσια του μαθήματος. Ο Διερμηνευτής επίτηδες κάνει μόνο τις πράξεις που είναι απαραίτητες για την μεταγλώττιση.
Τίτλος: Απ: κατηγορίες σφαλμάτων
Αποστολή από: epsilonXi στις 10 Μαρ 2021, 12:46:21 ΜΜ
το σχολιάζω μόνο να πω ότι σε ένα σχολικό μάθημα είναι πρακτικά αδύνατο να εξηγήσεις ώστε να μπορέσει ένας μαθητής να ξεχωρίσει μετά βεβαιότητας τη μια κατηγορία σφάλματος από την άλλη
Τίτλος: Απ: κατηγορίες σφαλμάτων
Αποστολή από: petrosp13 στις 10 Μαρ 2021, 01:26:31 ΜΜ
Γι'αυτό και αν ζητηθεί τέτοιο θέμα, θα πρέπει να είναι μονοσήμαντη η απάντηση
Αλίμονο μας αν μπλέξουμε και με αυτά