βίαιη μεταβολή του μετρητή στο "για"

Ξεκίνησε από Λάμπρος Μπουκουβάλας, 31 Ιαν 2008, 09:00:32 ΜΜ

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

Λάμπρος Μπουκουβάλας

πιστεύετε ότι λειτουργεί σωστά το παρακάτω;:

διαβασε κ
για ι από 1 μέχρι 10
διάβασε α[ι]
τέλος_επανάληψης
για ι από 1 μέχρι 10
αν κ=α[ι] τότε
ι <-- 11
τέλος_αν
τέλος_επανάληψης

ο σκοπός μου είναι να "εξομοιώσω" μια έξυπνη σειριακή αναζήτηση του βιβλίου, αλλά με "για"!
με το διάγραμμα όλα φαίνονται να λειτουργούν καλά!
Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

P.Tsiotakis

Ποτέ δεν πρέπει να τροποποιείται εντός του βρόχου η άρχική, η τελική τιμή του του για, ο μετρητής και το βήμα.

Το Για είναι δομή σχεδιασμένη για προκαθορισμένο αριθμό επαναλήψεων.

Είναι ΛΑΘΟΣ

evry


  Η τροποποίηση του μετρητή i μέσα στην επανάληψη Για..από...μέχρι σύμφωνα με το τετράδιο μαθητή αν θυμάμαι καλά είναι κακή πρακτική, αλλά δεν ξέρω κατά πόσο μπορούμε να θεωρήσουμε ότι είναι λάθος.
   Το λέω αυτό γιατί αν πούμε σε κάποιον μαθητή ότι αυτό είναι λάθος μια φυσιολογική απάντηση που θα πάρουμε είναι "οκ αφού είναι λάθος ποιο από τα αλγοριθμικά κριτήρια παραβιάζει?". Σίγουρα πρέπει όλοι να αποτρέπουμε τους μαθητές από τέτοιες πρακτικές αλλά πιστεύω ότι η αλλαγή του μετρητή του Για, είναι τόσο λάθος όσο η περιττή χρήση πινάκων.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Λάμπρος Μπουκουβάλας

ναι, αλλά στη πράξη δουλεύει μια χαρά!
μου θυμίζει το σχετικό link στο forum για το αν πρέπει τελικά να χρησιμοποιούμε διάβασε-εμφάνισε σε συναρτήσεις...
Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

P.Tsiotakis

Το τετράδιο μαθητή λέει πως ΠΟΤΕ να μην τροποποιούνται...
Για την περιττή χρήση πινάκων νομίζω δε χρησιμοποιεί τέτοια λογική

Μπορούμε απλά να ακολουθούμε τις οδηγίες του τετραδίου μαθητή για την επίλυση των ασκήσεων και έτσι δε θα χρειάζεται καμία προτροπή

Σε ποια πράξη? Αν σου έδινα το διάγραμμα ροής που έφτιαξες και σου ζητούσα κωδικοποίηση, θα επέλεγες ΓΙΑ ή ΌΣΟ;

Σε άλλα προβλήματα χρησιμοποιείται η Για και σε άλλα η Όσο.

andreas_p

Και γιατί δε σαρώνεις τον πίνακα με  Όσο ;

Ανδρέας

gpapargi

Παράθεση από: lambrosbouk στις 31 Ιαν 2008, 09:00:32 ΜΜ
ο σκοπός μου είναι να "εξομοιώσω" μια έξυπνη σειριακή αναζήτηση του βιβλίου, αλλά με "για"!
με το διάγραμμα όλα φαίνονται να λειτουργούν καλά!

Ακριβώς αυτό το πρόβλημα με είχε απασχολήσει παλαιότερα. Ήθελα να βρω ένα τρόπο να κάνω το μαθητή που συλλαμβάνει εύκολα μια λύση με Για, να τη λύνει με πρθόδοξο τρόπο. Ήθελα να σκέφτεται "Για" και να γράφει "Όσο". Να που κατέληξα
https://alkisg.mysch.gr/steki/index.php?topic=1133.0

Δες το μήνυμά μου στο σημείο με τους κόκκινους χαρακτήρες.

Λάμπρος Μπουκουβάλας

Παναγιώτη Τσιωτάκη, με εντυπωσιάζει το ύφος σου... Πρόκειται για συνάδελφο, που ζήτησε από τους μαθητές του να φτιάξουν μια έξυπνη σειριακή, αλλά με για και όχι με όσο και χωρίς λογική μεταβλητή. Πώς αλλιώς θα το έλυνες? Κι εγώ την όσο θα χρησιμοποιούσα, διαθέτω την κατάλληλη εμπειρία. Και μόλις τους είπε τα παραπάνω, τους απαγόρευσε να αλλάξουν βίαια το μετρητή. Αργότερα, όταν είδε ότι δε λυνόταν, το πήρε πίσω, λέγοντας το κορυφαίο παραμύθι: "ναι, σε κάποιες γλώσσες προγραμματισμού υποστηρίζεται αυτό, αλλά όχι στη δική μας"!... Τί λες γι' αυτά?
Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

Βρακόπουλος Αθανάσιος Λ.

#8
οχι : το σωστό είναι:

για Ι από 1 μέχρι 10
    διάβασε α[Ι]
τέλος_επανάληψης

διαβασε κ

Θ<--0
για Ι από 1 μέχρι 10
    αν κ=α[Ι] τότε θ<--Ι
τέλος_επανάληψης

στη μεταβλητή Θ έχουμε την πληροφορία για το αν το κ υπάρχει στον πίνακα και σε ποιά θέση

Διαφορετικά με την Μέχρις_ότου

για Ι από 1 μέχρι 10
    διάβασε Α[Ι]
τέλος_επανάληψης

διαβασε κ

I<--0
Αρχή_Επανάληψης
     ι<--Ι+1
Μέχρις_Ότου Α[Ι]=Κ Ή Ι=10

Αν Α[Ι]=Κ τότε
   Γραψε "Βρέθηκε στη θέση ", Ι
Αλλιώς
   Γράψε ¨Δεν υπάρχει"
Τέλος_Αν




gpapargi

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

Κατέληξα στο ότι  μαθητής αναζητά απεγνωσμένα μια εντολή break της C. Έτσι γράφει τον κώδικα με τη Για πού τον συλλαμβάνει εύκολα και μετά θέλει να πει «Αν συμβεί αυτό σταμάτα το βρόχο»

Θέλωντας λοιπόν να δώσω στο μαθητή τη break πρότεινα την εξής δομή:

ι<-1
Όσο ι<= ν και …


  ι<- ι+1
Τέλος_επανάληψης

Η παραπάνω δομή λειτουργεί ουσιαστικά σα Για. Ο μαθητής μπορεί να τη γράφει και να ξέρει ότι θα σαρώσει όλο τον πίνακα. Με άλλα λόγια μπορεί να τη φαντάζεται σα Για.

Η break που θέλει ουσιαστικά υλοποιείται ως εξής:
Αν συνθήκη τότε
   Τερμάτισε<- αληθής
Τέλος_αν

Οπότε βάζοντάς τα όλα σε ένα έχουμε:


ι<-1
Όσο ι<= ν και …

  Αν συνθήκη τότε
     Τερμάτισε<- αληθής
  Τέλος_αν
 
  ι<- ι+1
Τέλος_επανάληψης

Εννοείται πως μένει η αρχικοποίηση της λογικής μεταβλητής και ενσωμάτωσή της στη συνθήκη.

Μετά από αυτό η σειριακή αναζήτηση γίνεται:

Βρέθηκε<-ψευδής
ι<-1
Όσο ι<= ν και
βρέθηκε =ψευδής επανάλαβε
  Αν α[ι]= στοιχείο τότε
     βρέθηκε<- αληθής
  Τέλος_αν
 
  ι<- ι+1
Τέλος_επανάληψης

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

Επίσης να πω ότι αποφεύγω να βάζω στοιχείο του πίνακα (δηλαδή το α[ι]) στη συνθήκη της εντολής επανάληψης γιατί μπορεί εύκολα ο μαθητής να βγει έξω από το όριο του πίνακα και να μην το καταλάβει.

evry


  Γιώργο ακριβώς το ίδιο κάνω και εγώ στην τάξη. Ειδικά στην αναζήτηση σε πίνακα αρχικά τη δείχνω με Για στη συνέχεια το μετατρέπω σε ΌΣΟ και μετά βάζω τη λογική μεταβλητή.
   Αυτό που λες με το Α[ι] ότι αν μπει στη συνθήκη της Όσο θα δημιουργήσει προβλήματα (και επειδή μου αρέσουν οι ασκήσεις που δημιουργούν προβλήματα >:D) το βάζω καμιά φορά σαν άσκηση στην τάξη όταν έχουμε κάνει την αναζήτηση και το παραθέτω παρακάτω για σχόλια και συζήτηση



Ζητήθηκε επό έναν μαθητή ο αλγόριθμος αναζήτησης σε μονοδιάστατο πίνακα Ν ακεραίων για τον αριθμό key και έδωσε την παρακάτω απάντηση

Ι <-- 1
ΌΣΟ Ι<=Ν ΚΑΙ Α[Ι]<>key ΕΠΑΝΑΛΑΒΕ
   Ι <-- Ι + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Αποτελεί η παραπάνω ακολουθία εντολών αλγόριθμο και αν όχι ποιο ή ποια κριτήρια παραβιάζει; Ξαναγράψτε το παραπάνω τμήμα έτσι ώστε να πληροί όλα τα αλγοριθμικά κριτήρια.
Υπόδειξη: Ένας τρόπος είναι να χρησιμοποιήσετε μια λογική μεταβλητή


What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr