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

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

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

Mxyzptlk

Μου εφεραν οι μαθητες μου τις παρακατω ασκησεις και προβληματιστηκα ως προς το τι πρεπει να απαντησω

η πρωτη
Α <- 1
Β <- 6
ΚΑΛΕΣΕ ΔΙΑΔ(Α,Β)
ΚΑΛΕΣΕ ΔΙΑΔ(5.6, 6.7)
....
ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(Χ, Υ)
ΜΕΤΑΒΛΗΤΕΣ
   ΠΡΑΓΜΑΤΙΚΕΣ: Χ, Υ

εδώ ο καθηγητης στο σχολειο τους ειπε λεει οτι ειναι λαθος γιατι περιμενει πραγματικη και το 1 και 6 ειναι ακεραιες!
και δεν μπορουμε να βαλουμε σταθερες - αριθμους στις πραγματικες παραμετρους!
Θα τρελαθουμε μου φαινεται

και παρακατω στη δευτερη
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 100
     Σ <- Σ + Ι
     ΚΑΛΕΣΕ ΔΙΑΔ( Ι, Σ)
....
ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΔ(Χ, Υ)
ΜΕΤΑΒΛΗΤΕΣ
   ΑΚΕΡΑΙΕΣ: Χ, Υ

ΜΕΣΑ ΣΤΗ ΔΙΑΔ ΤΟ Χ ΔΕΝ ΑΛΛΑΖΕΙ ΤΙΜΗ, ΑΡΑ ΤΟ Ι ΔΕΝ ΑΛΛΑΖΕΙ ΚΑΙ ΕΔΩ ΤΟΥΣ ΕΙΠΕ ΟΤΙ ΔΕΝ ΜΠΟΡΟΥΜΕ ΝΑ ΒΑΖΟΥΜΕ ΤΟΝ ΜΕΤΡΗΤΗ ΤΗΣ ΓΙΑ ΣΕ ΔΙΑΔΙΚΑΣΙΑ!!

Ακομα του ειπε οτι η αλλαγη του μετρητη της ΓΙΑ ειναι λογικο λαθος!!
Δεν ειναι συντακτικο αφου απαγορευεται απο τη ΓΛΩΣΣΑ?

δΕΝ κανω πολλα χρονια το μαθημα αλλα βλεπω εμπειρους καθηγητες να λενε τετοια πραγματα. ποια ειναι η γνωμη σας;
μπορει να πεσει κατι τετοιο;

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

καλημέρα

είναι λεπτά σημεία και στα δύο, σταθερές στη συνάρτηση επιτρέπεται πχ Τ_Ρ(9), ή το γνωστό πλέον παράδειγμα στο τετράδιο του μαθητή (δεν θυμάμαι το ονομα, στύλοι του Ανόι - κάπως έτσι) αλλά σητ διαδικασία που σύμφωνα με το βιβλίο οι παράμετροι επιστρέφουν πίσω τιμές, υπάρχει ασάφεια .. και στο δευτερο παράδειγμα, εφόσον σύμφωνα με το βιβλίο "δεν πειράζεουμε καθόλου το μετρητή του ΓΙΑ" ΄πάλι υπάρχει θέμα, καθώς έστω και αν δεν αλλάξει, πάλι επιστρέφει πίσω ... λεπτά σημεία

P.Tsiotakis

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

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

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


Εντός δομής επανάληψης Για, δε θεωρώ ότι είναι λάθος το:
Για i από 1 μέχρι 5
    i <- i
Τέλος_επανάληψης

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

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

Mxyzptlk

δηλαδη το 1 δεν ειναι πραγματικος αλλα ακεραιος???
Με τη λογικη σας η εκφραση
    5*6.0 + 3 ειναι λαθος αφου μπλεκουμε ακεραιους και πραγματικους και στηριζομαστε στις .... αορατες μετατροπες τυπων
Δηλαδη λεμε στους μαθητες οτι 1+0.0 ειναι λαθος!!!
Δεν ειναι δυνατον!!!

ακομα δεν καταλαβαινω τι λογικη σε αυτο που λετε οτι το
  Ι <- Ι
δεν ειναι λαθος
αλλά το
I <- I+1
είναι
Τι λαθος ειναι αληθεια, γιατι αν ισχυουν αυτα που λετε αυτο το λαθος μπορει να το πιασει μονο κατα την εκτελεση, αρα ειναι λαθος αντικανονικου τερματισμου?

κυριε Λαμπρακη συμφωνω με αυτα που λετε, αλλα τι θα γινει αν ρωτησουν αυτα ;

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

Καταρχάς "Μανώλης" και όχι "κύριος Λαμπράκης", πολύ βαρύ για συνάδελφο  :angel: >:D :laugh: 

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

ssimaiof

Δεν φαίνεται τι τύπου είναι οι μεταβλητές Α, Β.
Υποθέτουμε ότι αφού εκχωρούνται σε αυτές ακέραιες τιμές είναι ακέραιες ; Σύμφωνα με το βιβλίο ΝΑΙ! Αλλά όπως είπε και ο κ. Τσιωτάκης έχουμε δεχθεί ότι μπορεί μια ακέραια τιμή να εκχωρηθεί σε μια πραγματική μεταβλητή.
Δηλαδή τα Α, Β μπορεί να είναι πραγματικού τύπου. Άρα σύμφωνα με την αυστηρή υλοποίηση του βιβλίου είναι λάθος (ασυμφωνία τύπου τυπικής και πραγματικής παραμέτρου), ενώ σύμφωνα με την άλλη (κοινώς παραδεκτή) λογική δεν μπορούμε να απαντήσουμε στο 1ο ερώτημα ?!?!
Για το 2ο ερώτημα προσπαθώντας και εγώ να ερμηνεύσω το πνεύμα (του νόμου ?!?!) τείνω να συμφωνήσω με το σκεπτικό του Μανώλη Λαμπράκη.
Σταύρος Σημαιοφορίδης

Mxyzptlk

Μα αν δεχθουμε οτι δεν υπαρχει καποια μετατροπη ακεραιας σε πραγματικη τοτε η παρακατω εκφραση δεν αποτελει συντακτικο λαθος;

   5 + 2.0

αφου για να γινει η πραξη πρεπει η 5 να γινει 5.0 ;

Για την ιστορια και το 5 πραγματικος ειναι , μην ξεχασουμε και τα μαθηματικα που ξερουμε για να υποστηριξουμε αυτον τον παραλογισμο!

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

Υποθέτω η λογική είναι πως η πράξη μπορεί να γίνει και θα αποθηκευτεί σε μεταβλητή πραγματικού τύπου (εδώ κολάει το 2.0) .. για το μάθημα μας οι πράξεις div/mod και ο οι δείκτες πίνακα πρέπει αφορούν ακέραιους αριθμούς οπότε  έχουν "λόγο ύπαρξης" .. εγώ θα ξαναπώ πως δυστυχώς αυτές οι "ασάφειες" υπάρχουν και όσο διδάσκεις το μάθημα τόσο θα συναντάς και  άλλες .. οπότε να είσαι προετοιμασμένος  :angel: >:D :laugh:

evry

Νομίζω ότι η ένσταση του Mxyzpltk είναι λογική. Υπάρχουν δυο περιπτώσεις:
1) Γίνεται μετατροπή μεταξύ ακέραιων πραγματικών
2) Δεν γίνεται
Αν δεχθούμε ότι ισχύει το 2 τότε η εντολή
Κώδικας: ΓΛΩΣΣΑ
A <- B

με Α πραγματική και Β ακέραια δεν είναι σωστή. Ταυτόχρονα όμως δεν είναι σωστή και η έκφραση
Κώδικας: ΓΛΩΣΣΑ
B + Α

γιατί εδώ έχουμε έμμεση μετατροπή (coercing) από ακέραιο σε πραγματικό., για να γίνει η πράξη.
Δεν μπορεί να έχουμε coercing αλά καρτ.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

alkisg

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

Όλοι οι ακέραιοι αριθμοί είναι και πραγματικοί. Γι' αυτό η έμμεση μετατροπή από ακέραιο σε πραγματικό σε σημεία όπου αναμένεται έκφραση γίνεται σχεδόν σε όλες τις γλώσσες προγραμματισμού. Δεν είναι πρωτοτυπία της ΓΛΩΣΣΑΣ. Δεν έχουμε κανένα λόγο να προσπαθούμε να αμφισβητήσουμε το συγκεκριμένο σημείο.

Το πέρασμα ακέραιου σε διαδικασία που περιμένει πραγματικό είναι πιο tricky γιατί εκεί δεν αναμένεται έκφραση. Έτσι, καλά θα πάει η τιμή, αλλά πώς θα γυρίσει; Δεν είναι μόνο σαν να κάνουμε:
Π <- Α
που επιτρέπεται λόγω έμμεσης μετατροπής, αλλά σαν να κάνουμε και:
Α <- Π
κατά την επιστροφή της Πραγματικής τιμής της διαδικασίας στην Ακέραια παράμετρο, το οποίο δεν γίνεται.

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

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

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

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

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

alkisg

Σε πολλά σημεία το βιβλίο εξηγεί και εμείς το λαμβάνουμε σαν ορισμό, ενώ δεν είναι.

Παράθεση από: Σελίδα 177
Το όνομα της συνάρτησης είναι οποιοδήποτε έγκυρο όνομα της ΓΛΩΣ-
ΣΑΣ. Η λίστα παραμέτρων είναι μια λίστα μεταβλητών, των οποίων οι τι-
μές μεταβιβάζονται στη συνάρτηση κατά την κλήση.

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

Αντίστοιχα λίγο παρακάτω:

Παράθεση από: Σελίδα 178
Η λίστα παραμέτρων είναι μια λίστα μεταβλητών, των οποίων οι τι-
μές μεταβιβάζονται προς τη διαδικασία κατά την κλήση ή/και επιστρέφο-
νται στο κύριο πρόγραμμα μετά το τέλος της διαδικασίας.

Κι εδώ λέει "μεταβλητών" αντί να πει "εκφράσεων". Όμως πάλι καλά που λέει "ή/και επιστρέφονται". Δεν είναι απαραίτητο να γίνει επιστροφή τιμών, όταν π.χ. περάσουμε έκφραση.

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

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

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

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

P.Tsiotakis

Έστω το πρόγραμμα

Πρόγραμμα Μα_είναι_Δυνατόν!!!!!!!!
Σταθερές
   κ = 3
Μεταβλητές
   Ακέραιες: α, β, γ
   Πραγματικές:  δ, ζ, ω
Αρχή
    α <- 3
    β <- 2*α
    δ <- 2*α + β
    ζ <- β + 5.0
    ω <- 5.0 * 2
....
Τέλος_προγράμματος

Διαδικασία Κι_όμως_είναι_δυνατόν(x, y)
Μεταβλητές
   Ακέραιες: x
   Πραγματικές: y
Αρχή
....
Τέλος_διαδικασίας



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


Στο παραπάνω κύριο πρόγραμμα ΟΜΩΣ η κλήση:

ΚΑΛΕΣΕ Κι_όμως_είναι_δυνατόν(α, β)
δεν είναι σωστή γιατί η πραγματική παράμετρος β δεν είναι ιδίου τύπου με την τυπική παράμετρο y