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

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

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

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

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

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

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

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

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

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

Δείκτες & Πίνακες Δείκτες, Πίνακες

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

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

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

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

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

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

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

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

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

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

ΠΙ Ν Α Κ Ε Σ (arrays)

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστηριακή Άσκηση 1

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

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

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

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

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

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

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

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

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

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

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

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

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

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

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

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

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

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

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

242 -ΕισαγωγήστουςΗ/Υ

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

Οι δείκτες στη γλώσσα C

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

Δείκτες στην C (επανάληψη)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

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

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

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

Transcript:

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 1000 1001 1002 1003 1004 1005 12 9.8 9976 3 1010 26 1006 1007 1008 1009 1010 1011 16 125 1299 a 13 1298

Δήλωση Δήλωση Τύπος *ΌνομαΔείκτη; Πχ int *a; char *c;

Ο τελεστής & Οτελεστήςδιεύθυνσης&, όταν εφαρμοστεί σε μια μεταβλητή, αφορά τη διεύθυνση μνήμης της μεταβλητής. Πχ int met = 10; &met είναι η διεύθυνση μνήμης της μεταβλητής met. int *p; p = &met;

Οτελεστής* (Προσπέλαση της αριθμητικής τιμής) Οτελεστής*, όταν εφαρμόζεται σε ένα δείκτη επιστρέφει την αριθμητική τιμή της μεταβλητής στην οποία αναφέρεται οδείκτης. Πχ: int *p; int met = 3; p = &met; (*p) έχει την τιμή 3

Σχηματικά 1000 12 1001 9.8 1002 9976 1003 3 1004 987 1005 26 1006 16 1007 1299 1008 1010 1009 a 1010 10 1011 1298 int met = 10; int *p ; p met p = &met; printf( Το περιεχόμενο της διεύθυνσης που δείχνει ο p είναι:%d, *p );

Τιμές που μπορεί να ανατεθούν σε ένα δείκτη NULL (μηδενική - ο δείκτης δεν αναφέρεται σε καμία διεύθυνση μνήμης) πχ int *p = NULL; Τη διεύθυνση μιας μεταβλητής Τη διεύθυνση στην οποία δείχνει ένας άλλος δείκτης

Ανάθεση σε δείκτη της διεύθυνσης μιας μεταβλητής int met = 10; int *p= &met; p met 10

Ανάθεση σε δείκτη της διεύθ. στην οποία δείχνει ένας άλλος δείκτης int *p, *q, met = 10; p = &met; q = p ; p q met 10

Παράδειγμα int *p, *q, x, y; p = &x; q = &y; p x q y

Παράδειγμα *p = 5; *q = 8; p x 5 q y 8

Παράδειγμα Βρείτε το σωστό 1) p = q; p x p x 8 5 q y q y 8 8 Λάθος Σωστό

Παράδειγμα Βρείτε το σωστό 2) *p = *q; p x p x 8 5 q y q y 8 8 Σωστό Λάθος

Πίνακες Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ 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( Insert 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) );

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

Πρόγραμμα main(){ char A[10]; int i; printf( Insert 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)); }

Πίνακες μεγαλύτερης διάστασης Η 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

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

Πρόγραμμα #include <stdio.h> #include <stdlib.h> #define grammes 5 #define sthles 4 main() { int i,j; double result; 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]); }

Πρόγραμμα for (i=0;i<grammes; i++) { result = 0.0; for (j=0;j<sthles; j++) result+=a[i][j]; } } printf("student:%d, Mean:%.2f\n",i, (double)result/sthles); system("pause"); return 0;

Ταξινόμηση Πινάκων Μέθοδος Bubble Sort Για την ταξινόμηση πίνακα Ν στοιχείων Σύγκριση των στοιχείων ανά 2 Ανταλλαγή τιμών αν το 1 ο στοιχείο είναι μεγαλύτερο απ το 2ο Το μεγαλύτερο στοιχείο του πίνακα βρίσκεται στην τελευταία θέση Τα βήματα επαναλαμβάνονται N-1 φορές

Ταξινόμηση Πινάκων Μέθοδος Bubble Sort A: 60 42 83 25 75 A[0] A[1] A[2] A[3] A[4] A: 42 60 83 25 75 A[0] A[1] A[2] A[3] A[4] A: 42 60 83 25 75 A[0] A[1] A[2] A[3] A[4]

Ταξινόμηση Πινάκων Μέθοδος Bubble Sort A: 42 60 25 83 75 A[0] A[1] A[2] A[3] A[4] A: 42 60 25 75 83 A[0] A[1] A[2] A[3] A[4]

Ταξινόμηση Πινάκων Μέθοδος Τέλος 1 ης φάσης Bubble Sort A: 42 60 25 75 83 A[0] A[1] A[2] A[3] A[4] Τέλος 2 ης φάσης A: 42 25 60 75 83 A[0] A[1] A[2] A[3] A[4]

Ταξινόμηση Πινάκων Μέθοδος Τέλος 3ης φάσης Bubble Sort A: 25 42 60 75 83 A[0] A[1] A[2] A[3] A[4] Τέλος 4 ης φάσης A: 25 42 60 75 83 A[0] A[1] A[2] A[3] A[4]

Ταξινόμηση Πινάκων Μέθοδος #include <stdio.h> #include <stdlib.h> Bubble Sort main() { int m[5] = {23,20,12,52,10}, i, j, temp; for (i = 4; i>0; i--) // Επανάληψη βημάτων 4 φορές { for (j = 0; j<i; j++) // i συγκρίσεις σε κάθε φάση if (m[j]>m[j+1]) //Ανταλλαγή στοιχείων m[j], m[j+1] { temp = m[j+1]; m[j+1] = m[j]; m[j] = temp; } }

Ταξινόμηση Πινάκων Μέθοδος Bubble Sort //Εκτύπωση στοιχείων ταξινομημένου πίνακα for (i = 0; i<5; i++) printf("%d\n",m[i]); } system("pause"); return 0;

Μέθοδος Επιλογής Selection Sort Εντοπισμός εκάστοτε μεγίστου Ανταλλαγή μεγίστου με το στοιχείο στην πρώτη μη ταξινομημένη θέση του πίνακα Το μεγαλύτερο στοιχείο του πίνακα βρίσκεται στην πρώτη θέση Τα βήματα επαναλαμβάνονται N-1 φορές

Μέθοδος Επιλογής Selection Sort A: 60 42 83 25 75 A[0] A[1] A[2] A[3] A[4] A: 83 42 60 25 75 A[0] A[1] A[2] A[3] A[4] A: 83 75 60 25 42 A[0] A[1] A[2] A[3] A[4]

Μέθοδος Επιλογής Selection Sort A: 83 75 60 25 42 A[0] A[1] A[2] A[3] A[4] A: 83 75 60 42 25 A[0] A[1] A[2] A[3] A[4]

Μέθοδος Επιλογής Selection Sort #include <stdio.h> #include <stdlib.h> main() { int m[5] = {23,20,12,52,122}, i, j, meg, temp; Δείκτης μεγίστου for (i = 0; i<4; i++){ // Επανάληψη βημάτων 4 φορές meg = i; for (j = i; j<5; j++) //Εύρεση μεγίστου if (m[meg]<m[j]) meg = j; //Ανταλλαγή τιμών μεγίστου με το 1 ο μη ταξινομημένο temp = m[i]; m[i] = m[meg]; m[meg] = temp; }

Μέθοδος Επιλογής Selection Sort //Εκτύπωση στοιχείων ταξινομημένου πίνακα for (i = 0; i<5; i++) printf("%d\n",m[i]); } system("pause"); return 0;