Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 9: Πίνακες Δισδιάστατοι Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε.
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και την Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Σκοπός της ενότητας είναι να κατανοήσει ο φοιτητής τη δημιουργία και χρησιμότητα του δισδιάστατου πίνακα, την πρόσβαση στα στοιχεία ενός δισδιάστατου πίνακα, την αρχικοποίησή του και την εμπέδωση όλων των παραπάνω μέσα από παραδείγματα ώστε να απλοποιηθούν οι εργασίες προγραμματισμού για την επεξεργασία μεγάλου πλήθους δεδομένων. 4
Περιεχόμενα ενότητας Δισδιάστατος Πίνακας. Δήλωση Πίνακα. Πρόσβαση στα Στοιχεία Δισδιάστατου Πίνακα. Αρχικοποίηση Πίνακα. Παραδείγματα. 5
Δισδιάστατοι Πίνακες Οι δισδιάστατοι πίνακες στη C μοιάζουν με μαθηματικούς πίνακες δύο διαστάσεων και αποτελούνται από γραμμές και στήλες. Αποτελούνται από στοιχεία του ιδίου τύπου, όπως και οι μονοδιάστατοι πίνακες. 6
Δήλωση δισδιάστατου πίνακα Τύπος_δεδομένων όνομα_πίνακα[πλήθος_γραμμών] [πλήθος_στηλών]; Π.χ. int a[3][4]; Κάθε θέση μνήμης έχει δύο αριθμούς από τους οποίους ο ένας προσδιορίζει τη γραμμή και ο άλλος τη στήλη στην οποία βρίσκεται η θέση μνήμης. 7
Βασικά χαρακτηριστικά του Δισδιάστατου Πίνακα (1) Ο τύπος δεδομένων του πίνακα αντιστοιχεί στον τύπο δεδομένων των στοιχείων του πίνακα. Δηλαδή μπορεί να είναι int, float, char, κτλ. Ένας πίνακας κρατάει δεδομένα του ίδιου τύπου και μόνο. Το όνομα είναι το όνομα που δίνουμε σε έναν πίνακα όπως σε μια απλή μεταβλητή, π.χ. Α, tei, deep, κλπ. 8
Δήλωση Πίνακα Παράδειγμα: int Α [ 2 ] [ 4 ]; Δηλώνει ένα δισδιάστατο πίνακα 2x4 με όνομα Α. float B[3][5]; Δηλώνει ένα δισδιάστατο πίνακα 3x5 με όνομα B. 9
Πρόσβαση σε στοιχείο δισδιάστατου πίνακα (1) Πρόσβαση σε συγκεκριμένο στοιχείο ενός 2- διάστατου πίνακα μπορούμε να κάνουμε με τη βοήθεια δύο δεικτών, από τους οποίους ο πρώτος δείχνει τη γραμμή και ο δεύτερος τη στήλη στην οποία βρίσκεται το αντίστοιχο στοιχείο. Όταν λέμε ότι διαβάζουμε έναν πίνακα, εννοούμε ότι διαβάζουμε στοιχείοστοιχείο του πίνακα 10
Πρόσβαση σε στοιχείο δισδιάστατου πίνακα (2) Είναι σημαντικό να αναφερθεί ότι το πρώτο στοιχείο ενός πίνακα έχει δείκτες 0 για την 1η διάσταση (γραμμή) και 0 για τη 2η (στήλη). Παράδειγμα: int M[2][4]; το 1ο στοιχείο του πίνακα M είναι το M[0][0], και το τελευταίο το M[1][3] (2η γραμμή και 4η στήλη). 11
Αρχικοποίηση Δισδιάστατου Πίνακα (1) Όπως στο μονοδιάστατο πίνακα και τα στοιχεία ενός δισδιάστατου πίνακα μπορούν να αρχικοποιηθούν μαζί με τη δήλωσή του. Οι αρχικές τιμές αποδίδονται στα στοιχεία του πίνακα ανά γραμμή. Παράδειγμα int B[3][4] = {11,3,6,7,8,9,3,7,8,9,21,33}; 12
Αρχικοποίηση Δισδιάστατου Πίνακα (2) Αν η λίστα των τιμών είναι μικρότερη από το πλήθος των στοιχείων του πίνακα, ο μεταγλωττιστής αποδίδει την τιμή 0 στα υπόλοιπα στοιχεία του δισδιάστατου πίνακα. Παράδειγμα: int A[3][3]={2,4,6}; τα στοιχεία της δεύτερης και τρίτης γραμμής γίνονται 0. 13
Αρχικοποίηση Δισδιάστατου Πίνακα (3) Σε αντίθεση με το μονοδιάστατο πίνακα, δεν μπορούμε να δηλώσουμε το εξής: int x[] []={0,1,2,3,4,5,6}, χωρίς να δηλώσουμε τις ακριβείς διαστάσεις, γιατί δε γίνεται κατανοητό το ποιες είναι οι διαστάσεις του πίνακά μας. Έτσι, ο πίνακας θα μπορούσε να είναι 6Χ1, 3Χ2, 2Χ3, 1Χ6. 14
Τοποθέτηση τιμών σε δισδιάστατο πίνακα Στην περίπτωση ενός δισδιάστατου πίνακα χρειαζόμαστε δύο δομές for, τη μια εμφωλευμένη στην άλλη. Η πρώτη μετράει τις γραμμές του πίνακα, ξεκινώντας από τη θέση 0, και η δεύτερη τις στήλες του. 15
Δημιουργία και εμφάνιση δισδιάστατου πίνακα Σχήμα 1. Δημιουργία και εμφάνιση δισδιάστατου πίνακα, πηγή: Διδάσκων, 2014. 16
Άθροισμα των στοιχείων ενός δισδιάστατου πίνακα int A[2][2]; int i,j,sum; sum=0; for(i=0;i<2;i++) { for(j=0;j<2;j++) { printf("dwse to stoixeio A(%d,%d)\n", i, j); scanf("%d", &A[i][j]); sum=sum+a[i][j];} } 17
Υπολογισμός αθροίσματος κάθε γραμμής δισδιάστατου πίνακα for(i=0;i<2;i++) {ath=0; {for(j=0;j<2;j++) ath=ath+a[i][j]; printf("grammh %d = %d\n",i+1,ath);}} 18
Υπολογισμός αθροίσματος κάθε στήλης δισδιάστατου πίνακα for(j=0;j<2;j++) {ath_sth=0; {for(i=0;i<2;i++) ath_sth=ath_sth+a[i][j]; printf("sthlh %d = %d\n",j+1,ath_sth);}} 19
Βιβλιογραφία μαθήματος Kernighan, B. & Ritchie D. (1990). H Γλώσσα Προγραμματισμού C, Κλειδάριθμος, Αθήνα. Καρολίδης Δ. (2013). Μαθαίνετε εύκολα C. ISBN 978-960- 93-5034-1. Τσελίκης Γ. & Τσελίκας, Ν. (2012).C Από τη θεωρία στην Εφαρμογή (β Έκδοση). ISBN: 978-960-93-1961-4. Χατζηγιαννάκης, Ν. (2012). Η γλώσσα C σε βάθος. Κλειδάριθμος, Αθήνα. 20
Τέλος Ενότητας