Sunteți pe pagina 1din 8

#include<iostream>

#include<math.h>
using namespace std;

//pt a stii cate obiecte din clasa am creat


int P_numarare = 0;

class Poligon
{
double *latura;
int nr;

protected:

Poligon()
{
nr = 0;
latura = NULL;

//cout << "Poligon()" << P_numarare << endl;


// P_numarare++;
}

public:

Poligon(const int& n)
{
if (n < 3)
throw("nr lat prea mic");

nr = n;
latura = new double[n];
if (!latura)
throw("bad memory alloc");

for (int i = 0; i < n; i++)


latura[i] = 1;

//P_numarare++;
//cout << "Poligon()" << P_numarare << endl;
}

~Poligon()
{
//cout << "~Poligon()" << P_numarare << endl;
//P_numarare--;
if (latura)
delete[] latura;
}

friend ostream& operator<<(ostream& os, const Poligon& A)


{
if (A.latura)
{
for (int i = 0; i < A.nr - 1; i++)
os << A.latura[i] << " ";
os << A.latura[A.nr - 1];
}
return os;
}

void Set_Latura(const int& lat,const double& dim) const


{
if(lat < 0 || lat >= nr)
throw("Latura inexistenta");

if(dim <= 0)
throw("Dimensiune incorecta");

latura[lat] = dim;

double Latura(int i) const


{
if (i < 0 || i >= nr)
throw("dimensiune inexistenta");
return latura[i];
}

double Perimetru() const


{
double per = 0;
for (int i = 0; i < nr; i++)
per = per + latura[i];

return per;
}

};

class Triunghi : public Poligon


{
public:
Triunghi() : Poligon(3)
{

bool eDreptunghic() const


{
double c1 = Latura(0), c2 = Latura(1), ip = Latura(2);

if (c1 > ip)


{
double aux = ip;
ip = c1;
c1 = aux;
}

if (c2 > ip)


{
double aux = ip;
ip = c2;
c2 = aux;
}

return ((c1 * c1 + c2 * c2) == ip * ip);


}

double Arie() const


{
double rezultat;
double semi_p = this->Perimetru();

rezultat = semi_p / 2.0;


for (int i = 0; i < 3; i++)
rezultat = rezultat * (semi_p - Latura(i));

rezultat = sqrt(rezultat);

return rezultat;
}
};

//implementati in clasa Poligon-> PERIMETRU,


//Triunghi -> ARIE
//2 clase derivate : PATRULATER (DIN POLIGON) : UN POLIGON CU 4 LAT din Petrulater =>
2 clase Dreptunghi si apoi
// din dreptunghi derivam Patrat : fct
//in Patrulater: e patrat? e paralelogram? (2 lat == 2 lat)?
// in Drept, ROMB, PAtrat fct Arie

//TEMA
//implementati LISTA SIMPLA cu fct de baza, adaugare, cautare, stergere
//creati 2 clase derivate: STIVA si COADA

class Patrulater : public Poligon


{
public:
Patrulater() : Poligon(4)
{

bool eParalelogram() const


{
return ( (Latura(0) == Latura(2)) && (Latura(1) == Latura(3)));
}

bool ePatrat()
{
for (int i = 0; i < 4; i++)
if (Latura(i) != Latura(0))
return false;
return true;
}
};

class Dreptunghi :public Patrulater


{
public:
Dreptunghi() : Patrulater()
{

Dreptunghi(const double& L1, const double& L2)


{
for (int i = 0; i < 4; i += 2)
{
Set_Latura(i, L1);
Set_Latura(i + 1, L2);

}
}

double Arie()
{
return Latura(0) * Latura(2);
}

};

class Patrat : public Dreptunghi


{
public:
Patrat() : Dreptunghi()
{

Patrat(const double& L1)


{
for (int i = 0; i < 4; i++)
Set_Latura(i, L1);
}

double Arie()
{
return Poligon::Latura(0) * Latura(1);
}

};

int main()
{
try
{
Poligon A(4);
Poligon B(6);

for (int i = 0; i < 4; i++)


A.Set_Latura(i, 10);

//cout << A << endl;

for (int i = 0; i < 6; i++)


B.Set_Latura(i, i + 1);

//cout << B << endl;

Triunghi C;
C.Set_Latura(0, 3);
C.Set_Latura(1, 4);
C.Set_Latura(2, 5);

cout << C << endl;

/*
if(C.eDreptunghic())
cout << "triunghiul C e dreptunghic: " << endl;
else
cout << "triunghiul C NU e dreptunghic: " << endl;
*/

cout << "----------" << endl;


cout << C.Arie();
cout << endl;

cout << "----------" << endl;

Patrulater R;

for (int i = 0; i < 4; i++)


R.Set_Latura(i,4);

if (R.ePatrat())
cout << "R e patrat: " << endl;
else
cout << "R NU e patrat: " << endl;
cout <<endl<< "*********" << endl;
if (R.eParalelogram())
cout << "R eParalelogram: " << endl;
else
cout << "R NU eParalelogram: " << endl;

cout << "----------" << endl;

Dreptunghi DR(2,4);

//cout << DR;

cout << DR.Arie();


cout << endl;

cout << "----------" << endl;

Patrat P(10);
cout << P.Arie();

catch (const char* eroare)


{
cout << "Eroare aparuta: " << eroare << endl;
}

cout << endl;


system("pause");
return 0;
}

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