Η παρακάτω άσκηση στην πλήρη της ανάπτυξη παρουσιάζει ενδιαφέρον, αφού περιλαμβάνει ερωτήματα που ξεφεύγουν από τα τυποποιημένα.
Στον ετήσιο διαγωνισμό μουσικής δωματίου που γίνεται κάθε Αύγουστο στη Βιέννη (σιγά μη γίνεται... απ' το μυαλό μου το' βγαλα) έχουν μαζευτεί 22 συμμετοχές στην κατηγορία των κουαρτέτων (μικρές ορχήστρες που περιλαμβάνουν τέσσερα όργανα). Τα ονόματα καταχωρίζονται με τη σειρά σε διαδοχικές θέσεις μιας ειδικής φόρμας, πρώτα τα ονόματα των μουσικών της πρώτης ορχήστρας, μετά εκείνων της δεύτερης κ.ο.κ. Τα ονόματα των μουσικών κάθε ορχήστρας καταχωρίζονται επίσης με τη σειρά, ανάλογα με το όργανο που παίζει ο καθένας, ως εξής: Βιολοντσέλο, Βιόλα, A' Βιολί, Β' Βιολί.
Να κατασκευάστε πρόγραμμα που να ζητάει τα ονόματα των 88 μουσικών που συμμετέχουν, με τη σειρά που διαγωνίζονται, και να τα καταχωρίζει σε πίνακα Όν. Για την εισαγωγή των ονομάτων, το πρόγραμμα να εμφανίζει μήνυμα στο οποίο να αναφέρει τον αριθμό της ορχήστρας και την περιγραφή του οργάνου που αφορά η καταχώριση, για παράδειγμα: Ποιος μουσικός παίζει βιολοντσέλο στην 4η ορχήστρα; Η εφαρμογή δεν θα πρέπει να δέχεται διπλοεγγραφές (για να γίνει δεκτό το όνομα που δίνεται από το χρήστη, θα πρέπει να ελέγχεται ότι δεν έχει καταχωρηθεί σε προηγούμενη θέση του πίνακα)
Στη συνέχεια το πρόγραμμα:
α. θα εμφανίζει τα ονόματα των 22 μουσικών που παίζουν τη βιόλα, αριθμημένους με βάση την ορχήστρα στην οποία συμετέχουν (από το 1 μέχρι το 22),
β. θα ζητάει ένα όνομα και θα εμφανίζει το όργανο που παίζει ο συγκεκριμένος μουσικός καθώς και τα ονόματα των υπόλοιπων του κουαρτέτου,
γ. θα ζητάει το όνομα ενός μουσικού που παίζει το Α' βιολί και θα εμφανίζει σε ποια ορχήστρα συμμετέχει αναζητώντας τον ανάμεσα στα ονόματα των μουσικών που παίζουν το συγκεκριμένο όργανο
Καλημέρα Σέργιο
Η άσκηση αυτή μπορεί να γίνει εύκολη ή δύσκολη ανάλογα με τις δομές που θα χρησιμοποιήσεις για να αποθηκεύσεις τα δεδομένα σου. Αν χρησιμοποιήσεις πίνακα Όνομα[22,4] είναι εύκολη. Αν χρησιμοποιήσεις πίνακα Όνομα[88] εισάγεις τεχνητή δυσκολία. Έτσι κι αλλιώς στη μνήμη και οι πίνακες 2 διαστάσεων κάθονται... ας πούμε... «μονοδιάστατα». Οι 2 διαστάσεις είναι κόλπο δικό μας για να βλέπουμε πιο εύκολα τα πράγματα.
Το συγκεκριμένο παράδειγμα σηκώνει μια ωραία συζήτηση για τις δομές δεδομένων και δείχνει πόσο σημαντικό είναι να «δεις» την κατάλληλη δομή που θα φιλοξενήσει τα data σου. Μέχρι στιγμής τέτοια θέματα έχουν απασχολήσει την ομάδα διαγωνισμάτων. Πχ προκύπτει ένα τέτοιο θέμα με τους αραιούς πίνακες στο τετράδιο μαθητή. Γενικά θεωρώ ότι είναι εντός ύλης το να ζητάς και την κατάλληλη επιλογή των δομών αλλά δεν έχω δει να το ζητάμε. Και εγώ δεν τρελαίνομαι να το ζητήσω (αν και είναι σημαντικό) λόγω του ότι δε ζητάμε το πιο σημαντικό θέμα της καλής απόδοσης του αλγορίθμου.
Πολύ σωστά Γιώργο !!
Εγώ τη δίνω στους μαθητές μου όταν ασχολούμαστε στους μονοδιάστατους.. Γι αυτό την έβαλα και δω στον αντίστοιχο χώρο.. Τη λύνουν ΠΡΙΝ μάθουν για δισδιάστατους. Και στη συνέχεια, ακριβώς όπως σωστά παρατήρησες, τους την ξαναδίνω όταν έχουμε κάνει δισδιάστατους.. οπότε και ανακαλύπτουν τη σπουδαιότητα της επιλογής της σωστής δομής !!
Εδώ, όποιος θελήσει να ασχοληθεί, ας θεωρήσει ως περιορισμό πως ΠΡΕΠΕΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΘΟΥΝ ΜΟΝΟ ΠΙΝΑΚΕΣ ΜΙΑΣ ΔΙΑΣΤΑΣΗΣ. Εννοείται πως όταν τη δίνω δεν τίθεται θέμα διευκρίνισης, αφού δεν ξέρουν ακόμα για περισσότερες, της μίας, διαστάσεις.
Επειδή δεν .. βλέπω πολύ κινητικότητα, παραθέτω μια λύση..
ΠΡΟΓΡΑΜΜΑ Κουαρτέτα
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: Ον[88], Περ[4]
ΑΚΕΡΑΙΕΣ: ι, κ, λ, χ
ΛΟΓΙΚΕΣ: Υπάρχει
ΑΡΧΗ
Περ[1] <- 'Βιολοντσέλο'
Περ[2] <- 'Βιόλα'
Περ[3] <- 'Α Βιολί'
Περ[4] <- 'Β Βιολί'
χ <- 1 ! Μουσικός
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 22 ! Ορχήστρα
ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4 ! Όργανο
ΓΡΑΨΕ 'Ποιός παίζει ', Περ[κ], ' στην ', ι, 'η ορχήστρα;'
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΔΙΑΒΑΣΕ Ον[χ]
λ <- 1
Υπάρχει <- ΨΕΥΔΗΣ
ΟΣΟ λ <= χ-1 ΚΑΙ Υπάρχει = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
ΑΝ Ον[λ] = Ον[χ] ΤΟΤΕ
Υπάρχει <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
λ <- λ + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΕΧΡΙΣ_ΟΤΟΥ Υπάρχει = ΨΕΥΔΗΣ
χ <- χ + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Όμως, θα μπορούσε να γίνει με ΜΙΑ μόνο εντολή ΓΙΑ ;;
Θίγεις το ζήτημα της απεικόνισης μονοδιάστατου σε δισδιάστατο και αντίστροφα. Μια σχετική άσκηση που δίνω σε πολύ δυνατούς μαθητές στη δομή ακολουθίας (δεν υπάρχει η Αν ακόμα) είναι η εξής:
Έχεις ένα θέατρο με 10 σειρές και 4 στήλες καθισμάτων. Ο κάθε θεατής κρατεί έναν αύξοντα αριθμό από το 1 μέχρι το 40 και πρέπει με βάση αυτό να καθίσεις σε κάποια θέση (ο 1 κάθεται πρώτη γραμμή πρώτη στήλη, 2 κάθεται πρώτη γραμμή δεύτερη στήλη κλπ). Να φτιαχτεί αλγόριθμος που θα δέχεται τον αύξοντα αριθμό του θεατή και θα δίνει τη γραμμή και τη στήλη που θα κάθεται.
Οι βασικές ιδέες (div-mod κλπ) είναι οι ίδιες. Μια άσκηση που επίσης ανακατεύει την ιδία κουζίνα (πάλι για δυνατούς) είναι η ταξινόμηση πινάκα 2 διαστάσεων χωρίς να μεταφέρεις τα στοιχειά σε μονοδιάστατο.
Επίσης να πω κάτι σχετικό. Όλοι οι εμφωλευμένοι βρόχοι λύνονται και με μονό βρόχο και τις κατάλληλες εντολές επιλογής. Πχ μπορείς να σαρώσεις πινάκα 2 διαστάσεων η να κάνεις φυσαλίδα με μονό βρόχο
Η αλήθεια πάντως είναι ότι ενστικτωδώς αποθαρρύνομαι όταν πάω να λύσω κάτι με τον δύσκολο τρόπο. Δεν ξέρω γιατί μου συμβαίνει αυτό... ίσως τεμπελιά. Μου συμβαίνει όμως. Αν δω τον εύκολο δρόμο δε μου κάνει κάρδια να πάω από τον άλλο :)
Αυτό που σκέφτηκα κάνοντας χρήση μόνο μιας εντολής Για και αγνοώντας τον έλεγχο (που έχει ήδη υλοποιήσει ο Sergio) είναι το εξής:
Οργ[1] <- "Βιολοντσέλο"
Οργ[2] <- "Βιόλα"
Οργ[3] <- "Α' Βιολί"
Οργ[4] <- "Β' Βιολί"
Για i από 1 μέχρι 88
κ <- i mod 4
Αν κ = 0 τότε κ <- 4
Εμφάνισε "Ποιος μουσικός παίζει ", Οργ[κ], " στην ", (i - 1) div 4 + 1, "η ορχήστρα;"
Διάβασε ΟΝ[ι]
Τέλος_επανάληψης
Πολύ σωστά.. Σύντομη λύση και σωστή.. !
Και πολύ καλή περίπτωση εφαρμογής της ακέραιας διαίρεσης όπως ανέφερε και ο Γιώργος.
Το πρόβλημα στη λύση με μία ΓΙΑ είναι πως η μεταβλητή που ελέγχει τη ΓΙΑ, δεν αντιστοιχεί ούτε σε ορχήστρα ούτε σε όργανο, αλλά σε μουσικό. Αυτό την κάνει μεν κατάλληλη για το Διάβασε Ον[ι] αλλά όχι για το μήνυμα. Αντίθετα, στη λύση με τα δύο ΓΙΑ, οι μεταβλητές τους αντιστοιχούν σε ορχήστρα και όργανο, οπότε δεν υπάρχει μεταβλητή για τον μουσικό. Αλγεβρικά, μπορούν να υπολογιστούν οι δείκτες που λείπουν είτε ως (ορχ-1)*4+οργ για τον μουσικό (στην περίπτωση των εμφωλευμένων ΓΙΑ) είτε με τον τρόπο που δείχνει ο Βασίλης με χρήση div και mod (στην περίπτωση της μίας ΓΙΑ).
Για την περίπτωση της μίας ΓΙΑ, από τους μαθητές παίρνω συνήθως λύση της μορφής:
Αν ι mod 4 = 0 τότε
ορχ <- ι div 4
οργ <- 4
αλλιώς
ορχ <- ι div 4 + 1
οργ <- ι mod 4
τελος_αν
Σπάνια παίρνω τη λύση του Βασίλη αφού, αν και πολύ πιο σύντομη, είναι συνήθως δύσκολότερη να τη σκεφτεί μαθητής.
Εναλλακτικά επειδή οι τελεστές div και mod, αν και ιδαίτερα χρήσιμοι σε προβλήματα αυτής της μορφής όπου τα δεδομένα είναι οργανωμένα σε ...-άδες (3άδες, 4άδες, 5άδες κ.ο.κ.), αποδεικνύονται λιγότερο χρήσιμοι σε προβλήματα με χαλαρότερη οργάνωση των δεδομένων, χρησιμοποιώ αυτά τα προβλήματα για να τους εξοικειώσω και με μία άλλη τεχνική που είναι γενικότερα χρήσιμη και λιγότερο "μαθηματική", την τεχνική της διαχείρισης πολλαπλών δεικτών. Η τεχνική αυτή βασίζεται σε μετρητές και, στην περίπτωση της άσκησης που συζητάμε, μπορεί να μας οδηγήσει σε λύση της μορφής:
ορχ <- 1
οργ <- 1
Για ι από 1 μέχρι 88
Εμφάνισε "Ποιος μουσικός παίζει ", Περ[οργ], " στην ", ορχ, "η ορχήστρα;"
Διάβασε ΟΝ[ι]
Αν οργ < 4 τότε
οργ <- οργ + 1
αλλιώς
οργ <- 1
ορχ <- ορχ + 1
τέλος_αν
Τέλος_επανάληψης
Η διαχείριση πολλαπλών δεικτών ευνοεί την ανάπτυξη ενός τρόπου σκέψης που μπορεί να φανεί χρήσιμος σε ποικιλία προβλημάτων, όταν η μεταβλητή που ελέγχει την επανάληψη ΔΕΝ αντιπροσωπεύει την "οντότητα" που χρειαζόμαστε. Σε τέτοιες περιπτώσεις, βασιζόμενοι σε μετρητές, μπορούμε (συχνά) να δημιουργήσουμε αλγοριθμικά και να "διαχειριστούμε" τους δείκτες που χρειαζόμαστε. Ουσιαστικά πρόκειται για την ίδια τεχνική που χρησιμοποιήθηκε και στην πρώτη λύση που δόθηκε παραπάνω, με τα δύο εμφωλευμένα ΓΙΑ. Σε όσους λοιπόν επιλέγουν να "κατασκευάσουν" το μουσικό με έκφραση της μορφής: (ι-1) * 4 + κ, αντιπαραβάλω την τεχνική του μετρητή χ:
χ <- 1 ! Μουσικός
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 22 ! Ορχήστρα
ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4 ! Όργανο
ΓΡΑΨΕ 'Ποιός παίζει ', Περ[κ], ' στην ', ι, 'η ορχήστρα;'
ΔΙΑΒΑΣΕ Ον[χ]
χ <- χ + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Η απλότητα αυτής της λύσης συνήθως πείθει για τα πλεονεκτήματά της..
Ήδη πρόσθεσα στην εκφώνησh 3 από τα ερωτήματα που περιλαμβάνει η άσκηση. Η τεχνική της διαχείρισης πολλαπλών δεικτών, που περιγράφηκε προηγούμενα, μπορεί να εφαρμοστεί λίγο - πολύ και σε αυτά..
Παράθεση από: Sergio στις 27 Φεβ 2011, 04:59:25 ΠΜ
ορχ <- 1
οργ <- 1
Για ι από 1 μέχρι 88
Εμφάνισε "Ποιος μουσικός παίζει ", Περ[οργ], " στην ", ορχ, "η ορχήστρα;"
Διάβασε ΟΝ[ι]
Αν οργ < 4 τότε
οργ <- οργ + 1
αλλιώς
οργ <- 1
ορχ <- ορχ + 1
τέλος_αν
Τέλος_επανάληψης
Η διαχείριση πολλαπλών δεικτών ευνοεί την ανάπτυξη ενός τρόπου σκέψης που μπορεί να φανεί χρήσιμος σε ποικιλία προβλημάτων, όταν η μεταβλητή που ελέγχει την επανάληψη ΔΕΝ αντιπροσωπεύει την "οντότητα" που χρειαζόμαστε. Σε τέτοιες περιπτώσεις, βασιζόμενοι σε μετρητές, μπορούμε (συχνά) να δημιουργήσουμε αλγοριθμικά και να "διαχειριστούμε" τους δείκτες που χρειαζόμαστε. Ουσιαστικά πρόκειται για την ίδια τεχνική που χρησιμοποιήθηκε και στην πρώτη λύση που δόθηκε παραπάνω, με τα δύο εμφωλευμένα ΓΙΑ. Σε όσους λοιπόν επιλέγουν να "κατασκευάσουν" το μουσικό με έκφραση της μορφής: (ι-1) * 4 + κ, αντιπαραβάλω την τεχνική του μετρητή χ:
Αγαπημένη και πολύ χρήσιμη ιδέα...Βοηθάει όντως τα παιδιά να αποκτήσουν και αυτό τον τρόπο σκέψης,τον οποίο μπορούν να χρησιμοποιήσουν πολύ συχνά...Νομίζω πως κάνει τα παιδιά πολύ ισχυρότερα προγραμματιστικά...
Παράθεση από: gpapargi στις 25 Φεβ 2011, 07:04:43 ΠΜ
Η αλήθεια πάντως είναι ότι ενστικτωδώς αποθαρρύνομαι όταν πάω να λύσω κάτι με τον δύσκολο τρόπο. Δεν ξέρω γιατί μου συμβαίνει αυτό... ίσως τεμπελιά. Μου συμβαίνει όμως. Αν δω τον εύκολο δρόμο δε μου κάνει κάρδια να πάω από τον άλλο :)
Κάθε άλλο παρά τεμπελιά.. Η επιλογή της καλύτερης λύσης είναι το βασικό ζητούμενο και το "τελευταίο οχυρό" στη μαθησιακή διαδικασία, οπότε είναι ασφαλώς σκόπιμο να προτρέπουμε και τους μαθητές να αναζητούν μια όσο το δυνατόν πιο εύκολη, απλή και κατανοητή λύση.. Αυτό όμως προϋποθέτει ανεπτυγμένη κριτική ικανότητα, μεθοδικότητα και πάνω απ' όλα εμπειρία. Μέχρι να την αποκτήσουν, είναι συχνά σκόπιμο να εξερευνούν διαφορετικές λύσεις προκειμένου να
εξοικειώνονται με διάφορα εργαλεία και τεχνικές. Στη συνέχεια να καλούνται να
συγκρίνουν ώστε να διαπιστώνουν πότε εξυπηρετεί η καθεμιά και τέλος να αποκτήσουν την ικανότητα να
αναλύουν μεθοδικά τα προβλήματα ώστε
αναγνωρίζουν καταστάσεις που προσφέρονται για εφαρμογή της μίας ή της άλλης τεχνικής και να
επιλέγουν την κατάλληλη. Αυτό μπορεί να λειτουργήσει και ανασταλτικά στην εδραίωση τού αντανακλαστικού μηχανισμού της στείρας απομνημόνευσης που εύστοχα είχες σχολιάσει παλιότερα με τη φράση, αν θυμάμαι καλά, "..να σκέφτονται -πώς θα τη λύσω- και όχι -τι μου θυμίζει-"
Συχνά εξυπηρετεί η ενασχόληση με τέτοιες "προπονητικές" ασκήσεις μέσα από τις οποίες μπορούν να παρουσιαστούν εναλλακτικοί τρόποι αντιμετώπισης καταστάσεων. Γι αυτό και τη συγκεκριμένη την χαρακτήρισα από τον τίτλο της ως 'Άσκηση για .. προπόνηση".. Τυχαίο ;)
Προτείνω μια
απάντηση για το ερώτημα α (μήπως ζεσταθεί το θέμα)
Παράθεση από: Sergio στις 24 Φεβ 2011, 01:26:21 ΠΜ
α. θα εμφανίζει τα ονόματα των 22 μουσικών που παίζουν τη βιόλα, αριθμημένους με βάση την ορχήστρα στην οποία συμετέχουν (από το 1 μέχρι το 22),
Αφού οι ζητούμενοι μουσικοί βρίσκονται στη δεύτερη θέση της κάθε ορχήστρας, τα ονόματά τους θα βρίσκονται στον πίνακα στις θέσεις: 2, 6, 10, 14 .. Συνεπώς, ξεκινάνε από τη θέση 2 και "προχωρούν" με (σταθερή) απόσταση 4 το ένα από το άλλο (ισαπέχουν). Η εντολή επανάληψης ΓΙΑ, είναι η καταλληλότερη για τη δημιουργία τιμών που ισαπεχουν, επομένως, το συγκεκριμένο ερώτημα απαντιέται εύκολα με εντολή ΓΙΑ που θα έχει τιμή εκκίνησης το 2 και βήμα 4.
Η "
δυσκολία" του ερωτήματος έγκειται στην "απαίτηση",
να εμφανιστούν τα ονόματα αριθμημένα από το 1 μέχρι το 22 (
αριθμός ορχήστρας). Σε αυτό το σημείο, μπορούμε να παρατηρήσουμε πως η τιμή της μεταβλητής που θα ελέγχει την επανάληψη, ΔΕΝ εξυπηρετεί για την αρίθμηση των αποτελεσμάτων, αφού ΔΕΝ αντιπροσωπεύει
ορχήστρα αλλά
μουσικό.. Συνεπώς, ο αλγόριθμος θα πρέπει να φροντίζει για τον
"υπολογισμό" του αριθμού της ορχήστρας.. Αυτό μπορεί να γίνει με δύο τρόπους:
α. με τη βοήθεια της
ακέραιας διαίρεσηςΓια ι από 2 μέχρι 88 με_βήμα 4
ορχ <- ι div 4 + 1 γράψε ορχ, ". ", ον[ι]
Τέλος_επανάληψης
β. με τη τεχνική της
δημιουργίας και διαχείρισης του κατάλληλου δείκτηορχ <- 1Για ι από 2 μέχρι 88 με_βήμα 4
γράψε ορχ, ". ", ον[ι]
ορχ <- ορχ + 1
Τέλος_επανάληψης
Η
πρώτη λύση, είναι σχετικά πιό σύντομη στην υλοποίηση αλλά πιό
μαθηματικήΗ
δεύτερη, είναι πάλι αρκετά σύντομη στην υλοποίηση, λιγότερο
μαθηματική, αλλά απαιτεί ευχέρεια του μαθητή στη
διαχείριση δεικτών
Παράθεση από: sdoukakis στις 08 Μαρ 2011, 06:05:33 ΜΜ
Ωστόσο αν κατάλαβα καλά(??) αυτό
ορχ <- 1
Για ι από 2 μέχρι 88 με_βήμα 4
γράψε ορχ, ". ", ον[ι]
ορχ <- ορχ + 1
Τέλος_επανάληψης
κατά την γνώμη μου μπορει να γίνει και ως:
ορχ <- 0
Για ι από 2 μέχρι 88 με_βήμα 4
ορχ <- ορχ + 1
γράψε ορχ, ". ", ον[ι]
Τέλος_επανάληψης
αφού έτσι ο αριθμός της ορχήστρας δεν θα ξεπεράσει τον πραγματικό αριθμό της ορχήστρας. Δηλαδή μία εκτύπωση του ορχ έξω από την επανάληψη θα έδειχνε ότι υπάρχει μία επιπλέον ορχήστρα; Πιθανώς στο παράδειγμα να μην δίνει (δεν το έχω ελέγξει) αλλά γενικά θα αύξανε έναν δείκτη κατά 1 χωρίς λόγο... και στην περίπτωση που ο δείκτης είναι χρήσιμος θα έπρεπε να αφαιρέσουμε 1.
Ασφαλώς.. οι δύο κώδικες είναι ισοδύναμοι. Βέβαια, στο πλαίσιο που τίθεται το συγκεκριμένο κομμάτι, δεν υπάρχει καμία έννοια στην προσπέλαση (για ανάγνωση) της τιμής της μεταβλητής ορχ μετά το τέλος του βρόχου.. δε μπορώ να πω βέβαια το ίδιο για τα ερωτήματα β και γ, αλλά δεν έχουν συζητηθεί ακόμα οπότε, το βλέπουμε αργότερα..
Εν τούτοις, ανεξάρτητα από αυτό, ο κώδικας που προτείνεις έχεις ένα επιπλέον πλεονέκτημα.. η αρχή του βρόχου και η αρχή της ορχήστρας (αν μπορώ να πω) .. συμπίπτουν.. Δηλαδή, η μεταβλητή ορχ, έχει την ίδια τιμή σε όλη την έκταση του (μικροσκοπικού αυτού) βρόχου.. Και αυτό, όπου μπορεί να γίνεται, οδηγεί συνήθως σε πιό εύληπτους (και επομένως δυνητικά σωστούς) αλγόριθμους.
Σε άλλες περιπτώσεις βέβαια, αυτό μπορεί να οδηγήσει σε πιό σύνθετες δομές.. Για παράδειγμα, στο διάβασμα των στοιχείων με μία ΓΙΑ (και μία επανάληψη για κάθε μουσικό) χρειάζεται ο
αριθμός της ορχήστρας και ο
αριθμός του οργάνου.. Μία λυση που προτείνεται
παραπάνω (https://alkisg.mysch.gr/steki/index.php?topic=3724.msg38263#msg38263) είναι:
Παράθεση από: Sergio στις 27 Φεβ 2011, 04:59:25 ΠΜ
! αρχικές τιμές -------------
ορχ <- 1
οργ <- 1
Για ι από 1 μέχρι 88
Εμφάνισε "Ποιος μουσικός παίζει ", Περ[οργ], " στην ", ορχ, "η ορχήστρα;"
Διάβασε ΟΝ[ι]
! επόμενες τιμές --------------
Αν οργ < 4 τότε
οργ <- οργ + 1
αλλιώς
οργ <- 1
ορχ <- ορχ + 1
τέλος_αν
Τέλος_επανάληψης
Σε αυτό το παράδειγμα, έχουμε μία επανάληψη για κάθε μουσικό. Οι ρόλοι των μεταβλητών ορχ και οργ, είναι και εδώ σαφείς.. Όμως
το τέλος του βρόχου, δεν ταυτίζεται με το .. τέλος του μουσικού! Το τέλος του μουσικού είναι εκεί που υπάρχει το σχόλιο
! επόμενες τιμές --------------. Οποιαδήποτε αναφορά σε
ορχ ή
οργ, από εκείνο το σημείο και μετά, αφορά στον ..
επόμενο μουσικό.
Βέβαια, ΚΑΙ σε αυτή την περίπτωση, δεν υπάρχει καμία σκοπιμότητα στην προσπέλαση της τιμής τους μετά το βρόχο. Δεν ξέρω, νομίζω πως ο κώδικας για την αποφυγή αυτής της "υπερχείλισης τιμής" θα ήταν ανώφελα περίεργος.. Πώς να το κάναμε ας πούμε.. έτσι;
Παράθεση από: Sergio στις 27 Φεβ 2011, 04:59:25 ΠΜ
! αρχικές τιμές -------------
ορχ <- 0
οργ <- 4
Για ι από 1 μέχρι 88
Αν οργ < 4 τότε
οργ <- οργ + 1
αλλιώς
οργ <- 1
ορχ <- ορχ + 1
τέλος_αν
Εμφάνισε "Ποιος μουσικός παίζει ", Περ[οργ], " στην ", ορχ, "η ορχήστρα;"
Διάβασε ΟΝ[ι]
Τέλος_επανάληψης
δεν το βλέπω σκόπιμο ..
Ίσως υπάρχει απλούστερη λύση.. και να μη μου έρχεται επειδή είμαι εξοικειωμένος με την παραπάνω..