Διάλεξη 9η: Πίνακες (arrays)

Σχετικά έγγραφα
ΗΥ-150. Πίνακες (Arrays)

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

Διάλεξη 11η: Δείκτες, μέρος 1

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

Μεθόδων Επίλυσης Προβλημάτων

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

ΗΥ-150. Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διάλεξη 5η: Εντολές Επανάληψης

Προγραμματισμός Η/Υ (ΤΛ2007 )

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Εισαγωγή στον Προγραμματισμό (με. τη C)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Εισαγωγή στον Προγραμματισμό

Διάλεξη 12η: Δείκτες, μέρος 2

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων. 14. Πίνακες Ι. Ιωάννης Κατάκης. ΕΠΛ 032: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων

Διάλεξη 8η: Αλφαριθμητικά (strings)

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Γλώσσες Προγραμματισμού

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Διάλεξη 15η: Αναδρομή, μέρος 1ο

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

Μεθόδων Επίλυσης Προβλημάτων

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

16. Πίνακεσ και Συναρτήςεισ

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Διαδικασιακός Προγραμματισμός

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Μεθόδων Επίλυσης Προβλημάτων

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 5: Δείκτες και Συναρτήσεις

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις (Διάλεξη 18)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Η γλώσσα προγραμματισμού C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Συστημάτων

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διαδικαστικός Προγραμματισμός

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Οντοκεντρικός Προγραμματισμός

Τύποι Δεδομένων Είσοδος/Έξοδος

Διάλεξη 6: Δείκτες και Πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Εισαγωγή στον δομημένο προγραμματισμό

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Ι (ΗΥ120)

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι (ΗΥ120)

Transcript:

Διάλεξη 9η: Πίνακες (arrays) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Arrays CS100, 2016-2017 1 / 17

Εισαγωγή Έστω ότι θέλουμε να αποθηκεύσουμε 100 ονόματα φοιτητών και τους βαθμούς τους Πως θα το κάναμε αυτό με μεταβλητές; Πως θα μπορούσαμε να πούμε με αυτό το τρόπο ταξινόμησε τους βαθμούς και τύπωσε τους ; Πως θα μπορούσαμε να πούμε τύπωσε μόνο εκείνους που πέρασαν το μάθημα ; ΛΥΣΗ: Πίνακες Συλλογή μεταβλητών ίδιου τύπου Σταθερό μέγεθος Ν στοιχεία: από 0 έως N-1 Στη C η αρίθμηση ξεκινάει από το 0 Πρατικάκης (CSD) Arrays CS100, 2016-2017 2 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Γενική μορφή type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Ο τύπος δεδομένων του κάθε Γενική μορφή στοιχείου του πίνακα type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Γενική μορφή Το όνομα του πίνακα type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Ο αριθμός στοιχείων (ή Γενική μορφή μήκος) του πίνακα type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Γενική μορφή type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Γενική μορφή type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Γενική μορφή Το όνομα του πίνακα array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες Πίνακας Σύνολο από συνεχόμενες θέσεις μνήμης Όλες οι θέσεις περιέχουν δεδομένα του ίδιου τύπου Δήλωση πίνακα Γενική μορφή type array_name[position_number]; Ένα στοιχείο του πίνακα προσδιορίζεται από Το όνομα του πίνακα Τη θέση του στοιχείου μέσα στον πίνακα Έκφραση που αναφέρεται σε πίνακα Ο δείκτης θέσης (index) Γενική μορφή του στοιχείου array_name[position_number] Πρατικάκης (CSD) Arrays CS100, 2016-2017 3 / 17

Πίνακες (2) Αρίθμηση των στοιχείων Πρώτο στοιχείο στο δείκτη θέσης (index) 0 Για πίνακα μεγέθους N, τελευταίο στοιχείο στη θέση N - 1 c[0], c[1],, c[n 1] Δήλωση πολλών πινάκων ίδιου τύπου Όπως και οι μεταβλητές int b[100], x[27]; Τα στοιχεία του πίνακα χρησιμοποιούνται σαν συνηθισμένες μεταβλητές c[0] = 3; if (x[0] == 3) { printf( %d, c[0]); Μπορούμε να κάνουμε πράξεις μέσα στο δείκτη c[5-2] == c[rand() % 42] c[n - i - 1] = c[i] Εμφωλιασμένοι δείκτες: c[c[c[1]]] Προσοχή: Ο δείκτης πίνακα (index) είναι πάντα ακέραιος c[i] μόνο άν int i; Πρατικάκης (CSD) Arrays CS100, 2016-2017 4 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το i παίρνει τιμές από 0 έως 99 Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το array[i] είναι το i-οστό στοιχείο του πίνακα Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το &(array[i]) είναι η διεύθυνση του i-οστού στοιχείου του πίνακα Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το x είναι 5 Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το 10 * x είναι έκφραση που πολλαπλασιάζει 2 ακέραιους Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το 10 * x είναι ακέραια έκφραση που όταν υπολογιστεί θα δώσει τιμή 50 Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Το array[10 * x] είναι σωστή έκφραση που έχει τύπο double και θα δώσει τιμή ίση με τα περιεχόμενα του 50-στού στοιχείου Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Υπολογισμός στοιχείου πίνακα Η αναφορά σε πίνακα είναι έκφραση στη C array_name[expression] Πρώτα υπολογίζεται η τιμή του expression Η τιμή του expression πρέπει να είναι ακέραια (int) Η τιμή ολόκληρης της έκφρασης array_name[expression] είναι το στοιχείο του πίνακα array_name που αντιστοιχεί στην συγκεκριμένη θέση που δίνεται από το expression ο τύπος ολόκληρης της έκφρασης είναι ο τύπος των στοιχείων του πίνακα Παράδειγμα double array[100]; int i, x = 5; for (i = 0; i < 100; ++i) { scanf( %lf, &(array[i])); i = (int) (array[10 * x]); Η τιμή αυτή θα μετατραπεί σε ακέραιο και θα αποθηκευτεί στο i Πρατικάκης (CSD) Arrays CS100, 2016-2017 5 / 17

Δήλωση πινάκων Όταν δηλώνουμε πίνακες ως μεταβλητές καθορίζουμε: Τύπο Όνομα Αριθμό στοιχείων Παραδείγματα int c[30]; float myarray[31337]; Όταν δηλώνουμε πίνακες ως ορίσματα στον ορισμό συναρτήσεων καθορίζουμε: Όνομα Τύπο int myfunction(int c[]){ Όταν δηλώνουμε πίνακες ως ορίσματα στη δήλωση συναρτήσεων καθορίζουμε: Τύπο int myfunction(int []); Πρατικάκης (CSD) Arrays CS100, 2016-2017 6 / 17

Δήλωση πινάκων Όταν δηλώνουμε πίνακες ως μεταβλητές καθορίζουμε: Τύπο Όνομα Αριθμό στοιχείων Παραδείγματα int c[30]; float myarray[31337]; Το c είναι πίνακας 30 ακεραίων Όταν δηλώνουμε πίνακες ως ορίσματα στον ορισμό συναρτήσεων καθορίζουμε: Όνομα Τύπο int myfunction(int c[]){ Όταν δηλώνουμε πίνακες ως ορίσματα στη δήλωση συναρτήσεων καθορίζουμε: Τύπο int myfunction(int []); Πρατικάκης (CSD) Arrays CS100, 2016-2017 6 / 17

Δήλωση πινάκων Όταν δηλώνουμε πίνακες ως μεταβλητές καθορίζουμε: Τύπο Όνομα Αριθμό στοιχείων Παραδείγματα int c[30]; float myarray[31337]; Το myarray είναι πίνακας 31337 αριθμών κινητής υποδιαστολής Όταν δηλώνουμε πίνακες ως ορίσματα στον ορισμό συναρτήσεων καθορίζουμε: Όνομα Τύπο int myfunction(int c[]){ Όταν δηλώνουμε πίνακες ως ορίσματα στη δήλωση συναρτήσεων καθορίζουμε: Τύπο int myfunction(int []); Πρατικάκης (CSD) Arrays CS100, 2016-2017 6 / 17

Δήλωση πινάκων Όταν δηλώνουμε πίνακες ως μεταβλητές καθορίζουμε: Τύπο Όνομα Αριθμό στοιχείων Παραδείγματα int c[30]; float myarray[31337]; Όταν δηλώνουμε πίνακες ως ορίσματα στον ορισμό συναρτήσεων καθορίζουμε: Όνομα Τύπο int myfunction(int c[]){ Όταν δηλώνουμε πίνακες ως ορίσματα στη δήλωση συναρτήσεων καθορίζουμε: Τύπο int myfunction(int []); Πρατικάκης (CSD) Arrays CS100, 2016-2017 6 / 17

Δήλωση πινάκων Όταν δηλώνουμε πίνακες ως μεταβλητές καθορίζουμε: Τύπο Όνομα Αριθμό στοιχείων Παραδείγματα int c[30]; float myarray[31337]; Όταν δηλώνουμε πίνακες ως ορίσματα στον ορισμό συναρτήσεων καθορίζουμε: Όνομα Τύπο int myfunction(int c[]){ Όταν δηλώνουμε πίνακες ως ορίσματα στη δήλωση συναρτήσεων καθορίζουμε: Το όνομα επιτρέπεται Τύπο αλλά είναι προεραιτικό int myfunction(int []); Πρατικάκης (CSD) Arrays CS100, 2016-2017 6 / 17

Αρχικοποίηση Αρχικοποίηση int n[5] = { 1, 2, 3, 4, 5 ; Αν δεν υπάρχουν αρκετά στοιχεία για αρχικοποίηση, τότε τα υπολοιπόμενα γίνονται 0 Όλα τα στοιχεία 0: int n[5] = { 0 ; for (i = 0; i < 5; ++i) { n[i] = 0; Αν βάλουμε πιο πολλά στοιχεία από όσα έχει ο πίνακας τότε θα πάρουμε λάθος Αν αρχικοποιούμε τον πίνακα μπορούμε να μη δώσουμε μέγεθος και ο πίνακας θα είναι όσος και τα στοιχεία που δίνουμε int n[] = { 1, 2, 3, 4, 5 ; 5 στοιχεία, οπότε πίνακας 5 στοιχείων Πρατικάκης (CSD) Arrays CS100, 2016-2017 7 / 17

Παράδειγμα: ιστόγραμμα histogramc #include <stdioh> /* The size of the array * storing the grades */ #define HIST_SIZE 11 /* The size of the array * storing the histogram */ #define STUDENTS 30 /* * Computes the histogram n of array * a[] Array a[] has sizea elements */ void histogram(int n[], int a[], int sizea) { int i; for (i = 0; i < sizea; ++i) { n[a[i]]++; int main() { int hist[hist_size] = {0; int grades[students], i, j; for (i = 0; i < STUDENTS; ++i) { scanf( %d, &(grades[i])); histogram(hist, grades, STUDENTS); for (i=0; i < HIST_SIZE; i++) { printf( %7d%13d%8c, i, hist[i], ); for (j = 0; j < hist[i]; j++) { putchar( * ); printf( \n ); return 0; Πρατικάκης (CSD) Arrays CS100, 2016-2017 8 / 17

Όρια Στη C δεν υπάρχει έλεγχος ορίων! Αν int c[10]; τότε ο πίνακας c έχει 10 στοιχεία Τα όρια του πίνακα c είναι ανάμεσα στο c[0] και c[9] Τι γίνεται αν βγούμε έξω από τον πίνακα; c[-1]; c[10]; c[10000000]; Πρατικάκης (CSD) Arrays CS100, 2016-2017 9 / 17

Παράδειγμα: crash! outofboundsc #include <stdioh> int main() { int a = 5, b = 6, c; int n[10]; printf( a = %d, b = %d\n, a, b); /* Here we get out of bounds What s going to happen depends on the system */ for (c = -3; c < 10; c++) { n[c] = 10; /* Here we get out of bounds What s going to happen depends on the system */ n[10] = 0; printf( a = %d, b = %d\n, a, b); return 0; Πρατικάκης (CSD) Arrays CS100, 2016-2017 10 / 17

sizeof Ο τελεστής sizeof μπορεί να χρησιμοποιηθεί με Ονόματα μεταβλητών Ονόματα τύπων Σταθερές Χρήση του sizeof Επιστρέφει το μέγεθος σε bytes Έχει τύπο size_t: μέγεθος σε bytes ως ακέραιος Για πίνακες, επιστρέφει το μέγεθος του 1 στοιχείου επί το πλήθος Αν sizeof(int) είναι 4 bytes, τότε το παρακάτω πρόγραμμα θα τυπώσει 40 sizeofc int my_array[10]; printf( \%d, sizeof(my_array)); Πρατικάκης (CSD) Arrays CS100, 2016-2017 11 / 17

Υπολογισμός Διεύθυνσης Στοιχείων Στη γλώσσα C, το όνομα ενός πίνακα είναι δείκτης στην αρχή του πίνακα Το όνομα του πίνακα αντιστοιχεί σε μια σταθερή διεύθυνση μνήμης Έστω ο πίνακας double a[100];, που αρχίζει στην διεύθυνση a Κάθε στοιχείο του πίνακα πιάνει χώρο sizeof(double) Πού βρίσκεται στη μνήμη το στοιχείο a[index]; Το πρώτο στοιχείο (index == 0) έχει διεύθυνση &a[0], που αντιστοιχεί στη θέση μνήμης a Το δεύτερο στοιχείο (index == 1) έχει διεύθυνση &a[1], που αντιστοιχεί στη θέση μνήμης a + sizeof(double) Το τρίτο στοιχείο (index == 2) έχει διεύθυνση &a[2], που αντιστοιχεί στη θέση μνήμης a + 2 * sizeof(double) κλπ H διεύθυνση (σε Bytes) στη μνήμη είναι η: a + sizeof(double) * index Πρατικάκης (CSD) Arrays CS100, 2016-2017 12 / 17

Ο Πίνακας ως Δείκτης Έστω ο πίνακας int b[100]; Η έκφραση b[0] είναι το 1ο στοιχείο του πίνακα Η έκφραση &b[0] είναι η διεύθυνση του 1ου στοιχείου του πίνακα Η έκφραση &b[0] είναι ισοδύναμη με την έκφραση b (το όνομα του πίνακα) Αντί να γράφουμε &b[0] απλά γράφουμε b Το b είναι διεύθυνση μνήμης: δείκτης στο πρώτο στοιχείο Μπορούμε να χρησιμοποιούμε το b ακριβώς όπως ένα δείκτη Αργότερα θα δούμε ότι μπορούμε να χρησιμοποιούμε και δείκτες ως πίνακες! Ο τύπος του b είναι σταθερός δείκτης σε ακέραιο Πρατικάκης (CSD) Arrays CS100, 2016-2017 13 / 17

Παράδειγμα: Addresses array-memoryc #include <stdioh> /* Maximum array size */ #define SIZE 10 int main() { int array[size] = {5, 42, 9, 123, 0, 1821, 31337, 1729, -1, -232; int n; for (n = 0; n < SIZE ; n++) { printf( array[%2d] = %5d, at memory address %ld\n, n, array[n], (long) &array[n]); return 0; Πρατικάκης (CSD) Arrays CS100, 2016-2017 14 / 17

Πίνακες ως ορίσματα συναρτήσεων Δίνουμε το όνομα του πίνακα ως όρισμα Συνήθως περνάμε το μέγεθος του πίνακα ως επιπλέον όρισμα array-argumentc float mean(int array[], int length) { int i; float sum = 0; for (i = 0; i < length; i++) { sum += array[i]; return sum / length; int main(void) { int my_array[24], i; i = mean(myarray, 24); Πρατικάκης (CSD) Arrays CS100, 2016-2017 15 / 17

Πίνακες ως ορίσματα συναρτήσεων (2) Συνάρτηση με όρισμα πίνακα αντιστοιχεί με call-by-reference Το όνομα του πίνακα είναι και δείκτης στο 1ο στοιχείο Η συνάρτηση έχει πρόσβαση στη μνήμη του πίνακα Η συνάρτηση μπορεί να αλλάξει τα περιεχόμενα του πίνακα array-argumentc void flip(int array[], int length) { for(i = 0; i < length / 2; i++) { swap(&array[i], &array[length -i -1]); Τα στοιχεία του πίνακα είναι τιμές Αν είναι ορίσματα συνάρτησης, περνούν κανονικά με call-by-value printf( %d, myarray[3]); Πρατικάκης (CSD) Arrays CS100, 2016-2017 16 / 17

Παράδειγμα side-effectsc #include <stdioh> /* function declaration */ void f(int a[], int size, int b); /* function definitions */ int main() { int c[10] = {0; int n; int q = 30; /* Print the values of the array before the function call */ for (n = 0; n < 10; n++) { printf( %2d, %3d\n, n, c[n]); printf( \nq = %d\n\n, q); /* call function f */ f(c, 10, q); /* Print the values of the array after the function call */ for (n = 0; n < 10; n++) { printf( %2d, %3d\n, n, c[n]); printf( \nq = %d\n, q); return 0; /* Definition of function f * What does f do? */ void f(int a[], int size, int b) { while(size) { a[size-1] = size--; b = 100; Πρατικάκης (CSD) Arrays CS100, 2016-2017 17 / 17