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

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

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

evry

Ακριβώς!! Δεν προκύπτει από πουθενά τι είναι.
Η απάντηση όμως ήταν μια και όχι δυο. Είναι σαν ερώτηση κλειστού τύπου.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

George Eco

#46
Πέρασμα σταθερών σε Διαδικασία. Δε βλέπω το λόγο να ΜΗ γίνεται.
Δε λέω πως γίνεται, αλλά δε βλέπω το λόγο να μη γίνεται.
Ίδια φάση με το να περάσω σταθερά σε Συνάρτηση μέσω παραμέτρων.
Θέλει όμως προσοχή να μην αλλάζουν τιμή οι παράμετροι στις οποίες θα κουμπώσουν σταθερές.
Δε προκύπτει από κάπου αν είναι δυνατόν ή όχι.

ΕΓΩ αν ήμουν μαθητής, θα ήμουν πονηρούλης.
Αν έιχα ρητά μια σταθερά έστω π θα έφτιαχνα μία μεταβλητή πι και τότε
πι <- π
κι αφήστε με ήσυχο να λύσω παρακάτω.
Θα αντιμετώπιζα τη μεταβλητή πι ως σταθερά, δε παραβιάζω μέσω ασάφειας κάτι, χρησιμοποιώ μεταβλητή στις παραμέτρους, κι όλα καλά.
Βάζω κι ένα θαυμαστικό και γράφω πως βάζω αυτή τη μεταβλητή, για να περάσω τη τιμή της σταθεράς ως παράμετρο, δηλώνω ρητά πως δε πρέπει αυτή η πι να αλλάζει τιμή κι είμαι οκ.
Κάτι σα να έλεγα σε άλλη γλώσσα προγραμματισμού __dontTouchThis__ ένα πράγμα για όσους κατάλαβαν από το convention της σύνταξης.
Αυτό όμως δε λύνει την ασάφεια.




Παράθεση από: evry στις 27 Μαΐου 2020, 01:58:25 ΜΜ
Κοίταγα τα θέματα των επαναληπτικών του 2016 και έπεσα πάνω σε αυτό:

Τι τύπου είναι η μεταβλητή Β αν η παρακάτω έκφραση είναι συντακτικά σωστή;
Κώδικας: ΓΛΩΣΣΑ
Ε <- ((Α mod 5 >2) ΚΑΙ (C <>"Αληθής")) Ή ((D=ψευδής) ΚΑΙ (Β > Α/3)) 

Η Α είναι ακέραια.


Καλά είναι συντακτικά λάθος αυτό, επειδή υπάρχει η Ε(χ) αλλά το αντιπαρέρχομαι μιας κι η εκφώνηση θεωρεί σωστή τη σύνταξη.
Δε ξέρουμε τι είναι το Β.
Αν μου έλεγε κάποιος:
Β <- Α/3 θα έλεγα με τη μία Πραγματική. Ωστόσο εδώ, μπορεί να είναι κι ακέραια.
Οπότε λέει ο κος Τσιωτάκης πως είναι αριθμητική. Σωστά.
Έχω όμως μία ένσταση. Το αριθμητική δεν έιναι τύπος, είναι σύνολο τύπων μεταβλητών.
Θέλω να πω στο τμήμα δηλώσεων δε μπορώ να βάλω αριθμητική. Πρέπει να επιλέξω.
Η ΓΛΩΣΣΑ δεν είναι θέλω να πω python να κρίνει επί τούτου από μόνη της. Έχει αυστηρότητα στη δήλωση τύπων.

Γενικός προγραμματιστικός κανόνας μου, είναι πως αν δεν είμαι σίγουρος τι είναι κάτι κι έχω να διαλέξω μεταξύ ενός πράγματος, που είναι υποσύνολο του άλλου, και μπορεί να είναι οτιδήποτε από τα δύο, δε θα πάω με το υποσύνολο. Θα επέλεγα Πραγματική. Αλλά το θέμα θα ήταν λάθος αν ζητούσε τι είναι το Β. Δεν υπάρχει ρητή απάντηση. Και ακέραια και πραγματική είναι εξίσου σωστές απαντήσεις θα έλεγα.
Σημείωση: Πού ακριβώς στο βιβλίο αντιμετωπίζονται οι ακέραιοι ως υποσύνολο των πραγματικών ρητά; Ναι οκ διαβάζω πως ο ένας τύπος θέλει παραπάνω RAM οπότε μπορώ να κάνω το ΑΛΜΑ ΛΟΓΙΚΗΣ και να υποθέσω - συμπεράνω εκτός ύλης, πως ναι οι ακέραιοι είναι υποσύνολο των πραγματικών όπως ακριβώς και στα Μαθηματικά. Δεν υπάρχει ρητή υποστήριξη αυτού όμως εντός ύλης.


Έχει δίκιο ο evry κι έχει δίκιο κι ο κος Τσιωτάκης στα όσα αναφέρει για τη συγγραφική ομάδα.

Επίσης αυτό κουμπώνει όμορφα με το πρόβλημα της σημειώσεως κάτω αριστερά στη σελ 132 του πράσινου βιβλίου ΑΕΠΠ, το οποίο έχει αναφέρει σε άλλο thread o evry.
'Σε μία έντολη εκχώρησης, η μεταβλητή και η έκφραση, πρέπει να είναι του ίδιου τύπου'
Δηλαδή τι φάση; Έστω πραγ μια πραγματική μεταβλητή.
πραγ <- 10
Αυτό είναι λάθος;;;;;;;

ΥΓ (Α! Αναφέρθηκε ΚΑΙ σε αυτό το thread)

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

Παράθεση από: Λαμπράκης Μανώλης στις 25 Μαΐου 2020, 09:45:54 ΠΜ
Καλημέρα σε όλους

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

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

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

Παράθεση από: alkisg στις 25 Μαΐου 2020, 09:30:35 ΠΜ
Το πέρασμα σταθερών στις διαδικασίες υπάρχει στο βιβλίο, στο παράδειγμα των Πύργων του Ανόι. Δεν είναι συνάρτηση εκεί είναι διαδικασία.

Άρα:
ΑΚΕΡΑΙΕΣ: Α
ΚΑΛΕΣΕ ΜιαΔιαδικασίαΠουΠεριμένειΠραγματικό(Α)
δεν γίνεται, ενώ
ΚΑΛΕΣΕ ΜιαΔιαδικασίαΠουΠεριμένειΠραγματικό((Α))
ή
ΚΑΛΕΣΕ ΜιαΔιαδικασίαΠουΠεριμένειΠραγματικό(Α+0)
γίνεται, γιατί τότε η παράμετρος είναι έκφραση και δεν περιμένει επιστροφή τιμής (αντίστοιχα με τους Πύργους του Ανόι).

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

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

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

ΠαράθεσηΤο ερώτημα είναι, αν επιτρέπεται να περνάμε σταθερές και εκφράσεις στις διαδικασίες => Ναι
Και τότε τι γίνεται με την επιστροφή τιμών; => Απλά δεν επιστρέφονται, όπως και στις συναρτήσεις. Καμία πρωτοτυπία· εκτός αν κάποιος θεωρεί ότι ούτε στις συναρτήσεις επιτρέπονται εκφράσεις.

Τα υποπρογράμματα είναι περισσότερο επηρεασμένα από την Basic, όχι από την dPascal. Ο Κοίλιας είχε μεγάλη εμπειρία στην QuickBasic, είχε εκδόσει βιβλία από το 1991 κλπ, γι' αυτό και πρότεινε και το "κόλπο με τις παρενθέσεις" όταν κάποιος θέλει να περάσει μεταβλητή σε διαδικασία αλλά να μην επιστρέψει πίσω η τιμή (που συνηθίζεται στη Basic).

Δεν έχω δει κάποιο θέμα πανελλαδικών που να είναι αντίθετο στα παραπάνω.

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

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


Ο κ. Κοίλιας μπορεί να είχε μεγάλη εμπειρία στν QuickBasic αλλά στο μαθημά μας διδάσκουμε τη ΓΛΩΣΣΑ και δεν μπορούμε να δεχτούμε ότι η ΓΛΩΣΣΑ συμπεριφέρεται ως Basic.
Επίσης  το "κόλπο με τις παρενθέσεις" που πρότεινε ο κ. Κοίλιας, όταν κάποιος θέλει να περάσει μεταβλητή σε διαδικασία αλλά να μην επιστρέψει πίσω την τιμή,  το έχει προτείναι κάπου γραπτά ως οδηγία προς το ΙΕΠ και αυτή επισημοποιήθηκε ως οδηγία προς τους καθηγητές ή στις οδηγίες διδασκαλιας του μαθήματος;




ApoAntonis

Παράθεση από: evry στις 27 Μαΐου 2020, 03:52:11 ΜΜ

Ακόμα χειρότερα, λέει σε μια άσκηση να ελέγξεις ότι ο μέσος όρος είναι πάνω από 10 και γράφει ο μαθητής
Κώδικας: ΓΛΩΣΣΑ
average = sum/n
ΑΝ average > 10 ΤΟΤΕ
   ΓΡΑΨΕ 'πέρασες'
ΤΕΛΟΣ_ΑΝ

Κόβουμε ή όχι ?

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

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

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

** έχει δίκιο ο George Eco ότι δεν αναφέρεται πουθενά ότι οι ακέραιοι (οι πληροφορικιένιοι, μην τα ξαναλέω) είναι υποσύνολο των πραγματικών (το αφήνω κενό για συμπλήρωση αυτό)

Επομένως το ερώτημα -υπό την μορφή Σ/Λ-
στην έκφραση  Α/3,  το πηλίκο (ή αλλιώς το αποτέλεσμα της διαίρεσης) είναι πραγματικός
αν αυτό έχει κάποια σημασία, είναι προτασιακός τύπος.
Οι πράξεις, δεν είναι οι γνωστές από τα Μαθηματικά. Εϊναι κάποιες που τους μοιάζουν.
Αλλιώς δεν θα υπήρχε ανάγκη να εξηγήσουμε ότι κυβική ρίζα του 8 δεν γράφεται ως 8^(1/3)
Εδώ, σε περίπτωση που από τις πολλές σάλτσες με χάσατε, υποννοώ ότι έπρεπε να είχε χρησιμοποιηθεί το σύμβολο της άνω κάτω τελείας για την διαίρεση. Εντάξει ψιλά γράμματα αλλά να κοιτάμε και τα υπόλοιπα σχολικά τι γράφουνε, όχι Ανατολή τα μισά μαθήματα και τα άλλα μισά Δύση. Τότε όμως δεν θα ταίριαζε με τις γλώσσες που υπάρχουν, ε ας γράφονταν καλύτερα τότε τα κεφάλαια. Ακόμα καλύτερα όμως θα ήταν να πρόσεχαν παραπάνω τα θέματα οι επιτροπές.

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

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

***fun fact δύο: αυτό υπάρχει ΓΡΑΜΜΕΝΟ ως: <<περισσότερες της μία φορές>> στο παράρτημα Β'  σελ. 29

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

evry

Παράθεση από: ApoAntonis στις 28 Μαΐου 2020, 01:44:56 ΠΜ
Για το αρχικό ερώτημα από τις Πανελλαδικές, το πρόβλημα βρίσκεται στις οδηγίες διόρθωσης.
Να θυμίσουμε ότι τα θέματα λύνονται από ανεξάρτητο καθηγητή πριν πάνε να καθαρογραφούν. Κατά τας γραφάς.
Στις επαναληπτικές συνήθως δεν υπάρχει λύτης!

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

#52
Παράθεση από: ApoAntonis στις 28 Μαΐου 2020, 01:44:56 ΠΜ
Τελευταία ερώτηση: αν το πλήθος στην λίστα παραμέτρων δεν είναι το ίδιο
μεταξύ κλήσης και δήλωσης, που θεωρούμε ότι υπάρχει το λάθος, στην κλήση ή στην δήλωση;

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

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


epsilonXi

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

parsenopoulou

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