Περίπτωση μετατροπής από ΟΣΟ σε ΓΙΑ

Ξεκίνησε από johngreek, 12 Νοε 2010, 10:01:58 ΠΜ

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

johngreek

Χαίρετε

Σε βοήθημα της ΑΕΠΠ δίνεται η ασκηση :

Να μετατραπεί η παρακάτω δομή στις άλλες δυο δομές επανάληψης αν αυτό μπορεί να γίνει :


α <-- 0
ι <-- 1
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
     α <-- α + ι^2
     ι <-- ι + 2
ΜΕΧΡΙΣ_ΟΤΟΥ ι div 7 > 5
ΕΜΦΑΝΙΣΕ α



Η μετατροπή σε ΟΣΟ είναι εύκολη  και δίνεται στο βοήθημα :


α <-- 0
ι <-- 1
ΟΣΟ ΟΧΙ ( ι div 7 > 5)  ΕΠΑΝΑΛΑΒΕ  ! ή ΟΣΟ ι div 7 <= 5
      α <-- α + ι^2
      ι <-- ι + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΜΦΑΝΙΣΕ α


Στο λυσσάρι του βοηθήματος αναφέρεται οτι η μετατροπή σε ΓΙΑ είναι αδύνατη .

Τι λέτε όμως για αυτή τη μετατροπή ; Υπάρχει κάποιο λάθος ; ( πέραν του ότι είναι ίσως εξεζητημένη για μαθητές ).

α <-- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ  ( 5 * 7 + ( ι mod 7 ) ) ΜΕ_ΒΗΜΑ 2
      α <-- α + ι^2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Ευχαριστώ


meteo_xampos

Η τελευταία τιμή που παίρνει το ι για να ισχύσει η συνθήκη ι div 7 >5 είναι η τιμή 43, άρα για ι=41 δεν ισχύει για τελευταία φορά
η συνθήκη, μιας και 41 div 5=7, άρα μπορεί να γραφεί με Για πιο απλά...
α ←  0
Για ι από 1 μέχρι 41 με_βήμα 2
   α ←  α + ι^2
Τέλος_επανάληψης
Εμφάνισε ι
Εμφάνισε α

Δεν είναι κάτι εξεζητημένο για τους μαθητές, απλώς πρέπει να ακολουθήσουν το σκεπτικό που ανέλυσα παραπάνω...

johngreek

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

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

Υποθέτω πως ναι  , σπέυδω να μου απαντήσω

Καρκαμάνης Γεώργιος

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

johngreek

Γιώργο Καρκαμάνη , θα συμφωνήσω οτι η συμμετοχή της ι στην τελική τιμή της ΓΙΑ είναι κακή τακτική , άλλο όμως η  κακή τακτική και άλλο το λάθος .

Υπάρχει πουθενά στο διδακτικό πακέτο ( ή σε οδηγία από το υπουργείο ) η συμβουλή να αποφεύγεται η χρήση μετρητή της ΓΙΑ στην τελική τιμή ΜΕΧΡΙ ; Κάτι αντίστοιχο δηλαδή με την οδηγία να μην αλλάζει η τιμή του μετρητή εντός του βρόχου ;

Εν τέλει  , η λύση που δίνει ο meteo_xampos δεν έχει αυτή την ¨ατέλεια¨. Υποθέτουμε λοιπόν οτι ( χτύπα ξύλο ) μπαίνει μια τέτοια άσκηση στις εξετάσεις . Σε τρία διαφορετικά γραπτά βλέπεις και τις τρείς λύσεις . Τη δική μου , του meteo_xampos  και του βοηθήματος ( = δεν γίνεται η μετατροπή) . Ποιά η ποιές θα θεωρήσεις σωστές ;

alkisg

Παράθεση από: johngreek στις 12 Νοε 2010, 10:01:58 ΠΜ
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ  ( 5 * 7 + ( ι mod 7 ) ) ΜΕ_ΒΗΜΑ 2

Στις γλώσσες προγραμματισμού που διαθέτουν εντολή for παρόμοια με τη ΓΙΑ της ΓΛΩΣΣΑΣ, η τελική τιμή αποτιμάται συνήθως μόνο μία φορά στην αρχή του loop, και όχι καθ' επανάληψη.
Άρα το παραπάνω κομμάτι κώδικα θα αποτιμηθεί μόνο στην αρχή, και ισοδυναμεί με:
Παράθεση
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ  ( 5 * 7 + ( 1 mod 7 ) ) ΜΕ_ΒΗΜΑ 2

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

https://alkisg.mysch.gr/steki/index.php?topic=1495.0
https://alkisg.mysch.gr/ΓΛΩΣΣΑ/ΓΙΑ/

Αντίστοιχα και στην "ΕΠΙΛΕΞΕ" η τιμή της έκφρασης αποτιμάται μόνο στην αρχή και όχι κάθε φορά που συναντάται κάποια "ΠΕΡΙΠΤΩΣΗ", και για τον ίδιο λόγο σχετικές ασκήσεις / λύσεις θα πρέπει να αποφεύγονται.

alkisg

Παράθεση από: johngreek στις 13 Νοε 2010, 07:43:57 ΠΜ
Υπάρχει πουθενά στο διδακτικό πακέτο ( ή σε οδηγία από το υπουργείο ) η συμβουλή να αποφεύγεται η χρήση μετρητή της ΓΙΑ στην τελική τιμή ΜΕΧΡΙ ; Κάτι αντίστοιχο δηλαδή με την οδηγία να μην αλλάζει η τιμή του μετρητή εντός του βρόχου ;

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

johngreek

alkig έχεις δίκιο σε αυτό που λές για το τετράδιο μαθητή ( αν και εγώ το "΄μη χρησιμοποιείς εντολες μέσα στο βρόχο" το είχα εκλαβει - μάλλον λανθασμένα - ώς   αποφυγή εντολών  εκχώρησης ή εισόδου  ατο "μπλοκ" εντολών της ΓΙΑ πχ
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ κ
    κ <-- κ + 1
    ....
)

Αποσύρω λοιπον τη δική μου λύση , αλλά παραμένει η λύση του meteo . Την κάνουμε δεκτή  ή λέμε οτι η μετατροπή είναι αδύνατη ; Νομίζω οτι ή το ένα είναι σωστό ή το άλλο . Τι λέτε;

johngreek

Τώρα μάλλον ψειρίζω τη μαιμού  , αλλά , alkig , στη σελίδα 78 του τετραδίου μαθητή λέει

¨Ποτέ μην μη χρησιμοποιείς εντολές που αλλάζουν  .... τη μεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ . Άρα  , ουσιαστικά είναι σαν να εννοεί βρόχο το "μπλοκ" εντολών της ΓΙΑ  ,  αφού η μεταβλητή αλλαζει αναγκαστικά τιμή στη ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ  ( πρώτη γραμμή μιας ΓΙΑ )

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

Να ήταν βέβαια αυτή η μόνη ασάφεια  ;D

alkisg

Παράθεση από: johngreek στις 13 Νοε 2010, 09:37:19 ΠΜ
Άρα γιατί αν μην θεωρήσω και εγώ οτι και όταν λέει " μην αλλάζετε την τελική τιμή εντος του βροχου της ΓΙΑ"  εννοεί μόνο το μπλόκ εντολών και όχι την πρώτη γραμμή της ΓΙΑ .

Η πρόσθεση του βήματος στο ι είναι εντός του βρόχου, αφού εκτελείται σε κάθε επανάληψη, ανεξάρτητα από το αν το ΜΕ_ΒΗΜΑ φαίνεται στην πρώτη γραμμή. Και το "ΜΕΧΡΙ" και το "ΜΕ_ΒΗΜΑ" αποτελούν μέρος του βρόχου, όπως και στην ΟΣΟ ο έλεγχος της συνθήκης είναι εντός του βρόχου. :)

johngreek

Συμφωνώ απολύτως οτι η πρώτη γραμμή της ΓΙΑ ( και της ΟΣΟ ) είναι μέρος του βρόχου . Είναι όμως θέμα διατύπωσης ( όπως λέμε και στο πρώτο κεφάλαιο ) . Άρα όταν το τετράδιο μου λέει να μην αλλάζω τη μεταβλητή μετρητή εντός του βρόχου της ΓΙΑ  , μου λέει ουσιαστικα να μην χρησιμοποιώ ΓΙΑ  ;D;



Λίτσα

Καλησπέρα. Θέλω το παρακάτω απλό παράδειγμα να γίνει σε Για :

κ<-0
α<-1
Όσο  α<6 επαναλαβε
        κ<-κ+α
        α<-α+2
Τέλος_επανάληψης
εμφάνισε κ

Λέω στα παιδιά ότι για να βρουν την τελική τιμή της μεταβλητής που θα μπει στο μέχρι της Για  (εφόσον θέλουμε πάντα και το ίσον στη σύγκριση) αρκεί να αφαιρέσουν το βήμα δηλ στην προκειμένη 6-2=4. Άρα , η Για θα γίνει :

κ<-0
Για α από 1 μέχρι 4 με_βήμα 2
         κ<-κ+α
Τέλος_επανάληψης
εμφάνισε κ

Όμως, οι δύο αλγόριθμοι δεν είναι ισοδύναμοι!!!Για να ειναι σωστός ο 2ος θα πρεπει να βάλω τελική τιμή το 5. Αλλά γιατί; Μέχρι τωρα δεν είχα συναντήσει κάποιο πρόβλημα σε αυτά. Όλα λειτουργούσαν με το παραπάνω σκεπτικό. διότι αν π.χ. το βήμα ήταν 0.5 τότε τελική τιμή θα έμπαινε η 6-0.5=5.5. Τώρα; τί γίνεται λάθος; Είναι πολύ απλό αλλά έχω κολλήσει  :-[....μπορείτε να βοηθήσετε  :angel:;
Ευχαριστώ

evry

Παράθεση από: Λίτσα στις 05 Δεκ 2010, 03:05:47 ΜΜ
Λέω στα παιδιά ότι για να βρουν την τελική τιμή της μεταβλητής που θα μπει στο μέχρι της Για  (εφόσον θέλουμε πάντα και το ίσον στη σύγκριση) αρκεί να αφαιρέσουν το βήμα δηλ στην προκειμένη 6-2=4. Άρα , η Για θα γίνει :

κ<-0
Για α από 1 μέχρι 4 με_βήμα 2
         κ<-κ+α
Τέλος_επανάληψης
εμφάνισε κ
Ο κανόνας που χρησιμοποιείς δεν είναι σωστός, και η περίπτωση που παρουσιάζεις είναι η απόδειξη για αυτό. Έχει σημασία και από που ξεκινάς. Εσύ έκανες την παραδοχή ότι ξεκινάς από 0, οπότε έχεις 0, 0+2=2, 2+2=4 οπότε είτε βάλεις 5 είτε 4 σε αυτή την περίπτωση είναι το ίδιο.
    Στο παράδειγμά σου όμως ξεκινάς από το 1 οπότε πέφτεις πάνω σε περιττούς αριθμούς που σημαίνει ότι θα εκτελεστεί και για 5 αφού οι τιμές του α είναι 1,3,5.
   Αν θέλεις να λες στα παιδιά έναν κανόνα για να νιώθουν ασφάλεια σε αυτές τις περιπτώσεις μπορείς να τους λες να βάζουν -1 στο πάνω όριο ανεξάρτητα του βήματος.
   Και πάλι όμως το καλύτερο θα ήταν να πειραματίζονται με τις τιμές που εμφανίζονται και όχι με μεθοδολογίες μετατροπής οι οποίες μάλιστα δεν έχουν και καμία επιστημονική βαρύτητα αφού η "ισοδυναμία" αλγορίθμων δεν είναι ορισμένη. Δηλαδή το τι εννοούμε όταν λέμε ότι 2 αλγόριθμοι είναι ισοδύναμοι δεν είναι τόσο απλό.
  Για παράδειγμα οι αλγόριθμοι της σειριακής και της δυαδικής αναζήτησης έχουν το ίδιο αποτέλεσμα. Θα βρουν αυτό που ψάχνεις. Θα μπορούσες να τους χαρακτηρίσεις ισοδύναμους όταν ο ένας μπορεί να κάνει 1000000 βήματα και ο άλλος μόλις 20?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

Παράθεση από: evry στις 05 Δεκ 2010, 03:51:43 ΜΜ
   Αν θέλεις να λες στα παιδιά έναν κανόνα για να νιώθουν ασφάλεια σε αυτές τις περιπτώσεις μπορείς να τους λες να βάζουν -1 στο πάνω όριο ανεξάρτητα του βήματος.

-1 ανεξάρτητα του βήματος;

odysseas

Παράθεση από: Νίκος Αδαμόπουλος στις 05 Δεκ 2010, 08:25:59 ΜΜ
-1 ανεξάρτητα του βήματος;

Συμφωνώντας με τον Ευριπίδη, ο μόνος περιορισμός που μπορώ να σκεφτώ για τον "κανόνα" του -1 σε σχέση με το βήμα είναι ότι θα πρέπει να είναι ακέραιο (και φυσικά θετικό, όταν η συνθήκη έχει τη συγκεκριμένη φορά του παραδείγματος). Στην περίπτωση αυτή, μου φαίνεται προφανές ότι η συνθήκη:

Παράθεση από: Λίτσα στις 05 Δεκ 2010, 03:05:47 ΜΜ
Όσο  α<6 επαναλαβε

ισοδυναμεί με α<=5.