Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.58 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<math.h>
  4. using namespace std;
  5.  
  6. //te iubeeeesc!
  7. //< 3 < 3 < 3 iubire si tie bebelus!
  8.  
  9.  
  10. class Punct {
  11. int x = 0;
  12. int y = 0;
  13. int z = 0;
  14. public:
  15.  
  16. Punct(int x, int y) {
  17. this->x = x;
  18. this->y = y;
  19. }
  20.  
  21. Punct(int x, int y, int z) {
  22. this->x = x;
  23. this->y = y;
  24. this->z = z;
  25. }
  26.  
  27. int getx() {
  28. return this->x;
  29. }
  30.  
  31. int gety() {
  32. return this->y;
  33. }
  34.  
  35. int getz() {
  36. return this->z;
  37. }
  38.  
  39. void setx(int x) {
  40. this->x = x;
  41. }
  42.  
  43. void sety(int y) {
  44. this->x = x;
  45. }
  46.  
  47. void setz(int z) {
  48. this->z = z;
  49. }
  50. };
  51.  
  52. class FiguraGeometricaAbstracta {
  53. protected:
  54. string tipFigura = "";
  55. bool este2D;
  56. int numarColturi = 0;
  57. Punct* vectorColturi[5];
  58.  
  59. virtual float arie() = 0;
  60. virtual float perimetru() = 0;
  61.  
  62. public:
  63.  
  64. FiguraGeometricaAbstracta(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi) {
  65. this->tipFigura = tipFigura;
  66. this->este2D = este2D;
  67. this->numarColturi = numarColturi;
  68. for (int i = 0; i < numarColturi; i++)
  69. this->vectorColturi[i] = &vectorColturi[i];
  70. }
  71.  
  72. void AdaugaColt(Punct &punct)
  73. {
  74. vectorColturi[numarColturi] = &punct;
  75. numarColturi++;
  76. }
  77.  
  78. void getTip() {
  79. cout << "Figura " << this->tipFigura;
  80. if (this->este2D) {
  81. cout << "este 2D";
  82. }
  83. else {
  84. cout << "este 3D";
  85. }
  86. }
  87.  
  88. ~FiguraGeometricaAbstracta() {
  89. cout << "apel destructor";
  90. }
  91.  
  92. FiguraGeometricaAbstracta(FiguraGeometricaAbstracta& figura) {
  93. this->tipFigura = figura.tipFigura;
  94. this->este2D=figura.este2D;
  95. this->numarColturi = figura.numarColturi;
  96. for (int i = 0; i < numarColturi; i++)
  97. this->vectorColturi[i] = figura.vectorColturi[i];
  98. }
  99.  
  100.  
  101. FiguraGeometricaAbstracta &operator=(FiguraGeometricaAbstracta &figura)
  102. {
  103. if (this == &figura)
  104. return *this;
  105. this->tipFigura = figura.tipFigura;
  106. this->este2D = figura.este2D;
  107. this->numarColturi = figura.numarColturi;
  108. for (int i = 0; i < numarColturi; i++) {
  109. this->vectorColturi[i] = figura.vectorColturi[i];
  110. }
  111. return *this;
  112. }
  113.  
  114. void getColturi() {
  115. if (este2D)
  116. for (int i = 0; i < numarColturi; i++)
  117. cout << "(" << (*vectorColturi[i]).getx() << "," << (*vectorColturi[i]).gety() << "); " << endl;
  118. else
  119. for (int i = 0; i < numarColturi; i++)
  120. cout << "(" << (*vectorColturi[i]).getx() << "," << (*vectorColturi[i]).gety() << "," << (*vectorColturi[i]).getz() << "); " << endl;
  121. }
  122. };
  123.  
  124. class Triunghi : public FiguraGeometricaAbstracta {
  125. protected:
  126. int inaltime;
  127. int baza;
  128.  
  129. public:
  130. Triunghi(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int inaltime, int baza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
  131. this->inaltime = inaltime;
  132. this->baza = baza;
  133. }
  134.  
  135. float arie() {
  136. return this->baza * this->inaltime / 2;
  137. }
  138.  
  139. float calculLungimeLatura(int punct1, int punct2) {
  140. int x1, x2, y1, y2;
  141.  
  142. x1 = (*vectorColturi[punct1]).getx();
  143. x2 = (*vectorColturi[punct2]).getx();
  144. y1 = (*vectorColturi[punct1]).gety();
  145. y2 = (*vectorColturi[punct2]).gety();
  146.  
  147. return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
  148. }
  149.  
  150. float perimetru() {
  151. return this->calculLungimeLatura(0, 1) + this->calculLungimeLatura(1, 2) + this->calculLungimeLatura(0, 2);
  152. }
  153.  
  154. float razaCercInscrisTriunghiului() {
  155. return 2 * this->arie() / this->perimetru;
  156. }
  157.  
  158. void PrintConsola() {
  159. cout << this->tipFigura;
  160. this->getColturi();
  161. this->perimetru();
  162. this->arie();
  163. }
  164.  
  165. void IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
  166. {
  167.  
  168. }
  169.  
  170. };
  171.  
  172. class TriunghiEchilateral :public Triunghi {
  173. public:
  174. TriunghiEchilateral(string tipFigura, bool este2D, int numarColturi,
  175. Punct* vectorColturi, int inaltime, int baza) :Triunghi(tipFigura,
  176. este2D, numarColturi, vectorColturi, inaltime, baza) {
  177. cout << "apel constructor";
  178. }
  179.  
  180. float arie() {
  181. return pow(this->baza, 2) * sqrt(3) / 4;
  182. }
  183.  
  184. float perimetru() {
  185. return this->baza * 3;
  186. }
  187.  
  188. float razaCerculuiCircumscris() {
  189. return this->arie() / sqrt(3);
  190. }
  191. };
  192.  
  193. class Dreptunghi : public FiguraGeometricaAbstracta, public IPrintabilLaConsola {
  194. protected:
  195. int laturaMica;
  196. int laturaMare;
  197. public:
  198. Dreptunghi(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int laturnaMica, int laturaMare) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
  199. this->laturaMica = laturaMica;
  200. this->laturaMare = laturaMare;
  201. }
  202.  
  203. float arie() {
  204. return this->laturaMare * this->laturaMica;
  205. }
  206.  
  207. float perimetru() {
  208. return (this->laturaMare * 2) + (this->laturaMica * 2);
  209. }
  210.  
  211. float calculDiagonala() {
  212. return sqrt(pow(this->laturaMare, 2) + pow(laturaMica, 2));
  213. }
  214.  
  215. void PrintConsola() {
  216. cout << this->tipFigura;
  217. this->getColturi();
  218. this->perimetru();
  219. this->arie();
  220. }
  221.  
  222. void IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
  223. {
  224.  
  225. }
  226.  
  227. };
  228.  
  229. class Patrat :public Dreptunghi {
  230. public:
  231. Patrat(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi,
  232. int laturnaMica, int laturaMare) :Dreptunghi(tipFigura, este2D, numarColturi,
  233. vectorColturi, laturnaMica, laturaMare) {
  234. cout << "apel constructor";
  235. }
  236.  
  237. float arie() {
  238. return pow(this->laturaMica, 2);
  239. }
  240.  
  241. float perimetru() {
  242. return this->laturaMica * 4;
  243. }
  244.  
  245. float diagonala() {
  246. return sqrt(2)*this->laturaMica;
  247. }
  248.  
  249. void PrintConsola() {
  250. cout << this->tipFigura;
  251. this->getColturi();
  252. this->perimetru();
  253. this->arie();
  254. }
  255.  
  256. bool IntersecțieSpațiu2D(IPrintabilLaConsola *fig)
  257. {
  258.  
  259. }
  260. };
  261.  
  262. class Cerc : public FiguraGeometricaAbstracta {
  263. int raza;
  264. public:
  265. Cerc(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int raza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
  266. this->raza = raza;
  267. }
  268.  
  269. float arie() {
  270. return this->raza * 3.14 * 2;
  271. }
  272.  
  273. float perimetru() {
  274. return this->raza * 2 * 3.14; //lungimea cercului
  275. }
  276.  
  277. int diametru() {
  278. return this->raza * 2;
  279. }
  280. };
  281.  
  282. class Cub : public FiguraGeometricaAbstracta {
  283. int vectorLatura[2];
  284. public:
  285. Cub(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int* vectorLatura) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
  286. this->vectorLatura[0] = vectorLatura[0];
  287. this->vectorLatura[1] = vectorLatura[1];
  288. }
  289.  
  290. float calculLungimeLatura() {
  291. int x1, x2, y1, y2;
  292.  
  293. x1 = (*vectorColturi[vectorLatura[0]]).getx();
  294. x2 = (*vectorColturi[vectorLatura[1]]).getx();
  295. y1 = (*vectorColturi[vectorLatura[0]]).gety();
  296. y2 = (*vectorColturi[vectorLatura[1]]).gety();
  297.  
  298. return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
  299. }
  300.  
  301. float arie() {
  302. return pow(this->calculLungimeLatura(), 2) * 6;
  303. }
  304.  
  305. float perimetru() {
  306. return this->calculLungimeLatura() * 12;
  307. }
  308.  
  309. float volum() {
  310. return pow(this->calculLungimeLatura(), 3);
  311. }
  312. };
  313.  
  314. class Sfera : public FiguraGeometricaAbstracta {
  315. int raza;
  316.  
  317. Sfera(string tipFigura, bool este2D, int numarColturi, Punct* vectorColturi, int raza) :FiguraGeometricaAbstracta(tipFigura, este2D, numarColturi, vectorColturi) {
  318. this->raza = raza;
  319. }
  320.  
  321. float arie() {
  322. return pow(raza, 2) * 4 * 3.14;
  323. }
  324.  
  325. float perimetru() {
  326. return this->raza * 2 * 3.14; //lungimea unui cerc cu raza sferei
  327. }
  328.  
  329. float volum() {
  330. return pow(raza, 3) * 4 * 3.14 / 3;
  331. }
  332.  
  333. };
  334.  
  335. class IPrintabilLaConsola {
  336. virtual void printConsola() = 0;
  337. virtual bool intersectieSpatiu2D() = 0;
  338. };
  339.  
  340.  
  341. int main() {
  342. Punct p1(2, 3);
  343. Punct p2(4, 5);
  344. Punct p3(1, 0);
  345.  
  346. Punct* colturiDate[4];
  347.  
  348.  
  349. //cerinte
  350. //vector dinamic de figuri geometrice
  351. FiguraGeometricaAbstracta** vectorFiguriGeometrice;
  352. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement