ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές στην C (επανάληψη)
Advertisements

Το αλφαριθμητικό (string)
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Αντικειμενοστραφής Προγραμματισμός
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
ΜΑΘ-3122/106 Προγραμματισμός
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 4: Δείκτες, συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ.
MΑΘ 106/3122 Ξ. Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Αλφαριθμητικά (Strings)
ΜΑΘ-3122/106 Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
Αλγόριθμοι Ταξινόμησης
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1.  Ένα thread έχει: ID, program counter, register set, stack  Μοιράζεται με τα άλλα threads της ίδιας διεργασίας.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Ταξινόμηση και Αναζήτηση.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Δείκτες, Πίνακες σε Δείκτες, Δείκτες σε Συναρτήσεις
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Ταξινόμηση και Αναζήτηση
MΑΘ 106/3122Ξενοφών Ζαμπούλης ΜΑΘ 106/3122 Γλώσσα Προγραμματισμού Δείκτες (Pointers)
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Εντολές Ελέγχου Ροής.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΜΑΘ3122/106 – Γλώσσα προγραμματισμούΞενοφών Ζαμπούλης ΜΑΘ3122/106 Γλώσσα προγραμματισμού Συναρτήσεις.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Δομές Δεδομένων.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
HY150Ξενοφών Ζαμπούλης HY150 Ε π ι π λέον στοιχεία της C.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Τύ π οι Μεταβλητών Τελεστές Βασική Είσοδος / Έξοδος.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Δείκτες (Pointers) (1/2)
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 getchar() /* char_count.c A program to count characters of input. */ main() { int c ; int count = 0; while.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Δείκτες (Pointers) (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
TEXNΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ -150 Προγραμματισμός Αλγόριθμοι και Προγράμματα.
ΔΠΘ-ΤΜΗΜΑ ΜΠΔ: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ 1 Εισαγωγή στη γλώσσα Προγραμματισμού C ΠΙΝΑΚΕΣ (arrays)
Εισαγωγή στον Προγ/μό Η/Υ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Δομές.
Δείκτες 1/4 Σύμβαση Τελεστής &
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a1,a2,… ,an η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα.
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας δείκτης δείχνει στο 1 ο στοιχείο ενός π ίνακα Γιατί ; – Πολλές φορές δεν ξέρουμε τη συνάρτηση θέλουμε να καλέσουμε, μέχρι να τρέξουμε το π ρόγραμμα (π. χ., αν η συνάρτηση π ου π ρέ π ει να καλέσουμε καθορίζεται α π ό την είσοδο ). – Πολλές φορές π ρογραμματίζουμε ή χρησιμο π οιούμε συναρτήσεις βιβλιοθήκης οι ο π οίες χρησιμο π οιούν άλλες υ π οσυναρτήσεις. Οι τελευταίες μ π ορεί να π ρομηθεύονται α π ό τον χρήστη της βιβλιοθήκης, ώστε να αλλάζουν την συμ π εριφορά της συνάρτησης, χωρίς να χρειάζεται να την ξαναμεταγλωττίσουμε. – Α π αραίτητες π ολλές φορές για κατανοητό, ευανάγνωστο ή γρήγορο κώδικα. Α π οφεύγουμε τις π ολλές if/switch

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 2 Δείκτες σε συναρτήσεις Οι δείκτες σε συναρτήσεις – Τα π ερνάμε σαν ορίσματα σε συναρτήσεις – Α π οθηκεύονται σε π ίνακες – Εκχωρούνται σε άλλους δείκτες – Διαφορά 1 α π ό τους υ π όλοι π ους δείκτες : «π ρόσβαση » στα π εριεχόμενά τους : *functionPtr (*functionPtr)(argument1, argument2) Σε αυτήν την π ερί π τωση καλείται η συνάρτηση της ο π οίας η διεύθυνση είναι α π οθηκευμένη στον δείκτη – Διαφορά 2 α π ό τους υ π όλοι π ους δείκτες : ανάθεση διεύθυνσης μιας συνάρτησης και όχι μεταβλητής functionPtr = &afunction;

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 3 Δήλωση Δεικτών σε Συναρτήσεις int (*funPtr)(int, int) – Ο τύ π ος της μεταβλητής funPtr είναι « δείκτης σε συνάρτηση π ου π αίρνει δύο ορίσματα τύ π ου int, και ε π ιστρέφει int. int *funPtr(int, int) – Αυτό θα σήμαινε, ότι το funPtr είναι τύ π ου « συνάρτηση π ου π αίρνει δύο ορίσματα τύ π ου int, και ε π ιστρέφει δείκτη σε int) int (*funPtrarray[10])(int, int)) – Τυ π ος του funPtrarray: π ίνακας α π ό 10 δείκτες σε συναρτήσεις π ου π αίρνουν δύο ορίσματα τύ π ου int και ε π ιστρέφουν int

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 4 Παραδείγματα int function(int a, int b) { return a*b; } int main() { int (*funPtr)(int, int); funPtr = &function; printf(“Calling the function returns %d\n”, (*funPtr)(4, 5)); return 0; } Δήλωση του δείκτη σε συνάρτηση Ανάθεση της διεύθυνσης μιας συνάρτησης Κλήση της συνάρτησης π ου είναι α π οθηκευμένη στον δείκτη

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 5 Παράδειγμα Θυμηθείτε ότι η BubbleSort ταξινομεί ακεραίους βασιζόμενη σε συγκρίσεις μεταξύ τους. Αλλάξτε την BubbleSort ώστε να π αίρνει ως όρισμα την συνάρτηση σύγκρισης δύο ακεραίων και να την χρησιμο π οιεί για ταξινόμηση. Καλέστε την BubbleSort έτσι ώστε να ταξινομεί ακεραίους και κατά αύξοντα σειρά και κατά φθίνουσα

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 2 3#include 4#define SIZE 10 5void bubble( int [], const int, int (*)( int, int ) ); 6int ascending( int, int ); 7int descending( int, int ); 8 9int main() 10{ int order, 13 counter, 14 a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; printf( "Enter 1 to sort in ascending order,\n" 17 "Enter 2 to sort in descending order: " ); 18 scanf( "%d", &order ); 19 printf( "\nData items in original order\n" ); for ( counter = 0; counter < SIZE; counter++ ) 22 printf( "%5d", a[ counter ] ); if ( order == 1 ) { 25 bubble( a, SIZE, &ascending ); 26 printf( "\nData items in ascending order\n" ); 27 } 28 else { 29 bubble( a, SIZE, &descending ); 30 printf( "\nData items in descending order\n" ); 31 } 32 Notice the function pointer parameter.

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 33 for ( counter = 0; counter < SIZE; counter++ ) 34 printf( "%5d", a[ counter ] ); printf( "\n" ); return 0; 39} 40 41void bubble( int work[], const int size, 42 int (*compare)( int, int ) ) 43{ 44 int pass, count; void swap( int *, int * ); for ( pass = 1; pass < size; pass++ ) for ( count = 0; count < size - 1; count++ ) if ( (*compare)( work[ count ], work[ count + 1 ] ) ) 53 swap( &work[ count ], &work[ count + 1 ] ); 54} 55 56void swap( int *element1Ptr, int *element2Ptr ) 57{ 58 int temp; temp = *element1Ptr; 61 *element1Ptr = *element2Ptr; 62 *element2Ptr = temp; 63} 64 ascending and descending return true or false. bubble calls swap if the function call returns true. Notice how function pointers are called using the dereferencing operator. The * is not required, but emphasizes that compare is a function pointer and not a function.

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 65int ascending( int a, int b ) 66{ 67 return b < a; /* swap if b is less than a */ 68} 69 70int descending( int a, int b ) 71{ 72 return b > a; /* swap if b is greater than a */ 73} Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 1 Data items in original order Data items in ascending order Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 2 Data items in original order Data items in descending order }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 9 Binary trees O(log N) < O(N) Binary search trees: O(log N) search and insert struct tree_node { tree_node *left; tree_node *right; int data; };

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 10 Print binary search tree void print_inorder(tree_node *p) { if (p != NULL) { print_inorder(p->left); printf(“%d”,p->data); print_inorder(p->right); }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 11 Delete tree void deleteword(struct wordtree **node) { struct wordtree *temp = NULL; if (node != NULL) { if(*node != '\0') { if((*node)->right != NULL) { temp = *node; deleteword(&temp->right); } if((*node)->left != NULL) { temp = *node; deleteword(&temp->left); } if((*node)->word != NULL) free((*node)->word); if((*node)->firstline != NULL) deletelist((*node)->firstline); free(*node); *node = NULL; }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 12 Time time_t time(time_t *tloc) returns the time since 00:00:00 GMT, Jan. 1, 1970, measured in seconds. time() returns the value of time on success. If tloc is not NULL, the return value is also stored in the location to which tloc points. On failure, it returns (time_t) -1. time_t is typedefed to a long (int) in and header files.

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 13 Time int ftime(struct timeb *tp) fills in a structure pointed to by tp, as defined in On success, ftime() returns no useful value. On failure, it returns -1. struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 14 Time char *ctime(time_t *clock), char *asctime(struct tm *tm) ctime() converts a long integer, pointed to by clock, to a 26-character string of the form produced by asctime(). It first breaks down clock to a tm structure by calling localtime(), and then calls asctime() to convert that tm structure to a string. asctime() converts a time value contained in a tm structure to a 26-character string of the form: Sun Sep 16 01:03: asctime() returns a pointer to the string.

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 15 Timing example #include main() { int i; time_t t1,t2; time(&t1); for (i=1;i<=300;++i) printf(``%d %d %d n'',i, i*i, i*i*i); time(&t2); printf(`` n Time to do 300 squares and cubes= %d seconds n'', (int) t2-t1); }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 16 Running system commands from C int system(char *string) system returns the exit status of the shell. system is prototyped in main() { printf(“Files in Directory are: n''); system(“ls -l''); }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 17 Running system commands from C execl stands for execute and leave which means that a process will get executed and then terminated by execl. execl(char *path, char *arg0,...,char *argn, 0); The last parameter must always be 0. It is a NULL terminator. Since the argument list is variable we must have some way of telling C when it is to end. The NULL terminator does this job. execl(/bin/ls'', “ls'', “-l'',0); }

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 18 Random numbers Random positive integers - rand() #include // For time() #include // For srand() and rand() srand(time(0)); // Initialize random number generator. r = (rand() % 10) + 1;

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 19 Preprocessor Prevent multiple definitions in header files #ifndef MYHEADER_H #define MYHEADER_H... // This will be seen by the compiler only once #endif /* MYHEADER_H */

ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 20 Preprocessor Turning debugging code off and on #define DEBUG... #ifdef DEBUG... // debugging output #endif > gcc –DDEBUG myfile.c