Advertisement
Five_NT

[POO] Test2_exp8

Apr 5th, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.94 KB | None | 0 0
  1. /*
  2. Creati o clasa abstracta Figura care modeleaza o figura geometrica.
  3. O figura geometrica este data printr-o secventa de 3 puncte in cazul unui triunghi, sau punct central si raza/latura in cazul cerc/patrat
  4.  
  5. * Derivati din clasa Figura, 3 tipuri de figuri geometrice:
  6.   Triunghi, Patrat si Cerc.
  7. * Creati un vector de figuri geometrice
  8. * Calculati pentru fiecare figura geometrica perimetrul si aria
  9. * Realizati o sortare a figurilor geometrice:
  10.   - crescatoare in functie de perimetru
  11.   - descrescatoare in functie de arie
  12.  
  13. Trebuie sa creati clasele Triunghi.cpp, Patrat.cpp, Cerc.cpp care sa fie derivate din clasa Figura si sa implementeze metodele.
  14. Se acorda 2 pct pentru implementarea corecta a acestei ierarhii de clase (membri in clasa si constructor/destructor).
  15.  
  16. Fisierele nu contin si include-urile necesare (acestea trebuie sa le adaugati voi).
  17. 2 pct se dau daca programul compileaza.
  18. Pentru sortarea figurilor se vor folosi functii din STL.
  19.  
  20. */
  21.  
  22. // T2_exp8.cpp : Defines the entry point for the console application.
  23. //
  24.  
  25. #include "stdafx.h"
  26. #include <iostream>
  27. #include <vector>
  28.  
  29. using namespace std;
  30.  
  31. class Figure
  32. {
  33. public:
  34.     //[3p] Perimetrul -> cate 1p implementarea din fiecare clasa
  35.     virtual double  getPerimeter() = 0;
  36.  
  37.     //[3p] Aria -> cate 1p implementarea din fiecare clasa
  38.     virtual double  getArea() = 0;
  39.  
  40.     //[3p] Numele -> cate 1p implementarea din fiecare clasa
  41.     virtual string getName() = 0;
  42. };
  43.  
  44. class Punct
  45. {
  46. private:
  47.     //[1p] Coordonatele punctului.
  48.     int X, Y;
  49.  
  50. public:
  51.     //[1p] Constructorul implicit care plaseaza punctul ÃŽn origine.
  52.     Punct() {
  53.         this->X = 0;
  54.         this->Y = 0;
  55.     }
  56.  
  57.     //[1p] Constructorul cu parametri.
  58.     Punct(int x, int y) {
  59.         this->X = x;
  60.         this->Y = y;
  61.     }
  62.  
  63.     //[1p] Resetarea coordonatelor la (0,0).
  64.     void reset() {
  65.         this->X = 0;
  66.         this->Y = 0;
  67.     }
  68.  
  69.     //[1p] Returneaza coordonata X a punctului.
  70.     int getX() {
  71.         return this->X;
  72.     }
  73.  
  74.     //[1p] Returneaza coordonata Y a punctului.
  75.     int getY() {
  76.         return this->Y;
  77.     }
  78.  
  79.     //[1p] Seteaza coordonata X a punctului.
  80.     void setX(int x) {
  81.         this->X = x;
  82.     }
  83.  
  84.     //[1p] Seteaza coordonata Y a punctului.
  85.     void setY(int y) {
  86.         this->Y = y;
  87.     }
  88. };
  89.  
  90. class Cerc : public Figure
  91. {
  92. private :
  93.     Punct P;
  94.     int raza;
  95. public:
  96.     Cerc(Punct* PP, int raza) {
  97.         this->P.setX(PP->getX());
  98.         this->P.setY(PP->getY());
  99.     }
  100.  
  101.     double getPerimeter() {
  102.         return 2 * 3.14 * this->raza;
  103.     }
  104.  
  105.     double getArea() {
  106.         return 3.14 * (this->raza * this->raza);
  107.     }
  108. };
  109.  
  110. class Patrat : public Figure
  111. {
  112. private:
  113.     Punct P;
  114.     int latura;
  115. public:
  116.     Patrat(Punct* PP, int* lat) {
  117.         this->P.setX(PP->getX());
  118.         this->P.setY(PP->getY());
  119.     }
  120.  
  121.     double getPerimeter() {
  122.         return latura * 4;
  123.     }
  124.  
  125.     double  getArea() {
  126.         return (latura*latura) / 2;
  127.     }
  128. };
  129.  
  130. class Triunghi : public Figure
  131. {
  132.  
  133.     Punct A, B, C;
  134.  
  135. public:
  136.     Triunghi(Punct* PA, Punct* PB, Punct* PC) {
  137.         this->A.setX( PA->getX() );
  138.         this->A.setY( PA->getY() );
  139.  
  140.         this->B.setX( PB->getX() );
  141.         this->B.setY( PB->getY() );
  142.  
  143.         this->C.setX( PC->getX() );
  144.         this->C.setY( PC->getY() );
  145.     }
  146.  
  147.     double  getPerimeter() {
  148.         double lat[3];
  149.         lat[0] = sqrt((this->B.getX() - this->A.getX()) * (this->B.getX() - this->A.getX()) + (this->B.getY() - this->A.getY()) * (this->B.getY() - this->A.getY()));
  150.         lat[1] = sqrt((this->C.getX() - this->B.getX()) * (this->C.getX() - this->B.getX()) + (this->C.getY() - this->B.getY()) * (this->C.getY() - this->B.getY()));
  151.         lat[2] = sqrt((this->A.getX() - this->C.getX()) * (this->A.getX() - this->C.getX()) + (this->A.getY() - this->C.getY()) * (this->A.getY() - this->C.getY()));
  152.        
  153.         return (lat[0] + lat[1] + lat[2]);
  154.     }
  155.  
  156.     double  getArea() {
  157.         double lat[3];
  158.         lat[0] = sqrt((this->B.getX() - this->A.getX()) * (this->B.getX() - this->A.getX()) + (this->B.getY() - this->A.getY()) * (this->B.getY() - this->A.getY()));
  159.         lat[1] = sqrt((this->C.getX() - this->B.getX()) * (this->C.getX() - this->B.getX()) + (this->C.getY() - this->B.getY()) * (this->C.getY() - this->B.getY()));
  160.         lat[2] = sqrt((this->A.getX() - this->C.getX()) * (this->A.getX() - this->C.getX()) + (this->A.getY() - this->C.getY()) * (this->A.getY() - this->C.getY()));
  161.  
  162.         double p = getPerimeter() / 3;
  163.         return sqrt( p * (p - lat[0]) * (p - lat[1]) * (p - lat[2]) );
  164.     }
  165. };
  166.  
  167. void main()
  168. {
  169.     Punct **points = (Punct**)malloc(4 * sizeof(Punct*));
  170.     Figure **figs = (Figure**)malloc(5 * sizeof(Figure*));
  171.     int puncte[4][2] = { { 10,2 },{ 12,0 },{ 14,13 },{ 6,13 } };
  172.     int i;
  173.  
  174.     for (i = 0; i<4; i++)
  175.         points[i] = new Punct(puncte[i][0], puncte[i][1]);
  176.  
  177.     figs[0] = (Figure*)new Cerc(points[0], 5);
  178.     figs[1] = (Figure*)new Patrat(points[2], 4);
  179.     figs[2] = (Figure*)new Patrat(points[3], 5);
  180.     figs[3] = (Figure*)new Triunghi(points[0], points[1], points[3]);
  181.  
  182.  
  183.     // Cream un vector de figuri geometrice
  184.  
  185.     vector <Figure*> vfig;
  186.     for (i = 0; i<4; i++)
  187.         vfig.push_back(figs[i]);
  188.  
  189.     //[3p] Sortam vectorul crescator in functie de perimetru
  190.  
  191.     //[3p] Sortam vectorul descrescator in functie de arie
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement