Γενικό Λύκειο > Εντολή ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ

μεταβλητή στο βήμα ή το από της Για

<< < (2/5) > >>

μ-Ziq:

Καλησπέρα!

Αρχή_επανάληψης
 Διάβασε i
Μέχρις_ότου i <= 10
Για i από i μέχρι 10
 μπλαμπλα
Τέλος_επανάληψης

Σωστό ή Λάθος? (Αναφέρομαι προφανώς στο "Για i από i" κομμάτι.)

Ευχαριστώ!

Νίκος Αδαμόπουλος:
Το ερώτημά σου βρίσκεται μέσα στις γκρίζες ζώνες του βιβλίου... Με λίγα λόγια, οι απόψεις διίστανται!

Από τον παραπάνω σύνδεσμο ( http://dide.ilei.sch.gr/keplinet/education/docs/aepp_yp_2010.pdf ) αντιγράφω το εξής:

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

Με βάση λοιπόν το παραπάνω "σκεπτικό" θα συμπεράναμε ομοίως ότι "δεν πρέπει να αλλάζουμε την αρχική τιμή" της ΓΙΑ, επομένως το παράδειγμά σου θα έλεγα ότι: "δεν είναι σωστό", ή καλύτερα δεν είναι: "πολιτικώς ορθό" (!!!)

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

petrosp13:
Σωστό, γιατί το i έχει συγκεκριμένη τιμή πριν την επανάληψη
Η μετατροπή του σε Όσο θα είχε την εξής μορφή

i <-- i
Όσο (i <= 10) επανάλαβε
    μπλαμπλα
    i <-- i + 1
Τέλος_Επανάληψης

Δεν υπάρχει λάθος

alkisg:
Με αφορμή την οδηγία του Υπουργείου που γράφει ο Νίκος παραπάνω, να ζητήσω λίγο πάλι τη γνώμη σας για την υλοποίηση της ΓΙΑ στον Διερμηνευτή.

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

Το Υπουργείο λέει "η ΓΛΩΣΣΑ αποκλείει...", με βαρύ ύφος, που υποθέτω ότι σημαίνει ότι ο Διερμηνευτής θα πρέπει να αρνηθεί να το εκτελέσει.
Πρώτη ερώτηση: δηλαδή τι να βγάλει; Συντακτικό λάθος ή χρόνου εκτέλεσης;

Παρακάτω. Ας δούμε ένα πολύ συνηθισμένο παράδειγμα:


--- Κώδικας: ΓΛΩΣΣΑ ---ΓΙΑ μ ΑΠΟ 1 ΜΕΧΡΙ 10  ΚΑΛΕΣΕ ΚάποιαΔιαδικασία(μ)ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Με βάση λοιπόν την οδηγία του Υπουργείου, αυτό το πρόγραμμα (και ένα σωρό άλλα που διδάσκουμε) είναι λάθος! Ή ΚάποιαΔιαδικασία παίρνει σαν παράμετρο τον μετρητή μ με "αναφορά" (copy-restore), οπότε συντακτικά ισοδυναμεί με αλλαγή τιμής, είτε αλλάξει το μ εντός της διαδικασίας είτε όχι. Είναι ισοδύναμο με το να κάναμε μ <- μ, που γράφει στο μ κι ας μην το μεταβάλλει.

Άρα είτε θα πρέπει να εξηγήσουμε ότι έχουμε ένα σούπερ περίεργο interpreter/runtime-system που ελέγχει αν η τιμή που γράφεται είναι ίδια ή όχι, πριν βγάλει λάθος,
είτε η οδηγία του Υπουργείου είναι λάθος και πρέπει να αλλαχθεί σε "κακή πρακτική".

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

Οπότε, δεύτερη ερώτηση: να αλλάξει η υλοποίηση της ΓΙΑ του Διερμηνευτή, και πώς ακριβώς να γίνει;

Ως τρίτη ερώτηση, με την τρέχουσα υλοποίηση του Διερμηνευτή και της Pascal (προσωρινές μεταβλητές), η αρχική τιμή δεν μπορεί να αλλάξει εντός της επανάληψης, οποιεσδήποτε μεταβλητές κι αν πειράξει ο προγραμματιστής.
Η οδηγία του Υπουργείου έβαλε έναν επιπρόσθετο περιορισμό, ότι δεν μπορούμε να πειράζουμε την μεταβλητή της αρχικής τιμής, χωρίς αυτός ο περιορισμός να έχει νόημα ούτε στη ΓΙΑ ούτε κατά τη μετατροπή της σε ΟΣΟ... δηλαδή δημιούργησε κι άλλο πρόβλημα εκεί που δεν υπήρχε.

George Eco:
Απαντώ.
Κατά τη γνώμη μου μάλλον χρόνου εκτέλεσης θα είναι.
Τώρα για το πώς να αλλάξει ο Διερμηνευτής, η θέση μου είναι έτσι ώστε να ακολουθεί τις οδηγίες του Υπουργείο.
Βέβαια προτιμώ να αλλάξει η γλώσσα προγραμματισμού, το έχω ξαναπει.

Η ΓΙΑ μπορεί να έχει μεταβλητές ως μετρητή, τιμή από, τιμή μέχρι, τιμή βήματος αρκεί το βήμα να μη πάρει τιμή 0 αν θυμάμαι καλά. Το θεωρεί βάσει ντιρεκτίβας μη αποδεκτό.

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

[*] Προηγούμενη σελίδα

Μετάβαση στην πλήρη έκδοση