Στην αρχή της ποδοσφαιρικής περιόδου οι 22 παίκτες μιας ομάδας, οι οποίοι αριθμούνται από 1 έως 22, ψηφίζουν για τους 3 αρχηγούς που θα τους εκπροσωπούν. Κάθε παίκτης μπορεί να ψηφίσει όσους συμπαίκτες του θέλει, ακόμα και τον εαυτό του. Τα αποτελέσματα της ψηφοφορίας καταχωρίζονται σε έναν πίνακα ΨΗΦΟΣ με 22 γραμμές και 22 στήλες, έτσι ώστε το στοιχείο ΨΗΦΟΣ[i,j] να έχει την τιμή 1, όταν ο παίκτης με αριθμό i έχει ψηφίσει τον παίκτη με αριθμό j, και τιμή 0 στην αντίθετη περίπτωση. Να γράψετε αλγόριθμο ο οποίος:

Δ1. Να διαβάζει τα στοιχεία του πίνακα ΨΗΦΟΣ και να ελέγχει την ορθότητά τους με αποδεκτές τιμές 0 ή 1.

Μονάδες 4

Δ2. Να εμφανίζει το πλήθος των παικτών που δεν ψήφισαν κανέναν.

Μονάδες 4

Δ3. Να εμφανίζει το πλήθος των παικτών που ψήφισαν τον εαυτό τους.

Μονάδες 4

Δ4. Να βρίσκει τους 3 παίκτες που έλαβαν τις περισσότερες ψήφους και να εμφανίζει τους αριθμούς τους και τις ψήφους που έλαβαν. Θεωρήστε ότι δεν υπάρχουν ισοψηφίες.

Μονάδες 8

 Τα θέματα σε pdf, 2011, Μαΐου-Ιουνίου, Ημερήσια

ΛΥΣΗ

ΘΕΜΑΔ_2011ΗΜΕΡ [demo_δεδομένα6παίκτες]

ΠΡΟΓΡΑΜΜΑ ΘΕΜΑ_Δ_2011_ΗΜΕΡ
ΣΤΑΘΕΡΕΣ
  ΠΑΙΚΤΕΣ=6    ! Για τα demo δεδομένα, για την άσκηση 22
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ΨΗΦΟΣ[ΠΑΙΚΤΕΣ,ΠΑΙΚΤΕΣ], i, j, πλήθος, πλήθος2, 
            S[ΠΑΙΚΤΕΣ], ΟΝ[ΠΑΙΚΤΕΣ], temp, temp2
  ΛΟΓΙΚΕΣ: δε_ψήφισε
ΑΡΧΗ
!Δ1
  ! Οι ψήφοι κάθε παίκτη εισάγονται σε στήλη
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    ΓΡΑΨΕ 'ΨΗΦΟΙ ΠΑΙΚΤΗ ', i
    ΓΙΑ j  ΑΠΟ 1 ΜΕΧΡΙ  ΠΑΙΚΤΕΣ
      ! Έλεγχος εγκυρότητητας
      ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
        ΔΙΑΒΑΣΕ ΨΗΦΟΣ[i,j]
      ΜΕΧΡΙΣ_ΟΤΟΥ (ΨΗΦΟΣ[i,j]=0 Ή ΨΗΦΟΣ[i,j]=1)
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

 !Δ2
  πλήθος <-- 0 ! παικτών που δεν ψήφισαν κανέναν
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    δε_ψήφισε <-- ΑΛΗΘΗΣ
    j <-- 1
    ΟΣΟ j  <= ΠΑΙΚΤΕΣ ΚΑΙ δε_ψήφισε=ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
      ΑΝ ΨΗΦΟΣ[i,j] = 0 ΤΟΤΕ
        j <-- j+1
      ΑΛΛΙΩΣ
        δε_ψήφισε <-- ΨΕΥΔΗΣ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΝ δε_ψήφισε = ΑΛΗΘΗΣ ΤΟΤΕ
      πλήθος <-- πλήθος + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ 'Δεν ψήφισαν κανέναν ', πλήθος

!Δ3
  πλήθος2 <-- 0 ! παικτών που δεν ψήφισαν τον εαυτό τους
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    ΑΝ ΨΗΦΟΣ[i,i] = 1 ΤΟΤΕ
      πλήθος2 <-- πλήθος2 + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'Ψήφισαν τον εαυτό τους ', πλήθος2

!Δ4
  ! Αρχικοποίηση Πίνακα Αθροιστή
  ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    S[j]  <-- 0
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ! Άθροισμα κατά γραμμή / ψήφοι που έλαβε κάθε παίκτης
  ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    ΓΙΑ i  ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
      S[j] <-- S[j] + ΨΗΦΟΣ[i,j]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

! κρατώ τον αριθμό κάθε παίκτη σε νέο ξεχωριστό πίνακα
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    ΟΝ[i] <-- i
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ ΠΑΙΚΤΕΣ
    ΓΙΑ j ΑΠΟ ΠΑΙΚΤΕΣ ΜΕΧΡΙ i  ΜΕ ΒΗΜΑ  -1
      ΑΝ S[j]>S[j-1] ΤΟΤΕ
        temp <-- S[j-1]
        S[j-1] <-- S[j]
        S[j] <-- temp
      ! ταξινομώ παράλληλα τον ΟΝ
        temp2 <-- ΟΝ[j-1]
        ΟΝ[j-1] <-- ΟΝ[j]
        ΟΝ[j] <-- temp2
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΡΑΨΕ 'ΟΙ 3 ΠΑΙΚΤΕΣ ΜΕ ΤΙΣ ΠΕΡΙΣΣΟΤΕΡΕΣ ΨΗΦΟΥΣ:'
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3
    ΓΡΑΨΕ  'ΠΑΙΚΤΗΣ', ΟΝ[i], 'ΕΛΑΒΕ ', S[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ