Professional Documents
Culture Documents
Η συγχώνευση είναι μία βασική λειτουργία των πινάκων και γενικότερα των δομών δεδομένων.
Η συγχώνευση
Κεφάλαιο 9ο
Στη συνέχεια δίνεται ένας πολύ απλός αλγόριθμος συγχώνευσης δύο ταξινομημένων πινάκων σε έναν τρίτο
ταξινομημένο πίνακα.
Θεωρείται ότι στην είσοδο του αλγορίθμου συγχώνευσης δίνονται δύο ταξινομημένοι, κατά αύξουσα σειρά,
πίνακες Α και Β, μεγέθους Ν και Μ στοιχείων αντίστοιχα, ενώ στην έξοδο προκύπτει ένας τρίτος πίνακας Γ με
Ν+Μ ταξινομημένα στοιχεία επίσης κατά αύξουσα σειρά.
Στο πρόγραμμα Συγχώνευση που ακολουθεί οι μεταβλητές i, j και k είναι δείκτες για την κίνηση μέσα στους
9.4 | Τυπικές επεξεργασίες πινάκων πίνακες Α, Β και Γ. Η μέθοδος προχωρεί ως εξής:
Το μικρότερο στοιχείο από τους πίνακες Α και Β τοποθετείται στον πίνακα Γ με ταυτόχρονη αύξηση του
αντίστοιχου δείκτη. Η διαδικασία αυτή επαναλαμβάνεται μέχρις ότου τελειώσουν τα στοιχεία του ενός πίνακα.
Στη συνέχεια τα υπόλοιπα στοιχεία του άλλου πίνακα μεταφέρονται στον πίνακα Γ.
ΠΡΟΓΡΑΜΜΑ Συγχώνευση ! 1 ΑΠΟ 2
ΣΤΑΘΕΡΕΣ
Η συγχώνευση
ΜΗΚΟΣ_Α = 5
Κεφάλαιο 9ο
ΜΗΚΟΣ_Β = 5
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[ΜΗΚΟΣ_Α], Β[ΜΗΚΟΣ_Β], Γ[ΜΗΚΟΣ_Α + ΜΗΚΟΣ_Β], I, J, Κ, Ν, Μ
, Λ
! Α και Β αρχικοί πίνακες
! Γ τελικός πίνακας
ΑΡΧΗ
! Διάβασε τα δεδομένα
ΓΡΑΨΕ "Δώσε το πλήθος των στοιχείων του πίνακα Α (<100) ΤΩΡΑ
=", ΜΗΚΟΣ_Α
ΔΙΑΒΑΣΕ Ν
ΓΙΑ I ΑΠΟ 1 ΜΕΧΡΙ Ν
ΔΙΑΒΑΣΕ Α[I]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Κ <- Κ + 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
Αλγόριθμος Αθρ_Πίνακα
Δεδομένα // 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 Εκσφαλμάτωση λογικών λαθών σε πίνακες β’
ΓΡΑΨΕ 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
Τέλος_επανάληψης
Τέλος ΑΣΚΗΣΗ_3
Σας ευχαριστώ!!!