Βαγγϋλησ Οικονόμου Διϊλεξη 5 ΠΙΝΑΚΕΣ Δομ. Προγραμ. - Διϊλεξη 5 1
Περιεχόμενα Πύνακεσ Αλφαριθμητικϊ Σκοπόσ μαθόματοσ: Να αναγνωρίζετε πότε είναι απαραίτητη η χρήςη του τύπου του πίνακα, Να δώςετε παραδείγματα δήλωςησ πινάκων και απόδοςησ αρχικών τιμών, Να αναφέρεςτε ςε ςυγκεκριμένο ςτοιχείο πίνακα, Να δηλώνετε και δίνετε αρχική τιμή ςε αλφαριθμητικά Δομ. Προγραμ. - Διϊλεξη 5 2
Πίνακεσ Έννοιεσ κλειδιά: 1. Πίνακασ 2. Τύποσ πίνακα 3. Αλφαριθμητικό 4. Πολυδιάςτατοσ πίνακασ Δομ. Προγραμ. - Διϊλεξη 5 3
Πίνακασ Τύ εύναι ϋνασ πύνακασ; Συλλογό από όμοια αντικεύμενα (πολλϋσ μεταβλητϋσ ιδύου τύπου) Παρϊδειγμα: Πύνακεσ από γραμμικό ϊλγεβρα Δομ. Προγραμ. - Διϊλεξη 5 4
Τύποσ πίνακα O πύνακασ εύναι μια ςυλλογό μεταβλητών ιδύου τύπου, οι οπούεσ εύναι αποθηκευμϋνεσ ςε διαδοχικϋσ θϋςεισ μνόμησ. Χρηςιμοποιεύται για την αποθόκευςη και διαχεύριςη μεγϊλων ποςοτότων δεδομϋνων που ςχετύζονται μεταξύ τουσ και εύναι κοινού τύπου Δομ. Προγραμ. - Διϊλεξη 5 5
Τύποσ πίνακα Παράδειγμα Θϋλουμε να διαχειριςτούμε τισ μϋςεσ ημερόςιεσ θερμοκραςύεσ ενόσ μόνα. Θϋλουμε, για παρϊδειγμα, να βρούμε τη μϋγιςτη, την ελϊχιςτη και τη μϋςη μηνιαύα θερμοκραςύα του Ιανουαρύου. Μια πρώτη προςϋγγιςη, με τα όςα γνωρύζουμε ωσ τώρα, θα όταν να δηλώςουμε 31 μεταβλητϋσ τύπου float. Η δόλωςη 31 μεταβλητών με το δικό τησ όνομα η κϊθε μια, αφενόσ μεν εύναι πολύ κουραςτικό, αφετϋρου δε δημιουργεύ δυςκολύα ςτη διαχεύριςό τουσ. Ο τύποσ του πύνακα δύνει λύςη ςτο πρόβλημϊ μασ. Δομ. Προγραμ. - Διϊλεξη 5 6
Δήλωςη πίνακα 1. H δόλωςη προςδιορύζει το όνομα του πύνακα (temp), τον αριθμό των ςτοιχεύων του (31), καθώσ και τον τύπο του κϊθε ςτοιχεύου (float) και 2. διαβϊζεται «ο temp εύναι ϋνασ πύνακασ με 31 ςτοιχεύα τύπου float». Δομ. Προγραμ. - Διϊλεξη 5 7
Αναφορά ςτοιχείου πίνακα Η αναφορϊ ςε ςτοιχεύο του πύνακα γύνεται με ϋνα ςυνδυαςμό του ονόματοσ του πύνακα και ενόσ αριθμού που προςδιορύζει την τϊξη/ςειρϊ του ςτοιχεύου μϋςα ςτον πύνακα. Έτςι, για τον πύνακα temp: το temp[0] αναφϋρεται ςτο πρώτο ςτοιχείο του πίνακα, το temp[1] ςτο δεύτερο και ούτω καθ εξόσ μϋχρι το temp[30] που αναφϋρεται ςτο τελευταίο Δομ. Προγραμ. - Διϊλεξη 5 8
Απόδοςη αρχικήσ τιμήσ Η απόδοςη τιμόσ κατϊ τη δόλωςη ςτα ςτοιχεύα του πύνακα γύνεται με τη χρόςη του τελεςτό ανϊθεςησ (=). O τελεςτόσ ανϊθεςησ μπαύνει μετϊ τη διϊςταςη του πύνακα και ακολουθεύ μϋςα ςε αγκύλεσ η λύςτα με τισ τιμϋσ που θα αποδοθούν ςτα ςτοιχεύα του πύνακα. Παραδεύγματα: float ar[5] = {1, 2, 3.5, 4, 5}; float ar[5] = {1, 2, 3.5 }; Δομ. Προγραμ. - Διϊλεξη 5 9
Απόδοςη τιμών ςε πίνακα Έχουμε ορύςει ϋνα πύνακα Α, 100 ςτοιχεύων και ακϋραιου τύπου, και επιθυμούμε να αρχικοποιόςουμε τα ςτοιχεύα του πύνακα με την τιμό 0. Α[0]=0; Α[1]=0; Α[2]=0;... Α[99]=0; 100 γραμμϋσ κώδικα for (i=0;i<100;i++) { A[i] = 0; } Δομ. Προγραμ. - Διϊλεξη 5 10
Εκτύπωςη των ςτοιχείων ενόσ πίνακα Έςτω ότι ϋχουμε τον πύνακα Α, με 10 ςτοιχεύα και ακϋραιου τύπου, και επιθυμούμε την εκτύπωςη των ςτοιχεύων του πύνακα ςε κϊποιο ςημεύο του προγρϊμματοσ. for (i=0;i<10;i++) { printf( A[i]=%d\n,A[i]); } for (i=0;i<10;i++) { printf( A[i]=%d,A[i]); } Ποιϊ η διαφορϊ μεταξύ των 2 for; Δομ. Προγραμ. - Διϊλεξη 5 11
Ειςαγωγή τιμών ςε ένα πίνακα από το πληκτρολόγιο Έςτω ότι ϋχουμε τον πύνακα Α, με 10 ςτοιχεύα και ακϋραιου τύπου, και επιθυμούμε την ειςαγωγό τιμών από το πληκτρολόγιο ςτον πύνακα Α ςε κϊποιο ςημεύο του προγρϊμματοσ. scanf( %d,&a[0]); scanf( %d,&a[1]); scanf( %d,&a[2]);... scanf( %d,&a[9]); for (i=0;i<10;i++) { scanf( %d,&a[i]); } Δομ. Προγραμ. - Διϊλεξη 5 12
Αλφαριθμητικά Τα προβλόματα που καλούμαςτε να αντιμετωπύςουμε δεν περιϋχουν μόνο αριθμητικϊ δεδομϋνα. Πολλϋσ εύναι οι περιπτώςεισ κατϊ τισ οπούεσ τα δεδομϋνα ό μϋροσ των δεδομϋνων εύναι ακολουθύεσ χαρακτόρων. Τισ ακολουθύεσ αυτϋσ ονομϊζουμε αλφαριθμητικά. Παρϊδειγμα: ο τύτλοσ και ο ISBN κωδικόσ ενόσ βιβλύου Δομ. Προγραμ. - Διϊλεξη 5 13
Αλφαριθμητικά Η C για να αποθηκεύςει και να διαχειριςτεύ αλφαριθμητικϊ χρηςιμοποιεύ τον τύπο του πύνακα. Ένα αλφαριθμητικό για την C εύναι ϋνασ πύνακασ χαρακτόρων που τερματύζει με τον μηδενικό (null) χαρακτόρα. Ο μηδενικόσ χαρακτόρασ ϋχει ASCII κωδικό 0 και αναπαρύςταται με την ακολουθύα διαφυγόσ \0. Δομ. Προγραμ. - Διϊλεξη 5 14
Δήλωςη Αλφαριθμητικών Δόλωςη ενόσ αλφαριθμητικού: ότι ιςχύει γενικϊ για την δόλωςη ενόσ πύνακα, μόνο που ο τύποσ του πύνακα εύναι χαρακτόρασ (char). Οι δηλώςεισ των μεταβλητών για αποθόκευςη του τύτλου και του ISBN κωδικού ενόσ βιβλύου ϋχουν την παρακϊτω μορφό: char book_title[30], isbn[15]; Δομ. Προγραμ. - Διϊλεξη 5 15
Αλφαριθμητικά Για την απόδοςη αρχικόσ τιμόσ, εκτύπωςησ και ειςαγωγόσ τιμών ςε ϋνα αλφαριθμητικό ιςχύει ότι ιςχύει και για τουσ πύνακεσ γενικϊ. Ωςτόςο, λόγω τησ ςυχνόσ χρόςησ αλφαριθμητικών ϋχουν προκύψει και ϊλλοι τρόποι για πιο ςύντομη επεξεργαςύα των αλφαριθμητικών Δομ. Προγραμ. - Διϊλεξη 5 16
Αλφαριθμητικά Απόδοςη αρχικήσ τιμήσ Η απόδοςη αρχικόσ τιμόσ ςε ϋνα αλφαριθμητικό μπορεύ να γύνει με 2 τρόπουσ 1 οσ τρόποσ: char name[20]= Oikonomou ; 2 οσ τρόποσ: char name[20]={ O, i, k, o, n, o, m, o, u, \0 }; Δομ. Προγραμ. - Διϊλεξη 5 17
Αλφαριθμητικά Ειςαγωγή και Εκτύπωςη Δόλωςη Αλφαρηθμητικού: char a[20]; Ειςαγωγό: scanf( %s,a); Προσοχή: τι συμβαίνει με τον χαρακτήρα &; Εκτύπωςη: printf( %s\n,a); Δομ. Προγραμ. - Διϊλεξη 5 18
Πολυδιάςτατοι πίνακεσ Ένασ πύνακασ μπορεύ να ϋχει ςτοιχεύα τα οπούα εύναι πύνακεσ. Ένασ τϋτοιοσ πύνακασ ονομϊζεται πολυδιάςτατοσ. Η πρόταςη int array[4][12]; δηλώνει τη μεταβλητό array ςαν πύνακα 4 ςτοιχεύων, όπου το κϊθε ϋνα από τα τϋςςερα ςτοιχεύα τησ εύναι πύνακασ 12 ςτοιχεύων τύπου int. Δομ. Προγραμ. - Διϊλεξη 5 19