Εμφωλευμένη επανάληψη

Ξεκίνησε από vasiko, 18 Δεκ 2005, 07:26:03 ΜΜ

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

vasiko

Στη σελίδα 180 του βιβλίου αναφέρονται  τρεις κανόνες οι οποίοι πρέπει να ακολουθούνται στις εμφωλευμένες επαναλήψεις.
Μπορεί κάποιος να μου εξηγήσει τι ακριβώς εννοεί ο δεύτερος κανόνας;
"Η είσοδος σε κάθε βρόχο  υποχρεωτικά  γίνεται από την αρχή του."
 ???
Ευχαριστώ.

Sergio

Καλή ερώτηση!!

Να υποθέσω ότι θέλει να αποκλείσει την είσοδο σε βρόχο με χρήση της εντολής goto (σε κάποιο σημείο εντός του βρόχου) ως κακή προγραμματιστική τεχνική (που οδηγεί σε αδόμητα προγράμματα);;

Αν και δεν ορίζεται πουθενά η εντολή goto στη ΓΛΩΣΣΑ, υπάρχουν κάποιες αναφορές σε "ασκήσεις" του κεφαλαίου 6 (π.χ. Τετράδιο Μαθητή, σελ 58 - 59) σε συνδυασμό με δομή επιλογής.  

Επίσης, κάποτε το μάθημα παρείχε ελευθερία χρήσης γλώσσας αφού επέτρεπε εναλλακτικά και τη χρήση Basic & Pascal, δηλαδή γλωσσών που υποστηρίζουν την goto (παρά το σκληρό "...should be abolished from all high level languages..." του Edgard Dijkstra).

Φαντάζομαι λοιπόν ότι κάτι τέτοιο πρέπει να εννοεί.

Οι υπόλοιποι τι νομίζετε;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

EleniK

Εγώ έχω την εντύπωση ότι εξηγεί στα παιδιά πώς δουλεύουν οι εμφωλευμένες επαναλήψεις δηλ. αν έχεις

Για i από 1 μέχρι 10
Για j από 1 μέχρι 10

ότι για i=1, θα πραγματοποιηθούν οι 10 επαναλήψεις του j (j=1, j=2....j=10) .
Μετά, αφού αλλάξει το i σε 2, έχουμε ξανά είσοδο στον εσωτερικό βρόγχο οπότε επειδή  'η είσοδος στον βρόγχο θα πραγματοποιηθεί από την αρχή του' δηλ. θα γίνουν ξανά 10 επαναλήψεις  (j=1, j=2....j=10) κ.ο.κ.

Πάντως σε απλο επίπεδο απλά περιγράφει ποως αλλάζουν οι τιμές των μεταβλητών  σε δυο εμφωλευμένες επαναλήψεις. Βέβαια σε πιο 'τραβηγμένο' επίπεδο νομίζω όπως είπε και ο Sergio ότι απλά αποκλείει τη χρήση της εντολής.

Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

alkisg

#3
[glossa] ι = 8
GOTO ΜέσαΣτοΒρόχο
Γράψε "Αυτή η εντολή δεν εκτελείται ποτέ"

Για ι από 1 μέχρι 10
ΜέσαΣτοΒρόχο:
  Γράψε ι
τέλος_επανάληψης[/glossa]

Ο παραπάνω κώδικας θα γράψει τους αριθμούς 8, 9, 10. Άμα το GOTO βρισκόταν "3 σελίδες κώδικα" παρακάτω άντε να καταλάβεις τι γίνεται!

gpapargi

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

Για το θέμα της goto οι πατριάρχες της C,  Kernighan και Ritchie, λένε (όπως και όλος ο κόσμος) ότι πρέπει να αποφεύγεται και ότι σπάνια είναι χρήσιμη. Αναφέρουν μια τέτοια περίπτωση ωστόσο. Αν έχεις πολλούς φωλιασμένους βρόχους και ξαφνικά συμβεί μια συνθήκη που θέλεις να σε βγάλει έξω, είναι χρήσιμη η goto. Συστήνουν γενικά να αποφεύγεται αν και ξεκαθαρίζουν ότι δεν είναι δογματικοί.

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

sgsfak

ΠαράθεσηΓια το θέμα της goto οι πατριάρχες της C,  Kernighan και Ritchie, λένε (όπως και όλος ο κόσμος) ότι πρέπει να αποφεύγεται και ότι σπάνια είναι χρήσιμη. Αναφέρουν μια τέτοια περίπτωση ωστόσο. Αν έχεις πολλούς φωλιασμένους βρόχους και ξαφνικά συμβεί μια συνθήκη που θέλεις να σε βγάλει έξω, είναι χρήσιμη η goto. Συστήνουν γενικά να αποφεύγεται αν και ξεκαθαρίζουν ότι δεν είναι δογματικοί.
Εξάλλου σχεδόν όλες οι ευρέως χρησιμοποιούμενες γλώσσες προγραμματισμού (π.χ. C/C++, Java, ...) χρησιμοποιούν "παραλλαγές" της goto -- αναφέρομαι στις return, break, continue -- και εκ πείρας μπορώ να σας πω ότι υπάρχουν περιπτώσεις που είναι αρκετά χρήσιμες.

Πάντως θυμήθηκα έναν μαθητή ο οποίος όταν του είπα ότι για την αναζήτηση ενός στοιχείου μέσα σε έναν πίνακα είναι προτιμότερη η ΟΣΟ από τη ΓΙΑ (επειδή με την ΓΙΑ αναγκαστικά θα διατρέξουμε όλο τον πίνακα) μου είπε "Και γιατί δεν αλλάζουμε την τιμή του μετρητή της ΓΙΑ μέσα στην επανάληψη έτσι ώστε να πάρει την τελική τιμή και να τελειώσουμε;"!! Δηλ. γιατί δεν κάνουμε ένα break/goto end;!!!!

Αν εξαιρέσουμε όμως μερικούς "ψαγμένους" μαθητές οι περισσότεροι θα μπερδεύονταν αν τους μαθαίναμε και τη goto και τα πράγματα θα ήταν δύσκολα στις εξετάσεις σε θέματα που σου δίνουν αλγόριθμο με gotos και ζητάνε π.χ. τι θα εμφανίσει ο αλγόριθμος...

Στέλιος