Αρχική ΑΕΠΠ - Δομές Δεδομένων Λειτουργικά Συστήματα Δίκτυα Υπολογιστών ΙΙ Βάσεις Δεδομένων Παιδαγωγικά - Διδακτική

Βασικές Έννοιες

Μεταβλητή - Έκφραση Δομή Ακολουθίας Δομή Επιλογής Δομή Επανάληψης

Αναπαράσταση Αλγορίθμων

Διάγραμμα Ροής

Πίνακας Τιμών

Πίνακες

Μονοδιάστατοι Δισδιάστατοι Πολυδιάστατοι Αναζήτηση Ταξινόμηση Στοίβα Ουρά

Υποπρογράμματα

Συναρτήσεις Διαδικασίες Σχετικά με τις παράμετρους

Δυναμικές Δομές

Λίστες Δέντρα Γράφοι

 Ιστορικό Πρόσφατες αλλαγές Εκτύπωση Αναζήτηση

Ιστορικό: DataStructures.SingleArray-Theory

Απόκρυψη μικρών αλλαγών - Αλλαγές περιεχομένου

18-02-2008 (17:58) από Aris -
Αλλαγή σειρών 37-38 από:
!! Εμφάνιση στοιχείων πίνακα
σε:
! Εμφάνιση στοιχείων πίνακα
Αλλαγή σειρών 41-42 από:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΓΡΑΨΕ Τ[i]
σε:
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ Τ[Ι]
Αλλαγή σειρών 47-48 από:
!! Εύρεση του ελαχίστου στοιχείου ενός πίνακα
σε:
! Εύρεση του ελαχίστου στοιχείου ενός πίνακα
Αλλαγή σειρών 51-54 από:
Min <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[i] < Min ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Min <- T[i] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
σε:
MΙΝ <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ Ν ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[I] < MΙΝ ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
MΙΝ <- T[Ι] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
Αλλαγή σειρών 60-63 από:
'''Προσοχή''': Ο παραπάνω αλγόριθμος βρίσκει μόνο ποιο το ελάχιστο στοιχείο του πίνακα. Δε μας δίνει πληροφορία για το πόσα στοιχεία του πίνακα είναι ίσα με το ελάχιστο ούτε τη θέση αυτών. Για παράδειγμα, αν έχουμε τον παρακάτω πίνακα: T [14, 9, 3, 5, 7, 3] θα βρει ότι το ελάχιστο στοιχείο είναι το 3.

Αν θέλουμε να εμφανίσουμε και τη θέση που βρέθηκε το στοιχείο, τότε προσθέτουμε και μία μεταβλητή η οποία κρατάει το i.
σε:
'''Προσοχή''': Ο παραπάνω αλγόριθμος βρίσκει μόνο ποιο είναι το ελάχιστο στοιχείο του πίνακα. Δε μας δίνει πληροφορία για το πόσα στοιχεία του πίνακα είναι ίσα με το ελάχιστο ούτε τη θέση αυτών. Για παράδειγμα, αν έχουμε τον παρακάτω πίνακα: T [14, 9, 3, 5, 7, 3] θα βρει ότι το ελάχιστο στοιχείο είναι το 3.

Αν θέλουμε να εμφανίσουμε και τη θέση που βρέθηκε το στοιχείο, τότε προσθέτουμε και μία μεταβλητή η οποία κρατάει το Ι.
Αλλαγή σειρών 66-71 από:
Min <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
pos <- 1 ! Η θέση στην οποία "βρέθηκε" το ελάχιστο.
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[i] < Min ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Min <- T[i] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
pos <- i ! Ενημερώνεται και η μεταβλητή pos με τη θέση i.
σε:
MIN <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
POS <- 1 ! Η θέση στην οποία "βρέθηκε" το ελάχιστο.
ΓΙΑ I ΑΠΟ 2 ΜΕΧΡΙ N ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[I] < MIN ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
MIN <- T[I] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
POS <- I ! Ενημερώνεται και η μεταβλητή pos με τη θέση i.
Αλλαγή σειρών 79-80 από:
!! Εύρεση του μεγίστου στοιχείου ενός πίνακα
σε:
! Εύρεση του μεγίστου στοιχείου ενός πίνακα
Αλλαγή σειρών 83-84 από:
Max <- T[1]
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n
σε:
MAX <- T[1]
ΓΙΑ I ΑΠΟ 2 ΜΕΧΡΙ N
Αλλαγή σειράς 86 από:
Max <- T[i]
σε:
MAX <- T[I]
Αλλαγή σειρών 94-95 από:
!! Υπολογισμός αθροίσματος στοιχείων πίνακα
σε:
! Υπολογισμός αθροίσματος στοιχείων πίνακα
Αλλαγή σειρών 100-102 από:
Άθροισμα <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
Άθροισμα <- Άθροισμα + Τ[i]
σε:
ΑΘΡΟΙΣΜΑ <- 0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΘΡΟΙΣΜΑ <- ΑΘΡΟΙΣΜΑ + Τ[Ι]
Αλλαγή σειράς 106 από:
Άθροισμα <- Άθροισμα / n
σε:
ΑΘΡΟΙΣΜΑ <- ΑΘΡΟΙΣΜΑ / Ν
Αλλαγή σειρών 110-113 από:
!! Συγχώνευση πινάκων

!!! Προσάρτηση ενός πίνακα στο τέλος άλλου πίνακα
σε:
! Συγχώνευση πινάκων

!! Προσάρτηση ενός πίνακα στο τέλος άλλου πίνακα
Αλλαγή σειράς 128 από:
!!! Πρόσθεση πινάκων
σε:
!! Πρόσθεση πινάκων
12-02-2008 (21:16) από Aris -
Αλλαγή σειράς 29 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 31-33 από:
Για i από 1 μέχρι n
Διάβασε Τ[i]
Τέλος_επανάληψης
σε:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΔΙΑΒΑΣΕ Τ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 39 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 41-43 από:
Για i από 1 μέχρι n
Γράψε Τ[i]
Τέλος_επανάληψης
σε:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
ΓΡΑΨΕ Τ[i]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 49 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 52-53 από:
Για i από 2 μέχρι n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
Αν Τ[i] < Min τότε ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
σε:
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ Ν ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[i] < Min ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Αλλαγή σειρών 55-56 από:
Τέλος_αν
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 64 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 68-69 από:
Για i από 2 μέχρι n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
Αν Τ[i] < Min τότε ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
σε:
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
ΑΝ Τ[i] < Min ΤΟΤΕ ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Αλλαγή σειρών 72-73 από:
Τέλος_αν
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 81 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 84-85 από:
Για i από 2 μέχρι n
Αν Τ[i] > Max τότε
σε:
ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ n
ΑΝ Τ[i] > Max ΤΟΤΕ
Αλλαγή σειρών 87-88 από:
Τέλος_αν
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 98 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειράς 101 από:
Για i από 1 μέχρι n
σε:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
Αλλαγή σειράς 103 από:
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 117 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειράς 119 από:
Για i από 1 μέχρι n1
σε:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n1
Αλλαγή σειρών 121-122 από:
Τέλος_επανάληψης
Για i από 1 μέχρι n2
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n2
Αλλαγή σειράς 124 από:
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειράς 131 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειράς 133 από:
Για i από 1 μέχρι n
σε:
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ n
Αλλαγή σειράς 135 από:
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειρών 158-159 από:
Από τα παραπάνω παρατηρούμε ότι οι τιμές των δεικτών @@(i, j)@@ για τους δύο πίνακες δεν αυξάνονται σε κάθε βήμα, αλλά υπό συνθήκη (αυξάνεται ο μετρητής του πίνακα που έδωσε το μικρότερο στοιχείο). Αυτό σημαίνει ότι δε μπορούμε να χρησιμοποιήσουμε τη δομή @@Για@@. Επίσης, από το σημείο που ένα πίνακας έδωσε όλα τα στοιχεία του δεν έχει νόημα να γίνεται σύγκριση με τον άλλο πίνακα. Αυτό που χρειάζεται είναι τα υπόλοιπα στοιχεία του πίνακα που έχει ακόμη στοιχεία, να αποδοθούν στο νέο πίνακα.
σε:
Από τα παραπάνω παρατηρούμε ότι οι τιμές των δεικτών @@(i, j)@@ για τους δύο πίνακες δεν αυξάνονται σε κάθε βήμα, αλλά υπό συνθήκη (αυξάνεται ο μετρητής του πίνακα που έδωσε το μικρότερο στοιχείο). Αυτό σημαίνει ότι δε μπορούμε να χρησιμοποιήσουμε τη δομή @@ΓΙΑ@@. Επίσης, από το σημείο που ένα πίνακας έδωσε όλα τα στοιχεία του δεν έχει νόημα να γίνεται σύγκριση με τον άλλο πίνακα. Αυτό που χρειάζεται είναι τα υπόλοιπα στοιχεία του πίνακα που έχει ακόμη στοιχεία, να αποδοθούν στο νέο πίνακα.
Αλλαγή σειράς 162 από:
(:source lang=algorithm -getcode:) [@
σε:
(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 167-168 από:
Όσο i<=n1 και j<=n2 επανάλαβε
Αν Τ1[i] < T2[j] τότε
σε:
ΟΣΟ i<=n1 ΚΑΙ j<=n2 ΕΠΑΝΑΛΑΒΕ
ΑΝ Τ1[i] < T2[j] ΤΟΤΕ
Αλλαγή σειράς 171 από:
αλλιώς
σε:
ΑΛΛΙΩΣ
Αλλαγή σειράς 174 από:
τέλος_αν
σε:
ΤΕΛΟΣ_ΑΝ
Αλλαγή σειράς 176 από:
Τέλος_επανάληψης
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειρών 180-182 από:
! στοιχεία για να τα αντιγράψουμε. Τώρα μπορούμε να χρησιμοποιήσουμε το Για
Αν i>n1 τότε ! Ο Τ1 δεν έχει άλλα στοιχεία, οπότε χειριζόμαστε τον Τ2
Για l από j μέχρι n2 ! Από το σημείο που σταμάτησε ο Τ2 (j) μέχρι τέλος
σε:
! στοιχεία για να τα αντιγράψουμε. Τώρα μπορούμε να χρησιμοποιήσουμε το ΓΙΑ
ΑΝ i>n1 ΤΟΤΕ ! Ο Τ1 δεν έχει άλλα στοιχεία, οπότε χειριζόμαστε τον Τ2
ΓΙΑ l ΑΠΟ j ΜΕΧΡΙ n2 ! Από το σημείο που σταμάτησε ο Τ2 (j) μέχρι το τέλος
Αλλαγή σειρών 185-187 από:
Τέλος_επανάληψης
αλλιώς ! Έχει τελειώσει ο Τ2
Για l από i μέχρι n1
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΛΛΙΩΣ ! Έχει τελειώσει ο Τ2
ΓΙΑ l ΑΠΟ i ΜΕΧΡΙ n1
Αλλαγή σειρών 190-191 από:
Τέλος_επανάληψης
Τέλος_αν
σε:
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
11-02-2008 (21:38) από Aris -
Αλλαγή σειρών 1-5 από:
Όλες οι παρακάτω τεχνικές ενεργούν σε έναν πίνακα Τ που έχει n στοιχεία, όπου n ένας θετικός ακέραιος αριθμός. Σε όλους τους αλγόριθμους θεωρούμε ότι ο πίνακας είναι ακεραίων. Οι τεχνικές όμως δεν αλλάζουν αν ο πίνακας είναι πραγματικών αριθμών ή χαρακτήρων.

!! Απόδοση αρχικής τιμής μηδέν στα στοιχεία του πίνακα

(:source lang=algorithm -getcode:) [@
σε:
Όλες οι παρακάτω τεχνικές ενεργούν σε έναν πίνακα Τ που έχει Ν στοιχεία, όπου Ν ένας θετικός ακέραιος αριθμός. Σε όλους τους αλγόριθμους θεωρούμε ότι ο πίνακας είναι ακεραίων. Οι τεχνικές όμως δεν αλλάζουν αν ο πίνακας είναι πραγματικών αριθμών ή χαρακτήρων.

! Απόδοση αρχικής τιμής μηδέν στα στοιχεία του πίνακα

Με αυτό το τμήμα μηδενίζουμε όλα τα Ν στοιχεία του πίνακα Τ. Αυτό είναι απαραίτητο να γίνεται όταν ο πίνακας πρόκειται να χρησιμοποιηθεί για να καταχωρίσει αποτελέσματα επεξεργασίας δεδομένων. Θα το συναντήσουμε αρκετά συχνά στους δισδιάστατους πίνακες όπου θα κρατάμε αθροίσματα, μέγιστα, ελάχιστα κ.α. γραμμών ή και στηλών.

(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 9-11 από:
Για i από 1 μέχρι n
Τ[i] <- 0
Τέλος_επανάληψης
σε:
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
Τ[Ι] <- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αλλαγή σειρών 15-17 από:
!! Απόδοση διαδοχικών τιμών στα στοιχεία του πίνακα

(:source lang=algorithm -getcode:) [@
σε:
! Απόδοση διαδοχικών τιμών στα στοιχεία του πίνακα

Το τμήμα αυτό δίνει αρχικές τιμές διαδοχικές στα στοιχεί του πίνακα. Ο σκοπός του είναι να δείξει τη χρήση της μεταβλητής I τόσο ως δείκτη στον πίνακα όσο και ως μια οποιοδήποτε άλλη μεταβλητή.

(:source lang=glossa -getcode:) [@
Αλλαγή σειρών 21-23 από:
Για i από 1 μέχρι n
Τ[i] <- i + a ! όπου a ένας πραγματικός αριθμός.
Τέλος_επανάληψης
σε:
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
Τ[Ι] <- Ι + a ! όπου a ένας πραγματικός αριθμός.
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
09-02-2008 (19:14) από 127.0.0.1 -
Διαγραφή σειράς 0:
(:noheader:)
02-02-2008 (17:24) από 127.0.0.1 -
Αλλαγή σειρών 190-192 από:
@]
σε:
@]
----
[[DataStructures.SingleArray-Exercises | Ασκήσεις]]
30-01-2008 (15:47) από Aris -
Πρόσθεση σειρών 1-190:
(:noheader:)
Όλες οι παρακάτω τεχνικές ενεργούν σε έναν πίνακα Τ που έχει n στοιχεία, όπου n ένας θετικός ακέραιος αριθμός. Σε όλους τους αλγόριθμους θεωρούμε ότι ο πίνακας είναι ακεραίων. Οι τεχνικές όμως δεν αλλάζουν αν ο πίνακας είναι πραγματικών αριθμών ή χαρακτήρων.

!! Απόδοση αρχικής τιμής μηδέν στα στοιχεία του πίνακα

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n
Τ[i] <- 0
Τέλος_επανάληψης
...
@]

!! Απόδοση διαδοχικών τιμών στα στοιχεία του πίνακα

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n
Τ[i] <- i + a ! όπου a ένας πραγματικός αριθμός.
Τέλος_επανάληψης
...
@]

!! Απόδοση τιμών στα στοιχεία του πίνακα με τιμές που εισάγει ο χρήστης

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n
Διάβασε Τ[i]
Τέλος_επανάληψης
...
@]

!! Εμφάνιση στοιχείων πίνακα

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n
Γράψε Τ[i]
Τέλος_επανάληψης
...
@]

!! Εύρεση του ελαχίστου στοιχείου ενός πίνακα

(:source lang=algorithm -getcode:) [@
...
Min <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
Για i από 2 μέχρι n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
Αν Τ[i] < Min τότε ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Min <- T[i] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
Τέλος_αν
Τέλος_επανάληψης
...
@]

'''Προσοχή''': Ο παραπάνω αλγόριθμος βρίσκει μόνο ποιο το ελάχιστο στοιχείο του πίνακα. Δε μας δίνει πληροφορία για το πόσα στοιχεία του πίνακα είναι ίσα με το ελάχιστο ούτε τη θέση αυτών. Για παράδειγμα, αν έχουμε τον παρακάτω πίνακα: T [14, 9, 3, 5, 7, 3] θα βρει ότι το ελάχιστο στοιχείο είναι το 3.

Αν θέλουμε να εμφανίσουμε και τη θέση που βρέθηκε το στοιχείο, τότε προσθέτουμε και μία μεταβλητή η οποία κρατάει το i.

(:source lang=algorithm -getcode:) [@
...
Min <- T[1] ! Θεωρούμε αυθαίρετα ότι το πρώτο στοιχείο του πίνακα έχει την ελάχιστη τιμή.
pos <- 1 ! Η θέση στην οποία "βρέθηκε" το ελάχιστο.
Για i από 2 μέχρι n ! Αφού η πρώτη τιμή έχει “ελεγχθεί”, ξεκινάμε από τη θέση 2.
Αν Τ[i] < Min τότε ! Εξετάζεται κάθε φορά το στοιχείο στη θέση i.
Min <- T[i] ! Αν είναι μικρότερο τότε ενημερώνεται η μεταβλητή Min.
pos <- i ! Ενημερώνεται και η μεταβλητή pos με τη θέση i.
Τέλος_αν
Τέλος_επανάληψης
...
@]

Στις [[AEPP.SingleArray-Exercises | ασκήσεις]] θα βρείτε άσκηση που ζητάει την εύρεση του ελαχίστου και την εμφάνιση όλων των θέσεων στο οποίο αυτό βρίσκεται.

!! Εύρεση του μεγίστου στοιχείου ενός πίνακα

(:source lang=algorithm -getcode:) [@
...
Max <- T[1]
Για i από 2 μέχρι n
Αν Τ[i] > Max τότε
Max <- T[i]
Τέλος_αν
Τέλος_επανάληψης
...
@]

Εδώ ισχύου οι ίδιες παρατηρήσεις με την εύρεση ελαχίστου.

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

Θεωρούμε ότι ο πίνακας έχει ακέραιους ή πραγματικούς αριθμούς.

(:source lang=algorithm -getcode:) [@
...
Άθροισμα <- 0
Για i από 1 μέχρι n
Άθροισμα <- Άθροισμα + Τ[i]
Τέλος_επανάληψης
...
! και για να βρούμε το μέσο όρο αυτών...
Άθροισμα <- Άθροισμα / n
...
@]

!! Συγχώνευση πινάκων

!!! Προσάρτηση ενός πίνακα στο τέλος άλλου πίνακα

Έστω ότι έχουμε δύο πίνακες @@Τ1, Τ2@@, με διαστάσεις @@1 x n1@@ και @@1 x n2@@ αντίστοιχα. Θέλουμε να δημιουργήσουμε ένα νέο πίνακα Τ όπου ο Τ2 θα προστεθεί στο τέλος του Τ1. Ο νέος πίνακας πρέπει να έχει διάσταση @@1 x n@@ όπου @@n = n1 + n2@@.
Προσοχή: Οι τρεις πίνακες Τ1, Τ2, Τ πρέπει να δέχονται τον ίδιο τύπο στοιχείων, πχ. ακέραιους.

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n1
Τ[i] <- Τ1[i]
Τέλος_επανάληψης
Για i από 1 μέχρι n2
Τ[n1 + i] <- Τ2[i]
Τέλος_επανάληψης
...
@]

!!! Πρόσθεση πινάκων
Για να προσθέσουμε δύο πίνακες θα πρέπει αυτοί να έχουν την ίδια διάσταση. Έτσι, θεωρούμε ότι έχουμε δύο πίνακες @@Τ1, Τ2@@, με διάσταση @@1 x n@@ ο καθένας. Ο τελικός πίνακας θα έχει και αυτός διάσταση @@1 x n@@ και το κάθε στοιχείο του θα είναι το άθροισμα των στοιχείων των Τ1, Τ2 στην αντίστοιχη θέση.

(:source lang=algorithm -getcode:) [@
...
Για i από 1 μέχρι n
Τ[i] <- Τ1[i] + Τ2[i]
Τέλος_επανάληψης
...
@]

!!! Συγχώνευση ταξινομημένων πινάκων σε νέο επίσης ταξινομημένο πίνακα

Έστω ότι έχουμε δύο πίνακες @@Τ1, Τ2@@, με διαστάσεις @@1 x n1@@ και @@1 x n2@@ αντίστοιχα όπου τα στοιχεία και των δύο είναι ταξινομημένα. Θέλουμε να δημιουργήσουμε ένα νέο πίνακα Τ όπου τα στοιχεία του θα περιέχουν όλα τα στοιχεία των Τ1 και Τ2, ταξινομημένα. Για παράδειγμα, έστω ότι οι πίνακες Τ1 και Τ2 είναι:

[@
T1 = [1, 3, 4, 6], T2 = [2, 4, 5, 6, 7, 8]
ο νέος πίνακας που θα προκύψει είναι:
Τ = [1, 2, 3, 4, 4, 5, 6, 6, 7, 8]
@]

Για να προκύψει, λοιπόν, ο παραπάνω πίνακας πρέπει να γίνουν τα παρακάτω βήματα:
# Διαβάζουμε το πρώτο στοιχείο των πινάκων Τ1, Τ2
# Το μικρότερο από αυτά θα γίνει το πρώτο στοιχείο του Τ
# Αυξάνεται ο δείκτης του πίνακα που είχε το μικρότερο στοιχείο
# Συγκρίνονται τα δύο (το νέο για τον πίνακα που είχε το μικρότερο και το παλιό για τον άλλον)
# Το μικρότερο από αυτά θα γίνει το επόμενο στοιχείο του Τ
# Επαναλαμβάνεται η διαδικασία από το βήμα 3 μέχρι να τελειώσουν τα στοιχεία ενός πίνακα
# Για τον πίνακα που δεν έχουν τελειώσει τα στοιχεία, διαβάζονται όλα σειριακά και αποδίδονται στον πίνακα Τ

Από τα παραπάνω παρατηρούμε ότι οι τιμές των δεικτών @@(i, j)@@ για τους δύο πίνακες δεν αυξάνονται σε κάθε βήμα, αλλά υπό συνθήκη (αυξάνεται ο μετρητής του πίνακα που έδωσε το μικρότερο στοιχείο). Αυτό σημαίνει ότι δε μπορούμε να χρησιμοποιήσουμε τη δομή @@Για@@. Επίσης, από το σημείο που ένα πίνακας έδωσε όλα τα στοιχεία του δεν έχει νόημα να γίνεται σύγκριση με τον άλλο πίνακα. Αυτό που χρειάζεται είναι τα υπόλοιπα στοιχεία του πίνακα που έχει ακόμη στοιχεία, να αποδοθούν στο νέο πίνακα.

Ο τμήμα του αλγόριθμου που υλοποιεί την παραπάνω διαδικασία είναι:

(:source lang=algorithm -getcode:) [@
...
i <- 1
j <- 1
k <- 1
Όσο i<=n1 και j<=n2 επανάλαβε
Αν Τ1[i] < T2[j] τότε
T[k] <- T1[i]
i <- i + 1
αλλιώς
T[k] <- T2[j]
j <- j + 1
τέλος_αν
k <- k + 1 ! Ο προορισμός στον νέο πίνακα αυξάνει πάντα
Τέλος_επανάληψης
! Το παραπάνω τμήμα τερματίζεται όταν το i ξεπεράσει το n1 ή όταν το j ξεπεράσει
! το n2, διότι τότε ένας από τους δύο όρους γίνεται ψευδής και συνεπώς ψευδής
! και η συνθήκη στο Όσο. Στο σημείο αυτό ελέγχουμε ποιος πίνακας έχει ακόμη
! στοιχεία για να τα αντιγράψουμε. Τώρα μπορούμε να χρησιμοποιήσουμε το Για
Αν i>n1 τότε ! Ο Τ1 δεν έχει άλλα στοιχεία, οπότε χειριζόμαστε τον Τ2
Για l από j μέχρι n2 ! Από το σημείο που σταμάτησε ο Τ2 (j) μέχρι τέλος
T[k] <- T2[l]
k <- k + 1
Τέλος_επανάληψης
αλλιώς ! Έχει τελειώσει ο Τ2
Για l από i μέχρι n1
T[k] <- T1[l]
k <- k + 1
Τέλος_επανάληψης
Τέλος_αν
...
@]

Τελευταία ενημέρωση: 18-02-2008 (17:58)

Copyright 2008 - Άρης Φεργάδης