ΑΣΚΗΣΗ 1: ΣΥΝΑΡΤΗΣΕΙΣ Ι Άσκηση 1. Να γραφτεί ένα πρόγραμμα στο οποίο να δηλώνεται και να ορίζεται μία συνάρτηση perimetros() με τιμή επιστροφής float, η οποία θα παίρνει δύο παραμέτρους mhkos και platos τύπου float και θα υπολογίζει την περίμετρο ενός παραλληλογράμμου από την σχέση: Περίμετρος = (2 * mhkos + 2 * platos). Άσκηση 2. Να φτιάξετε ένα πρόγραμμα που με την χρήση της συνάρτησης conv_money() να μετατρέπει τα Ευρώ ( ) που εισάγει ο χρήστης σε Δολάρια ($). Λάβετε υπόψη ότι η σημερινή ισοτιμία είναι 1,24. Άσκηση 2.1. Να μετατρέψετε το πρόγραμμα της άσκησης 2 έτσι ώστε να δέχεται και την ισοτιμία από τον χρήστη. Άσκηση 2.2. Να μετατρέψετε το πρόγραμμα της άσκησης 2 έτσι ώστε να τυπώνει τα μηνύματα εισόδου και εξόδου με την χρήση συναρτήσεων χωρίς επιστροφή τιμής. Άσκηση 1 #include<iostream.h> float perimetros(float l, float w); void main() float Length, Width, Result ; cout<<"dwse nou to mhkos: "; cin>>length; cout<<"dwse nou to platos: "; cin>>width; Result=perimetros(Length,Width); cout<<"======================="<<endl; cout<<"apotelesmata"<<endl; cout<<"to Mhkos einai: "<<Length<<" Metra"<<endl; cout<<"to Platos einai: "<<Width<<" Metra"<<endl; cout<<"h Perimetros einai: "<<Result<<" Metra"<<endl; cout<<endl; float perimetros(float _l, float _w) return (_l * 2 + _w * 2); Άσκηση 2 #include<iostream.h> float convert_euro_to_dollar(float Euro); void main() float a,b; cout<<"give me your Euro: "; cin>>a; b=convert_euro_to_dollar(a); cout<<"your Dollar is: "<<b<<endl; float convert_euro_to_dollar(float Euro) float Dollar; Dollar=Euro*1.24; return Dollar; 1
Άσκηση 2.1 #include<iostream.h> float convert_euro_to_dollar(float,float); void main() float a,b,c; cout<<"give me your Euro: "; cin>>a; cout<<"give me the Rate Today: "; cin>>b; c=convert_euro_to_dollar(a,b); cout<<"your Dollar is: "<<c<<endl; float convert_euro_to_dollar(float Euro, float Rate) float Dollar; Dollar=Euro*Rate; return Dollar; Άσκηση 2.2 #include<iostream.h> float convert_euro_to_dollar(float); void givemeeuro(); void apotelesma(float); void main() float a,b; givemeeuro(); cin>>a; b=convert_euro_to_dollar(a); apotelesma(b); cout<<endl; float convert_euro_to_dollar(float Euro) float Dollar; Dollar=Euro*1.24; return Dollar; void givemeeuro() cout<<"dose to poso se Euro: "; void apotelesma(float x) cout<<"\ntha pareis: "<<x<<" Dolaria."<<endl; 2
ΑΣΚΗΣΗ 2: ΣΥΝΑΡΤΗΣΕΙΣ ΙI Άσκηση 1. Να φτιάξετε ένα πρόγραμμα που να προσομοιάζει τον υπολογιστή τσέπης. Οι πράξεις που θα κάνει θα είναι : Πρόσθεση, Αφαίρεση, Πολλαπλασιασμός, Διαίρεση, Υπόλοιπο διαίρεσης ακεραίων, Ύψωση ενός ακεραίου σε μία δύναμη. Οι πράξεις θα γίνονται από συναρτήσεις που θα φτιάξετε. Ο χρήστης θα εισάγει δύο ακεραίους και κατόπιν μέσω ενός menu επιλογών θα καλείται να επιλέξει μία από τις παραπάνω πράξεις αλλά και την «Έξοδο». Για την επιλογή Ύψωση ενός ακεραίου σε μία δύναμη θα φτιάξετε συνάρτηση με επανάληψη. Για το menu μπορείτε να χρησιμοποιήσετε δομή επιλογής switch. Αν ο χρήστης επιλέξει λάθος επιλογή το πρόγραμμα θα ξεκινά από την αρχή. Άσκηση 2. Να φτιάξετε ένα πρόγραμμα το οποίο θα βρίσκει την σχέση μεταξύ 2 ακέραιων αριθμών. Θα χρησιμοποιεί 2 συναρτήσεις (void), όπου η πρώτη συνάρτηση θα ελέγχει εάν ο δεύτερος είναι πολλαπλάσιος του πρώτου και η δεύτερη συνάρτηση ποιος από τους δύο είναι μεγαλύτερος (ή ίσοι). Το πρόγραμμα θα ζητά από τον χρήστη να εισάγει τους δύο αριθμούς και οι δύο συναρτήσεις θα εκτυπώνουν τα αποτελέσματα στην οθόνη. Άσκηση 1 float add(float, float); float sub(float, float); float mul(float, float); float div(float, float); int mod(int, int); int pow(int, int); void main() float numberone, numbertwo; int oprtr; cout << "Enter first number: "; cin >> numberone; cout << "Enter second number: "; cin >> numbertwo; do cout << "Enter an operator (1(+), 2(-), 3(*), 4(/), 5(%), 6(^), 7(out)): "; cin >> oprtr; switch(oprtr) case 1: cout << "Result: " << add(numberone, numbertwo); break; case 2: cout << "Result: " << sub(numberone, numbertwo); break; case 3: 3
while(oprtr>7); cout<<endl; cout << "Result: " << mul(numberone, numbertwo); break; case 4: cout << "Result: " << div(numberone, numbertwo); break; case 5: cout << "Result: " << mod(numberone, numbertwo); break; case 6: cout << "Result: " << pow(numberone, numbertwo); break; case 7: cout << "Bye Bye!!!"<<endl; break; default: cout << "Error: operator not valid.\n"; float add(float _numberone, float _numbertwo) return _numberone + _numbertwo; float sub(float _numberone, float _numbertwo) return _numberone - _numbertwo; float mul(float _numberone, float _numbertwo) return _numberone * _numbertwo; float div(float _numberone, float _numbertwo) if(_numbertwo!= 0) return _numberone / _numbertwo; cout << "Error: division by zero.\n"; return 0; int pow(int _numberone, int _numbertwo) int p=1; for(int i=1; i<=_numbertwo; i++) p=p*_numberone; return p; int mod(int _numberone, int _numbertwo) return _numberone % _numbertwo; Άσκηση 2 void multiple(int,int); void relation(int,int); int main() int numberone, numbertwo; 4
cout << "Enter two integers: "; cin >> numberone >> numbertwo; multiple(numberone, numbertwo); relation(numberone, numbertwo); cout << endl; return 0; void multiple( int _numberone, int _numbertwo ) if ( _numbertwo % _numberone == 0) cout << "The "<<_numbertwo << " is a multiple of " << _numberone << "\n\n"; else cout <<"The " <<_numbertwo << " is not a multiple of " << _numberone << "\n\n"; void relation(int _numberone, int _numbertwo) if (_numberone > _numbertwo) cout<<"the "<<_numberone <<" is Biggest"<<endl; else if (_numberone < _numbertwo) cout<<"the "<<_numbertwo <<" is Biggest"<<endl; else cout<<_numberone <<" and "<<_numbertwo <<" are equal"<< endl; 5
ΑΣΚΗΣΗ 3: ΚΛΑΣΕΙΣ ΑΝΤΙΚΕΙΜΕΝΑ Ι ΔΗΛΩΣΗ ΜΙΑΣ ΑΠΛΗΣ ΚΛΑΣΗΣ (ορισμός μεθόδων έξω από την κλάση) Άσκηση (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(); ΧΡΗΣΗ CONSTRUCTOR ΧΩΡΙΣ ΟΡΙΣΜΑ ΚΑΙ DESTRUCTOR Άσκηση (Β) Να φτιαχτεί ένα πρόγραμμα αναλήψεων και καταθέσεων σε έναν τραπεζικό λογαριασμό. Η κλάση θα είναι ο λογαριασμός (logariasmos). Η μεταβλητή μέλος θα είναι το υπόλοιπο (ypoloipo). Η ανάληψη και η κατάθεση θα είναι οι μέθοδοι οι οποίες θα έχουν ως όρισμα το ποσό (ανάληψης ή κατάθεσης). Θα υπάρχει constructor χωρίς όρισμα, που θα αρχικοποιεί το δεδομένο ypoloipo στην τιμή 0 και ένας destructor. Η μέθοδος ανάληψη θα ελέγχει αν το υπόλοιπο είναι μεγαλύτερο ή ίσο του ζητούμενου ποσού και κατόπιν θα αφαιρεί το ζητούμενο ποσό από τον λογαριασμό. Εάν το ποσό είναι μεγαλύτερο του υπολοίπου θα εμφανίζεται μήνυμα λάθους (π.χ. Λάθος!! Το ζητούμενο ποσό είναι μεγαλύτερο του υπολοίπου). Η μέθοδος κατάθεση θα προσθέτει (χωρίς έλεγχο) το ποσό που κατατίθεται στο υπόλοιπο του λογαριασμού. 6
Θα υπάρχει επιπροσθέτως μία συνάρτηση επιστροφής του υπολοίπου του κάθε αντικειμένου. Θα δημιουργήσετε μέσα στην main() ένα αντικείμενο 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 ; //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) ΑΣΚΗΣΗ 4: ΚΛΑΣΕΙΣ ΑΝΤΙΚΕΙΜΕΝΑ II Να φτιαχτεί ένα πρόγραμμα που θα υπολογίζει το εμβαδόν παραλληλογράμμου (κλάση), αλλά και του τριγώνου (κλάση). Θα χρησιμοποιήσετε 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; ; int main () Parallhlogramo ParA (3,4); 8
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; Trigono() vash = 5; ypsos = 3; Trigono(int v,int y) 9
; 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) ΑΣΚΗΣΗ 5: Χειρισμός κλάσης κατασκευή αντικειμένων Να συνταχθεί ο κώδικας στο οποίο θα ορίζεται μια κλάση Employee (υπάλληλος) με τα εξής στοιχεία: main() dataentry() salarycalc() Δεδομένα μέλη: Κωδικός, Όνομα Επώνυμο, Ώρες εργασίας, Ωρομίσθιο, Ημερομίσθιο. Μέθοδοι: Constructors με υπερφόρτωση. (Το ωρομίσθιο θα χρησιμοποιηθεί σαν δεδομένο αρχικοποίησης στον constructor χωρίς όρισμα, με τιμή 8 ). Μέθοδος για την εισαγωγή των δεδομένων (εκτός του ημερομισθίου) των εργαζομένων από τον χρήστη (θα καλείται η μέθοδος υπολογισμού του ημερομισθίου), Μέθοδος για τον υπολογισμό του ημερομισθίου (μπορεί να δηλωθεί και private), Μέθοδος για την εμφάνιση των δεδομένων συνολικά στην οθόνη και Μέθοδοι για την επιστροφή δεδομένων μελών ξεχωριστά (π.χ. επιστροφή του ημερομισθίου, του τηλεφώνου του Α.Φ.Μ. κλπ). Στο κυρίως πρόγραμμα (main) θα κατασκευαστούν 5 αντικείμενα (εργαζόμενοι) με ή χωρίς αρχική τιμή (ωρομίσθιο), τα οποία θα καλούν τις μεθόδους για την συμπλήρωση και την εμφάνιση των στοιχείων ή άλλων μεμονωμένων πληροφοριών. 11
Κώδικας (A) 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() 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; 12
Άσκηση (A) ΑΣΚΗΣΗ 6: ΠΙΝΑΚΕΣ Να γραφτεί ένα πρόγραμμα που θα διαβάζει είκοσι ακέραιους από το πληκτρολόγιο και εμφανίζει το πλήθος των άρτιων και το πλήθος των περιττών. (χρησιμοποιήστε το αναγνωριστικό #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 */ for(i=1;i<=10;i++) if(array[i]>=5) b++; 13
// 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; 14
Άσκηση (A) ΑΣΚΗΣΗ 7: ΠΙΝΑΚΕΣ - ΚΛΑΣΕΙΣ - ANTIKEIMENA Να γραφτεί ένα πρόγραμμα, όπου να ορίζεται μία κλάση με το όνομα 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() int i; float min; min=vathmos[0]; 15
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 Άσκηση (Β) Να γραφτεί ο κώδικας της κλάσης Ergazomenos, με δεδομένα: τον αριθμό μητρώου, το όνομα και το μισθό και μεθόδους: κατασκευαστή χωρίς όρισμα, μέθοδο εισαγωγής τιμών στα δεδομένα από τον χρήστη, μέθοδο εκτύπωσης των στοιχείων και μέθοδο επιστροφής του μισθού. Το πρόγραμμα [main()], θα έχει ως έξοδο ένα μενού επιλογών το οποίο θα εκτυπώνει στον χρήστη: 1. τα στοιχεία όλων των εργαζομένων, 2. τα στοιχεία ενός εργαζόμενου και 3. το Μ.Ο. των μισθών των εργαζομένων. Στο τέλος το πρόγραμμα θα ρωτά τον χρήστη αν θα επαναλάβει την παραπάνω διαδικασία ή όχι. #define Plh8os 5 //anagnoristiko class Ergazomenos //dhmioyrgia klashs private: int armhtrwou; char onoma[20]; double misthos; //methgodos gia thn eisagogh stoixeion void readinfo() cout << "Dose A.M.: "; cin >> armhtrwou; 16
cout << "Dose Onoma: "; cin >> onoma; cout << "Dose Mistho: "; cin >> misthos; //methgodos gia thn ektyposh stoixeion void printinfo() cout << "A.M.: "<< armhtrwou << endl; cout << "Onoma: "<< onoma << endl; cout << "Misthos: "<< misthos << endl; //methodos gia thn epistrofh toy mis8ou double getsalary() return misthos; ; //telos klashs void main() //dhmioyrgia pinaka 5 antikeimenon erg Ergazomenos erg[plh8os]; int i, displaychoice, ergcoice, Continue; /* vroxos gia thn eisagogh stoixeion me klhsh ths methodou readdata apo to kathe antikeimeno erg */ cout <<"Dose stoixeia "<< Plh8os <<" Ergazomenwn: "<<endl; for (i = 0; i < Plh8os; i++) cout << endl << "Ergazomenos " << i+1 << ":" <<endl; erg[i].readinfo(); cout<<endl; do cout<<"ti 8eleis typwseis? "<<endl; cout<<"1.olous tous ergaz., 2.Ena ergazomeno, 3.M.O. mis8wn: "; cin>>displaychoice; if(displaychoice == 1) for (i = 0; i < Plh8os; i++) cout << i+1 << "Ergazomenos "<<endl; erg[i].printinfo(); cout<<endl; else if(displaychoice == 2) cout<<"dialexe ergazomeno (1-5): "; cin>>ergcoice; if(ergcoice == 1) erg[ergcoice - 1].printInfo(); else if (ergcoice == 2) erg[ergcoice - 1].printInfo(); else if (ergcoice == 3) erg[ergcoice - 1].printInfo(); else if (ergcoice == 4) 17
erg[ergcoice - 1].printInfo(); else if (ergcoice == 5) erg[ergcoice - 1].printInfo(); else cout<<"den dialexes"<<endl; else if(displaychoice == 3) double sum = 0; for (i = 0; i < Plh8os; i++) sum+=erg[i].getsalary(); cout<<"m.o. Misthwn: "<<sum/plh8os; cout<<endl; cout<<"gia na xanadokimaseis pata 1->NAI, 2->Oxi: "; cin>>continue; while(continue == 1); cout<<"bye Bye!!!"<<endl; cout<<endl; //telos main 18
Άσκηση (A) ΑΣΚΗΣΗ 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Να φτιάξετε ένα πρόγραμμα που να δηλώνετε μία βασική κλάση πολυγώνου και δημόσιες (public) παράγωγες κλάσεις τετραγώνου, παραλληλογράμμου και τριγώνου. Στην βασική κλάση θα είναι δηλωμένα τα δεδομένα-μέλη βάση και ύψος ως προστατευμένα (protected). Επίσης θα υπάρχει μία μέθοδος η οποία θα περνάει τις τιμές της βάσης και του ύψους. Σε κάθε παράγωγη κλάση θα υπάρχει μια μέθοδος υπολογισμού του εμβαδού του σχήματος. #base:float #height:float polygon +setvalues(float,float):void square parallelogram triangle +emvado() : float +emvado() : float +emvado() : float 1. Φτιάξτε τρία αντικείμενα για τα τρία σχήματα που θα δίνουν τα μήκη των πλευρών (Βάση, Ύψος) για να υπολογίζονται τα εμβαδά των σχημάτων χρησιμοποιώντας τις μεθόδους των παράγωγων κλάσεων με την βοήθεια των τύπων Ε ΤΕΤΡ =Ε ΠΑΡΑΛ =Β*Υ και Ε ΤΡΙΓ = Β*Υ/2. 2. Μετά δηλώστε μία ή και όλες τις παράγωγες κλάσεις ιδιωτικές (private), τι παρατηρείτε; 3. Επαναφέρατε την δήλωση των κλάσεων σε δημόσιες και δηλώστε το ένα από τα δεδομένα-μέλη ως ιδιωτικό (private), τι παρατηρείτε; Κώδικας (A) 1. class Polygono //vasikh klash protected: int bash,ypsos; void vale_times (int a, int b) bash=a; ypsos=b; 19
; class Tetragono:public Polygono //paragwgh klash int emvado() return bash*ypsos; ; class Paralhlogrammo:public Polygono //paragwgh klash int emvado() 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 20
int emvado() return bash*ypsos/2; ; 3. 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 21
!"<<endl; cout<<"! STO TETRAGONO OI PLEYRES DEN EINAI ISES ; int main () 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) ΑΣΚΗΣΗ 9 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ II Με βάση αυτά που μάθαμε στην άσκηση 8 καλείστε να φτιάξετε ένα πρόγραμμα που να ορίζεται μία βασική κλάση animal και δύο παράγωγες Dog και Cat. Στη βασική κλάση θα υπάρχουν constructor χωρίς όρισμα αλλά και ένας με ορίσματα όπου θα περνάει τιμές στα δεδομένα μέλη της βασικής κλάσης age (float), gender (bool) και weight (float). Μέσα στην βασική κλάση θα υπάρχουν επίσης και δύο μέθοδοι, μία για την εισαγωγή των στοιχείων με έλεγχο για το φύλλο με αρχική τιμή αγόρι και μία για την εκτύπωση των στοιχείων πάλι με έλεγχο του φύλλου του ζώου. Μέσα στις παράγωγες κλάσεις θα υπάρχει constructor χωρίς όρισμα αλλά και με 4 ορίσματα, τα τρία θα τα δίνει σε αυτόν της βασικής κλάσης και το ένα θα το δίνει η ίδια η παράγωγη κλάση στο δεδομένο μέλος της και θα είναι το όνομα του ζώου. Θα υπάρχουν επίσης και δύο μέθοδοι, στην μία θα δίνετε το όνομα και η άλλη θα δείχνει το όνομα του ζώου. Κατόπιν στην main() θα φτιάξετε από δύο ζώα (αντικείμενα) για το κάθε είδος (παράγωγη κλάση). Το πρώτο ζώο θα είναι χωρίς όρισμα και θα του δίνετε τιμές εσείς και στο δεύτερο θα δίνονται οι τιμές από την κατασκευή του αντικειμένου. Χρησιμοποιήστε υπερφόρτωση συναρτήσεων για να τροποποιήσετε μεθόδους της βασικής κλάσης. #age:float #gender:bool #weight:float animal +animal() +animal(float,bool,float) +giveinfo():void +showinfo():void -name:char dog +dog() +dog(float,bool,float,char) +setdogname():void +printdogname():void -name:char cat +cat() +cat(float,bool,float,char) +setcatname():void +printcatname():void 23
Κώδικας (A) #include <string.h> class animal protected: float age; bool gender; int weight; animal() animal(float i, bool ar, int wei) age = i; gender = ar; weight = wei; void giveinfo() cout<<"dwse ilikia tou Zwou: "; cin>> age; int a; cout<<"einai arseniko? gia NAI dwse 1: ";cin>> a; if (a==1) gender = true; else gender = false; cout<<"dwse Baros tou Zwou: ";cin>> weight; void showinfo() cout<<"ilikia zwou: "<<age; cout<<endl; cout<<" fylo zwou: "; if (gender == true) cout<<"arseniko"; else cout<<"thiliko"; cout<<endl; cout<<"baros zwou: "<<weight; cout<<endl; ; class dog: public animal private: char name[10]; dog() dog(float a,bool b,int c,char d[]):animal(a,b,c) strcpy(name,d); void setdogname(char aname[]) strcpy(name, aname); void printdogname() 24
cout<<"to onoma toy skyloy einai: "<<name<<endl; ; class cat: public animal private: char name[10]; cat() cat(float a,bool b,int c,char d[]):animal(a,b,c) strcpy(name, d); void setcatname(char aname[]) strcpy(name, aname); void printcatname() cout<<"to onoma ths gatas einai: "<<name<<endl; void showinfo() //overload method printcatname(); animal::showinfo(); ; void main() dog dog1; cout<<"skylos1"<<endl; dog1.giveinfo(); cout<<endl; dog1.setdogname("ermhs"); dog1.showinfo(); dog1.printdogname(); cout<<endl<<endl; dog dog2(4,false,17,"hra"); cout<<"skylos2:"<<endl; dog2. showinfo (); dog2. printdogname (); cout<<endl; cat cat1; cout<<"gata1"<<endl; cat1.giveinfo(); cat1.setcatname("ririkos"); cout<<endl; cat1.showinfo(); cat1.printcatname(); cout<<endl<<endl; cat cat2(4,false,17,"serenata"); cout<<"gata2:"<<endl; cat2.showinfo(); cat2.printcatname(); 25
ΑΣΚΗΣΗ 10 : ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ Άσκηση (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(); cout<<"\nto athroisma einai :"<<b<<endl; //ektyposh toy b //telos main Στο πιο πάνω πρόγραμμα βλέπουμε ότι χρησιμοποιούμε τελεστή ++ και στην τοπική μεταβλητή s της main() αλλά και στο δεδομένο μέλος co της κλάσης counter κάνει την δουλειά του όπως πρέπει σε αυτές. Αυξάνει δηλαδή κατά ένα δύο φορές την s μέσα στην 26
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; Άσκηση (Γ) 3. Τρέξτε το παρακάτω πρόγραμμα και εξηγήστε τι κάνει. Σημειώστε τα αποτελέσματα της εξόδου. Κάντε δικές σας αποδόσεις τιμών και αυξήσεις τιμών των αντικειμένων. class proepi private: unsigned int co; proepi() co=0; 27
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) ΑΣΚΗΣΗ 11 : ΔΕΙΚΤΕΣ Πιο κάτω βλέπετε την συνάρτηση που κάνει αλλαγή θέσης δύο τιμών τοπικών μεταβλητών χωρίς να επηρεάζονται οι αρχικές μεταβλητές. Γράψτε ολοκληρωμένο το πρόγραμμα με την εισαγωγή τιμών στις αρχικές μεταβλητές (π.χ. 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; /*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 30
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) ΑΣΚΗΣΗ 12 : ΑΡΧΕΙΑ Μετά την συγγραφή του πιο πάνω κώδικα κάνετε τα παρακάτω: 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 2.435 to arxeio einai to: askhsh12.txt 32
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 ανοίγει, σβήνονται όλα του τα περιεχόμενα και καταχωρούνται σε αυτό οι νέες τιμές. 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 33
20.036 to arxeio einai to: askhsh12.txt 34
Πρακτικό μέρος Άσκηση (A) ΑΣΚΗΣΗ 13 : ΑΡΧΕΙΑ ΚΑΙ ΚΛΑΣΕΙΣ Να κατασκευάσετε ένα πρόγραμμα που να εγγράφει και να διαβάζει δεδομένα ενός εργαζόμενου (Α.Μ., Όνομα, Επώνυμο, Μισθός) σε ένα αρχείο. Π.Χ. 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): "; 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; 35
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