Προγραμματισμός Επιπλέον στοιχεία της C++

Σχετικά έγγραφα
Προγραµµατισµός. Επιπλέον στοιχεία της C

ΗΥ-150. Προγραμματισμός

Δείκτες (Pointers) (1/2) ΗΥ150 Προγραμματισμός

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

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

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

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

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

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

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

HY150a Φροντιστήριο 3 24/11/2017

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

Φροντιςτήριο. Linked-List

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

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

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

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

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

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

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

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

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

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

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

Προγραμματισμός σε C. Πράξεις με bits (bitwise operators)

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

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

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

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

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

Σημειώσεις δεύτερης εβδομάδας

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

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

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

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

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

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

Εργαστήριο 3 Εντολή for while, do while

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

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

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

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

Περιεχόμενα. Πρόλογος... 17

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

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

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

Ένα απλό πρόγραμμα C

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

Συµβολοσειρές - Strings

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

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

Εκφωνήσεις ασκήσεων εργαστηρίου 1

2 Composition. Invertible Mappings

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

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

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

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

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

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

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

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

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

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

Σημειώσεις όγδοης εβδομάδας

Transcript:

Προγραμματισμός Επιπλέον στοιχεία της C++ Προγραμματισμός

Πρόγραμμα σε Διαφορετικά Αρχεία Οργανώνουμε καλύτερα τον κώδικα Χρήσιμα σε μεγάλα προγράμματα Παράδειγμα (human tracking) linker header files pgmio.cpp #include pgmio.h extern extern void myfunction(); Προγραμματισμός 2

header files Παράδειγμα - myalloc.h #ifndef MYHEADER_H #define MYHEADER_H... #include <stdio.h> #define Pi 3.1415927 //Orismos Domwn typedef struct Level { int level; struct List *head; struct List *tail; struct Level *next; } Level; typedef struct List { float **image; int l,c; struct List *next; } List; //Orismos global metablhtwn int globalvariable; //prototypes sunarthsewn void **Alloc2D(int dimx, int dimx_bytes, int dimy, int dimy_bytes); int **FreeInt(int **I, int dimx); Level *AllocTree(int depth, int l, int c); Level *FreeTree(Level *root); #endif /* MYHEADER_H */ Προγραμματισμός 3

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 */ Προγραμματισμός 4

Preprocessor Turning debugging code off and on #define EBUG... //#define EBUG... #ifdef EBUG... // debugging output cout << Hello\n ; #endif > g++ myfile.cpp > g++ DEBUG myfile.cpp Προγραμματισμός 5

Ορίσματα στη γραμμή εντολής int main(int argc, char *argv[]) argc: # Ορισμάτων argv: Ορίσματα int main(int argc, char *argv[]) { int i; for (i=0;i<argc;i++) cout << i << << argv[i]; } Παράδειγμα > a.out 10 20 test.txt //argc = 4 //argv[0] = a.out //argv[1] = 10 //argv[2] = 20 //argv[3] = test.txt Προγραμματισμός 6

int main(int argc, char *argv[]) { int number; } if (argc!= 2) { printf( Usage:%s number\n,argv[0]); exit(0); } number = atoi(argv[1]); Προγραμματισμός 7

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

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

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

Παραδείγματα 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; } Δήλωση του δείκτη σε συνάρτηση Ανάθεση της διεύθυνσης μιας συνάρτησης Κλήση της συνάρτησης που είναι αποθηκευμένη στον δείκτη Προγραμματισμός 11

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

1 2 3 #include <stdio.h> 4 #define SIZE 10 5 void bubble( int [], const int, int (*)( int, int ) ); 6 int ascending( int, int ); 7 int descending( int, int ); 8 9 int main() 10 { 11 12 int order, 13 counter, 14 a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 15 16 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" ); 20 21 for ( counter = 0; counter < SIZE; counter++ ) 22 printf( "%5d", a[ counter ] ); 23 24 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.

33 for ( counter = 0; counter < SIZE; counter++ ) 34 printf( "%5d", a[ counter ] ); 35 36 printf( "\n" ); 37 38 return 0; 39 } 40 41 void bubble( int work[], const int size, 42 int (*compare)( int, int ) ) 43 { 44 int pass, count; 45 46 void swap( int *, int * ); 47 48 for ( pass = 1; pass < size; pass++ ) 49 50 for ( count = 0; count < size - 1; count++ ) 51 52 if ( (*compare)( work[ count ], work[ count + 1 ] ) ) 53 swap( &work[ count ], &work[ count + 1 ] ); 54 } 55 56 void swap( int *element1ptr, int *element2ptr ) 57 { 58 int temp; 59 60 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.

65 int ascending( int a, int b ) 66 { 67 return b < a; /* swap if b is less than a */ 68 } 69 70 int descending( int a, int b ) 71 { 72 return b > a; /* swap if b is greater than a */ 73 } 73 } Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 1 Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 2 Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in descending order 89 68 45 37 12 10 8 6 4 2 Προγραμματισμός

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 <sys/types.h> and <sys/time.h> header files. Προγραμματισμός 16

Time int ftime(struct timeb *tp) fills in a structure pointed to by tp, as defined in <sys/timeb.h> On success, ftime() returns no useful value. On failure, it returns -1. struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; }; Προγραμματισμός 17

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:52 1973 asctime() returns a pointer to the string. Προγραμματισμός 18

Timing example #include <time.h> main() { int i; time_t t1,t2; time(&t1); int sum = 0; for (i=1;i<=300;++i) sum++; //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); } Προγραμματισμός 19

Running system commands from C int system(char *string) system returns the exit status of the shell. system is prototyped in <stdlib.h> main() { printf( Files in Directory are: n''); system( ls -l''); } Προγραμματισμός 20

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); system( /myhome/mya.out.exe 10 20 test.txt ); Προγραμματισμός 21

Random numbers Random positive integers - rand() #include <ctime> // For time() #include <cstdlib> // For srand() and rand() srand(time(0)); // Initialize random number generator. r = (rand() % 10) + 1; Προγραμματισμός 22