Λογικα Συντακτικα και αντικανονικα λαθη

Ξεκίνησε από Mxyzptlk, 24 Μαΐου 2020, 01:01:57 ΜΜ

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

P.Tsiotakis

Παράθεση από: alkisg στις 25 Μαΐου 2020, 10:13:23 ΠΜ
Σε πολλά σημεία το βιβλίο εξηγεί και εμείς το λαμβάνουμε σαν ορισμό, ενώ δεν είναι.

Αν λοιπόν αυτό το πάρουμε σαν επίσημο ορισμό και όχι σαν περιγραφή, δεν επιτρέπεται να περνούμε εκφράσεις στις συναρτήσεις, κάτι που το βιβλίο ήδη κάνει με τη συνάρτηση Παραγοντικό(Ν-1) στη σελίδα 185.

Αντίστοιχα λίγο παρακάτω:
Κι εδώ λέει "μεταβλητών" αντί να πει "εκφράσεων". Όμως πάλι καλά που λέει "ή/και επιστρέφονται". Δεν είναι απαραίτητο να γίνει επιστροφή τιμών, όταν π.χ. περάσουμε έκφραση.
Δεν θυμάμαι να είχα βρει άλλο παράδειγμα στο βιβλίο, κι απ' όσο θυμάμαι αυτή η διαφωνία υπήρχε στο Στέκι από την αρχή που είχαν μπει οι διαδικασίες εντός εξεταστέας ύλης, γι' αυτό και είχα αναγκαστεί να τηλεφωνήσω στον κ. Κοίλια όταν τις υλοποιούσα στο Διερμηνευτή...
Φυσικά αφού βλέπουμε ότι ακόμα υπάρχει διαφωνία, αρμόδιο να δώσει διευκρίνηση είναι μόνο το Υπουργείο.

Φυσικά, η υλοποίηση της ΓΛΩΣΣΑΣ το 1999 δεν μπήκε στη λεπτομέρεια αν κάποια παράμετρος είναι εισόδου ή εξόδου ή και τα δύο. Παρότι το υπόδειγμά τους ήταν η Pascal δεν έλαβαν κάποια ειδική μέριμνα για αυτό. Καλώς για τότε, κακώς για σήμερα.
Σίγουρα η ευθύνη δεν ανήκει στους συγγραφείς, αλλά στο ότι δεν ανανεώθηκε ουσιαστικά το διδακτικό πακέτο επί 20 έτη

P.Tsiotakis

Παράθεση από: Mxyzptlk στις 24 Μαΐου 2020, 06:27:18 ΜΜ
ακομα δεν καταλαβαινω τι λογικη σε αυτο που λετε οτι το
  Ι <- Ι
δεν ειναι λαθος
αλλά το
I <- I+1
είναι

Μερικές φορές καλέ/ή μου φίλε/η η λογική είναι παράξενο πράγμα.

Στο  έγγραφο ΥΠΕΠΘ 43652 / Γ2 / 20 - 4 - 2010 αναφέρει ότι

Όσον αφορά τη μεταβολή του μετρητή μιας ΓΙΑ μέσα στο βρόχο του, δεύτερη υπόδειξη της σελίδας 78 του Τετραδίου Μαθητή αναφέρεται:
«Ποτέ μην χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τημεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα». Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού».

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

Συνεπώς το
Για i από 1 μέχρι 5
    i <- i + 1 - 1
    Γράψε i
Τέλος_επανάληψης


κατά τη γνώμη μου είναι σωστό αν και παράλογο

αλλά κυρίως το

...
Για i από 1 μέχρι 5
    ΚΑΛΕΣΕ Παράλογος_κόσμος(i)
Τέλος_επανάληψης
...
Διαδικασία Παράλογος_κόσμος(α)
Μεταβλητές
   Ακέραιες: α
Αρχή
   Γράψε α
Τέλος_επανάληψης
δεν περιέχουν, κατά την άποψή μου, συντακτικά λάθη

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

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

1) θα πω το κλασικό, γενικό Σ-Λ,  νομίζω το έχουμε γράψει  Ν φορές, κάτι του στυλ  --> " Ο μετρητής μίας δομής  ΓΙΑ μπορεί να αλλάξει ", άραγε θα ήταν σωστό η λάθος ???  ή πώς θα μπορούσε να είναι η υπογραμμισμένη λέξη για να ήταν σωστό ή λάθος ??

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

για κ από 1 μέχρι 5
   διαβασε κ
τελος_επανανάληψης

δηλαδή αν δώσει 1,2,3,4,5 να είναι σωστό διαφορετικά λάθος ??  :angel: >:D :laugh:

P.Tsiotakis


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

χεχεχεχε ... 100% αποτύπωση της πραγματικότητας

pgrontas

Συμφωνώ με τους προλαλήσαντες στο ότι η εκχώρηση ακέραιας σε πραγματική είναι σωστή (κάθε ακέραιος είναι και πραγματικός), αλλά το αντίστροφο είναι λάθος.
Το ερωτημά μου είναι γιατί είναι συντακτικό λάθος (αν καταλαβαίνω καλά από την συζήτηση); Ποιος συντακτικός κανόνας παραβιάζεται;

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

Τώρα σχετικά με την αλλαγή του μετρητή, τα έχουμε ξανασυζητήσει.

Παράθεση από: P.Tsiotakis στις 25 Μαΐου 2020, 10:45:51 ΠΜ
Μερικές φορές καλέ/ή μου φίλε/η η λογική είναι παράξενο πράγμα.

Στο  έγγραφο ΥΠΕΠΘ 43652 / Γ2 / 20 - 4 - 2010 αναφέρει ότι

Όσον αφορά τη μεταβολή του μετρητή μιας ΓΙΑ μέσα στο βρόχο του, δεύτερη υπόδειξη της σελίδας 78 του Τετραδίου Μαθητή αναφέρεται:
«Ποτέ μην χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τημεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα». Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού».

Για μένα λογική είναι η ερμηνεία ότι δεν επιτρέπεται μεταβολή του i. Δεν είναι συντακτικό λάθος η εκχώρηση  στο i της ίδιας του της τιμής, ούτε αντίστοιχα, η χρήση του σε παράμετρο διαδικασίας που δεν την μεταβάλλει.
Νομίζω σωστότερη ερμηνεία είναι το δεν συνίσταται. Επίσης αν ήταν λάθος, δεν θα έλεγε παραπάνω 'συνήθως λανθασμένα', θα έλεγε πάντα λανθασμένα ή λανθασμένα.
Άλλο όμως το δεν συνίσταται, άλλο το να είναι λάθος και μάλιστα συντακτικό.

Οι εκχώρησεις
i<- i
i<- i + 1

είναι ολόιδιες για την γλώσσα. Και οι δύο αλλάζουν το i, απλά η πρώτη του βάζει την ίδια τιμή.
Μέσα σε ένα ΓΙΑ και πριιν την εκτέλεση δεν υπάρχει τρόπος να γνωρίζει ο μεταγλωττιστής αν το ι θα έχει την ίδια τιμή με πριν γιατί  μπορεί να μεσολαβεί μια διαδικασία όπως η Παράλογος_Κόσμος ή κάτι ανάλογο. Οπότε είτε θα τα επιτρέψεις και τα δύο είτε κανένα (πάντα ως σύσταση).



Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

alkisg

Παράθεση από: pgrontas στις 25 Μαΐου 2020, 03:01:37 ΜΜ
Το ερωτημά μου είναι γιατί είναι συντακτικό λάθος (αν καταλαβαίνω καλά από την συζήτηση); Ποιος συντακτικός κανόνας παραβιάζεται;

Νομίζω ότι για ...χάριν απλότητας, έχουμε φτάσει στο "όλα τα λάθη πριν την εκτέλεση είναι συντακτικά".
Εντάξει το να βάλουμε στο ίδιο τσουβάλι λεκτικά, συντακτικά και σημασιολογικά ίσως και να έχει κάποιο πλεονέκτημα για να μην ζορίζονται οι μαθητές.
Αυτό που με χαλάει εμένα περισσότερο είναι ότι αναφέρουμε ως συντακτικά και λάθη σαν το i <- i + 1 παραπάνω που θα μπορούσαν να ανιχνευτούν μόνο ως λάθη χρόνου εκτέλεσης, και πάλι με ένα σωρό περιορισμούς...

Συντακτικά δεν σημαίνει "το βλέπω με το μάτι ότι είναι στραβό". Θα πρέπει να παραβιάζεται κάποιος κανόνας σύνταξης... το "πετάει ο γάιδαρος" δεν είναι συντακτικό λάθος.

petrosp13

Το συμπέρασμα είναι ότι οποιοδήποτε θέμα ζητηθεί το οποίο αναφέρεται στο κεφάλαιο της εκσφαλμάτωσης, πρέπει να έχει 100% μοναδική απάντηση πέρα από κάθε αμφιβολία...
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

ΔΗΜΗΤΡΗΣ Χ

Κατα 1ον συμφωνω με petrosp13 για θεμα σχετικο με λαθη και οτι θα πρεπει να ειναι προσεγμενο.
Κατα δευτερον, δεν χρειαζεται να συζηταμε για το πρωτο πρωτο θεμα που εθεσε ο συναδελφος. Απο τη στιγμη μαλιστα που δεν υπαρχει τμημα δηλωσης μεταβλητων. Ειναι σαν να παιρνεις λαθος καποια δηλωση sum<-0 αν το sum ειναι πραγματικη γιατι θελεις sum<-0.0. Τοτε ειναι λαθος ολες οι λυσεις των ασκησεων που κυκλοφορουν και εχουν αθροισμα πραγνατικων.

ApoAntonis

Παράθεση από: P.Tsiotakis στις 25 Μαΐου 2020, 10:45:51 ΠΜ
δεν περιέχουν, κατά την άποψή μου, συντακτικά λάθη

Για i από 1 μέχρι 5
   i <- i*3/3
Τέλος_επανάληψης

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

Μπορούμε να πούμε το ίδιο για το επόμενο;

Για i από 1 μέχρι 5
   i <- i/3*3
Τέλος_επανάληψης


και για να μην σκάσω να ρωτήσω, αυτό που έπεται εκτός από χαζοπονηριά παραβιάζει και κάποιον κανόνα;

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 2 ΜΕ_ΒΗΜΑ γιουχου(i)
...

με την γιούχου να είναι

ΣΥΝΑΡΤΗΣΗ γιουχου(α): ΑΚΕΡΑΙΑ/ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: α
ΑΡΧΗ
  γιούχου <- -1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

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

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 0
i <- i + 10 MOD i + οτιδήποτε_ακόμα_άλλο_που_μπορεί_να_αλλάξει_και_τον_τύπο


Κανένας

Νομίζω ότι πρέπει να τα ορίσουμε πιο ξεκάθαρα:

1. Συντακτικά : Λάθη κατά το χρόνο μεταγλώττισης-διερμήνευσης. Ανιχνεύονται απ' τον αντίστοιχο μεταγλωττιστή-διερμηνευτή
                         κατά την φάση της υλοποίησης και πριν την εκτέλεση του προγράμματος.

2. Λάθη κατά την εκτέλεση : Προκαλούν αντικανονικό τερματισμό του προγράμματος είτε πάντα είτε σε κάποιες περιπτώσεις.

3. Λογικά λάθη : Παράγουν λανθασμένα αποτελέσματα είτε πάντα είτε σε κάποιες περιπτώσεις αλλά δεν δημιουργούν αντικανονικό
                          τερματισμό του προγράμματος.

Επειδή υπάρχουν τύποι σφαλμάτων που μπορούν να ενταχθούν λίγο ή πολύ σε πάνω από μια από τις παραπάνω κατηγορίες είναι ευθύνη του θεματοδότη να τα αποκλείσει και να περιοριστεί στη βασική διάκριση μεταξύ των λαθών όπως αναφέρθηκαν παραπάνω.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

ApoAntonis

Παράθεση από: Κανένας στις 26 Μαΐου 2020, 12:46:02 ΠΜ
Νομίζω ότι πρέπει να τα ορίσουμε πιο ξεκάθαρα:

1. Συντακτικά : Λάθη κατά το χρόνο μεταγλώττισης-διερμήνευσης. Ανιχνεύονται απ' τον αντίστοιχο μεταγλωττιστή-διερμηνευτή
                         κατά την φάση της υλοποίησης και πριν την εκτέλεση του προγράμματος.


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

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

Δυστυχώς ασχολούμαστε με περιπτώσεις οι οποίες έπρεπε να είχαν λυθεί στα πρώτα 5 χρόνια ύπαρξης του μαθήματος και όχι να μας ταλαιπωρούν 20 χρόνια μετά.

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

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

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

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

alkisg

Γιώργο, σύμφωνα με το μέλος της συγγραφικής ομάδας που έγραψε αυτό το κεφάλαιο, το "λάθος" είναι στη σελίδα 181.
Εγώ δεν το λέω καν λάθος· είναι περιγραφή παραδείγματος και εμείς πάμε να το γενικεύσουμε και να το εκλάβουμε ως τυπικό ορισμό. Εμείς το δημιουργούμε το λάθος.

Τώρα αν δεν δεχόμαστε την άποψη του ίδιου του συγγραφέα (αφού όπως είπα επικοινώνησα μαζί του) αναγκαστικά χρειάζεται διευκρίνηση από το Υπουργείο.