1-2-4-5.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. class Point{
  5. int x, y;
  6. public:
  7. Point(){ // конструктор без параметров
  8. cout << "Constructor " << this << " initialized.\n"; // вывод информации о инициализации конструктора
  9. }
  10. Point(int _x, int _y){ // конструктор с параметрами
  11. cout << "Constructor " << this << " initialized.\n"; // вывод информации о инициализации конструктора
  12. this->x = _x; this->y = _y; // присваивание аргументов функции в значения переменных класса
  13. }
  14. void set_coordinates(){ // сеттер (установка значений переменных класса)
  15. int _x, _y;
  16. cout << " input x y coordinates with space: "; cin >> _x >> _y;
  17. this->x = _x; this->y = _y;
  18. }
  19. // геттеры (получение значений переменных класса)
  20. int get_x(){ return this->x; }
  21. int get_y(){ return this->y; }
  22. int operator-(Point& b) { // перегрузка оператора вычитания
  23. return (this->x - b.x) * (this->x - b.x) + (this->y - b.y) * (this->y - b.y); // возвращение значения
  24. // в выражении сверху от переменных
  25. }
  26. ~Point(){ // деструктор
  27. cout << "Destructor " << this << " initialized.\n"; // вывод информации о инициализации деструктора
  28. }
  29. };
  30. // массив с определёнными
  31. enum class e_types {
  32. rect,
  33. square,
  34. rhombus,
  35. trapezoid,
  36. same_shape,
  37. parallelogram
  38. };
  39. e_types get_typeof_shape(Point a, Point b, Point c, Point d) {
  40. // получение растояния между точками через перегрузку оператора вычитания
  41. int AB = a - b;
  42. int BC = b - c;
  43. int CD = c - d;
  44. int DA = d - a;
  45. int AC = a - c;
  46. int BD = b - d;
  47. if (AB == CD && BC == DA)
  48. {
  49. if (AB == BC && AC == BD)
  50. return e_types::square;
  51. if (AB == BC && AC != BD)
  52. return e_types::rhombus;
  53. if (AB != CD && AC == BD)
  54. return e_types::rect;
  55. if (AB != CD && AC != BD)
  56. return e_types::parallelogram;
  57. }
  58. else
  59. if (((a.get_x() - b.get_x()) * (c.get_y() - d.get_y()) == (a.get_y() - b.get_y()) * (c.get_x() - d.get_x())) ||
  60. ((a.get_x() - d.get_x()) * (b.get_y() - c.get_y()) == (a.get_y() - d.get_y()) * (b.get_x() - c.get_x())))
  61. return e_types::trapezoid;
  62. else
  63. return e_types::same_shape;
  64. }
  65. enum UserChoise {
  66. DEFAULT,
  67. WITH_PARAMETERS
  68. };
  69. int main() {
  70. int choise; // выбор типа конструктора
  71. e_types *result;
  72. result = new e_types;
  73. cout << "Please, choose constructor's type:" << "\n";
  74. cout << "1. Default constructor (without parameters)." << "\n";
  75. cout << "2. Constructor with parameters." << "\n\n";
  76. cin >> choise;
  77. switch (choise - 1) // отнимаем 1, так как отсчёт идёт с нуля
  78. {
  79. case UserChoise::DEFAULT:
  80. {
  81. cout << "\n" << "Default constructor." << "\n\n";
  82. Point *points[4];
  83. for (int i = 0; i < 4; i++){
  84. cout << i+1 << " point -";
  85. points[i] = new Point();
  86. (*points[i]).set_coordinates();
  87. }
  88. *result = get_typeof_shape(*points[0], *points[1], *points[2], *points[3]);
  89. delete points;
  90. break;
  91. }
  92. case UserChoise::WITH_PARAMETERS:
  93. {
  94. cout << "\n" << "Constructor with parameters." << "\n\n";
  95. Point *points[4];
  96. for (int i = 0; i < 4; i++){
  97. int x, y;
  98. cout << i+1 << " point -" << " input x y coordinates with space: "; cin >> x >> y;
  99. points[i] = new Point(x, y);
  100. }
  101. cout << "\n";
  102. *result = get_typeof_shape(*points[0], *points[1], *points[2], *points[3]);
  103. delete points;
  104. break;
  105. }
  106. default:
  107. cout << "\n" << "Incorrect input." << "\n\n";
  108. return 0;
  109. break;
  110. }
  111. cout << "\nDefined type of shape: ";
  112. switch (*result)
  113. {
  114. case e_types::same_shape:
  115. cout << "arbitrary quadrangle" << endl;
  116. break;
  117. case e_types::rect:
  118. cout << "rect" << endl; //прямоугол
  119. break;
  120. case e_types::rhombus:
  121. cout << "rhombus" << endl;//ромб
  122. break;
  123. case e_types::square:
  124. cout << "square" << endl;
  125. break;
  126. case e_types::trapezoid:
  127. cout << "trapezoid" << endl;//трапеция
  128. break;
  129. case e_types::parallelogram:
  130. cout << "parallelogram" << endl;//parallelogram
  131. break;
  132. }
  133. delete result;
  134. cout << "\n";
  135. }