Παρασκευή, 17 Αυγούστου 2018

Ψηφίζοντας για αρχηγό! (Εξ. 2011 - Ημ. )

Βαθμός Δυσκολίας:
3/5
Εκφώνηση Ασκησης: 

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

Να γράψετε αλγόριθμο ο οποίος:

  1. Να διαβάζει τα στοιχεία του πίνακα ΨΗΦΟΣ και να ελέγχει την ορθότητά τους με αποδεκτές τιμές 0 ή 1.
  2. Να εμφανίζει το πλήθος των παικτών που δεν ψήφισαν κανέναν.
  3. Να εμφανίζει το πλήθος των παικτών που ψήφισαν τον εαυτό τους.
  4. Να βρίσκει τους 3 παίκτες που έλαβαν τις περισσότερες ψήφους και να εμφανίζει τους αριθμούς τους και τις ψήφους που έλαβαν. Θεωρήστε ότι δεν υπάρχουν ισοψηφίες.

Επιμέλεια: Εξ. 2011 - Ημ. 

Λύση Άσκησης: 

 

ΠΡΟΓΡΑΜΜΑ podosfairo
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j, πληθ_ψηφ_εαυτ, πληθ_δεν_ψηφ, ΨΗΦΟΣ[22, 22], ΣΥΝ_ΨΗΦ[22], ΑΡΙΘ_ΠΑΙΚ[22], αθ, temp
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 22
    ΑΡΙΘ_ΠΑΙΚ[i] <- i ! Επειδή το τελευταίο ερώτημα μας ζητά να εμφανίσουμε τους αριθμούς των παιχτών που θα βγουν αρχηγοί γι αυτό δημιουργούμε τον πίνακα ΑΡΙΘ_ΠΑΙΚ. 
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 22
      ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
        ΓΡΑΨΕ "Δώσε Ψήφο"
        ΔΙΑΒΑΣΕ ΨΗΦΟΣ[i, j] 
      ΜΕΧΡΙΣ_ΟΤΟΥ ΨΗΦΟΣ[i, j] = 0 Η ΨΗΦΟΣ[i, j] = 1  !Ελεγχο Εγκυρότητας
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  αθ <- 0
  πληθ_ψηφ_εαυτ <- 0
  πληθ_δεν_ψηφ <- 0
  ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 22
    αθ <- 0
    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 22
      ΑΝ i = j ΚΑΙ ΨΗΦΟΣ[i, j] = 1 ΤΟΤΕ
        πληθ_ψηφ_εαυτ <- πληθ_ψηφ_εαυτ + 1! Υπολογίζει το πλήθος των παικτών που ψήφισαν τον εαυτό τους
      ΤΕΛΟΣ_ΑΝ
      αθ <- αθ + ΨΗΦΟΣ[i, j] ! Υπολογίζει το πλήθος των ψήφων που πήρε κάθε παίκτης 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΣΥΝ_ΨΗΦ[j] <- αθ 
 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 22
    αθ <- 0
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 22
      αθ <- αθ + ΨΗΦΟΣ[i, j] 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΝ αθ = 0 ΤΟΤΕ
      πληθ_δεν_ψηφ <- πληθ_δεν_ψηφ + 1! Υπολογίζει το πλήθος των παικτών που δεν ψήφισαν κανεναν
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Το πλήθος των παικτών που δεν ψηφισαν είναι ", πληθ_δεν_ψηφ
  ΓΡΑΨΕ "Το πλήθος των παικτών που ψηφισαν τον εαυτό τους είναι ", πληθ_ψηφ_εαυτ
 
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 22
    ΓΙΑ j ΑΠΟ 22 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1
      ΑΝ ΣΥΝ_ΨΗΦ[j] > ΣΥΝ_ΨΗΦ[j - 1] ΤΟΤΕ
        temp <- ΣΥΝ_ΨΗΦ[j] 
        ΣΥΝ_ΨΗΦ[j] <- ΣΥΝ_ΨΗΦ[j - 1] 
        ΣΥΝ_ΨΗΦ[j - 1] <- temp
        temp <- ΑΡΙΘ_ΠΑΙΚ[j] 
        ΑΡΙΘ_ΠΑΙΚ[j] <- ΑΡΙΘ_ΠΑΙΚ[j - 1] 
        ΑΡΙΘ_ΠΑΙΚ[j - 1] <- temp
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Οι παίκτες με τις μεγαλύτερες ψηφοφορίες είναι: "
  ΓΡΑΨΕ " 1ος είναι ο παίκτης με τον αριθμό ", ΑΡΙΘ_ΠΑΙΚ[1], " και με ψήφους ", ΣΥΝ_ΨΗΦ[1] 
  ΓΡΑΨΕ " 2ος είναι ο παίκτης με τον αριθμό ", ΑΡΙΘ_ΠΑΙΚ[2], " και με ψήφους ", ΣΥΝ_ΨΗΦ[2] 
  ΓΡΑΨΕ " 3ος είναι ο παίκτης με τον αριθμό ", ΑΡΙΘ_ΠΑΙΚ[2], " και με ψήφους ", ΣΥΝ_ΨΗΦ[3] 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ