Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: vasiko στις 18 Δεκ 2005, 07:26:03 ΜΜ

Τίτλος: Εμφωλευμένη επανάληψη
Αποστολή από: vasiko στις 18 Δεκ 2005, 07:26:03 ΜΜ
Στη σελίδα 180 του βιβλίου αναφέρονται  τρεις κανόνες οι οποίοι πρέπει να ακολουθούνται στις εμφωλευμένες επαναλήψεις.
Μπορεί κάποιος να μου εξηγήσει τι ακριβώς εννοεί ο δεύτερος κανόνας;
"Η είσοδος σε κάθε βρόχο  υποχρεωτικά  γίνεται από την αρχή του."
 ???
Ευχαριστώ.
Τίτλος: Re: Εμφωλευμένη επανάληψη
Αποστολή από: Sergio στις 18 Δεκ 2005, 11:01:39 ΜΜ
Καλή ερώτηση!!

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

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

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

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

Οι υπόλοιποι τι νομίζετε;
Τίτλος: Re: Εμφωλευμένη επανάληψη
Αποστολή από: EleniK στις 19 Δεκ 2005, 12:17:12 ΠΜ
Εγώ έχω την εντύπωση ότι εξηγεί στα παιδιά πώς δουλεύουν οι εμφωλευμένες επαναλήψεις δηλ. αν έχεις

Για 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 ότι απλά αποκλείει τη χρήση της εντολής.

Τίτλος: Re: Εμφωλευμένη επανάληψη
Αποστολή από: alkisg στις 19 Δεκ 2005, 09:19:15 ΠΜ
[glossa] ι = 8
GOTO ΜέσαΣτοΒρόχο
Γράψε "Αυτή η εντολή δεν εκτελείται ποτέ"

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

Ο παραπάνω κώδικας θα γράψει τους αριθμούς 8, 9, 10. Άμα το GOTO βρισκόταν "3 σελίδες κώδικα" παρακάτω άντε να καταλάβεις τι γίνεται!
Τίτλος: Re: Εμφωλευμένη επανάληψη
Αποστολή από: gpapargi στις 19 Δεκ 2005, 10:41:03 ΠΜ
Αν καταλαβαίνω καλά το βιβλίο μάλλον εννοεί ότι ο μετρητής κάθε βρόχου ξεκινάει από την αρχή. Δε βγάζω και πολύ νόημα αλλά δεν έχει σημασία. Αυτό που έχει σημασία είναι το να καταλαβαίνεις πως λειτουργούν οι φωλιασμένοι βρόχοι.

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

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

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

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

Στέλιος