Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- #include<math.h>
- using namespace std;
- //te iubeeeesc!
- //< 3 < 3 < 3 iubire si tie bebelus!
- class Punct {
- int x = 0;
- int y = 0;
- int z = 0;
- public:
- Punct(int x, int y) {
- this->x = x;
- this->y = y;
- }
- Punct(int x, int y, int z) {
- this->x = x;
- this->y = y;
- this->z = z;
- }
- int getx() {
- return this->x;
- }
- int gety() {
- return this->y;
- }
- int getz() {
- return this->z;
- }
- void setx(int x) {
- this->x = x;
- }
- void sety(int y) {
- this->x = x;
- }
- void setz(int z) {
- this->z = z;
- }
- };
- class FiguraGeometricaAbstracta {
- protected:
- string tipFigura = "";
- bool este2D;
- int numarColturi = 0;
- Punct* vectorColturi[5];
- virtual float arie() = 0;
- virtual float perimetru() = 0;
- public:
- FiguraGeometricaAbstracta(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi) {
- this->tipFigura = tipFigura;
- this->este2D = este2D;
- this->numarColturi = numarColturi;
- for (int i = 0; i < numarColturi; i++)
- this->vectorColturi[i] = &vectorColturi[i];
- }
- void AdaugaColt(Punct &punct)
- {
- vectorColturi[numarColturi] = &punct;
- numarColturi++;
- }
- void getTip() {
- cout << "Figura " << this->tipFigura;
- if (this->este2D) {
- cout << "este 2D";
- }
- else {
- cout << "este 3D";
- }
- }
- ~FiguraGeometricaAbstracta() {
- cout << "apel destructor";
- }
- FiguraGeometricaAbstracta(FiguraGeometricaAbstracta& figura) {
- this->tipFigura = figura.tipFigura;
- this->este2D=figura.este2D;
- this->numarColturi = figura.numarColturi;
- for (int i = 0; i < numarColturi; i++)
- this->vectorColturi[i] = figura.vectorColturi[i];
- }
- FiguraGeometricaAbstracta &operator=(FiguraGeometricaAbstracta &figura)
- {
- if (this == &figura)
- return *this;
- this->tipFigura = figura.tipFigura;
- this->este2D = figura.este2D;
- this->numarColturi = figura.numarColturi;
- for (int i = 0; i < numarColturi; i++) {
- this->vectorColturi[i] = figura.vectorColturi[i];
- }
- return *this;
- }
- void getColturi() {
- if (este2D)
- for (int i = 0; i < numarColturi; i++)
- cout << "(" << (*vectorColturi[i]).getx() << "," << (*vectorColturi[i]).gety() << "); " << endl;
- else
- for (int i = 0; i < numarColturi; i++)
- cout << "(" << (*vectorColturi[i]).getx() << "," << (*vectorColturi[i]).gety() << "," << (*vectorColturi[i]).getz() << "); " << endl;
- }
- };
- class Triunghi : public FiguraGeometricaAbstracta {
- protected:
- int inaltime;
- int baza;
- public:
- Triunghi(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int inaltime, int baza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
- this->inaltime = inaltime;
- this->baza = baza;
- }
- float arie() {
- return this->baza * this->inaltime / 2;
- }
- float calculLungimeLatura(int punct1, int punct2) {
- int x1, x2, y1, y2;
- x1 = (*vectorColturi[punct1]).getx();
- x2 = (*vectorColturi[punct2]).getx();
- y1 = (*vectorColturi[punct1]).gety();
- y2 = (*vectorColturi[punct2]).gety();
- return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
- }
- float perimetru() {
- return this->calculLungimeLatura(0, 1) + this->calculLungimeLatura(1, 2) + this->calculLungimeLatura(0, 2);
- }
- float razaCercInscrisTriunghiului() {
- return 2 * this->arie() / this->perimetru;
- }
- void PrintConsola() {
- cout << this->tipFigura;
- this->getColturi();
- this->perimetru();
- this->arie();
- }
- void IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
- {
- }
- };
- class TriunghiEchilateral :public Triunghi {
- public:
- TriunghiEchilateral(string tipFigura, bool este2D, int numarColturi,
- Punct* vectorColturi, int inaltime, int baza) :Triunghi(tipFigura,
- este2D, numarColturi, vectorColturi, inaltime, baza) {
- cout << "apel constructor";
- }
- float arie() {
- return pow(this->baza, 2) * sqrt(3) / 4;
- }
- float perimetru() {
- return this->baza * 3;
- }
- float razaCerculuiCircumscris() {
- return this->arie() / sqrt(3);
- }
- };
- class Dreptunghi : public FiguraGeometricaAbstracta, public IPrintabilLaConsola {
- protected:
- int laturaMica;
- int laturaMare;
- public:
- Dreptunghi(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int laturnaMica, int laturaMare) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
- this->laturaMica = laturaMica;
- this->laturaMare = laturaMare;
- }
- float arie() {
- return this->laturaMare * this->laturaMica;
- }
- float perimetru() {
- return (this->laturaMare * 2) + (this->laturaMica * 2);
- }
- float calculDiagonala() {
- return sqrt(pow(this->laturaMare, 2) + pow(laturaMica, 2));
- }
- void PrintConsola() {
- cout << this->tipFigura;
- this->getColturi();
- this->perimetru();
- this->arie();
- }
- void IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
- {
- }
- };
- class Patrat :public Dreptunghi {
- public:
- Patrat(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi,
- int laturnaMica, int laturaMare) :Dreptunghi(tipFigura, este2D, numarColturi,
- vectorColturi, laturnaMica, laturaMare) {
- cout << "apel constructor";
- }
- float arie() {
- return pow(this->laturaMica, 2);
- }
- float perimetru() {
- return this->laturaMica * 4;
- }
- float diagonala() {
- return sqrt(2)*this->laturaMica;
- }
- void PrintConsola() {
- cout << this->tipFigura;
- this->getColturi();
- this->perimetru();
- this->arie();
- }
- bool IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
- {
- }
- };
- class Cerc : public FiguraGeometricaAbstracta {
- int raza;
- public:
- Cerc(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int raza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
- this->raza = raza;
- }
- float arie() {
- return this->raza * 3.14 * 2;
- }
- float perimetru() {
- return this->raza * 2 * 3.14; //lungimea cercului
- }
- int diametru() {
- return this->raza * 2;
- }
- };
- class Cub : public FiguraGeometricaAbstracta {
- int vectorLatura[2];
- public:
- Cub(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int* vectorLatura) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
- this->vectorLatura[0] = vectorLatura[0];
- this->vectorLatura[1] = vectorLatura[1];
- }
- float calculLungimeLatura() {
- int x1, x2, y1, y2;
- x1 = (*vectorColturi[vectorLatura[0]]).getx();
- x2 = (*vectorColturi[vectorLatura[1]]).getx();
- y1 = (*vectorColturi[vectorLatura[0]]).gety();
- y2 = (*vectorColturi[vectorLatura[1]]).gety();
- return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
- }
- float arie() {
- return pow(this->calculLungimeLatura(), 2) * 6;
- }
- float perimetru() {
- return this->calculLungimeLatura() * 12;
- }
- float volum() {
- return pow(this->calculLungimeLatura(), 3);
- }
- };
- class Sfera : public FiguraGeometricaAbstracta {
- int raza;
- Sfera(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int raza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
- this->raza = raza;
- }
- float arie() {
- return pow(raza, 2) * 4 * 3.14;
- }
- float perimetru() {
- return this->raza * 2 * 3.14; //lungimea unui cerc cu raza sferei
- }
- float volum() {
- return pow(raza, 3) * 4 * 3.14 / 3;
- }
- };
- class IPrintabilLaConsola {
- virtual void printConsola() = 0;
- virtual bool intersectieSpatiu2D() = 0;
- };
- int main() {
- Punct p1(2, 3);
- Punct p2(4, 5);
- Punct p3(1, 0);
- Punct* colturiDate[4];
- //cerinte
- //vector dinamic de figuri geometrice
- FiguraGeometricaAbstracta** vectorFiguriGeometrice;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement