1) Sa se realizeze un program care realizeaza formatari utilizând indicatorii de formatare (rezolvare...)
2) Sa se realizeze un program care realizeaza formatari utilizând manipulatorii de formatare (rezolvare...)
3) Sa se realizeze un program care prin intermediul unui constructor populeaza datele într-o agenda de telefon iar prin supraîncarcarea operatorului << face ieşirea datelor pe ecran (rezolvare...)
4) Sa se realizeze un program care prin intermediul unui constructor populeaza datele într-o agenda de telefon iar prin supraîncarcarea operatorului << face ieşirea datelor pe ecran, astfel încât sa lucram cu date protejate (rezolvare...)
5) Sa se refaca exemplul anterior astfel încât datele sa nu mai fie introduse prin
intermediul unui constructor, ci printr-o functie care supraîncarca operatorul >> (rezolvare...)
6) Sa se descrie un tip abstract de date pentru memorarea unui numar complex si principalele operatii cu aceste numere prin supraincarcari de operatori (rezolvare...)
7) Sa se realizeze o aplicatie pentru lucrul cu numere rationale (numim numar rational orice numar ce poate fi scris sub forma de fractie). Se vor folosi operatori supraîncarcati (rezolvare...)
C++: Operatii de intrare / iesire - aplicatii rezolvate
Rezolvari
#include <iostream> #include <fstream> #include <math.h> #include<conio.h> using namespace std; void main() { int n=123; //1. se afiseaza 00123 cout.width(5); cout.setf(ios::right,ios::adjustfield); cout.fill('0'); cout<<n; cout<<"\nActionati pentru a continua.\n"; getch(); //2. se afiseaza +1230 cout.width(5); cout.fill('0'); cout.setf(ios::left,ios::adjustfield); cout.setf(ios::showpos); cout<<n; cout<<"\nActionati pentru a continua.\n"; getch(); //3. se afiseaza +0123 (semnul plus ramane activat) cout.width(5); cout.fill('0'); cout.setf(ios::internal,ios::adjustfield); cout<<n; cout<<"\nActionati pentru a continua.\n"; getch(); //4. afiseaza valoarea in hexazecimal a numarului n cout.setf(ios::hex,ios::basefield); //oct ptr. afisare in octal cout<<n; cout<<"\nActionati pentru a continua.\n"; getch(); double d=123.456; //5. se afiseaza in forma stiintifica numarul d cout.unsetf(ios::showpos); //dezactivam optiunea de afisare cu + cout.setf(ios::scientific,ios::floatfield); cout<<d; cout<<"\nActionati pentru a continua.\n"; getch(); //6. se afiseaza cu o precizie de 2 cifre cout.setf(ios::fixed,ios::floatfield); cout.precision(2); cout<<d; cout<<"\nActionati pentru a continua.\n"; getch(); int g; cin >>g; }
#include<iostream> #include<conio.h> #include<iomanip> using namespace std; void main() { int n=123; //1. afiseaza 00123 cout<<setw(5)<<setiosflags(ios::right)<<setfill('0')<<n; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); //2. se afiseaza +1230 cout<<setw(5)<<setiosflags(ios::left)<<setfill('0')<< setiosflags(ios::showpos)<<n; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); //3. se afiseaza +0123 (semnul plus ramane activat) cout<<setw(5)<<setiosflags(ios::internal)<<setfill('0')<<n; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); //4. se afiseaza numarul in hexazecimal cout<<hex<<n; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); double d=123.456; //5. se afiseaza in forma stiintifica cout<<resetiosflags(ios::fixed)<< setiosflags(ios::scientific)<<d; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); //6. se afiseaza cu o precizie de 2 cifre cout<<setprecision(2)<<d; cout<<"\nActionati o tasta pentru a continua.\n"; getch(); int g; cin >>g; }
#include <iostream> #include<string.h> #include<conio.h> using namespace std; class agendatelefon { public: char nume[20]; int codzona; int prefix; unsigned long int numar; agendatelefon(char *n,int a,int p,unsigned long int nr) { strcpy(nume,n); codzona=a; prefix=p; numar=nr; } }; //Afiseaza numele si numarul de telefon ostream &operator<<(ostream &stream, agendatelefon a) { stream<<a.nume; stream<<"("<<a.codzona<<")"; stream<<a.prefix<<"-"<<a.numar<<"\n"; return stream; } void main() { agendatelefon a("Ioan",40,269,244573); agendatelefon b("Elena",40,264,789045); cout<<a<<b; getch(); int g; cin >>g; }
#include <iostream> #include<string.h> #include<conio.h> using namespace std; class agendatelefon { char nume[20]; int codzona; int prefix; unsigned long int numar; public: agendatelefon(char *n,int a,int p,unsigned long int nr) { strcpy(nume,n); codzona=a; prefix=p; numar=nr; } //Afiseaza numele si numarul de telefon friend ostream &operator<<(ostream &stream, agendatelefon a) { stream<<a.nume; stream<<"("<<a.codzona<<")"; stream<<a.prefix<<"-"<<a.numar<<"\n"; return stream; } }; void main() { agendatelefon a("Ioan",40,269,244573); agendatelefon b("Elena",40,264,789045); cout<<a<<b; getch(); int g; cin >>g; }
#include<iostream> #include<string.h> #include<conio.h> using namespace std; class agendatelefon { char nume[20]; int codzona; int prefix; unsigned long int numar; public: agendatelefon() { } //Afiseaza numele si numarul de telefon friend ostream &operator<<(ostream &stream, agendatelefon a); //Introduce numele si numarul de telefon friend istream &operator>>(istream &stream, agendatelefon &a); }; //Afiseaza numele si numarul de telefon ostream &operator<<(ostream &stream, agendatelefon a) { stream<<strupr(a.nume)<<'\t'; stream<<"("<<a.codzona<<")"; stream<<a.prefix<<"-"<<a.numar<<"\n"; return stream; } //Introduce numele si numarul de telefon istream &operator>>(istream &stream, agendatelefon &a) { cout<<"Introduceti nume: "; stream>>a.nume; cout<<"Introduceti codzona: "; stream>>a.codzona; cout<<"Introduceti prefix: "; stream>>a.prefix; cout<<"Introduceti numar: "; stream>>a.numar; cout<<"\n"; return stream; } void main() { agendatelefon a; cin>>a; cout<<a; getch(); int g; cin >>g; }
#include <iostream> #include<string.h> #include<conio.h> #include<math.h> #include<iomanip> /*biblioteca folosita pentru manipulatorii cu parametru, in cazul acestei aplicatii: functia setprecision*/ using namespace std; class complex { float a,b; //in 'a' memoram partea reala, in 'b' memoram partea imaginara public: complex(float=0,float=0); //constructor de initializare cu parametri float& retre(); //returneaza partea reala float& retim(); //returneaza partea imaginara complex operator+(complex&); //adunarea a doua numere complexe complex operator-(); //negativul (opusul) unui numar complex complex operator-(complex&); /*diferenta intre doua numere complexe*/ complex operator~(); //conjugatul unui numar complex complex operator*(complex&); //produsul a doua numere complexe double operator!(); //modulul unui numar complex complex operator *(float); //multiplicarea unui nr. complex cu un scalar friend complex operator*(float,complex&); /*operatia inversa celei anterioare, adica, scalar inmultit cu nr. complex*/ friend istream& operator>>(istream&,complex&); /*supraircarea operatorului de extragere din flux ptr. citirea unui nr. complex*/ friend ostream& operator<<(ostream&,complex); /*supraincarcarea operatorului de insertie in flux ptr. afisarea unui nr. complex*/ }; inline complex::complex(float x,float y) { a=x; b=y; } inline float& complex::retre() { return a; } inline float& complex::retim() { return b; } complex complex::operator+(complex& z) { complex r; r.a=a+z.a; r.b=b+z.b; return r; } complex complex::operator-() { complex r; r.a=-a; r.b=-b; return r; } complex complex::operator-(complex& z) { return (*this)+(-z); /*relatie intre obiectul curent si cel transmis ca parametru, operatorii din relatie fiind cei supraincarcati prin functiile anterioare*/ } complex complex::operator~() { complex r; r.a=a; r.b=-b; return r; } complex complex::operator*(complex& z) { complex r; r.a=a*z.a-b*z.b; r.b=a*z.b+b*z.a; return r; } double complex::operator!() { return sqrt(pow(a,2)+pow(b,2)); } complex complex::operator*(float x) { complex r; r.a=x*a; r.b=x*b; return r; } complex operator*(float x, complex& z) { return z*x; //operator supraincarcat anterior } istream& operator>>(istream& c, complex& z) { cout<<"\tdati partea reala: "; c>>z.a; cout<<"\tdati partea imaginara: "; c>>z.b; return c; } ostream& operator<<(ostream& c, complex z) { c<<"nr. complex este: "<<setprecision(2)<<z.a; /*se vor afisa 2 zecimale dupa virgula, doar acolo unde e cazul*/ cout.setf(ios::showpos); c<<' '<<z.b<<"*i"<<endl; cout.unsetf(ios::showpos); return c; } void main() { complex z1,z2; /*printr-o astfel de declaratie partile reale si cele imaginare sunt completate cu 0*/ cout<<"Citim z1."<<endl; cin>>z1; //apel al operatorului extragere din flux supraincarcat cout<<"Memoram date direct in z2."<<endl; z2.retre()=4; z2.retim()=-1; cout<<endl; cout<<"Nr. complex z1 - "<<z1; /*apel al functiei ce supraincarca operatorul de insertie in flux*/ cout<<"Nr. complex z2 - "<<z2; cout<<endl; cout<<"Suma z1+z2 - "<<z1+z2; /*apel al functiilor ce supraincarca operatorii: '+' si insertie in flux*/ cout<<"Produsul z1*z2 - "<<z1*z2; /*apel al functiilor ce supraincarca operatorii: '*' si insertie in flux*/ cout<<"Modulul sumei este: "<<!(z1+z2)<<endl; /*apel al functiilor ce supraincarca operatorii '+' si '!'*/ complex z3; z3=(~z1)+(2*(-z2)*(!z1)); //sunt folositi mai multi operatori supraincarcati din lista cout<<"Expresia (~z1)+(2*(-z2)*(!z1)) - "<<z3; int g; cin >>g; }
#include<iostream> #include<fstream> #include<string.h> #include<conio.h> #include<math.h> using namespace std; class rational { int a; //numaratorul fractiei int b; //numitorul fractiei int cmmdc(int,int); /*cmmdc-ul a doua nr. intregi folosit la determinarea fractiilor ireductibile*/ void ireductibil(); //determinarea unei fractii ireductibile public: rational(int=0,int=1); //constructor de initializare cu parametri impliciti int& retnumarator(); //functie ce returneaza numaratorul fractiei int& retnumitor(); //functie ce returneaza numitorul fractiei friend istream& operator>>(istream&, rational&); /*citirea unui numar rational*/ friend ostream& operator<<(ostream&, rational); /*afisarea unui numar rational*/ rational operator+(rational&); //adunarea a doua nr. rationale rational operator-(); //opusul unui numar rational rational operator-(rational&); //diferenta a doua nr. rationale rational operator*(rational&); //inmultirea a doua nr. rationale rational operator*(int); //inmultirea unui nr. complex cu un scalar friend rational operator*(int, rational&); /*inmultirea unui scalar cu un nr. complex*/ rational operator!(); //inversul unui numar rational rational operator/(rational&); //impartirea a doua nr. rationale }; /*cmmdc-ul a doua nr. intregi folosit la determinarea fractiilor ireductibile - am ales varianta iterativa*/ int rational::cmmdc(int x,int y) { x=abs(x); y=abs(y); while(x!=y) if(x>y) x-=y; //x=x-y; else y-=x; //y=y-x; return x; } /*determinarea unei fractii ireductibile*/ void rational::ireductibil() { if(a==0) b=1; else { if((abs(a)!=1)&&(abs(b)!=1)) { int d; d=cmmdc(a,b); a/=d; //a=a/d; b/=d; //b=b/d; } if(b<0) { a=-a; b=-b; } } } /*constructor de initializare cu parametri*/ inline rational::rational(int x,int y) { a=x; b=y; ireductibil(); } /*functie ce returneaza numaratorul fractiei*/ inline int& rational::retnumarator() { return a; } /*functie ce returneaza numitorul fractiei*/ inline int& rational::retnumitor() { return b; } /*supraincarcarea operatorului de extragere din flux pentru citirea unui numar rational*/ istream& operator>>(istream& in, rational& r) { cout<<"\tintroduceti numaratorul: "; in>>r.a; do{ cout<<"\tintroduceti numitorul: "; in>>r.b; }while(r.b==0); //numitorul diferit de 0 r.ireductibil(); return in; } /*supraincarcarea operatorului de insertie in flux pentru afisarea unui numar rational*/ ostream& operator<<(ostream& out, rational r) { out<<r.a<<"/"<<r.b; return out; } /*supraincarcarea operatorului '+' pentru adunarea a doua numere rationale*/ rational rational::operator+(rational& r) { rational p; p.a=a*r.b+b*r.a; p.b=b*r.b; p.ireductibil(); return p; } /*supraincarcarea operatorului '-' pentru determinarea opusului unui numar rational*/ rational rational::operator-() { rational p; p.a=-a; p.b=-b; p.ireductibil(); /*la prima vedere pare inutil aici al acestei functii, dar, am optat pentru asta mizand faptul ca nu cunoastem operatiile de populare a datelor unui numar rational, daca prin intermediul acestora s-a apelat procedura de determinare a unei fractii ireductibile*/ return p; } /*supraiuncarcarea operatorului '-' pentru diferenta a doua numare rationale*/ rational rational::operator-(rational& r) { rational p; p=(*this)+(-r); //apel al celor doua functii definite anterior p.ireductibil(); return p; } /*supraincarcarea operatorului '*' pentru inmultirea a doua numere rationale*/ rational rational::operator*(rational& r) { rational p; p.a=a*r.a; p.b=b*r.b; p.ireductibil(); return p; } /*supraincarcarea operatorului '*' pentru inmultirea unui nr. rational cu un numar intreg*/ rational rational::operator*(int x) { rational p; p.a = a*x; //sau: x*a; p.b = b*x; //sau: x*b; p.ireductibil(); return p; } /*supraincarcarea operatorului '*' pentru inmultirea unui numar intreg cu unul rational*/ rational operator*(int x, rational r) { return r*x; //apel al functiei dezvoltate anterior } /*supraincarcarea operatorului '!' pentru inversul unui numar rational*/ rational rational::operator!() { rational p; p.a=b; p.b=a; p.ireductibil(); return p; } /*supraincarcarea operatorlui '/' pentru impartirea a doua numere rationale*/ rational rational::operator/(rational& r) { rational p; p=(*this)*(!r); p.ireductibil(); return p; } void main() { rational a(4,-2); cout<<"Primul numar rational este introdus prin functia constructor."<<endl; rational b; cout<<"Introduceti date ptr al doilea nr. rational:"<<endl; cin>>b; cout<<"Primul numar rational este: "<<a<<endl; cout<<"Al doilea numar rational este: "<<b<<endl; cout<<endl<<"-----------------------------------"<<endl; cout<<"Adunarea celor doua numere este: "<<a+b<<endl; cout<<"Inmultirea celor doua numere este: "<<a*b<<endl; cout<<"Impartirea celor doua numere este: "<<a/b<<endl; int g; cin >>g; }