Να δώσω και εγώ μία λύση στο πιο γενικευμένο πρόβλημα :
Να υπολογιστεί ο μέσος όρος ν αριθμών χωρίς να υπολογιστούν οι κ μεγαλύτεροι και κ μικρότεροι αριθμοί.
Ενδεικτικοί Περιορισμοί 20 <= ν <= 1000, 0 <= κ <= 10
Βασίζεται στην Ταξινόμηση Ευθείας Εισαγωγής (Straight Insertion Sort) τροποποιημένη βέβαια για τις ανάγκες της άσκησης.
ΠΡΟΓΡΑΜΜΑ Εξαίρεση_Κ_Max_Min
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ν, κ, i, t1, t2
ΠΡΑΓΜΑΤΙΚΕΣ: α, Αθρ, ΜΟ, Max[11], Min[11]
ΑΡΧΗ
ΓΡΑΨΕ 'Δώστε πλήθος αριθμών ν : '
ΔΙΑΒΑΣΕ ν
ΟΣΟ ν < 20 Η ν > 1000 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'ΛΑΘΟΣ !! Πρέπει 20 <= ν <= 1000'
ΓΡΑΨΕ 'Ξαναδώστε πλήθος αριθμών ν : '
ΔΙΑΒΑΣΕ ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώστε πλήθος αριθμών προς εξαίρεση κ : '
ΔΙΑΒΑΣΕ κ
ΟΣΟ κ < 0 Η κ > 10 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'ΛΑΘΟΣ !! Πρέπει 0 <= κ <= 10'
ΓΡΑΨΕ 'Ξαναδώστε πλήθος αριθμών προς εξαίρεση κ : '
ΔΙΑΒΑΣΕ κ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώστε τον 1ο αριθμό : '
ΔΙΑΒΑΣΕ α
Min[1] <- α
Max[1] <- α
Αθρ <- α
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ ν
ΓΡΑΨΕ 'Δώστε τον ', i, 'ο αριθμό : '
ΔΙΑΒΑΣΕ α
Αθρ <- Αθρ + α
ΑΝ i <= κ ΤΟΤΕ
t1 <- i - 1
ΑΛΛΙΩΣ
t1 <- κ
ΤΕΛΟΣ_ΑΝ
t2 <- t1
ΚΑΛΕΣΕ Ρύθμισε_Max(Max, α, t1)
ΚΑΛΕΣΕ Ρύθμισε_Min(Min, α, t2)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ κ
Αθρ <- Αθρ - Max[i] - Min[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ ν = κ + κ ΤΟΤΕ
ΓΡΑΨΕ 'Δεν υπάρχουν αριθμοί για μέσο όρο'
ΑΛΛΙΩΣ
ΜΟ <- Αθρ/(ν - κ - κ)
ΓΡΑΨΕ 'Μέσος Όρος = ', ΜΟ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Ρύθμισε_Max(Max, α, t)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: t
ΠΡΑΓΜΑΤΙΚΕΣ: α, Max[11]
ΛΟΓΙΚΕΣ: L
ΑΡΧΗ
L <- α > Max[t]
ΟΣΟ L ΕΠΑΝΑΛΑΒΕ
Max[t + 1] <- Max[t]
t <- t - 1
ΑΝ t = 0 ΤΟΤΕ
L <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
L <- α > Max[t]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Max[t + 1] <- α
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Ρύθμισε_Min(Min, α, t)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: t
ΠΡΑΓΜΑΤΙΚΕΣ: α, Min[11]
ΛΟΓΙΚΕΣ: L
ΑΡΧΗ
L <- α < Min[t]
ΟΣΟ L ΕΠΑΝΑΛΑΒΕ
Min[t + 1] <- Min[t]
t <- t - 1
ΑΝ t = 0 ΤΟΤΕ
L <- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
L <- α < Min[t]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Min[t + 1] <- α
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ