Προγραμματισμός σε C++ Σικαλίας Γιώργος - SikRip 8/12/2005 Σικαλιάς Γιώργος 1
Εισαγωγή Ο προγραμματισμός είναι να σαν να δίνουμε οδηγίες σε κάποιον: στόχος μας είναι να κάνει ο Η/Υ αυτό που θέλουμε Πρέπει να «μιλήσουμε» στον υπολογιστή στην γλώσσα που γνωρίζει Οι Η/Υ γνωρίζουν μόνο τα δυαδικά ψηφία (0 και 1) Φυσικά για τον άνθρωπο είναι δύσκολο να θυμάται τεράστιες αλληλουχίες από 0 και 1!!!! Γι αυτό οι επιστήμονες δημιούργησαν τις γλώσσες προγραμματισμού: μια γέφυρα ανάμεσα στον Η/Υ και στον άνθρωπο 8/12/2005 Σικαλιάς Γιώργος 2
C/C++ www.infospoudes.gr Η γλώσσα προγραμματισμού που θα ασχοληθούμε είναι η C/C++ H C αναπτύχθηκε από τους Dennis Ritchie & Brian Kernighan το 1970. Η C++ είναι μια βελτίωση της C, η οποία συμπεριλαμβάνει τον αντικειμενοστραφή προγραμματισμό και πολλά άλλα. Υπάρχουν πολλοί compilers για C/C++ για αρχή προτείνεται ο DevC++. 8/12/2005 Σικαλιάς Γιώργος 3
Βασικές Αρχές της C/C++ Όλα τα προγράμματα στην C++ είναι δομημένα σε συναρτήσεις. Οι συναρτήσεις χρησιμοποιούν η μια την άλλη. Όμως, η εκτέλεση του προγράμματος ξεκινά πάντα από την συνάρτηση main. Συνεπώς, η main πρέπει να υπάρχει σε κάθε πρόγραμμα μας. Ας δούμε το πρώτο μας πρόγραμμα... 8/12/2005 Σικαλιάς Γιώργος 4
Hello world σε C++ #include <stdio.h> int main() printf("hello world!\n"); return 0; Αυτή είναι η κύρια συνάρτηση του προγράμματος. Οι εντολές του προγράμματος βρίσκονται ανάμεσα σε κυκλικές αγκύλες. Η συνάρτηση main έχει τύπο επιστροφής int. Θα αναλύσουμε τον τύπο επιστροφής αργότερα. 8/12/2005 Σικαλιάς Γιώργος 5
Hello world σε C++ (2) #include <stdio.h> int main() printf("hello world!\n"); return 0; Με την συνάρτηση «printf» εμφανίζουμε μηνύματα στην οθόνη του υπολογιστή. Το «\n» στο τέλος της εντολής τοποθετεί τον κέρσορα στην επόμενη γραμμή, αφού εκτυπωθεί το μήνυμα. 8/12/2005 Σικαλιάς Γιώργος 6
Hello world σε C++ (3) #include <stdio.h> int main() printf("hello world!\n"); return 0; Η συνάρτηση «printf» υπάρχει μέσα στην βιβλιοθήκη «stdio.h». Για να χρησιμοποιήσουμε την «printf» πρέπει να «πούμε» στον υπολογιστή να συμπεριλάβει την κατάλληλη βιβλιοθήκη. Τι είναι βιβλιοθήκη; Σκεφθείτε τη σαν μια συλλογή από έτοιμες εντολές τις οποίες μπορείτε να χρησιμοποιείτε. Η C/C++ έχει έτοιμες βιβλιοθήκες για να μας διευκολύνει. 8/12/2005 Σικαλιάς Γιώργος 7
Hello world σε C++ (4) #include <stdio.h> int main() printf("hello world!\n"); return 0; Παράδειγμα hello.cpp Η εντολή «return» σημαίνει ότι το πρόγραμμά μας τελειώνει εκεί και επιστρέφει το αποτέλεσμα στον καλούντα. Η main καλείται από το λειτουργικό σύστημα. Το 0 δίπλα στο return είναι ο αριθμός που επιστρέφεται στο σύστημα. Συνήθως όταν επιστρέφουμε 0 σημαίνει ότι δεν έχει γίνει κάποιο λάθος. 8/12/2005 Σικαλιάς Γιώργος 8
Συναρτήσεις Οι συναρτήσεις στη C++ μπορούν να παρομοιαστούν με αυτές των μαθηματικών η διαφορά είναι ότι στη C++ εκφράζονται με εντολές. Οι συναρτήσεις επιστρέφουν μια τιμή, αυτό στη C++ γίνεται με την εντολή return. Η τιμή κάθε συνάρτησης επιστρέφεται στην συνάρτηση που την κάλεσε. Την συνάρτηση main την καλεί το λειτουργικό σύστημα. 8/12/2005 Σικαλιάς Γιώργος 9
Συναρτήσεις (2) Θυμηθείτε την δήλωση της main: int main() To «int» είναι ο τύπος επιστροφής.το «main» είναι το όνομα της συνάρτησης. Μέσα στις παρενθέσεις βάζουμε τα ορίσματα της συνάρτησης. Στην συγκεκριμένη συνάρτηση δεν έχουμε βάλει ορίσματα. 8/12/2005 Σικαλιάς Γιώργος 10
Παραδείγματα Συνάρτησης int add(int a,int b) return a+b; void printmyname() printf( George ); 8/12/2005 Σικαλιάς Γιώργος 11
Θυμηθείτε ότι Τα προγράμματα C++ είναι case sensitive που σημαίνει ότι το printf είναι διαφορετικό από το Printf και το PRINTF. Αν αντί για printf γράψουμε Printf το πρόγραμμά μας δεν θα τρέχει. Όλες οι εντολές στη C++ τελειώνουν με ένα ελληνικό ερωτηματικό (;) 8/12/2005 Σικαλιάς Γιώργος 12
Μεταγλώττιση Προγράμματος Πηγαίος κώδικας (source) hello.c Μεταγλωττιστής C (compiler) stdio.h Αρχεία επικεφαλίδας (header files) Object code hello.o Εκτελέσιμο πρόγραμμα (executable) hello Συνδέτης (linker) printf Βιβλιοθήκη (library) 8/12/2005 Σικαλιάς Γιώργος 13
Σχόλια Τα σχόλια βοηθούν των αναγνώστη του κώδικα σας (αλλά και εσάς μετά από καιρό!) να καταλάβει τι κάνει το πρόγραμμά σας. Τα σχόλια αγνοούνται από τον compiler Στη C++ τα σχόλια μπαίνουν με δύο τρόπους: /* σχόλιο */ // σχόλιο Αν τα σχόλιά σας είναι μίας ή δύο γραμμών χρησιμοποιήστε τον 2 ο τρόπο, αν έχετε σχόλια πολλών γραμμών χρησιμοποιήστε τον 1 ο τρόπο 8/12/2005 Σικαλιάς Γιώργος 14
Μεταβλητές Οι μεταβλητές χρησιμοποιούνται για να αποθηκεύουν τιμές. Οι δηλώσεις περιέχουν τον τύπο δεδομένων που χρειαζόμαστε. Παραδείγματα δηλώσεων μεταβλητών int count ; float area ; 8/12/2005 Σικαλιάς Γιώργος 15
Σταθερές Οι σταθερές έχουν όνομα και συγκεκριμένη τιμή Δήλωση σταθεράς (constant) Δήλωση Σταθεράς #define όνομα τιμή #define pi 3.1453 #define yes 1 #define no 0 #define true 1 #define false 0 8/12/2005 Σικαλιάς Γιώργος 16
Δηλώνοντας μεταβλητές Όταν δηλώνουμε μία μεταβλητή: Παραχωρείται χώρος μνήμης ώστε να αποθηκευτεί ο σχετικός τύπος δεδομένων Ο χώρος μνήμης σχετίζεται με ένα όνομα Παράδειγμα δήλωσης int count ; count FE07 8/12/2005 Σικαλιάς Γιώργος 17
Έγκυρα ονόματα μεταβλητών www.infospoudes.gr Το όνομα μιας μεταβλητής (identifier) C++ πρέπει να: Αποτελείται από γράμματα, ψηφία και το underscore. Μπορεί να είναι όσο μεγάλο θέλετε, αλλά μετρούν μόνο οι πρώτοι 31 χαρακτήρες. ΔΕΝ μπορεί να αρχίζει με αριθμό Δεν μπορεί να είναι δεσμευμένη λέξη της C++ 8/12/2005 Σικαλιάς Γιώργος 18
Δεσμευμένες λέξεις της C auto case const default double enum float goto break char continue do else extern for if 8/12/2005 Σικαλιάς Γιώργος 19 int register short signed sizeof struct typedef unsigned volatile long return static switch union void while
Διάκριση κεφαλαίων/πεζών Διαφέρουν τα μικρά από τα κεφαλαία Πχ.: area είναι διαφορετικό από το Area το οποίο διαφέρει από το AREA 8/12/2005 Σικαλιάς Γιώργος 20
Μεταβλητές - συνέχεια Η C++ έχει τρεις προκαθορισμένους τύπους μεταβλητών Integers int, long int, short int, unsigned int Κινητής υποδιαστολής (Floating point) float, double Χαρακτήρες char 8/12/2005 Σικαλιάς Γιώργος 21
Αρχικοποίηση Μεταβλητών Αρχικοποίηση μεταβλητών int x = 7; float y = 5.9; char c = A ; Μην «κρύβετε» την αρχικοποίηση Μερικές φορές είναι καλύτερα να ξεχωρίζετε τη δήλωση από την αρχικοποίηση Μπορεί να χρειάζεται σχόλιο Π.χ. int y = 6; //διάσταση y του κύβου ΟΧΙ int x, y = 6, z; 8/12/2005 Σικαλιάς Γιώργος 22
Συμβάσεις για τα ονόματα Οι μεταβλητές αρχίζουν με μικρό γράμμα Χρησιμοποιείστε ονόματα που έχουν νόημα Οι «λέξεις» διαχωρίζονται στο ίδιο όνομα με underscores ή μίξη πεζών και κεφαλαίων Παράδειγμα: surfacearea, surface_area surface_area Συνέπεια! 8/12/2005 Σικαλιάς Γιώργος 23
Συμβάσεις για τα ονόματα (2) www.infospoudes.gr Χρησιμοποιήστε κεφαλαία για σταθερές ( #define ) Πχ.: PI (#define PI 3.14159 ) Τα ονόματα συναρτήσεων ακολουθούν τις ίδιες συμβάσεις με τα ονόματα μεταβλητών 8/12/2005 Σικαλιάς Γιώργος 24
Ποια είναι έγκυρα ονόματα; AREA 3D Last-Chance x_yt3 num$ lucky*** area_under_the_curve num45 #values pi %done 8/12/2005 Σικαλιάς Γιώργος 25
Ποια είναι έγκυρα ονόματα; AREA 3D Last-Chance x_yt3 num$ lucky*** area_under_the_curve num45 #values pi %done 8/12/2005 Σικαλιάς Γιώργος 26
Μετατροπές Τύπων Μεταβλητών (Casting) Ρητή μετατροπή τύπου Μεταβλητή = (Νέος τύπος)(έκφραση προς μετατροπή) Π.χ. char c=(char)10; www.infospoudes.gr short count = (short)intcount; 8/12/2005 Σικαλιάς Γιώργος 27
Έξοδος στην οθόνη Η έξοδος στην οθόνη γίνεται με την συνάρτηση printf int main ( ) printf ("Print a simple string...\n"); int i_val=10; printf ("Print an integer...%d\n",i_val); float f_val=10.0; printf ("Print a float...%f\n",f_val); char s_val[]="a string"; printf ("Print a string... %s\n",s_val); system("pause"); return 0; 8/12/2005 Σικαλιάς Γιώργος 28
Έξοδος στην οθόνη (2) int printf( %d,int_var); float printf( %f,float_var); char printf( %c,char_var); double printf( %e,double_var); string* printf( %s,s_val); Παράδειγμα output.cpp 8/12/2005 29
Είσοδος από το πληκτρολόγιο Η είσοδος από το πληκτρολόγιο γίνεται με την συνάρτηση scanf() int main() int width, length, area; printf("width : "); scanf("%d", &width); printf("length: "); scanf("%d", &length); area = width * length; printf("the dimension is %d by %d\n", width, length); printf("the area is %d.\n", area); return 0; 8/12/2005 Σικαλιάς Γιώργος 30
Είσοδος από το πληκτρολόγιο(2) int scanf( %d,int_var); float scanf( %f,float_var); char scanf( %c,char_var); double scanf( %e,double_var); string* scanf( %s,s_val); Παράδειγμα input.cpp 8/12/2005 31
Αριθμητικοί Τελεστές Όνομα Τελεστής Παράδειγμα Πρόσθεση + num1 + num2 Αφαίρεση - initial - spent Πολ/σμός * count * 6 Διαίρεση / sum / count Υπόλοιπο % m % n 8/12/2005 Σικαλιάς Γιώργος 32
Τελεστής αύξησης και μείωσης www.infospoudes.gr Τελεστής αύξησης ++ Τελεστής μείωσης -- Αύξηση και μείωση εφαρμόζονται μόνο σε μεταβλητές, ΟΧΙ σε σταθερές ή σε εκφράσεις. Π.χ. i++; ++i; 8/12/2005 Σικαλιάς Γιώργος 33
Θέση τελεστή αύξησης: Μετά Η θέση του ++ προσδιορίζει ΠΟΤΕ θα αυξηθεί η τιμή. Εάν το ++ είναι μετά τη μεταβλητή τότε η αύξηση γίνεται τελευταία. int amount, count; www.infospoudes.gr count = 3; amount = 2 * count++; Το amount παίρνει την τιμή 2 * 3 και μετά το count αυξάνεται κατά 1 Μετά την τελευταία γραμμή, το amount είναι 6 και το count είναι 4. 8/12/2005 Σικαλιάς Γιώργος 34
Θέση τελεστή αύξησης: Πριν Εάν το ++ βρίσκεται πριν τη μεταβλητή, τότε η αύξηση γίνεται πρώτη int amount, count; count = 3; amount = 2 * ++count; Το 1 προστίθεται στο count, στη συνέχεια το amount γίνεται 2 * 4 Στην τελευταία γραμμή, amount είναι 8 και count είναι 4. 8/12/2005 Σικαλιάς Γιώργος 35
Τελεστής μείωσης Αν θέλω να αφαιρέσω 1 γράφω : count = count - 1; Πιο σύντομα: count--; ή --count; Και τα δύο επιτελούν την ίδια λειτουργία 8/12/2005 Σικαλιάς Γιώργος 36
Η θέση του τελεστή μείωσης: Μετά Το -- μετά την μεταβλητή έχει αντίστοιχη επίδραση με το ++ μετά την μεταβλητή int amount, count; count = 3; amount = 2 * count--; amount =2 * 3 και 1 από το count www.infospoudes.gr στη συνέχεια το αφαιρείται Στο τέλος amount=6 και count=2. 8/12/2005 Σικαλιάς Γιώργος 37
Η θέση του τελεστή μείωσης: Πριν Τι συμπεριφορά έχει το -- πριν τη μεταβλητή; int amount, count; count = 3; amount = 2 * --count; amount =2 * 2 Στο τέλος count =2. www.infospoudes.gr 8/12/2005 Σικαλιάς Γιώργος 38
Σχεσιακοί τελεστές < μικρότερο από > μεγαλύτερο από <= μικρότερο ή ίσο από >= μεγαλύτερο ή ίσο από == ίσο!= διαφορετικό Οι τιμές που παίρνουν είναι η int τιμή 1 (Αληθές) ή η int τιμή 0 (Ψευδές) Αυτοί οι τελεστές λέγονται δυαδικοί διότι παίρνουν δύο ορίσματα 8/12/2005 Σικαλιάς Γιώργος 39
Τελεστές ανάθεσης = += -= *= /= %= Έκφραση Ισοδύναμή έκφραση a = a + 2 ; a += 2 ; a = a - 3 ; a -= 3 ; a = a * 2 ; a *= 2 ; a = a / 4 ; a /= 4 ; a = a % 2 ; a %= 2 ; b = b + ( c + 2 ) ; b += c + 2 ; d = d * ( e - 5 ) ; d *= e - 5 ; 8/12/2005 Σικαλιάς Γιώργος 40
Σχεσιακοί τελεστές παραδείγματα int a = 1, b = 2, c = 3; Έκφραση Τιμή Έκφραση Τιμή a < c a + b >= c b <= c a + b == c c <= a a!= b a > b a + b!= c b >= c 8/12/2005 Σικαλιάς Γιώργος 41
Δομημένος Προγραμματισμός Όλα τα προγράμματα πρέπει να γράφονται ΜΟΝΟ με τις παρακάτω προδιαγραφές Ακολουθιακές εντολές Αν δεν υπάρχει επιλογή ή επανάληψη, οι εντολές εκτελούνται με τη σειρά που εγράφησαν. Επιλογή Επιλογή ανάμεσα σε εναλλακτικές προτάσεις Επανάληψη www.infospoudes.gr Επανάληψη ενέργειας, όσο κάποια συνθήκη παραμένει αληθής 8/12/2005 Σικαλιάς Γιώργος 42
Επιλογή με την εντολή if if ( συνθήκη ) εντολές Π.χ. if ( value == 0 ) printf ( Η τιμή που έβαλες είναι μηδέν\n ); 8/12/2005 Σικαλιάς Γιώργος 43
if - else if (συνθήκη ) εντολές /* η if πρόταση */ else εντολές /* η else πρόταση */ 8/12/2005 Σικαλιάς Γιώργος 44
Παράδειγμα if - else if ( value == 0 ) printf ( The value you entered was zero\n ); else printf ( You didn t enter a zero\n ); 8/12/2005 Σικαλιάς Γιώργος 45
if - else if - else if (συνθήκη) εντολές else if (συνθήκη) /* πολλαπλές προτάσεις */ /* else if */ εντολές else εντολές 8/12/2005 Σικαλιάς Γιώργος 46
Παράδειγμα if ( value == 0 ) printf ( The value you entered was zero\n ); else if ( value < 0 ) printf ( %d is negative.\n, value); else printf ( %d is positive.\n, value); Παράδειγμα ifelse.cpp 8/12/2005 Σικαλιάς Γιώργος 47
Επιλογή με την εντολή Switch Με την εντολή switch μπορούμε να επιλέξουμε πως θα συνεχίσει η εκτέλεση του προγράμματος ανάμεσα από πολλές τιμές Είναι ισοδύναμο με πολλές εντολές ifelse 8/12/2005 Σικαλιάς Γιώργος 48
Παράδειγμα switch switch (month) case 1: printf ("January"); break; case 2: printf ("February"); break; case 3: printf ("March"); break;... case 12: printf ("December"); break; default: printf ("Hey, that's not a valid month!"); break; Παράδειγμα switch.cpp 8/12/2005 Σικαλιάς Γιώργος 49
Δομή επανάληψης - Βρόχος while www.infospoudes.gr Η δομές επανάληψης επιτρέπουν στους προγραμματιστές να προσδιορίσουν μία ενέργεια που θα επαναλαμβάνεται όσο μία συνθήκη παραμένει αληθής. (Παράδειγμα σε ψευδοκώδικα) while υπάρχουν και άλλα παιδιά αφαίρεσε 1 από τον #παιδιών πολλαπλασίασε #κουλουριών με 2 end_while 8/12/2005 Σικαλιάς Γιώργος 50
Παράδειγμα while στη C++ while ( children > 0 ) children = children - 1; cookies = cookies * 2 ; 8/12/2005 Σικαλιάς Γιώργος 51
Βρόχος while και επαναλήψεις www.infospoudes.gr #include <stdio.h> int main () int i = 1; Αρχικοποίηση βρόχου μεταβλητή ελέγχου /* count from 1 to 10 */ while ( i < 11 ) έλεγχος συνθήκης που τερματίζει το βρόχο printf ( %d, i); i++; Μεταβολή της μεταβλητής ελέγχου βρόχου 8/12/2005 Σικαλιάς Γιώργος 52
Μέσος όρος για 10 φοιτητές int main ( ) int counter, grade, total, average ; total = 0 ; counter = 1 ; while ( counter <= 10 ) printf ( Enter grade : ); scanf ( %d, &grade); total = total + grade ; counter = counter + 1; average = total / 10 ; printf ( Class average is %d\n, average); 8/12/2005 Σικαλιάς Γιώργος 53
Είναι ευέλικτο; Πόσο καλό είναι το πρόγραμμα; Δουλεύει μόνο για 10 φοιτητές Θα θέλαμε να δουλεύει για οποιονδήποτε αριθμό φοιτητών. Καλύτερα (δηλαδή γενικότερη λύση) : Ρώτα το χρήστη τον αριθμό των φοιτητών 8/12/2005 Σικαλιάς Γιώργος 54
Μέσος όρος για Ν φοιτητές (γενική λύση) www.infospoudes.gr int main ( ) int numstudents, counter, grade, total, average ; total = 0 ; counter = 1 ; printf ( Enter Number of Students: ); scanf ( %d, &numstudents); while ( counter <= numstudents) printf ( Enter grade : ); scanf ( %d, &grade); total = total + grade ; counter = counter + 1; average = total / numstudents ; printf ( Class average is %d\n, average); 8/12/2005 Σικαλιάς Γιώργος 55
Γιατί το κάναμε γενικότερο; Όσο ποιο ευέλικτο είναι, τόσο ποιο δύσκολο είναι να γραφεί. ΑΛΛΑ είναι πιο χρήσιμο. 8/12/2005 Σικαλιάς Γιώργος 56
Χρήση βρόχου while για έλεγχο εισόδου int main ( ) int num ; printf ( Enter a positive integer : ) ; scanf ( %d, &num) ; while ( num < 0 ) printf ( \nthat s incorrect, try again\n ); printf ( Enter a positive integer : ) ; scanf ( %d, &num) ; printf ( You entered %d\n,num); Παράδειγμα while2.cpp 8/12/2005 Σικαλιάς Γιώργος 57
Οβρόχος for Με το for τα προηγούμενα υλοποιούνται απλούστερα Αρχικοποίηση, έλεγχος, μεταβολή είναι μέρος του βρόχου for ( i = 1; i < 11; i++) αρχικοποίηση μεταβολή έλεγχος 8/12/2005 Σικαλιάς Γιώργος 58
Πως λειτουργεί το for ; Όπως και με το βρόχο while έτσι και το for Αρχικοποιεί τη μεταβλητή ελέγχου Μεταβάλει τη μεταβλητή ελέγχου Ελέγχει τη μεταβλητή ελέγχου 8/12/2005 Σικαλιάς Γιώργος 59
Βρόχος for που μετράει από το 0 στο 9 www.infospoudes.gr for (i = 0; i < 10; i++) printf ( %d, i); printf ( \n ); 8/12/2005 Σικαλιάς Γιώργος 60
Μπορούμε να μετρήσουμε και αντίστροφα www.infospoudes.gr for (i = 10; i > 0; i--) printf ( %d, i); printf ( \n ); 8/12/2005 Σικαλιάς Γιώργος 61
Μπορούμε να μετρήσουμε με βήμα 2... ή 7... ή οτιδήποτε for (i = 0; i < 10; i += 2) printf ( %d, i); printf ( \n ); Παράδειγμα for.cpp 8/12/2005 Σικαλιάς Γιώργος 62
Η δομή επανάληψης dowhile www.infospoudes.gr do statement(s) while (condition); Το σώμα της do-while εκτελείται πάντα, τουλάχιστον μία φορά 8/12/2005 Σικαλιάς Γιώργος 63
Παράδειγμα do-while do printf ( Enter a positive number: ); scanf ( %d, &num); if (num <= 0) printf ( \nthat is not positive, try again\n ); while (num <= 0); Παράδειγμα dowhile.cpp 8/12/2005 Σικαλιάς Γιώργος 64
Ένα while που ελέγχει την είσοδο, σύγκριση με do-while printf ( Enter a positive number: ); scanf ( %d, &num); while (num <= 0) printf ( \nthat is not positive, try again\n ); printf ( Enter a positive number: ); scanf ( %d, &num); 8/12/2005 Σικαλιάς Γιώργος 65
for και while χρήση for όταν το πρόγραμμα «ξέρει» πόσες φορές θα επαναληφθεί ο βρόχος χρήση while όταν υπάρχει συνθήκη που τερματίζει το βρόχο χρήση do-while όταν το σώμα πρέπει να εκτελεστεί τουλάχιστον μία φορά. 8/12/2005 Σικαλιάς Γιώργος 66
break break μπορεί να χρησιμοποιηθεί σε βρόχο while, do-while και for για να προκαλέσει έξοδο από το βρόχο. ΔΕΝ ΕΙΝΑΙ ΣΥΝΙΣΤΩΜΕΝΗ ΤΑΚΤΙΚΗ 8/12/2005 Σικαλιάς Γιώργος 67
Παράδειγμα break σε βρόχο #include <stdio.h> int main ( ) int i; for (i = 1; i < 10; i++) if (i == 5) break; printf ( %d, i); printf ( \nbroke out of loop at i = %d\n, i); ΈΞΟΔΟΣ: 1 2 3 4 Έξοδος από βρόχο με i = 5 Παράδειγμα break.cpp 8/12/2005 Σικαλιάς Γιώργος 68
continue continue μπορεί να χρησιμοποιηθεί με for, while, do-while Προκαλεί την ματαίωση της εκτέλεσης των επομένων εντολών του βρόχου, για την τρέχουσα επανάληψη. Ο βρόχος συνεχίζει με την επόμενη επανάληψη 8/12/2005 Σικαλιάς Γιώργος 69
Παράδειγμα continue σε βρόχο #include <stdio.h> main ( ) int i; for (i = 1; i < 10; i++) if (i == 5) continue; printf ( %d, i); printf ( \n ); OUTPUT: 1 2 3 4 6 7 8 9 Παράδειγμα continue.cpp 8/12/2005 Σικαλιάς Γιώργος 70
Εμφωλιασμένοι βρόχοι for for (i = 1; i < 5; i++) for (j = 1; j < 3; j++) if (j % 2 == 0) printf ( O ); else printf ( X ); printf ( \n ); Πόσε φορές εκετελείται το if ; Ποια είναι η έξοδος; Παράδειγμα nestedfor.cpp 8/12/2005 Σικαλιάς Γιώργος 71
Πίνακες Ένας πίνακας είναι ένα σύνολο δεδομένων που έχουν το ίδιο όνομα και τον ίδιο τύπο Οι πίνακες είναι στατικοί, δηλαδή έχουν το ίδιο μέγεθος κατά την εκτέλεση του προγράμματος 8/12/2005 Σικαλιάς Γιώργος 72
Δηλώσεις πινάκων int array [5] ; Η παραπάνω δήλωση δεσμεύει αρκετή μνήμη ώστε να χωρέσουν 5 ακέραιοι. Δεν βάζει αρχικές τιμές σε αυτές τις θέσεις μνήμης Αρχικοποίηση του πίνακα μπορεί να γίνει ως εξής: int array [5] = 5, 2, 6, 9, 3 ; H πρώτη θέση του πίνακα είναι η θέση 0 array 5 2 6 9 3 0 1 2 3 4 8/12/2005 Σικαλιάς Γιώργος 73
Δείκτες στον πίνακα Τα στοιχεία του πίνακα βρίσκονται με το σύστημα δεικτών Π.χ. το array[0] είναι ίσο με το 5 και το array[3] είναι ίσο με το 9. Ο ακέραιος στις αγκύλες λέγεται δείκτης (subscript). O Δείκτης μπορεί να είναι και μία έκφραση που αποτιμάται ως ακέραιος Π.χ. το array[1+i] είναι 6 αν i=1 Στο παράδειγμά μας array είναι το όνομα του πίνακα. 8/12/2005 Σικαλιάς Γιώργος 74
Τροποποίηση Στοιχείων Μπορούμε να αλλάξουμε συγκεκριμένα στοιχεία: array [4] = 20; Μπορούμε να αποθηκεύσουμε τιμές σε ένα πίνακα και με τον παραπάνω τρόπο, αντί με την αρχικοποίηση 8/12/2005 Σικαλιάς Γιώργος 75
Συμπληρώνοντας τον πίνακα www.infospoudes.gr Αν οι πίνακες είναι πολύ μεγάλοι, η αρχικοποίηση δεν είναι πρακτική. Μπορούμε να αρχικοποιήσουμε πίνακα με το βρόχο for. for ( i = 0; i < 100; i++) rolls [ i ] = 0 ; Βάζει σε κάθε στοιχείο του πίνακα την τιμή 0 8/12/2005 Σικαλιάς Γιώργος 76
Αλφαριθμητικά (Strings) Στην C++ αναπαριστούμε τα αλφαριθμητικά με πίνακες χαρακτήρων Π.χ. char name[10]; αλφαριθμητικό μήκους 10 Π.χ. char name2[]= George ; αρχικοποιημένο αλφαριθμητικό Για να πάρουμε ένα string από το πληκτρολόγιο χρησιμοποιούμε την scanf() Π.χ. scanf( %s,name); Παράδειγμα input.cpp Παράδειγμα fillarray.cpp 8/12/2005 Σικαλιάς Γιώργος 77
Αλφαριθμητικά (Strings) (2) Στα αλφαριθμητικά πρέπει να προσέξουμε ότι ο τελευταίος χαρακτήρας είναι ο χαρακτήρας τερματισμού Συνεπώς όταν δηλώσουμε ένα string μήκους 10 μπορούμε να βάλουμε σε αυτό 9 χαρακτήρες (+1 ο χαρακτήρας τερματισμού=10) Τον χαρακτήρα τερματισμού δεν χρειάζεται να τον βάλουμε εμείς 8/12/2005 Σικαλιάς Γιώργος 78
Δομές Structs Οι δομές αναπαριστούν σύνθετα δεδομένα που δεν μπορούν να αναπαρασταθούν από ένα ακέραιο η ένα χαρακτήρα Π.χ. αν θέλαμε να αναπαραστήσουμε ένα φάρμακο το οποίο έχει όνομα, απόθεμα και τιμή Θα γράφαμε τα εξής στην C++ 8/12/2005 Σικαλιάς Γιώργος 79
Δομές Structs(2) struct med //δομή φαρμάκου char name[10]; //όνομα φαρμάκου int stock; //απόθεμα float cost; //κόστος ; Ουσιαστικά δημιουργούμε ένα νέο τύπο δεδομένων Δήλωση όμοια με απλούς τύπους: med mymed; Προσπέλαση στοιχείων δομής: mymed.name; mymed.stock; mymed.cost; Παράδειγμα struct.cpp 8/12/2005 Σικαλιάς Γιώργος 80
Πίνακες απο Structs Όπως και με τους απλούς τύπους μπορούμε να φτιάξουμε πίνακες από structs Π.χ. med mymeds[10] δήλωση πίνακα 10 φαρμάκων Προσπέλαση στοιχείων: mymeds[0].name Παράδειγμα structarray.cpp 8/12/2005 Σικαλιάς Γιώργος 81
Τέλος Παρουσίασης int main ( ) printf ("Ευχαριστώ για την προσοχή σας...\n"); printf ("Καλή επιτυχία...\n"); return 0; 8/12/2005 Σικαλιάς Γιώργος 82