Τετάρτη 21 Ιουλίου 2010

Άσκηση: Επεξεργασία δοσμένου πλήθους δεδομένων (με χρήση πίνακα)

Γράψτε αλγόριθμο που:
α) διαβάζει τα έτη γέννησης 120 ατόμων,
β) υπολογίζει τις ηλικίες τους για το 2010,
γ) εμφανίζει τους αύξοντες αριθμούς (1-120) και τις
    ηλικίες των ατόμων, κατά φθίνουσα σειρά ως προς
    τις ηλικίες.

Λύση

    Αλγόριθμος ΑΣΚ
    Για λ από 1 μέχρι 120
        Διάβασε ΕΓΕΝ[λ]
        Νο[λ] <-- λ
    Τέλος_επανάληψης
    Για λ από 1 μέχρι 120
        Η[λ] <-- 2010-ΕΓΕΝ[λ]
    Τέλος_επανάληψης
    Για λ από 2 μέχρι 120
         Για κ από 120 μέχρι λ με_βήμα -1
              Αν Η[κ-1] < Η[κ] τότε
                   Β1 <-- Η[κ-1]
                   Η[κ-1] <-- Η[κ]
                   Η[κ] <-- Β1
                   Β2 <-- Νο[κ-1]
                   Νο[κ-1] <-- Νο[κ]
                   Νο[κ] <-- Β2
              Τέλος_αν
         Τέλος_επανάληψης
    Τέλος_επανάληψης
    Για λ από 1 μέχρι 120
        Εμφάνισε Νο[λ], Η[λ]
    Τέλος_επανάληψης

    Τέλος ΑΣΚ

Συμπληρώστε τις σχέσεις

Έστω Μ, Ν ακέραιες μεταβλητές. Συμπληρώστε τα κενά
στις παρακάτω σχέσεις:
     1.  (15*Ν+20*Μ) div 5 =
     2.  (15*N+20*M) mod 5 =
     3.  (6*N+12*M) div 3 =
     4.  (6*N+12*M) mod 3 =
     5.  (N^2+M^2) div (N^2+M^2+1) = 
     6.  (N^2+M^2) mod (N^2+M^2+1) =
    
Απάντηση

     1.  (15*Ν+20*Μ) div 5 = 5*(3*Ν+4*Μ) div 5 = 3*Ν+4*Μ
     2.  (15*N+20*M) mod 5 =  5*(3*Ν+4*Μ) mod 5 = 0
     3.  (6*N+12*M) div 3 = 3*(2*N+4*M) div 3 = 2*N+4*M
     4.  (6*N+12*M) mod 3 = 3*(2*N+4*M) mod 3 = 0
     5.  (N^2+M^2) div (N^2+M^2+1) = 0
     6.  (N^2+M^2) mod (N^2+M^2+1) = N^2+M^2

Άσκηση σε δυσδιάστατο πίνακα

Γράψτε πρόγραμμα σε ΓΛΩΣΣΑ το οποίο:
α) διαβάζει 22 ακέραιες τιμές και τις καταχωρεί
    στήλη-στήλη στον ακέραιο πίνακα Γ[2, 11],
β) υπολογίζει και εμφανίζει:
    * το ποσοστό (%) των αρνητικών τιμών,
    * το μέσο όρο των θετικών τιμών.

Λύση

    ΠΡΟΓΡΑΜΜΑ ΑΣΚ
    ΜΕΤΑΒΛΗΤΕΣ
         ΑΚΕΡΑΙΕΣ: Γ[2, 11], λ, μ, Α, Θ, Σ
         ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟΘ, ΠΟΣΑ
    ΑΡΧΗ
         ΓΙΑ λ ΑΠΟ 1 ΜΕΧΡΙ 11
            ΓΙΑ μ ΑΠΟ 1 ΜΕΧΡΙ 2
                 ΔΙΑΒΑΣΕ Γ[μ, λ]
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
         ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
         Α <-- 0
         Θ <-- 0
         Σ <-- 0
         ΓΙΑ μ ΑΠΟ 1 ΜΕΧΡΙ 2
            ΓΙΑ λ ΑΠΟ 1 ΜΕΧΡΙ 11
                 ΑΝ Γ[μ, λ] < 0 ΤΟΤΕ
                      Α <-- Α+1
                 ΤΕΛΟΣ_ΑΝ
                 ΑΝ Γ[μ, λ] > 0 ΤΟΤΕ
                      Θ <-- Θ+1
                      Σ <-- Σ+Γ[μ, λ]
                 ΤΕΛΟΣ_ΑΝ
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
         ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
         ΠΟΣΑ <-- 100*Α/22
         ΓΡΑΨΕ 'Ποσοστό αρνητικών :', ΠΟΣΑ, '%'
         ΑΝ Θ > 0 ΤΟΤΕ
               ΜΟΘ <-- Σ/Θ
               ΓΡΑΨΕ 'Μέσος όρος θετικών :', ΜΟΘ
         ΑΛΛΙΩΣ
               ΓΡΑΨΕ 'Δεν υπάρχουν καθόλου θετικές τιμές!'
         ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Άσκηση σε μονοδιάστατο πίνακα

Δίνεται πίνακας Ν[670] πραγματικού τύπου. Γράψτε
αλγόριθμο που με δεδομένο τον παραπάνω πίνακα:
α) διαβάζει μια ακέραια τιμή Μ διασφαλίζοντας ότι αυτή
     θα είναι 0 ή 1,
β) υπολογίζει και εμφανίζει:
    * το άθροισμα Ν[1]+Ν[3]+...+Ν[669], αν Μ = 0
    * το γινόμενο Ν[2] Χ Ν[4] Χ ... Χ Ν[670], αν Μ = 1

Λύση

    Αλγόριθμος ΑΣΚ
    Δεδομένα // Ν //
    Αρχή_επανάληψης
        Διάβασε Μ
    Μέχρις_ότου (Μ = 0) Ή (Μ = 1)
    Αν Μ = 0 τότε
         Α <-- 0
         Για λ από 1 μέχρι 669 με_βήμα 2
              Α <-- Α+Ν[λ]
         Τέλος_επανάληψης
         Εμφάνισε Α
    αλλιώς
         Γ <-- 1
         Για λ από 2 μέχρι 670 με_βήμα 2
              Γ <-- Γ*Ν[λ]
         Τέλος_επανάληψης
         Εμφάνισε Γ
    Τέλος_αν
    Τέλος ΑΣΚ

Δευτέρα 19 Ιουλίου 2010

'Ασκηση : Απάντηση σε ερώτηση

Γράψτε αλγόριθμο που διαβάζει τις τιμές πώλησης
κάποιων ηλεκτρονικών παιχνιδιών (η είσοδος δεδομένων
ολοκληρώνεται μόλις δοθεί η απάντηση 'ΝΑΙ' στην
υποβαλλόμενη προς το χρήστη ερώτηση 'Ολοκληρώθηκε;')
και υπολογίζει:
α) τη μέση τιμή πώλησης,
β) τη μεγαλύτερη τιμή πώλησης και τον αύξοντα αριθμό
     του παιχνιδιού στον οποίο αντιστοιχεί (θεωρείστε ότι
     οι τιμές πώλησης είναι διαφορετικές μεταξύ τους),
γ) το ποσοστό (%) των παιχνιδιών που είχαν τιμή πώλησης
    τουλάχιστον 35 ευρώ.

Λύση

    Αλγόριθμος  Παιχνίδια
    Αθρ <-- 0
    Π35 <-- 0
    ΜΑΧ <-- -1000
    Πληθ <-- 0
    Αρχή_επανάληψης
         Διάβασε Τιμή
         Πληθ <-- Πληθ+1
         Αθρ <-- Αθρ+Τιμή
         Αν Τιμή > ΜΑΧ τότε
               ΜΑΧ <-- Τιμή
               Νο <-- Πληθ
         Τέλος_αν
         Αν Τιμή >= 35 τότε
               Π35 <-- Π35+1
         Τέλος_αν
         Εμφάνισε 'Ολοκληρώθηκε;'
         Διάβασε Χ
    Μέχρις_ότου Χ = 'ΝΑΙ'
    ΜΟ <-- Αθρ/Πληθ
    ΠΟΣ <-- 100*Π35/Πληθ
    Εμφάνισε ΜΟ, ΜΑΧ, Νο, ΠΟΣ
    Τέλος Παιχνίδια

Άσκηση : Φρουρός

Γράψτε αλγόριθμο που διαβάζει το όνομα και το
επώνυμο των καθηγητών ενός γυμνασίου (η είσοδος
ολοκληρώνεται μόλις δοθεί ως όνομα ή ως επίθετο
το κενό διάστημα), υπολογίζει και εμφανίζει:
α) πόσοι καθηγητές έχουν το όνομα 'Νίκος',
β) το ποσοστό (%) των καθηγητών που έχουν το επώνυμο
     'Καρύδης'.

Λύση

     Αλγόριθμος Γυμνάσιο
     Νικ <-- 0
     Καρ <-- 0
     Πληθ <-- 0
     Αρχή_επανάληψης
          Διάβασε Ον
          Διάβασε Επ
          Αν (Ον < > '   ') ΚΑΙ (Επ < > '   ') τότε
                 Πληθ <-- Πληθ+1
                 Αν Ον = 'Νίκος' τότε
                       Νικ <-- Νικ+1
                 Τέλος_αν
                 Αν Επ = 'Καρύδης' τότε
                       Καρ <-- Καρ+1
                 Τέλος_αν
          Τέλος_αν
     Μέχρις_ότου (Ον = '  ') Ή (Επ = '  ')
     Αν Πληθ > 0 τότε
           ΠοσΚαρ <-- 100*Καρ/Πληθ
           Εμφάνισε Νικ, ΠοσΚαρ
     αλλιώς
            Εμφάνισε 'Δε δόθηκαν δεδομένα'
     Τέλος_αν
     Τέλος Γυμνάσιο

Κυριακή 18 Ιουλίου 2010

Άσκηση : Ποιά είναι η τελική τιμή της μεταβλητής ζ

Ποιά είναι η τελική τιμή της μεταβλητής ζ μετά την
εκτέλεση των παρακάτω εντολών;
    ζ <-- 101
    Για λ από 1 μέχρι 20
         Αν λ mod 2 = 0 τότε
              ζ <-- ζ-8
         αλλιώς
              ζ <-- ζ+5
         Τέλος_αν
    Τέλος_επανάληψης

Απάντηση

    Παρατηρούμε ότι όταν το λ είναι άρτιο, αφαιρούμε από την
    τρέχουσα τιμή του ζ το 8, ενώ αν το λ είναι περιττό προσθέ-
    τουμε στο ζ το 5. Αφού ανάμεσα στο 1 και στο 20 υπάρχουν
    10 άρτιοι και 10 περιττοί αριθμοί, η τελική τιμή του ζ είναι:
        101-10*8+10*5 = 101-80+50 = 71