Όπως συμβαίνει (σχεδόν) πάντα, υπάρχουν πολλοί τρόποι για να λυθεί το 4ο Θέμα. Παρακάτω παραθέτω τις δύο ακραίες μεθόδους, δηλαδή τη
μεγάλη-αλλά-εύκολη και τη
μικρή-αλλά-δύσκολη.
1η ΜΕΘΟΔΟΣ : "Μεγάλη-αλλά-εύκολη"
Για να απαντηθεί το (πιο δύσκολο απ' όλα) ερώτημα δ' αρκεί, πριν από τη φθίνουσα ταξινόμηση με κριτήριο τους μέσους όρους, να γίνει αύξουσα (=αλφαβητική) ταξινόμηση με κριτήριο τα ονόματα. Δηλαδή θα πραγματοποιηθούν δύο διαδοχικές ταξινομήσεις φυσσαλίδας.
Για την εύρεση της τιμής και του πλήθους των μεγίστων μέσων όρων, δε λαμβάνεται υπόψη το γεγονός ότι ο πίνακας ΜΟ είναι ήδη ταξινομημένος, αλλά ακολουθούνται οι τυπικές και χιλιοειπωμένες τεχνικές...
ΠΡΟΓΡΑΜΜΑ Πανελλήνιες_2004__Θέμα_4ο
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: ονόματα[500], temp_ονομ
ΑΚΕΡΑΙΕΣ: βαθμοί[500,3], i, j, πλήθος
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ[500], temp_MO, max
ΑΡΧΗ
! Ερώτημα (α)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΔΙΑΒΑΣΕ ονόματα[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (β)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
ΔΙΑΒΑΣΕ βαθμοί[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (γ)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΜΟ[i] <-- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
ΜΟ[i] <-- ΜΟ[i]+βαθμοί[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ[i] <-- ΜΟ[i]/3
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (δ)
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 500
ΓΙΑ j ΑΠΟ 500 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ ονόματα[j-1]>ονόματα[j] ΤΟΤΕ
temp_ονομ <-- ονόματα[j-1]
ονόματα[j-1] <-- ονόματα[j]
ονόματα[j] <-- temp_ονομ
temp_MO <-- ΜΟ[j-1]
ΜΟ[j-1] <-- ΜΟ[j]
ΜΟ[j] <-- temp_MO
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 500
ΓΙΑ j ΑΠΟ 500 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ ΜΟ[j-1]<ΜΟ[j] ΤΟΤΕ
temp_MO <-- ΜΟ[j-1]
ΜΟ[j-1] <-- ΜΟ[j]
ΜΟ[j] <-- temp_MO
temp_ονομ <-- ονόματα[j-1]
ονόματα[j-1] <-- ονόματα[j]
ονόματα[j] <-- temp_ονομ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΓΡΑΨΕ ονόματα[i], ΜΟ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (ε)
max <-- ΜΟ[1]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 500
ΑΝ ΜΟ[i]>max ΤΟΤΕ
max <-- ΜΟ[i]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
πλήθος <-- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΑΝ ΜΟ[i]=max ΤΟΤΕ
πλήθος <-- πλήθος+1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ πλήθος
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Πανελλήνιες_2004__Θέμα_4ο
2η ΜΕΘΟΔΟΣ : "Μικρή-αλλά-δύσκολη"Εδώ το ερώτημα δ' θα απαντηθεί με τροποποίηση του τυπικού κώδικα φυσσαλίδας. Τροποποίηση που είναι πάρα πολύ δύσκολο να σκεφτεί κάποιος μαθητής που δεν έχει διδαχθεί κάτι τέτοιο.
Για την εύρεση της τιμής και του πλήθους των μεγίστων μέσων όρων, λαμβάνεται υπόψη ότι ο πίνακας ΜΟ είναι ήδη ταξινομημένος σε φθίνουσα σειρά, οπότε οι μέγιστες τιμές βρίσκονται στις πρώτες θέσεις του...
ΠΡΟΓΡΑΜΜΑ Πανελλήνιες_2004__Θέμα_4ο
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ: ονόματα[500], temp_ονομ
ΑΚΕΡΑΙΕΣ: βαθμοί[500,3], i, j, πλήθος
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ[500], temp_MO, max
ΑΡΧΗ
! Ερώτημα (α)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΔΙΑΒΑΣΕ ονόματα[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (β)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
ΔΙΑΒΑΣΕ βαθμοί[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (γ)
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΜΟ[i] <-- 0
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3
ΜΟ[i] <-- ΜΟ[i]+βαθμοί[i,j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ[i] <-- ΜΟ[i]/3
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (δ)
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 500
ΓΙΑ j ΑΠΟ 500 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
ΑΝ ΜΟ[j-1]<ΜΟ[j] ΤΟΤΕ
temp_MO <-- ΜΟ[j-1]
ΜΟ[j-1] <-- ΜΟ[j]
ΜΟ[j] <-- temp_MO
temp_ονομ <-- ονόματα[j-1]
ονόματα[j-1] <-- ονόματα[j]
ονόματα[j] <-- temp_ονομ
ΑΛΛΙΩΣ_ΑΝ (ΜΟ[j-1]=ΜΟ[j]) ΚΑΙ (ονόματα[j-1]>ονόματα[j]) ΤΟΤΕ
temp_ονομ <-- ονόματα[j-1]
ονόματα[j-1] <-- ονόματα[j]
ονόματα[j] <-- temp_ονομ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500
ΓΡΑΨΕ ονόματα[i], ΜΟ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Ερώτημα (ε)
max <-- ΜΟ[1]
i <-- 1
πλήθος <-- 0
ΟΣΟ (i<=500) ΚΑΙ (ΜΟ[i]=max) ΕΠΑΝΑΛΑΒΕ
πλήθος <-- πλήθος+1
i <-- i+1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ πλήθος
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Πανελλήνιες_2004__Θέμα_4ο
Οι παραπάνω απαντήσεις είναι σε μορφή
ΠΡΟΓΡΑΜΜΑΤΩΝ ώστε να είναι εκτελέσιμες στη ΓλωσσοΜάθεια. Για να μετατραπούν σε
ΑΛΓΟΡΙΘΜΟΥΣ αρκούν οι αντικαταστάσεις:
1) ΠΡΟΓΡΑΜΜΑ -----> Αλγόριθμος
2) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ -----> Τέλος
3) Δε χρειάζονται οι δηλώσεις μεταβλητών και η εντολή ΑΡΧΗ
4) Οι 3άδες εκχωρήσεων που αντιμεταθέτουν τιμές μπορούν εναλλακτικά να αντικατασταθούν από εντολές "Αντιμετάθεσε ..."