Αποστολέας Θέμα: Απορία για Ορθότητα  (Αναγνώστηκε 1753 φορές)

Glass

  • Νέος
  • *
  • Μηνύματα: 1
Απορία για Ορθότητα
« στις: 02 Οκτ 2010, 12:02:57 μμ »
Καλησπέρα σε όλους.

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

Α<--1

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

Ευχαριστώ

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 914
Απ: Απορία για Ορθότητα
« Απάντηση #1 στις: 02 Οκτ 2010, 12:23:02 μμ »
Γεια.
Αυτό, πιθανότατα λειτουργεί, αλλά θα έλεγα οπωσδήποτε να το αποφεύγουμε!
Αν θέλουμε η αρχική τιμή της ΓΙΑ να παρθεί από μια μεταβλητή (που είναι μια πολύ πιθανή κατάσταση), τότε δεν έχουμε κανένα λόγο να χρησιμοποιήσουμε την ίδια μεταβλητή για τον μετρητή της ΓΙΑ.
Φιλικά,
Γιώργος Θαλασσινός

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2788
  • Πύργος Ηλείας
Απ: Απορία για Ορθότητα
« Απάντηση #2 στις: 02 Οκτ 2010, 12:52:10 μμ »
Σύμφωνα με την 43652/Γ2/20-04-2010 του Υπ. Παιδείας (http://dide.ilei.sch.gr/keplinet/education/docs/aepp_yp_2010.pdf ) :

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

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

odysseas

  • Ομάδα διαγωνισμάτων 2011
  • *
  • Μηνύματα: 842
Απ: Απορία για Ορθότητα
« Απάντηση #3 στις: 02 Οκτ 2010, 01:33:28 μμ »
Δεν μπορώ να αγνοήσω το επιχείρημα ότι το Τετράδιο Μαθητή δίνει την οδηγία στους μαθητές να μη γράφουν προγράμματα που τροποποιούν την αρχική τιμή, αλλά ας μην ξεχνάμε ότι πρόκειται για οδηγία -- εγώ από το παραπάνω απόσπασμα δεν καταλαβαίνω ότι δε γίνεται ή ότι απαγορεύεται η τροποποίηση της αρχικής τιμής, αλλά ότι πρέπει να αποφεύγεται, για να μην οδηγήσει σε προγράμματα "δυσνόητα ή λανθασμένα". Να προσθέσω επίσης ότι η τροποποίηση της αρχικής τιμής, σε αντίθεση με τις υπόλοιπες μη-συνιστώμενες τροποποιήσεις, δε μεταβάλλει το σταθερό και γνωστό εκ των προτέρων πλήθος των επαναλήψεων, άρα δεν έρχεται σε αντίθεση με το "πνεύμα" της ΓΙΑ.

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

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

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

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

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

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

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 914
Απ: Απορία για Ορθότητα
« Απάντηση #4 στις: 02 Οκτ 2010, 02:37:47 μμ »
χμμ... Οδυσσέα δεν κατάλαβα γιατί πρέπει να εκτελεστούν οι εντολές
β <-- α ^ 2
ΕΜΦΑΝΙΣΕ β
α <-- α - 3
μια φορά πριν να αρχίσει η ΟΣΟ (και κατ' επέκταση οι β <-- α ^ 2  και ΕΜΦΑΝΙΣΕ β  πριν από τη ΓΙΑ)

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

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2788
  • Πύργος Ηλείας
Απ: Απορία για Ορθότητα
« Απάντηση #5 στις: 02 Οκτ 2010, 03:28:01 μμ »
Δεν μπορώ να αγνοήσω το επιχείρημα ότι το Τετράδιο Μαθητή δίνει την οδηγία στους μαθητές να μη γράφουν προγράμματα που τροποποιούν την αρχική τιμή, αλλά ας μην ξεχνάμε ότι πρόκειται για οδηγία -- εγώ από το παραπάνω απόσπασμα δεν καταλαβαίνω ότι δε γίνεται ή ότι απαγορεύεται η τροποποίηση της αρχικής τιμής, αλλά ότι πρέπει να αποφεύγεται, για να μην οδηγήσει σε προγράμματα "δυσνόητα ή λανθασμένα". ...

H εν λόγω "οδηγία" αναφερόταν σε άλλη παρόμοια ερώτηση (για μεταβολή του μετρητή) ... Η σχετική παράγραφος, λοιπόν, της παραπάνω εγκυκλίου τελειώνει ως εξής: "Από τα προαναφερθέντα προκύπτει ότι η ΓΛΩΣΣΑ αποκλείει τη μεταβολή του μετρητή."

Εγώ μετά από όλα αυτά θεωρώ ότι δεν πρόκειται πλέον για οδηγία αλλά για απαγόρευση! Στο κάτω κάτω αφού μπορεί να γραφτεί και με άλλο τρόπο, όπως λέει και ο Γιώργος, γιατί να φτάνουμε σε κώδικα αμφισβητούμενο;

odysseas

  • Ομάδα διαγωνισμάτων 2011
  • *
  • Μηνύματα: 842
Απ: Απορία για Ορθότητα
« Απάντηση #6 στις: 02 Οκτ 2010, 04:12:11 μμ »
δεν κατάλαβα γιατί πρέπει να εκτελεστούν οι εντολές
β <-- α ^ 2
ΕΜΦΑΝΙΣΕ β
α <-- α - 3
μια φορά πριν να αρχίσει η ΟΣΟ

Επειδή έτσι θα γίνει και με το αρχικό απόσπασμα που χρησιμοποιεί τη ΜΕΧΡΙΣ_ΟΤΟΥ και η εκφώνηση ζητά ισοδύναμο κώδικα.

Εγώ μετά από όλα αυτά θεωρώ ότι δεν πρόκειται πλέον για οδηγία αλλά για απαγόρευση! Στο κάτω κάτω αφού μπορεί να γραφτεί και με άλλο τρόπο, όπως λέει και ο Γιώργος, γιατί να φτάνουμε σε κώδικα αμφισβητούμενο;

Όπως αγαπάς! Δε θέλω να παρεξηγηθώ: δε θα πρότεινα κανείς να γράψει κώδικα που ακροβατεί και δεν μπορώ να σκεφτώ γενικές περιπτώσεις στις οποίες θα έγραφα έναν αλγόριθμο που να χρησιμοποιεί τέτοιου είδους διατυπώσεις. Ωστόσο, έδωσα ένα παράδειγμα άσκησης η οποία, κατά τη γνώμη μου, λύνεται ορθότερα έτσι. Αν χρησιμοποιήσεις άλλη μεταβλητή γράφεις κώδικα που έχει το ίδιο αποτέλεσμα όμως δεν "ισοδυναμεί" με τον αρχικό. Βέβαια, καλό θα ήταν να μην μπούμε σε συζητήσεις που αφορούν τη νεφελώδη "ισοδυναμία", αφού αυτό δεν είναι το θέμα του thread και αφού τα τελευταία χρόνια στις εξετάσεις η λέξη αυτή δε χρησιμοποιείται πια.

Όσο για τη μη μεταβολή του μετρητή (ή και της τελικής τιμής) μέσα στην επανάληψη, δεν υπάρχει συζήτηση, δεν μπορεί να επιτρέπεται.

evry

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 3182
  • to Iterate is human to Recurse divine
Απ: Απορία για Ορθότητα
« Απάντηση #7 στις: 02 Οκτ 2010, 08:07:04 μμ »
Το θέμα το έχουμε ξανασυζητήσει παλαιότερα αλλά δεν θυμάμαι το σχετικό thread.
Κατ'αρχήν τι νόημα έχει να λέμε ότι "δεν επιτρέπεται να αλλάζουμε την αρχική τιμή" του μετρητή στη Για από τη στιγμή που η τιμή αυτή υπολογίζεται μια φορά πριν την πρώτη επανάληψη? Δηλαδή σε τι θα επηρεάσει την αρχική τιμή αν το Α αλλάξει μετά τιμή?
Προφανώς σε τίποτα.
Σίγουρα ο αρχικός κώδικας δεν είναι λάθος. Απλά είναι κακή πρακτική, και πρέπει να αποτρέπουμε τους μαθητές από το να γράφουν τέτοιο κώδικα, αλλά δεν μπορούμε να το χαρακτηρίσουμε και λάθος.
   Συμφωνώ με τον odyssea που λέει ότι πρόκειται για οδηγία και όχι για απαγόρευση γιατί αν πούμε ότι είναι λάθος θα πρέπει να εξηγήσουμε και τι λάθος είναι, συντακτικό ή λογικό.
  Επίσης οι "μερικές" γλώσσες προγραμματισμού που λέει το τετράδιο μαθητή είναι οι C, C++, Java, C#. Δηλαδή όλες οι σύγχρονες γλώσσες προγραμματισμού.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 914
Απ: Απορία για Ορθότητα
« Απάντηση #8 στις: 03 Οκτ 2010, 11:32:01 πμ »
Βέβαια, καλό θα ήταν να μην μπούμε σε συζητήσεις που αφορούν τη νεφελώδη "ισοδυναμία"
Με πρόλαβες.   :-X

Γιατί με βρίσκει αντίθετο ετούτο:
Επειδή έτσι θα γίνει και με το αρχικό απόσπασμα που χρησιμοποιεί τη ΜΕΧΡΙΣ_ΟΤΟΥ και η εκφώνηση ζητά ισοδύναμο κώδικα.
Και ετούτο:
Αν χρησιμοποιήσεις άλλη μεταβλητή γράφεις κώδικα που έχει το ίδιο αποτέλεσμα όμως δεν "ισοδυναμεί" με τον αρχικό.
Και είχα αρχίσει κι εγώ να σκέφτομαι τι εννοεί με τον όρο "ισοδυναμία" ο καθένας μας.
(αλλά απ' ότι είδα σε συζητήσεις προηγούμενων ετών, πράγματι είναι μια έννοια σχετική και χωράει ατέλειωτη κουβέντα)
Φιλικά,
Γιώργος Θαλασσινός