Τετάρτη 6 Απριλίου 2011

Άσκηση : συγγραφή συνάρτησης

Γράψτε συνάρτηση η οποία δέχεται ως παραμέτρους τα
άκρα Χ, Υ ενός ακέραιου διαστήματος και υπολογίζει
πόσες από τις τιμές του παραπάνω διαστήματος είναι
διαιρέτες του Χ+Υ.

Λύση

      ΣΥΝΑΡΤΗΣΗ ΠΟΣΕΣ(Χ, Υ) : ΑΚΕΡΑΙΑ
      ΜΕΤΑΒΛΗΤΕΣ
             ΑΚΕΡΑΙΕΣ: Χ, Υ, Λ, ΑΠΟΤ, ΠΛΗΘ
      ΑΡΧΗ
             ΑΠΟΤ <-- Χ+Υ
             ΠΛΗΘ <-- 0
             ΓΙΑ Λ ΑΠΟ Χ ΜΕΧΡΙ Υ
                  ΑΝ ΑΠΟΤ MOD Λ = 0 ΤΟΤΕ
                        ΠΛΗΘ <-- ΠΛΗΘ+1
                  ΤΕΛΟΣ_ΑΝ
             ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
             ΠΟΣΕΣ <-- ΠΛΗΘ
      ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Δευτέρα 4 Απριλίου 2011

Άσκηση : συγγραφή διαδικασίας

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

Λύση

    ΔΙΑΔΙΚΑΣΙΑ Ημερ(Μ, Μην, Χρ, Πληθ, ΕπΜ, ΕπΜην, ΕπΧρ)
    ΜΕΤΑΒΛΗΤΕΣ
          ΑΚΕΡΑΙΕΣ: Μ, Μην, Χρ, Πληθ, ΕπΜ, ΕπΜην, ΕπΧρ
    ΑΡΧΗ
          ΑΝ Μ < Πληθ ΤΟΤΕ
                ΕπΜ <-- Μ+1
                ΕπΜην <-- Μην
                ΕπΧρ <-- Χρ
          ΑΛΛΙΩΣ
                ΕπΜ <-- 1
                ΑΝ Μην < 12 ΤΟΤΕ
                     ΕπΜην <-- Μην+1
                     ΕπΧρ <-- Χρ
                ΑΛΛΙΩΣ
                     ΕπΜην <-- 1
                     ΕπΧρ <-- Χρ+1
                ΤΕΛΟΣ_ΑΝ
          ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Κυριακή 3 Απριλίου 2011

Άσκηση : συγγραφή συνάρτησης

Γράψτε συνάρτηση που δέχεται ως παραμέτρους
δύο αλφαριθμητικούς πίνακες Α[12, 34], Β[12, 34]
και ελέγχει αν οι δύο πίνακες έχουν όλα τα στοιχεία
τους, ένα προς ένα ίσα.

Λύση

       Α' τρόπος


      ΣΥΝΑΡΤΗΣΗ ΙΣΟΙ(Α, Β) : ΛΟΓΙΚΗ
      ΜΕΤΑΒΛΗΤΕΣ
             ΧΑΡΑΚΤΗΡΕΣ: Α[12, 34], Β[12, 34]
             ΑΚΕΡΑΙΕΣ: κ, λ
             ΛΟΓΙΚΕΣ: ΑΠ
      ΑΡΧΗ
             ΑΠ <-- ΑΛΗΘΗΣ
             κ <-- 1
             ΟΣΟ (κ <= 12) ΚΑΙ (ΑΠ = ΑΛΗΘΗΣ) ΕΠΑΝΑΛΑΒΕ
                     λ <-- 1
                     ΟΣΟ (λ <= 34) ΚΑΙ (ΑΠ = ΑΛΗΘΗΣ) ΕΠΑΝΑΛΑΒΕ
                           ΑΝ Α[κ, λ] < >  Β[κ, λ] ΤΟΤΕ
                                 ΑΠ <-- ΨΕΥΔΗΣ
                           ΑΛΛΙΩΣ
                                 λ <-- λ+1
                           ΤΕΛΟΣ_ΑΝ
                     ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
                     ΑΝ ΑΠ = ΑΛΗΘΗΣ ΤΟΤΕ
                           κ <-- κ+1
                     ΤΕΛΟΣ_ΑΝ
             ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
             ΙΣΟΙ <-- ΑΠ
      ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ


      Β΄ Τρόπος


      ΣΥΝΑΡΤΗΣΗ ΙΣΟΙ(Α, Β) : ΛΟΓΙΚΗ
      ΜΕΤΑΒΛΗΤΕΣ
             ΧΑΡΑΚΤΗΡΕΣ: Α[12, 34], Β[12, 34]
             ΑΚΕΡΑΙΕΣ: κ, λ, φ          
      ΑΡΧΗ
             φ <-- 0
             ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 12
                 ΓΙΑ λ ΑΠΟ 1 ΜΕΧΡΙ 34
                      ΑΝ Α[κ, λ] = Β[κ, λ] ΤΟΤΕ
                            φ <-- φ+1
                      ΤΕΛΟΣ_ΑΝ
                 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
             ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
             ΑΝ φ = 408 ΤΟΤΕ      ! 12 Χ 34 = 408 
                    ΙΣΟΙ <-- ΑΛΗΘΗΣ
             ΑΛΛΙΩΣ
                    ΙΣΟΙ <-- ΨΕΥΔΗΣ
             ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Παρασκευή 1 Απριλίου 2011

Άσκηση : Αναζήτηση (μονοδιάστατος+δισδιάστατος πίνακας)

Γράψτε αλγόριθμο που, έχοντας ως δεδομένα:
* έναν ακέραιο πίνακα Α[50, 4]
* έναν ακέραιο πίνακα Β[200]
υπολογίζει πόσες από τις τιμές του Α περιέχονται μέσα
στον Β.

Λύση

       Αλγόριθμος ΑΣΚ
       Δεδομένα // Α, Β //
       Πληθ <-- 0
       Για κ από 1 μέχρι 50
           Για λ από 1 μέχρι 4
                 απ <-- Ψευδής
                 ρ <-- 1
                 Όσο (ρ <= 200) ΚΑΙ (απ = Ψευδής) επανάλαβε
                       Αν Β[ρ] = Α[κ, λ] τότε
                            απ <-- Αληθής
                       αλλιώς
                            ρ <-- ρ+1
                       Τέλος_αν
                 Τέλος_επανάληψης
                 Αν απ = Αληθής τότε
                       Πληθ <-- Πληθ+1
                 Τέλος_αν
           Τέλος_επανάληψης
       Τέλος_επανάληψης
       Αποτελέσματα // Πληθ //
       Τέλος ΑΣΚ

Απλοποιήση και εξαφάνιση περιττών ελέγχων

Απλοποιήστε το παρακάτω σύνολο εντολών και απομακρύ-
νεται τους περιττούς ελέγχους
    Διάβασε Χ, Υ,  Ζ
    Αν Χ > Υ τότε
          Αν (Υ <= Ζ) Ή (Υ > Ζ) τότε
                 Εμφάνισε Χ+Υ+Ζ
          αλλιώς
                 Εμφάνισε Χ*Υ*Ζ
          Τέλος_αν
     αλλιώς_αν Χ < Υ τότε
          Αν Α_Τ(Ζ)  mod 2 >= 2 τότε
                Εμφάνισε Ζ^2+Χ^Υ
          αλλιώς
                 Εμφάνισε (Ζ+Χ)^Υ
          Τέλος_αν
     αλλιώς
           Αν Χ = Υ τότε
                 Εμφάνισε Χ-Υ-Ζ
           αλλιώς
                 Εμφάνισε Χ-Υ+Ζ
            Τέλος_αν
      Τέλος_αν

Λύση

    Διάβασε Χ, Υ,  Ζ
    Αν Χ > Υ τότε
          Εμφάνισε Χ+Υ+Ζ
    αλλιώς_αν Χ < Υ τότε     

          Εμφάνισε (Ζ+Χ)^Υ
    αλλιώς
          Εμφάνισε Χ-Υ-Ζ       

    Τέλος_αν


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

Θεωρείστε έναν πίνακα Α[4,35] που περιέχει μη μηδενικές
ακέραιες τιμές, από τις οποίες οι 40 είναι θετικοί αριθμοί.
Ποιά είναι η τιμή της μεταβλητής ζ μετά την εκτέλεση των
 παρακάτω εντολών;
     ζ <-- 0
     Για λ από 1 μέχρι 4 
         Για μ από 1 μέχρι 35
             Αν Α[λ, μ] = 0 τότε
                    ζ <-- ζ+10
             αλλιώς_αν Α[λ, μ] < 0 τότε
                    ζ <-- ζ+1
             αλλιώς
                    ζ <-- ζ+2
             Τέλος_αν
         Τέλος_επανάληψης
     Τέλος_επανάληψης

Λύση

     Αφού ο πίνακας έχει συνολικά 4Χ35 = 140 στοιχεία
     και τα 40 από αυτά είναι θετικά, συμπεραίνουμε ότι
     τα υπόλοιπα 100 είναι αρνητικοί αριθμοί. Κατά συνέπεια:
     * η εντολή ζ <-- ζ+10 δεν εκτελείται ποτέ,
     * η εντολή ζ <-- ζ+1 εκτελείται 100 φορές,
     * η εντολή ζ <-- ζ+2 εκτελείται 40 φορές
     Κατά συνέπεια:
          ζ = 0+100*1+40*2 = 180

Άσκηση : πρόγραμμα + συνάρτηση

Α. Γράψτε διαδικασία Δυο_Στοιχεία η οποία δέχεται
     ως παράμετρο έναν πραγματικό πίνακα Α[30] και μια
     λογική τιμή Β και υπολογίζει:
     * τα δύο μεγαλύτερα στοιχεία του Α, αν Β = ΑΛΗΘΗΣ,
     * τα δύο μικρότερα στοιχεία του Α, αν Β = ΨΕΥΔΗΣ.
Β. Γράψτε πρόγραμμα το οποίο:
     1) διαβάζει 30 πραγματικές τιμές και τις καταχωρεί
         στον πίνακα Α,
     2) διαβάζει μια λογική τιμή Β,
     3) καλεί τη διαδικασία Δυο_Στοιχεία,
     4) υπολογίζει και εμφανίζει το μέσο όρο (ΜΟ) των δύο
         αποτελεσμάτων της διαδικασίας,
     5) αν αυτός ο μέσος όρος είναι μεγαλύτερος από 110,
         υπολογίζει και εμφανίζει το πλήθος των στοιχείων
         του πίνακα που είναι μη μηδενικά.


Λύση

      ΠΡΟΓΡΑΜΜΑ ΑΣΚ
      ΜΕΤΑΒΛΗΤΕΣ
           ΑΚΕΡΑΙΕΣ: κ, Πληθ
           ΠΡΑΓΜΑΤΙΚΕΣ: Α[30], ΜΟ, ΑΠ1, ΑΠ2
           ΛΟΓΙΚΕΣ: Β
      ΑΡΧΗ
            ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 30
                  ΔΙΑΒΑΣΕ Α[κ]
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
            ΔΙΑΒΑΣΕ Β
            ΚΑΛΕΣΕ Δύο_Στοιχεία(Α, Β, ΑΠ1, ΑΠ2)
            ΜΟ <-- (ΑΠ1+ΑΠ2)/2
            ΓΡΑΨΕ ΜΟ
            ΑΝ ΜΟ > 110 ΤΟΤΕ
                 Πληθ <-- 0
                 ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 30
                    ΑΝ Α[κ] < > 0 ΤΟΤΕ
                          Πληθ <-- Πληθ+1
                    ΤΕΛΟΣ_ΑΝ
                 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
                 ΓΡΑΨΕ Πληθ
            ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

      ΔΙΑΔΙΚΑΣΙΑ Δύο_Στοιχεία(Α, Β, ΑΠ1, ΑΠ2)
      ΜΕΤΑΒΛΗΤΕΣ
            ΠΡΑΓΜΑΤΙΚΕΣ: Α[30],  ΑΠ1, ΑΠ2, ΒΟΗΘ
           ΛΟΓΙΚΕΣ: Β
           ΑΚΕΡΑΙΕΣ: Κ, Λ
      ΑΡΧΗ
            ΓΙΑ Κ ΑΠΟ 2 ΜΕΧΡΙ 30
                  ΓΙΑ Λ ΑΠΟ 30 ΜΕΧΡΙ Κ ΜΕ_ΒΗΜΑ -1
                       ΑΝ Α[Λ-1] > Α[Λ] ΤΟΤΕ
                              ΒΟΗΘ <-- Α[Λ-1]
                              Α[Λ-1] <-- Α[Λ]
                              Α[Λ] <-- ΒΟΗΘ
                       ΤΕΛΟΣ_ΑΝ
                  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
            ΑΝ Β ΤΟΤΕ
                  ΑΠ1 <-- Α[30]
                  ΑΠ2 <-- Α[29]
            ΑΛΛΙΩΣ
                  ΑΠ1 <-- Α[1]
                  ΑΠ2 <-- Α[2]
            ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ