Κλήση διαδικασίας με ίδιες παραμέτρους

Ξεκίνησε από Καραμαούνας Πολύκαρπος, 10 Φεβ 2020, 01:51:43 ΜΜ

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

bugman

#15
Στη c++ όταν κάτι είναι αδιάφορο για τον προγραμματιστή, πχ δεν θα έκανε ποτέ πέρασμα με αναφορά μιας μεταβλητής ταυτόχρονα σε δύο τυπικές παράμετρους σε μια κλήση, προσδορίζετσι στο εγχειρίδιο ως απροσδιόριστη συμπεριφορά ή κατάσταση.
Δηλαδή μην περιμένουμε για κάθε παράλογη χρήση να υπάρχει αιτιολογιμένη απάντηση.

Αν θέλετε κάτι πραγματικά μυστήριο, είναι το αποτέλεσμα του -3^2 και το 0-3^2 καθώς και το 0+-3^2.
Ο διερμηνευτής της ΓΛΩΣΣΑ δίνει -9 -9 -9 το ίδιο και η Visual Basic. Η ΓΛΩΣΣΑ όμως στα χαρτιά τι δίνει;
Η Μ2000 δίνει 9 -9 9 γιατί το - στην πρώτη και τρίτη περίπτωση είναι μοναδιαίος τελεστής. Το ίδιο δίνει το Excel και το LibreOffice Calc.
Εδώ λοιπόν δεν είναι θέμα σωστού, αλλά προκαθορισμένου. Στην περίπτωση του περάσματος με αναφορά (όπως γίνεται) στη ΓΛΩΣΣΑ δεν υπάρχει προκαθορισμένη συμπεριφορά του διερμηνευτή, γιατί απλά δεν υπάρχει διερμηνευτής μαζί με το βιβλίο.



George Eco

Παράθεση από: bugman στις 29 Φεβ 2020, 11:02:20 ΠΜ
Αν θέλετε κάτι πραγματικά μυστήριο, είναι το αποτέλεσμα του -3^2 και το 0-3^2 καθώς και το 0+-3^2.

Το -3^2 το επιστρέφει -9 δίνοντας προτεραιότητα στη δύναμη. Λογικό.
0 + -3^2 επιστρέφει - 9 πάλι. Διότι προτεραιότητα έχει η δύναμη.

Ο Διερμηνευτής ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ σωστά επιστρέφει αυτές τις τιμές.


"Η Μ2000 δίνει 9 -9 9 γιατί το - στην πρώτη και τρίτη περίπτωση είναι μοναδιαίος τελεστής."
Έχεις ορίσει τη προτεραιότητα αυτή στο manual; Γιατί πολλούς θα τους ξενίσει. Άλλωστε το - στο -9 μπορεί να θεωρηθεί κανονικός τελεστής γινομένου.  (-1)*9 οπότε μαθηματικώς ορθός είναι ο διερμηνευτής για να είμαστε δίκαιοι, έτσι πιστεύω.

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



George Eco

Ο Διερμηνευτής δίνει 2 στο αρχικό παράδειγμα.

ΠΡΟΓΡΑΜΜΑ ΟΛΑ_ΣΠΑΣΤΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Χ
ΑΡΧΗ
  Χ <- 1
  ΚΑΛΕΣΕ Σ(Χ, Χ)
  ΓΡΑΨΕ Χ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Σ(α, β)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: α, β
ΑΡΧΗ
  α <- 2*α
  β <- 3*β
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Πιστεύω όμως πως οι μαθητές, λόγω άγνοιας του behind the scenes τρόπου λειτουργίας του διερμηνευτή, θα μπερδεύονταν εδώ. Θα περίμεναν 3 πιστεύω.
Γενικά όμως, επειδή στα πλαίσια του μαθήματος δεν έχω δει διαδικασία που το κάνει αυτό στο βιβλίο μέσα, ευελπιστώ να μη δω κάτι κουφό στις Πανελλήνιες με την ίδια λογική.
Θέλω να πω, στα πλαίσια του μαθήματος, οι παράμετροι παίρνουν διαφορετικά ορίσματα κάθε μία.
Κι είναι σαφώς όπως είπε ο κος Καρκαμάνης ασάφεια. Θέλει ορθή διατύπωση. Αναρωτιέμαι πως το κάνει η python αυτό. Α περίμενε, δεν έχει πρόβλημα η python με τέτοια. Βάζω και βλέπω πως το κάνει έτσι κι αλλιώς. Ακόμα και pascal να είχα, έβαζα κι έβλεπα το πως.
Η ΓΛΩΣΣΑ που είναι θεωρητική;;; Αυτό αξίζει ένα copy - paste σε ένα άλλο thread...  >:D

alkisg

Παράθεση από: George Eco στις 29 Φεβ 2020, 04:15:56 ΜΜ
Α περίμενε, δεν έχει πρόβλημα η python με τέτοια. Βάζω και βλέπω πως το κάνει έτσι κι αλλιώς. Ακόμα και pascal να είχα, έβαζα κι έβλεπα το πως.

Πολλές γλώσσες έχουν διάφορα ασαφή σημεία, που δεν περιγράφονται ξεκάθαρα στον θεωρητικό ορισμό τους.
Οι διερμηνευτές ή οι μεταγλωττιστές που τις υλοποιούν, καλούνται να απαντήσουν όσο καλύτερα μπορούν. Και πολλές φορές διαφορετικοί μεταγλωττιστές υλοποιούν την ίδια γλώσσα με τέτοιες μικροδιαφορές.
Δηλαδή αυτό που ζητάς δεν εξασφαλίζεται από καμία γλώσσα. Θα εξασφαλιζόταν μόνο αν το Υπουργείο ζητούσε συγκεκριμένο compiler (και μάλλον και συγκεκριμένη έκδοση) και όχι συγκεκριμένη γλώσσα.

Εκ των υστέρων και για μερικές μόνο από τις ασάφειες έρχονται πρότυπα που απαντούν.
Για παράδειγμα, σε αυτό ακριβώς που συζητάμε εδώ, για το πέρασμα της ίδιας παραμέτρου δύο φορές, η Ada απάντησε "δεν επιτρέπεται" μόλις το 2012.
Αντίστοιχα με μια διευκρίνηση του Υπουργείου.

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

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

bugman

@GeorgeEco
Ο evaluator που έχω φτιάξει στο 0 + -3^2   (τα διαστήματα δεν χρειάζονται), κάνει το εξής πρώτα  κρατάει το 0,  μετά στον τελεστή + ρίχνει με αναδρομή το -3^2 το οποίο βρίσκει το - ως μοναδιαίο τελεστή και τον βάζει στο 3 ως -3, και μετά εκτελεί την δύναμη.

Στο 0-3^2 το - είναι κανονικός τελεστής οπότε στην αναδρομική κλήση πάει το 3^2 και επιστρέφει το 9 το οποίο αφαιρείται από το 0, άρα δίνει -9.
Αυτό κάνει και το Excel, το οποίο χρησιμοποιείται κατά κόρον για οικονομικά και επιστημονικά μοντέλα.

ApoAntonis

Και το 0^0 θα περίμενε κάποιος μαθητής να δώσει κάτι άλλο από αυτό που δίνει ο διερμηνευτής.
Σημαίνει ότι ο διερμηνευτής δεν έπρεπε να έχει αυτήν την σύμβαση ή ότι αναγκαστικά είναι παράλειψη της ΓΛΩΣΣΑΣ;

Και το 1/3*3 δεν παράγει το "αναμενόμενο" αποτέλεσμα. Είναι και αυτό παράλειψη της ΓΛΩΣΣΑΣ;

Και ο βρόχος
x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
  x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


είναι ατέρμων, αλλά δεν είναι στην πραγματικότητα. Η μήπως στην python θα κάνουμε εύρος αναπαράστασης;

Μπορούμε να συνεχίσουμε "για πάντα" με τέτοιες περιπτώσεις,
θα έχουμε χάσει όμως το νόημα.

@alkis
compiler με συγκεκριμένα options
(από εξαπανέκαθεν ήθελα να γράψω για options)


George Eco

#21
Παράθεση από: ApoAntonis στις 29 Φεβ 2020, 11:14:48 ΜΜ
Και το 0^0 θα περίμενε κάποιος μαθητής να δώσει κάτι άλλο από αυτό που δίνει ο διερμηνευτής.
Σημαίνει ότι ο διερμηνευτής δεν έπρεπε να έχει αυτήν την σύμβαση ή ότι αναγκαστικά είναι παράλειψη της ΓΛΩΣΣΑΣ;

Όπα. Πρώτον μπράβο που θίγεις αυτό το θέμα συνάδελφε. Αυτό είναι σα να λέμε α/Χ με Χ = 0 δεν είναι δουλειά του διερμηνευτή.
Και δυστυχώς αν βάλεις στο Google = 0 ^ 0 θα επιστρέψει 1 γιατί κάνει την εικασία πως αναφέρεσαι αυστηρά στο R κι αυτό είναι όλο.
Βέβαια γνωρίζουν τα παιδιά από τα Μαθηματικά που έχουν διδαχτεί πως 0^0 είναι αοριστία οπότε εγώ το συγκαταλέγω στον αμυντικό προγραμματισμό τους, στα πλαίσια ελέγχου εγκυρότητας κι εκσφαλμάτωσης, ώστε να μη μπορεί να γίνει κάτι τέτοιο βάσει του κώδικα. Διότι αν βάλουν τα παιδιά 0^0 στην ουσία παραβιάζουν μία τουλάχιστο βασική αρχή των Αλγορίθμων κι αυτές οι Αρχές είναι εντός της ύλης τους.
Πολύ μου άρεσε αυτό.


Παράθεση από: ApoAntonis στις 29 Φεβ 2020, 11:14:48 ΜΜ
Και το 1/3*3 δεν παράγει το "αναμενόμενο" αποτέλεσμα. Είναι και αυτό παράλειψη της ΓΛΩΣΣΑΣ;

Δε κατάλαβα. Δηλαδή τι θα έπρεπε να επιστρέφει; Αυτό που πρέπει να επιστρέφει είναι 1 κι αυτό ακριβώς επιστρέφει.

x <- 1
ΟΣΟ x > 0 ΕΠΑΝΑΛΑΒΕ
  x <- x/2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


είναι ατέρμων, αλλά δεν είναι στην πραγματικότητα. Η μήπως στην python θα κάνουμε εύρος αναπαράστασης;

Μπορούμε να συνεχίσουμε "για πάντα" με τέτοιες περιπτώσεις,
θα έχουμε χάσει όμως το νόημα.

@alkis
compiler με συγκεκριμένα options
(από εξαπανέκαθεν ήθελα να γράψω για options)
[/quote]

Αυτό θυμάμαι το συζητούσα με τον bugman, και τον Άλκη. Έχει να κάνει πρώτα με τους περιορισμούς στο hardware, και συνάμα με τους περιορισμούς κάθε compiler.
Το ερώτημα εδώ είναι πότε ένας δεκαδικός μηδενίζεται. Σε ποιο ψηφίο στο hardware. Ο δειρμηνευτής έκανε 30 επαναλήψεις. Η ΓΛΩΣΣΑ μάλλον θα το έκανε για πάντα. Είναι θεωρητική.


Παράθεση από: alkisg στις 29 Φεβ 2020, 05:26:03 ΜΜ
Δηλαδή η χρήση python ή οποιασδήποτε άλλης γλώσσας δεν μας απαλλάσσει από ασάφειες.
Είναι δουλειά των θεματοδοτών το να μην μπουν τέτοια θέματα σε εξετάσεις, τουλάχιστον μέχρι να διευκρινιστούν από το Υπουργείο.
Και δουλειά των καθηγητών να ερμηνεύουν το βιβλίο σαν βιβλίο και όχι σαν βίβλο. Το "η τάδε ανθυποπερίπτωση δεν αναφέρεται ρητά στο βιβλίο" μπορεί απλά να σημαίνει ότι εξυπακούεται, όχι ότι απαγορεύεται.
Για να μην παρεξηγηθώ, κι εγώ προτιμώ τη διδασκαλία της Python, αλλά και ασάφειες έχει και περιορισμό ύλης θα χρειαστεί κλπ, δεν είναι πανάκεια.
Άλκη ναι συμφωνω! Νομίζω το αναφέρω και στο αντίστοιχο thread. Πρέπει να πλαισιωθεί ορθά η python για να δουλέψει σωστά κι αν μη τι άλλο, υπάρχει ένα manual κι ένα IDLE που θα συμπεριφερθεί ανάλογα. Μιλάμε για ίδιο Version. Και μάλιστα το μάθημα μπορεί να επικαιροποιείτε με απλές ενημερώσεις των αναγκαίων (αν υπάρξουν) από ένα change log. Όχι με νέους τόμους.
Και να πω εδώ πως αναφερόμουν στη ΓΛΩΣΣΑ κι όχι στο Διερμηνευτή.