// STEFANESCU ANDREEA, SERIA B, GRUPA 1067 // BILET NR. 17 - CLASA TEMPLATE MULTIME #include #include #include #include #include #define maxx 50 template class multime { public: multime operator+(multime ); // se reunesc doua multimi multime operator*(multime ); // se intersecteaza doua multimi multime operator-(multime ); // se face diferenta simetrica intre doua multimi multime operator<(multime ); // se verifica apartenenta unei multimi la cealalta multime int operator+(element); // se adauga un element la o multime int operator-(int); // se extrage un element dintr-o multime int operator*(element); //se verifica apartenenta unui element la o multime multime(int); //constructor de multime vida multime(); multime(multime &); //constructor de copiere friend ostream& operator<<(ostream&,multime &); //operatii de iesire friend istream& operator>>(istream&,multime &); //operatii de intrare void sortare(); // sorteaza crescator elementele unei multimi void afisare(); //se afiseaza continutul unei multimi ~multime(); //destructor private: element *pv; // pointer la primul element al multimii int nr_elem; // cardinalul multimii int index; }; template multime ::multime() { pv=new element[maxx]; nr_elem=maxx; index=0; } ///////////////////////////////////////////////////////////////////////// //////////////////// CONSTRUCTOR DE COPIERE ///////////////////////// ///////////////////////////////////////////////////////////////////////// template multime ::multime(multime &v) { int max,i; max=v.nr_elem; pv=new element[max]; nr_elem=max; index=v.index; for (i=0;i multime ::multime(int i) { nr_elem=i; pv=new element[nr_elem]; index=0; } ////////////////////////////////////////////////////// ////////////////// DESTRUCTOR //////////////////// template multime ::~multime() { delete[] pv; } ///////////////////////////////////////////////////////////////////// /////////// ADAUGAREA UNUI ELEMENT IN MULTIME /////////////////// ///////////////////////////////////////////////////////////////////// template int multime ::operator+(element val) { int er=0; if(index==nr_elem) { cout<<"Nu mai e loc in multime!!!"; return 0; } else for (int i=0;i int multime ::operator-(int i) { if(i<0 && i>index) return 0; else { for (int j=i;j int multime ::operator*(element val) { int er=0; for (int i=0;i multime multime ::operator<(multime v) { bool vb; bool er=true; int i=0; while (i multime multime ::operator+(multime v) { int max; bool vb; int i,j; int k; max=index+v.index; multime rez(max); for (i=0;i multime multime ::operator*(multime v) { multime rez; int i=0,k=0,l=0; bool vb=true; while (i multime multime ::operator-(multime v) { multime rez; int i=0,k=0,l=0; bool vb=true; while (i void multime ::sortare() { int i,j; element aux; for (i=0;ipv[j]) { aux=pv[i]; pv[i]=pv[j]; pv[j]=aux; } } ////////////////////////////////////////////////////////// /////// SE AFISEAZA ELEMENTELE UNEI MULTIMI ////////// ////////////////////////////////////////////////////////// template void multime ::afisare() { int i; if (index==0) cout<<"Multimea vida!!!"; else for (i=0;i ostream& operator<<(ostream& s,multime &v) { v.afisare(); return s; } ///////////////////////////////////////////////////////////////////////////// ///////////////////// SE INCARCA ELEMENTELE IN MULTIME ////////////////// ///////////////////////////////////////////////////////////////////////////// template istream& operator>>(istream &s,multime &v) { int n; element x; cout<<"Dati numarul de elemente al multimii: "; cin>>n; for(int i=0;i>x; (v+x); } return s; } ///////////////////////////////////////////////////////////////////////////////////// ///////////////// PARTICULARIZARE PENTRU O MULTIME DE PERSOANE ////////////////// ///////////////////////////////////////////////////////////////////////////////////// class persoana { int varsta; char nume[20]; float salariu; friend class multime; friend ostream &operator<<(ostream &,persoana &); //operatii de iesire friend istream &operator>>(istream &,persoana &); //operatii de intrare public: bool operator>(persoana &); bool operator==(persoana &); persoana (int v=0,float s=0,char n[20]="Anonim") { strcpy(nume,n); varsta=v; salariu=s; } }; /////////////////////////////////////////////// /// SE AFISEAZA ELEMENTELE UNEI MULTIMI /// /////////////////////////////////////////////// ostream &operator<<(ostream &k,persoana &p) { cout<<"\n"; k<>(istream &k,persoana &p) { cout<<"\n"; cout<<"Introduceti numele persoanei:"; k>>p.nume; cout<<"Introduceti varsta persoanei:"; k>>p.varsta; cout<<"Introduceti salariul persoanei:"; k>>p.salariu; cout<<"\n"; return k; } bool persoana::operator==(persoana &p) { if (strcmp(nume,p.nume)<=0) if (p.salariu==salariu) if(p.varsta==varsta) return true; return false; } bool persoana::operator>(persoana &p) { if ((varsta>=18)&&(varsta<=35)&&(p.varsta>=18)&&(p.varsta<=35)) {if (varsta>p.varsta) return true;} else {if(salariu>p.salariu) return true;} return false; } void meniu() { system("cls"); cout<<"\n BILET NR. 17 - CLASA TEMPLATE MULTIME\n"; cout<<"\n1) Testare pe multime de numere"; cout<<"\n2) Testare pe multime de persoane"; cout<<"\n3) Iesire\n"; cout<<"\nDati optiunea:"; } void submeniu1() { system("cls"); cout<<"\n TESTARE PE MULTIME DE NUMERE \n"; cout<<"\n1) Introducere elemente in cele doua multimi"; cout<<"\n2) Sortarea celor doua multimi"; cout<<"\n3) Testarea apartenentei primei multimi la cea de-a doua"; cout<<"\n4) Reuniunea celor doua multimi"; cout<<"\n5) Intersectia celor doua multimi"; cout<<"\n6) Diferenta simetrica dintre cele doua multimi"; cout<<"\n7) Adaugarea unui element in prima multime"; cout<<"\n8) Extragerea unui element din prima multime"; cout<<"\n9) Testarea apartenentei unui element la prima multime"; cout<<"\n10) Iesire\n"; cout<<"\nDati optiunea:"; } void submeniu2() { system("cls"); cout<<"\n TESTARE PE MULTIME DE PERSOANE \n"; cout<<"\n1) Introducere elemente in cele doua multimi"; cout<<"\n2) Sortarea celor doua multimi"; cout<<"\n3) Testarea apartenentei primei multimi la cea de-a doua"; cout<<"\n4) Reuniunea celor doua multimi"; cout<<"\n5) Intersectia celor doua multimi"; cout<<"\n6) Diferenta simetrica dintre cele doua multimi"; cout<<"\n7) Adaugarea unui element in prima multime"; cout<<"\n8) Extragerea unui element din prima multime"; cout<<"\n9) Testarea apartenentei unui element la prima multime"; cout<<"\n10) Iesire\n"; cout<<"\nDati optiunea:"; } void main() { multime t(20),x(20); int val; int i; int opt,opt1,opt2; multime v1(6),v2(6); persoana val1; meniu(); cin>>opt; while (opt!=3) { switch(opt) { case 1: submeniu1(); cin>>opt1; while (opt1!=10) { switch(opt1) { case 1: system("cls"); cin>>t; cout<<"Multimea este:\n"; t.afisare(); cin>>x; cout<<"Multimea este:\n"; x.afisare(); getch(); break; case 2: system("cls"); /// SE SORTEAZA ELEMENTELE MULTIMII t SI SE AFISEAZA REZULTATUL /// t.sortare(); cout<<"Multimea sortata este:\n"; t.afisare(); /// SE SORTEAZA ELEMENTELE MULTIMII x SI SE AFISEAZA REZULTATUL /// x.sortare(); cout<<"Multimea sortata este:\n"; x.afisare(); getch(); break; case 3: /// SE TESTEAZA APARTENENTA MULTIMII t LA MULTIMEA x /// (t>val; (t+val); cout<<"\nMultimea devine:\n"; t.afisare(); getch(); break; case 8: system("cls"); /// SE EXTRAGE DIN MULTIMEA t ELEMENTUL DE PE POZITIA i /// cout<<"\nDati pozitia elementului pe care doriti sa-l stergeti din prima multime:"; cin>>i; (t-i); cout<<"\nMultimea devine:\n"; t.afisare(); getch(); break; case 9: system("cls"); /// SE VERIFICA APARTENENTA ELEMENTULUI val LA MULTIMEA t /// cout<<"\nDati elementul pe care doriti sa-l cautati in multime:"; cin>>val; (t*val); cout<<"\n\n\n\n\n"; break; } system("cls"); submeniu1(); cin>>opt1; } break; case 2: submeniu2(); cin>>opt2; while (opt2!=10) { switch(opt2) { case 1: system("cls"); cin>>v1; cout<<"\n Persoanele sunt:"; v1.afisare(); cin>>v2; cout<<"\n Persoanele sunt:"; v2.afisare(); getch(); break; case 2: system("cls"); /// SE SORTEAZA ELEMENTELE MULTIMII v1 SI SE AFISEAZA REZULTATUL /// v1.sortare(); cout<<"\n\n Persoanele sortate crescator sunt"; v1.afisare(); /// SE SORTEAZA ELEMENTELE MULTIMII v2 SI SE AFISEAZA REZULTATUL /// v2.sortare(); cout<<"\n\n Persoanele sortate crescator sunt"; v2.afisare(); getch(); break; case 3: system("cls"); /// SE TESTEAZA APARTENENTA MULTIMII v1 LA MULTIMEA v2 /// (v1>val1; (v1+val1); cout<<"\nMultimea devine:\n"; v1.afisare(); getch(); break; case 8: system("cls"); /// SE EXTRAGE DIN MULTIMEA v1 ELEMENTUL DE PE POZITIA i /// cout<<"\nDati pozitia elementului pe care doriti sa-l stergeti din prima multime:"; cin>>i; (v1-i); cout<<"\nMultimea devine:\n"; v1.afisare(); getch(); break; case 9: system("cls"); /// SE VERIFICA APARTENENTA ELEMENTULUI val LA MULTIMEA v1 /// cout<<"\nDati elementul pe care doriti sa-l cautati in multime:"; cin>>val1; (v1*val1); cout<<"\n\n\n\n\n"; break; } system("cls"); submeniu2(); cin>>opt2; } break; } system("cls"); meniu(); cin>>opt; } }