Sunteți pe pagina 1din 3

Scrieti o aplicatie C++ in care definiti clasa Culoare (care contine o denumire ce poate fi doar :

rosu, orange, albastru, verde, nedefinita), cu metode uzuale si metoda afisare(). Derivati o clasa
Culoare-ext care va stoca o valoare intreaga ptr intensitate (0-255) si va contine, pe langa
metodele uzuale , metoda afisare() ptr afisarea tuturor datelor unei culori (pe linii separate), o
supraincarcare a operatorului de insertie, o supraaincarcare a operatorului +(cu metoda membra) ce
se aplica la culori de aceeasi denumire si aduna intensitatile.

In functia main:

- Introduceti 2 obiecte Culoare, unul initializat prin constructorul cu parametri ( cu valori la


alegere) iar celalalt prin constructorul fara parametri si metode accessor si apoi afisati la consola
obiectele

- Creati un tablou dinamic numit TabCulori de 4 obiecte de tip Culoare-ext

- Initializati elem tabloului cu valori la alegere (primele doua folosind contrucotrul cu parametri ,
restul folosind construcotrul fara parametri si metode accessor) astfel incat sa avem cel putin doua
culori cu aceeasi denumire dar cu intensitati diferite

- Afisati la consola (cu metoda afisare()) datele obiectelor

-Scrieti un obiect din tablou intr-un fisier cu numele citit de la tastatura folosind supraincarcarile din
clasa

- Aplicati operatorul + ptr doua culori din tablou si afisati rezultatul la consola

-Ordonati descrescator tabloul (dupa denumire-crescator, intensitate-descrescator) folosind o functie


de biblioteca si apoi afisati tabloul ordonat la consola

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

const int DIM = 20;


const char Eroare[50] = "Intensitatiile nu se pot aduna!(culori diferite)\n";
char nedefinit[10] = "nedefinit", rosu[5] = "rosu", orange[7] = "orange", albastru[9]
= "albastru", verde[6] = "verde";

class Culoare
{
protected:
char culoare[DIM];

public:
Culoare(){strcpy(culoare, nedefinit);}

Culoare(char* culoare) {strcpy(this->culoare, culoare);}

void setCul(char* Cul) { strcpy(culoare, Cul); }

char* getCul() { return culoare; }

virtual void afisare() {cout << "Culoarea este: " << culoare;}
};
class CuloareExt :public Culoare
{
int intensitate;

public:
CuloareExt() {intensitate = 0;}

CuloareExt(int intensitate, char* culoare) :intensitate{ intensitate },


Culoare(culoare){}

void setInt(int Int) { intensitate = Int; }

int getInt() { return intensitate; }

void afisare()
{
cout << "Culoarea: " << culoare;
cout << "\nIntensitatea: " << intensitate;
}

friend ostream& operator<<(ostream&, CuloareExt);

CuloareExt operator+(const CuloareExt& cl1)


{
CuloareExt cl2;
if (strcmp(culoare, cl1.culoare) == 0)
{
cl2.intensitate = cl1.intensitate + intensitate;
return cl2;
}
cout << Eroare;
return cl2;
}
};

bool sortByCuloare(CuloareExt&, CuloareExt&);


bool sortByIntensitate(CuloareExt&, CuloareExt&);

int main()
{
Culoare c1(rosu);
Culoare c2;
c2.setCul(orange);
c1.afisare();
cout << endl;

c2.afisare();
CuloareExt* TabCulori = new CuloareExt[4];
TabCulori[0] = CuloareExt(123, rosu);
TabCulori[1] = CuloareExt(234, albastru);
TabCulori[2] = CuloareExt();
TabCulori[2].setCul(verde);
TabCulori[2].setInt(111);
TabCulori[3] = CuloareExt();
TabCulori[3].setCul(verde);
TabCulori[3].setInt(11);
cout << endl;
TabCulori[0].afisare();
cout << endl;
TabCulori[1].afisare();
cout << endl;
TabCulori[2].afisare();
cout << endl;
TabCulori[3].afisare();
char numeFis[DIM];
cout << "\n\nCititi numele fisierului: ";
cin.getline(numeFis, DIM);
ofstream file(numeFis, ios::out);
file << TabCulori[3];
file.close();
CuloareExt ce1 = TabCulori[2] + TabCulori[3];
cout << "\nSuma: \n\n";
ce1.afisare();
sort(&TabCulori[0], &TabCulori[3], sortByIntensitate);
cout << "\n\nTabloul sortat: \n";
for (int i = 0; i < 4; i++)
{
cout << endl;
TabCulori[i].afisare();
}
delete[]TabCulori;
cin.ignore();
cin.get();
return 0;
}

ostream& operator<<(ostream& stream, CuloareExt cl)


{
stream << "Culoarea: " << cl.getCul();
stream << "\nIntensitatea: " << cl.getInt();
return stream;
}

bool sortByCuloare(CuloareExt& left, CuloareExt& right) {


if (strcmp(left.getCul(), right.getCul()) < 0)
return true;
return false;
}

bool sortByIntensitate(CuloareExt& left, CuloareExt& right)


{
if (left.getInt() > right.getInt())
return true;
return false;
}

S-ar putea să vă placă și