Άσκηση (A) Κώδικας (A) #include <iostream.h> int triplasio(int posotriplasiasmou);

Σχετικά έγγραφα
ΑΣΚΗΣΗ 1: ΣΥΝΑΡΤΗΣΕΙΣ Ι

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> int compare_numbers(int num1, int num2)

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

Αντικειμενοστραφής Προγραμματισμός Θεωρία Παραδείγματα - Προγράμματα

Αντικειμενοστραφής Προγραμματισμός ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

Τι είναι κλάση Κλάση

ΑΣΚΗΣΗ 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (1) Θεωρητικό μέρος

242 -ΕισαγωγήστουςΗ/Υ

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

Θέµα 1 (15%): (απαιτούµενος χρόνος < 15 λεπτά)

"ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ" (ΕΜ102), ΕΡΓΑΣΙΑ 1η

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

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

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Υπερφόρτωση τελεστών (operator(

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

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

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

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

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

Δομές ελέγχου & επανάληψης

Συναρτήσεις (Functions) Εισαγωγή στη C++

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

C++ Ασκήσεις εργαστηρίου ΤΕΙ ΔΥΤΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ) Εργαστήριο: Αντικειμενοστρεφής Προγραμματισμός

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

Τελικό τεστ - απαντήσεις

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

Εργαστήριο 10 Κλάσεις

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 6: Πίνακες. Κ.

Δομημένος Προγραμματισμός

Δεδομένα, τελεστές, είσοδος/έξοδος

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables»

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

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Αʹ. Πίνακες. Άσκηση 1. Λύση. Άσκηση 2. Λύση. Ασκήσεις Εργαστηρίου Προγραμματισμού

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

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

Προγραμματισμός Ι. Ασκήσεις. Τζάλλας Αλέξανδρος, Καθηγητής Εφαρμογών. Τμ. Μηχανικών Πληροφορικής Τ.Ε.

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 9 Συναρτήσεις. Γεώργιος Λαμπρινίδης

EΒ ΟΜΑ Α 4 Η. οµές επανάληψης while και do while

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; }

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια

ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

Aσκήσεις Πράξης 6 - EΠΑΝΑΛΗΠΤΙΚΟ A ΜΕΘΟ ΟΛΟΓΙΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ι ΕΡΓΑΣΤΗΡΙΟ. 5. Τι τυπώνει το επόµενο πρόγραµµα:

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Σηµειώσεις Εργαστηρίου)

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

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Δομημένος Προγραμματισμός

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

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

Δομημένος Προγραμματισμός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Σηµειώσεις Θεωρίας)

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

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

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

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

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

242 -ΕισαγωγήστουςΗ/Υ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση. Γιώργος Λαμπρινίδης

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΕΑΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

Transcript:

Άσκηση (A) Να γραφτεί ένα πρόγραμμα που να τριπλασιάζει ένα ποσό που του δίνει ο χρήστης μεταξύ 0 και 1000. Στην περίπτωση που το εισαγόμενο ποσό είναι μεγαλύτερο από 1000 να τυπώνει στην οθόνη μήνυμα λάθους, αλλιώς τυπώνει το αποτέλεσμα. Κώδικας (A) int triplasio(int posotriplasiasmou); //prototypo int main() int apot=0; int posoeis; cout<<"dose poso metaxy 0 kai 10000 gia na to triplasiaso: "; cin>>posoeis; cout<<"\nprin kaleso thn triplasio... "; cout<<"\neisagomeno poso: "<<posoeis<<" Triplasio:"<<apot<<"\n"; apot=triplasio(posoeis); //klhsh synarthshs if (apot==-1) cout<<"\nepistrofh apo thn triplasio...\n"; cout<<"to poso pou edoses einai megalytero apo 10000\n\n"; else cout<<"\nepistrofh apo thn triplasio..."; cout<<"\neisagomeno poso:"<<posoeis<<"triplasio:"<<apot<< "\n\n"; return 0; int triplasio(int pragmatiko) //orismos synarthshs if (pragmatiko<=10000) return pragmatiko * 3; else return -1; 1

Άσκηση (Β) Να γραφτεί ένα πρόγραμμα που να βρίσκει το παραγοντικό ενός αριθμού, χρησιμοποιώντας την μέθοδο της επανάληψης. Θα αναπτύξετε το πρόγραμμα με δομή επανάληψης for και μετά με δομή επανάληψης while. Κώδικας (Β) ME FOR long paragontiko(long n); //dhlosh prototypou int main() long arithmos; cout<<"dose enan arithmo: "<<endl; cin>>arithmos; // exodοs me klhsh ths synarthshs cout<<arithmos<<"!=" <<paragontiko(arithmos)<<endl; return 0; //telos ths main long paragontiko(long n) // orismos synarthshs int i, fact=1; for(i=1; i<=n; i++) fact=fact*i; return fact; //telos synarthshs ME WHILE long paragontiko(long n) // orismos synarthshs int i=1, fact=1; while(i<=n) fact=fact*i; i++; return fact; //telos synarthshs 2

Άσκηση (A) ΚΛΗΣΗ ΜΕ ΑΝΑΦΟΡΑ (ΠΑΡΑΜΕΤΡΟΙ ΣΑΝ ΤΟΠΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ) Να γραφτεί ένα πρόγραμμα που να κάνει αλλαγή θέσης των τιμών των μεταβλητών με χρήση κλήσης με αναφορά. Κώδικας (A) void swap(int&x, int&y); int main() int a,b; cout<<"dose a: "<<endl; cin>>a; cout<<"dose b: "<<endl; cin>>b; cout<<"main. Prin to swap, a: "<<a<<" b: "<<b<<"\n"; swap(a,b); cout<<"main. Meta to swap, a: "<<a<<" b: "<<b<<"\n"; return 0; void swap(int&x, int&y) int temp; cout<<"swap. Prin to swap, x: "<<x<<" y: "<<y<<"\n"; temp=x; x=y; y=temp; cout<<"swap. Meta to swap, x: "<<x<<" y: "<<y<<"\n"; Άσκηση (Β) ΥΠΕΡΦΟΡΤΩΣΗ ΣΥΝΑΡΤΗΣΕΩΝ (ΜΕ ΠΡΟΕΠΙΛΕΓΜΕΝΑ ΟΡΙΣΜΑΤΑ) Να γραφτεί το πρόγραμμα της υπερφόρτωσης που να χρησιμοποιεί μία συνάρτηση με υπερφόρτωση και προεπιλεγμένα ορίσματα - και 50. Κώδικας (Β) void printfunc(char ch='-', int n=50); //dhlosh prototypou void main() printfunc(); //1h klhsh synarthshs printfunc('/'); //2h klhsh synarthshs printfunc('%',40); //3h klhsh synarthshs //telos ths main void printfunc(char ch, int n) //orismos synarthshs int i; for (i=0; i<n; i++) cout << ch; cout << endl; //telos synarthshs 3

Άσκηση (Γ) ΚΑΤΑΣΚΕΥΗ ΣΥΝΑΡΤΗΣΗΣ Να γραφτεί ένα πρόγραμμα στο οποίο να δηλώνεται και να ορίζεται μία συνάρτηση π.χ perimetros() με τιμή επιστροφής unsigned int, η οποία θα παίρνει δύο παραμέτρους mhkos και platos τύπου unsigned int και θα υπολογίζει την περίμετρο ενός παραλληλογράμμου από την σχέση Περ.=(2 * mhkos + 2 * platos). Κώδικας (Γ) Δήλωση Συνάρτησης perimetros() unsigned int perimetros(unsigned int mhkos, unsigned int platos); Ορισμός Συνάρτησης perimetros() unsigned int perimetros(unsigned int mhkos, unsigned int platos) return (mhkos * 2 + platos * 2); 4

ΔΗΛΩΣΗ ΜΙΑΣ ΑΠΛΗΣ ΚΛΑΣΗΣ (ορισμός μεθόδων έξω από την κλάση) Άσκηση (A) Να φτιαχτεί το πιο πάνω πρόγραμμα με την μόνη διαφορά ότι οι μέθοδοι θα ορίζονται έξω από την κλάση με την βοήθεια του τελεστή εμβέλειας (: :). Κώδικας (A) class foithths //dhlosh klashs private: char onoma[30]; //dedomeno melos float vathmos; void readdata(); //prototype methodou void printdata(); ; // telos klashs void foithths::readdata() //orismos ths readdata cout << "Dwse onoma:"; cin >> onoma; cout << "Dwse vathmo:"; cin >> vathmos; void foithths::printdata() //orismos ths printdata cout << "To onoma toy foithth einai: " << onoma << endl; cout << "O vathmos toy foithth einai: " << vathmos << endl; void main() foithths f1, f2; // dhlosh antikeimenwn f1.readdata(); //klhsh synarthshs gia orismo dedomenwn f1.printdata(); //klhsh synarthshs gia emfanish dedomenwn f2.readdata(); f2.printdata(); 5

ΧΡΗΣΗ CONSTRUCTOR ΧΩΡΙΣ ΟΡΙΣΜΑ ΚΑΙ DESTRUCTOR Άσκηση (Β) Να φτιαχτεί ένα πρόγραμμα αναλήψεων και καταθέσεων σε έναν τραπεζικό λογαριασμό. Η κλάση θα είναι ο λογαριασμός. Η ανάληψη και η κατάθεση θα είναι οι συναρτήσεις μέλη οι οποίες θα έχουν ως όρισμα το ποσό και η μεταβλητή μέλος θα είναι το υπόλοιπο το οποίο θα αρχικοποιηθεί στο 0 με την βοήθεια ενός constructor χωρίς όρισμα αλλά με αρχική τιμή και ενός destructor. Κατά την ανάληψη θα ελέγχεται πρωτίστως ότι το υπόλοιπο είναι μεγαλύτερο ή ίσο του ζητούμενου ποσού και κατόπιν θα αφαιρείται το ζητούμενο ποσό από τον λογαριασμό. Εάν το ποσό είναι μεγαλύτερο του υπολοίπου θα εμφανίζεται μήνυμα λάθους (π.χ. Λάθος!! Το ζητούμενο ποσό είναι μεγαλύτερο του υπολοίπου). Κατά την κατάθεση θα προστίθεται (χωρίς έλεγχο) το ποσό που κατατίθεται στο υπόλοιπο του λογαριασμού. Θα δημιουργήσετε ένα αντικείμενο log το οποίο θα κάνει μία κατάθεση 100 και μία ανάληψη 70. Κάθε φορά που θα γίνεται μία συναλλαγή θα εμφανίζεται το υπόλοιπο καλώντας μία συνάρτηση επιστροφής υπολοίπου. Κώδικας (Β) class logariasmos //dhlosh thw klashs private: float ypoloipo; logariasmos() //dhlosh constructor ypoloipo=0; ~logariasmos() //dhlosh destructor void analhpsh(float poso) //orismos analhpshs if (poso<=ypoloipo) //elegxos ypervashs ypoloipou ypoloipo=ypoloipo-poso; //enhmervsh ypoloipou else cout<<"prosoxh!!!!!!"<<endl; cout<<"to poso einai megalytero apo to ypoloipo"<<endl; void katathesi(float poso) //orismos katatheshs ypoloipo+=poso; //enhmervsh ypoloipou float pareypoloipo() //orismos synarthshs ypoloipou return ypoloipo; //epistrofh toy ypololipou 6

; //telos ths klashs main() logariasmos log1; //kataskeyh antikeimenoy // katathesi 100 log1.katathesi(100.0); cout <<"Katathesi 100 Euro"<<endl; //elegxos ypoloipoy me klhsh synarthshs cout <<"To ypoloipo twra einai:"<<log1.pareypoloipo()<<endl; //analhpsh 70 log1.analhpsh(70.0) ; cout <<"Analhpsi 70 Euro"<<endl; //elegxos ypoloipoy me klhsh synarthshs cout <<"To ypoloipo twra einai:"<<log1.pareypoloipo()<<endl; //telos ths main 7

Άσκηση (A) Να φτιαχτεί ένα πρόγραμμα που θα υπολογίζει το εμβαδόν παραλληλογράμμου (κλάση), αλλά και του τριγώνου (κλάση). Θα χρησιμοποιήσετε constructor με υπερφόρτωση. Θα λάβετε υπόψη σας ότι τα δεδομένα σας θα είναι το πλάτος και το ύψος για το παραλληλόγραμμο και η βάση και το ύψος για το τρίγωνο. Κώδικας (A) class Parallhlogramo private: int platos, ypsos; Parallhlogramo () platos = 5; ypsos = 5; Parallhlogramo (int x, int y) platos = x; ypsos = y; ~Parallhlogramo () int emvado() return (platos*ypsos); ; class Trigono private: int vash; int ypsos; Trigono() vash = 5; ypsos = 3; Trigono(int v,int y) vash = v; ypsos = y; ~Trigono() int emvado() return (vash*ypsos)/2; 8

; int main () Parallhlogramo ParA (3,4); Parallhlogramo ParB; cout << "Emvado Parallhlogramou A : " << ParA.emvado() << endl; cout << "Emvado Parallhlogramou B : " << ParB.emvado() << endl; Trigono TrigA (8,3); Trigono TrigB; cout << "Emvado Trigonou A: " << TrigA.emvado() << endl; cout << "Emvado Trigonou B: " << TrigB.emvado() << endl; return 0; Άσκηση (Β) Να φτιαχτεί το προηγούμενο πρόγραμμα με δήλωση των κλάσεων σε αρχεία επικεφαλίδας. Το βασικό αρχείο θα συμπεριλαμβάνει τα αρχεία επικεφαλίδας. Κώδικας (Β) Αρχείο κεφαλίδας Parallhlogramo.hpp //Parallhlogramo.hpp class Parallhlogramo private: int platos, ypsos; Parallhlogramo () platos = 5; ypsos = 5; Parallhlogramo (int x, int y) platos = x; ypsos = y; ~Parallhlogramo () int emvado() return (platos*ypsos); ; Αρχείο κεφαλίδας Trigono.hpp //Trigono.hpp class Trigono private: int vash; int ypsos; 9

Trigono() vash = 5; ypsos = 3; Trigono(int v,int y) vash = v; ypsos = y; ~Trigono() int emvado() return (vash*ypsos)/2; ; Κυρίως πρόγραμμα emv_trig_paral_overl_construct2.cpp //arxeio programmatos.cpp #include "Parallhlogramo.hpp" #include "Trigono.hpp" int main () Tetragono TetrA (3,4); Tetragono TetrB; cout << "TetrA emvado: " << TetrA.emvado() << endl; cout << "TetrB emvado: " << TetrB.emvado() << endl; return 0; 10

Άσκηση (A) Να φτιαχτεί ένα πρόγραμμα που να υπολογίζει τον όγκο ενός κυλίνδρου (κλάση), αφού πρώτα υπολογίζει το εμβαδόν της βάσης του που είναι κύκλος (κλάση). Λάβετε υπόψη ότι : Εκυκλου=r 2 *π και Vκυλινδρου= r 2 *π*h ή Vκυλινδρου= Εκυκλου*h Όπου r=ακτίνα, π=3.14, h=ύψος. Ο όγκος θα υπολογίζεται δίνοντας την ακτίνα και το ύψος του κυλίνδρου μέσα στην main από ένα αντικείμενο kyl1. Θα χρησιμοποιήσετε μέθοδο χρήσης αντικειμένου από συνάρτηση. Θα χρησιμοποιηθεί επίσης constructor με αντιστοίχιση ορισμάτων με δεδομένα. Κώδικας (A) class kyklos private: float aktina; kyklos(float r) : aktina(r) //constructor float emvado() return aktina*aktina*3.14159265; ; class kylindros kyklos vash; //idiothta ths periektikothtas private: float ypsos; kylindros(float v, float h) : vash (v), ypsos(h) float ogkos() return vash.emvado() * ypsos; ; int main () kylindros kyl1 (10,20); cout << "ogkos kyl1 : " << kyl1.ogkos() << '\n'; return 0; 11

Άσκηση (B) Να φτιαχτεί ένα πρόγραμμα στο οποίο θα ορίζεται μια κλάση εργαζόμενοι. Τα δεδομένα μέλη θα είναι ο αριθμός μητρώου, το όνομα, το επώνυμο, οι ώρες εργασίας, το ωρομίσθιο και ο ημερομίσθιο. Το ωρομίσθιο θα χρησιμοποιηθεί σαν δεδομένο αρχικοποίησης στους constructors με τιμή 5 για τον constructor χωρίς όρισμα. Η κλάση θα περιέχει εκτός από τους constructors μία μέθοδο για την εισαγωγή των δεδομένων των εργαζομένων (με κλήση της μεθόδου υπολογισμού του ημερομισθίου ή αλλιώς κλήση συνάρτησης από συνάρτηση), μία μέθοδο για τον υπολογισμό του ημερομισθίου και μια μέθοδο για την εμφάνιση των δεδομένων των εργαζομένων. Στην main() θα κατασκευαστούν αντικείμενα με ή χωρίς αρχική τιμή (ωρομίσθιο) τα οποία θα καλέσουν τις μεθόδους για την συμπλήρωση των στοιχείων, τον υπολογισμό και την εμφάνιση των στοιχείων. Κώδικας (Β) class ergazomenoi private: int am; char name[10]; char surname[20]; int hours; float payrate; float salary; ergazomenoi() payrate=5; ergazomenoi(float p):payrate(p) ~ergazomenoi() void dataentry() cout<<"a.m.:"; cin>>am; cout<<"name:"; cin>>name; cout<<"surname:"; cin>>surname; cout<<"ores:"; cin>>hours; salary=salcalc(hours, payrate); float salcalc(int hrs, float prt) float sal; sal=hrs*prt; return sal; void readdata() 12

cout<<"a.m.: "<<am<<endl; cout<<"name: "<<name<<endl; cout<<"surname: "<<surname<<endl; cout<<"ores Ergasias: "<<hours<<endl; cout<<"oromisthio: "<<payrate<<endl; cout<<"misthos: "<<salary<<" Euro"<<endl; ; void main() ergazomenoi e1(7), e2, e3(10); e1.dataentry(); e2.dataentry(); e3.dataentry(); cout<<endl; e1.readdata(); cout<<endl; e2.readdata(); cout<<endl; e3.readdata(); cout<<endl; 13

Άσκηση (A) Να γραφτεί ένα πρόγραμμα που θα διαβάζει είκοσι ακέραιους από το πληκτρολόγιο και εμφανίζει το πλήθος των άρτιων και το πλήθος των περιττών. (χρησιμοποιήστε το αναγνωριστικό #define) Κώδικας (A) #define N 20 //xrhsh toy anagnoristikou void main() int arr[n]; int i, artios=0, perittos=0 ; /* vroxos gia thn eisagogh twn timwn tou pinaka apo ton xrhsth */ for (i=0; i<n; i++) cout<<"dose "<<i+1<<"o arithmo:"; cin>>arr[i]; /* vroxos gia thn evresh Ton artion kai ton peritton */ for (i=0; i<n; i++) if (arr[i]%2==0) artios=artios+1; else perittos=perittos+1; cout<<"oi Artioi einai: "<<artios<<endl; cout<<"oi Perittoi einai: "<< perittos << endl; Άσκηση (B) Να γραφτεί πρόγραμμα που να ζητά από τον χρήστη να περάσει τις βαθμολογίες μιας τάξης 10 σπουδαστών και να υπολογίσει το ποσοστό των φοιτητών που περνάνε το μάθημα. Κώδικας (Β) void main() float array[10]; float pososto; int i, b=0; /* vroxos gia thn eisagogh twn timwn tou pinaka apo ton xrhsth */ for(i=1;i<=10;i++) cout<<"dose vathmo "<<i<<"ou foithth: "; cin>>array[i]; /* vroxos gia ton elegxo twn batmwn pou einai megalyteroi h isoi me 5 */ 14

for(i=1;i<=10;i++) if(array[i]>=5) b++; // ypologismos toy posostou pososto=100*b/10; // ektypwsh toy posostou cout<<"to pososto pou pernane einai: " <<pososto<<"%"<<endl; Άσκηση (Γ) Να γραφτεί πρόγραμμα που να αρχικοποιεί έναν ακέραιο δισδιάστατο πίνακα 4Χ2 με τιμές που του δίνει ο χρήστης και να έχει ως έξοδο το άθροισμα των τιμών κάθε στοιχείου του πίνακα με το πρώτο του στοιχείο. Κώδικας (Γ) #define SEIRA 4 //xrhsh toy anagnoristikou gia tis seires #define STHLH 2 //xrhsh toy anagnoristikou gia tis sthles void main() int myarray[seira][sthlh]; //dhlosh akeraiou pinaka int i,j; /* vroxos gia thn eisagogh twn timwn tou pinaka apo ton xrhsth */ for(i=0;i<seira;i++) for(j=0;j<sthlh;j++) cout<<"timh gia to myarray["<<i<<"]["<<j<<"]: "; cin>>myarray[i][j]; /* ekxorish ths timhs toy protoy stoixeioy se metavlhth */ int k=myarray[0][0]; /* vroxos gia to athroisma twn stoixeion me to proto stoixeio */ for(i=0;i< SEIRA;i++) for(j=0;j<sthlh;j++) myarray[i][j]+=k; // vroxos gia thn ektyposh twn timwn tou pinaka for(i=0;i<seira;i++) for(j=0;j<sthlh;j++) cout<<myarray[i][j]<<'\t'; cout<<endl; 15

Άσκηση (A) Να γραφτεί ένα πρόγραμμα, όπου να ορίζεται μία κλάση με το όνομα Student και δεδομένα τον αριθμό μητρώου ενός σπουδαστή και έναν πίνακα όπου αποθηκεύονται 10 βαθμολογίες του. Θα πρέπει το πρόγραμμα να εμφανίζει τον Μ.Ο. των βαθμολογιών και την μικρότερή αλλά κα την μεγαλύτερη βαθμολογία Κώδικας (A) const int N=10; class Student //dhmiourgia klashs private: int armht; float vathmos[n]; //pinakas vathmologias Student() //constructor arxikopoihshs pinaka int i; armht=0; for (i=0; i<n; i++) vathmos[i]=0; //methodos gia thn eisagogh stoixeion void readdata() int i; cout<<"dose A.M.:"; cin >> armht; for (i=0; i<n; i++) cout <<"Dose "<<i+1<<" Vathmo: "; cin>>vathmos[i]; //methodos gia thn epistrofh A.M. int GetData() return armht; //methodos gia ton ypologismo toy M.O. float getavg() int i; float sum=0, avg; for (i=0; i<n; i++) sum+=vathmos[i]; avg=sum/n; return avg; //methodos gia thn eyresh toy mikroterou vathmou float getmin() 16

int i; float min; min=vathmos[0]; for (i=1; i<n; i++) if (vathmos[i]<min) min=vathmos[i]; return min; //methodos gia thn eyresh toy megalyterou vathmou float getmax() int i; float max; max=vathmos[0]; for (i=1; i<n; i++) if (vathmos[i]>max) max=vathmos[i]; return max; ; //telos klashs void main() Student Stud1; //kataskeyh antikeimenou //eisagogh stoixeion sto antikeimeno Stud1 Stud1.readData(); cout<<"\nar.mhtroou: "<<Stud1.GetData()<<endl; //A.M cout<<"\nm.o.: "<<Stud1.getAvg()<<endl; //M.O. cout<<"\nmegalyteros Vathmos: "<<Stud1.getMax()<<endl; //MAX cout<<"\nmikroteros Vathmos: "<<Stud1.getMin()<<endl; //MIN //telos main Άσκηση (Β) Να γραφτεί το πρόγραμμα με τους εργαζόμενους, (χωρίς την εύρεση εργαζομένου από τον Α.Μ.) που να έχει ως έξοδο την εκτύπωση των στοιχείων όλων των εργαζομένων και την εύρεση του Μ.Ο. των μισθών. Κώδικας (Β) #define N 5 //anagnoristiko class Ergazomenoi //dhmioyrgia klashs private: int armht; char onoma[20]; float misthos; void readdata() //methgodos eisagoghs stoixeion cout<<"dose A.M.: "; cin>>armht; 17

cout<<"dose Onoma: "; cin>>onoma; cout<<"dose Mistho: "; cin>>misthos; void printdata() //methgodos ektyposhs stoixeion cout<<"a.m.: "<<armht<<endl; cout<<"onoma: "<<onoma<<endl; cout<<"misthos: "<<misthos<<endl; float retmisthos() //methodos epistrofhs A.M. return misthos; ; //telos klashs void main() Ergazomenoi erg[n]; //pinakas antikeimenon erg int i; float avg, sum=0; /* vroxos gia thn eisagogh stoixeion me klhsh ths methodou read.data apo to kathe antikeimeno erg*/ cout <<"Dose stoixeia "<<N<<" Ergazomenwn: "<<endl; for (i=0; i<n; i++) cout<<endl<<"ergazomenos "<<i+1<<":"<<endl; erg[i].readdata(); //syllogh stoixeiwn for (i=0; i<n; i++) cout<<endl<<"ergazomenos "<<i+1<<":"<<endl; erg[i].printdata(); //ektypose ta stoixeia toy for (i=0; i<n; i++) sum=sum+erg[i].retmisthos(); avg=sum/n; cout<<"\no M.O. einai: "<<avg<<endl; 18

Άσκηση (A) Να φτιάξετε ένα πρόγραμμα που να δηλώνετε μία βασική κλάση πολυγώνου και δημόσιες (public) παράγωγες κλάσεις τετραγώνου, παραλληλογράμμου και τριγώνου. Στην βασική κλάση θα είναι δηλωμένα τα δεδομένα-μέλη βάση και ύψος ως προστατευμένα (protected). Επίσης θα υπάρχει μία μέθοδος η οποία θα περνάει τις τιμές των πλευρών που θα δίνουν τα αντικείμενα στις συναρτήσεις, για τον υπολογισμό του εμβαδού. Οι συναρτήσεις αυτές θα υπάρχουν σε κάθε παράγωγη κλάση. 1. Φτιάξτε τρία αντικείμενα για τα τρία σχήματα που θα δίνουν τα μήκη των πλευρών (Βάση, Ύψος) για να υπολογίζονται τα εμβαδά των σχημάτων χρησιμοποιώντας τις συναρτήσεις των παράγωγων κλάσεων με την βοήθεια των τύπων ΕΤΕΤΡ=ΕΠΑΡΑΛ=Β*Υ και ΕΤΡΙΓ = Β*Υ/2. 2. Μετά δηλώστε μία ή και όλες τις παράγωγες κλάσεις ιδιωτικές (private), τι παρατηρείτε; 3. Επαναφέρατε την δήλωση των κλάσεων σε δημόσιες και δηλώστε το ένα από τα δεδομένα-μέλη ως ιδιωτικό (private), τι παρατηρείτε; 4. Φτιάξτε μία συνάρτηση στην βασική κλάση που να υπολογίζει το εμβαδό ίδια με αυτές που υπάρχουν στις παράγωγες κλάσεις (υπερφόρτωση). Κάνετε σε μία από τις κλάσεις έναν έλεγχο στην συνάρτηση υπολογισμού του εμβαδού, τι παρατηρείτε; Κώδικας (A) 1. class Polygono //vasikh klash protected: int bash,ypsos; void vale_times (int a, int b) bash=a; ypsos=b; ; class Tetragono:public Polygono //paragwgh klash int emvado() return bash*ypsos; ; class Paralhlogrammo:public Polygono //paragwgh klash int emvado() 19

return bash*ypsos; ; class Trigono:public Polygono //paragwgh klash int emvado() return bash*ypsos/2; ; int main () Tetragono TetA; Paralhlogrammo ParA; Trigono TrigA; TetA.vale_times (2,2); ParA.vale_times (4,5); TrigA.vale_times (3,6); cout<<"emvado TETRAGONOY: "<<TetA.emvado()<<endl; cout<<"emvado PARALLHLOGRAMOU: "<<ParA.emvado()<<endl; cout<<"emvado TRIGONOU: "<<TrigA.emvado()<<endl; return 0; 2. class Tetragono:private Polygono int emvado() return bash*ypsos; ; class Paralhlogrammo:public Polygono int emvado() return bash*ypsos; ; class Trigono:private Polygono int emvado() return bash*ypsos/2; ; 3. 20

class Polygono protected: int bash; private: int ypsos; void vale_times (int a, int b) bash=a; ypsos=b; ; 4. class Polygono protected: int bash,ypsos; void vale_times (int a, int b) bash=a; ypsos=b; void emvado() //yperfortvsh synarthshs int x; x=bash*ypsos; cout<<"emvado: "<<x<<endl; ; class Tetrgono:public Polygono void emvado() if (bash<=ypsos) Polygono::emvado(); else cout<<"! STO TETRAGONO OI PLEYRES DEN EINAI ISES!"<<endl; ; int main () 21

Tetrgono TetA; Paralhlogrammo ParA; Trigono TrigA; TetA.vale_times (5,2); ParA.vale_times (4,5); TrigA.vale_times (3,6); TetA.emvado(); cout<<"emvado PARALLHLOGRAMOU: "<<ParA.emvado()<<endl; cout<<"emvado TRIGONOU: "<<TrigA.emvado()<<endl; return 0; 22

Άσκηση (A) Με βάση αυτά που μάθαμε στην άσκηση 8 καλείστε να φτιάξετε ένα πρόγραμμα που να ορίζεται μία βασική κλάση Ζώο και δύο παράγωγες Σκύλος και Γάτα. Στη βασική κλάση θα υπάρχουν constructor χωρίς όρισμα αλλά και ένας με ορίσματα όπου θα περνάει τιμές στα δεδομένα μέλη της βασικής κλάσης ηλικία (float), φύλλο (bool) και βάρος (float). Μέσα στην βασική κλάση θα υπάρχουν επίσης και δύο μέθοδοι, μία για την εισαγωγή των στοιχείων με έλεγχο για το φύλλο με αρχική τιμή αγόρι και μία για την εκτύπωση των στοιχείων πάλι με έλεγχο του φύλλου του ζώου. Μέσα στις παράγωγες κλάσεις θα υπάρχει constructor χωρίς όρισμα αλλά και με 4 ορίσματα, τα τρία θα τα δίνει σε αυτόν της βασικής κλάσης και το ένα θα το δίνει η ίδια η παράγωγη και θα είναι το όνομα του ζώου. Θα υπάρχουν επίσης και δύο μέθοδοι, στην μία θα δίνετε το όνομα και η άλλη θα δείχνει το όνομα του ζώου. Κατόπιν στην main() θα φτιάξετε από δύο ζώα (αντικείμενα) για το κάθε είδος (παράγωγη κλάση). Το πρώτο ζώο θα είναι χωρίς όρισμα και θα του δίνετε τιμές εσείς και το δεύτερο θα δίνονται οι τιμές από την κατασκευή του αντικειμένου. Χρησιμοποιήστε υπερφόρτωση συναρτήσεων για να τροποποιήσετε μεθόδους της βασικής κλάσης. Κώδικας (A) #include <string.h> class Zwo protected: float ilikia; bool arren; int varos; Zwo() Zwo(float i, bool ar, int wei) ilikia = i; arren = ar; varos = wei; void dwsestoixeia() cout<<"dwse ilikia tou Zwou: "; cin>> ilikia; int a; cout<<"einai arseniko? gia NAI dwse 1: "; cin>> a; if (a==1) arren=true; //elegxos fyloy else arren=false; cout<<"dwse Baros tou Zwou: "; cin>> varos; 23

void showstoixeia() cout<<"ilikia zwou: "<<ilikia; cout<<endl; cout<<"fyllo zwou: "; if (arren==true) cout<<"arseniko"; else cout<<"thiliko"; cout<<endl; cout<<"baros zwou: "<<varos; cout<<endl; ; class Skylos: public Zwo private: char onoma[10]; //dedomeno paragwghs klashs Skylos() Skylos(float a,bool b,int c,char d[]):zwo(a,b,c) strcpy(onoma,d); void onomazw(char name[]) strcpy(onoma,name); void showonoma() cout<<"to onoma toy skyloy einai: "<<onoma<<endl; ; class Gata: public Zwo private: char onoma[10]; Gata() Gata(float a,bool b,int c,char d[]):zwo(a,b,c) strcpy(onoma,d); void onomazw(char name[]) strcpy(onoma,name); void showonoma() cout<<"to onoma ths gatas einai: "<<onoma<<endl; ; 24

void main() Skylos skylos1; //antikeimeno xvris times cout<<"skylos1"<<endl; skylos1.dwsestoixeia(); cout<<endl; skylos1.onomazw("ermhs"); skylos1.showstoixeia(); skylos1.showonoma(); cout<<endl<<endl; //antikeimeno me times Skylos skylos2(4,false,17,"hra"); cout<<"skylos2:"<<endl; skylos2.showstoixeia(); skylos2.showonoma(); cout<<endl; Gata gata1; cout<<"gata1"<<endl; gata1.dwsestoixeia(); gata1.onomazw("ririkos"); cout<<endl; gata1.showstoixeia(); gata1.showonoma(); cout<<endl<<endl; Gata gata2(4,false,17,"serenata"); cout<<"gata2:"<<endl; gata2.showstoixeia(); gata2.showonoma(); 25

Άσκηση (A) 1. Τρέξτε το παρακάτω πρόγραμμα και δείτε την έξοδό του. Σημειώστε κάπου τα αποτελέσματα που βλέπετε. # include <iostream.h> class counter private: int co; counter () //constructor co=0; void calc_co () //func gia afkshsh ++co; int get_co () //func gia lhpsh timhs return co; ; //telos klashs void main() //2 antikeimena me timh 0 counter cou1, cou2; int a,b,s; //topikes metavlhtes s=0; //afkshsh kata 1 dyo fores ++s; ++s; cout<<"\nmetriths s="<<s; cout<<"\n\n"; //apodosh ths timhs co (0) sto a a=cou1.get_co(); //apodosh ths timhs co (0) sto b b=cou2.get_co(); cout<<"\nmetriths cou1= "<<a; cout<<"\nmetriths cou2= "<<b; cout<<endl; //afkshsh kata 1 toy cou1 (1) cou1.calc_co(); //afkshsh kata 1 toy cou2 (1) cou2.calc_co(); cou1.calc_co(); cou1.calc_co(); //ektyposh twn timwn cout<<"\netriths cou1="<<cou1.get_co(); cout<<"\netriths cou2="<<cou2.get_co(); //prosthesi kai apodosh timhs sto b b=cou1.get_co()+cou2.get_co(); 26

cout<<"\nto athroisma einai :"<<b<<endl; //ektyposh toy b //telos main Στο πιο πάνω πρόγραμμα βλέπουμε ότι χρησιμοποιούμε τελεστή ++ και στην τοπική μεταβλητή s της main() αλλά και στο δεδομένο μέλος co της κλάσης counter κάνει την δουλειά του όπως πρέπει σε αυτές. Αυξάνει δηλαδή κατά ένα δύο φορές την s μέσα στην main() αλλά και με την κλήση της calc_co() από τα αντικείμενα cou1 και cou2 αυξάνει την τιμή του δεδομένου μέλους co για κάθε αντικείμενο. Στο τέλος προσθέτει τις δύο τιμές και τις εκχωρεί εκ νέου στην μεταβλητή b. Εάν γράψουμε ++co; προσπαθώντας να αυξήσουμε την τιμή του αντικειμένου ο compiler θα μας δώσει λάθος. Γι αυτόν τον λόγο χρησιμοποιούμε την λέξη κλειδί operator με τον τελεστή ++ αντί της συνάρτησης calc_co(). Τώρα εάν χρησιμοποιήσουμε την έκφραση ++co; ο compiler θα αυξήσει την τιμή του αντικειμένου χωρίς λάθος. Αυτό φαίνεται στο πιο κάτω πρόγραμμα. Άσκηση (Β) 2. Κάνετε τις αλλαγές που φαίνονται πιο κάτω και δείτε την νέα του έξοδο. Συγκρίνετε τα αποτελέσματα που βλέπετε με αυτά του προηγούμενου προγράμματος. Τι παρατηρείτε; # include <iostream.h> ///////////////////////////////////////////////////////// void operator ++() //xrhsh toy operator ++co; int get_co() //func gia lhpsh timhs co return co; ; void main() /////////////////////////////////////////////////////////// cout<<"\nmetriths co= "<<b; cout<<endl; ++cou1; //afkshsh me yperfortosh ++cou2; //afkshsh me yperfortosh ++cou1; //afkshsh me yperfortosh ++cou1; //afkshsh me yperfortosh ////////////////////////////////////////////////////////////// //ektyposh toy b cout<<"\nto athroisma einai :"<<b<<endl; 27

Άσκηση (Γ) 3. Τρέξτε το παρακάτω πρόγραμμα και εξηγήστε τι κάνει. Σημειώστε τα αποτελέσματα της εξόδου. Κάντε δικές σας αποδόσεις τιμών και αυξήσεις τιμών των αντικειμένων. class proepi private: unsigned int co; proepi() co=0; proepi(int x) co=x ; proepi operator ++() //prothematikh morfh return proepi(++co); proepi operator ++(int) //epithematikh morfh return proepi(co++); int get_co() return co; ; void main() proepi pe1,pe2 ; cout<<"\npe1 = "<<pe1.get_co(); //(pe1=0) cout<<"\npe2 = "<<pe2.get_co(); //(pe2=0) ++pe1; //prothamatikh yperfortosh (pe1=1) ++pe1; //prothamatikh yperfortosh (pe1=2) pe2=++pe1; // (t1=3, t2=3) cout<<"\npe1 = "<<pe1.get_co(); cout<<"\npe2 = "<<pe2.get_co(); pe2=pe1++; //epithamatikh yperfortosh (pe2=3,pe1=4) pe2=pe1++; //epithamatikh yperfortosh (pe2=4,pe1=5) cout<<"\npe1 = "<<pe1.get_co(); cout<<"\npe2 = "<<pe2.get_co(); cout<<"\n\n"; 28

Άσκηση (A) Πιο κάτω βλέπετε την συνάρτηση που κάνει αλλαγή θέσης δύο τιμών τοπικών μεταβλητών χωρίς να επηρεάζονται οι αρχικές μεταβλητές. Γράψτε ολοκληρωμένο το πρόγραμμα με την εισαγωγή τιμών στις αρχικές μεταβλητές (π.χ. a και b) καθώς και την συνάρτηση που κάνει αλλαγή τιμών των αρχικών μεταβλητών με την χρήση δεικτών. swap(a, b); void swap(int x, int y) int temp; cout<<"swap. Prin to swap, x: "<<x<<" y: "<<y<<"\n"; temp=x; x=y; y=temp; cout<<"swap. Meta to swap, x: "<<x<<" y: "<<y<<"\n"; Κώδικας (A) void swap(int *p1, int *p2); int main() int a,b; cout<<"dose a: "; cin>>a; cout<<"dose b: "; cin>>b; cout<<"main. Prin to swap, a: "<<a<<" b: "<<b<<"\n"; swap(&a,&b); cout<<"main. Meta to swap, a: "<<a<<" b: "<<b<<"\n"; return 0; void swap(int *p1, int *p2) int temp; cout<<"swap. Prin to swap, x: "<<*p1<<" y: "<<*p2<<"\n"; temp=*p1; *p1=*p2; *p2=temp; cout<<"swap. Meta to swap, x: "<<*p1<<" y: "<<*p2<<"\n"; 29

Άσκηση (Β) Τρέξτε το πιο πάνω πρόγραμμα και δείτε την έξοδό του. Κατόπιν κάντε τα ακόλουθα: 1. Δηλώστε τον πίνακα ως 20 στοιχείων με #define. 2. Κατόπιν αλλάξτε τον τρόπο εισαγωγής τιμών στον πίνακα (τις τιμές θα τις δίνει ο χρήστης με πληκτρολόγηση). 3. Τυπώστε στην έξοδο εκτός από το άθροισμα και τη μέση τιμή. 4. Τυπώστε στην έξοδο το άθροισμα κάθε στοιχείου του πίνακα με το τελευταίο στοιχείο του. Κώδικας (Β) #define N 20 //Απάντηση 1 void main() int array[n]; int a,sum,i,*parr; float MT; cout<<"\n\t\t APODOSH TIMWN STON PINAKA ARRAY"<<endl; // Απάντηση 2 for(i=0;i<n;i++) cout<<"dwse TIMH STOIXEIOU ARRAY["<<i<<"]:"; cin>>array[i]; cout<<"\n\t\t O PINAKAS ARRAY"; cout<<"\n\n STOIXEIA TOY PINAKA ADDRESSES"; cout<<" TIMES TOY PINAKA\n"; for(i=0;i<n;i++) /* 1. ektypwsh twn timwn twn stoixeiwn tou pinaka me amesh anafora sta stoixeia */ cout<<"\tarray"<<i<<"]"<<"\t\t"<<&array[i]<<"\t\t"<<array[i]<<endl; parr=&array[0]; //o deikths deixnei to prwto stoixeio // ypologismos toy athroismatos // twn stoixeiwn toy me deiktes sum=0; cout<<"\n\n\t O PINAKAS ARRAY ME DEIKTES"; cout<<"\n\n STOIXEIA TOY PINAKA ADDRESSES"; cout<<" TIMES TOY PINAKA\n"; for(i=0;i<n;i++) sum=sum+*parr; //ypologismos toy athroismatos timwn /* 2. ektypwsh twn timwn twn stoixeiwn tou pinaka Me emesh anafora sta stoixeia mesw deiktwn*/ cout<<"\tarray["<<i<<"]"<<"\t\t"<<parr<<"\t\t"<<*parr; *parr++; cout<<endl; 30

/*3. Ektypwsh tou athroismatos twn timwn twn stoixeiwn tou pinaka */ cout<<"\nto ATHROISMA TWN STOIXEIWN TOU PINAKA="<<sum<<endl; MT=float (sum)/n; cout<<"\nh MESH TIMH TWN STOIXEIWN TOU PINAKA="<<MT<<endl; // Απάντηση 3 parr=&array[0]; //o deikths deixnei pali to prwto stoixeio a=array[n-1]; //ekxwrhsh deikth se metavlhth cout<<"\nto A8ROISMA TOY KA8E STOIXEIOY ME TO 1o STOIXEIO"<<endl; /* 4. Ektypwsh tou a8roismatos tou 1ou stoixeiou me ka8e stoiseio tou pinaka */ for(i=0;i<n;i++) // Απάντηση 4 *parr=a+(*(parr+i)); cout<<*parr<<endl; cout<<endl<<endl; 31

Άσκηση (A) Μετά την συγγραφή του πιο πάνω κώδικα κάνετε τα παρακάτω: 1. Τρέξτε το παραπάνω πρόγραμμα και δείτε τη έξοδό του. 2. Με την χρήση ενός text editor (π.χ. notepad) δείτε τα περιεχόμενα του αρχείου askhsh12.txt. 3. Αλλάξτε τις μεταβλητές π.χ z σε Β και y από 1.234 σε 2.435 τρέξτε το πρόγραμμα και δείτε τις αλλαγές στο αρχείο askhsh12.txt. 4. Αλλάξτε τις τιμές σε %, y από 2.435 σε 23.43 και με την χρήση του flag ios::app καταχωρήστε τις νέες τιμές στο τέλος του αρχείου. 5. Χρησιμοποιήστε το flag ios::noreplace στην δήλωση ανοίγματος του ρεύματος. Αλλάξτε εκ νέου τις τιμές σε @ και x από 10 σε 200. Τρέξτε το πρόγραμμα και δείτε τι θα γίνει με τα περιεχόμενα του αρχείου askhsh12.txt. 6. Χρησιμοποιήστε το flag ios::trunc μαζί με το flag ios::out στην δήλωση ανοίγματος του ρεύματος. Αλλάξτε εκ νέου τις τιμές σε R και x σε 1200. Τρέξτε το πρόγραμμα και δείτε τι θα γίνει με τα περιεχόμενα του αρχείου askhsh12.txt. 7. Φτιάξτε ένα δικό σας αρχείο και δώστε του τιμές. Δείτε αυτό που φτιάξατε. Κώδικας (A) 1. Έξοδος του κώδικα OLA TA PARAPANW YPARXOYN STO ARXEIO s1.txt Press any key toy continue 2. Περιεχόμενα του αρχείου askhsh12.txt. z 10 1.234 to arxeio einai to: askhsh12.txt 3. Αλλαγή τιμών στο αρχείο askhsh11.txt. int x=10; double y=2.435; //ta parakatw phgainoyn sto arxeio filea<<'β'<<endl; filea<<x<<endl; filea<<y<<endl; ΕΞΟΔΟΣ B 10 32

2.435 to arxeio einai to: askhsh12.txt 4. Πρόσθεση των νέων τιμών στο τέλος του αρχείου askhsh12.txt filea.open("askhsh12.txt",ios::app); //pragmatiko onoma int x=10; double y=23.43; //ta parakatw phgainoyn sto arxeio filea<< % <<endl; filea<<x<<endl;. ΕΞΟΔΟΣ B 10 2.435 to arxeio einai to: askhsh12.txt % 10 23.43 to arxeio einai to: askhsh12.txt 5. Οι αλλαγές δεν γίνονται γιατί η nonreplaced υποδηλώνει ότι εάν το αρχείο υπάρχει η open δεν εκτελείται άρα το αρχείο askhsh12.txt δεν ανοίγει για να δεχθεί τις αλλαγές. filea.open("askhsh12.txt",ios::noreplace); //pragmatiko onoma int x=100; double y=23.43; //ta parakatw phgainoyn sto arxeio filea<< @ <<endl; filea<<x<<endl;. ΕΞΟΔΟΣ (παραμένει η ίδια) B 10 2.435 to arxeio einai to: askhsh12.txt % 10 23.43 to arxeio einai to: askhsh12.txt 6. Το αρχείο askhsh12.txt ανοίγει, σβήνονται όλα του τα περιεχόμενα και καταχωρούνται σε αυτό οι νέες τιμές. 33

filea.open("askhsh12.txt",ios::out ios::trunc); //pragmatiko onoma int x=1200; double y=20.036; //ta parakatw phgainoyn sto arxeio filea<< R <<endl; filea<<x<<endl;. ΕΞΟΔΟΣ R 1200 20.036 to arxeio einai to: askhsh12.txt 34

Πρακτικό μέρος Άσκηση (A) Να κατασκευάσετε ένα πρόγραμμα που να εγγράφει και να διαβάζει δεδομένα ενός εργαζόμενου (Α.Μ., Όνομα, Επώνυμο, Μισθός) σε ένα αρχείο. Π.Χ. Worker.txt. Θα εργαστείτε με βάση το πρώτο πρόγραμμα. Κατόπιν εισάγεται το flag ios::app στο stream εγγραφής και ξανατρέξτε το πρόγραμμα για καταχωρήσετε νέους εργαζόμενους. Κώδικας (A) #include <fstream.h> class ergazomenos //klash private: int AM; //dedomena char name[20], surname[30]; double salary; void setdata() //me8odos gia thn eisagvgh cout<<"ar. Mhtrwou: "; cin>>am; cout<<"dose Onoma: "; cin>>name; cout<<"dose Epwnymo: "; cin>>surname; cout<<"dose Mis8o: "; cin>>salary; void printdata() //me8odos gia thn ektyposh cout<<"ar. Mhtrwou: "<<AM<<endl; cout<<"onomatepwnymo"<<endl; cout<<name<<" "<<surname<<endl; cout<<"mis8os: "<<salary<<endl; ; //telos klashs void main() ofstream ofile; //stream exodou ifstream ifile; //stream eisodou char choice; ergazomenos Erg1,Erg2; ofile.open("worker.txt",ios::out ios::binary); while(1) //1>0 dhladh panta cout<<"eisagogh STOIXEIWN (n=nai/o=oxi): "; 35

cin>>choice; if(choice=='n') //ean epilexoume to n Erg1.setData(); ofile.write((char *) &Erg1, sizeof(erg1)); else break; //aliws vgainoume //telos while ofile.close(); //kleisimo stream eggrafhs ifile.open("worker.txt", ios::in ios::binary); cout<<"oi ERGAZOMENOI POY KATAXWRH8HKAN EINAI"<<endl; while(!ifile.eof()) ifile.read((char *) &Erg2, sizeof(erg2)); if(!ifile.eof()) //diabasma ews to telos toy arxeioy Erg2.printData(); //ektyposh dedomenwn arxeioy //telos while ifile.close(); //kleisimo stream anagnoshs //telos ths main 36