Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. #pragma once
  2. namespace CppCLRWinformsProjekt {
  3. using namespace System;
  4. using System::Array;
  5.  
  6. public class Point {
  7. private:
  8. float x, y;
  9.  
  10. public:
  11. Point(float x, float y) {
  12. this->x = x;
  13. this->y = y;
  14. }
  15.  
  16. float getX() {
  17. return x;
  18. }
  19.  
  20. float getY() {
  21. return y;
  22. }
  23. };
  24.  
  25. public ref class Vector {
  26. private:
  27. float x, y;
  28.  
  29. public:
  30. Vector(Point start, Point end) {
  31. x = end.getX() - start.getX();
  32. y = end.getY() - start.getY();
  33. }
  34.  
  35. Vector() {}
  36.  
  37. Vector(float x, float y) {
  38. this->x = x;
  39. this->y = y;
  40. }
  41.  
  42. float length() {
  43. return Math::Sqrt(Math::Pow(x, 2) + Math::Pow(y, 2));
  44. }
  45.  
  46. float getX() {
  47. return x;
  48. }
  49.  
  50. float getY() {
  51. return y;
  52. }
  53.  
  54. String^ getInfo() {
  55. return String::Format("({0};{1})", x, y);
  56. }
  57. };
  58.  
  59. public ref class VectorClaster {
  60. private:
  61. array <Vector^>^ data;
  62. //int length;
  63. //Vector* data;
  64.  
  65. public:
  66. VectorClaster() {
  67. data = gcnew array<Vector^>(10);
  68. for (int i = 0; i < 10; i++)
  69. data[i] = gcnew Vector;
  70. }
  71.  
  72. VectorClaster(int _length)
  73. {
  74. if (_length > 0) {
  75. data = gcnew array<Vector^>(_length);
  76. for (int i = 0; i < _length; i++)
  77. data[i] = gcnew Vector;
  78. }
  79. }
  80.  
  81. ~VectorClaster()
  82. {
  83. delete[] data;
  84. }
  85.  
  86. void clear()
  87. {
  88. delete[] data;
  89. // Указываем m_data значение nullptr, чтобы на выходе не было висячего указателя
  90. data = nullptr;
  91. length = 0;
  92. }
  93.  
  94. int getLength() {
  95. return length;
  96. }
  97.  
  98. void add(Vector value)
  99. {
  100. // Создаём новый массив на один элемент больше старого массива
  101. Vector* new_data = new Vector[length + 1];
  102.  
  103. // Копируем все элементы
  104. for (int before = 0; before < length; before++)
  105. new_data[before] = data[before];
  106.  
  107. // Вставляем наш новый элемент в наш новый массив
  108. new_data[length] = value;
  109.  
  110. // Удаляем старый массив и используем вместо него новый массив
  111. delete[] data;
  112. data = new_data;
  113. length++;
  114. }
  115.  
  116. void remove(int index)
  117. {
  118. // Проверка на корректность передаваемого индекса
  119. if (index >= 0 && index < length)
  120. throw new range_error("Выход за пределы массива");
  121.  
  122. // Если это последний элемент массива, то делаем массив пустым и выполняем return
  123. if (length == 1)
  124. {
  125. clear();
  126. return;
  127. }
  128.  
  129. // Cоздаём новый массив на один элемент меньше нашего старого массива
  130. Vector* new_data = new Vector[length - 1];
  131.  
  132. // Копируем все элементы аж до index-а
  133. for (int before = 0; before < index; before++)
  134. new_data[before] = data[before];
  135.  
  136. // Копируем все значения после удаляемого элемента
  137. for (int after = index + 1; after < length; after++)
  138. new_data[after - 1] = data[after];
  139.  
  140. // Удаляем старый массив и используем вместо него новый массив
  141. delete[] data;
  142. data = new_data;
  143. length--;
  144. }
  145.  
  146. Vector& operator[](int index)
  147. {
  148. return data[index];
  149. }
  150.  
  151. void getInfo() {
  152. if (length == 0)
  153. cout << "Claster is empty" << endl;
  154. else {
  155. for (int i = 0; i < length; i++)
  156. cout << data[i].getInfo() << endl;
  157. }
  158. }
  159.  
  160. Vector sum() {
  161. float sum_x = 0;
  162. float sum_y = 0;
  163. for (int i = 0; i < length; i++) {
  164. sum_x += data[i].getX();
  165. sum_y += data[i].getY();
  166. }
  167. return Vector(sum_x, sum_y);
  168. }
  169. };
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement