Σε κάποιο σχολικό αγώνα, για το άθλημα «Άλμα εις μήκος» καταγράφεται για κάθε αθλητή η καλύτερη έγκυρη επίδοσή του. Τιμής ένεκεν, πρώτος αγωνίζεται ο περσινός πρωταθλητής. Η Επιτροπή του αγώνα διαχειρίζεται τα στοιχεία των αθλητών που αγωνίστηκαν. Να γράψετε αλγόριθμο ο οποίος:
Γ1. Να ζητάει το ρεκόρ αγώνων και να το δέχεται, εφόσον είναι θετικό και μικρότερο των 10 μέτρων.
Μονάδες 2
Γ2. Να ζητάει τον συνολικό αριθμό των αγωνιζομένων και για κάθε αθλητή το όνομα και την επίδοσή του σε μέτρα με τη σειρά που αγωνίστηκε.
Μονάδες 4
Γ3. Να εμφανίζει το όνομα του αθλητή με τη χειρότερη επίδοση.
Μονάδες 4
Γ4. Να εμφανίζει τα ονόματα των αθλητών που κατέρριψαν το ρεκόρ αγώνων. Αν δεν υπάρχουν τέτοιοι αθλητές, να εμφανίζει το πλήθος των αθλητών που πλησίασαν το ρεκόρ αγώνων σε απόσταση όχι μεγαλύτερη των 50 εκατοστών.
Μονάδες 6
Γ5. Να βρίσκει και να εμφανίζει τη θέση που κατέλαβε στην τελική κατάταξη ο περσινός πρωταθλητής.
Μονάδες 4
Σημείωση: Να θεωρήσετε ότι κάθε αθλητής έχει έγκυρη επίδοση και ότι όλες οι επιδόσεις των αθλητών που καταγράφονται είναι διαφορετικές μεταξύ τους.
ΛΥΣΗ
Στο εν λόγω θέμα υπήρξε μια συζήτηση για το αν έπρεπε να επιλυθεί με χρήση πινάκων. Κάθε λειτουργική λύση είναι αποδεκτή, οπότε οι προτεινόμενες λύσεις είναι 2. (Η εκτέλεση αλγορίθμων είναι δυνατή με το πρόγραμμα Γλώσσα)
! Λύση χωρίς πίνακες Αλγόριθμος Θέμα3 ! Έλεγχος Εγκυρότητας Αρχή_επανάληψης Γράψε 'Δώσε ρεκόρ αγώνων (0 < ρεκόρ < 10): ' Διάβασε ρεκόρ Μέχρις_ότου ρεκόρ > 0 και ρεκόρ < 10 Γράψε 'Δώσε αριθμό αθλητών' Διάβασε αρ_αθλητών ! περυσινός πρωταθλητής Γράψε 'Δώσε όνομα αθλητή 1' Διάβασε όνομα Γράψε 'Δώσε επίδοση αθλητή 1' Διάβασε επίδοση_1ου min_όνομα ← όνομα min ← επίδοση_1ου τελική_θέση_πρωταθλητή ← 1 κοντά_στο_ρεκόρ ← 0 βρέθηκε ← Ψευδής Αν επίδοση_1ου > ρεκόρ τότε Εμφάνισε 'Κατέριψε το ρεκόρ: ' , όνομα βρέθηκε ← Αληθής αλλιώς Αν επίδοση_1ου ≥ ρεκόρ - 0.5 τότε κοντά_στο_ρεκόρ ← κοντά_στο_ρεκόρ + 1 Τέλος_αν Τέλος_αν Για ι από 2 μέχρι αρ_αθλητών Γράψε 'Δώσε όνομα αθλητή ' , ι Διάβασε όνομα Γράψε 'Δώσε επίδοση αθλητή ' , ι Διάβασε επίδοση Αν επίδοση < min τότε min ← επίδοση min_όνομα ← όνομα Τέλος_αν Αν επίδοση > επίδοση_1ου τότε τελική_θέση_πρωταθλητή ← τελική_θέση_πρωταθλητή + 1 Τέλος_αν Αν επίδοση > ρεκόρ τότε Εμφάνισε 'Κατέριψε το ρεκόρ: ' , όνομα βρέθηκε ← Αληθής αλλιώς Αν επίδοση ≥ ρεκόρ - 0.5 τότε κοντά_στο_ρεκόρ ← κοντά_στο_ρεκόρ + 1 Τέλος_αν Τέλος_αν Τέλος_επανάληψης Αν βρέθηκε = Ψευδής τότε Εμφάνισε 'Πλησίασαν στο ρεκόρ: ' , κοντά_στο_ρεκόρ Τέλος_αν Εμφάνισε 'Ο αθλητής με την χειρότερη επίδοση: ' , min_όνομα Εμφάνισε 'Η τελική θέση του περυσινού πρωταθλητή: ' , τελική_θέση_πρωταθλητή Τέλος Θέμα3
! Λύση με πίνακες Αλγόριθμος Θέμα_Γ !Γ1 Αρχή_επανάληψης Γράψε 'Δώσε ρεκόρ αγώνων (0 < ρεκόρ < 10): ' Διάβασε ρεκόρ Μέχρις_ότου ρεκόρ > 0 και ρεκόρ < 10 ! Γ2 Γράψε 'Δώσε αριθμό αθλητών' Διάβασε αρ_αθλητών Για i από 1 μέχρι αρ_αθλητών Γράψε 'Δώσε όνομα αθλητή ' , i Διάβασε όνομα[i] Γράψε 'Δώσε επίδοση αθλητή ' , i Διάβασε επίδοση[i] Τέλος_επανάληψης ! Γ3 min_όνομα ← όνομα[1] min ← επίδοση[1] Για i από 2 μέχρι αρ_αθλητών Αν επίδοση[i] < min τότε min ← επίδοση[i] min_όνομα ← όνομα[i] Τέλος_αν Τέλος_επανάληψης Εμφάνισε 'Αθλητής με την χειρότερη επίδοση: ', min_όνομα ! Γ4 Βρέθηκε ← Ψευδής Για i από 1 μέχρι αρ_αθλητών Αν επίδοση[i] > ρεκόρ τότε Εμφάνισε 'Κατέριψε το ρεκόρ αγώνων: ', όνομα[i] Βρέθηκε ← Αληθής Τέλος_αν Τέλος_επανάληψης Αν Βρέθηκε = Ψευδής τότε κοντά_στο_ρεκόρ ← 0 Για i από 1 μέχρι αρ_αθλητών Αν επίδοση[i] >= ρεκόρ - 0.5 τότε κοντά_στο_ρεκόρ ← κοντά_στο_ρεκόρ + 1 Τέλος_αν Τέλος_επανάληψης Εμφάνισε 'Αριθμός αθλητών που πλησίασαν το ρεκόρ: ', κοντά_στο_ρεκόρ Τέλος_αν ! Γ5 Θέση ← 1 Για i από 2 μέχρι αρ_αθλητών Αν επίδοση[i] > επίδοση[1] τότε Θέση ← Θέση + 1 Τέλος_αν Τέλος_επανάληψης Εμφάνισε 'Τελική κατάταξη περυσινού πρωταθλητή: ', Θέση Τέλος Θέμα_Γ
Πρόσφατα σχόλια