!=============================================================================================================================
! Σε έναν αγώνα ποδηλασίας με ατομική χρονομέτρηση, λαμβάνουν μέρος Ν ποδηλάτες.
! Οι ποδηλάτες έχουν αριθμούς από το 1 μέχρι το Ν και αγωνίζονται διαδοχικά από τον 1ο μέχρι τον Ν-οστό
! (από αυτόν που φέρει τον αριθμό 1 μέχρι αυτόν που φέρει τον αριθμό Ν).
! Μετά από την ολοκλήρωση της διαδρομής του κάθε ποδηλάτη, το ηλεκτρονικό σύστημα χρονομέτρησης,
! δίνει το χρόνο και ενημερώνει μια βάση δεδομένων με τη γενική σειρά κατάταξης.
! Το σύστημα τότε μας δίνει τη σειρά κατάταξης του ποδηλάτη σε σχέση με αυτούς που είχαν τερματίσει μέχρι εκείνη τη στιγμή.
! (Ο 1ος ποδηλάτης που θα αγωνιστεί, θα έχει κατάταξη 1, ο 2ος 1 ή 2, ο 3ος 1 ή 2 ή 3, .... ο Ν-οστός 1 ή 2 ή 3 ή ..... ή Ν).
! Να γραφεί πρόγραμμα το οποίο θα διαβάζει το πλήθος των ποδηλατιστών Ν (με Ν>=3)
! και στη συνέχεια θα διαβάζει τη σειρά κατάταξης του κάθε ποδηλάτη κατά τον τερματισμό του.
! Τέλος θα εμφανίζει αυτούς που κέρδισαν μετάλλιο.
! Θεωρούμε δεδομένο ότι όλοι οι ποδηλάτες τερμάτισαν και δεν υπάρχουν δύο ποδηλάτες με τον ίδιο χρόνο.
! ΠΑΡΑΔΕΙΓΜΑ 1
! **** ΔΕΔΟΜΕΝΑ ****
! Για παράδειγμα αν διαβαστεί Ν=5 και διαβαστεί η επόμενη καταταξη:
!
! Ποδηλάτης Κατάταξη
! 1ος >> 1
! 2ος >> 1
! 3ος >> 3
! 4ος >> 2
! 5ος >> 5
!
!
! *** ΑΠΟΤΕΛΕΣΜΑΤΑ ****
! Την πρώτη θέση καταλαμβάνει ο 2ος ποδηλάτης
! Τη δεύτερη θέση καταλαμβάνει ο 4ος ποδηλάτης
! Την τρίτη θέση καταλαμβάνει ο 1ος ποδηλάτης
!
! ΠΑΡΑΔΕΙΓΜΑ 2
! **** ΔΕΔΟΜΕΝΑ ****
! Για παράδειγμα αν διαβαστεί Ν=7 και διαβαστεί η επόμενη καταταξη:
!
! Ποδηλάτης Κατάταξη
! 1ος >> 1
! 2ος >> 1
! 3ος >> 2
! 4ος >> 2
! 5ος >> 5
! 6ος >> 1
! 7ος >> 3
!
! *** ΑΠΟΤΕΛΕΣΜΑΤΑ ****
! Την πρώτη θέση καταλαμβάνει ο 6ος ποδηλάτης
! Τη δεύτερη θέση καταλαμβάνει ο 2ος ποδηλάτης
! Την τρίτη θέση καταλαμβάνει ο 7ος ποδηλάτης
!
! ( Από τον 16ο Πανελλήνιο Διαγωνισμό Πληροφορικής, Φάση 1η )
! ( http://epy.compulink.gr/panellinios/ )
!==============================================================================================================================
ΠΡΟΓΡΑΜΜΑ Ποδηλάτες
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:i,Ν,κ, bike[3]
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε αριθμό ποδηλατιστών'
ΔΙΑΒΑΣΕ Ν
ΜΕΧΡΙΣ_ΟΤΟΥ Ν>=3
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ! Χρειαζόμαστε ένα πίνακα 3 θέσεων , για να καταχωρούμε τον αριθμό του i ποδηλάτη
bike[i] <-- 0 ! Αρχικοποίηση πίνακα
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Χρυσό μεταλλιο: bike[1], Αργυρό μετάλλιο bike[2], Χάλκινο μετάλλιο bike[3]
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ 'Δώσε κατάταξη ',i,'ου ποδηλάτη'
ΔΙΑΒΑΣΕ κ
ΑΝ κ=3 ΤΟΤΕ ! αν ο i ποδηλάτης καταταγεί στην 3η θέση
bike[3] <-- i ! τον τοποθετούμε στην 3η θέση
ΑΛΛΙΩΣ_ΑΝ κ=2 ΤΟΤΕ ! αν ο i ποδηλάτης καταταγεί στην 2η θέση
bike[3] <-- bike[2] ! τοποθετούμε τον μέχρι τώρα 2ο στην 3η θέση
bike[2] <-- i ! και τον i ποδηλάτη τον θέτουμε 2ο
ΑΛΛΙΩΣ_ΑΝ κ=1 ΤΟΤΕ ! αν ο i ποδηλάτης καταταγεί στην 1η θέση
bike[3] <-- bike[2] ! τοποθετούμε τον μέχρι τώρα 2ο στην 3η θέση
bike[2] <-- bike[1] ! τοποθετούμε τον μέχρι τώρα 1ο στην 2η θέση
bike[1] <-- i ! και τον i ποδηλάτη τον θέτουμε 1ο
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3
ΓΡΑΨΕ i,'oς τερματισε ο ποδηλάτης ', bike[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Ο παραπάνω αλγόριθμος εύκολα γενικεύεται, στην περιπτώση που αναζήτουμε, όχι μονο αυτούς που κέρδισαν μετάλλια,
αλλά καλούμαστε να προσδιορίσουμε τη γενική τελική κατάταξη π.χ. των 10 πρώτων ποδηλατιστών.
Με τον προηγούμενο αλγόριθμο θα χρειαζόμασταν 10 ελέγχους " αν " !!!!
!---------2ος Τρόπος ------------------------------
ΠΡΟΓΡΑΜΜΑ Ποδηλάτες2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:i,j,Ν,κ, bike[10]
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε αριθμό ποδηλατιστών'
ΔΙΑΒΑΣΕ Ν
ΜΕΧΡΙΣ_ΟΤΟΥ Ν>=10
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
bike[i] <-- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ 'Δώσε κατάταξη ',i,'ου ποδηλάτη'
ΔΙΑΒΑΣΕ κ
ΑΝ κ<=10 ΤΟΤΕ
ΓΙΑ j ΑΠΟ 10 ΜΕΧΡΙ κ+1 ΜΕ ΒΗΜΑ -1
bike[j] <-- bike[j-1]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
bike[κ] <-- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΡΑΨΕ i,'oς τερματισε ο ποδηλάτης ', bike[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Το προβλημα θα μπορούσε επίσης να λυθεί καταχωρώντας τον αριθμό i και την κατάταξη κ των ποδηλατιστών,
σε δυο παράλληλους μονοδιάστατους πίνακες, και στη συνέχεια να ταξινομήσουμε τον πίνακα της κατάταξης
με παράλληλη μεταβολλή του πίνακα των θέσεων. Δυστυχώς όμως τότε θα απαιτούσαμε να γνωρίζουμε ένα μέγιστο Ν εκ των προτέρων,
εφόσον περιοριστούμε σε στατικές δομές.