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

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

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

Κώστας Τ.

Καλησπέρα, ερώτηση: Το παρακάτω τμήμα προγράμματος σε ποιο είδος λάθους το κατηγοριοποιούμε;

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100
     ΔΙΑΒΑΣΕ i
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Λογικό λάθος;

petrosp13

Εγώ συντακτικό θα το χαρακτήριζα
Θα πρέπει ο μεταγλωττιστής να το εντοπίσει
Διαφορετικά, μάλλον runtime error
Λογικό δεν ταιριάζει καθώς δεν θα φτάσει σε ολοκλήρωση το πρόγραμμα
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

Καραμαούνας Πολύκαρπος

Τερματίζει για οποιαδήποτε τιμή του i > 99

alkisg

Θα το χαρακτήριζα λογικό λάθος γιατί δεν κάνει αυτό που θέλουμε.
Runtime δεν είναι γιατί δεν προκαλεί σφάλμα χρόνου εκτέλεσης, "Runtime error blabla: η εκτέλεση του προγράμματος διακόπηκε".
Συντακτικό δεν είναι γιατί δεν παραβιάζει τους συντακτικούς κανόνες της ΓΙΑ ή της ΔΙΑΒΑΣΕ, παραβιάζει μόνο τις "καλές πρακτικές", τις συστάσεις του βιβλίου.

ΑΝ θεωρούσαμε ότι "η μεταβολή του μετρητή της ΓΙΑ εντός της ΓΙΑ είναι συντακτικό λάθος", τότε θα μπορούσαμε να το πούμε και συντακτικό.

akalest0s

"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

P.Tsiotakis

Δεν πρέπει να τροποποιούμε εντός του βρόχου την τιμή του μετρητή που ελέγχει τη δομή Για.
[Αναφορά στο τετράδιο οδηγιών μαθητή και έγγραφο ΥΠΕΠΘ 43652 / Γ2 / 20 - 4 - 2010.]

Καρκαμάνης Γεώργιος

Βέβαια καλό θα ήταν να γνωρίζουμε ποιά λειτουργία θα επιτελούσε το συγκεκριμένο τμήμα της ΓΙΑ δηλαδή για πιο σκοπό γράφτηκε. πχ για να διαβάζει 100 αριθμούς;

petrosp13

Παράθεση από: alkisg στις 03 Φεβ 2020, 04:40:54 ΜΜ
Runtime δεν είναι γιατί δεν προκαλεί σφάλμα χρόνου εκτέλεσης, "Runtime error blabla: η εκτέλεση του προγράμματος διακόπηκε".

Για i=1 βάζουμε τον χρήστη να του αλλάξει τιμή, κάτι που απαγορεύεται
Γι'αυτό το θεωρώ συντακτικό, ή διαφορετικά runtime


Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

alkisg

Ναι το βασικό ερώτημα εδώ είναι τι σημαίνει αυτή η "απαγόρευση".

1) Είναι συμβουλή, "μην το κάνετε, δεν έχει νόημα, ο κώδικας δεν θα είναι ευκολοδιάβαστος, δημιουργεί ασάφειες, η εκτέλεσή του εξαρτάται από την υλοποίηση του εκάστοτε διερμηνευτή" κλπ;
Αν ναι, τότε είναι λογικό λάθος και τίποτε άλλο.

2) Είναι οδηγία από το Υπουργείο προς τους δημιουργούς των εκάστοτε διερμηνευτών, ώστε να πιάνουν αυτό το πρόβλημα κατά το συντακτικό έλεγχο;
Αν ναι, τότε είναι και λογικό και συντακτικό λάθος.
Ο συντακτικός έλεγχος όμως σε τέτοια ζητήματα συνηθίζεται σε γλώσσες με δυνατότερο συντακτικό, π.χ. "const int x=1; x=2", εκεί εύκολα μπορεί να παραπονεθεί ο compiler ότι το x έχει δηλωθεί με σταθερή τιμή και δεν επιτρέπεται η αλλαγή του.
Το να γίνεται συντακτικός έλεγχος για την αλλαγή του μετρητή της ΓΙΑ είναι πολύ πιο δύσκολο, π.χ.

ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
  ΚΑΛΕΣΕ ΚάποιαΔιαδικασία(ι)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

...εκεί που να ξέρει ο κάθε διερμηνευτής αν η ΚάποιαΔιαδικασία αλλάζει ή όχι το ι.

3) Είναι οδηγία από το Υπουργείο προς τους δημιουργούς των εκάστοτε διερμηνευτών, ώστε να πιάνουν αυτό το πρόβλημα κατά την εκτέλεση;
Αν ναι, τότε είναι και λογικό και λάθος κατά την εκτέλεση.

Αυτό είναι πιο φυσιολογικό από πλευράς υλοποίησης, ακόμα και στην περίπτωση της ΚάποιαΔιαδικασία παραπάνω ο διερμηνευτής μπορεί να ελέγξει κατά την επιστροφή της διαδικασίας ότι μεταβάλλει (copy-out) την τιμή του μετρητή της ΓΙΑ, και επομένως να προκαλέσει "Runtime error 18: απαγορεύεται η αλλαγή του μετρητή της ΓΙΑ".
Και πάλι όμως έχει ένα κενό σημείο, αν τη μεταβάλλει και την κάνει όσο ήταν πριν, θεωρείται λάθος εκτέλεσης ή όχι; (π.χ. copy-in => ι=3, copy-out => ι=3).


Από όλα τα παραπάνω, εγώ θεωρώ ότι το βιβλίο και το Υπουργείο εννοούν το (1)· τα άλλα είναι πολύ ασαφή στην υλοποίησή τους ενώ δεν προσδίδουν διδακτική αξία.

evry

#10
Πολύ σωστά ο Άλκης περιγράφει τα προβλήματα που δημιουργούνται από αυτή την χωρίς λογική απαγόρευση που μετά από τόσα χρόνια που διδάσκεται το μάθημα δεν ξέρουμε ακόμα αν είναι λάθος ή κακή πρακτική.
Προφανώς δεν είναι εφικτό ένας μεταγλωττιστής να πιάσει σε compile-time τέτοιο λάθος, αφού η διαδικασία από μόνη της δεν θα ξέρει αν η παράμετρος που δέχεται είναι μετρητής βρόχου, αλλά ούτε και κατά τη κλήση της διαδικασίας μπορεί κάποιος να ξέρει αν η διαδικασία μέσα τροποποιεί τη μεταβλητή.
Υποθέτω μόνο αν απαγορεύσεις σε έναν μετρητή επανάληψης να είναι παράμετρος σε διαδικασία θα το πετύχεις αυτό.
Στο δικό μας μάθημα το λάθος δεν είναι συντακτικό αφού δεν έχουμε πουθενά ορισμένη αυστηρή σύνταξη της ΓΛΩΣΣΑΣ (γιατί μιλάμε για συντακτικά λάθη? Αλγοριθμική δεν κάνουμε?)
αλλά από την άλλη ένα παράδειγμα όπως το παρακάτω δεν παράγει λογικό λάθος, και αλγοριθμικά είναι ολόσωστο αφού δεν παραβιάζει κανένα αλγοριθμικό κριτήριο.
Κώδικας: javascript
Σ <- 0
Διάβασε Α
Για ι από 1 μέχρι 100
    Αν Α = 0 Τότε
         ι <- 101
    Αλλιώς
        Σ <- Σ + Α
       Διάβασε Α
    Τέλος_Αν
Τέλος_Επανάληψης
Γράψε Σ


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

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


Τα δυο τμήματα κώδικα εκτελούν την ίδια λειτουργία!!!
Το ένα όμως επιτρέπεται και το άλλο όχι!!!  :D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

tsak

Για εμένα είναι απλά κακή και ανούσια πρακτική. Ούτε ο μεταγλωττιστής το "πιάνει" ούτε στην πορεία βγάζει σφάλμα νομίζω. Απλά είναι προγραμματιστική κακοποίηση 😀

Άκυρο...σε άλλο post ήθελα να απαντήσω

akalest0s

Παράθεση από: P.Tsiotakis στις 03 Φεβ 2020, 07:44:23 ΜΜ
Δεν πρέπει να τροποποιούμε εντός του βρόχου την τιμή του μετρητή που ελέγχει τη δομή Για.
[Αναφορά στο τετράδιο οδηγιών μαθητή και έγγραφο ΥΠΕΠΘ 43652 / Γ2 / 20 - 4 - 2010.]
1. Παναγιώτη, βάσει αυτών που αναφέρεις, ως τι λάθος θα χαρακτήριζες τον εν λόγω κώδικα;

2. Παρεμπιπτόντως, η ανωτέρω απόφαση, ως προς το συγκεκριμένο θέμα της ΓΙΑ, είναι αυθαίρετη. Δηλαδή, από τα δύο χωρία που παρατίθενται, για βιβλίο μαθητή και τετράδιο μαθητή, ΔΕΝ προκύπτει το συμπέρασμα που αναφέρεται αμέσως μετά: "Από τα προαναφερθέντα προκύπτει ότι η ΓΛΩΣΣΑ αποκλείει τη μεταβολή του μετρητή."
Πουθενά δεν την αποκλείει.
Αλλά νομίζω αυτό είναι ένα θέμα που έχει συζητηθεί ξανά στο παρελθόν. Φαντάζομαι η απόφαση είναι απόφαση, και ισχύει πάνω από όλα (δεν είναι έτσι;).
Οπότε γυρίζω στην αρχική ερώτηση:
GOTO 1
"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

George Eco

Αποκαλείς μια δυνατότητα bad practice αν γενικά δεν είναι καλό να την ακολουθείς.
Αυτό δε σου απαγορεύει να κάνεις μία εξαίρεση όμως.
Λογικό σφάλμα λοιπόν, αλλά έρχεται και το άλλο ερώτημα.
Αν ήθελα το πρόγραμμα να κάνει ΑΚΡΙΒΩΣ αυτό, γιατί να το θεωρήσω λάθος;
Αν πρέπει οπωσδήποτε να το χαρακτηρίσουμε ως λάθος, πάμε σε λογικό.
Αλλά δε νομίζω να ζητήσουν κάτι τέτοιο έχοντας απαγορεύσει τη μεταβολή του μετρητή εντός της ΓΙΑ.
Βέβαια μετά το 2018, φύλαγε τα ρούχα σου να έχεις τα μισά (μιας κι είδα και τη GOTO)...

akalest0s

Παράθεση από: George Eco στις 05 Φεβ 2020, 04:21:43 ΠΜ
Βέβαια μετά το 2018, φύλαγε τα ρούχα σου να έχεις τα μισά (μιας κι είδα και τη GOTO)...
;D   :P
"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

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

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

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

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

bugman

Συντακτικά λάθη τα εντοπίζουν και οι έξυπνοι διορθωτές (editors). Όπως το έδειξε και ο Alkis υπάρχουν AST διερμηνευτές οι οποίοι λειτουργούν μετά το λεκτικό και συντακτικό αναλυτή (lexical analyser, syntax analyser), όπως και ο διερμηνευτής της ΓΛΩΣΣΑΣ.
Άρα ανάλογα με την υλοποίηση ένα συντακτικό λάθος μπορεί να φανεί καθώς γράφουμε το κώδικα ή σε ένα στάδιο μετάφρασης, ή στο διερμηνευτή απ ευθείας.

epsilonXi

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

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

για τα run-time τούς λέω ότι επισήμως φαίνονται στην εκτέλεση και είναι λάθη που οδηγούν στον μη κανονικό τερματισμό του προγράμματος, αλλά πάλι ότι στην πραγματικότητα ένας σύγχρονο προγραμματιστικό περιβάλλον σε προειδοποιεί για πάρα πολλά από αυτά (πχ χρήση μεταβλητής πριν οριστεί η τιμή της)

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

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