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

Σχετικά έγγραφα
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

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

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

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

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

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

Αντικειµενοστρεφής Προγραµµατισµός

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

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

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

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

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

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

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

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

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

Εισαγωγή στον Προγραµµατισµό «C»

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

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

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

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

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

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

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

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

Αρχές Προγραμματισμού

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

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

Προγραµµατιστικές τεχνικές

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

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

οµές (structures) και Eνώσεις (unions)

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

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

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

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

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

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

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

ιαφάνειες παρουσίασης #6 (β)

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

Διορθώσεις Συμπληρώσεις επί της επανεκτύπωσης 2003 της 2 ης έκδοσης του βιβλίου «Διαδικαστικός Προγραμματισμός C»

a = 10; a = k; int a,b,c; a = b = c = 10;

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

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

Βασικά της γλώσσας JAVA

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

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

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

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Transcript:

Ένατη ιάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη Χρήση αριθµητικών Πινάκων Τι είναι πίνακας? Μονοδιάστατοι & πολυδιάστατοι πίνακες Ονοµασία & δήλωση πινάκων Απόδοση αρχικών τιµών σε πίνακες Μέγιστο µέγεθος πίνακα 2 1

Σήµερα Χρήση και Κατανόηση των εικτών Τι είναι δείκτης? ηµιουργία δείκτη είκτες & απλές µεταβλητές Απόδοση αρχικών τιµών σε δείκτες είκτες & τύποι µεταβλητών 3 Τι είναι δείκτης? είκτης είναι µία µεταβλητή η οποία περιέχει την θέση µνήµης στον υπολογιστή µιας άλλης µεταβλητής 1000 1001 1002 1003 1004 1005 100 100 Έστω µεταβλητή rate µε αρχική τιµή 100 ο µεταγλωττιστής δεσµεύει χώρο στη µνήµη του υπολογιστή και την αποθηκεύει στην διεύθυνση 1004 Η µεταβλητή p_rate που έχει τιµή 1004 είναι δείκτης της rate 4 2

ηµιουργία µεταβλητή δείκτη σηµαίνει δήλωση µιας νέας µεταβλητής στην οποία αποθηκεύεται διεύθυνση µνήµης. Πως? rate p_rate απλή µεταβλητή µεταβλητή δείκτης 5 Γραφική απεικόνιση απλής µεταβλητής & µεταβλητής δείκτη 1000 1001 1002 1003 1004 1005? 100 100 p_rate rate 1000 1001 1002 1003 1004 1005 1004 1004 100 100 p_rate rate 6 3

Πως δηλώνουµε µεταβλητή δείκτη? typename *ptrname; typename τύπος µεταβλητής όπου ptrname όνοµα µεταβλητής * τελεστής εµµεσότητας (indirection) 7 Παραδείγµατα δηλώσεων µεταβλητών δεικτών char *ch1, *ch2; *ch1 και *ch2 είναι δείκτες των µεταβλητών ch1, ch2 τύπου χαρακτήρα(char). float *value, percent; *value είναι δείκτης της µεταβλητής value τύπου float percent είναι απλή µεταβλητή τύπου float 8 4

Απόδοση αρχικών τιµών σε δείκτες (Χρήση δεικτών) pointer = &namevariable; π.χ. p_rate = &rate; printf ( %d, rate); printf ( %d, *p_rate); άµεση πρόσβαση έµµεση πρόσβαση 1000 1001 1002 1003 1004 1005 1004 1004 100 100 p_rate rate *p_rate 9 Έστω δείκτης µε όνοµα ptr και δείχνει µεταβλητή var *ptr και var αναφέρονται στα περιεχόµενα της µεταβλητής var ptr και &var αναφέρονται στην διεύθυνση της µεταβλητής var 1000 1001 1002 1003 1004 1005 1004 1004 100 100 p_rate rate *p_rate 10 5

int var=1; int *ptr; int main(int argc, char *argv[]) ptr=&var; printf("\ndirect access of var =%d",var); printf("\ndirect access of var =%d",*ptr); printf("\n\nthe address of var =%d",&var); printf("\nthe address of var =%d\n",ptr); system("pause"); return 0; 11 int *p int main(int argc, char *argv[]) *p=10; Λάθος p δείκτης ακεραίου που δεν δείχνει µια µεταβλητή system("pause"); return 0; 12 6

int *p; double q,temp; int main(int argc, char *argv[]) temp=1234.34; p=&temp; q=*p; printf("%f",q); system("pause"); return 0; Λάθος p δείκτης ακεραίου temp float εν γίνεται compilation Λάθος q double µεταβλητή p δείκτης ακεραίου εν τρέχει το πρόγραµµα 13 Οι δείκτες είναι ιδιαίτερης σηµασίας στην C και χρησιµοποιούνται για την υποστήριξη σύνθετων δοµών δεδοµένων ιασυνδεδεµένες λίστες (linked lists) υαδικά δένδρα (binary trees) Η C υποστηρίζει δύο τελεστές για τους δείκτες: * και & Σε µεταβλητές δεικτών εφαρµόζονται επίσης και οι αριθµητικοί τελεστές +,++,- και -- 14 7

Στους δείκτες µπορούν να προστεθούν ή να αφαιρεθούν µόνο ακέραιες ποσότητες από δείκτες. ΠΡΟΣΟΧΗ: εν µπορούµε να προσθέσουµε ποτέ αριθµό κινητής υποδιαστολής σε δείκτη!!! Η αριθµητική των δεικτών διαφέρει από την κανονική αριθµητική µε σηµαντικό τρόπο. Εκτελείται σε σχέση µε τον βασικό τύπο του δείκτη 15 Στους δείκτες µπορούν να προστεθούν ή να αφαιρεθούν µόνο ακέραιες ποσότητες από δείκτες. ΠΡΟΣΟΧΗ: εν µπορούµε να προσθέσουµε ποτέ αριθµό κινητής υποδιαστολής σε δείκτη!!! Η αριθµητική των δεικτών διαφέρει από την κανονική αριθµητική µε σηµαντικό τρόπο. Εκτελείται σε σχέση µε τον βασικό τύπο του δείκτη 16 8

Παράδειγµα έστω ένας δείκτης τύπου ακεραίου µε όνοµα p που περιέχει την διεύθυνση µνήµης 200 τότε η έκφραση p++ έχει την τιµή 202 γιατί int 2 bytes if p δείκτης float τότε p++ =204 Στους δείκτες µπορούµε να εφαρµόσουµε: int *p; p=p+200; Τελεστές αύξησης & µείωσης *p++ ; αυξάνει ο δείκτης µετά τιµή (*p)++; αυξάνει η τιµή του δείκτη 17 είκτες & τύποι µεταβλητών ιαφορετικοί τύποι µεταβλητών διαφορετικό χώρο στην µνήµη short 2 bytes float 4 bytes ηλώσεις Μεταβλητών int vshort=12252; char vchar= 90; float vfloat=1289.156004 ηλώσεις εικτών int *p_vshort ; char *p_vchar ; float *p_vfloat ; Σχέση δεικτών/µεταβλητών p_vshort=&vshort p_vchar = &vchar p_vfloat =&vfloat 1000 1001 1225 2 1002 1003 1004 1005 1006 1007 1008 1009 1010 90 1289.156 004 18 9

είκτες & Πίνακες Στη C υπάρχει ειδική σχέση ανάµεσα στους δείκτες & στους πίνακες. Χρήση αριθµητικών Πινάκων = χρήση εικτών Έστω πίνακας data[] data = διεύθυνση του 1ου στοιχείου του πίνακα data = & data 19 είκτες & Πίνακες δείκτης =διεύθυνση int array[100], *p_array; p_array=array; p_array=array[0]; p_array=array[i]; διεύθυνση 1 ου στοιχείου 1250 20 10

είκτες & Πίνακες X==1000 &x[0]==1000 &x[1]=1002 expenses==1250 &expenses[0]==1250 &expences[1]==1254 1000 x[0] 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 x[1] x[2] x[3] x[4] x[5] int x[6] float expenses[3]; 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 expenses[0] expenses[1] expenses[2] 21 int ctr; short array_s[10]; float array_f[10]; double array_d[10]; int main(int argc, char *argv[]) printf("\n\tthe size of array SHORT type= %d bytes\n",sizeof(array_s)); printf("\tthe size of array FLOAT type= %d bytes\n",sizeof(array_f)); printf("\tthe size of array DOUBLE type= %d bytes\n\n",sizeof(array_d)); system("pause"); return 0; 22 11

int ctr; short array_s[10]; float array_f[10]; double array_d[10]; int main(int argc, char *argv[]) printf("\t\tshort array\tfloat array\tdouble array"); printf("\n================================"); printf("========================"); for (ctr = 0; ctr < 10; ctr++) printf("\nelement %d:\t%ld\t\t%ld\t\t%ld", ctr, &array_s[ctr], &array_f[ctr], &array_d[ctr]); printf("\n================================"); printf("========================\n\n"); system("pause"); return 0; 23 Αριθµητική των δεικτών στους Πίνακες Αύξηση & Μείωση των δεικτών *ptrtoshort δείκτης για Πίνακα τύπου short *ptrtoshort++; αύξηση κατά 2 bytes επόµενο στοιχείο του πίνακα *ptrtofloat δείκτης για Πίνακα τύπου float *ptrtofloat++; αύξηση κατά 4 bytes επόµενο στοιχείο του πίνακα 24 12

Αριθµητική των δεικτών στους Πίνακες Αύξηση & Μείωση των δεικτών *ptrtoshort +=4; αύξηση κατά 2*4=8 bytes 4ο επόµενο στοιχείο του πίνακα *ptrtofloat +=10; αύξηση κατά 4*10=40 bytes 10ο επόµενο στοιχείο του πίνακα 25 #define MAX 10 int i_array[max] = 0,1,2,3,4,5,6,7,8,9 ; float f_array[max] =.0,.1,.2,.3,.4,.5,.6,.7,.8,.9 ; int *i_ptr, count; float *f_ptr; int main(int argc, char *argv[]) i_ptr = i_array; f_ptr = f_array; for (count = 0; count < MAX; count++) printf("%d\t%f\n", *i_ptr++, *f_ptr++); system("pause"); return 0; 26 13

Πράξεις δεικτών ιαφοροποίηση = αφαίρεση δεικτών *ptr1-*ptr2 πράξη έγκυρη Συγκρίσεις δεικτών *ptr1 <*ptr2 πράξη έγκυρη Πράξη Εκχώρηση Εµµεσότητα ιεύθυνση Αύξηση Μείωση ιαφοροποίηση Σύγκριση Περιγραφή & η τιµή είναι διεύθυνση της µεταβλητής * η τιµή της µεταβλητής ** η τιµή είναι διεύθυνση της διεύθυνσης ++, + -- - <, ==, <,!=, >=, <= 27 Σηµειογραφία Πινάκων & εικτών *(array)== array[0] *(array+1)== array[1] *(array+2)== array[2].... *(array+n)== array[n] 28 14

Πίνακες σε Συναρτήσεις #define MAX 10 int array[max+1], count; int largest(int num_array[]); int largest(int num_array[]).. return biggest; t main(int argc, char *argv[]). printf("\n\nlargest value = %d\n", largest(array)); 29 Πίνακες σε Συναρτήσεις #define MAX 10 int array[max+1], count; int largest(int *num_array); int largest(int *num_array).. return biggest; t main(int argc, char *argv[]). printf("\n\nlargest value = %d\n", largest(array)); 30 15