You are on page 1of 16

Κυριάκου Νικόλαος

MSc, Μηχανικός Η/Υ, Πληροφορικός ΠΕ-86


kiriakougr.weebly.com
9.4 | Τυπικές επεξεργασίες πινάκων

 Υπολογισμός αθροισμάτων στοιχείων του πίνακα


 Εύρεση του μέγιστου ή του ελάχιστου στοιχείου
 Ταξινόμηση των στοιχείων του πίνακα
Κεφάλαιο 9ο

 Αναζήτηση ενός στοιχείου του πίνακα


 Συγχώνευση δύο πινάκων
Παράδειγμα 3/ ΤΕΤΡΑΔΙΟ ΜΑΘΗΤΗ σελ. 87
9.4 | Τυπικές επεξεργασίες πινάκων Δίνονται δύο ταξινομημένοι κατά αύξουσα σειρά μονοδιάστατοι πίνακες, ακεραίων αριθμών. Να γραφεί
πρόγραμμα το οποίο να συγχωνεύει τους δύο πίνακες σε έναν τρίτο ο οποίος να είναι επίσης ταξινομημένος
κατά αύξουσα σειρά. Οι δύο αρχικοί πίνακες δεν μπορούν να περιέχουν περισσότερα από 100 στοιχεία ο
καθένας.

Η συγχώνευση είναι μία βασική λειτουργία των πινάκων και γενικότερα των δομών δεδομένων.
Η συγχώνευση
Κεφάλαιο 9ο

Στη συνέχεια δίνεται ένας πολύ απλός αλγόριθμος συγχώνευσης δύο ταξινομημένων πινάκων σε έναν τρίτο
ταξινομημένο πίνακα.
Θεωρείται ότι στην είσοδο του αλγορίθμου συγχώνευσης δίνονται δύο ταξινομημένοι, κατά αύξουσα σειρά,
πίνακες Α και Β, μεγέθους Ν και Μ στοιχείων αντίστοιχα, ενώ στην έξοδο προκύπτει ένας τρίτος πίνακας Γ με
Ν+Μ ταξινομημένα στοιχεία επίσης κατά αύξουσα σειρά.
Στο πρόγραμμα Συγχώνευση που ακολουθεί οι μεταβλητές i, j και k είναι δείκτες για την κίνηση μέσα στους
9.4 | Τυπικές επεξεργασίες πινάκων πίνακες Α, Β και Γ. Η μέθοδος προχωρεί ως εξής:
Το μικρότερο στοιχείο από τους πίνακες Α και Β τοποθετείται στον πίνακα Γ με ταυτόχρονη αύξηση του
αντίστοιχου δείκτη. Η διαδικασία αυτή επαναλαμβάνεται μέχρις ότου τελειώσουν τα στοιχεία του ενός πίνακα.
Στη συνέχεια τα υπόλοιπα στοιχεία του άλλου πίνακα μεταφέρονται στον πίνακα Γ.
ΠΡΟΓΡΑΜΜΑ Συγχώνευση ! 1 ΑΠΟ 2

ΣΤΑΘΕΡΕΣ
Η συγχώνευση

ΜΗΚΟΣ_Α = 5
Κεφάλαιο 9ο

ΜΗΚΟΣ_Β = 5
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[ΜΗΚΟΣ_Α], Β[ΜΗΚΟΣ_Β], Γ[ΜΗΚΟΣ_Α + ΜΗΚΟΣ_Β], I, J, Κ, Ν, Μ
, Λ
! Α και Β αρχικοί πίνακες
! Γ τελικός πίνακας
ΑΡΧΗ
! Διάβασε τα δεδομένα
ΓΡΑΨΕ "Δώσε το πλήθος των στοιχείων του πίνακα Α (<100) ΤΩΡΑ
=", ΜΗΚΟΣ_Α
ΔΙΑΒΑΣΕ Ν
ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ Α[I]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΡΑΨΕ "Δώσε το πλήθος των στοιχείων του πίνακα Β(<100) ΤΩΡΑ


=", ΜΗΚΟΣ_Β
ΔΙΑΒΑΣΕ Μ
ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ Μ
ΔΙΑΒΑΣΕ Β[I]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! 2 ΑΠΟ 2 ΠΡΟΓΡΑΜΜΑ Συγχώνευση
! Συγχώνευση πινάκων
I <- 1 ! I είναι ο δείκτης για τον πίνακα Α
J <- 1 ! J είναι ο δείκτης για τον πίνακα Β
9.4 | Τυπικές επεξεργασίες πινάκων
Κ <- 1 ! Κ είναι ο δείκτης για τον πίνακα Γ
ΟΣΟ I <= Ν ΚΑΙ J <= Μ ΕΠΑΝΑΛΑΒΕ
! Όσο και τα δύο έχουν στοιχεία
ΑΝ Α[I] < Β[J] ΤΟΤΕ
Γ[Κ] <- Α[I]
Κ <- Κ + 1
I <- I + 1
ΑΛΛΙΩΣ
Γ[Κ] <- Β[J]
Η συγχώνευση

Κ <- Κ + 1
Κεφάλαιο 9ο

J <- J + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Μεταφορά των υπολοίπων στοιχείων του Α ή του Β
ΑΝ I > Ν ΤΟΤΕ
ΓΙΑ Λ ΑΠΟ Κ ΜΕΧΡΙ Ν + Μ
Γ[Λ] <- Β[J]
J <- J + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΛΛΙΩΣ
ΓΙΑ Λ ΑΠΟ Κ ΜΕΧΡΙ Ν + Μ
Γ[Λ] <- Α[I]
I <- I + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
! Εκτύπωση τελικού πίνακα
ΓΡΑΨΕ " ΤΕΛΙΚΟΣ ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΚΑΚΑΣ"
ΓΙΑ Λ ΑΠΟ 1 ΜΕΧΡΙ Ν + Μ
ΓΡΑΨΕ Γ[Λ]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Κεφάλαιο 3ο
3.3 | Πίνακες
 Παράδειγμα
δισδιάστατου πίνακα: Δ Τ Τ Π Π Σ Κ
Θερμοκρασίες για Αθήνα 2 2
3.3 | Πίνακες

26 26 24 30 25
4 8
μια εβδομάδα, για
Θεσσαλονίκη 24 24 2 2
Κεφάλαιο 3ο

τέσσερις πόλεις 2
23 28
7
24

 Θ[4,7] Ηράκλειο 27 28
2
24 32
3
28
5 1
Γιάννενα 22 24
1
20 25
2
22
9 5

Όσον αφορά στους δισδιάστατους πίνακες σημειώνεται


ότι, αν το μέγεθος των δύο διαστάσεων είναι ίσο, τότε ο
πίνακας λέγεται τετραγωνικός (square) και γενικά
συμβολίζεται ως πίνακας n x n.
Παράδειγμα 2. Εύρεση αθροίσματος στοιχείων δισδιάστατου πίνακα
Δίδεται ο δισδιάστατος πίνακας table με m γραμμές n στήλες. Να βρεθεί το άθροισμα κατά γραμμή, κατά στήλη
και συνολικά.

Αλγόριθμος Αθρ_Πίνακα
Δεδομένα // m, n, table //
3.3 | Πίνακες

sum ← 0
Για i από 1 μέχρι m
row[i] ← 0
Κεφάλαιο 3ο

Τέλος_επανάληψης
Για j από 1 μέχρι n
col[j] ← 0
Τέλος_επανάληψης
Για i από 1 μέχρι m
Για j από 1 μέχρι n
sum ← sum + table[i,j]
row[i] ← row[i] + table[i,j]
col[j] ← col[j] + table[i,j]
σημειώνεται, ότι οι δύο πρώτοι βρόχοι
Τέλος_επανάληψης
μηδενίζουν τις αντίστοιχες μεταβλητές που θα
Τέλος_επανάληψης
υποδεχθούν τα αθροίσματα. Αυτό είναι μία
Αποτελέσματα // row, col, sum //
τακτική που πρέπει να εφαρμόζεται
Τέλος Αθρ_Πίνακα
οποτεδήποτε στα προβλήματά μας έχουμε να
υπολογίσουμε αθροίσματα.
Ο επόμενος πίνακας είναι ένας δισδιάστατος πίνακας 5x5. Αν ο προηγούμενος αλγόριθμος εφαρμοσθεί στον
πίνακα αυτό, τότε οι τιμές των στοιχείων του πίνακα row παρουσιάζονται στην τελευταία κατακόρυφη στήλη, ενώ
οι τιμές των στοιχείων του πίνακα col παρουσιάζονται στην τελευταία γραμμή του πίνακα. Τέλος το συνολικό
άθροισμα sum παρουσιάζεται στην κάτω-δεξιά γωνία.
3.3 | Πίνακες
Κεφάλαιο 3ο

Οι πίνακες χρησιμεύουν για την αποθήκευση και διαχείριση δύο σπουδαίων δομών, της
στοίβας (stack) και της ουράς (queue), που θα εξετασθούν λεπτομερέστερα στη
συνέχεια, επειδή χρησιμοποιούνται σε πληθώρα πρακτικών εφαρμογών.
Παράδειγμα 3
Να γραφεί πρόγραμμα που να υπολογίζει τη μέση θερμοκρασία κάθε πόλης για τον προηγούμενο πίνακα
θερμοκρασιών (δίδονται 7 θερμοκρασίες 2 πόλεων). Επίσης, για κάθε πόλη, να υπολογίζει πόσες ημέρες η
θερμοκρασία ήταν κατώτερη από την αντίστοιχη μέση.
9.3 | Πολυδιάστατοι πίνακες

ΠΡΟΓΡΑΜΜΑ Θερμοκρασίες_2
ΠΡΟΓΡΑΜΜΑ Θερμοκρασίες_2
ΣΤΑΘΕΡΕΣ
ΗΜΕΡΑ = 7
ΣΤΑΘΕΡΕΣ ΠΟΛΗ = 2
ΜΕΤΑΒΛΗΤΕΣ
ΗΜΕΡΑ = 7 ΠΡΑΓΜΑΤΙΚΕΣ: Θερμοκρασία[ΗΜΕΡΑ, ΠΟΛΗ], Μέση[ΠΟΛΗ], Σύνολο
ΠΟΛΗ = 2 ΑΚΕΡΑΙΕΣ: i, j, Ημέρες
ΑΡΧΗ
ΜΕΤΑΒΛΗΤΕΣ
Κεφάλαιο 9ο

! Εισαγωγή δεδομένων
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΗΜΕΡΑ
ΠΡΑΓΜΑΤΙΚΕΣ: Θερμοκρασία[ΗΜΕΡΑ,
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΟΛΗ ΠΟΛΗ], Μέσ
ΓΡΑΨΕ "Δώσε τη ", i, "η θερμοκρασία της ", j, "ης Πόλης:"
η[ΠΟΛΗ], Σύνολο ΔΙΑΒΑΣΕ Θερμοκρασία[i, j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΚΕΡΑΙΕΣ: i, j,ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Ημέρες
ΑΡΧΗ !Υπολογισμοί
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΟΛΗ
! Εισαγωγή δεδομένων
Σύνολο <-
ΓΙΑ i ΑΠΟ
0
1 ΜΕΧΡΙ ΗΜΕΡΑ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΗΜΕΡΑ Σύνολο <- Σύνολο + Θερμοκρασία[i, j]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΟΛΗ Μέση[j] <- Σύνολο/ΗΜΕΡΑ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ "Δώσε τη ", i, "η θερμοκρασία
ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ ΠΟΛΗ
της ", j, "ης Πόλης:" Ημέρες <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΗΜΕΡΑ
ΔΙΑΒΑΣΕ Θερμοκρασία[i, j]
ΑΝ Θερμοκρασία[i, j] < Μέση[j] ΤΟΤΕ
Ημέρες <- Ημέρες + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ "Μέση Θερμοκρασία", j, "ης Πόλης:", Μέση[j]
ΓΡΑΨΕ "Ημέρες με μικρότερη θερμοκρασία :", Ημέρες
!Υπολογισμοί ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
5.2.3 Εκσφαλμάτωση λογικών λαθών σε πίνακες β’

Δραστηριότητα 4 – Εκσφαλμάτωση λογικών λαθών σε πρόγραμμα που χρησιμοποιεί πίνακα


Ακολουθεί η εκφώνηση για την ανάπτυξη ενός προγράμματος:
«Μια επιχείρηση έχει τρία υποκαταστήματα. Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ που να διαβάζει από το
πληκτρολόγιο τα έσοδα κάθε υποκαταστήματος ανά τρίμηνο ενός έτους και να τα καταχωρεί σε πίνακα. Για κάθε
υποκατάστημα να υπολογίζει και να εμφανίζει τα ετήσια έσοδα».
i) Δίνεται το πρόγραμμα (κώδικας σε ΓΛΩΣΣΑ [5.18]). Εκτελέστε το πρόγραμμα για τις τιμές εισόδου του πίνακα 5.6. και
συμπληρώστε τον πίνακα τιμών 5.7. Στον πίνακα χρησιμοποιήστε όσες γραμμές χρειάζεστε.
ii) Ποια λάθη εντοπίσατε κατά την εκτέλεση του προγράμματος; Προτείνετε διορθώσεις.
1 ΠΡΟΓΡΑΜΜΑ Έσοδα_υποκαταστημάτων
2 ΜΕΤΑΒΛΗΤΕΣ
3 ΠΡΑΓΜΑΤΙΚΕΣ: ΕΣΟΔΑ[3, 4], Άθροισμα
4 ΑΚΕΡΑΙΕΣ: Ι, Κ
5 ΑΡΧΗ
6 Άθροισμα <- 0
7 ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 3
8 ΓΡΑΨΕ 'Δώσε τα έσοδα των τριμήνων του ', Ι,
'ου υποκαταστήματος:
9 ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 4
10 ΔΙΑΒΑΣΕ ΕΣΟΔΑ[Ι, Κ]
Υπάρχει
11 Άθροισμα <- Άθροισμα + ΕΣΟΔΑ[Ι, Κ] λάθος στον υπολογισμό των ετησίων εσόδων κάθε υποκαταστήματος. Πιο
12 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ συγκεκριμένα, η τιμή αυτή υπολογίζεται σωστά μόνο για το πρώτο υποκατάστημα.
Όταν ξεκινά ο υπολογισμός για το δεύτερο υποκατάστημα, η τιμή του αθροίσματος
13 ΓΡΑΨΕ 'Ετήσια έσοδα:', Άθροισμα
14 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ δε μηδενίζεται. Κατά συνέπεια, στον υπολογισμό του αθροίσματος κάθε
15 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ υποκαταστήματος λαμβάνεται υπόψη το προηγούμενο άθροισμα. Για να διορθωθεί
το λάθος, πρέπει η σειρά των εντολών 6 και 7 να αντιστραφεί και να γίνει:
 Θερμοκρασίες, για πολλές πόλεις, για
9.3 | Πολυδιάστατοι πίνακες

ένα συγκεκριμένο μήνα, για πολλές


χρονιές
 Θ[4, 30, 3]
Κεφάλαιο 9ο
ΘΕΜΑ Γ ΠΡΟΓΡΑΜΜΑ άσκηση
ΣΤΑΘΕΡΕΣ
Να γραφεί πρόγραμμα σε γλώσσα ο N = 100
οποίος: ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: A[N], i, sum, max, min, max_p, min_p, sum_p
Να διαβάζει τις ηλικίες 100 ΠΡΑΓΜΑΤΙΚΕΣ: av

ανθρώπων και τις καταχωρεί σε


ΑΡΧΗ
9.3 | Πολυδιάστατοι πίνακες

ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N


έναν μονοδιάστατο πίνακα Α. ΔΙΑΒΑΣΕ A[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Μονάδες 17 sum <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
sum <- sum + A[i]
Υπολογίζει και εμφανίζει: ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
av <- sum/N
Το μέσο όρο όλων των ηλικιών.
Κεφάλαιο 9ο

ΓΡΑΨΕ av
Τη μέγιστη και την ελάχιστη ηλικία max <- A[1]
min <- A[1]
καθώς και τις θέσεις στις οποίες max_p <- 1
min_p <- 1
βρέθηκαν στον πίνακα. ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ N
Το πλήθος των ανθρώπων που ΑΝ A[i] > max ΤΟΤΕ
max <- A[i]
έχουν ηλικία άνω του μέσου όρου. max_p <- i

Μονάδες 30
ΤΕΛΟΣ_ΑΝ
ΑΝ A[i] < min ΤΟΤΕ
min <- A[i]
min_p <- i
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ max, min, max_p, min_p
sum_p <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N
ΑΝ A[i] > av ΤΟΤΕ
sum_p <- sum_p + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ sum_p
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Άσκηση 3.
Αλγόριθμος ΑΣΚΗΣΗ_3
Να αναπτύξετε αλγόριθμο που με δεδομένα τα Δεδομένα // Α //
στοιχεία ενός πίνακα Α[500] θα μετρά το Πλήθος ← 500
πλήθος των στοιχείων που είναι μικρότερα του άθροισμα ← 0
11 και αυτά που είναι μικρότερα από το μισό Για i από 1 μέχρι
Πλήθος
του μέσου όρου. άθροισμα ← άθροισμα + Α[i]
Τέλος_επανάληψης
μο ← άθροισμα / Πλήθος

μικρότερα_11 ← 0
μικρότερα_μισό_μο ← 0

Για i από 1 μέχρι Πλήθος


Αν (Α[i] < 11) τότε
μικρότερα_11 ← μικρότερα_11 + 1
Τέλος_αν

Αν (Α[i] < μο / 2) τότε


μικρότερα_μισό_μο ← μικρότερα_μισό_μο + 1
Τέλος_αν

Τέλος_επανάληψης

Εκτύπωσε μικρότερα_11, μικρότερα_μισό_μο

Τέλος ΑΣΚΗΣΗ_3
Σας ευχαριστώ!!!

You might also like