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

Σχετικά έγγραφα
Μεθόδων Επίλυσης Προβλημάτων

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

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

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

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

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

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

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

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

ΗΥ-150. Πίνακες (Arrays)

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

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

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

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

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

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

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

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

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

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

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

Υπολογισμός - Εντολές Ελέγχου

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

Προγραμματισμό για ΗΜΥ

7. Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου

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

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

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

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

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

5 &6. Τύποι δεδομένων, τελεστές και

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

12. Συναρτήσεις (Μέρος ΙI)

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

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

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

Προγραμματισμό για ΗΜΥ

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

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

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

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

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

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

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Προγραμματισμός Υπολογιστών

Δομημένος Προγραμματισμός

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

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

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

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

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

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Υπολογισμός - Εντολές Επανάληψης

Προγραμματισμός I (Θ)

Transcript:

Κεφάλαιο 8.1-8.3 Πίνακες Ι (Διάλεξη 16) 15-1 Πίνακες (Arrays) Σε αυτή την ενότητα θα μιλήσουμε για την δομή δεδομένων Πίνακας: 1. Εισαγωγή & Σύνταξη 2. Δήλωση Πίνακα 3. Αρχικοποίηση Πίνακα 4. Πρόσβαση 5. Παραδείγματα 15-2 1

1) Πίνακας - Εισαγωγή & Σύνταξη Μία δομή δεδομένων είναι ένα σύνολο σχετιζομένων τύπων δεδομένων (π.χ. int, char, float, ). Ένας πίνακας είναι μια απλή δομή δεδομένων στην οποία τα δεδομένα έχουν το ίδιο όνομα και τον ίδιο τύπο. π.χ. αντί int a,b,c; int pinakas[3]; Οι πίνακες που θα μελετήσουμε σε αυτό το μάθημα είναι στατικοί, δηλαδή το μέγεθος τους ορίζεται εκ των προτέρων (πριν την μεταγλώττιση). Πίνακας Ακεραίων 5 2 6 9 3 0 1 2 3 4 Πίνακας Χαρακτήρων H E L L O 0 1 2 3 4 15-3 1) Πίνακας - Εισαγωγή & Σύνταξη Ένας πίνακας είναι μία δομή δεδομένων, όπου ένα σύνολο αντικειμένων του ιδίου τύπου αποθηκεύονται σε σειρά, π.χ. τύπος int md[12]= 31,28,31,30,31,30,31; όνομα Μέγεθος (πλήθος στοιχείων md[0] md[1] md[2] md[11] 31 28 31 31 τιμές 15-4 2

2) Δηλώσεις πινάκων int array [5] ; Η παραπάνω δήλωση δεσμεύει αρκετή μνήμη ώστε να χωρέσουν 5 ακέραιοι. Δεν βάζει αρχικές τιμές σε αυτές τις θέσεις μνήμης Θα δούμε στην συνέχεια τρόπους ανάθεσης τιμών σε αυτές τις θέσεις του πίνακα π.χ. int array [5] = 5, 2567, -76,500,64 ; Τα στοιχεία σε ένα πίνακα με n στοιχεία αριθμούνται από το 0 εώς το (n-1). H πρώτη θέση του πίνακα είναι η θέση 0 array 5 2 6 9 3 0 1 2 3 4 n=5 15-5 2) Δηλώσεις πινάκων <τύπος> όνομα[<μέγεθος>]; <τύπος> όνομα[<μέγεθος>]=αρχικοποίηση; Το μέγεθος χρειάζεται, εκτός και εάν γίνεται αρχικοποίηση. π.χ. char a[3]; // ΣΩΣΤΟ π.χ. char a[ ]; // ΛΑΘΟΣ Ορισμός χωρίς μέγεθος το μέγεθος του πίνακα είναι ίσο με τα στοιχεία της αρχικοποίησης Π.χ. char pinakas[ ]= a, b, c ; ΣΩΣΤΟ 15-6 3

#include <stdio.h> 2) Δηλώσεις πινάκων int main() char a; // Δήλωση Μεταβλητής char table[5]; // Δήλωση Πίνακα 5 χαρακτήρων. 15-7 2) Δηλώσεις πινάκων (Αποθήκευση) Τα στοιχεία ενός πίνακα αποθηκεύονται σε συνεχόμενα κελιά στη μνήμη του υπολογιστή (memory cells). Πίνακας Ακεραίων 9 5 int a[2]=9,5; Τα δεδομένα είναι συνεχόμενα στην μνήμη Δήλωση μεταβλητών 5 9 int a=9,b=5; Τα δεδομένα είναι οπουδήποτε στην μνήμη 15-8 4

2) Δηλώσεις πινάκων και χρήση #define Συχνά χρησιμοποιούμε #define για να δηλώσουμε το μέγεθος των arrays #define SIZE 39 #define GRADES 5 main ( ) int score [SIZE] ; int gradecount [GRADES] ; 15-9 2) Δηλώσεις πινάκων int score [39], gradecount [6]; Δηλώνει δύο πίνακες τύπου int Κανένας πίνακας δεν έχει αρχικοποιηθεί Στο score έχει χώρο για 39 στοιχεία (ένα για κάθε μαθητή της τάξης) gradecount έχει χώρο για 6 στοιχεία (ένα για κάθε βαθμό, A-F) 15-10 5

3) Αρχικοποίηση Πίνακα Πάντοτε πρέπει να δίνουμε κάποιες αρχικές τιμές στις διάφορες θέσεις του πίνακα. Αυτό δεν είναι κάτι νέο. Αυτό κάναμε και με τις μεταβλητές, π.χ. int a; a = 0; Μπορούμε να κάνουμε όλες τις θέσεις του πίνακα ίσο με «0», με την πιο κάτω εντολή: int a[10]= ; for (i=0;i<10;i++) a[i] =0; ή int a[10]; a[0]=0; a[1]=0;. Όχι πρακτικό Επίσης, τι γίνεται αν θέλουμε κάποια άλλη τιμή αρχικοποίησης εκτός του 0, θα δούμε στην συνέχεια τον τρόπο 15-11 3) Αρχικοποίηση Πίνακα #include <stdio.h> int main() // Δήλωση & Αρχικοποίηση Πίνακα char table[5]=;. 15-12 6

5) Αρχικοποίηση Πίνακα II Πριν είχαμε πει ότι ένας πίνακας αρχικοποιείτε με την εντολή της μορφής char table[5]=; Δηλαδή αυτό είναι ισοδύναμο με το πιο κάτω σύνολο εντολών #define MAX 50 int x[max], i; for(i=0;i<max; i++) x[i]=0; 15-13 5) Αρχικοποίηση Πίνακα II Μπορούμε να αρχικοποιήσουμε τον πίνακα σε ότι θέλουμε, π.χ. 0 0 #define SIZE 5 int square[size], i; 1 1 /*αρχικοποίηση: στοιχείο i se i^2*/ for (i = 0; i < SIZE; ++i) square[i] = i * i; 2 3 4 4 9 16 15-14 7

4) Πρόσβαση Πίνακα Σύνταξη: όνομα[αριθμοδείκτης] Ο αριθμοδείκτης πίνακα (subscript ή index) πρέπει να είναι int x[0] τιμή πρώτου στοιχείου του πίνακα x x[i] τιμή i-οστού στοιχείου του πίνακα x Το i-οστό στοιχείο βρίσκεται στη θέση i+1 Ευθύνη προγραμματιστή να επαληθεύσει ότι η τιμή αριθμοδείκτη πίνακα είναι στο πεδίο [0, στοιχεία 1] Π.χ. int a[5]=; a[5]=3; ΛΑΘΟΣ a[5] δεν υπάρχει Προσοχή μόνο το a[0] μέχρι a[4] υπάρχει 15-15 4) Πρόσβαση Πίνακα #include <stdio.h> int main() char table[5]=; // Δήλωση & Αρχικοποίηση Πίνακα table[0] = 'a'; // Αλλαγή θέσης 0 του πίνακα table[1] = 'b'; // Αλλαγή θέσης 1 του πίνακα // Εκτύπωση δυο θέσεων του πίνακα printf("hello %c %c\n", table[0], table[1]); // Αλλαγή τιμών του πίνακα με τιμές εισόδου από το πληκτρολόγιο scanf("%c %c", &table[0], &table[1]); printf("hello %c %c\n", table[0], table[1]); Τυπώνει: Hello a b \n Hello input1 input2 15-16 8

4) Πρόσβαση Πίνακα int x[ ]=1,2,3,5,7,11,13,17,19,23,29,31; Πως μοιάζει ο πίνακας μετά την εκτέλεση των πιο κάτω εντολών? x[3] = 8258; sum = x[0] + x[1]; x[3] += 1; x[2] = x[0] + x[1]; O πίνακας τώρα είναι ως εξής : int x[]=1,2,3,8259,7,11,13,17,19,23,29,31; 15-17 float f = 5.0; x[i] = 0; x[i] = x[j]; x[j+k*4]= x[u] + 3; x[x[1]]= 11; diff = x[y]-x[foo()]; total =total + x[i++]; (x[i]== x[(int)f]) 4) Πρόσβαση Πίνακα Όλες οι πιο κάτω εντολές είναι ορθές Πίνακας Ακεραίων x: 5 2 6 9 3 0 1 2 3 4 int foo() δηλαδή: total=total+x[i]; i++; 15-18 9

5) Παράδειγμα βαθμών Γράψετε ένα πρόγραμμα το οποίο θα δέχεται από τον χρήστη τις βαθμολογίες 39 φοιτητών από το πληκτρολόγιο θα τις αποθηκεύει σε πίνακα και στην συνέχεια θα εκτυπώνει τον μέσο όρο, και πόσα Α,Β,C,D,E,F υπάρχουν. 90 <= A <= 100 80 <= B < 90 #include <stdio.h> #define SIZE 39 #define GRADES 6 main ( ) int i, total, score [SIZE] ; int gradecount [GRADES]= ; float average; Συνέχεια /* Fill score array with scores */ for ( i = 0 ; i < SIZE ; i++) printf ( Enter next score : ) ; scanf ( %d, &score [ i ] ); 70 <= C < 80 60 <= D < 70 50 <= E < 60 0 <= F < 50 15-19 5) Παράδειγμα βαθμών (συνέχεια) /* Calculate total & count grades */ for ( i = 0 ; i < SIZE ; i++) total += score [ i ] ; switch ( score [ i ] / 10 ) case 10 : case 9 : gradecount [5]++ ; break ; case 8 : gradecount [4]++ ; break ; case 7 : gradecount [3]++ ; break ; case 6 : gradecount [2]++ ; break ; case 5 : gradecount [1]++ ; break ; default : gradecount [0]++ ; Συνέχεια average = (float) total / SIZE ; /* Print results */ printf ( The class average is %.2f\n, average ) ; printf ( %2d As\n, gradecount [5] ) ; printf ( %2d Βs\n, gradecount [4] ) ; printf ( %2d Cs\n, gradecount [3] ) ; printf ( %2d Ds\n, gradecount [2] ) ; printf ( %2d Es\n, gradecount [1] ) ; printf ( %2d Fs\n, gradecount [0] ) ; 15-20 10