Tucancitto

FIGURI GEOMETRICE

May 11th, 2021 (edited)
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <string>
  5. using namespace std;
  6.  
  7. #define PI 3.14
  8. #define sin(x) sin(x * PI / 180)
  9. #define cos(x) cos(x * PI / 180)
  10.  
  11. class Figura
  12. {
  13. protected:
  14.     string nume;
  15. public:
  16.     Figura() : nume("") {}
  17.     Figura(string nume) : nume(nume) {}
  18.  
  19.     virtual float arie() = 0;
  20.     virtual float perimetru() = 0;
  21.  
  22.     void afisare()
  23.     {
  24.         cout << "Figura : " << nume << endl;
  25.         cout << "Arie : " << arie() << endl;
  26.         cout << "Perimetru : " << perimetru() << endl << endl;
  27.     }
  28. };
  29.  
  30. class Elipsa : virtual public Figura
  31. {
  32. protected:
  33.     float raza1, raza2;
  34. public:
  35.     Elipsa() : Figura("Elipsa"), raza1(0), raza2(0) {}
  36.     Elipsa(float raza1, float raza2) : Figura("Elipsa"), raza1(raza1), raza2(raza2) {}
  37.  
  38.     virtual float arie() { return raza1 * raza2 * PI; }
  39.     virtual float perimetru() { return (raza1 + raza2) * PI; }
  40. };
  41.  
  42. class Cerc : public Elipsa
  43. {
  44. public:
  45.     Cerc() : Figura("Cerc"), Elipsa() {}
  46.     Cerc(float raza) : Figura("Cerc"), Elipsa(raza, raza) {}
  47.  
  48.     float arie() { return Elipsa::arie(); }
  49.     float perimetru() { return Elipsa::perimetru(); }
  50. };
  51.  
  52. class Poligon : virtual public Figura
  53. {
  54. protected:
  55.     vector<pair<float, float>> coordonate;
  56. public:
  57.     Poligon() : Figura("Poligon"), coordonate() {}
  58.     Poligon(vector<pair<float, float>> coordonate) : Figura("Poligon"), coordonate(coordonate) {}
  59.     ~Poligon() { coordonate.clear(); }
  60.  
  61.     float arie()
  62.     {
  63.         float suma = 0;
  64.         for (int index = 0; index < coordonate.size() - 1; ++index)
  65.             suma += coordonate[index].first * coordonate[index + 1].second -
  66.             coordonate[index + 1].first * coordonate[index].second;
  67.         return fabs(suma) / 2;
  68.     }
  69.  
  70.     float perimetru()
  71.     {
  72.         float perimetru = 0;
  73.         for (int index = 0; index < coordonate.size() - 1; ++index)
  74.             perimetru += (float)sqrt(pow(coordonate[index + 1].first - coordonate[index].first, 2) +
  75.                 pow(coordonate[index + 1].second - coordonate[index].second, 2));
  76.         return perimetru;
  77.     }
  78. };
  79.  
  80. class Patrulater : virtual public Poligon
  81. {
  82. public:
  83.     Patrulater() : Figura("Patrulater"), Poligon() {}
  84.     Patrulater(vector<pair<float, float>> coordonate) : Figura("Patrulater"), Poligon(coordonate) {}
  85.     ~Patrulater() { coordonate.clear(); }
  86.  
  87.     float arie() { return Poligon::arie(); }
  88.     float perimetru() { return Poligon::perimetru(); }
  89. };
  90.  
  91. class Paralelogram : virtual public Patrulater
  92. {
  93. protected:
  94.     float x, y, lx, ly, alfa;
  95. public:
  96.     Paralelogram() : Figura("Paralelogram"), x(0), y(0), lx(0), ly(0), alfa(0) {}
  97.     Paralelogram(float x, float y, float lx, float ly, float alfa) : Figura("Paralelogram"), x(x), y(y), lx(lx), ly(ly), alfa(alfa) {}
  98.  
  99.     virtual float arie() { return lx * ly * sin(alfa); }
  100.     virtual float perimetru() { return 2 * (lx + ly); }
  101. };
  102.  
  103. class Dreptunghi : virtual public Paralelogram
  104. {
  105. public:
  106.     Dreptunghi() : Figura("Dreptunghi"), Paralelogram() {}
  107.     Dreptunghi(float x, float y, float lx, float ly) : Figura("Dreptunghi"), Paralelogram(x, y, lx, ly, 90) {}
  108.  
  109.     virtual float arie() { return Paralelogram::arie(); }
  110.     float perimetru() { return Paralelogram::perimetru(); }
  111. };
  112.  
  113. class Romb : virtual public Paralelogram
  114. {
  115. public:
  116.     Romb() : Figura("Romb"), Paralelogram() {}
  117.     Romb(float x, float y, float lx, float alfa) : Figura("Romb"), Paralelogram(x, y, lx, lx, alfa) {}
  118.  
  119.     float arie() { return Paralelogram::arie(); }
  120.     virtual float perimetru() { return Paralelogram::perimetru(); }
  121. };
  122.  
  123. class Patrat : virtual public Dreptunghi, virtual public Romb
  124. {
  125. public:
  126.     Patrat() : Figura("Patrat"), Paralelogram() {}
  127.     Patrat(float x, float y, float l) : Figura("Patrat"), Paralelogram(x, y, l, l, 90) {}
  128.  
  129.     float arie() { return Dreptunghi::arie(); }
  130.     float perimetru() { return Romb::perimetru(); }
  131. };
  132.  
  133. class Trapez : virtual public Patrulater
  134. {
  135. protected:
  136.     float x1, y1, x2, y2, b1, b2;
  137. public:
  138.     Trapez() : Figura("Trapez"), x1(0), y1(0), x2(0), y2(0), b1(0), b2(0) {}
  139.     Trapez(float x1, float y1, float x2, float y2, float b1, float b2) : Figura("Trapez"), x1(x1), y1(y1), x2(x2), y2(y2), b1(b1), b2(b2) {}
  140.  
  141.     virtual float arie() { return (b1 + b2) * (y2 - y1) / 2; }
  142.     virtual float perimetru()
  143.     {
  144.         float latura1, latura2;
  145.         latura1 = (float)sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
  146.         latura2 = (float)sqrt(pow(x2 + b2 - (x1 + b1), 2) + pow(y2 - y1, 2));
  147.         return b1 + b2 + latura1 + latura2;
  148.     }
  149. };
  150.  
  151. class TrapezIsoscel : public Trapez
  152. {
  153. public:
  154.     TrapezIsoscel() : Figura("Trapez isoscel"), Trapez() {}
  155.     TrapezIsoscel(float x, float y, float h, float b1, float b2) : Figura("Trapez isoscel"), Trapez(x, y, x + (b1 - b2) / 2, y + h, b1, b2) {}
  156.  
  157.     float arie() { return Trapez::arie(); }
  158.     float perimetru() { return Trapez::perimetru(); }
  159. };
  160.  
  161. class TrapezDreptunghic : public Trapez
  162. {
  163. public:
  164.     TrapezDreptunghic() : Figura("Trapez dreptunghic"), Trapez() {}
  165.     TrapezDreptunghic(float x, float y, float h, float b1, float b2) : Figura("Trapez dreptunghic"), Trapez(x, y, x, y + h, b1, b2) {}
  166.  
  167.     float arie() { return Trapez::arie(); }
  168.     float perimetru() { return Trapez::perimetru(); }
  169. };
  170.  
  171. class Triunghi : public Poligon
  172. {
  173. protected:
  174.     float latura1, latura2, alfa;
  175. public:
  176.     Triunghi() : Figura("Triunghi"), latura1(0), latura2(0), alfa(0) {}
  177.     Triunghi(float latura1, float latura2, float alfa) : Figura("Triunghi"), latura1(latura1), latura2(latura2), alfa(alfa) {}
  178.  
  179.     virtual float arie()
  180.     {
  181.         return latura1 * latura2 * sin(alfa) / 2;
  182.     }
  183.  
  184.     virtual float perimetru()
  185.     {
  186.         float latura3 = (float)sqrt(pow(latura1, 2) + pow(latura2, 2) - 2 * latura1 * latura2 * cos(alfa));
  187.         return latura1 + latura2 + latura3;
  188.     }
  189. };
  190.  
  191. class TriunghiIsoscel : virtual public Triunghi
  192. {
  193. public:
  194.     TriunghiIsoscel() : Figura("Triunghi isoscel"), Triunghi() {}
  195.     TriunghiIsoscel(float latura, float alfa) : Figura("Triunghi isoscel"), Triunghi(latura, latura, alfa) {}
  196.  
  197.     virtual float arie() { return Triunghi::arie(); }
  198.     virtual float perimetru() { return Triunghi::perimetru(); }
  199. };
  200.  
  201. class TriunghiEchilateral : public TriunghiIsoscel
  202. {
  203. public:
  204.     TriunghiEchilateral() : Figura("Triunghi echilateral"), Triunghi() {}
  205.     TriunghiEchilateral(float latura) : Figura("Triunghi isoscel"), Triunghi(latura, latura, 60) {}
  206.  
  207.     float arie() { return Triunghi::arie(); }
  208.     float perimetru() { return Triunghi::perimetru(); }
  209. };
  210.  
  211. class TriunghiDreptunghic : virtual public Triunghi
  212. {
  213. public:
  214.     TriunghiDreptunghic() : Figura("Triunghi dreptunghic"), Triunghi() {}
  215.     TriunghiDreptunghic(float latura1, float latura2) : Figura("Triunghi dreptunghic"), Triunghi(latura1, latura2, 90) {}
  216.  
  217.     virtual float arie() { return Triunghi::arie(); }
  218.     virtual float perimetru() { return Triunghi::perimetru(); }
  219. };
  220.  
  221. class TriunghiDreptunghicIsoscel : public TriunghiDreptunghic, public TriunghiIsoscel
  222. {
  223. public:
  224.     TriunghiDreptunghicIsoscel() : Figura("Triunghi dreptunghic isoscel"), Triunghi() {}
  225.     TriunghiDreptunghicIsoscel(float latura) : Figura("Triunghi dreptunghic isoscel"), Triunghi(latura, latura, 90) {}
  226.  
  227.     float arie() { return TriunghiDreptunghic::arie(); }
  228.     float perimetru() { return TriunghiIsoscel::perimetru(); }
  229. };
  230.  
  231. int main()
  232. {
  233.     Elipsa elipsa(5, 6); // Raza1, Raza2
  234.     elipsa.afisare();
  235.  
  236.     Cerc cerc(5); // Raza
  237.     cerc.afisare();
  238.  
  239.  
  240.     vector<pair<float, float>> coordonate;
  241.     coordonate.push_back(make_pair(0, 0));
  242.     coordonate.push_back(make_pair(3, -1));
  243.     coordonate.push_back(make_pair(5, 1));
  244.     coordonate.push_back(make_pair(4, 3));
  245.     coordonate.push_back(make_pair(2, 2));
  246.     coordonate.push_back(coordonate[0]);
  247.  
  248.     Poligon poligon(coordonate); // coordonatele punctelor
  249.     poligon.afisare();
  250.  
  251.     Patrulater patrulater(coordonate); // coordonatele punctelor
  252.     patrulater.afisare();
  253.  
  254.  
  255.     Paralelogram paralelogram(0, 0, 5, 15, 30); // x, y, lx, ly, alfa
  256.     paralelogram.afisare();
  257.  
  258.     Dreptunghi dreptunghi(0, 0, 5, 15); // x, y, lx, ly
  259.     dreptunghi.afisare();
  260.  
  261.     Romb romb(0, 0, 5, 60); // x, y, latura, alfa
  262.     romb.afisare();
  263.  
  264.     Patrat patrat(0, 0, 5); // x, y, latura
  265.     patrat.afisare();
  266.  
  267.  
  268.     Trapez trapez(0, 0, 2, 2, 10, 5); // x1, y1, x2, y2, B1, B2
  269.     trapez.afisare();
  270.  
  271.     TrapezIsoscel trapezIsoscel(0, 0, 2, 10, 5); // x, y, h, B1, B2
  272.     trapezIsoscel.afisare();
  273.  
  274.     TrapezDreptunghic trapezDreptunghic(0, 0, 2, 15, 5); // x, y, h, B1, B2
  275.     trapezDreptunghic.afisare();
  276.  
  277.  
  278.     Triunghi triunghi(4, 4, 90); // l1, l2, alfa
  279.     triunghi.afisare();
  280.  
  281.     TriunghiIsoscel triunghiIsoscel(4, 60); // latura, alfa
  282.     triunghiIsoscel.afisare();
  283.  
  284.     TriunghiEchilateral triunghiEchilateral(4); // latura
  285.     triunghiEchilateral.afisare();
  286.  
  287.     TriunghiDreptunghic triunghiDreptunghic(4, 4); // cateta1, cateta2
  288.     triunghiDreptunghic.afisare();
  289.  
  290.     TriunghiDreptunghicIsoscel triunghiDreptunghicIsoscel(4); // cateta
  291.     triunghiDreptunghicIsoscel.afisare();
  292.  
  293.     return 0;
  294. }
Add Comment
Please, Sign In to add comment