Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: abal στις 07 Δεκ 2018, 09:39:53 πμ

Τίτλος: Επανάληψη ΓΙΑ
Αποστολή από: abal στις 07 Δεκ 2018, 09:39:53 πμ
Στο μικρό βιβλίο του μαθήματος "Οδηγίες Μελέτης Μαθητή", στη σελίδα 35, παράγραφος 3.3.3 αναφέρει στις παρατηρήσεις τα παρακάτω:

Μέσα στην εντολή ΓΙΑ δεν επιτρέπεται να αλλάζει η τιμή της μεταβλητής του ΓΙΑ, γιατί τότε δεν λειτουργεί σωστά η εντολή επανάληψης.

Αυτό το "δεν επιτρέπεται" τι σημαίνει; Σε όλες τις γλώσσες προγραμματισμού η μεταβλητή αυτή επιτρέπεται να αλλάζει. Μπορεί να μην είναι καλή πρακτική αλλά δεν απαγορεύεται.

Σε περίπτωση αντίστοιχης ερώτησης σωστού λάθους, τι λέμε στους μαθητές μας;
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: Λαμπράκης Μανώλης στις 07 Δεκ 2018, 10:28:05 πμ
Καλημέρα

κατά την γώμη μου, εφόσον είναι "ξεκάθαρο" στο τετράδιο μαθητή, δεν επιτρέπεται να αλλάζουμε τον μετρητή σε μία δομή ΓΙΑ ... το γεγονός ότι αυτό επιτρέπεται σε άλλες γλώσσες προγραμματισμού δεν αποτελεί κριτήριο ορθότητας ...

ΥΓ. νομίζω πως και στον διερμηνευτή της ΓΛΩΣΣΑΣ ισως γίνεται να αλλάξει ο μετρητής, ο Άλκης είναι σίγουρα  ο καταλληλότερος για να μας λύσει την απορία, όμως "στπ πλαίσιο του μαθήματος" δεν γίνεται μάλλον .
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: P.Tsiotakis στις 07 Δεκ 2018, 10:52:50 πμ
Όπως το    δεν επιτρέπεται να κάνω διαίρεση με το μηδέν, γιατί τότε δεν ορίζεται η πράξη.
Όπως το    δεν επιτρέπεται το βήμα της δομής ΓΙΑ να είναι μηδέν, γιατί τότε θα πραγματοποιηθούν άπειρες επαναλήψεις.
Όπως το    δεν επιτρέπεται εντός του ΓΙΑ να τροποποιούνται οι τιμές της αρχικής τιμής, της τελικής τιμής και του βήματος, γιατί τότε είναι μη προκαθορισμένο το πλήθος των επαναλήψεων.
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: alkisg στις 07 Δεκ 2018, 10:54:37 πμ
Το "δεν λειτουργεί σωστά η εντολή επανάληψης" το ερμηνεύω ως "λειτουργεί αλλά δεν κάνει αυτό που πρέπει".
Και επομένως αφού λειτουργεί είναι και εκτελέσιμη.
Και επομένως ο Διερμηνευτής είναι υποχρεωμένος να εκτελέσει τις εντολές αλλαγής των μετρητών μιας ΓΙΑ.
Για παράδειγμα, στον Διερμηνευτή, ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10... ι <- 20 ...ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ, το ι θα γίνει 20 και η επανάληψη θα σταματήσει.

Όμως προσοχή, ο μαθητής δεν μπορεί να στηριχθεί στη συγκεκριμένη συμπεριφορά του Διερμηνευτή· κάποια άλλη υλοποίηση θα μπορούσε να αγνοεί τελείως τις χειρωνακτικές αλλαγές του μετρητή (π.χ. αν χρησιμοποιούσε registers για ταχύτητα στους μετρητές). Είναι αυτό που λέμε "undefined behavior", δηλαδή κάθε προγραμματιστικό περιβάλλον είναι υποχρεωμένο να εκτελέσει όπως νομίζει αυτή την εντολή, αλλά δεν μπορούμε να στηριχθούμε στο τι θα κάνει εφόσον δεν έχει καθοριστεί στο "πρότυπο", στην ίδια την ΓΛΩΣΣΑ. Αυτό δεν είναι κάτι σπάνιο, ακόμα και στην Javascript υπάρχουν σημεία με undefined behavior όπου ο κάθε browser το υλοποιεί όπως νομίζει και οι προγραμματιστές πρέπει να τα αποφεύγουν αφού δεν ορίζονται από το σχετικό πρότυπο της W3C.

Όσον αφορά στη βαθμολόγηση, νομίζω ότι το να στηρίζει κάποιος το πρόγραμμά του σε εντολές με "undefined behavior" αξίζει κάποα απώλεια σε μονάδες, αφού μπορεί σίγουρα να θεωρηθεί κακή πρακτική και πιθανώς και λογικό λάθος.
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: abal στις 07 Δεκ 2018, 11:52:14 πμ
Προσωπικά θεωρώ το "δεν επιτρέπεται" λάθος διατύπωση που θα έπρεπε να αλλαχθεί.

Το να βάλω βήμα 0 στο ΓΙΑ δεν είναι απλά ένα λογικό λάθος;  Σαν να ξεχάσω την αύξηση του μετρητή στον ΟΣΟ;

αλλά πείτε μου, αν σε άσκηση μαθητής χρησιμοποιήσει ΓΙΑ, και αλλάξει το μετρητή (με ΑΝ) για να σταματήσει την επανάληψη όταν ικανοποιηθεί μια συνθήκη, θα κόβατε μονάδες;
Συμφωνώ ότι είναι κακή πρακτική, αλλά οι κακές πρακτικές δεν έχουν αρνητική βαθμολογία σε γραπτές εξετάσεις.
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: alkisg στις 07 Δεκ 2018, 12:49:24 μμ
Δεν σου εγγυάται κάποιος ότι αλλάζοντας την τιμή του μετρητή θα τερματιστεί η επανάληψη. Δεν είναι σίγουρο ότι είναι απλά κακή πρακτική, ανάλογα με την υλοποίηση μπορεί να μην δουλεύει καν.

Για παράδειγμα, το παρακάτω πρόγραμμα στο Διερμηνευτή εσκεμμένα εμφανίζει "1 2 3 4 5" και όχι "1" όπως πιθανώς κάποιοι θα περίμεναν. Εξήγηση στη βοήθεια, https://alkisg.mysch.gr/ΓΛΩΣΣΑ/ΓΙΑ/ (https://alkisg.mysch.gr/ΓΛΩΣΣΑ/ΓΙΑ/).

Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ τεστ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ι, κ
ΑΡΧΗ
  κ <- 5
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ κ
    ΓΡΑΨΕ ι
    κ <- 0
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Τίτλος: Απ: Επανάληψη ΓΙΑ
Αποστολή από: Κωστας τζιαννης στις 08 Δεκ 2018, 06:23:48 μμ
μιας και ειπωθηκε για μετρητες και για ,να κατι που θεωρω ενδιαφερον.

με δεδομενο μη αρνητικο αριθμο χ που διαβαζεται απο το πληκτρολογιο να βρειτε τι υλοποιει το παρακατω τμημα αλγοριθμου

 ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ χ
    ΓΡΑΨΕ ι
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Σ <- ΨΕΥΔΗΣ
  ΑΝ ι - 1 = χ ΤΟΤΕ
    Σ <- ΑΛΗΘΗΣ
  ΤΕΛΟΣ_ΑΝ