ΠΟΤΕ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕ ΠΙΝΑΚΕΣ; Όταν θέλουμε να διαχειριστούμε πολλά δεδομένα ίδιου τύπου. (Π.χ. αν θέλουμε τους μέσους όρους 10 μαθητών, δεν θα δηλώσουμε 10 διαφορετικές μεταβλητές, αλλά έναν πίνακα 10 θέσεων). Όταν θέλουμε να συνεχίσουμε τη μαζική επεξεργασία στα ίδια στοιχεία (Π.χ εύρεση ελαχίστου/μεγίστου στοιχείου, υπολογισμός αθροισμάτων κλπ) Όταν πρέπει να εργαστούμε με ταξινομημένα στοιχεία ή να κάνουμε αναζητήσεις
ΠΙΝΑΚΕΣ ΜΕΡΙΚΑ ΜΕΙΟΝΕΚΤΗΜΑΤΑ Απαιτούν τη μνήμη από την αρχή μέχρι το τέλος του προγράμματος. Αν οι απαιτήσεις του προγράμματος αλλάξουν και χρειάζονται περισσότερες θέσεις στον πίνακα, πρέπει να αλλάξουμε το πρόγραμμα. Τα παραπάνω, είναι σχεδόν ασήμαντα μπροστά στη χρησιμότητα των πινάκων, συνεπώς η χρήση τους συνιστάται ανεπιφύλακτα, παρόλο που μερικά προβλήματα λύνονται και χωρίς αυτούς.
ΠΙΝΑΚΕΣ ΤΥΠΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ Μερικές από τις πιο τυπικές επεξεργασίες στα στοιχεία ενός πίνακα είναι: Υπολογισμός αθροισμάτων Εύρεση μεγίστου/ελαχίστου στοιχείου Ταξινόμηση στοιχείων Αναζητήσεις Συγχωνεύσεις δύο ή περισσότερων πινάκων Σχεδόν σε όλες τις επεξεργασίες πινάκων, χρειάζεται να εξετάσουμε στοιχείο προς στοιχείο τα περιεχόμενά τους. Η διαδικασία ονομάζεται «σάρωση» του πίνακα
ΠΙΝΑΚΕΣ Εκχώρηση τιμών και χρήση τους Για να εισάγουμε τιμή σε μια θέση ενός πίνακα, ακολουθούμε ότι ισχύει και στις απλές μεταβλητές, μόνο που κάνουμε χρήση του δείκτη θέσης (και όχι μόνο το όνομα του πίνακα): Αριθμ[ 5 ] 26 Πελάτης[ i ] “ΙΩΑΝΝΟΥ” ΔΙΑΒΑΣΕ Ημέρα_εβδομάδας[ 12, 3 ] ΔΙΑΒΑΣΕ Θερμοκρασία[ i ] Για να χρησιμοποιήσουμε την τιμή ενός στοιχείου του πίνακα: Πλήθος Πλήθος + Αριθμ[ i ] ΓΡΑΨΕ Πελάτης[ i + 4, 43 ] Πίν[ i ] Πίν[ i ] + 10
ΠΙΝΑΚΕΣ Είναι στατικές δομές δεδομένων που αποθηκεύουν δεδομένα ίδιου τύπου (π.χ. Ακεραίους, Χαρακτήρες, κλπ) Μπορούν να είναι οποιασδήποτε διάστασης (μονοδιάστατοι (1Δ), δισδιάστατοι (2Δ), Νδιάστατοι). Η αρίθμηση όλων των διαστάσεων ξεκινά από το 1. Η αναφορά στα στοιχεία τους, γίνεται με τη χρήση του ονόματός τους, σε συνδυασμό με τον δείκτη θέσης τους. (π.χ. Ον[ 3 ], Τηλ[ 8 ], Θερμ[ 2, 5 ] κλπ). Ειδικά για τους δισδιάστατους, όταν το μέγεθος των δύο διαστάσεων είναι ίδιο, λέγονται τετραγωνικοί (όπως και στα μαθηματικά). Η δομή επανάληψης «ΓΙΑ» είναι η καταλληλότερη για την προσπέλαση των στοιχείων. Ο δείκτης της επανάληψης, χρησιμοποιείται ως δείκτης στα στοιχεία του πίνακα Γράμμα [ 7 ] Γ Τ Α Ν Ρ Ε Ψ Γράμμα[4] i Θερμ[ 3,7 ] 4 18 8 5 14 35 3 7 9 15 31 2 38 24 53 Θερμ[3,6] i j Θερμ[1,4,3] 4 48 8 5 14 35 3 7 9 15 31 2 58 24 53 18 38 Θερμ[ 3,7,3 ] i k j
ΠΙΝΑΚΕΣ ΠΩΣ ΓΙΝΕΤΑΙ Η ΣΑΡΩΣΗ ΜΟΝΟΔΙΑΣΤΑΤΟΥ ΠΙΝΑΚΑ Χρησιμοποιούμε κάποια δομή επανάληψης (συνήθως την «ΓΙΑ»). Η μεταβλητή της δομής επανάληψης, χρησιμοποιείται ως δείκτης στα στοιχεία του πίνακα K 10 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Πίνακας[ i ] K K K + 5 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ i Πίνακας[ 5 ] Πίνακας[ ] 1 2 3 4 5 10 15 20 25 30
ΠΙΝΑΚΕΣ ΜΟΝΟΔΙΑΣΤΑΤΟΣ ΠΙΝΑΚΑΣ – Παράδειγμα ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[10] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΓΡΑΨΕ “ΔΩΣΕ TON “, i, “o ΑΡΙΘΜΟ ” ΔΙΑΒΑΣΕ Αριθμός[ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ i ΑΠΟ 10 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1 ΓΡΑΨΕ Αριθμός[ i ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων με αριθμούς από το πληκτρολόγιο Να τους εμφανίσετε στην οθόνη, με την αντίστροφη σειρά εισαγωγής τους
ΠΙΝΑΚΕΣ ΜΗΔΕΝΙΣΜΟΣ ΣΤΟΙΧΕΙΩΝ ΜΟΝΟΔΙΑΣΤΑΤΟΥ ΠΙΝΑΚΑ ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[100] ΧΑΡΑΚΤΗΡΕΣ: Κείμενα[100] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 100 Αριθμός[ i ] 0 Κείμενα[ i ] “” ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Δίδονται δύο πίνακες 100 θέσεων. Ο ένας περιέχει αριθμούς και ο άλλος χαρακτήρες. Να μηδενιστούν όλα τα στοιχεία του πρώτου Τα στοιχεία του δεύτερου να αντικατασταθούν με τον κενό χαρακτήρα (“”), δηλ. να διαγραφούν τα κείμενα
ΠΙΝΑΚΕΣ ΑΝΤΙΓΡΑΦΗ ΣΕ ΑΛΛΟ ΠΙΝΑΚΑ ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[5], Νέος[5] ΑΡΧΗ Αριθμός[ 1 ] 5 Αριθμός[ 2 ] 7 Αριθμός[ 3 ] 14 Αριθμός[ 4 ] 3 Αριθμός[ 5 ] 26 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Νέος[ i ] Αριθμός[ 6 – i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 5 θέσεων, με τους αριθμούς: 5,7,14,3,26 Μετά να αντιγράψετε αυτά τα στοιχεία, σε έναν νέο πίνακα με την αντίστροφη σειρά
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ Να γίνει η μαθηματική πρόσθεση των παρακάτω πινάκων Α και Β ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Α[5], Β[5], Γ[5] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 Γ [ i ] Α [ i ] + Β [ i ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 4 7 3 2 5 A 2 9 3 4 6 B + = _ _ _ _ _ Γ
ΠΙΝΑΚΕΣ ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΣΤΟΙΧΕΙΟΥ ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, Αριθμός[10], θέση_μεγ ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ “ΔΩΣΕ TON ”, i , “o ΑΡΙΘΜΟ (θετικό) ” ΔΙΑΒΑΣΕ Αριθμός[ i ] ΜΕΧΡΙΣ_ΟΤΟΥ Αριθμός[ i ] > 0 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ θέση_μεγ 1 ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 10 ΑΝ Αριθμός[ i ] > Αριθμός[ θέση_μεγ ] ΤΟΤΕ θέση_μεγ i ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ “Θέση = ”, θέση_μεγ ΓΡΑΨΕ ”Μέγιστος = “, Αριθμός[ θέση_μεγ ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν μονοδιάστατο πίνακα 10 θέσεων, με τη βαθμολογία (>0) των μαθητών σε ένα μάθημα από το πληκτρολόγιο. Μετά, να εμφανίσετε το μεγαλύτερο στοιχείο του καθώς και τη θέση του Θεωρήστε ότι οι αριθμοί δεν επαναλαμβάνονται
ΠΙΝΑΚΕΣ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ (Δισδιάστατοι-2Δ) Για να αναφερθούμε σε ένα στοιχείο δισδιάστατου πίνακα, χρησιμοποιούμε δύο δείκτες θέσης, π.χ. Γράμμα[ 2, 3 ] Ο 1ος δείκτης είναι η γραμμή και ο 2ος δείκτης είναι η στήλη του στοιχείου Για τη σάρωση των στοιχείων του πίνακα χρησιμοποιούμε την εντολή ΓΙΑ μέσα σε μια άλλη ΓΙΑ Γράμμα 3 Α Η Ρ Τ 2 Γ Σ Ξ Ο Ψ Ζ Ν
ΠΙΝΑΚΕΣ ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ Η ΣΑΡΩΣΗ ΠΙΝΑΚΑ 2 Δ ΠΙΝΑΚΕΣ ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ Η ΣΑΡΩΣΗ ΠΙΝΑΚΑ 2 Δ Να γεμίσετε δισδιάστατο πίνακα (m=4 x n=5), με ονόματα από το πληκτρολόγιο. Στην παρακάτω απεικόνιση, η σάρωση γίνεται κατά γραμμές (οριζόντια), όπως το διάβασμα ενός βιβλίου. Με την κατάλληλη χρήση των δεικτών θέσης, μπορούμε να σαρώσουμε τον πίνακα κατά στήλες (κάθετα) Ο εσωτερικός βρόχος ΓΙΑ εκτελείται από την αρχή, για κάθε μία επανάληψη του εξωτερικού Αλγόριθμος Πίνακες Δεδομένα // ονόματα // ! Οριζόντια Για i από 1 μέχρι 4 Για j από 1 μέχρι 5 Διάβασε ονόματα[ i , j ] Τέλος_επανάληψης ! Κάθετα Τέλος Πίνακες ονόματα[4,5] 1 2 3 4 5 j = i =
ΠΙΝΑΚΕΣ ΥΠΟΛΟΓΙΣΜΟΙ ΣΕ ΔΥΟ ΔΙΑΣΤΑΣΕΙΣ #1 ΠΡΟΓΡΑΜΜΑ ΜΟ_Πίνακα_2Δ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[4,5], s ΑΡΧΗ s 0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4 ΓΙΑ j από 1 ΜΕΧΡΙ 5 ΔΙΑΒΑΣΕ Α[ i, j ] s s + Α[ i, j ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ s / (4*5) ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να γεμίσετε έναν δισδιάστατο πίνακα 4x5 με αριθμούς από το πληκτρολόγιο. Μετά να βρείτε τον μέσο όρο τους.
ΠΙΝΑΚΕΣ ΕΥΡΕΣΗ “ΕΓΓΡΑΦΗΣ” ΣΕ ΔΙΣΔΙΑΣΤΑΤΟ ΠΙΝΑΚΑ Για τους 300 μαθητές ενός δημοτικού σχολείου, είναι γνωστό το μητρώο (Α.Μ.) και η ηλικία τους. Τα παραπάνω δεδομένα, είναι ήδη αποθηκευμένα με τη χρήση δισδιάστατου πίνακα, όπου στην 1η στήλη είναι οι Α.Μ και στη 2η οι ηλικίες τους Να εμφανίσετε τον Α.Μ. του μαθητή με τη μεγαλύτερη ηλικία ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, μαθητές[300,2], θέση_μεγ ΑΡΧΗ θέση_μεγ 1 ! Αρχική υπόθεση ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 300 ΑΝ μαθητής[ i, 2 ] >μαθητής[ θέση_μεγ, 2 ] ΤΟΤΕ θέση_μεγ i ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ “Το Α.Μ. του μεγαλύτερου είναι :“ ΓΡΑΨΕ μαθητής[ θέση_μεγ,1 ] ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 1 2 ΘΕΣΗ Α Μ ΗΛ 152 6 253 8 3 231 11 ... 298 63 12 299 82 7 300 58 10
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ #1 ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[5,5] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5 ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 5 ΑΝ i = j TOTE Α [ i, j ] 1 ΑΛΛΙΩΣ Α [ i, j ] 0 ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Να δημιουργήσετε τον παρακάτω τετραγωνικό πίνακα (πίνακας “ταυτότητα” στα μαθηματικά) 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 Α
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑΤΙΚΑ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ #2 Να προσθέσετε τους παρακάτω πίνακες Α και Β ΠΡΟΓΡΑΜΜΑ Πίνακες ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: i, j, Α[3,3], Β[3,3], Γ[3,3] ΑΡΧΗ ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 3 ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3 Γ [ i, j ] Α[ i, j ] + B[ i, j ] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 3 1 7 9 3 4 5 2 8 3 5 2 2 1 6 6 3 4 + Α Β Γ _ _ _ _ _ _ _ _ _
ΠΙΝΑΚΕΣ ΥΠΟΛΟΓΙΣΜΟΙ ΣΕ ΔΥΟ ΔΙΑΣΤΑΣΕΙΣ #2 (σχ. βιβλίο) Στον παρακάτω δισδιάστατο πίνακα (m=4 x n=5), να βρεθεί το άθροισμα κατά γραμμή, κατά στήλη και συνολικά (κάτι σαν τους υπολογισμούς σε Excel) Αλγόριθμος Αθρ_Πίνακα Δεδομένα // m, n, table, col, row // sum 0 Για i από 1 μέχρι m row[i] 0 Τέλος_επανάληψης Για j από 1 μέχρι n col[j] 0 sum sum + table[i, j] row[ i ] row[ i ] + table[i, j] col[ j ] col[ j ] + table[i, j] Αποτελέσματα // row, col, sum // Τέλος Αθρ_Πίνακα 4 5 2 8 14 3 7 9 12 21 15 23 11 6 table[4,5] 46 27 41 25 35 24 45 50 55 174 col[5] row[4] i j 1 sum =