Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Μονοδιάστατοι πίνακες => Μήνυμα ξεκίνησε από: bugman στις 19 Μαρ 2019, 07:49:02 ΜΜ

Τίτλος: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 19 Μαρ 2019, 07:49:02 ΜΜ
Είναι εύκολο να βγάλει κανείς τον μέσο όρο 100 αριθμών, αλλά όχι αν υπάρχουν περιορισμοί!

Ζητάμε ένα πρόγραμμα σε ΓΛΩΣΣΑ όπου θα διαβάζει εκατό πραγματικούς αριθμούς, και αφού διαγράψει τους τρεις μεγαλύτερους και τους τρεις μικρότερους θα βγάζει τον μέσο όρο από τους υπόλοιπους 94 αριθμούς. Το προγραμματιστικό περιβάλλον, της άσκησης, δεν υποστηρίζει πίνακες, έτσι η κωδικοποίηση σε ΓΛΩΣΣΑ θα πρέπει να μην περιέχει πίνακες, και η διαδικασία να γίνεται με ένα πέρασμα. Οι αριθμοί στο άθροισμά τους δεν ξεπερνούν τα όρια των πραγματικών.
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: methenitis στις 20 Μαρ 2019, 10:37:00 ΠΜ
Προχειρα αυτό σκέφτηκα.
Η λογική πάντως δυο μεγαλύτερων αριθμών (χωρίς πίνακα) έχει μπει σε επαναληπτικές πανελλήνιες. Ασκηση με σκληρό δίσκο και αρχεία που αποθηκεύονται και ζητούσε , αν θυμάμαι καλά, τα δύο μεγαλύτερα αρχεία.

σ←0
Για ι απο 1 μεχρι 100
   διαβασε χ
   σ←σ+χ
   αν ι =1 τοτε
      μαχ1←χ
      μαχ2←χ
      μαχ3←χ
      μιν1←χ
      μιν2←χ
      μιν3←χ
   τελος_αν
   Αν χ>μαχ1 τοτε
      μαχ3←μαχ2
      μαχ2←μαχ1
      μαχ1←χ
   αλλιως_αν χ>μαχ2 τοτε
      μαχ3←μαχ2
      μαχ2←χ
   αλλιως_αν χ>μαχ3 τοτε
      μαχ3←χ
   τελος_αν
   Αν χ<μιν1 τοτε
      μιν3←μιν2
      μιν2←μιν1
      μιν1←χ
   αλλιως_αν χ<μιν2 τοτε
      μιν3←μιν2
      μιν2←χ
   αλλιως_αν χ<μιν3 τοτε
      μιν3←χ
   τελος_αν
τελος_επαναληψης
κ←(σ-(μαχ1+μαχ2+μαχ3+μιν1+μιν2+μιν3))/94
γραψε κ
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 20 Μαρ 2019, 01:28:53 ΜΜ
Είναι πιο δύσκολο απ' ότι φαίνεται. Ασφαλώς η λύση σου είναι λάθος. Ας δούμε και άλλες λύσεις.
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: ikariofil στις 20 Μαρ 2019, 01:49:28 ΜΜ
διαβασε χ1, χ2, χ3
Αν χ1>χ2 και χ1>χ3 τότε
    μαχ1←χ1
    Αν χ2>χ3 τότε
        μαχ2←χ2
        μαχ3←χ3
    Αλλιώς
        μαχ2←χ3
        μαχ3←χ2
    Τέλος_αν
Αλλιώς_Αν χ2>χ1 και χ2>χ3 τότε
    μαχ1←χ2
    Αν χ1>χ3 τότε
        μαχ2←χ1
        μαχ3←χ3
    Αλλιώς
        μαχ2←χ3
        μαχ3←χ1
    Τέλος_αν
Αλλιώς
    μαχ1←χ3
    Αν χ1>χ2 τότε
        μαχ2←χ1
        μαχ3←χ2
    Αλλιώς
        μαχ2←χ2
        μαχ3←χ1
    Τέλος_αν
Τέλος_αν
Αν χ1<χ2 και χ1<χ3 τότε
    μιν1←χ1
    Αν χ2<χ3 τότε
        μιν2←χ2
        μιν3←χ3
    Αλλιώς
        μιν2←χ3
        μιν3←χ2
    Τέλος_αν
Αλλιώς_Αν χ2<χ1 και χ2<χ3 τότε
    μιν1←χ2
    Αν χ1<χ3 τότε
        μιν2←χ1
        μιν3←χ3
    Αλλιώς
        μιν2←χ3
        μιν3←χ1
    Τέλος_αν
Αλλιώς
    μιν1←χ3
    Αν χ1<χ2 τότε
        μιν2←χ1
        μιν3←χ2
    Αλλιώς
        μιν2←χ2
        μιν3←χ1
    Τέλος_αν
Τέλος_αν
σ←χ1+χ2+χ3
Για ι απο 4 μεχρι 100
   διαβασε χ
   σ←σ+χ
   Αν χ>μαχ1 τοτε
      μαχ3←μαχ2
      μαχ2←μαχ1
      μαχ1←χ
   αλλιως_αν χ>μαχ2 τοτε
      μαχ3←μαχ2
      μαχ2←χ
   αλλιως_αν χ>μαχ3 τοτε
      μαχ3←χ
   τελος_αν
   Αν χ<μιν1 τοτε
      μιν3←μιν2
      μιν2←μιν1
      μιν1←χ
   αλλιως_αν χ<μιν2 τοτε
      μιν3←μιν2
      μιν2←χ
   αλλιως_αν χ<μιν3 τοτε
      μιν3←χ
   τελος_αν
τελος_επαναληψης
κ←(σ-(μαχ1+μαχ2+μαχ3+μιν1+μιν2+μιν3)) / 94
γραψε κ
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: methenitis στις 20 Μαρ 2019, 02:03:51 ΜΜ
Παράθεση από: bugman στις 20 Μαρ 2019, 01:28:53 ΜΜ
Είναι πιο δύσκολο απ' ότι φαίνεται. Ασφαλώς η λύση σου είναι λάθος. Ας δούμε και άλλες λύσεις.

Μάλλον δεν έχω καταλάβει καλά. Το έτρεξα για 20 αριθμούς και δεν είδα κάτι λάθος.

Υπάρχει κάτι που χάνω?? Στην εκφώνηση εννοώ.

υ.γ. Ειχα ξεχάσει να διαιρέσω για το μο αλλά δεν νομίζω να αναφέρεσαι σε αυτο.
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: ntzios kostas στις 20 Μαρ 2019, 02:11:51 ΜΜ
Λάθος είναι οι αρχικοποιήσεις σου.
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 20 Μαρ 2019, 02:59:07 ΜΜ
Σωστός ο ntzios kostas. Για την άλλη λύση που δόθηκε, κρατώ σιγή ιχθύος. Πάντως καλό είναι μαζί με τον κώδικα να δίνεται και μια επεξήγηση για κάθε μεταβλητή, περί της χρησιμότητάς της.
Δηλαδή θα ήθελα "σημειώσεις" στο κώδικα!
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: methenitis στις 20 Μαρ 2019, 03:38:01 ΜΜ
Μπορείτε να μου πείτε ενα παράδειγμα τιμών (δεδομένων ,έστω οτι θα δώσει 10 τιμές )που θα ειναι το λάθος γιατι κάτι μου διαφεύγει.


Σημείωση:Το βρήκα το παράδειγμα :)
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: methenitis στις 20 Μαρ 2019, 04:24:11 ΜΜ
Λογικά τώρα ειναι οκ...Ελπίζω


αλγοριθμος α1
σ←0
Για ι απο 1 μεχρι 100
   διαβασε χ
   σ←σ+χ
   αν ι =1 τοτε!αρχικοποιήση την πρώτη ,μονο τα max
      μαχ1←χ !το πρωτο μεγαλυτερο
      μαχ2←χ !το δευτερο μεγαλυτερ
      μαχ3←χ  !το τρίτο μεγαλυτερο   
   αλλιως_αν ι=2 τοτε!δευτερη θέτει σαν πρώτο max1 ή δευτερο στο max2
      Αν χ>μαχ1 τοτε
         μαχ1←χ
      αλλιως
         μαχ2←χ
      Τελος_αν
   αλλιως_αν ι=3 τοτε
      Αν χ>μαχ1 τοτε
            μαχ3←μαχ2
            μαχ2←μαχ1
            μαχ1←χ
         αλλιως_αν χ>μαχ2 τοτε
            μαχ3←μαχ2
            μαχ2←χ
        αλλιως!εδώ δεν χρειάζεται να ελέγξει. Πρέπει να το αλλάξει.
            μαχ3←χ
         τελος_αν
!τα μεγιστα στα ελάχιστα ανάποδα.
   μιν1←μαχ3 !το μικροτερο απο ολα
   μιν2←μαχ2 !το δευτερο μικρότερο
   μιν3←μαχ1 ! το τρίτο μικροτερο
   αλλιως !για ι>3
         Αν χ>μαχ1 τοτε
            μαχ3←μαχ2
            μαχ2←μαχ1
            μαχ1←χ
         αλλιως_αν χ>μαχ2 τοτε
            μαχ3←μαχ2
            μαχ2←χ
         αλλιως_αν χ>μαχ3 τοτε
            μαχ3←χ
         τελος_αν
         Αν χ<μιν1 τοτε
            μιν3←μιν2
            μιν2←μιν1
            μιν1←χ
         αλλιως_αν χ<μιν2 τοτε
           μιν3←μιν2
            μιν2←χ
        αλλιως_αν χ<μιν3 τοτε
            μιν3←χ
         τελος_αν
τελος_αν
τελος_επαναληψης
κ←(σ-(μαχ1+μαχ2+μαχ3+μιν1+μιν2+μιν3))/94
γραψε κ
τελος α1
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 20 Μαρ 2019, 06:14:28 ΜΜ
 Είναι σωστό!
(εγώ έκανα πριν λάθος στην εκτέλεση)

Απλά είναι καλύτερο να έχει την Αν ι>3 σαν πρώτη Αν, γιατί αυτή θα παίξει περισσότερες φορές. Εδώ υπάρχει και η εναλλακτική να έχουμε για τους πρώτους 3 αριθμούς ξεχωριστή επανάληψη πριν από τους επόμενους 97. Κάτι που κάνει ο Ηλίας παραπάνω!
Επίσης να προσθέσω ότι η απλή αντιγραφή τον μαχ1...μαχ3 στα μιν1...μιν3 είναι καλύτερη από τον υπολογισμό ξανά που κάνει ο Ηλίας!

Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 20 Μαρ 2019, 07:48:50 ΜΜ
Η δική μου λύση με ταξινόμηση με μεταβλητές! (έτσι για να υπάρχει και κάτι άλλο)

Αλγόριθμος α2
σ←0
Διάβασε α1,α2,α3,α5,α6,α7
σ←α1+α2+α3+α5+α6+α7
Για ι απο 7 μεχρι 100
   Διάβασε α4
   σ←σ+α4
   οκ←Αληθές
   Όσο οκ Επανάλαβε
      οκ←Ψευδές
      Αν α1>α2 Τότε
         π←α1
         α1←α2
         α2←π
         οκ←Αληθές
      Τέλος_αν
      Αν α2>α3 Τότε
         π←α2
         α2←α3
         α3←π
         οκ←Αληθές
      Τέλος_αν
      Αν α3>α4 Τότε
         π←α3
         α3←α4
         α4←π
         οκ←Αληθές
      Τέλος_αν
      Αν α4>α5 Τότε
         π←α4
         α4←α5
         α5←π
         οκ←Αληθές
      Τέλος_αν
      Αν α5>α6 Τότε
         π←α5
         α5←α6
         α6←π
         οκ←Αληθές
      Τέλος_αν
      Αν α6>α7 Τότε
         π←α6
         α6←α7
         α7←π
         οκ←Αληθές
      Τέλος_αν
   Τελος_επαναληψης
Τελος_επαναληψης
κ←(σ-α1-α2-α3-α5-α6-α7)/94
Γράψε κ
Τέλος α2
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: ikariofil στις 20 Μαρ 2019, 09:03:11 ΜΜ
Merthenitis έχω την εντύπωση ότι αν ο πρώτος αριθμός (ι=1) είναι ο μεγαλύτερος όλων δεν θα παίξει
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: bugman στις 20 Μαρ 2019, 09:50:41 ΜΜ
Το έχω δοκιμάσει και παίζει!
Όπως τα έχει ορίσει, το μαχ1 είναι ο μεγαλύτερος και το μιν1 είναι ο μικρότερος.
Το έχω δοκιμάσει με 1 έως 99 + ένα 99 ακόμα, και ανακατεμένα, και με 1 συν 1 έως 99 και ανακατεμένα.
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: ikariofil στις 21 Μαρ 2019, 10:10:49 ΠΜ
Φαίνεται σωστό ύστερα από τις τελευταίες διορθώσεις
Τίτλος: Απ: Μέσος όρος 100 αριθμών με περιορισμούς
Αποστολή από: ssimaiof στις 21 Μαρ 2019, 10:23:10 ΠΜ
Να δώσω και εγώ μία λύση στο πιο γενικευμένο πρόβλημα :
Να υπολογιστεί ο μέσος όρος ν αριθμών χωρίς να υπολογιστούν οι κ μεγαλύτεροι και κ μικρότεροι αριθμοί.
Ενδεικτικοί Περιορισμοί   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] <- α
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ