Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Σχετικά έγγραφα
Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Ηβασικήσυνάρτηση προγράμματος main()

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

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

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

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

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

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

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

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

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

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

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

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

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

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

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

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

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

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

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

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

ΠΙ Ν Α Κ Ε Σ (arrays)

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

είκτες και Πίνακες (2)

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

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

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

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

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

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

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

Η βασική συνάρτηση προγράμματος main()

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

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

Ηβασικήσυνάρτηση προγράμματος main()

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

Διαδικασία Ανάπτυξης Λογισμικού

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Επεξεργασία Αρχείων Κειµένου

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

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

Transcript:

Πίνακες Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ] Πχ: int A[5]; Αριθμητική τιμή που εκφράζει το μέγεθος του πίνακα

Πίνακες - Προσπέλαση A: A[0] A[1] A[2] A[3] A[4] Κάθε θέση του πίνακα μπορεί να προσπελαστεί με χρήση Index. Για πίνακα μεγέθους Ν το index ανήκει στο διάστημα [0, Ν-1] Γιανααναφερθούμεστοi στοιχείο του πίνακα αρκεί να γράψουμε A[i-1]

Παράδειγμα Αρχικοποίηση στοιχείων main() { int k[20],i; //αρχικοποίηση όλων των στοιχείων του πίνακα με την τιμή 5 for (i=0; i<20;i++) k[i] = 5; }

Δήλωση και Αρχικοποίηση ταυτόχρονα int A[20] = {3,1,2,56,78}; Τα 5 πρώταστοιχείατουαθαέχουντις τιμές που δηλώνονται εντός των αγκυλών. Ο πίνακας είναι 20 θέσεων Αν απουσιάζει το μέγεθος του πίνακα, ο πίνακας έχει τόσα στοιχεία όσα δηλώνονται στις αγκύλες Πχ int A = {3,12,6} είναι πίνακας 3 θέσεων

Πίνακες Κάθε στοιχείο του πίνακα μπορεί να χρησιμοποιηθεί σαν μεταβλητή του τύπου δεδομένων του πίνακα. Πχ int A[20]; scanf( %d,&a[0]); αποθηκεύει στο Α[0] τον ακέραιο που θα διαβαστεί από το stream εισόδου printf( Value of A[0] is:%d,a[0]); Εκτυπώνει την τιμή του A[0]

Παράδειγμα Φτιάξτε ένα πρόγραμμα που να αποθηκεύει σε έναν πίνακα 10 χαρακτήρες από το stream εισόδου. Τέλος εκτυπώστε τον πίνακα.

Πρόγραμμα main(){ char A[10]; int I; printf( Input 10 characters\n ); for (i=0; i<10; i++) A[i] = getchar(); printf( Characters are:\n ); for (i=0; i<10; i++) putchar(a[i]); }

Δείκτες και Πίνακες Το όνομα ενός πίνακα είναι δείκτης στο πρώτο του στοιχείο int A[20], *p; p = A; Είναι ισοδύναμη με την εντολή p = &A[0];

Αριθμητική δεικτών (έχει νόημα μόνο σε πίνακες) p p+1 p+2 p+3 p+4 A[0] A[1] A[2] A[3] A[4] «Προσθέτω 1 σε δείκτη» ισοδυναμεί με την έκφραση «Δείκτης στην επόμενη θέση» A + i είναι δείκτης στο στοιχείο Α[ι] Για προσπέλαση του Α μπορούμε να γράψουμε int i; for (i = 0; i<n; i++) printf( A[%d]:%d\n,i, *(A+i) );

Δήλωση Πίνακεςωςπαράμετροι συναρτήσεων double athroisma(int vathmos[ ], int megethos); Ισοδύναμη με τη δήλωση double athroisma(int *vathmos, int megethos); Κλήση: athroisma(vathmos,300);

Πίνακες Το πέρασμα των πινάκων σε συναρτήσεις γίνεται με αναφορά (by reference), περνάμε τη διεύθυνση του πρώτου στοιχείου του πίνακα. Αλλαγές σε στοιχεία του πίνακα που περνιέται σαν όρισμα στη συνάρτηση, είναι μόνιμα Δεν υποστηρίζεται επιστροφή πίνακα από συνάρτηση

Άσκηση Φτιάξτε ένα πρόγραμμα που να διαβάζει 10 ακεραίους από το stream εισόδου και να τους αποθηκεύει σε έναν πίνακα. Στη συνέχεια μια συνάρτηση που να επιστρέφει το πλήθος εμφάνισης συγκεκριμένου ακεραίου στον πίνακα. Υπόδειξη: Η επικεφαλίδα της συνάρτησης int IntCount(int A[],int k); Θέλουμε να επιστρέφεται το πλήθος εμφάνισης του k στον πίνακα Α[].

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int IntCount(int A[ ], int k){ int i,count =0; for (i =0; i<10; i++) if (A[i] == k) count++; return count; }

Πρόγραμμα main(){ int Input[20], a, i; } printf("input 10 int\n"); for (i =0; i<10; i++) scanf("%d",&input[i]); printf("input integer to be searched\n"); scanf("%d",&a); printf("%d sequences\n",intcount(input,a)); system("pause"); return 0;

Άσκηση Τροποποιήστε το προηγούμενο πρόγραμμα ώστε η προσπέλαση των στοιχειών του πίνακα να γίνεται με χρήση δείκτη.

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int IntCount(int A[ ], int k){ int i,count =0; for (i =0; i<10; i++) if ( *(A + i) == k) count++; return count; }

Πρόγραμμα main(){ int Input[20], a, i; printf("input 10 int\n"); for (i =0; i<10; i++) scanf("%d, Input+i ); printf("input integer to be searched\n"); scanf("%d",&a); printf("%d sequences \n",intcount(input,a),a); } system("pause"); return 0;

Πίνακες μεγαλύτερης διάστασης Η C υποστηρίζει πίνακες μέχρι 12 διαστάσεων Δήλωση πινάκων 2 διαστάσεων Τύπος Δεδομένων ΌνομαΠίνακα[Γραμμές][Στήλες] Πχ με τη δήλωση int A[4][5] ορίζεται ο δισδιάστατος πίνακας ακεραίων Α, 4x5

Πίνακες μεγαλύτερης διάστασης Δείκτες Γραμμών και στηλών ξεκινούν από το 0. A[i] A[0][0] A[0][1] A[0][2] A[0][3] A[0][4] A[1][0] A[1][1] A[1][2] A[2][0] A[2][1] A[2][2] A[3][0] A[3][1] A[3][2] A[1][3] A[2][3] A[3][3] A[1][4] A[2][4] A[3][4] Ο δισδιάστατος πίνακας είναι πίνακας μονοδιάστατων πινάκων

Πίνακες μεγαλύτερης διάστασης Προσπέλαση στοιχείων Σάρωση των τιμών του δισδιάστατου πίνακα Α 4 γραμμών και 5 στηλών: int i,j; for (i=0;i<4;i++) //σάρωση κάθε γραμμής for (j=0;j<5;j++) //σάρωση κάθε στήλης της γραμμής i Α[i][j] = 0; //ανάθεση τιμής στη γραμμή i και στήλη j

Δήλωση Πολυδιάστατοι πίνακες ως παράμετροι συναρτήσεων double athroisma(int vathmos[ ][sthles], int grammes); Κλήση: double athroisma[grammes][sthles] athroisma(vathmos,grammes);

Άσκηση Σε ένα τμήμα 5 φοιτητών φτιάξτε ένα πρόγραμμα που να δέχεται τους βαθμούς κάθε φοιτητή για 4 ασκήσεις και να εκτυπώνειτομέσοόρο. Υλοποιήστε μία συνάρτηση για την είσοδο δεδομένων, μία γιατηνεύρεσημέσουόρουκαιμίαγιατην εκτύπωση αποτελέσματος.

#include <stdio.h> #include <stdlib.h> #define grammes 5 #define sthles 4 Πρόγραμμα void eisodos(double A[ ][sthles]) { int i,j; printf("insert student grades\n"); for (i=0; i<grammes; i++) for (j=0;j<sthles;j++) { printf("student:%d, exercise:%d\n",i,j); scanf("%lf",&a[i][j]); } }

Πρόγραμμα double MesosOros(double A[ ][sthles], int line){ int j; double result = 0.0; for (j=0;j<sthles; j++) result+=a[line][j]; return (double)result/sthles; }

Πρόγραμμα void print(double A[][sthles]){ int i,j; for (i=0;i<grammes; i++) printf("student:%d, Mean:%.2f\n",i,MesosOros(A,i)); }

Πρόγραμμα main(){ double A[grammes][sthles]; eisodos(a); print(a); system("pause"); return 0; }

Συμβολοσειρές Μια σταθερή συμβολοσειρά είναι η ακολουθία χαρακτήρων που πλαισιώνεται από διπλά εισαγωγικά Πχ Kalimera Αποθηκεύεται σε πίνακα χαρακτήρων με τερματικό χαρακτήρα το \0.

Συμβολοσειρές και πίνακες Πχ char Symvoloseira[15] = kalimera ; Symvoloseira k a l i m e r a \0?????? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Συμβολοσειρές και δείκτες Δήλωση συμβολοσειράς με χρήση δείκτη char *symvoloseira = kalimera ; Σε αυτήν την περίπτωση δημιουργείται ο παρακάτω πίνακας χαρακτήρων. Χωρίς την αρχικοποίηση ο δείκτης δεν περιέχει έγκυρη διεύθυνση. symvoloseira k a l i m e r a \0

Εκτύπωση Συμβολοσειράς Χρήση του προσδιοριστή %s Πχ char *City = Athens ; printf( %s, City);

Διάβασμα Συμβολοσειράς Χρήση του προσδιοριστή %s char City[10] ; scanf( %s, City); (Χωρίς &) Αποθηκεύεται στον πίνακα City ηπρώτη λέξη που θα εισαχθεί από τον χρήστη και στοτέλοςοχαρακτήρας\0. Προσοχή δεν πρέπει μην γίνει υπερχείλιση (υπέρβαση του πλήθους στηλών του πίνακα)

Άσκηση Υλοποιήστε τη συνάρτηση int strlen(char *s) Που επιστρέφει το μέγεθος της συμβολοσειράς s

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int strlen(char *s){ int i; for (i=0;s[i]!='\0';i++); return i; }

main(){ char name[50]; //Δήλωση συμβολοσειράς printf("input name\n"); scanf("%s",name); printf("length is:%d\n",strlen(name)); system("pause"); return 0; }

Άσκηση Υλοποιήστε τη συνάρτηση int strcmp(char *s, char *t); Για τη σύγκριση των συμβολοσειρών s, t. Αν s>t επιστρέφει θετικό, αν s<t επιστρέφει αρνητικό και αν s==t επιστρέφει 0.

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int strcmp(char *s, char *t){ int i; for (i=0;s[i]== t[i];i++); if(s[i] == '\0') return 0; return s[i] - t[i]; }

Πρόγραμμα main(){ char name1[50]; char name2[50]; printf("input 1st name\n"); scanf("%s",name1); printf("input 2nd name\n"); scanf("%s",name2); printf("diff is:%d\n",strcmp(name1,name2)); system("pause"); return 0; }