Δισδιάστατοι Πίνακες

Άσκηση 1. Να αναπτύξετε αλγόριθμο ο οποίος με δεδομένα τα στοιχεία δυο δισδιάστατων πινάκων αριθμών ιδίων διαστάσεων θα εξετάζει αν οι πίνακες είναι ίσοι, ενώ στην περίπτωση που δεν είναι θα εκτυπώνει το ποσοστό των στοιχείων που είναι ίσα.

Λύση

Θα ελέγξουμε αν τα στοιχεία στις αντίστοιχες θέσεις είναι ένα προς ένα ίσα

Αλγόριθμος Ισότητα_Πινάκων
  Δεδομένα // Ν, Μ, ΠΙΝΑΚΑΣ_1, ΠΙΝΑΚΑΣ_2 //
  ισότητα  αληθής  !  έστω οτι οι δυο πίνακες είναι ίσοι
  πλήθος  0
  Για i από 1 μέχρι N
    Για j από 1 μέχρι M
      Αν ΠΙΝΑΚΑΣ_1[i, j] <> ΠΙΝΑΚΑΣ_2[i, j] τότε
        !  Αν βρεθεί έστω και ένα ζεύγος τιμών που δεν είναι ίσα τότε οι πίνακες δεν είναι ίσοι
        ισότητα  ψευδής
      Αλλιώς
        πλήθος  πλήθος + 1
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Αν (ισότητα = αληθής) τότε
    Εκτύπωσε "Οι δύο πίνακες είναι ίσοι"
  Αλλιώς
    ποσοστό  πλήθος / (Ν * Μ)
    Εκτύπωσε "Οι δύο πίνακες δεν είναι ίσοι, αλλά το ποσοστό των στοιχείων που είναι ίσα είναι ", ποσοστό
  Τέλος_αν
Τέλος Ισότητα_Πινάκων

Άσκηση 2. Να αναπτύξετε αλγόριθμο ο οποίος με δεδομένα τα στοιχεία δυο δισδιάστατων πινάκων αριθμών ιδίων διαστάσεων θα επιστρέφει νέο πίνακα όπου κάθε στοιχείο του θα είναι το άθροισμα των αντίστοιχων κελιών των δυο αρχικών πινάκων.

Λύση

Θα προσθέσουμε ένα προς ένα τα στοιχεία στις αντίστοιχες θέσεις

Αλγόριθμος Άθροισμα_Πινάκων
  Δεδομένα // Ν, Μ, ΠΙΝΑΚΑΣ_1, ΠΙΝΑΚΑΣ_2 //
  Για i από 1 μέχρι N
    Για j από 1 μέχρι M
      ΤΕΛΙΚΟΣ_ΠΙΝΑΚΑΣ[i, j]  ΠΙΝΑΚΑΣ_1[i, j] + ΠΙΝΑΚΑΣ_2[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Αποτελέσματα // Ν, Μ, ΤΕΛΙΚΟΣ_ΠΙΝΑΚΑΣ //
Τέλος Άθροισμα_Πινάκων

Άσκηση 3. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τα στοιχεία ενός δισδιάστατου πίνακα αριθμών:
i.  Θα διαβάζει έναν αριθμό που θα αντιστοιχεί σε στήλη και θα υπολογίζει το ελάχιστο της στήλης αυτής
ii. Θα διαβάζει έναν αριθμό που θα αντιστοιχεί σε γραμμή και θα υπολογίζει το μέγιστο στοιχείο της γραμμής αυτής

Λύση
Αλγόριθμος Επεξεργασία_Πινάκων1
  Δεδομένα // Ν, Μ, ΠΙΝΑΚΑΣ //
  Αρχή_Επανάληψης ! ερώτημα i
    Διάβασε στήλη
  Μέχρις_Ότου (στήλη > 0) και (στήλη <= Μ)
  μέγιστο  ΠΙΝΑΚΑΣ[1, στήλη]
  Για i από 2 μέχρι Ν
    Αν ΠΙΝΑΚΑΣ[i, στήλη] > μέγιστο τότε
      μέγιστο  ΠΙΝΑΚΑΣ[i, στήλη]
    Τέλος_αν
  Τέλος_επανάληψης
  Εκτύπωσε "Το μέγιστο στοιχείο της στήλης", στήλη, "είναι το ", μέγιστο
  Αρχή_Επανάληψης  ! ερώτημα ii
    Διάβασε γραμμή
  Μέχρις_Ότου (γραμμή > 0) και (γραμμή <= Ν)
  ελάχιστο  ΠΙΝΑΚΑΣ[γραμμή, 1]
  Για j από 2 μέχρι M
    Αν ΠΙΝΑΚΑΣ[γραμμή, j] < ελάχιστο τότε
      ελάχιστο  ΠΙΝΑΚΑΣ[γραμμή, j]
    Τέλος_αν
  Τέλος_επανάληψης
  Εκτύπωσε "Το ελάχιστο στοιχείο της γραμμής", γραμμή, "είναι το ", ελάχιστο
Τέλος Επεξεργασία_Πινάκων1

Άσκηση 4. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τα στοιχεία ενός δισδιάστατου πίνακα αριθμών και θα υπολογίζει το ελάχιστο στοιχείο κάθε στήλης και το μέγιστο στοιχείο κάθε γραμμής τοποθετώντας τα σε αντίστοιχους πίνακες

Λύση
Αλγόριθμος Επεξεργασία_Πινάκων2
  Δεδομένα // Ν, Μ //
  Για i από 1 μέχρι N
    Για j από 1 μέχρι M
      Διάβασε ΠΙΝΑΚΑΣ[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Για i από 1 μέχρι N
    ΕΛΑΧ_ΓΡΑΜΜΩΝ[i]  ΠΙΝΑΚΑΣ[i, 1] ! τοποθετώ το πρώτο στοιχείο
    Για j από 2 μέχρι M
      Αν ΠΙΝΑΚΑΣ[i, j] < ΕΛΑΧ_ΓΡΑΜΜΩΝ[i] τότε
        ΕΛΑΧ_ΓΡΑΜΜΩΝ[i]  ΠΙΝΑΚΑΣ[i, j]
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Για j από 1 μέχρι M
    μέγιστο  ΠΙΝΑΚΑΣ[1, j] ! τοποθετώ το πρώτο στοιχείο
    ! προσοχή στο ότι ο πίνακας ΠΙΝΑΚΑΣ προσπελαύνεται στήλη-γραμμή
    Για i από 2 μέχρι N
      Αν ΠΙΝΑΚΑΣ[i, j] > μέγιστο τότε
        μέγιστο  ΠΙΝΑΚΑΣ[i, j]
      Τέλος_αν
    Τέλος_επανάληψης
    ΜΕΓ_ΣΤΗΛΩΝ[j] μέγιστο
  Τέλος_επανάληψης
  Αποτελέσματα // Ν, ΕΛΑΧ_ΓΡΑΜΜΩΝ, Μ, ΜΕΓ_ΣΤΗΛΩΝ //
Τέλος Επεξεργασία_Πινάκων2

Άσκηση 5. Να αναπτύξετε αλγόριθμο ο οποίος θα διαβάζει τα στοιχεία ενός δισδιάστατου πίνακα αριθμών θα εξετάζει αν ο πίνακας είναι αραιός. Θεωρούμε ότι ένας πίνακας είναι αραιός αν πάνω από 80% του πλήθους των στοιχείων του είναι μηδέν

Λύση

Σε πρώτη φάση πρέπει να υπολογιστεί το πλήθος των μηδενικών στοιχείων του πίνακα και συγκριθεί με το 80% των στοιχείων του πίνακα

Αλγόριθμος Αραιός_Πίνακας
  Δεδομένα // Ν, Μ //
  Για i από 1 μέχρι N
    Για j από 1 μέχρι M
      Διάβασε Α[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  πλήθος_μηδέν  0
  Για i από 1 μέχρι N
    Για j από 1 μέχρι M
      Αν Α[i, j] = 0 τότε
        πλήθος_μηδέν  πλήθος_μηδέν + 1
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Αν πλήθος_μηδέν >= 0.80 * Ν *Μ τότε
    Εκτύπωσε "Ο πίνακας είναι αραιός"
  Αλλιώς
    Εκτύπωσε "Ο πίνακας δεν είναι αραιός"
  Τέλος_αν
Τέλος Αραιός_Πίνακας

Άσκηση 6. Να αναπτύξετε αλγόριθμο ο οποίος με δεδομένα τα στοιχεία ενός τετραγωνικού (διαστάσεων ΝxN) δισδιάστατου πίνακα:
i.  θα υπολογίζει και θα εκτυπώνει τo το άθροισμα των στοιχείων της κυρίας διαγωνίου
ii. θα υπολογίζει και θα εκτυπώνει τo το άθροισμα των στοιχείων της δευτερεύουσας διαγωνίου

Λύση

Όπως φαίνεται και στο παραπάνω σχήμα τα στοιχεία της κυρίας διαγωνίου είναι τα περιεχόμενα των κελιών Α[i, i], όπου 1 <= i <= Ν. Αντίστοιχα τα στοιχεία της κυρίας διαγωνίου είναι τα κελιά Α[i, N + 1 - i], όπου 1<= i <= Ν. Επομένως ο αλγόριθμος θα είναι:

Αλγόριθμος Διαγώνιες
  Δεδομένα // Ν, Α //
  άθροισμα  0
  Για i από 1 μέχρι N
    άθροισμα  άθροισμα + Α[i, i]
  Τέλος_επανάληψης
  Εκτύπωσε "Το άθροισμα των στοιχείων της κύριας διαγωνίου είναι ", άθροισμα
  άθροισμα  0
  Για i από 1 μέχρι N
    άθροισμα  άθροισμα + Α[i, Ν + 1 - i]
  Τέλος_επανάληψης
  Εκτύπωσε "Το άθροισμα των στοιχείων της δευτερεύουσας διαγωνίου είναι ", άθροισμα
Τέλος Διαγώνιες

Άσκηση 7. Να αναπτύξετε αλγόριθμο ο οποίος με δεδομένα τα στοιχεία ενός τετραγωνικού (διαστάσεων ΝxN) δισδιάστατου πίνακα, να ελέγχει αν ο πίνακας είναι:
i.    Άνω τριγωνικός
ii.   Κάτω τριγωνικός
iii.  Διαγώνιος

Λύση

i. Ένας πίνακας χαρακτηρίζεται ως άνω τριγωνικός όταν όλα τα στοιχεία που βρίσκονται κάτω της κυρίας διαγωνίου (έχει οριστεί στην προηγούμενη άσκηση) είναι μηδέν. Τα στοιχεία αυτά είναι τα περιεχόμενα των κελιών Α[i, j], όπου i > j
ii. Ένας πίνακας χαρακτηρίζεται ως κάτω τριγωνικός όταν όλα τα στοιχεία που βρίσκονται άνω της κυρίας διαγωνίου (έχει οριστεί στην προηγούμενη άσκηση) είναι μηδέν. Τα στοιχεία αυτά είναι τα περιεχόμενα των κελιών Α[i, j], όπου i < j
Παρατήρηση: έχει γίνει αντιληπτό ότι τα κελιά Α[i, j], όπου i = j ανήκουν στην κύρια διαγώνιο !!
iii. Ένας πίνακας χαρακτηρίζεται ως διαγώνιος αν είναι ταυτόχρονα άνω και κάτω τριγωνικός
Επομένως ο αλγόριθμος θα είναι:

Αλγόριθμος Τριγωνικοί
  Δεδομένα // Ν, Α //
  άνω_τριγωνικός  αληθής ! έστω ότι ο πίνακας είναι άνω τριγωνικός
  Για i από 1 μέχρι N
    Για j από 1 μέχρι N
      Αν (Α[i, j] <> 0) και (i > j) τότε ! αν βρεθεί έστω και ένα στοιχείο <> 0 τον αποχαρακτηρίζω
        άνω_τριγωνικός  ψευδής
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  κάτω_τριγωνικός  αληθής ! έστω ότι ο πίνακας είναι άνω τριγωνικός
  Για i από 1 μέχρι N
    Για j από 1 μέχρι N
      Αν (Α[i, j] <> 0) και (i < j) τότε ! αν βρεθεί έστω και ένα στοιχείο <> 0 τον αποχαρακτηρίζω
        κάτω_τριγωνικός  ψευδής
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Αν (άνω_τριγωνικός = αληθής) και (κάτω_τριγωνικός = αληθής) τότε
    Εκτύπωσε "Ο πίνακας είναι διαγώνιος..." ! ερώτημα iii
  Αλλιώς_Αν (άνω_τριγωνικός = αληθής) τότε
    Εκτύπωσε "Ο πίνακας είναι άνω τριγωνικός..." ! ερώτημα i
  Αλλιώς_Αν (κάτω_τριγωνικός = αληθής) τότε
    Εκτύπωσε "Ο πίνακας είναι κάτω τριγωνικός..." ! ερώτημα ii
  Αλλιώς
    Εκτύπωσε "Ο πίνακας δεν έχει καμία απο τις ιδιότητες της εκφώνησης..."
  Τέλος_αν
Τέλος Τριγωνικοί

Άσκηση 8. Να μετατρέψετε σε κωδικοποίηση το παρακάτω διάγραμμα ροής

Λύση
  max  Α[1, 1]
  Για i από 1 μέχρι 20
    Για j από 1 μέχρι 50
      Αν (Α[i, j] > max) τότε
        max  Α[i, j]
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Εκτύπωσε max

Άσκηση 9. Να αναπτύξετε αλγόριθμο που θα συνενώνει (λειτουργία συγχώνευσης) δύο πίνακες: Α διαστάσεων Ν1xM και Β διαστάσεων Ν2xM

    

Λύση

Θα μεταφέρουμε τον πίνακα Α στο "πάνω μέρος" του πίνακα Γ στις γραμμές 1..Ν1 και στη συνέχεια θα μεταφερθεί ο πίνακας Β στον πίνακα Γ στις γραμμές Ν1+1..Ν1+Ν2. Όμοια, η συνένωση θα μπορούσε να πραγματοποιηθεί κατά "πλάτος"

Αλγόριθμος Συνένωση_Πινάκων
  Δεδομένα // Ν1, Μ, Ν2, Α, Β //
  Για i από 1 μέχρι Ν1
    Για j από 1 μέχρι Μ
      Γ[i, j]  A[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Για i από N1+1 μέχρι N1+Ν2
    Για j από 1 μέχρι M
      Γ[i, j]  B[i - N1, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  N  N1 + N2
  Αποτελέσματα // Γ, Ν //
Τέλος Συνένωση_Πινάκων

Άσκηση 10. Η ΕΜΥ μελετάει τις θερμοκρασίες σε διάφορες πόλεις της Ελλάδας. Καταχωρούνται λοιπόν τα ονόματα των 100 πόλεων που συμμετέχουν στην έρευνα καθώς και οι θερμοκρασίες των πόλεων αυτών τον μήνα που πέρασε. Να αναπτυχθεί αλγόριθμος όπου:
i.   Θα διαβάζει τα απαραίτητα στοιχεία. Να περιγραφούν οι δομές δεδομένων που θα χρησιμοποιηθούν
ii.  Θα εντοπίζει και θα εκτυπώνει το όνομα της κατά μέσο όρο θερμότερης πόλης του μήνα
iii. Θα εντοπίζει για κάθε πόλη τις μέρες του μήνα όπου υπάρχει θερμοκρασία μεγαλύτερη από την προηγούμενη και την επόμενη μέρα

Λύση

Θα χρησιμοποιήσουμε δυο πίνακες: τον πίνακα ΟΝΟΜΑΤΑ, μονοδιάστατο 100 θέσεων που θα περιέχει τα ονόματα των πόλεων και τον πίνακα ΘΕΡΜΟΚΡΑΣΙΕΣ[100, 30] που κατέχει αντίστοιχα για κάθε πόλη την ημερήσια θερμοκρασία της. Για τη μέση θερμοκρασία κάθε πόλης θα χρησιμοποιήσουμε μονοδιάστατο πίνακα 100 θέσεων με όνομα ΜΕΣΗ_ΘΕΡΜΟΚΡΑΣΙΑ

Αλγόριθμος Επεξεργασία_Θερμοκρασίες
  Πλήθος  100
  Για i από 1 μέχρι Πλήθος
    Διάβασε ΟΝΟΜΑ[i]
    Για j από 1 μέχρι 30
      Διάβασε ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Για i από 1 μέχρι Πλήθος ! ερώτημα ii
    άθροισμα  0
    Για j από 1 μέχρι 30
      άθροισμα  άθροισμα + ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j]
    Τέλος_επανάληψης
    ΜΕΣΗ_ΘΕΡΜΟΚΡΑΣΙΑ[i]  άθροισμα / 30
  Τέλος_επανάληψης
  μέγιστος  ΜΕΣΗ_ΘΕΡΜΟΚΡΑΣΙΑ[1]
  θέση  1
  Για i από 2 μέχρι Πλήθος
    Αν (ΜΕΣΗ_ΘΕΡΜΟΚΡΑΣΙΑ[i] > μέγιστος) τότε
      μέγιστος  ΜΕΣΗ_ΘΕΡΜΟΚΡΑΣΙΑ[i]
      θέση  i
    Τέλος_αν
  Τέλος_επανάληψης
  Εκτύπωσε "Η θερμότερη κατά μέσο όρο πόλη είναι η ", ΟΝΟΜΑ[θέση]
  Για i από 1 μέχρι Πλήθος ! ερώτημα iii
    Εκτύπωσε "Αναφορά για την πόλη", ΟΝΟΜΑ[i]
    Για j από 2 μέχρι 29
      ! η πρώτη και η τελευταία μέρα του μήνα δεν μπορεί ελεγχθεί καθώς δεν υπάρχουν στοιχεία για την προηγούμενη και την επόμενη μέρα αντίστοιχα
      Αν (ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j] > ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j-1]) και (ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j] > ΘΕΡΜΟΚΡΑΣΙΕΣ[i, j+1]) τότε
        Εκτύπωσε "Ημέρα: ", j
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
Τέλος Επεξεργασία_Θερμοκρασίες

Άσκηση 11. Να αναπτυχθεί αλγόριθμος που θα επεξεργάζεται τα στοιχεία των αγώνων ποδοσφαίρου. Θα καταχωρεί σε δισδιάστατο πίνακα τα γκολ που πέτυχε κάθε μια από τις 16 ομάδες του πρωταθλήματος σε κάθε μία από τις 32 αγωνιστικές του πρωταθλήματος και θα εκτυπώνει:
i.   Ποιά ομάδα και σε ποια αγωνιστική πέτυχε τα περισσότερα γκολ;
ii.  Την καλύτερη επίθεση του πρωταθλήματος
iii. Την χειρότερη επίθεση του πρωταθλήματος
iv.  Σε πόσους αγώνες κάθε ομάδα πέτυχε περισσότερα γκολ από το μέσο όρο της;

Λύση

Θα χρησιμοποιήσουμε δυο πίνακες: τον πίνακα ΟΜΑΔΑ, μονοδιάστατο 16 θέσεων που θα περιέχει τα ονόματα των ομάδων και τον πίνακα ΓΚΟΛ[16, 32] που θα περιέχει αντίστοιχα για κάθε ομάδα τα γκολ που πέτυχε στην αντίστοιχη αγωνιστική. Για την απάντηση των ερωτημάτων ii, iii και iv θα δημιουργήσουμε τον πίνακα ΜΟ_ΓΚΟΛ μονοδιάστατο 16 θέσεων

Αλγόριθμος Α_Εθνική
  Δεδομένα // ΟΜΑΔΑ //
  Για i από 1 μέχρι 16
    Για j από 1 μέχρι 32
      Διάβασε ΓΚΟΛ[i, j]
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  μέγιστος  ΓΚΟΛ[1,1] ! ερώτημα i
  μεγ_γραμμή  1
  μεγ_στήλη  1
  Για i από 1 μέχρι 16
    Για j από 1 μέχρι 32
      Αν (ΓΚΟΛ[i, j] > μέγιστος) τότε
        μέγιστος  ΓΚΟΛ[i, j]
        μεγ_γραμμή  i
        μεγ_στήλη  j
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
  Εκτύπωσε "Τα περισσότερα γκολ τα πέτυχε η ομάδα ", ΟΜΑΔΑ[μεγ_γραμμή]," στην ", μεγ_στήλη, " αγωνιστική" ! τέλος ερώτημα i
  Για i από 1 μέχρι 16
    άθροισμα  0
    Για j από 1 μέχρι 32
      άθροισμα  άθροισμα + ΓΚΟΛ[i, j]
    Τέλος_επανάληψης
    ΜΟ_ΓΚΟΛ[i]  άθροισμα / 32
  Τέλος_επανάληψης
  μέγιστος  ΜΟ_ΓΚΟΛ[1] ! ερώτημα ii
  θέση  1
  Για i από 2 μέχρι 16
    Αν (ΜΟ_ΓΚΟΛ[i] > μέγιστος) τότε
      μέγιστος  ΜΟ_ΓΚΟΛ[i]
      θέση  i
    Τέλος_αν
  Τέλος_επανάληψης
  Εκτύπωσε "Την καλύτερη επίθεση έχει η ομάδα ", ΟΜΑΔΑ[θέση] ! τέλος ερώτημα ii
  ελάχιστος  ΜΟ_ΓΚΟΛ[1] ! ερώτημα iii
  θέση  1
  Για i από 2 μέχρι 16
    Αν (ΜΟ_ΓΚΟΛ[i] < ελάχιστος) τότε
      ελάχιστος  ΜΟ_ΓΚΟΛ[i]
      θέση  i
    Τέλος_αν
  Τέλος_επανάληψης
  Εκτύπωσε "Την χειρότερη επίθεση έχει η ομάδα ", ΟΜΑΔΑ[θέση] ! τέλος ερώτημα iii
  Για i από 1 μέχρι 16 ! ερώτημα iv
    μετρητής  0
    Για i από 1 μέχρι 32
      Αν (ΓΚΟΛ[i, j] > ΜΟ_ΓΚΟΛ[i]) τότε
        μετρητής  μετρητής + 1
      Τέλος_αν
    Τέλος_επανάληψης
    Εκτύπωσε "Η ομάδα ", ΟΜΑΔΑ[i], "έχει πετύχει σε", μετρητής, " αγωνιστικές περισσότερα γκολ από το μέσο όρο της"
  Τέλος_επανάληψης
Τέλος Α_Εθνική

Ημερομηνία τελευταίας τροποποίησης: 30/1/2006
Επικοινωνία: Τσιωτάκης Παναγιώτης