ΠΡΟΓΡΑΜΜΑ εκλογες_15μελούς ΣΤΑΘΕΡΕΣ N = 4 ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, counter, θέση, θέση0, λευκά, άκυρα, tempn, uppos, ΚΑΤ[30] ΠΡΑΓΜΑΤΙΚΕΣ: π_λευκά, π_άκυρα ΧΑΡΑΚΤΗΡΕΣ: αποφ, όνομα, temp, υποψήφιος, ΥΠ[30], ΨΗΦ[N, 30] ΛΟΓΙΚΕΣ: βρέθηκε, βρέθηκεΑ, μη_έγκυρο ΑΡΧΗ ! ΑΡΧΙΚΟΠΟΙΗΣΗ ΨΗΦΟΔΕΛΤΙΟΥ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΥΠ[i] <- '0' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΚΑΤΑΓΡΑΦΗ ΥΠΟΨΗΦΙΩΝ ΣΤΟ ΨΗΦΟΔΕΛΤΙΟ ΓΡΑΨΕ 'ΚΑΤΑΓΡΑΦΗ ΥΠΟΨΗΦΙΩΝ ΣΤΟ ΨΗΦΟΔΕΛΤΙΟ' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ βρέθηκε <- ΨΕΥΔΗΣ ΓΡΑΨΕ 'ΔΩΣΕ ΟΝΟΜΑ ', i, 'ου/ης ΥΠΟΨΗΦΙΟΥ :' ΔΙΑΒΑΣΕ όνομα ΚΑΛΕΣΕ ΒΡΕΣ(ΥΠ, όνομα, θέση, βρέθηκε) ΑΝ βρέθηκε ΤΟΤΕ ΓΡΑΨΕ 'ΕΧΕΤΕ ΨΑΝΑΔΩΣΕΙ ΤΟ ΟΝΟΜΑ ' ΤΕΛΟΣ_ΑΝ ΜΕΧΡΙΣ_ΟΤΟΥ ΟΧΙ βρέθηκε ΓΡΑΨΕ 'ΤΟ ΟΝΟΜΑ ΠΟΥ ΔΩΣΑΤΕ ΕΙΝΑΙ: ', όνομα ΓΡΑΨΕ 'ΑΠΟΔΟΧΗ; (Ν)ΑΙ Ή (Ο)ΧΙ' ΔΙΑΒΑΣΕ αποφ ΜΕΧΡΙΣ_ΟΤΟΥ αποφ = 'Ν' Η αποφ = 'ν' ΥΠ[i] <- όνομα ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΤΑΞΙΝΟΜΗΣΗ ΨΗΦΟΔΕΛΤΙΟΥ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 30 ΓΙΑ j ΑΠΟ 30 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1 ΑΝ ΥΠ[j - 1] > ΥΠ[j] ΤΟΤΕ temp <- ΥΠ[j - 1] ΥΠ[j - 1] <- ΥΠ[j] ΥΠ[j] <- temp ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΕΚΤΥΠΩΣΗ ΨΗΦΟΔΕΛΤΙΟΥ ΓΡΑΨΕ 'ΤΑ ΟΝΟΜΑΤΑ ΤΩΝ ΥΠΟΨΗΦΙΩΝ ΕΙΝΑΙ: ' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΓΡΑΨΕ i, ΥΠ[i] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Α) ΠΡΟΕΤΟΙΜΑΣΙΑ ΠΙΝΑΚΑ ΣΥΓΚΕΝΤΡΩΣΗΣ ΨΗΦΟΔΕΛΤΙΩΝ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 30 ΨΗΦ[i, j] <- '0' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Β) ΔΙΑΔΙΚΑΣΙΑ ΨΗΦΟΦΟΡΙΑΣ - ΕΙΣΑΓΩΓΗ ΨΗΦΟΔΕΛΤΙΩΝ i <- 1 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ counter <- 0 βρέθηκε <- ΨΕΥΔΗΣ ΓΡΑΨΕ 'ΕΙΣΑΙ Ο ', i, 'ος/η ψηφοφορος ' ΓΡΑΨΕ 'ΔΩΣΕ ΟΝΟΜΑ ΥΠΟΨΗΦΙΟΥ :' ΔΙΑΒΑΣΕ υποψήφιος ΟΣΟ counter < 10 ΚΑΙ υποψήφιος <> 'ΛΕΥΚΟ' ΚΑΙ υποψήφιος <> 'ΤΕΛΟΣ' ΕΠΑΝΑΛΑΒΕ ΚΑΛΕΣΕ ΒΡΕΣ(ΥΠ, υποψήφιος, θέση, βρέθηκε) ΟΣΟ ΟΧΙ βρέθηκε ΚΑΙ υποψήφιος <> 'ΤΕΛΟΣ' ΕΠΑΝΑΛΑΒΕ ΓΡΑΨΕ 'Ο ΥΠΟΨΗΦΙΟΣ ΠΟΥ ΕΔΩΣΕΣ ΔΕΝ ΥΠΑΡΧΕΙ ΣΤΟ ΨΗΦΟΔΕΛΤΙΟ' ΓΡΑΨΕ 'ΔΩΣΕ ΟΝΟΜΑ ΥΠΟΨΗΦΙΟΥ: ' ΔΙΑΒΑΣΕ υποψήφιος βρέθηκε <- ΨΕΥΔΗΣ ΚΑΛΕΣΕ ΒΡΕΣ(ΥΠ, υποψήφιος, θέση, βρέθηκε) ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΚΑΤΑΧΩΡΗΣΗ ΨΗΦΟΥ ΣΕ ΥΠΟΨΗΦΙΟ ΑΝ υποψήφιος <> 'ΤΕΛΟΣ' ΤΟΤΕ ΨΗΦ[i, θέση] <- '+' counter <- counter + 1 ΑΝ counter < 10 ΤΟΤΕ ΓΡΑΨΕ 'ΔΩΣΕ ΟΝΟΜΑ ΥΠΟΨΗΦΙΟΥ :' ΔΙΑΒΑΣΕ υποψήφιος ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΛΕΥΚΟ ΨΗΦΟΔΕΛΤΙΟ ΑΝ (υποψήφιος = 'ΤΕΛΟΣ' ΚΑΙ counter = 0) Η υποψήφιος = 'ΛΕΥΚΟ' ΤΟΤΕ ΨΗΦ[i, 1] <- 'Λ' ΤΕΛΟΣ_ΑΝ ! ΑΚΥΡΟ ΨΗΦΟΔΕΛΤΙΟ ΑΝ counter > 7 ΤΟΤΕ j <- 1 θέση0 <- j ΟΣΟ ΨΗΦ[i, j] <> '0' ΕΠΑΝΑΛΑΒΕ j <- j + 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ θέση0 <- j ΨΗΦ[i, θέση0] <- 'Α' ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ 'ΤΕΛΟΣ ΨΗΦΟΦΟΡΙΑΣ ΓΙΑ ΤΟΝ/ΤΗΝ ', i, 'ο/η ΨΗΦΟΦΟΡΟ' i <- i + 1 ΜΕΧΡΙΣ_ΟΤΟΥ i > N ΓΡΑΨΕ 'ΟΛΟΚΛΗΡΩΘΗΚΕ Η ΨΗΦΟΦΟΡΙΑ' ΓΡΑΨΕ 'ΑΚΟΛΟΥΘΕΙ Η ΕΚΔΟΣΗ ΤΩΝ ΑΠΟΤΕΛΕΣΜΑΤΩΝ' ! Γ) ΚΑΤΑΜΕΤΡΗΣΗ ΨΗΦΟΔΕΛΤΙΩΝ ! Γ1) ΚΑΤΑΜΕΤΡΗΣΗ ΛΕΥΚΩΝ ΚΑΙ ΑΚΥΡΩΝ ΨΗΦΟΔΕΛΤΙΩΝ λευκά <- 0 άκυρα <- 0 ΓΡΑΨΕ 'ΛΕΥΚΑ ΚΑΙ ΑΚΥΡΑ ΨΗΦΟΔΕΛΤΙΑ :' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N ΑΝ ΨΗΦ[i, 1] = 'Λ' ΤΟΤΕ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΛΕΥΚΟΥ ΨΗΦΟΔΕΛΤΙΟΥ: ', i λευκά <- λευκά + 1 ΑΛΛΙΩΣ ! ΨΑΧΝΟΥΜΕ ΓΙΑ ΑΚΥΡΟ ΨΗΦΟΔΕΛΤΙΟ βρέθηκεΑ <- ΨΕΥΔΗΣ j <- 1 ΟΣΟ j < 12 ΚΑΙ ΟΧΙ βρέθηκεΑ ΕΠΑΝΑΛΑΒΕ ΑΝ ΨΗΦ[i, j] = 'Α' ΤΟΤΕ βρέθηκεΑ <- ΑΛΗΘΗΣ ΑΛΛΙΩΣ j <- j + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΑΝ βρέθηκεΑ ΤΟΤΕ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΑΚΥΡΟΥ ΨΗΦΟΔΕΛΤΙΟΥ: ', i άκυρα <- άκυρα + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'ΣΥΝΟΛΟ ΛΕΥΚΩΝ ΨΗΦΟΔΕΛΤΙΩΝ :', λευκά π_λευκά <- λευκά/ N* 100 ΓΡΑΨΕ 'ΠΟΣΟΣΤΟ ΛΕΥΚΩΝ ΕΠΙ ΤΟΥ ΣΥΝΟΛΟΥ ΤΩΝ ΨΗΦΟΔΕΛΤΙΩΝ :', π_λευκά, '%' ΓΡΑΨΕ 'ΣΥΝΟΛΟ ΑΚΥΡΩΝ ΨΗΦΟΔΕΛΤΙΩΝ :', άκυρα π_άκυρα <- άκυρα/ N* 100 ΓΡΑΨΕ 'ΠΟΣΟΣΤΟ ΑΚΥΡΩΝ ΕΠΙ ΤΟΥ ΣΥΝΟΛΟΥ ΤΩΝ ΨΗΦΟΔΕΛΤΙΩΝ :', π_άκυρα, '%' ! Γ2) ΚΑΤΑΜΕΤΡΗΣΗ ΤΩΝ ΜΗ ΛΕΥΚΩΝ ΚΑΙ ΕΓΚΥΡΩΝ ΨΗΦΟΔΕΛΤΙΩΝ ! ΠΡΟΕΤΟΙΜΑΣΙΑ ΠΊΝΑΚΑ ΜΕΤΡΗΤΩΝ ΚΑΤ[30] ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΚΑΤ[i] <- 0 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΚΑΤΑΜΕΤΡΗΣΗ ΨΗΦΩΝ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N j <- 1 μη_έγκυρο <- ΨΕΥΔΗΣ ! ΦΙΛΤΡΑΡΟΥΜΕ ΤΑ ΜΗ ΕΓΚΥΡΑ ΨΗΦΟΔΕΛΤΙΑ ΟΣΟ j < 12 ΚΑΙ ΟΧΙ μη_έγκυρο ΕΠΑΝΑΛΑΒΕ ΑΝ (ΨΗΦ[i, j] = 'Λ') Η (ΨΗΦ[i, j] = 'Α') ΤΟΤΕ μη_έγκυρο <- ΑΛΗΘΗΣ ΑΛΛΙΩΣ j <- j + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΚΑΤΑΜΕΤΡΗΣΗ ΑΝ ΟΧΙ μη_έγκυρο ΤΟΤΕ ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 30 ΑΝ ΨΗΦ[i, j] = '+' ΤΟΤΕ ΚΑΤ[j] <- ΚΑΤ[j] + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! ΕΚΤΥΠΩΣΗ ΨΗΦΩΝ ΚΑΘΕ ΥΠΟΨΗΦΙΟΥ ΓΡΑΨΕ 'ΣΥΝΟΛΟ ΨΗΦΩΝ ΓΙΑ ΚΑΘΕ ΥΠΟΨΗΦΙΟ ' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΓΡΑΨΕ 'Ο ΥΠΟΨΗΦΙΟΣ ', ΥΠ[i], ' ΣΥΓΚΕΝΤΡΩΣΕ ', ΚΑΤ[i], ' ΨΗΦΟΥΣ.' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Δ) ΑΠΟΤΕΛΕΣΜΑΤΑ ΚΑΤΑΤΑΞΗΣ ! Δ1) ΚΑΤΑΤΑΞΗ ΜΕ ΦΘΙΝΟΥΣΑ ΣΕΙΡΑ ΨΗΦΩΝ ΤΩΝ ΥΠΟΨΗΦΙΩΝ ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 30 ΓΙΑ j ΑΠΟ 30 ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1 ΑΝ ΚΑΤ[j - 1] < ΚΑΤ[j] ΤΟΤΕ ! ΑΝΤΙΜΕΤΑΘΕΣΗ ΑΡΙΘΜΟΥ ΨΗΦΩΝ tempn <- ΚΑΤ[j - 1] ΚΑΤ[j - 1] <- ΚΑΤ[j] ΚΑΤ[j] <- tempn ! ΑΝΤΙΜΕΤΑΘΕΣΗ ΤΩΝ ΑΝΤΙΣΤΟΙΧΩΝ ΨΗΦΟΦΟΡΩΝ temp <- ΥΠ[j - 1] ΥΠ[j - 1] <- ΥΠ[j] ΥΠ[j] <- temp ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Δ2) ΕΚΤΥΠΩΣΗ ΤΗΣ ΚΑΤΑΤΑΞΗΣ ΤΩΝ ΥΠΟΨΗΦΙΩΝ ΓΡΑΨΕ 'ΚΑΤΑΤΑΞΗ ΥΠΟΨΗΦΙΩΝ ΠΑΡΑΚΑΤΩ ' ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΓΡΑΨΕ 'Ο/Η ', i, 'ος/η ΥΠΟΨΗΦΙΟΣ ', ΥΠ[i], ' ΣΥΓΚΕΝΤΡΩΣΕ ', ΚΑΤ[i], ' ΨΗΦΟΥΣ.' ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Δ3) ΕΛΕΓΧΟΣ ΠΕΡΙΠΤΩΣΗΣ ΙΣΟΨΗΦΙΑΣ ΣΤΙΣ ΘΕΣΕΙΣ 15 Η/ΚΑΙ 20 ! ΕΛΕΓΧΟΣ ΙΣΟΨΗΦΙΑΣ ΓΥΡΩ ΑΠΟ ΤΗΝ 15Η ΘΕΣΗ ΚΑΤΑΤΑΞΗΣ ΑΝ ΚΑΤ[15] = ΚΑΤ[15 + 1] ΤΟΤΕ ΓΡΑΨΕ 'ΑΠΑΙΤΟΥΝΤΑΙ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΚΛΟΓΕΣ ΓΙΑ ΤΙΣ ΘΕΣΕΙΣ : ' uppos <- 15 - 1 ΟΣΟ ΚΑΤ[uppos] = ΚΑΤ[15] ΕΠΑΝΑΛΑΒΕ uppos <- uppos - 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i <- uppos + 1 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΘΕΣΗΣ ', i, ' ΟΝΟΜΑ : ', ΥΠ[i] i <- i + 1 ΜΕΧΡΙΣ_ΟΤΟΥ (i > 29) Η (ΚΑΤ[i] <> ΚΑΤ[15]) ! ΕΛΕΓΧΟΣ ΤΕΛΕΥΤΑΙΟΥ ΣΤΟΙΧΕΙΟΥ ΤΟΥ ΠΙΝΑΚΑ ΚΑΤ[30] ΑΝ (ΚΑΤ[30] = ΚΑΤ[15]) ΤΟΤΕ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΘΕΣΗΣ 30 ΟΝΟΜΑ : ', ΥΠ[30] ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ! ΕΛΕΓΧΟΣ ΙΣΟΨΗΦΙΑΣ ΓΥΡΩ ΑΠΟ ΤΗΝ 20Η ΘΕΣΗ ΚΑΤΑΤΑΞΗΣ ΑΝ (ΚΑΤ[20] <> ΚΑΤ[15]) ΚΑΙ (ΚΑΤ[20] = ΚΑΤ[20 + 1]) ΤΟΤΕ ΓΡΑΨΕ 'ΑΠΑΙΤΟΥΝΤΑΙ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΚΛΟΓΕΣ ΓΙΑ ΤΙΣ ΘΕΣΕΙΣ : ' uppos <- 20 - 1 ΟΣΟ ΚΑΤ[uppos] = ΚΑΤ[20] ΕΠΑΝΑΛΑΒΕ uppos <- uppos - 1 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i <- uppos + 1 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΘΕΣΗΣ ', i, ' ΟΝΟΜΑ : ', ΥΠ[i] i <- i + 1 ΜΕΧΡΙΣ_ΟΤΟΥ (i > 29) Η (ΚΑΤ[i] <> ΚΑΤ[20]) ! ΕΛΕΓΧΟΣ ΤΕΛΕΥΤΑΙΟΥ ΣΤΟΙΧΕΙΟΥ ΤΟΥ ΠΙΝΑΚΑ ΚΑΤ[30] ΑΝ (ΚΑΤ[30] = ΚΑΤ[20]) ΤΟΤΕ ΓΡΑΨΕ 'ΑΡΙΘΜΟΣ ΘΕΣΗΣ 30 ΟΝΟΜΑ : ', ΥΠ[30] ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ! ΔΙΑΔΙΚΑΣΙΑ ΕΥΡΕΣΗΣ ΥΠΟΨΗΦΙΟΥ ΣΤΟ ΨΗΦΟΔΕΛΤΙΟ ΚΑΙ ΕΠΙΣΤΡΟΦΗΣ ΤΗΣ ΘΕΣΗΣ ΤΟΥ ΔΙΑΔΙΚΑΣΙΑ ΒΡΕΣ (ΠΙΝ, key, pos, found) ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, pos ΧΑΡΑΚΤΗΡΕΣ: ΠΙΝ[30], key ΛΟΓΙΚΕΣ: found ΑΡΧΗ found <- ΨΕΥΔΗΣ pos <- 0 i <- 1 ΟΣΟ (ΟΧΙ found) ΚΑΙ (i <= 30) ΕΠΑΝΑΛΑΒΕ ΑΝ (ΠΙΝ[i] = key) ΤΟΤΕ found <- ΑΛΗΘΗΣ pos <- i ΑΛΛΙΩΣ i <- i + 1 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ