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

Απορία για Ορθότητα

(1/2) > >>

Glass:
Καλησπέρα σε όλους.

Πιστεύετε είναι σωστό το παρακάτω;

Α<--1

Για Α από Α μέχρι 10
....
Τέλος_Επανάληψης

Ευχαριστώ

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

Νίκος Αδαμόπουλος:
Σύμφωνα με την 43652/Γ2/20-04-2010 του Υπ. Παιδείας (http://dide.ilei.sch.gr/keplinet/education/docs/aepp_yp_2010.pdf ) :

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

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

odysseas:
Δεν μπορώ να αγνοήσω το επιχείρημα ότι το Τετράδιο Μαθητή δίνει την οδηγία στους μαθητές να μη γράφουν προγράμματα που τροποποιούν την αρχική τιμή, αλλά ας μην ξεχνάμε ότι πρόκειται για οδηγία -- εγώ από το παραπάνω απόσπασμα δεν καταλαβαίνω ότι δε γίνεται ή ότι απαγορεύεται η τροποποίηση της αρχικής τιμής, αλλά ότι πρέπει να αποφεύγεται, για να μην οδηγήσει σε προγράμματα "δυσνόητα ή λανθασμένα". Να προσθέσω επίσης ότι η τροποποίηση της αρχικής τιμής, σε αντίθεση με τις υπόλοιπες μη-συνιστώμενες τροποποιήσεις, δε μεταβάλλει το σταθερό και γνωστό εκ των προτέρων πλήθος των επαναλήψεων, άρα δεν έρχεται σε αντίθεση με το "πνεύμα" της ΓΙΑ.

Να δώσω κι ένα παράδειγμα όπου το να παραβιάσει κανείς την παραπάνω οδηγία δε μου φαίνεται καθόλου λανθασμένο: Έστω ότι μας δίνεται το παρακάτω απόσπασμα αλγορίθμου και τίθεται το ερώτημα αν μπορεί να γραφτεί ισοδύναμα με την επαναληπτική δομή ΓΙΑ:


--- Κώδικας: ---α <-- 20
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
  β <-- α ^ 2
  ΕΜΦΑΝΙΣΕ β
  α <-- α - 3
ΜΕΧΡΙΣ_ΟΤΟΥ α < 10
ΕΜΦΑΝΙΣΕ α, β

--- Τέλος κώδικα ---

Η τυπική μετατροπή σε ΟΣΟ μας δίνει:


--- Κώδικας: ---α <-- 20
β <-- α ^ 2
ΕΜΦΑΝΙΣΕ β
α <-- α - 3
ΟΣΟ α >= 10 ΕΠΑΝΑΛΑΒΕ
  β <-- α ^ 2
  ΕΜΦΑΝΙΣΕ β
  α <-- α - 3
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ α, β

--- Τέλος κώδικα ---

Θα απαντούσα ότι μπορεί να χρησιμοποιηθεί η δομή ΓΙΑ, ως εξής:


--- Κώδικας: ---α <-- 20
β <-- α ^ 2
ΕΜΦΑΝΙΣΕ β
ΓΙΑ α ΑΠΟ α-3 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ -3
  β <-- α ^ 2
  ΕΜΦΑΝΙΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ α, β

--- Τέλος κώδικα ---

gthal:
χμμ... Οδυσσέα δεν κατάλαβα γιατί πρέπει να εκτελεστούν οι εντολές
β <-- α ^ 2
ΕΜΦΑΝΙΣΕ β
α <-- α - 3
μια φορά πριν να αρχίσει η ΟΣΟ (και κατ' επέκταση οι β <-- α ^ 2  και ΕΜΦΑΝΙΣΕ β  πριν από τη ΓΙΑ)

αλλά, τέλος πάντων, αν θέλουμε να αρχίσουμε τη ΓΙΑ από την τιμή α-3 καλύτερα δε θα ήταν να γράφαμε το παρακάτω;
ΓΙΑ κ ΑΠΟ α-3 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ -3
  β <-- κ^ 2
  ΕΜΦΑΝΙΣΕ β
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Πλοήγηση

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

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

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