Εισαγωγή στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:



Σχετικά έγγραφα
ΕΑΡΙΝΟ ΠΡΟΓΡΑΜΜΑ 2010 ΕΡΓΑΣΗΡΙΑ C++ Βαςιλϊντα Κουμπό

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

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

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

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Χωρική Βάση δεδοµένων Autocad

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

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

Εισαγωγή στην πληροφορική

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

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

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

Επεξεργασία Αρχείων Κειµένου

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

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

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

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

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

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

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

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

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

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

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

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

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

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις

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

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

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

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

Streams Input / Output in C++ George Kastrinis

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

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

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

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

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

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

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

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

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

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

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

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

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

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

17TimeThis.h function returns reference pointer to same object { return *this; }

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

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

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

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

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

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

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

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

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

Βασικά στοιχεία της Java

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Διάλεξη 18η: Διαχείρηση Αρχείων

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Αλφαριθµητικά Κλάση string

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

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

Transcript:

Εισαγωγή στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Παράδειγµα χρήσης κλάσεων βιβλιοθηκών: Η κλάση string Ι/Ο στη C++ Βιβλιοθήκες της C++ Παράµετροι Αναφοράς, Παράµετροι default ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1

Από τη C η C++ διατηρεί : C και C++ τους βασικούς τύπους δεδοµένων int, long, short, char, float, double, long double τους τελεστές +, -, *, /, %, <, >, κλπ, µε τη γνωστή σειρά προτεραιότητας. εντολές ροής όπως if, if-else, switch, while, for, κλπ Oπως και στη C, ένα C++ πρόγραµµα αποτελείται από µια συλλογή ορισµών, δηλώσεων και συναρτήσεων η οποία µπορεί να είναι διαµερισµένη σε περισσότερα από ένα αρχεία. Σχόλια στη C++ περικλείονται σε /* */. Εναλλακτικά οι χαρακτήρες // µπορούν να χρησιµοποιηθούν στην αρχή µιας γραµµής για να δηλώσουν ότι η συγκεκριµένη γραµµή είναι σχόλιο. Κάθε µεταβλητή σε ένα πρόγραµµα C++ πρέπει να ορισθεί. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2

Ο τύπος Boolean Η C++ περιέχει τον τύπο bool Ο τύπος bool έχει δύο σταθερές τις true false Οι λογικοί τελεστές είναι, όπως και στην C, οι &&,,! Επίσης ισχύει ότι, µια λογική έκφραση έχει τιµή false εαν η τιµή της έκφρασης είναι 0. ιαφορετικά, αν έχει µη-µηδενική τιµή τότε η λογική τιµή της έκφρασης είναι true. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 3

Συµβολοσειρές και σταθερές Συµβολοσειρές: Όπως και στην C µια συµβολοσειρά είναι µια ακολουθία από χαρακτήρες που περικλείεται σε.... Κατά την αποθήκευση µιας τέτοιας σταθεράς κάθε χαρακτήρας αποθηκεύεται σε συνεχόµενα κουτιά µνήµης ακολουθούµενη από τον χαρακτήρα ('\0') ο οποίος σηµατοδοτεί το τέλος της ακολουθίας. Σταθερές: Η δεσµευµένη λέξη const µπορεί να χρησιµοποιηθεί για τη δηµιουργία σταθερών τιµών σε ένα C++ πρόγραµµα. Χρήση του έχει σαν αποτέλεσµα ότι η τιµή του οριζόµενου αντικειµένου δεν µπορεί να αλλαχθεί αλλά µόνο να διαβαστεί. const float Pi = 3.1415; const int SampleSize = 100; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 4

Είσοδος/Έξοδος Μια διαφορά ανάµεσα στις C και C++ είναι η µέθοδος εισόδου και εξόδου χαρακτήρων. Συγκεκριµένα, η C++ δεν περιέχει συναρτήσεις όπως η scanf, printf, fprintf, fscanf, getc για την είσοδο και έξοδο χαρακτήρων από και προς τα ρεύµατα ροής. Για επίτευξη αυτού του στόχου η C++ χρησιµοποιεί αντικείµενα που είναι ορισµένα σε βιβλιοθήκες της γλώσσας και µεθόδους των αντικειµένων αυτών. Τα πιο κάτω αντικείµενα είναι ορισµένα στη βιβλιοθήκη iostream. cin, είναι αντικείµενο που αντιστοιχεί στο ρεύµα εισόδου. cout, είναι αντικείµενο που αντιστοιχεί στο ρεύµα εξόδου. Για εγγραφή και ανάγνωση από και προς τα αντικείµενα αυτά δηλαδή προς και από τα ρεύµατα εισόδου και εξόδου υπάρχουν ορισµένοι οι τελεστές << και >> : ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 5

Είσοδος/Έξoδος Ο τελεστής εισαγωγής, εισαγάγει στον αριστερό του τελεστέο τον δεξιό του τελεστέο: cout << έκφραση, και O τελεστής εξαγωγής, εξαγάγει από τον αριστερό του τελεστεό αντικείµενο που τοποθετεί στον δεξιό τελεστέο: cin >> έκφραση. Οι δύο αυτοί τελεστές µπορούν να γράψουν ή να διαβάσουν στοιχεία οποιουδήποτε από τους βασικούς τύπους της C++. Έτσι για παράδειγµα η έκφραση cout << Hello!\n έχει σαν αποτέλεσµα την εισαγωγή της συµβολοσειράς Hello!\n στη ροή εξόδου του προγράµµατος. Οι τελεστές << και >> µπορούν να χρησιµοποιηθούν περισσότερες από µια φορά σε µια εντολή. Για παράδειγµa: cout << Insertion operations << can be << cascaded ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 6

#include <iostream> int main() { // Extract length and width cout << "Rectangle dimensions: "; float Length; float Width; cin >> Length >> Width; Ορισµοί Εισαγωγή // Compute and insert the area float Area = Length * Width; Ορισµός µε αρχικοποίηση cout << "Area = " << Area << " = Length " << Length << " * Width " << Width << endl; return 0;

Αποτέλεσµα εκτέλεσης του προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 8

Η κλάση string Όπως έχουµε αναφέρει η C++ επιτρέπει τη δηµιουργία νέων τύπων και κλάσεων. Ο προγραµµατιστής µπορεί να δηµιουργήσεις νέους, δικούς του τύπους/κλάσεις ή να χρησιµοποιήσει ήδη έτοιµες κλάσεις που προσφέρονται στις βιβλιοθήκες της γλώσσας. Παράδειγµα είναι η κλάση string. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 9

Class string H κλάση string χρησιµοποιείται για να απεικονίσει µια ακολουθία ως ένα µόνο αντικείµενο. Παραδείγµατα ορισµών και αρχικοποιήσεων: string Name = "Joanne"; string DecimalPoint = "."; string Question = '?'; // illegal ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 10

H κλάση string To συναρτησιακό κοµµάτι της κλάσης περιέχει τις πιο κάτω µεθόδους: size() υπολογίζει και επιστρέφει το µήκος της συµβολοσειράς string Saying = "Rust never sleeps."; cout << Saying.size() << endl; θα γράψει στην οθόνη την τιµή 18 substr() επιστρέφει κάποια υποακολουθία της συµβολοσειράς σύµφωνα µε τις παραµέτρους που δίνονται (θεωρούµε ότι ο πρώτος χαρακτήρας βρίσκεται στη θέση 0) string Word = Saying.substr(11, 16); // sleeps find() υπολογίζει και επιστρέφει τη θέση της πρώτης εµφάνισης κάποιας υποακολουθίας int j = Word.find("ee,0); // 2 int k = Word.find("steel,0); //? ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 11

Η κλάση string Βοηθητικές συναρτήσεις και τελεστές getline() εξαγάγει την επόµενη γραµµή από το ρεύµα ροής και την τοποθετεί στη δεύτερη παράµετρό του Παράδειγµα string Response; cout << "Enter text: "; getline(cin, Response, '\n'); cout << "Response is \"" << Response << "\" << endl; Αποτέλεσµα εκτέλεσης Enter text: Want what you do Response is "Want what you do" ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 12

Βοηθητικοί τελεστές Η κλάση string + αλληλουχία συµβολοσειρών Παράδειγµα string Part1 = "Me"; string Part2 = " and "; string Part3 = "You"; string All = Part1 + Part2 + Part3; += ανάθεση αλληλουχίας string ThePlace = "Brooklyn"; ThePlace += ", NY"; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 13

#include <iostream> #include <string> int main() { cout << "Enter the date in American format: " << "(e.g., December 29, 1953) : "; string Date; getline(cin, Date, '\n'); int i = Date.find(" "); string Month = Date.substr(0, i); int k = Date.find(","); string Day = Date.substr(i + 1, k - i - 1); string Year = Date.substr(k + 2, Date.size() - 1); string NewDate = Day + " " + Month + " " + Year; cout << "Original date: " << Date << endl; cout << "Converted date: " << NewDate << endl; return 0;

iostream Χρήσιµες Βιβλιοθήκες Για επεξεργασία ρευµάτων ροής fstream Για επεξεργασία αρχείων iomanip Για φορµαρισµένη είσοδο και έξοδο δεδοµένων ctype Βιβλιοθήκη βασισµένη σε βιβλιοθήκη C για επεξεργασία χαρακτήρων math Βιβλιοθήκη βασισµένη σε βιβλιοθήκη C που περιέχει τριγωνοµετρικές, λογαριθµικές και άλλες συναρτήσεις Η C++ έχει και πολλές άλλες βιβλιοθήκες ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 15

Βιβλιοθήκη iostream Περιέχει ένα σύνολο κλάσεων που χρησιµοποιούνται για δηµιουργία αντικειµένων που αντιστοιχούν σε ρεύµατα εισόδου και εξόδου. Τα αντικείµενα cin και cout (cerr και clog) είναι στιγµιότυπα κλάσεων που ανήκουν στο iostream, και δηµιουργούνται αυτόµατα όταν ξεκινά η εκτέλεση ενός προγράµµατος. Η βιβλιοθήκη επίσης περιέχει κάποιους χειριστές (manipulators) που περιλαµβάνουν dec endl ends flush oct εµφανίζει αριθµητικές τιµές σε δεκαδική µορφή προσθέτει το χαρακτήρα \n στην ροή την οποία και κάνει flush προσθέτει το χαρακτήρα NULL στην ροή την οποία και κάνει flush κάνει flush το ρεύµα ροής εµφανίζει αριθµητικές τιµές σε οκταδική µορφή ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 16

H βιβλιοθήκη iomanip Ορίζει ένα σύνολο από χειριστές (manipulators) ρευµάτων ροής που επιδρούν πάνω στη συµπεριφορά της εισόδου και εξόδου δεδοµένων. Εκτός από το setw() όλα τα υπόλοιπα είναι εξακολουθητικά (persistent), δηλαδή παραµένουν σε ισχύ µέχρι την εφαρµογή κάποιου άλλου manipulator που αλλάζει τη συµπεριφορά του ρεύµατος. Μερικοί από τους χειριστές δεν είναι υλοποιηµένοι από όλους τους compiler C++. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 17

H βιβλιοθήκη iomanip setw(int x) setfill(int c) setbase(int b) fixed setprecision(int d) boolalpha noboolalpha skipws noskipws θέτει το µήκος του πεδίου που θα τυπωθεί σε x θέτει τον χαρακτήρα γεµίσµατος θέσεων σε c θέτει το b ως βάση των εµφανιζόµενων αριθµών εµφανίζει τη δεκαδική τιµή πραγµατικών αριθµών θέτει το d ως τον αριθµό θέσεων ακρίβειας Εµφανίζει λογικές τιµές συµβολικά ως true, false Εµφανίζει λογικές τιµές µε την ακέραια παράστασή τους (ως 0 και 1) τα κενά αγνοούνται κατά τις εξαγωγές τα κενά δεν αγνοούνται ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 18

Παραδείγµατα cout << setfill( # ) << setw(15) << Hello << endl; ##########Hello int number = 9; int base = 8; cout << number << in base 10 is << setbase(base) << number << in base << dec << base << endl ; 9 in base 10 is 11 in base 8 cout << 1000000000000.0 << endl; cout << 0.0000000000001 << endl ; cout << 921.8 << endl; cout << fixed << 1000000000000.0 << endl; cout << 0.0000000000001 << endl ; cout << 921.8 << endl; 1e+012 1000000000000.000000 1e-013 0.000000 921.8 921.800000 ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 19

Παραδείγµατα cout << setprecision(6) << 12.01234 << endl << 12.0123 << endl << 12.012 << endl << 12.01 << endl << 12.0 << endl; 12.0123 12.0123 12.012 12.01 12 ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 20

Παραδείγµατα char s1, t1, s2, t2, s3; cout << Enter text: ; cin >> s1 >> t1; cout << s1 << endl; cout << t1 << endl; cin >> noskipws >> s2 >> t2; cout << s2 << t2; cin >> skipws >> s3; cout << s3; Enter text: a b c d a b c d ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 21

Η βιβλιοθήκη fstream Ορίζει τις κλάσεις ifstream, ofstream, και fstream, στιγµιότυπα των οποίων είναι αντικείµενα που αναπαραστούν ρεύµατα ροής για ανάγνωση από και γράψιµο προς αρχεία. Για τη δηµιουργία ενός ρεύµατος ροής για ανάγνωση στοιχείων από ένα αρχείο θα πρέπει να δηµιουργήσουµε ένα αντικείµενο τύπου ifstream. Για παράδειγµα, η πιο κάτω εντολή ανοίγει για ανάγνωση το αρχείο file.txt, δηµιουργώντας το aντικείµενο τύπου ifstream fin: ifstream fin( file.txt ); Παρόµοια για εγγραφή προς το αρχείο file2.txt θα πρέπει να δηµιουργήσουµε αντικείµενο τύπου ofstream: ofstream fout( file2.txt ); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 22

Η βιβλιοθήκη fstream Ανάγνωση και εγγραφή µέσω των δηµιουργηθέντων ρευµάτων µπορούν να γίνουν µέσω των τελεστών << και >>. Προσοχή: η δηµιουργία ενός ρεύµατος ofstream προς ένα αντικείµενο έχει ως αποτέλεσµα τη διαγραφή των περιεχοµένων του. Η C++ δίνει την δυνατότητα να γράψουµε στο τέλος ενός αρχείου (append) δηµιουργώντας ρεύµα ροής ως εξής: ofstream myout( file.txt, (ios::out ios::app)); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 23

#include <fstream> #include <string> // file stream library int main() { ifstream fin("mydata.txt"); int ValuesProcessed = 0; float ValueSum = 0; float Value; while (fin >> Value) { ValueSum += Value; ++ValuesProcessed; if (ValuesProcessed > 0) { ofstream fout("average.txt"); float Average = ValueSum / ValuesProcessed; fout << "Average: " << Average << endl; else cerr << "No list to average" << endl; return 0;

ifstream sin("in1.txt"); ofstream sout("out1.txt"); string s; while (sin >> s) { sout << s << endl; sin.close(); sout.close(); sin.open("in2.txt"); sout.open("out2.txt", (ios::out ios::app)); while (sin >> s) { sout << s << endl; sin.close(); sout.close(); if (! sin){ cerr << cannot open in1.txt ; exit(1);

Παράµετροι Αναφοράς Aς επιστρέψουµε στους τελεστές >> και <<. Έχουµε δεί ότι π.χ. η cin >> Length έχει σαν αποτέλεσµα την ανάγνωση µιας τιµής και αποθήκευση αυτής στη µεταβλητή Lenth. H εντολή της C που θα είχε ισοδύναµο αποτέλεσµα είναι η scanf( %f, &Length). Παρατηρούµε ότι κατά τη χρήση του τελεστή εξαγωγής δεν χρησιµοποιήθηκε ο τελεστής αναφοράς. Αυτό οφείλεται στο ότι η C++ µας επιτρέπει κατά τον ορισµό συναρτήσεων και τελεστών να χρησιµοποιούµε δύο διαφορετικά είδη παραµέτρων: παραµέτρους τιµών, δηλαδή παραµέτρους στις οποίες αντιγράφεται και αποθηκεύεται η τιµή των πραγµατικών παραµέτρων της συνάρτησης, και παραµέτρους αναφοράς, δηλαδή παραµέτρους στις οποίες αποθηκεύεται η διεύθυνση των πραγµατικών παραµέτρων της συνάρτησης. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 26

Παράδειγµα Να γράψετε συνάρτηση η οποία παίρνει τέσσερις παραµέτρους, η πρώτη από τις οποίες είναι ένας πραγµατικός αριθµός, και αποθηκεύει στις επόµενες τρεις το πρόσηµο, την ακέραια τιµή και την κλασµατική τιµή της πρώτης παραµέτρου αντίστοιχα. Στην C θα γράφαµε void separate(double x, char *sign, int *whole, double *frac){ if (x < 0) *sign = - ; else if (x == 0) *sign = ; else *sign = + ; *whole = floor(fabs(x)); *frac = fabs(x) - *whole; και θα καλούσαµε την συνάρτηση ως separate(x, &s, &w, &f), όπου x, s, w, f, µεταβλητές κατάλληλου τύπου. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 27

Παράδειγµα Στην C++ η συνάρτηση µας θα µπορούσε να ορισθεί χρησιµοποιώντας µία παράµετρο τιµής και τρεις παραµέτρους αναφοράς ως εξής: void separate(double x, char &sign, int &whole, double &frac){ if (x < 0) sign = - ; else if (x == 0) sign = ; else sign = + ; whole = floor(fabs(x)); frac = fabs(x) - whole; και θα καλούσαµε την συνάρτηση ως separate(x, s, w, f), όπου x, s, w, f, µεταβλητές κατάλληλου τύπου. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 28

Σταθερές παράµετροι ήλωση παραµέτρου σε συνάρτηση χρησιµοποιώντας την δεσµευµένη λέξη const δείχνει ότι η παράµετρος δεν µπορεί να αλλαχθεί από τη συνάρτηση. void PromptAndGet(int &n, const string &s) { cout << s ; cin >> n ; s = "Got it"; // illegal assignment ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 29

Παράµετροι default Στη C όταν καλούµε µια συνάρτηση πρέπει να περάσουµε πραγµατικές τιµές για όλες τις παραµέτρους της συνάρτησης. H C++ µας επιτρέπει να δίνουµε default τιµές σε παραµέτρους συναρτήσεων και σε περίπτωση που κατά την κλήση της συνάρτησης δώσουµε πραγµατικές τιµές σε µερικές µόνο από τις παραµέτρους οι υπόλοιπες παράµετροι παίρνουν τις default τιµές που έχουν ορισθεί. Παρατήρηση: οι default παράµετροι µιας συνάρτησης πρέπει να εµφανίζονται µετά από τις υποχρεωτικές. Ο ορισµός των default τιµών µπορούν να γίνουν είτε στο πρωτότυπο της συνάρτησης, είτε στον ορισµό της συνάρτησης, αλλά όχι και στα δύο. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 30

Παράδειγµα void PrintChar(char c = '=', int n = 80) { for (int i = 0; i < n; ++i) cout << c; Ποιο θα είναι το αποτέλεσµα των πιο κάτω κλήσεων; PrintChar('*', 20); PrintChar('-'); PrintChar(); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 31

Παράδειγµα Έστω bool GetNumber(int &n, istream &sin = cin) { return sin >> n ; Πιθανές κλήσεις int x, y, z; ifstream fin("data.txt"); GetNumber(x, cin); GetNumber(y); GetNumber(z, fin); ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 32

Εµβέλεια µεταβλητών void f() { int i = 1; cout << i << endl; // insert 1 { int j = 10; cout << i << j << endl; // insert 1 10 i = 2; cout << i << j << endl // insert 2 10 cout << i << endl; // insert 2 cout << j << endl; // illegal ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 33

Εµβέλεια µεταβλητών int i = 1; int main f() { cout << i << endl; // insert 1 char i = 'a'; cout << i << endl; // insert a ::i = 2; cout << i << endl; // insert a cout << ::i << endl; // insert 2 return 0; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 34

Overloading Συναρτήσεων Το όνοµα µιας συνάρτησης µπορεί να γίνει overloaded: µπορούµε να ορίσουµε δύο συναρτήσεις µε το ίδιο όνοµα αλλά µε διαφορετικές διασυνδέσεις, δηλαδή διαφορετικά σύνολα παραµέτρων ιαφορά στο πλήθος των παραµέτρων Min(a, b, c) Min(a, b) ιαφορά στον τύπο των παραµέτρων Min(10, 20) Min(4.4, 9.2) Ο compiler χρησιµοποιεί τακτικές που επιτρέπουν την επιλογή της πιο κατάλληλης συνάρτησης για την αποπεράτωση κλήσεων µιας διαδικασίας: aν υπάρχει συνάρτηση της οποίας οι τυπικές παράµετροι ταιριάζουν µε τις πραγµατικές παραµέτρους της κλήσης τότε επιλέγεται, αν δεν υπάρχει τέτοια συνάρτηση τότε ο compiler προσπαθεί να κάνει κατάλληλα castings ώστε να µπορεί να χρησιµοποιηθεί µια από τις υπάρχουσες συναρτήσεις. Οι ακριβείς κανόνες είναι σχετικά πολύπλοκοι. Καλό είναι να δίνεται πάντα προσοχή κατά τη χρήση overloaded συναρτήσεων. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 35

Παράδειγµα int Min(int a, int b) { cout << "Using int min()" << endl; if (a > b) return b; else return a; double Min(double a, double b) { cout << "Using double min()" << endl; if (a > b) return b; else return a; int main() { int a = 10; int b = 20; double x = 4.4; double y = 9.2; int c = Min(a, b); int z = Min(x, y); return 0; ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 36