ερώτηση σε δομή Επανάληψης 'Για'...

Ξεκίνησε από drac, 19 Ιαν 2010, 04:27:00 ΜΜ

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

drac

Είναι σωστό σε μια δομή επανάληψης 'Για' να χρησιμοποιήσουμε 'Με_βήμα 0' ?? Και ο μετρητής ν' αλλάζει μέσα στην επανάληψη;;
π.χ.:

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50 ΜΕ_ΒΗΜΑ 0
    ......
    εντολές
    ......
    i <- i + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

toufeki

...με βήμα 0 δε πάμε πουθενά πατριώτη. >:D

..άσε που δεν ικανοποιείται και το κριτήριο της περατότητας.....



drac

Συμφωνώ εγώ...απλά λέω γιατί αυτή η γλωσσομάθεια το δέχεται: http://spinet.gr/glossomatheia/download/

sstergou

Παράθεση
...με βήμα 0 δε πάμε πουθενά πατριώτη

Δείτε και αυτό (αν δεν το έχετε δει ήδη)
https://alkisg.mysch.gr/steki/index.php?topic=1797.15

toufeki

...διάβασα προσεκτικά τον διάλογο και ξέρετε τι πέρασε από το νου μου; (όχι ένα βλήμα να όπως έλεγε και ο Ψάλτης σε μια ταινία..) 
Ένας άπειρος διάλογος περί άπειρου που υπήρχε υπάρχει και θα υπάρχει.
Και καλά κάνει βέβαια και υπάρχει αλλιώς δεν θα υπήρχε επιστήμη .....

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

Παράθεση από: drac στις 19 Ιαν 2010, 04:27:00 ΜΜ
Είναι σωστό σε μια δομή επανάληψης 'Για' να χρησιμοποιήσουμε 'Με_βήμα 0' ?? Και ο μετρητής ν' αλλάζει μέσα στην επανάληψη;;
π.χ.:

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 50 ΜΕ_ΒΗΜΑ 0
    ......
    εντολές
    ......
    i <- i + 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Θα λέγαμε καλύτερα πως δεν είναι "πολιτικώς ορθό"!

toufeki

...α ρε Διπλωμάτη!

Γρήγορα στο Διπλωματικό Σώμα.
Χωρίς καθυστέρηση. >:D

andreas_p

Το

i <- i + 2


όπου  i  η μεταβλητή ελέγχου της  Για,  καλό είναι να αποφεύγεται.

Κάνε το ίδιο με Όσο !

drac

Δεν υπάρχει μια ξεκάθαρη άποψη για το 'με_βημα 0';;
ok...για την περίπτωση που δεν αλλάζει ο μετρητής μέσα στην επανάληψη είναι ξεκάθαρο ότι είναι λάθος, αφού δεν αλλάζει ο μετρητής....
Αλλά ρωτάω για την περίπτωση που αλλάζει ο μετρητής μέσα στην επανάληψη... τότε;;

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


gpapargi

O drac αναφέρεται σε τελείως διαφορετικό θέμα από αυτό που συζητούσαμε την άλλη φορά. Μιλάει για την αλλαγή του μετρητή μέσα στη "Για". ΑΥτό πρέπει να αποφεύγεται γιατί δίνει δυανάγνωστο κώδικα. Είναι θέμα σύμβασης μεταξύ προγραμματιστών για να καταλαβαίνει ο ένας τι κάνει ο άλλος (όπως πχ αποφεύφγουμε και τη goto). Δε σημαίνει ότι η αλλαγή του μετρητή δίνει λάθος αποτελέσματα ή ότι δεν υποστηρίζεται. Επειδή το μάθημα είναι εισαγωγικό και τα παιδιά τώρα παίρνουν τις πρώτες τους αρχές καλό είναι να τις παίρνουν σωστά γιατί διαφορετικά μπορεί να αποχτήσουν κακές συνήθειες που θα δυσκολευτούν να τις κόψουν.

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

Ας μου πει κάποιος πόσες φορές θα εκτελεστούν οι παρακάτω βρόχοι:

Βρόχος 1
Για ι από 1 μέχρι 10 με_βήμα 0
  εντολές
Τέλος επανάληψης

Βρόχος 2
Για ι από 10 μέχρι 1 με_βήμα 0
  εντολές
Τέλος επανάληψης

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

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

Παράθεση από: gpapargi στις 25 Ιαν 2010, 09:13:35 ΠΜ
...

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

Ας μου πει κάποιος πόσες φορές θα εκτελεστούν οι παρακάτω βρόχοι:

Βρόχος 1
Για ι από 1 μέχρι 10 με_βήμα 0
  εντολές
Τέλος επανάληψης

Βρόχος 2
Για ι από 10 μέχρι 1 με_βήμα 0
  εντολές
Τέλος επανάληψης

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

Παρόλο που ίσως δεν έχει και μεγάλη αξία για τους μαθητές να επιμένουμε πάνω σε αυτό το σημείο (για να μην έχουμε και βαθμολογικά ατυχήματα!), όμως κι εγώ από τη μεριά μου ποτέ δεν δέχτηκα κάτι τέτοιο. Είχα καταλήξει σε αυτό: https://alkisg.mysch.gr/steki/index.php?topic=1797.msg13024#msg13024 (Εικασία 3!)

Δηλαδή στο 1ο παράδειγμά σου θα έχουμε άπειρες επαναλήψεις και στο 2ο θα έχουμε 0 επαναλήψεις... !!!

gpapargi

Αυτό σημαίνει τα εξής:

όταν το βήμα είναι θετικό  η μετατροπή είναι:
ι<-αρχική_τιμή
Όσο ι<=τελική_τιμή επανάλαβε  ! προσοχή στον συγκριτικό τελεστή
   εντολές
   ι<- ι+β
   Τέλος_επανάληψης

όταν το βήμα είναι αρνητικό η μετατροπή είναι:
ι<-αρχική_τιμή
Όσο ι>=τελική_τιμή επανάλαβε
   εντολές
   ι<- ι+β ! το β είναι αρνητικό και τελικά έχουμε αφαίρεση
Τέλος_επανάληψης

Μέχρι εδώ όλοι συμφωνούμε. Το κρίσιμο είναι το εξής: Για να δώσει άπειρες επαναλήψεις ο βρόχος 1 και καμία ο βρόχος 2 σημαίνει ότι η μετατροπή τους σε Όσο γίνεται ως εξής:

Βρόχος 1
ι<-1
Όσο ι<=10 επανάλαβε
   εντολές
   ι<-ι+0
Τέλος_επανάληψης

Βρόχος 2
ι<-10
Όσο ι<=1 επανάλαβε
   εντολές
   ι<-ι+0
Τέλος_επανάληψης

Εδώ έχουμε μια περίπτωση που η ΓΙΑ με βήμα 0 δεν δίνει άπειρες επαναλήψεις.

Όπως είναι αναμενόμενο, εφόσον ο τελεστής προκύπτει από το πρόσημο του βήματος και όχι από το αν η αρχική τιμή είναι μεγαλύτερη ή μικρότερη από την τελική τιμή, χρησιμοποιήσαμε και στις 2 περιπτώσεις το βήματος 0 τον ίδιο συγκριτικό τελεστή που είναι ο "<="

Η αυθαιρεσία είναι η εξής: Με ποιο δικαίωμα βάζουμε στο βήμα 0 τον τελεστή "<=" που μπαίνει στο θετικό βήμα και όχι τον τελεστή ">=" που βάζουμε στο αρνητικό; Το 0 δεν είναι ούτε θετικός ούτε αρνητικός και δείχνουμε κάποιου είδους προτίμηση στους θετικούς. Δεν αντιμετωπίζουμε θετικούς και αρνητικούς με συμμετρικό τρόπο

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

#13
Παράθεση από: gpapargi στις 25 Ιαν 2010, 11:47:54 ΠΜ
Η αυθαιρεσία είναι η εξής: Με ποιο δικαίωμα βάζουμε στο βήμα 0 τον τελεστή "<=" που μπαίνει στο θετικό βήμα και όχι τον τελεστή ">=" που βάζουμε στο αρνητικό; Το 0 δεν είναι ούτε θετικός ούτε αρνητικός και δείχνουμε κάποιου είδους προτίμηση στους θετικούς. Δεν αντιμετωπίζουμε θετικούς και αρνητικούς με συμμετρικό τρόπο[/b]

Αν δείχναμε προτίμηση στους αρνητικούς πάλι θα είχαμε το ίδιο πρόβλημα αλλά από την ανάποδη!

Αλλά έτσι κι αλλιώς πάντα προτιμάμε τους θετικούς για τον λόγο ακριβώς ότι είναι θετικοί !!!  ;) Δεν το βλέπω ως αδικία αλλά ως μία προτίμηση... Απ' την άλλη ... (αν και το ανακάλυψα εκ των υστέρων!) ... δεν είναι και τόσο αυθαίρετο... :

Quiz: Από ποιας γλώσσας το help έχω αντιγράψει το εξής: (?)

Value*                        Loop executes if
Positive or 0              counter <= end
Negative                    counter >= end


* To Value αναφέρεται στο βήμα της Για ... και το end στο μέχρι...

evry


    Δεν είναι τόσο απλό. Το συγκεκριμένο τέχνασμα αντιβαίνει στην κοινή λογική. Αν ρωτήσεις μαθητές ποσές φορές θα εκτελεστεί η παρακάτω επανάληψη

Για ι από 1 μέχρι 3 με βήμα -1

θα σου πουν άπειρες, αφού ξεκινάμε από το 1 και μειώνουμε μέχρι να φτάσουμε στο 3. Αυτός ο τρόπος που έχει επιλέξει το βιβλίο (καθηγητή) αντιβαίνει όχι μόνο στην κοινή λογική αλλά και στην διδακτική πρακτική
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr