Κατηγορίες Λαθών - Εκφαλμάτωση

Ξεκίνησε από Σάκης Δημόπουλος, 28 Δεκ 2019, 07:33:36 ΜΜ

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

pgrontas

Όλη η συζήτηση εδώ δεν έχει κανένα νόημα, γιατί όπως ξέρουμε και από τη Λογική ξεκινώντας από ψευδή υπόθεση μπορείς να αποδείξεις οτιδήποτε.
Αυτό που πρέπει να γίνει είναι να καταργηθεί το συγκεκριμένο έγγραφο, το οποίο σωστά αναφέρθηκε ότι είναι αυθαίρετο (akalestos) και ασυνεπές (evry).
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

ApoAntonis

Επί του πιεστηρίου:
Οι υπουργικές αποφάσεις, είναι πάνω από το βιβλίο.
Αλλιώς οι οδηγίες διδασκαλίας δεν έχουν νόημα
όμως, όπως θα δούμε παρακάτω για να μην υπάρχει στασιμότητα και για να μας παράσχουν την
δυνατότητα να ξεδιπλώσουνε το ταλέντο μας, δεν είναι πάντα του δι πόιντ.
--------------------
Ευκαιρίας δοθείσης να ρωτήσω και εγώ:

κανόνες εμφωλευμένων βρόχων σελ. 150 (ας μείνω μόνο στην ΓΙΑ)

ΓΙΑ i ΑΠΟ α ΜΕΧΡΙ β ΜΕ_ΒΗΜΑ γ
   ΓΙΑ i ΑΠΟ δ ΜΕΧΡΙ ε ΜΕ_ΒΗΜΑ στ
       .
       .
       .
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

αυτό είναι συντακτικό λάθος φαντάζομαι

αυτό είναι συντακτικό;

ΓΙΑ i ΑΠΟ α ΜΕΧΡΙ β ΜΕ_ΒΗΜΑ γ
   k <-- i
   ΓΙΑ i ΑΠΟ δ ΜΕΧΡΙ ε ΜΕ_ΒΗΜΑ στ
       .
       .
       .
   ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
   i <-- k
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Με τρώει φοβερά να συνεχίσω τις ερωτήσεις. Θα συνεχίσω.
Την τιμή του βήματος μέσα στον βρόχο της ΓΙΑ μπορούμε να την τροποποιήσουμε;
Τις τιμές των τιμή1, τιμή2;


* παρένθεση:
ας υποθέσουμε ότι έρχεται ένας μαθητής και γράφει:
Η τιμή της μεταβλητής συγκρίνεται με την τελική τιμή και εφόσον είναι μικρότερη από αυτή,
τότε εκτελούνται οι εντολές που βρίσκονται στο βρόχο.

Τι του λες; Ναι είναι λάθος η απάντηση αλλά δεν έχει πανόραμα διορθώσεων το βιβλίο και το γράφει σωστά στο βιβλίο 3.
-Ωραία, γιατί δεν το βγάλανε την παράγραφο από την ύλη; Ποιό από τα δύο ισχύει;
Ισχύει αυτό που σου λέω εγώ.
-Αααααα, και οι οδηγίες τι λένε;
Ξέρεις οι οδηγίες δεν λένε κάτι επ'αυτού. Διάβασε και όλα τα βιβλία, κάνε μια σούμα και αν σου κάτσει θα πετύχεις την απάντηση.
-Η ΕΠΙΛΕΞΕ πως συντάσσεται;
άει παράτα μας από 'κει χάμω. Σπασικλάκι.


έχω άλλη μια ερώτηση αλλά για τον παιχνιδισμό θα την δώσω σε εικόνα
Να χαρακτηρίσετε το είδος που συμβαίνει, όταν γίνεται έλεγχος περιττών συνθηκών. (εικ.1)

Γενικά, από ότι καταλαβαίνω,
η σημασιολογία κάθε λέξης χρησιμοποιείται με χαλαρό τρόπο. Ενώ λοιπόν είναι γνωστό ότι η ύλη εμπλουτίζεται
με κατηγορίες λαθών, και το ΛΑΘΟΣ αποκτά άλλη βαρύτητα οι κακές πρακτικές συνεχίζουν να αναφέρονται ως λάθη.

κακών πρακτικών συνέχεια: από τις οδηγίες διδασκαλίας (εικ.2)

Υ.Γ. συγνώμη για το εκτενές του ποστ, αλλά έβγαλα κέφι


telits

Καλησπέρα, ένα ακόμη λάθος που δεν είναι σίγουρο αν θα το βρει ο μεταγλωττιστής ή θα είναι runtime
είναι ένα "ΔΙΑΒΑΣΕ μέσα σε συνάρτηση" . Αν μπορείτε να με κατατοπίσετε σχετικά με αυτό.
Αναφέρεται κάπου και το έχω χάσει;
Τηλέμαχος Ελευθερίου
Καθηγητης Πληροφορικης στο Ρεθυμνο☘

alkisg

Νομίζω κι αυτό μπορεί να θεωρηθεί συμβουλή.

Για παράδειγμα, έστω μια συνάρτηση που καλεί μια διαδικασία που εκείνη έχει εντολή ΔΙΑΒΑΣΕ, και μάλιστα μέσα σε ΑΝ.
Καταρχάς αυτό επιτρέπεται ή όχι; Ας πούμε ότι το πνεύμα της συμβουλής είναι "όχι δεν επιτρέπεται ούτε αυτή η ΔΙΑΒΑΣΕ".

Για να καταφέρει όμως κάποιος super-compiler να το εντοπίσει ως συντακτικό λάθος,
ή για να καταφέρει ένα super-runtime-environment να το εντοπίσει ως λάθος χρόνου εκτέλεσης,
θα έπρεπε να κάνουν τόσο μυστηριώδη κόλπα και κάτω από τόσες προϋποθέσεις, που θα χανόταν όλη η απλότητα, το νόημα και η διδακτική αξία του.

ApoAntonis

Παράθεση από: alkisg στις 05 Φεβ 2020, 11:37:45 ΠΜ
Για παράδειγμα, έστω μια συνάρτηση που καλεί μια διαδικασία που εκείνη έχει εντολή ΔΙΑΒΑΣΕ, και μάλιστα μέσα σε ΑΝ.


χα, υπάρχει πρόβλεψη!

(δεν υπάρχει η πρόβλεψη όμως ότι αναφέρεται στην ΓΛΩΣΣΑ... Γενικώς με το συντακτικό δεν το πολυέχουμε.)

*μπορεί κάποιος να μου δείξει ένα ιμιτασιόν παράδειγμα;

akalest0s

Παράθεση από: alkisg στις 05 Φεβ 2020, 11:37:45 ΠΜ
Νομίζω κι αυτό μπορεί να θεωρηθεί συμβουλή.

Για παράδειγμα, έστω μια συνάρτηση που καλεί μια διαδικασία που εκείνη έχει εντολή ΔΙΑΒΑΣΕ, και μάλιστα μέσα σε ΑΝ.
Καταρχάς αυτό επιτρέπεται ή όχι; Ας πούμε ότι το πνεύμα της συμβουλής είναι "όχι δεν επιτρέπεται ούτε αυτή η ΔΙΑΒΑΣΕ".
Η κλήση διαδικασίας από συνάρτηση, στη Γλώσσα, απαγορεύεται, σωστά; (θα ξεχάσω και αυτά που ξέρω..)

Παράθεσημπορεί κάποιος να μου δείξει ένα ιμιτασιόν παράδειγμα;
Τα αυθεντικά παραδείγματα θέλουν αυθεντικούς ανθρώπους.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

alkisg

Παράθεση από: ApoAntonis στις 05 Φεβ 2020, 12:57:39 ΜΜ
χα, υπάρχει πρόβλεψη!

(δεν υπάρχει η πρόβλεψη όμως ότι αναφέρεται στην ΓΛΩΣΣΑ... Γενικώς με το συντακτικό δεν το πολυέχουμε.)

Έχεις δίκιο, το είχα ξεχάσει, άκυρο το παράδειγμά μου. Τώρα το γιατί στέλνουν τέτοιες αυθαιρεσίες εκ των υστέρων, και τι κακό έχει το να καλέσει κανείς Αντιμετάθεσε(α, β) από συνάρτηση, είναι άλλη συζήτηση... :)

Κώστας Τ.

#22
Με προλάβατε με τις συναρτήσεις!
Η επόμενη απορία μου θα ήταν, σε ποια κατηγορία λαθών τοποθετούμε την κλήση διαδικασίας από συνάρτηση;

Λογικά αυτό δεν περνάει καν από compiler εφ'οσον έχει απαγορευτεί, αρά συντακτικό λάθος;

ApoAntonis

Παράθεση από: alkisg στις 07 Φεβ 2020, 06:50:49 ΠΜ
Έχεις δίκιο, το είχα ξεχάσει, άκυρο το παράδειγμά μου. Τώρα το γιατί στέλνουν τέτοιες αυθαιρεσίες εκ των υστέρων, και τι κακό έχει το να καλέσει κανείς Αντιμετάθεσε(α, β) από συνάρτηση, είναι άλλη συζήτηση... :)

Έχω μια άλλη ερώτηση, πιο ελεύθερη. Εφόσον τα προγράμματα μας (της ΓΛΩΣΣΑΣ ντε! ) δεν περνάνε από μεταγλωττιστή αλλά από διερμηνευτή,
η αναγνώριση των συντακτικών λαθών δεν γίνεται κατά την φάση της εκτέλεσης;

Και κάτι ακόμα, στον Διερμηνευτή
η ΔΙΑΒΑΣΕ χωρίς λίστα, δεν χτυπάει επίτηδες ή έχει ξεφύγει;

Οι ερωτήσεις είναι διερευνητικές και δεν έχω αναφέρομαι στην θεωρία.

alkisg

Η διαχωριστική γραμμή μεταξύ διερμηνευτών και μεταγλωττιστών μερικές φορές είναι λίγο θολή.
Για χάρη συντομίας, ας πούμε ότι μεταγλωττιστής είναι κάτι που μεταφράζει μια γλώσσα (π.χ. υψηλού επιπέδου) σε μια άλλη (π.χ. assembly bytecodes ή java virtual machine bytecodes). Έτσι το "εκτελέσιμο" μπορεί να εκτελεστεί χωρίς να χρειάζεται έναν διερμηνευτή για βοηθό την ώρα της εκτέλεσης.

Πέρα από τα παραπάνω, ένας διερμηνευτής είναι ελεύθερος να κάνει ό,τι θέλει. Π.χ. ο Διερμηνευτής της ΓΛΩΣΣΑΣ κάνει πλήρη συντακτικό έλεγχο πριν την εκτέλεση και μετατρέπει τη ΓΛΩΣΣΑ σε μια εσωτερική αναπαράσταση από Delphi Pascal objects (ένα object για την ΟΣΟ, ένα για τις εκφράσεις, ένα για τις μεταβλητές κλπ). Άρα ο Διερμηνευτής κάνει συντακτικό έλεγχο πριν από την εκτέλεση και ανεξάρτητα από αυτή.

Άλλοι διερμηνευτές, όπως της gwbasic, ήταν line-based, οπότε εκτελούσαν μία-μία τις εντολές όπως τις έβλεπαν και άρα έκαναν συντακτικό έλεγχο ανά γραμμή και όχι μονομιάς σε όλο το πρόγραμμα.

Για τη ΔΙΑΒΑΣΕ, δεν θυμάμαι αν είχα δει κάτι στο βιβλίο ή όχι, αλλά το ίδιο κάνει και η Pascal, π.χ. σκέτη readln; περιμένει τον χρήστη να πατήσει ένα Enter και αγνοεί ό,τι και αν έγραψε ο χρήστης. Είναι παραπλήσιο με τη σκέτη ΓΡΑΨΕ που αφήνει μια κενή γραμμή, και αν θυμάμαι καλά υπάρχει παράδειγμα και στο βιβλίο.

ApoAntonis


Yannis Filopoulos

Παράθεση από: evry στις 04 Φεβ 2020, 06:11:13 ΜΜ

Κώδικας: javascript
Σ <- 0
Διάβασε Α
Για ι από 1 μέχρι 100
    Αν Α = 0 Τότε
         ι <- 101
    Αλλιώς
        Σ <- Σ + Α
       Διάβασε Α
    Τέλος_Αν
Τέλος_Επανάληψης
Γράψε Σ


Επίσης ο παραλογισμός φαίνεται από το γεγονός ότι το παρακάτω τμήμα κώδικα γίνεται δεκτό στο μάθημα

Κώδικας: javascript
Σ <- 0
Διάβασε Α
Όσο ι<=100 και Α<>0 Επανάλαβε
      Σ <- Σ + Α
      Διάβασε Α
      ι <- ι + 1
Τέλος_Επανάληψης
Γράψε Σ


Τα δυο τμήματα κώδικα εκτελούν την ίδια λειτουργία!!!
Το ένα όμως επιτρέπεται και το άλλο όχι!!!  :D


Το πρώτο παράδειγμα (αυτό με την εκχώρηση i <-101) ουσιαστικά υλοποιεί την break ή την goto με έλεγχο της τιμής της μεταβλητής Α.
Εντολές που δεν χρησιμοποιούμε στο μάθημα, όπως αναφέρεται και στο κεφάλαιο 6 -στο δομημένο προγραμματισμό (σχετικά με τη goto)-. 

Λαμπράκης Μανώλης

Καλησπέρα σε όλους

σκοπεύω να παρουσιάσω στους μαθητές μου τις κατηγορίες λαθών ως εξής με το εξής γενικό διάγραμμα:
Συντακτικά λάθη || τα εντοπίζει --> ο μεταγλωττιστής || δημιουργείται πρόγραμμα ? --> όχι || τα διορθώνει --> ο προγραμματιστής με τη βοήθεια του μεταγλωττιστή
Λογικά λάθη || τα εντοπίζει --> ο προγραμματιστής|| δημιουργείται πρόγραμμα ? --> ναι αλλά με λάθος αποτέλεσμα || τα διορθώνει --> ο προγραμματιστής με ελέγχους που πραγματοποιεί
Λάθη κατά την εκτέλεση  || τα εντοπίζει --> ο προγραμματιστής??|| δημιουργείται πρόγραμμα ? --> ναι αλλά δεν ολοκληρώνεται, σταματάει με αντικανονικό τρόπο || τα διορθώνει --> ο προγραμματιστής με ελέγχους που πραγματοποιει ??

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

bugman

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

Λαμπράκης Μανώλης

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