Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 8: Πίνακες Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε.
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και την Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Σκοπός της ενότητας είναι να κατανοήσει ο φοιτητής τη χρησιμότητα των πινάκων στον προγραμματισμό. Επίσης τη δημιουργία μονοδιάστατου πίνακα της C, την αρχικοποίηση, την πρόσβαση στα στοιχεία ενός πίνακα και την εμπέδωση του μονοδιάστατου πίνακα μέσα από παραδείγματα και ασκήσεις. 4
Περιεχόμενα ενότητας Πίνακες. Δήλωση Μονοδιάστατου Πίνακα. Πρόσβαση Στοιχείων Μονοδιάστατου Πίνακα. Αρχικοποίηση Μονοδιάστατου Πίνακα. Παραδείγματα. 5
Πίνακες (1) Ο πίνακας είναι μια από τις βασικότερες Δομές Δεδομένων, είναι μια ομάδα θέσεων μνήμης στις οποίες γίνεται αναφορά με ένα κοινό όνομα. Ο πίνακας διευκολύνει κατά πολύ τη σύνταξη κώδικα σε οποιοδήποτε προγραμματιστικό περιβάλλον. 6
Πίνακες (2) Χρησιμοποιούμε πίνακες όταν πρόκειται να αποθηκεύσουμε και να επεξεργαστούμε μεγάλες ποσότητες ομοειδών τιμών. Ομοειδείς σημαίνει ότι οι τιμές είναι του ίδιου τύπου π.χ. όλες ακέραιες, όλες πραγματικές, κτλ. 7
Πίνακες (3) Ένας πίνακας στην ουσία είναι ένα σύνολο μεταβλητών ίδιου τύπου, οι οποίες μοιράζονται το ίδιο όνομα και καταλαμβάνουν διαδοχικές θέσεις στη μνήμη του υπολογιστή. Η προσπέλαση των μεταβλητών γίνεται χρησιμοποιώντας το όνομα του πίνακα μαζί με έναν αριθμό αναφοράς. 8
Γενικός τύπος μονοδιάστατου πίνακα Τύπος_δεδομένων όνομα_πίνακα[μέγεθος]; π.χ. int b[20]; Ο πίνακας αποτελεί μια ομάδα θέσεων μνήμης τη μια πάνω στην άλλη. Κάθε θέση μνήμης έχει έναν αριθμό αναφοράς που ξεκινάει από το 0. Στο παραπάνω παράδειγμα ο πίνακας b[20] έχει 20 θέσεις μνήμης από b[0] μέχρι b[19]. 9
Βασικά χαρακτηριστικά του Πίνακα (1) Ο τύπος δεδομένων του πίνακα αντιστοιχεί στον τύπο δεδομένων των στοιχείων του πίνακα. Δηλαδή μπορεί να είναι int, float, char κτλ. Ένας πίνακας κρατάει δεδομένα του ίδιου τύπου και μόνο. Το όνομα είναι το όνομα που δίνουμε σε έναν πίνακα όπως σε μια απλή μεταβλητή, π.χ. Α, pinakas, κλπ. 10
Βασικά χαρακτηριστικά του Πίνακα (2) Το μέγεθος ενός πίνακα μπορεί να είναι ν- διάστατος, όπου ν ακέραιος. Η πιο απλή μορφή πίνακα είναι ο μονοδιάστατος όπου τα στοιχεία του κρατούνται σε μια στήλη ή σε μια γραμμή. Π.χ. μονοδιάστατος 4 θέσεων. Σχήμα 1. Μονοδιάστατοι πίνακες, πηγή: Διδάσκων, 2014. 11
Δήλωση Πίνακα Παράδειγμα: int arr[100]; Δηλώνει έναν πίνακα με όνομα arr, 100 θέσεων και κάθε ένα από αυτά τα στοιχεία είναι ένας ακέραιος αριθμός. Το πλήθος των στοιχείων του πίνακα δεν μπορεί να αλλάξει κατά την εκτέλεση του προγράμματος καθώς επίσης και ο τύπος τους. 12
Αναφορά σε στοιχείο πίνακα (1) Αναφορά σε συγκεκριμένο στοιχείο ενός πίνακα μπορούμε να κάνουμε με το όνομα του πίνακα συνοδευόμενο από τον δείκτη θέσης. Ο δείκτης είναι ένας ακέραιος αριθμός που τοποθετείται μέσα στις αγκύλες του πίνακα και καθορίζει σε ποιο στοιχείο του πίνακα αναφερόμαστε. 13
Αναφορά σε στοιχείο πίνακα (2) Το πρώτο στοιχείο ενός πίνακα έχει δείκτη 0, άρα το τελευταίο έχει δείκτη το μέγεθος του πίνακα πλην ένα. Παράδειγμα: float table[100]; Δηλώνει τον πίνακα table με 100 στοιχεία, τύπου float, τα οποία είναι table[0],table[1],..table[99]. 14
Αρχικοποίηση Πίνακα (1) Oταν λέμε ότι αρχικοποιούμε ένα μονοδιάστατο πίνακα, εννοούμε ότι δίνουμε αρχικές τιμές στα στοιχεία του πίνακα ταυτόχρονα με τη δήλωσή του, περικλείοντάς τις σε άγκιστρα και χωρίζοντας τις με κόμματα. Παράδειγμα int B[4] = {12, -33, 10, 48} 15
Αρχικοποίηση Πίνακα (2) Στην περίπτωση που κάνουμε αρχικοποίηση τιμών και μόνο, όταν δηλώνουμε τον πίνακα δεν είναι απαραίτητο να ορίσουμε πλήθος στοιχειών. Μπορούμε να δηλώσουμε έναν πίνακα ως εξής: int a[ ]={25,24,30}; 16
Αρχικοποίηση Πίνακα (3) Στην περίπτωση που κάνουμε τη δήλωση int a[5]={25,24,30};, τότε εκχωρούμε τιμή μόνο στα τρία πρώτα στοιχεία του πίνακα a και αφήνουμε τα άλλα απροσδιόριστα (συνήθως τους αποδίδεται η τιμή 0, μέχρι να τα ορίσουμε εμείς μέσα από το πρόγραμμα). 17
Παραδείγματα (1) Να δώσουμε στοιχεία σε έναν πίνακα Α[5] #include <stdio.h> #include <stdlib.h> int main(void) {int i; int A[5]; for(i=0; i<=4; i++) { printf("dοse timi sto stoixeio [%d] toy pinaka A: \n", i+1); scanf("%d", &A[i]); } system("pause"); return 0; } 18
Παραδείγματα (2) Στο προηγούμενο παράδειγμα για να τυπώσουμε τον πίνακα προσθέτουμε τις παρακάτω εντολές: for(i=0; i<=4; i++) { printf(«to [%d]ï stoixeio toy pinaka A:%d \n", i+1,a[i]); } 19
Παραδείγματα (3) Το πρόγραμμα γεμίζει τον a[10] και βρίσκει τον μεγαλύτερο και μικρότερο αριθμό του πίνακα. Σχήμα 2. Παράδειγμα πίνακα, πηγή: Διδάσκων, 2014. 20
Βιβλιογραφία μαθήματος 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 σε βάθος. Κλειδάριθμος, Αθήνα. 21
Τέλος Ενότητας