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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Αντικειμενοστρεφής Προγραμματισμός Διαφάνειες του μαθήματος Απόστολος Ζάρρας Πάνος Βασιλειάδης Παναγιώτης Τσαπάρας

2

3 Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό (Object Oriented Programming) Εισαγωγή Ως σχεδιαστές/προγραμματιστές λογισμικού σκοπό έχουμε να υλοποιούμε λογισμικό για την επίλυση προβλημάτων με βάση κάποιες δοσμένες απαιτήσεις. 2 Εισαγωγή Η ανάπτυξη ενός λογισμικού αποτελείται από μια ακολουθία από διακριτές φάσεις. Ανάλυση απαιτήσεων Τι ζητάει το πρόβλημα Σχεδίαση Από ποια βασικά δομικά στοιχεία θα αποτελείται το λογισμικό. Πχ. Δομές δεδομένων, συναρτήσεις, κλάσεις Υλοποίηση / Κατασκευή Κωδικοποίηση σε C, C++, Java, Fortran Έλεγχος αποσφαλμάτωση Εγκατάσταση Συντήρηση 3 1.1

4 Εισαγωγή Στην όλη διαδικασία ανάπτυξης ενός λογισμικού εμπλέκονται διάφοροι χαρακτήρες (actors) Ο πελάτης που καθορίζει τις απαιτήσεις Η ομάδα σχεδίασης Η ομάδα υλοποίησης ης Η ομάδα ελέγχου Η ομάδα εγκατάστασης Η ομάδα συντήρησης 4 Εισαγωγή Όσο μεγαλύτερης κλίμακας είναι το λογισμικό που πρόκειται να αναπτύξουμε τόσο πιο χρήσιμος είναι ο αντικειμενοστρεφής τρόπος σκέψης και υλοποίησης. Σε τέτοιες περιπτώσεις το μείζον πρόβλημα δεν είναι πλέον η υλοποίηση ενός μόνο αλγορίθμου ή η μετατροπή ενός αλγορίθμου σε κώδικα υπάρχουν διάφοροι actors καθένας από τους οποίους έχει τη δική του αρμοδιότητα στην επίλυση του συνολικού προβλήματος 5 Εισαγωγή Το μείζον πρόβλημα είναι η βέλτιστη σχεδίαση και υλοποίηση του κώδικα με στόχους Επιτάχυνση της φάσης της υλοποίησης Διευκόλυνση της φάσης του ελέγχου Διευκόλυνση της συντήρησης Ειδικότερα η φάση της συντήρησης είναι εξαιρετικά σημαντική σε εφαρμογές μεγάλης κλίμακας και το κόστος της είναι συνήθως μεγαλύτερο από το συνολικό κόστος όλων των υπόλοιπων φάσεων Τι είναι συντήρηση? επιδιόρθωση σφαλμάτων που προκύπτουν μετά την εγκατάσταση και χρήση του λογισμικού προσθήκη νέων λειτουργιών λόγω της μεταβολής των αρχικών απαιτήσεων των χρηστών του λογισμικού 6 1.2

5 Η γενική ιδέα.. Για να πετύχουμε τους στόχους αυτούς. Ομαδοποίηση των δεδομένων που διαχειρίζεται το λογισμικό μας και του κώδικα που χρησιμοποιείται για την διαχείριση αυτών των δεδομένων σε κλάσεις αντικειμένων. 7 Η γενική ιδέα.. σε πρώτη φάση, φανταστείτε μια κλάση σαν ένα struct Χ το οποίο πέρα από τα πεδία του ορίζει και ένα σύνολο από συναρτήσεις μέσω των οποίων το υπόλοιπο λογισμικό επεξεργάζεται τα δεδομένα που αποθηκεύονται στα πεδία μεταβλητών τύπου Χ 8 Η γενική ιδέα.. struct Human { int height; int age; ; void isborn(struct Human *ahuman) void ages(struct Human *ahuman); main(){ struct Human peter; isborn(&peter) ages(&peter); void isborn(struct Human *ahuman){ ahuman->height = 0; ahuman->age = 0; void ages(struct Human *ahuman){ ahuman->age += 1; ahuman->height += 20; 9 1.3

6 Η γενική ιδέα.. # include <cstdio> using namespace std; class Human { private: int height; int age; void ages(); void isborn(); ; void Human::ages(){ age += 1; // απλούστερος κώδικας!!! void Human::isborn(){ printf( A human is born ); int main(){ Human peter; peter.isborn(); peter.ages(); // απλούστερος κώδικας!!! 10 Η γενική ιδέα.. Λίγη ορολογία. Τα πεδία τα λέμε χαρακτηριστικά της κλάσης Οι συναρτήσεις ονομάζονται μέθοδοι της κλάσης Οι μεταβλητές τύπου Χ ονομάζονται αντικείμενα της κλάσης Χ Οι τιμές των πεδίων ενός αντικειμένου κατά τη διάρκεια εκτέλεσης του λογισμικού ονομάζεται κατάσταση του αντικειμένου Οι μέθοδοι της κλάσης ορίζουν τη συμπεριφορά των αντικειμένων της Δηλ τον τρόπο με τον οποίο μεταβάλλεται η κατάσταση των αντικειμένων της κλάσης όταν καλεστεί μια μέθοδος. 11 Η γενική ιδέα.. Διευκόλυνση της φάσης του ελέγχου Επιτάχυνση της φάσης της υλοποίησης Διευκόλυνση της συντήρησης Ενθυλάκωση (encapsulation) Συνάθροιση αντικειμένων (aggregation) Σύνθεση αντικειμένων (composition) Κληρονομικότητα (inheritance) & Πολυμορφισμός

7 Ενθυλάκωση Η βασική ιδέα είναι ότι χωρίζουμε τα χαρακτηριστικά και τις μεθόδους σε public και private. Private χαρακτηριστικά: η επεξεργασία των τιμών τους για ένα αντικείμενο γίνεται μόνο μέσω των μεθόδων της κλάσης Public μέθοδοι: μπορούν να χρησιμοποιηθούν οπουδήποτε στον κώδικα για την αλλαγή της κατάστασης ενός αντικειμένου της κλάσης τα σφάλματα δημιουργούνται σε σημεία του κώδικα στα οποία γίνεται επεξεργασία δεδομένων (π.χ. ανάθεση τιμών).αν η επεξεργασία γίνεται μέσω συγκεκριμένων μεθόδων τα σφάλματα βρίσκονται εκεί και όχι διάσπαρτα σε όλο τον κώδικα! 13 Συνάθροιση & Σύνθεση Αντικειμένων Μπορούμε να κατασκευάσουμε αντικείμενα που αποτελούνται από άλλα επιμέρους αντικείμενα επαναχρησιμοποιώντας κώδικα.. class Door { int code;.. ; class Room { Door x;. ; class Building { Room parts[10]; Door main_door; ; main () { Building xxx; 14 Κληρονομικότητα Φανταστείτε ένα πρόβλημα που έχει ως αντικείμενα πελάτες, υπαλλήλους και άλλα συναφή Τόσο οι πελάτες όσο και οι υπάλληλοι έχουν κοινά χαρακτηριστικά και συμπεριφορά (μεθόδους) Θα πρέπει να φτιάξω 2 κλάσεις. π.χ. Ύψος, βάρος κλπ. Θαχω πολλές φορές τον ίδιο κώδικα

8 Κληρονομικότητα Για να το αποφύγω και να έχω καλύτερη επαναχρησιμοποίηση δεδομένων και λειτουργιών. Ορίζω μια βασική κλάση Αυτή θα ορίζει τα κοινά χαρακτηριστικά/μεθόδους Η βασική κλάση επαναχρησιμοποιείται για τον ορισμό νέων κλάσεων μέσω του μηχανισμού της κληρονομικότητας (πχ πελάτης, υπάλληλος) στις οποίες ορίζονται επιπλέον χαρακτηριστικά και μέθοδοι

9 Διαδικαστικός vs. Αντικειμενοστρεφής Προγραμματισμός Θεματολόγιο Σύγκριση διαδικαστικού και αντικειμενοστρεφούς τρόπου σκέψης με παραδείγματα 1ο Παράδειγμα: διευκόλυνση ελέγχου και αποσφαλμάτωσης λογισμικού 2ο Παράδειγμα: διευκόλυνση συντήρησης λογισμικού 2 1ο Παράδειγμα 3 2.1

10 1ο Παράδειγμα Έστω ένα απλό πρόγραμμα του χειρίζεται πληροφορία για ένα σύνολο ανθρώπων Κάθε άνθρωπος χαρακτηρίζεται από όνομα ηλικία.. 4 1ο Παράδειγμα Spaghetti τρόπος σκέψης. όλος ο κώδικας στην main() 5 1ο Παράδειγμα # include <stdio.h> # include <stdlib.h> struct Person { char * name; int age; ; 6 2.2

11 1ο Παράδειγμα int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; 7 1ο Παράδειγμα Έστω κατά την εκτέλεση του προγράμματος προκύπτει πρόβλημα λόγω της απουσίας ελέγχου για το αν έχει επιτύχει η δυναμική δέσμευση μνήμης. μήμης 8 1ο Παράδειγμα int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); /* BOOM!!! */ printf ("%s", y.name); return 0; 9 2.3

12 1ο Παράδειγμα Για να το επιλύσει πρέπει να αναζητηθούν όλα τα σημεία του κώδικα στα οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person. αυτός που κάνει την αναζήτηση δεν είναι απαραίτητα αυτός που κατασκεύασε το πρόγραμμα ομάδα ελέγχου ομάδα συντήρησης 10 1ο Παράδειγμα int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); /* BOOM!!! */ printf ("%s", y.name); return 0; 11 1ο Παράδειγμα Προσθήκη ελέγχου σε κάθε σημείο

13 1ο Παράδειγμα int main(){ struct Person x, y; x.name = (char *) malloc (10* sizeof(char)); if(x.name == NULL) {printf(.. ); return 1; x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); if(y.name == NULL) {printf(.. ); return 1; y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; 13 1ο Παράδειγμα Διαδικαστικός τρόπος σκέψης αν σχεδιάζαμε εξαρχής καλύτερα το πρόγραμμα κατασκευή μιας συνάρτησης για την αρχικοποίηση μεταβλητών τύπου Person ο κώδικας που δεσμεύει δυναμικά μνήμη θα είναι συγκεντρωμένος σε μια συνάρτηση και όχι διάσπαρτος σε όλο το πρόγραμμα. 14 1ο Παράδειγμα # include <stdio.h> struct Person { char * name; int age; ; void init(struct Person *p){ p->name = (char *) malloc (10* sizeof(char)); p->age = 0;

14 1ο Παράδειγμα int main(){ struct Person x, y; init(&x); /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); init(&y); /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; 16 1ο Παράδειγμα Έστω κατά την εκτέλεση του προγράμματος προκύπτει πρόβλημα λόγω της απουσίας ελέγχου για το αν έχει επιτύχει η δυναμική δέσμευση μνήμης. μήμης 17 1ο Παράδειγμα Για να το επιλύσει πρέπει να αναζητηθεί η συνάρτηση στην οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person. οι συνθήκες αναζήτησης έχουν βελτιωθεί σε σχέση με την προηγούμενη έκδοση του προγράμματος (spaghetti τρόπος σκέψης) μόλις βρούμε την συνάρτηση έχουμε τελειώσει.. 1 αλλαγή αντί για πολλές αυτός που κάνει την αναζήτηση δεν είναι απαραίτητα αυτός που κατασκεύασε το πρόγραμμα Πιθανότατα πρέπει να ελεγχθούν πολλές συναρτήσεις για να βρούμε ποια είναι αυτή που πρέπει να διορθωθεί

15 1ο Παράδειγμα # include <stdio.h> struct Person { char * name; int age; ; void init(struct Person *p){ p->name = (char *) malloc (10* sizeof(char)); if (p -> name == NULL) {printf(.. ); exit(1); p->age = 0; 19 1ο Παράδειγμα int main(){ struct Person x, y; init(&x); /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); init(&y); /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); f(); return 0; 20 1ο Παράδειγμα Αντικειμενοστρεφής τρόπος σκέψης αν σχεδιάζαμε εξαρχής καλύτερα το πρόγραμμα Ομαδοποίηση του τύπου δεδομένων Person και του κώδικα που χρησιμοποιείται για την επεξεργασία αυτών των δεδομένων π.χ. της συνάρτησης init(). ορισμός της κλάσης Person

16 1ο Παράδειγμα # include <cstdlib> # include <cstring> // αυτό είναι σχόλιο!! class Person { // τι είναι αυτό το public?? char * name; int age; void init(); void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); // πεδία κλάσης // μέθοδοι κλάσης ; // προσοχή στο semicolon είναι υποχρεωτικό 22 1ο Παράδειγμα void Person::init(){ name = (char *) malloc (10* sizeof(char)); age = 0; void Person::set_name(char *n) { strcpy(name, n); void Person::set_age(int a) { age = a; char *Person::get_name() { return name; int Person::get_age() { return age; 23 1ο Παράδειγμα int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); printf ("%s", y.get_name()); return 0;

17 1ο Παράδειγμα Έστω ότι κατά την εκτέλεση του προγράμματος προκύπτει πρόβλημα λόγω της απουσίας ελέγχου για το αν έχει επιτύχει η δυναμική δέσμευση μνήμης. μήμης 25 1ο Παράδειγμα int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); /* ΒΟΟΟΜ */ printf ("%s", y.get_name()); return 0; 26 1ο Παράδειγμα Για επιλυθεί πρέπει να αναζητηθεί η συνάρτηση στην οποία γίνεται δέσμευση μνήμης για το πεδίο name των εκάστοτε μεταβλητών τύπου Person. οι συνθήκες αναζήτησης έχουν βελτιωθεί ακόμα περισσότερο σε σχέση με την προηγούμενη έκδοση του προγράμματος (διαδικαστικός τρόπος σκέψης) από τις δεκάδες / εκατοντάδες συναρτήσεις/μεθόδους του προγράμματος γνωρίζουμε ποιες χρησιμοποιούνται για την επεξεργασία μεταβλητών τύπου Person από τη δήλωση της κλάσης

18 1ο Παράδειγμα # include <cstdlib> # include <cstring> class Person { char * name; int age; // πεδία κλάσης void init(); // μέθοδοι κλάσης void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); μόνο αυτές οι μέθοδοι είναι ύποπτες!!! ; // προσοχή στο semicolon είναι υποχρεωτικό 28 1ο Παράδειγμα void Person::init(){ name = (char *) malloc (10* sizeof(char)); if (name == NULL) {printf( ); exit(1); age = 0; void Person::set_name(char *n) { strcpy(name, n); void Person::set_age(int a) { age = a; char *Person::get_name() { return name; int Person::get_age() { return age; 29 1ο Παράδειγμα int main(){ Person x, y; // δήλωση αντικειμένου x.init(); // κλήση μεθόδου στο αντικείμενο /*... */ x.set_name("name1"); printf ("%s", x.get_name()); y.init(); /*... */ y.set_name("name2"); printf ("%s", y.get_name()); return 0;

19 1ο Παράδειγμα Η χρήση κλάσεων από μόνη της λύνει το πρόβλημα μας???? (δηλαδή την εύρεση των σημείων του κώδικα στο οποίο πρέπει να προστεθούν έλεγχοι) Γενικά όχι, αν πρόκειται για ένα λογισμικό μεγάλης κλίμακας, ο κώδικας που κατασκευάζεται από έναν προγραμματιστή μπορεί να χρησιμοποιηθεί από έναν άλλο προγραμματιστή τι μπορεί να προκύψει σε αυτή την περίπτωση??? 31 1ο Παράδειγμα # include <cstdio> # include <cstdlib> # include <cstring> class Person { char * name; int age; void init(); void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); ; 32 1ο Παράδειγμα Κάθε πεδίο ή μέθοδο που δηλώνουμε ως public σε μια κλάση μπορεί να χρησιμοποιηθεί σε όλο τον υπόλοιπο κώδικα. Άρα, ένας απρόσεκτος προγραμματιστής που θα χρησιμοποιήσει αντικείμενα της κλάσης μας, μπορεί να αρχικοποιεί απευθείας τα πεδία αυτών των αντικειμένων, ξεχνώντας παράλληλα να κάνει τους απαραίτητους ελέγχους.. άρα, να εισάγει -εν αγνοία του- λογικά σφάλματα

20 1ο Παράδειγμα int main(){ Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; 34 1ο Παράδειγμα Η λύση στο πρόβλημα αυτό. δηλαδή, της ανεξέλεγκτης πρόσβασης σε πεδία και μεθόδους μιας κλάσης από άλλους προγραμματιστές είναι η αρχή της ενθυλάκωσης (encapsulation): σε κάθε κλάση, ο προγραμματιστής που την υλοποίησε, διαχωρίζει: ποια πεδία και μέθοδοι (public) μπορούν να χρησιμοποιηθούν από όλο τον υπόλοιπο κώδικα ποια πεδία και μέθοδοι (private) μπορούν να χρησιμοποιηθούν μόνο μέσω κλήσης των public μεθόδων της κλάσης μια συνήθης πρακτική την οποία πρέπει να ακολουθείτε και εσείς είναι ότι όλα τα πεδία τα δηλώνουμε private 35 1ο Παράδειγμα # include <cstdio> # include <cstdlib> # include <cstring> class Person { private: char * name; int age; void init(); void set_name(char *n); void set_age(int a); char *get_name(); int get_age(); ;

21 1ο Παράδειγμα int main(){ Person x, y; x.name = (char *) malloc (10* sizeof(char)); x.age = 0; /*... */ strcpy (x.name, "Name1"); printf ("%s", x.name); y.name = (char *) malloc (10* sizeof(char)); y.age = 0; /*... */ strcpy (y.name, "Name2"); printf ("%s", y.name); return 0; προσπάθεια πρόσβασης σε private πεδία => COMPILER ERRORS!!! 37 Παρενθετικά τα προγράμματα C++ τα αποθηκεύουμε σε αρχεία.cpp τα κάνουμε compile χρησιμοποιώντας g++ αντί για gcc 38 2ο Παράδειγμα

22 2ο Παράδειγμα Έστω μια εφαρμογή διαχείρισης αριθμών φορολογικού μητρώου. 40 Ανάλυση απαιτήσεων δύο βασικές αρμοδιότητες καταχώρηση νέων αριθμών φορολογικού μητρώου ΑΦΜ = ακέραιος αριθμός με 5 ψηφία καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9 41 Σχεδίαση Διαδικαστικός τρόπος σκέψης

23 Σχεδίαση καταχώρηση νέων αριθμών issuenew( ) : ανάγνωση και αποθήκευση σε ένα πίνακα Α ενός νέου ΑΦΜ checkvalidity( ): επαλήθευση αριθμών φορολογικού μητρώου που υπάρχουν στον πίνακα Α έλεγχος αν είναι 5ψήφιοι. καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9 countbylastdigit( ): καταγραφή του πλήθους των ΑΦΜ που καταλήγουν σε 0, 1, 2,, 9 σε δεύτερο πίνακα Β printnumbers( ): εμφάνιση στην οθόνη του πίνακα Β 43 Υλοποίηση #include <stdio.h> void issuenew (int A[], int *size); void checkvalidity(int A[], int size); void countbylastdigit(int A[], int size, int B[]); void printnumbers(int B[]); 44 Υλοποίηση int main(){ int A[100]; int currentsize = 0; int B[10]; issuenew(a, &currentsize); issuenew(a, &currentsize); issuenew(a, &currentsize); checkvalidity(a, currentsize); countbylastdigit(a, currentsize, B); printnumbers(b); return 0;

24 Υλοποίηση void issuenew (int A[], int *size){ int input; printf("enter new number: "); scanf("%d", &input); A[*size] = input; (*size)++; 46 Υλοποίηση void checkvalidity(int A[], int size){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\n"); 47 Υλοποίηση void countbylastdigit(int A[], int size, int B[]){ int i; int lastdigit; for(i = 0; i < 10; i++) B[i] = 0; for(i = 0; i < size; i++){ lastdigit = A[i] % 10; B[lastDigit]++; void printnumbers(int B[]){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);

25 Συντήρηση το φορολογικό σύστημα αλλάζει και τα ΑΦΜ γίνονται ποιες συναρτήσεις επηρεάζονται από αυτή την αλλαγή? 49 Συντήρηση void issuenew (int A[], int *size){ int input; printf("enter new number: "); scanf("%ld", &input); A[*size] = input; (*size)++; 50 Συντήρηση void checkvalidity(int A[], int size){ int i; int length; int temp; Previous version of the code for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\n");

26 void checkvalidity(int A[], int size){ int i; int length; int temp; Previous version of the code for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\n"); 52 Συντήρηση void checkvalidity(int A[], int size){ int i; int length; int temp; New version of the code for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 6) { printf("error with number in position %d\n", i); return; printf("all OK!\nx"); 53 void countbylastdigit(int A[], int size, int B[]){ int i; int lastdigit; for(i = 0; i < 10; i++) B[i] = 0; for(i = 0; i < size; i++){ lastdigit = A[i] % 10; B[lastDigit]++; void printnumbers(int B[]){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]);

27 Σχεδίαση Αντικειμενοστρεφής τρόπος σκέψης 55 Σχεδίαση Στον αντικειμενοστρεφή προγραμματισμό για κάθε αρμοδιότητα μιας εφαρμογής ορίζουμε μια νέα κλάση ομαδοποιούμε μ δεδομένα και συναρτήσεις ρή οι οποίες διαχειρίζονται αυτά τα δεδομένα μια κλάση είναι σαν ένα struct στη C το οποίο αποτελείται από ένα σύνολο πεδίων / χαρακτηριστικών ένα σύνολο συναρτήσεων / μεθόδων 56 Υλοποίηση #include <cstdio> class ManageAFM{ private: int A[100]; int size; void init(); void issuenew(); void checkvalidity(); int getlastdigitsandsize(int LastDigits[]); /* επιστρέφει το size και τα τελευταία ψηφία των Α[i] */ ;

28 Υλοποίηση void ManageAFM::init(){ size = 0; void ManageAFM::issueNew (){ int input; printf("enter new number: "); scanf("%d", &input); A[size] = input; size++; 58 Υλοποίηση void ManageAFM::checkValidity(){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\nx"); 59 Υλοποίηση int ManageAFM::getLastDigitsAndSize(int LastDigits[]){ int i; for(i = 0; i < size; i++){ LastDigits[i] = A[i] % 10; return size;

29 Υλοποίηση class AFMStatistics{ private: int B[10]; void init(); void countbylastdigit(int LastDigits[], int size); void printnumbers(); ; void AFMStatistics::init(){ int i; for(i = 0; i < 10; i++) B[i] = 0; 61 Υλοποίηση void AFMStatistics::countByLastDigit(int LastDigits[], int size){ int i; int lastdigit; for(i = 0; i < size; i++){ lastdigit = LastDigits[i]; B[lastDigit]++; void AFMStatistics::printNumbers(){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]); 62 int main(){ ManageAFM manager; AFMStatistics stats; int LastDigits[100]; int currentsize; manager.init(); manager.issuenew(); manager.issuenew(); manager.issuenew(); manager.checkvalidity(); currentsize = manager.getlastdigitsandsize(lastdigits); stats.init(); stats.countbylastdigit(lastdigits, currentsize); stats.printnumbers(); return 0;

30 Συντήρηση - τι κερδίσαμε??? ποιες μέθοδοι εξαρτώνται από τον πίνακα με τα ΑΦΜ (πίνακας Α) 64 Συντήρηση - τι κερδίσαμε??? void ManageAFM::init(){ size = 0; void ManageAFM::issueNew (){ int input; printf("enter new number: "); scanf("%ld", &input); A[size] = input; size++; 65 Συντήρηση - τι κερδίσαμε??? void ManageAFM::checkValidity(){ int i; int length; int temp; for (i=0; i < size; i++){ length = 1; temp = A[i]; while(temp > 9){ temp = temp / 10; length++; if (length!= 5) { printf("error with number in position %d\n", i); return; printf("all OK!\n");

31 Συντήρηση - τι κερδίσαμε??? int ManageAFM::getLastDigitsAndSize (int LastDigits[]){ int i; for(i = 0; i < size; i++){ LastDigits[i] = A[i] % 10; return size; 67 Συντήρηση - τι κερδίσαμε??? #include <cstdio> class ManageAFM{ private: int A[100]; int size; void init(); void issuenew(); void checkvalidity(); int getlastdigitsandsize (int LastDigits[]); ; 68 Συντήρηση - τι κερδίσαμε??? ποιες μέθοδοι εξαρτώνται από τον πίνακα με τα στατιστικά (πίνακας Β)??

32 Συντήρηση - τι κερδίσαμε??? void AFMStatistics::init(){ int i; for(i = 0; i < 10; i++) B[i] = 0; void AFMStatistics::countByLastDigit (int LastDigits[], int size){ int i; int lastdigit; for(i = 0; i < size; i++){ lastdigit = LastDigits[i]; B[lastDigit]++; void AFMStatistics::printNumbers(){ int i; printf("count by last digit:\n"); for (i = 0; i < 10; i++){ printf("%d: %d\n", i, B[i]); 70 Συντήρηση - τι κερδίσαμε??? class AFMStatistics{ private: int B[10]; void init(); void countbylastdigit (int LastDigits[], int size); void printnumbers (); ; 71 Συντήρηση - τι κερδίσαμε??? οι μέθοδοι που εξαρτώνται από τα εκάστοτε δεδομένα μιας εφαρμογής είναι αυτές που τα χειρίζονται ποιες τα χειρίζονται?? μόνο αυτές που ορίζονται στην ίδια κλάση με τα δεδομένα στην κλάση της οποίας η αρμοδιότητα είναι η διαχείριση των δεδομένων

33 Συντήρηση - τι κερδίσαμε??? άρα για να ανακαλύψουμε ποιον κώδικα πρέπει να ελέγξουμε μετά από ένα σενάριο συντήρησης που αφορά τα δεδομένα μιας κλάσης αρκεί να εξετάσουμε ποιες μέθοδοι ορίζονται ρζ σε αυτή την κλάση

34

35 C++ fundamental building blocks (χωρίς να αναφερθούμε, όμως, σε έννοιες του αντικειμενοστρεφούς προγραμματισμού ) (γεια σας και χαρά σας) HELLO WORLD 2 Κύριο πρόγραμμα //A Simple C++ program #include <iostream> using namespace std; Χρειαζόμαστε (α) βιβλιοθήκες (π.χ., iostream for i/o) (β) std namespace (to be explained later) int main(){ cout << Hello world! << endl; return 0; Χρειαζόμαστε τη main() ως την κεντρική συνάρτηση του προγράμματός μας 3 3.1

36 (εισαγωγικά) ΕΙΣΟΔΟΣ / ΕΞΟΔΟΣ 4 Είσοδος / Έξοδος δεδομένων Στη C++ η βασική είσοδος και έξοδος γίνεται με τα ρεύματα εισόδου / εξόδου cout και cin, τα οποία είναι αντικείμενα τύπου istream και ostream αντίστοιχα Ο τελεστής << παίρνει μια (σύνθετη) έκφραση από το πρόγραμμά μας και την εισάγει στο cout, το οποίο με τη σειρά του την στέλνει στην οθόνη Ο τελεστής >> εξάγει δεδομένα από το cin (το οποίο τα παίρνει από το πληκτρολόγιο) και τα στέλνει στις μεταβλητές υποδοχής Η είσοδος / έξοδος της C υποστηρίζεται για λόγους συμβατότητας, επίσης 5 Απλή είσοδος / έξοδος: cout / cin #include <iostream> using namespace std; main(){ cout << Hello world! << endl; Ισοδύναμα: cout << Hello << world!\n ; cout << Hello world!\n ; 6 3.2

37 Είσοδος / Έξοδος δεδομένων #include <iostream> using namespace std; int main(){ int i; cin >> i; float f; cin >> f; char c; cin >> c; char buf[100]; cin >> buf; cin >> i >> f >> buf; 7 Είσοδος / Έξοδος δεδομένων #include <iostream> using namespace std; int main(){ int i; cin >> i; cout << "i = "; cout << i; cout << "\n"; float f; cin >> f; cout << "f = "; cout << f; cout << "\n"; cin >> i >> f; cout << "i = " << i << "\n" << "f = " << f << \n ; cout << "i = " << i << endl << "f = " << f << endl; 8 (βασικοί τύποι, αρχικοποιήσεις, strings, const) ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ 9 3.3

38 Βασικοί τύποι int xint; //4 bytes (σπάνια 2) short int xshortint; //2 bytes long int xlong; //4 bytes float xfloat; //4 bytes double xdouble; //8 bytes char xchar; //1 byte bool xbool; //1 byte xbool = true; xbool = false; 10 Πίνακες Integers int dataarray[3]; C Strings #include <cstring> char firstname[6]; main(){ strcpy (firstname, eddie ); 11 Δηλώσεις Μεταβλητών Στη C++ δηλώσεις μεταβλητών μπορούν να γίνουν παντού και όχι μόνο στην αρχή κάθε συνάρτησης (including main()) int main(){ int x, y, z; if( ) { //.. float f;

39 Δηλώσεις τοπικών μεταβλητών παντού Επιτρέπονται δηλώσεις μεταβλητών παντού μέσα στο πρόγραμμα. void f () { int x = 0; cout << x; int y = x + 1; cout << y; for (int i=1; i < y; i++){ cout << i; Η i ΔΕΝ ζει μετά το block του for 13 Αρχικοποίηση Μεταβλητών int counter(0); //equiv. to: int counter=0; int myarray[4] = {1,2,3,4; //equiv. to: myarray[0] = 1; //we start from 0 myarray[1] = 2;... //could also say int myarray[] = {1,2,3,4; //size: 6, length: 6 remember the last \0 char firstname[] = eddie ; //size: 50, length: 6 char firstname[50] = eddie ; 14 Πολυδιάστατοι Πίνακες int mymatrix[2][4]; int mymatrix[2][4] = { {1,2,3,4, {5,6,7,8 ;

40 Const Pay particular attention: frequently used for (input) parameter passing, as well as global variables!! 16 const main(){ int const SIZE = 20; //can be used to initialize an array char buffer[size]; //will NOT work const variables do NOT change SIZE = 8; 17 Διαφορές const και #define Το #define αντικαθιστά την έκφραση με την ισοδύναμή της, μέσω του preprocessor (ΔΕΝ είναι μέρος της C++) To #define είναι εξ ορισμού global ορισμός, ενώ το const έχει δικό του scope. Η συντακτική ορθότητα μιας δήλωσης const ελέγχεται αμέσως, ενώ για το #define μόνο αφού γίνει η αντικατάσταση. Το όποιο λάθος εμφανίζεται στη γραμμή του προγράμματος και όχι στη δήλωση του #define. Το #define είναι συχνή πηγή σύγχυσης και bugs, ιδίως όταν ο κώδικας σπάσει σε πολλά αρχεία => θα αποφεύγουμε τα #define και θα χρησιμοποιούμε const μεταβλητές!

41 const Πρακτικός κανόνας: όταν δηλώνω μια μεταβλητή σαν const ΔΕΝ μπορώ να αλλάξω οτιδήποτε βρίσκεται αριστερά του keyword const. char const *buf Μπορώ να αλλάξω τον pointer, αλλά όχι τα δεδομένα του array char *const buf Δεν μπορώ να αλλάξω τον pointer, αλλά μπορώ να αλλάξω τα δεδομένα του array 19 Διαβάστε [και γράψτε] από δεξιά... Ο buf είναι const pointer (άρα δεν αλλάζει) σε χαρακτήρες char *const buf Ο buf είναι pointer σε const χαρακτήρες (οι οποίοι, συνεπώς δεν αλλάζουν) char const *buf 20 C++ strings

42 Strings Στη C++ υπάρχει έτοιμος τύπος δεδομένων που ονομάζεται string για τη διαχείριση συμβολοσειρών. Σε μια μεταβλητή τύπου string μπορούμε να αποθηκεύσουμε ακολουθίες χαρακτήρων χωρίς να ανησυχούμε για το αν χωράνε στην μεταβλητή αυτή. Η διαχείριση των bytes που δεσμεύονται από τη μεταβλητή γίνεται δυναμικά ανάλογα με το μέγεθος της ακολουθίας που αποθηκεύουμε σε αυτή. Επίσης δεν χρειάζεται να ανησυχούμε για το αν η ακολουθία τερματίζεται με \0. Χρειάζεται να συμπεριλάβουμε τη βιβλιοθήκη string στην include list του προγράμματος 22 Strings Δήλωση και αρχικοποίηση #include <iostream> #include <string> using namespace std; int main(){ string imblank; string heymom( where is my coat? ); string heypap = whats up? ; string heygranpa(heypap); string heygranma = heymom; 23 Strings Δήλωση και αρχικοποίηση #include <iostream> #include <string> using namespace std; int main(){ string s1( I saw elvis in a UFO. ); string s2(s1, 0, 8); string s3 = s1 + Am I crazy? ; //append!! string s4 = s1.substr(2, s1.length()-10); //take a substring: starting pos, how many chars

43 Strings Επεξεργασία #include <iostream> #include <string> using namespace std; int main(){ string s1( I saw elvis in a UFO. ); cout << s1.size() << \n ; cout << s1.length() << \n ; // Very important, very frequently used! cout << s1.capacity() << \n ; string s2 = thought I ; s1.insert(1, s2); // insert in position 1, i.e. right after I cout << s1.capacity() << \n ; string s3 = I ve been working too hard ; s1.append(s3); //append, again, equiv. to + s1.append(, or am I crazy?); s1.resize(10); // increase/reduce the capacity cout << s1 << "\n"; 25 Strings Επεξεργασία #include <iostream> #include <string> using namespace std; int main(){ string s( Hello mother ); string s1( fa ); s.replace(6, p 2, s1); // start at 7 th character (counting starts with 0), replace 2 chars with the whole of s1 // Syntax: starting pos, how many chars to replace, replacement cout << s << \n ; 26 Strings Επεξεργασία #include <iostream> #include <string> using namespace std; int main(){ string s("hello mother. How are you mother? Im fine mother."); string s1("fa"); string s3("mo"); int start = 0; unsigned int found = 1; found = s.find(s3, start); while (found!= string::npos){ s.replace(found, s3.length(), s1); start = found + s1.length(); cout << s << "\n"; found = s.find(s3, start); cout << s << "\n";

44 Strings Επεξεργασία s.rfind(s1, s.length()-1); // finds s1 in s backwards starting from the last character pos); // find position of first occurrence of a char in starting from pos pos); // find position of last occurrence of a char in 28 Strings Επεξεργασία με τελεστές s= s1 + s2 + s3; s += s5 + s6; s[10] = c ; s.at(10) = c ; s1 == s2 s1!= s2 s1 >= s2 s1 <= s2 s1 > s2 s1 < s2 29 Strings and backwards compatibility with C Για λόγους συμβατότητας προς τα πίσω, υποστηρίζονται και οι συμβολοσειρές της C Στη C τα strings είναι ακολουθίες χαρακτήρων που τερματίζονται με το χαρακτήρα \0. Αποθηκεύονται σε πίνακες χαρακτήρων. Η επεξεργασία τους διευκολύνεται από έτοιμες συναρτήσεις όπως strcpy, strcmp, How to convert a string s to a (C-style) char array: const char *p = s.c_str();

45 (συνθήκες, βρόγχοι και τα σχετικά) ΒΑΣΙΚΕς ΕΝΤΟΛΕς 31 If Else Statement if (condition) { statement;... else { statement;... Λογικοί τελεστές για σύνθετες συνθήκες: OR: ((cond1) (cond2)) AND: ((cond1)&&(cond2)) NOT:!(cond1) Προσοχή: = vs. == 32 Switch Statement switch (condition) { case constant1: statement;... break; case constant2: statement;... break;... default: statement;... break; Προσοχή: αν παραληφθεί το break, εκτελείται η επόμενη εντολή! Δεν το παραλείπουμε ποτέ!!! Το default καλύπτει την περίπτωση που χάνουμε κάποια case

46 Loop Statements while (condition){ statement;... for (declaration-initialization; condition; iteration){ statement;... //Example of counting... for (int i=0; i<5; i++){ cout << i*5+3; //runs 5 times 34 Συναρτήσεις (εισαγωγικά) #include <iostream> using namespace std; float trianglearea (float width, float height); main(){ float area = trianglearea(1.0, 2.0); cout << "The area of the triangle is " << area; float trianglearea(float width, float height){ float area; // local στην trianglearea area = width * height / 2.0; return (area); 35 ΔΕΙΚΤΕΣ ΚΑΙ ΑΝΑΦΟΡΕΣ

47 Δείκτες Δείκτης είναι μια μεταβλητή στην οποία αποθηκεύουμε τη διεύθυνση μιας άλλης μεταβλητής. int anint; int *aptr; 0x anint (θέση μνήμης 0x1000) aptr anint aptr = & anint; anint = 10; *aptr = 15; 15 anint χρόνος 37 Δείκτες Δέσμευση Μνήμης int *aptr = NULL; 0x0000 aptr aptr = (int *)malloc(sizeof (int)); *aptr = 10; 0x1000 Θέση μνήμης 0x1000 aptr αντίστοιχα στη C++ aptr = new int; *aptr = 10; 10 Θέση μνήμης 0x1000 χρόνος 38 Δείκτες Αποδέσμευση Μνήμης int *aptr = NULL; aptr = (int *)malloc(sizeof (int)); *aptr = 10; free(aptr); αντίστοιχα στη C++ aptr = new int; *aptr = 10; delete aptr; 0x0000 0x aptr Θέση μνήμης 0x1000 aptr Θέση μνήμης 0x1000 χρόνος Θέση μνήμης 0x

48 Δείκτες Πίνακες - Δέσμευση Μνήμης int *aptr = NULL; aptr = (int *)malloc(10*sizeof (int)); 0x0000 aptr *aptr = 10; aptr[0] = 10; *(aptr + 2) = 6; aptr[2] = 6; free(aptr); αντίστοιχα στη C++ aptr = new int [10]; *aptr = 10; delete [] aptr; x1000 Θέση μνήμης 0x1000 aptr χρόνος 40 Αναφορές (References) Μια αναφορά σε μια μεταβλητή είναι σαν ένα συνώνυμο για τη μεταβλητή. Προσοχή: ΔΕΝ πρόκειται για pointers (αν και υπάρχουν κάποιες ομοιότητες, βέβαια βλ. παρακάτω...)... int myint; int &myref = myint;... Έτσι δηλώνουμε αναφορές: κατά τη δήλωση πρέπει να καθορίζουμε τη μεταβλητή της οποίας είναι συνώνυμα 41 Αναφορές (References) Όταν δηλώνουμε μια μεταβλητή, αυτό σημαίνει ότι της παραχωρούμε κάποιο χώρο στη μνήμη και ένα όνομα στο χώρο αυτό Όταν δηλώνουμε μια αναφορά σε μια μεταβλητή, είναι σαν να δίνουμε παραπάνω από ένα ονόματα στο συγκεκριμένο χώρο στη μνήμη. Οι παρακάτω εντολές είναι ισοδύναμες: myint++; myref++;

49 Αναφορές int myint;?? myint myint = 4; 4 myint int &myref = myint; 4 myint myref 43 Τι κρύβουν. int myint = 5; int &myref = myint; myint = 8; myref = 7; int * const myref_p = &myint; myint = 8; *myref_p = 7; 44 Τι κρύβουν. #include <iostream> using namespace std; int * const refa_p = &a; int main() { int a(1), b(3); int& refa = a; cout << refa << endl; cout << a << endl; refa = b; cout << a << endl; return 0; cout << *refa_p << endl; *refa_p = b;

50 Πού χρησιμεύουν. Οι δηλώσεις αναφορών που παίζουν το ρόλο συνώνυμων μιας μεταβλητής σε ένα πρόγραμμα δεν έχουν πολύ μεγάλη χρησιμότητα. Το ίδιο ισχύει για τις δηλώσεις δεικτών που τοποθετούνται σε κάποια υπάρχουσα μεταβλητή int x = 10; int *x_p = &x; Εκεί που βοηθούν δραστικά τόσο οι δείκτες όσο και οι αναφορές είναι σε συναρτήσεις στο πέρασμα παραμέτρων δι αναφοράς. Στην περίπτωση που χρησιμοποιήσουμε αναφορές σαν ορίσματα σε συναρτήσεις το πέρασμα δι αναφοράς γίνεται ακόμα πιο απλό. 46 ΠΈΡΑΣΜΑ ΠΑΡΑΜΈΤΡΩΝ ΣΕ ΣΥΝΑΡΤΉΣΕΙς 47 Πέρασμα δια τιμής #include <iostream> Using namespace std; void increase(int myparameter) { myparameter++; cout << myparameter << "\n"; int main(){ int avalue = 3; Δημιουργείται τοπική κόπια του avalue increase(avalue); cout << avalue << "\n";

51 Πέρασμα δι αναφοράς με δείκτη #include <iostream> using namespace std; void increase(int *mypointer) { (*mypointer)++; cout << *mypointer << "\n"; int main(){ int avalue = 3; increase(&avalue); cout << avalue << "\n"; 49 Πέρασμα δι αναφοράς με αναφορά #include <iostream> using namespace std; void increase(int &myref) { myref++; cout << myref << "\n"; int main(){ int avalue = 3; increase(avalue); cout << avalue << "\n"; 50 Πέρασμα δι αναφοράς με αναφορά τι κρύβει #include <iostream> using namespace std; void increase(int &myref) { myref++; cout << myref << "\n"; int main(){ int avalue = 3; Increase(int *const myref_p) (*myref_p)++; cout << *myref_p << \n ; increase(avalue); cout << avalue << "\n"; localincrease(&avalue)

52 Παράδειγμα μεταβλητές που δεν αλλάζουν #include <iostream> using namespace std; void showconst(int &counter, const int &newcounter){ counter = counter + newcounter; /* will not pass!!! newcounter++; */ int main(){ int acounter = 0; int anothercounter = 3; showconst(acounter, anothercounter); cout << acounter << "\n"; 52 Arrays as parameters #include <iostream> using namespace std; void printarray(int arg[], int length){ int i; for (i=0;i<length;i++){ cout << arg[i] << \n ; main(){ int firstarray[] = {5,10,15; int secondarray[] = {3,6,9,12; printarray(firstarray,3); printarray(secondarray,4); 53 Διαφορές pointers και references Μια αναφορά δεν στέκει ποτέ μόνη της σε ένα πρόγραμμα. Πρέπει να δηλωθεί οπωσδήποτε σαν αναφορά σε κάποια μεταβλητή (απόρροια του γεγονότος ότι οι const μεταβλητές θέλουν αρχικοποίηση). Ένας pointer μπορεί κάλλιστα να μη δείχνει πουθενά. Αν μια αναφορά δείχνει σε μια μεταβλητή, ΔΕΝ μπορώ να την βάλω να δείξει σε άλλη μεταβλητή (απόρροια του γεγονότος ότι οι const μεταβλητές δεν αλλάζουν). Έναν pointer μπορώ να τον μετακινώ κατά βούληση

53 Ομοιότητες pointers και references Μπορούν να περνούν αμφότερα σαν παράμετροι σε μια συνάρτηση. Ομοίως, μπορούν να αποτελούν την τιμή επιστροφής μιας συνάρτησης. 55 Ισοδύναμο αποτέλεσμα void bypointer(int *value){ *value +=5; main(){ int i = 3; bypointer(&i); void byref(int &value){ value +=5; main(){ int i = 3; bypointer(i); 56 Συνοπτικά για το πέρασμα παραμέτρων function (int var) Πέρασμα τιμής function (const int var) Πέρασμα τιμής function (int &var) Αναφορά function (const int &var) Σταθερή Αναφορά function (int array []) function (int *var) Η μεταβλητή περνιέται αυτούσια ως παράμετρος στη function, μπορεί να αλλάξει τοπικά στη function, αλλά οι αλλαγές δεν περνούν εξωτερικά στο πρόγραμμα. Όπως πριν, αλλά χωρίς να μπορεί να αλλάξει η τιμή της μεταβλητής εσωτερικά της function Περνιέται μια αναφορά ως παράμετρος. Ότι αλλαγές γίνουν στην αναφορά, ανακλώνται και εξωτερικά στο πρόγραμμα Όπως πριν, αλλά χωρίς να μπορεί να αλλάξει η τιμή της αναφοράς εσωτερικά της function H C++ αυτομάτως μετατρέπει τα arrays σε αναφορές Περνά ένας pointer ως παράμετρος της function

54 Συνοπτικά για το πέρασμα παραμέτρων Excellent guideline at Google Code Style: use const references for input variables that are not to be changed use pointers for output variables that will be changed, eventually Significantly enhances maintainability and usage: the reader knows what is input + what is output If the maintainer accidentally tries to mess with the (const) input, compiler catches it void updatelicense(const int &newnumber, int *licenceno) 58 Default τιμές στο πέρασμα παραμέτρων void f (int x = 1); void g (int a, int b = 0){ cout << "a: " << a << " b: " << b << "\n"; int main () { f(5); f(); g(1, 2); g(5); void f (int x){ //could be (int x =1 ) 59 Default τιμές στο πέρασμα παραμέτρων void h(int a, int b = 0, int c, int d = 0){ //.. int main (){ h(10, 5, 20); στην περίπτωση αυτή σίγουρα a=10 το 5 μπορεί να αντιστοιχεί στο b οπότε c = 20 και d = 0 H το b = 0, c = 5 και d = 20 Avoid default values if you can: source of much confusion!! προς αποφυγή του παραπάνω προβλήματος το οποίο δεν μπορεί να επιλύσει ο compiler αν η i-οστή παράμετρος στη δήλωση μιας συνάρτησης με Ν παραμέτρους έχει default τιμή, όλες όσες την ακολουθούν πρέπει επίσης να έχουν δηλωμένες default τιμές. με βάση το παραπάνω αν κατά την κλήση η συνάρτηση έχει ι <= κ < Ν πραγματικές παραμέτρους, οι Ν-κ τελευταίες λαμβάνουν τις default τιμές

55 Κονσόλα -- Αρχεία C++ Ι/Ο 61 C++ IO Streams 62 IOSTREAMs - reading lines #include <iostream> using namespace std; int main(){ char buf[100]; char whatisleft[200]; /* reads max of 9 chars or up to '\n' and leaves the '\n' behind, i.e. the next char we read is \n */ cout << "Give a string, at most 9 chars, ending with endl \n"; cin.get(buf, 10, '\n'); cout << buf << endl; cout << "Here, normally, you should give another string \n"; cin.get(whatisleft, 10, '\n'); cout << whatisleft << endl; //Try declaring buf as string (including #include <string>) to see what happens

56 IOSTREAMs - reading lines #include <iostream> using namespace std; int main(){ char buf[100]; char whatisleft[200]; /* reads max of 9 chars or up to '\n' including the '\n' which is not included in buf */ cout << "Give a string of at most 9 characters, ending with endl \n"; cin.getline(buf, 10, '\n'); cout << buf << endl; cout << "Here, normally, you should give another string \n"; cin.getline(whatisleft, 10, '\n'); cout << whatisleft << endl; // Try it with input that exceeds the limit of 10 chars and with input less than 10 chars 64 IOSTREAMs - reading lines #include <iostream> using namespace std; int main(){ char buf[100]; while (cin.eof()!= true){ // or cin.good() == true cout << "Give another string: "; cin.getline(buf, 100, '\n'); cout << buf << endl; //Eof is given via Ctrl+D 65 IOSTREAMs #include <iostream> using namespace std; int main(){ float b; int a; while (cin.good() == true){ // or cin.eof()!= true cout << "Give a float and an int: "; cin >> b >> a; cout << b <<"\t" << a << endl; //Try it separating the 2 numbers with space, enter, or tab

57 IOSTREAMs - reading lines σε string #include <iostream> #include <string> using namespace std; int main(){ string s; while (getline(cin, s)){ cout << s << endl; Very useful! Can handle strings of (i) arbitrary size and (ii) several whitespaces Contrast this to cin >> s that can withstand only one (1) word in the input stream //Try it with strings having several whitespaces and big size 67 C++ File Streams 68 File streams Για ανάγνωση από αρχείο δημιουργούμε μεταβλητές (ρεύματα) τύπου ifstream Για γράψιμο σε αρχείο δημιουργούμε μεταβλητές (ρεύματα) τύπου οfstream Ανάγνωση γίνεται με >> για βασικούς τύπους (int, float, char, char[], string ) KAI get, getline για char[] εγγραφή γίνεται με << για βασικούς τύπους (int, float, char, char[], string, ) Γενικά ότι συνάρτηση είδαμε στα cin, cout ισχύει και σε μεταβλητές ifstream, ofstream

58 Copy one file to another, line by line #include <iostream> #include <cstdlib> #include <fstream> using namespace std; int main(){ char buf[100]; ifstream in("in.txt"); ofstream out("out.txt"); if(in.good()!= true) exit(exit_failure); Same old story: Μια μεταβλητή για κάθε αρχείο while (in.eof()!= true){ in.getline(buf, 100, '\n'); out << buf << endl; in.close(); out.close(); ΑΤΤΝ: αν κάτι πάει στραβά, πιάστε το νωρίς!! Διαβάζουμε γραμμή γραμμή μέχρι τέλους του αρχείου && we do sth with it (here: copy it to out.txt) housekeeping 70 Append a file to another file, line by line #include <iostream> #include <cstdlib> #include <fstream> using namespace std; int main(){ char buf[100]; char c; ifstream in("in in.txt txt"); ofstream out("out.txt", ios::app); if(in.good()!= true) exit(1); while (in.eof()!= true){ in.getline(buf, 100, '\n'); out << buf << endl; in.close(); out.close(); // ios::out is the default 71 Append a file to another file, line by line #include <iostream> #include <string> #include <fstream> using namespace std; int main(){ char buf[100]; ifstream in; ofstream out; in.open("in.txt"); out.open("out.txt", ios::app); // ios::out default if(in.good()!= true) exit(1); while (in.eof()!= true){ in.getline(buf, 100, '\n'); out << buf << endl; in.close(); out.close(); Η διαφορά με το προηγούμενο παράδειγμα είναι στη χρήση της open

59 Extra methods in.clear(); // sets eof flag back to 0 in.seekg(0,ios::beg); // offset from the beginning while (in.eof()!= true){ in.getline(buf, 100, '\n'); cout << buf << endl; out.seekp(0,ios::beg); out << "BBBBBBBBBBBB"; in.close(); out.close(); // offset from the beginning // seekp seekg χρήση και με ios::end και αρνητικό offset, ή ios::curr 73 Try it for yourselves (part 1) #include <iostream> #include <cstdlib> #include <fstream> using namespace std; int main(){ char buf[100]; char c; int i; float f; fstream in; fstream out; // ios::out is default in.open("in.txt", ios::in); out.open("out.txt", ios::out ios::in); // ios::app to append if(out.good()!= true) exit(1); while (in.eof()!= true){ in.getline(buf, 100, '\n'); out << buf << endl; 74 continued: part 2 in.clear(); in.seekg(0,ios::beg); while (in.eof()!= true){ in.getline(buf, 100, '\n'); cout << buf << endl; //print file on screen out.seekg(0,ios::beg); while (out.eof()!= true){ out.getline(buf, 100, '\n'); cout << "XXX" << buf << endl; //print on screen file s info with XXX in front out.clear(); out.seekp(0,ios::beg); //replace file s starting bytes with BBBB out << "BBBBBBBBBBBB"; in.close(); out.close();

60 (structs, υπερφόρτωση συναρτήσεων, namespaces, ) POT POURRI 76 Disclaimer Δεν γίνεται μονομιάς να μάθετε ολόκληρη τη C++ Υπάρχουν θέματα που θα τα ανακαλύψετε σιγά σιγά, έξω από το πλαίσιο του μαθήματος Υπάρχουν και στοιχεία που θα πρέπει να αντιμετωπίσετε με πολύ προσοχή ενδεχομένως και να αποφασίσετε να μην τα χρησιμοποιήσετε καθόλου Στη συνέχεια δίνουμε μια πρώτη εικόνα από στοιχεία της C++ στα οποία δε θα επεκταθούμε ιδιαίτερα Θυμηθείτε ότι ο σκοπός του μαθήματος είναι να διδάξουμε βασικές αρχές αντικειμενοστρεφούς προγραμματισμού και όχι C++ 77 Structs & Κλάσεις

61 Structs Ο πιο απλός τρόπος δήλωσης ενός struct είναι ως εξής: struct structname { fieldtype fieldname; fieldtype fieldname;... ; 79 Τα structs είναι τύποι δεδομένων Δήλωση struct struct complex { //μιγαδικός double re; double im; ; Δήλωση μεταβλητής τύπου complex complex z; Σε αντίθεση με τη C δεν χρειάζεται να γράψουμε struct complex z; 80 Συναρτήσεις μέσα σε structs Σε αντίθεση με τη C μπορούμε να ορίσουμε μεθόδους για τα structs struct complex { //μιγαδικός double re; double im; void show(); ; void complex::show(){ cout << ( << re <<, << im << \ )\n ;

62 Συναρτήσεις μέσα σε structs Εντελώς αντίστοιχα μπορώ να ορίσω την κλάση class complex { //μιγαδικός double re; double im; void show(); ; void complex::show(){ cout << ( << re <<, << im << \ )\n ; 82 Δηλώσεις και χρήση αντικειμένων int main () { complex a; a.re = 1.0; a.im = 2.0; a.show(); return 0; Εναλλακτικά (α-λα-c): #include <iostream.h>... void show (complex &p){... main(){ complex a;... show(a); 83 Δείκτες σε αντικείμενα int main () { complex *pa, *pb; complex a; pa = &a; pb = new complex; a.re = 1.0; pa ->re = 1.0; (*pa).re = 1.0; a.im = 2.0; pa->im = 2.0; (*pa).im = 2.0; a.show(); pa->show(); (*pa).show(); pb->re = 3.0; pb->im = 4.5; pb->show(); delete pb; return 0;

63 Υπερφόρτωση (Overloading) Συναρτήσεων 85 Υπερφόρτωση συναρτήσεων Στη C++ επιτρέπεται να δηλώσουμε συναρτήσεις με το ίδιο όνομα αλλά: με διαφορετικό αριθμό παραμέτρων με διαφορετικούς τύπους παραμέτρων ΠΡΟΣΟΧΗ! Όχι συναρτήσεις που διαφέρουν μόνο στον τύπο του αποτελέσματος που επιστρέφουν. 86 Υπερφόρτωση συναρτήσεων #include <iostream> using namespace std; int max (int a, int b){ if (a > b) return a; else return b; int max (int a[], int size){ int max = a[0]; for (int i = 0; i < size; i++) if (a[i] > max) max = a[i]; return max;

64 Υπερφόρτωση συναρτήσεων int main(){ int A[] = {-2, 4, 5, 6; int a = 3, b = 5; int ret; ret = max(a, 4); cout << ret << endl; ret = max(a, b); cout << ret << endl; 88 Υπερφόρτωση συναρτήσεων #include <iostream> using namespace std; int max (int a, int b){ if (a > b) return a; else return b; float max (int a, int b){ if (a > b) return a; else return (float) b; 89 Υπερφόρτωση συναρτήσεων int main(){ int a = 3, b = 5; int ret; ret = max(a, b); cout << ret << endl; max(a, b); // Πρόβλημα ποια θα καλεστεί??? // Compile Error

65 C++ Preprocessor 91 Preprocessor της C++ (#include, #define, ) Πρόγραμμα που γράφουμε εμείς Preprocessor Compiler Επεκτεταμένο Πρόγραμμα 92 #include Ενσωματώνει στο πρόγραμμά μας αυτούσια αρχεία. #include <iostream.h> #include mydefinitions.h y #include../../mydefinitions.h DOS/Windows:..\..\mydefinitions.h

66 #define #define SIZE 20 Σημαίνει ότι οπουδήποτε βλέπει ο preprocessor SIZE, το αντικαθιστά με 20. //illegal definitions #define X = 5 #define X 5; Σαφώς καλύτερα να χρησιμοποιεί κανείς const const int SIZE = 20; 94 Inline Functions 95 Inline functions Είναι συναρτήσεις οι οποίες χρησιμοποιούνται από τον compiler στην παραγωγή του εκτελέσιμου κώδικα: για επιτάχυνση της διαδικασίας, ενσωματώνονται στον κώδικα της καλούσας συνάρτησης, αντί να κληθούν ως χωριστές συναρτήσεις. Χρήσιμες ΜΟΝΟ για πολύ μικρές συναρτήσεις. inline int square (int value){ return (value * value); Χρησιμοποιούνται κανονικά στο πρόγραμμα, π.χ., main(){ mysquarearea = square(squareedge);

67 Namespaces 97 Namespaces Πολλές φορές στη C φτιάχνουμε συναρτήσεις των οποίων τα ονόματα έρχονται σε σύγκρουση με έτοιμες συναρτήσεις της γλώσσας σαν αποτέλεσμα έχουμε λάθη μετάφρασης που δεν εξηγούνται εύκολα και κόστος επιδιόρθωσης του κώδικα Ένα πρόγραμμα μπορεί να συνθέτει κώδικα από δύο ή περισσότερα άτομα που μπορεί να χρησιμοποιούν συνώνυμες μς συναρτήσεις ρή ή κλάσεις. σαν αποτέλεσμα πάλι μπορεί να έχουμε λάθη μετάφρασης του συνολικού κώδικα στη C++ υπάρχει ο μηχανισμός namespace που μπορεί να χρησιμοποιηθεί για την αποφυγή συγκρούσεων namespace Χ {.. ; 98 Παράδειγμα Στο αρχείο: util.h υπάρχουν χρήσιμες συναρτήσεις που πήραμε από κάποιον άλλο προγραμματιστή. float squarearea(float length){ return (length*length); e. int f(){

68 Παράδειγμα (συνέχεια) #include <iostream.h> #include util.h //1 square mile is 2.59 square km //the following function returns square miles //whereas length is in km float squarearea(float length){ return (length*length / 2.59); main (){ cout << "Normal " << squarearea(2.0); f(); 100 Παράδειγμα Στο αρχείο: util.h namespace UtilJohn { float squarearea(float length){ return length*length; length; int f(){. 101 Παράδειγμα (συνέχεια) #include <iostream.h> #include util.h" namespace Local{ //1 square mile is 2.59 square km //the following function returns square miles //whereas eas length is in km float squarearea(float length){ return (length*length / 2.59); main (){ cout << "Normal " << Local::squareArea(2.0); UtilJohn::f();

69 Παράδειγμα (συνέχεια) #include <iostream.h> #include util.h" namespace Local{ //returns square km for length in km //1 square mile is 2.59 square km //the following function returns square miles //whereas eas length is in km float squarearea(float length){ return (length*length / 2.59); using namespace Local; main (){ cout << "Normal " << squarearea(2.0); UtilJohn::f(); 103 Παράδειγμα (συνέχεια) #include <iostream.h> #include util.h" namespace Local{ //returns square km for length in km //1 square mile is 2.59 square km //the following function returns square miles //whereas length is in km float squarearea(float length){ return (length*length / 2.59); using namespace Local; main (){ cout <<"English "<< UtilJohn::squareArea(2.0) << "\n"; cout << "Normal " << squarearea(2.0); 104 To std namespace Μπορείτε να δηλώνετε το std namespace: #include <iostream> using namespace std; για να μη χρειάζεται να το γράφετε συνέχεια πχ std::cout <<. Αν και κάποιοι μεταφραστές το κάνουν αυτόματα

70 Exceptions 106 Εξαιρέσεις Αρκετές φορές στην πράξη υλοποιούμε συναρτήσεις που δέχονται σαν όρισμα κάποια δεδομένα και επιστρέφουν ένα αποτέλεσμα κάποιου τύπου (π.χ. int). Το αποτέλεσμα σε πολλές περιπτώσεις μπορεί να είναι οποιαδήποτε τιμή αυτού του τύπου (int). Παρόλα αυτά αν κάτι πάει στραβά στην εκτέλεση της συνάρτησης θέλουμε να επιστρέφει κάτι σε αυτόν που την κάλεσε ώστε να καταλάβει ότι κάτι πήγε στραβά (π.χ. απέτυχε το άνοιγμα ενός αρχείου). Για αυτό το κάτι, προφανώς δεν μπορούμε να δεσμεύσουμε μια τιμή αν αυτή μπορεί να επιστρέφεται και κάτω από κανονικές συνθήκες (π.χ. -1). Αντί αυτού μπορούμε να χρησιμοποιήσουν το μηχανισμό των εξαιρέσεων Εξαιρέσεις Γενικά μπορούμε να πούμε ότι μια εξαίρεση είναι μια δομή (struct) που επιστρέφει μια συνάρτηση όταν κάτι πάει λάθος. Η επιστροφή φήγίνεται με throw αντί για return. Η συλλογή αυτής της δομής - εάν και εφόσον επιστραφεί γίνεται με τη χρήση της εντολής try/catch

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ CS-409, Χειμερινό εξάμηνο 2011 Πανεπιστήμιο Ιωαννίνων, Τμήμα Πληροφορικής Παναγιώτης Τσαπάρας Συστάσεις Ποιός είμαι: Email: tsap@cs.uoi.gr Γραφείο: Β.3 Προτιμώμενες ώρες

Διαβάστε περισσότερα

C++ fundamental building blocks. (χωρίς να αναφερθούμε, όμως, σε έννοιες του αντικειμενοστρεφούς προγραμματισμού )

C++ fundamental building blocks. (χωρίς να αναφερθούμε, όμως, σε έννοιες του αντικειμενοστρεφούς προγραμματισμού ) C++ fundamental building blocks (χωρίς να αναφερθούμε, όμως, σε έννοιες του αντικειμενοστρεφούς προγραμματισμού ) (γεια σας και χαρά σας) HELLO WORLD 2 Κύριο πρόγραμμα //A Simple C++ program #include

Διαβάστε περισσότερα

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Και ομοιότητες και διαφορές με την C

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Και ομοιότητες και διαφορές με την C ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Και ομοιότητες και διαφορές με την C ΑΝΑΚΕΦΑΛΑΙΩΣΗ Άσκηση Θέλουμε να φτιάξουμε ένα «παιχνίδι» το οποίο κάνει το εξής: Έχουμε δυο αυτοκίνητα που ξεκινάνε από το σημείο 0 της ευθείας

Διαβάστε περισσότερα

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams CONSTRUCTORS DESTRUCTORS Η κλάση mystring class mystring private: char s[100]; public: char *GetString(); void SetString(char

Διαβάστε περισσότερα

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. 26 Οκτωβρίου 2011

ΑΝΑΚΕΦΑΛΑΙΩΣΗ. 26 Οκτωβρίου 2011 ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου 2011 Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα αντικείμενα. Κλάση: Μια αφηρημένη οντότητα με χαρακτηριστικά

Διαβάστε περισσότερα

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης ΑΝΑΚΕΦΑΛΑΙΩΣΗ Αναφορές Όλα αυτά είναι ισοδύναμα int main() int x = 2; int &y = x; int &z = y; int main() int x = 2; int const

Διαβάστε περισσότερα

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

Διαβάστε περισσότερα

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

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

Διαβάστε περισσότερα

Αναφορές, είκτες και Αλφαριθμητικά

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

Διαβάστε περισσότερα

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( ) ΣΥΜΒΟΛΟΣΕΙΡΕΣ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Ο τύπος string Μετατροπή από και προς τον τύπο string Βασικές μέθοδοι Χρήση Ελληνικών Συναρτήσεις C εκτύπωσης και ανάγνωσης Τελευταία

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εισαγωγή στην C++ Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η γλώσσα C++ Σχεδιάστηκε το 1979 από τον Bjarne Stroustrup στα Bell Laboratories Βασίζεται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Streams Input / Output in C++ George Kastrinis

Streams Input / Output in C++ George Kastrinis Streams Input / Output in C++ George Kastrinis (gkastrinis@di.uoa.gr) Streams What? Η είσοδος και η έξοδος δεδομένων, στη C++ βασίζεται στην έννοια των ρευμάτων - streams Ένα ρεύμα είναι ουσιαστικά μια

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input

Διαβάστε περισσότερα

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ Γεώργιος Παπαϊωάννου (2013-14) gepap@aueb.gr Περιγραφή: Τύποι αρχείων Ρεύματα Άνοιγμα ρευμάτων Εγγραφή και ανάγνωση δεδομένων προς/από ένα ρεύμα Διαχείριση και κλείσιμο ρευμάτων Παραδείγματα

Διαβάστε περισσότερα

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 7ο Τμήμα Διοίκησης Επιχειρήσεων Παλαιό ΕΠΔΟ α εξάμηνο Β. Φερεντίνος Δείκτες (Pointers) (1) 142 Κάθε μεταβλητή, εκτός από την τιμή της, έχει και μία συγκεκριμένη διεύθυνση

Διαβάστε περισσότερα

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

Συµβολοσειρές - Strings Συµβολοσειρές - Strings 1 Συµβολοσειρέςστην C/C++ 2 Χαρακτήρες 'a', 'z', '0', Χαρακτήρες σαν int 'z' επίσης αναπαριστά την ακεραία τιµή του χαρακτήρα z Strings-Συµβολοσειρές Σειρές από χαρακτήρες σαν µια

Διαβάστε περισσότερα

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

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Εισαγωγή στην C++ ΔΙΔΑΣΚΟΝΤΕΣ:Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής H Γλώσσα C++ ΙΣΤΟΡΙΑ 1967:

Διαβάστε περισσότερα

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων

2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων 2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 9: C++ ΕΙΣΟΔΟΣ - ΕΞΟΔΟΣ / ΑΛΦΑΡΙΘΜΗΤΙΚΑ / ΑΡΧΕΙΑ Διαχείριση Αρχείων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 2η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικοί αριθμητικοί τύποι, μετατροπές τύπων και σταθερές. Πίνακες. Πίνακες

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 19η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Βασικές διαφορές της C από τη C++. Απλά παραδείγματα προγραμμάτων C.

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος 2009-2010. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Είσοδος/Έξοδος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2009-2010 Είσοδος/Έξοδος Μέχρι τώρα όποτε θέλαμε να διαβάσουμε χρησιμοποιούσαμε πάντα

Διαβάστε περισσότερα

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Εργαστήριο 2: Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η ανάλυση των βασικών χαρακτηριστικών της Γλώσσας Προγραμματισμού

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Ένα Ακόμα Παράδειγμα #include int main(int argc, char* argv[]) { } putchar('h'); putchar('e'); putchar('l');

Διαβάστε περισσότερα

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

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++ Εντολές εισόδου - εξόδου Εισαγωγή στη C++ Το πρώτο πρόγραμμα //my first program #include using namespace std; int main(){ cout

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

Διαβάστε περισσότερα

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

Συναρτήσεις και Πίνακες Συναρτήσεις και Πίνακες Συναρτήσεις καθιερωμένης βιβλιοθήκης της C++ Συναρτήσεις οριζόμενες από τον χρήστη Μεταβίβαση κατ αξία Συναρτήσεις void και λογικές συναρτήσεις Μεταβίβαση κατ αναφορά Επιστροφή

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο μια ακολουθία S από n (n 40) ακέραιους αριθμούς και επιστρέφει ως έξοδο δύο ακολουθίες από θετικούς ακέραιους

Διαβάστε περισσότερα

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Αντικειμενοστραφείς Γλώσσες Προγραμματισμού Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Οκτώβριος 2018 1/28 1 (implicit) μετατροπές 2 (Functions) 3 (Pointers) 4 (Arrays) 2/28 (implicit)

Διαβάστε περισσότερα

Κλάσεις και αντικείμενα #include <iostream.h<

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;.. Επιλογή - Επανάληψη Η εντολή if-else Ο τελεστής παράστασης συνθήκης H εντολή switch Η εντολές for και while Η εντολή do-while Η εντολές break - continue - goto Μαθηματικές συναρτήσεις Λέξεις κλειδιά στη

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

C: Από τη Θεωρία στην Εφαρμογή

C: Από τη Θεωρία στην Εφαρμογή Δρ. Γ. Σ. Τσελίκης Δρ. Ν. Δ. Τσελίκας C: Από τη Θεωρία στην Εφαρμογή Ενδεικτικές Ασκήσεις από το Βιβλίο C: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

Διαβάστε περισσότερα

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

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

Διαβάστε περισσότερα

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Εισαγωγή στον Προγραµµατισµό Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ Συναρτήσεις 19.11.16 Β. Ντουφεξή 2 Προβλήματα: Οσο μεγαλώνουν τα προγράμματα, γίνονται πιο πολύπλοκα.

Διαβάστε περισσότερα

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

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

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Πέμπτη (5 η ) τρίωρη διάλεξη. Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/

Διαβάστε περισσότερα

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

Περιεχόμενα. Πρόλογος... 17 Περιεχόμενα Πρόλογος... 17 Κεφάλαιο 1: Εισαγωγή... 19 Πώς να διαβάσετε αυτό το βιβλίο... 20 Η γλώσσα C Ιστορική αναδρομή... 22 Τα χαρακτηριστικά της C... 23 C Μια δομημένη γλώσσα... 23 C Μια γλώσσα για

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 2:Αλφαριθμητικές Σειρές Χαρακτήρων (Strings)- Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) Πίνακες από Strings

Διαβάστε περισσότερα

Ενδεικτική περιγραφή μαθήματος

Ενδεικτική περιγραφή μαθήματος ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές.

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 1 Εισαγωγή στη C Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr Διαδικαστικά Ιστοσελίδα μαθήματος: http://eclass.uoa.gr/courses/f30/ Υποχρεωτική παρακολούθηση: Παρασκευή 14:00 16:00 στην

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 13 Πίνακες & Συναρτήσεις Εισαγωγή Στις προηγούμενες

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

Διαβάστε περισσότερα

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Τι μάθαμε μέχρι τώρα Κάθε πρόγραμμα της c++ περιέχει υποχρεωτικά μια συνάρτηση main() η οποία είναι εκείνη που εκτελείται πρώτη. Κάθε

Διαβάστε περισσότερα

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

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

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

Φροντιςτήριο. Linked-List Φροντιςτήριο Linked-List 1 Linked List Μια linked list είναι μια ακολουθία από ςυνδεδεμένουσ κόμβουσ Κάθε κόμβοσ περιέχει τουλάχιςτον Μια πληροφορία (ή ένα struct) Δείκτη ςτον επόμενο κόμβο τησ λίςτασ

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 9: C++ ΕΙΣΟΔΟΣ - ΕΞΟΔΟΣ / ΑΛΦΑΡΙΘΜΗΤΙΚΑ / ΑΡΧΕΙΑ Αλφαριθμητικά ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 Constructors (Κατασκευαστές) Ειδικός τύπος μεθόδων που δημιουργούν αντικείμενα μιας κλάσης και: Εκτελούνται κατά την αρχικοποίηση των αντικειμένων

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 2: Δομή ενός προγράμματος C Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή

Διαβάστε περισσότερα

S, (5, -3, 34, -23, 7) ( /, @, *, _

S, (5, -3, 34, -23, 7) ( /, @, *, _ 1 Τι είναι αρχείο Οι πληροφορίες που καλείται να διαχειριστεί ο Η/Υ είναι τόσες πολλές που η μνήμη του δεν φτάνει να τις επεξεργαστεί όλες μαζί. Γι αυτό τον λόγο αποθηκεύονται σε μονάδες αποθήκευσης (π.χ

Διαβάστε περισσότερα

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης Εισαγωγή Στη C++ υπάρχει η δυνατότητα να δηλώσουμε μία συμβολοσειρά ως αντικείμενο, χρησιμοποιώντας τη βιβλιοθήκη . Επειδή οι συμβολοσειρές είναι

Διαβάστε περισσότερα

Υπολογισμός - Εντολές Ελέγχου

Υπολογισμός - Εντολές Ελέγχου Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Ελέγχου ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

Διαβάστε περισσότερα

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό δομήθηκε βάση

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 3: Είσοδος / Έξοδος, Βασικοί Τύποι, Δήλωση Μεταβλητών Βασικοί τύποι της C 2 Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char Χαρακτήρας 1 int Ακέραιος 2 ή 4 (*) float Πραγματικός

Διαβάστε περισσότερα

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23 Περιεχόμενα Λίγα λόγια για αυτή την έκδοση...... 23 Κεφάλαιο 1 Εισαγωγή... 25 O στόχος του βιβλίου και σε ποιους απευθύνεται... 27 Πώς να διαβάσετε αυτό το βιβλίο... 27 Εκπαίδευση από απόσταση... 29 Ιστορική

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II Strings Η κλάση String είναι προκαθορισμένη κλάση της Java που μας επιτρέπει να χειριζόμαστε αλφαριθμητικά. Ο τελεστής + μας επιτρέπει

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Περιεχόμενα. Πρόλογος... 21 Περιεχόμενα Πρόλογος... 21 Κεφάλαιο 1: Εισαγωγή στον προγραμματισμό... 25 Εισαγωγή...27 Πώς να διαβάσετε αυτό το βιβλίο...27 Η δομή των κεφαλαίων...28 Γιατί να μάθω προγραμματισμό;...31 Γιατί να μάθω C;...31

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Wrapper Classes, Abstract Classes and Interfaces

Wrapper Classes, Abstract Classes and Interfaces Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους

Διαβάστε περισσότερα

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*%

Διαβάστε περισσότερα