Τώρα είναι Πέμ 28 Μαρ 2024 04:58 pm

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Αγώνες Ποδηλασίας
ΔημοσίευσηΔημοσιεύτηκε: Τετ 19 Μάιος 2004 10:37 am 
Χωρίς σύνδεση

Εγγραφή: Πέμ 22 Απρ 2004 11:16 am
Δημοσιεύσεις: 60
Τοποθεσία: Θεσσαλονίκη
Syntax: [ Download ] [ Hide ]

!=============================================================================================================================
! Σε έναν αγώνα ποδηλασίας με ατομική χρονομέτρηση, λαμβάνουν μέρος Ν ποδηλάτες.
! Οι ποδηλάτες έχουν αριθμούς από το 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 ελέγχους " αν " !!!! :wink:
Syntax: [ Download ] [ Hide ]
!---------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 και την κατάταξη κ των ποδηλατιστών,
σε δυο παράλληλους μονοδιάστατους πίνακες, και στη συνέχεια να ταξινομήσουμε τον πίνακα της κατάταξης
με παράλληλη μεταβολλή του πίνακα των θέσεων. Δυστυχώς όμως τότε θα απαιτούσαμε να γνωρίζουμε ένα μέγιστο Ν εκ των προτέρων,
εφόσον περιοριστούμε σε στατικές δομές.


Κορυφή
 Προφίλ  
Απάντηση με παράθεση  
Τελευταίες δημοσιεύσεις:  Ταξινόμηση ανά  
Δημιουργία νέου θέματος Απαντήστε στο θέμα  [ 1 Δημοσίευση ] 

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 5 επισκέπτες


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επισυνάπτετε αρχεία σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Προβολές: