Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- namespace CppCLRWinformsProjekt {
- using namespace System;
- using System::Array;
- public class Point {
- private:
- float x, y;
- public:
- Point(float x, float y) {
- this->x = x;
- this->y = y;
- }
- float getX() {
- return x;
- }
- float getY() {
- return y;
- }
- };
- public ref class Vector {
- private:
- float x, y;
- public:
- Vector(Point start, Point end) {
- x = end.getX() - start.getX();
- y = end.getY() - start.getY();
- }
- Vector() {}
- Vector(float x, float y) {
- this->x = x;
- this->y = y;
- }
- float length() {
- return Math::Sqrt(Math::Pow(x, 2) + Math::Pow(y, 2));
- }
- float getX() {
- return x;
- }
- float getY() {
- return y;
- }
- String^ getInfo() {
- return String::Format("({0};{1})", x, y);
- }
- };
- public ref class VectorClaster {
- private:
- array <Vector^>^ data;
- //int length;
- //Vector* data;
- public:
- VectorClaster() {
- data = gcnew array<Vector^>(10);
- for (int i = 0; i < 10; i++)
- data[i] = gcnew Vector;
- }
- VectorClaster(int _length)
- {
- if (_length > 0) {
- data = gcnew array<Vector^>(_length);
- for (int i = 0; i < _length; i++)
- data[i] = gcnew Vector;
- }
- }
- ~VectorClaster()
- {
- delete[] data;
- }
- void clear()
- {
- delete[] data;
- // Указываем m_data значение nullptr, чтобы на выходе не было висячего указателя
- data = nullptr;
- length = 0;
- }
- int getLength() {
- return length;
- }
- void add(Vector value)
- {
- // Создаём новый массив на один элемент больше старого массива
- Vector* new_data = new Vector[length + 1];
- // Копируем все элементы
- for (int before = 0; before < length; before++)
- new_data[before] = data[before];
- // Вставляем наш новый элемент в наш новый массив
- new_data[length] = value;
- // Удаляем старый массив и используем вместо него новый массив
- delete[] data;
- data = new_data;
- length++;
- }
- void remove(int index)
- {
- // Проверка на корректность передаваемого индекса
- if (index >= 0 && index < length)
- throw new range_error("Выход за пределы массива");
- // Если это последний элемент массива, то делаем массив пустым и выполняем return
- if (length == 1)
- {
- clear();
- return;
- }
- // Cоздаём новый массив на один элемент меньше нашего старого массива
- Vector* new_data = new Vector[length - 1];
- // Копируем все элементы аж до index-а
- for (int before = 0; before < index; before++)
- new_data[before] = data[before];
- // Копируем все значения после удаляемого элемента
- for (int after = index + 1; after < length; after++)
- new_data[after - 1] = data[after];
- // Удаляем старый массив и используем вместо него новый массив
- delete[] data;
- data = new_data;
- length--;
- }
- Vector& operator[](int index)
- {
- return data[index];
- }
- void getInfo() {
- if (length == 0)
- cout << "Claster is empty" << endl;
- else {
- for (int i = 0; i < length; i++)
- cout << data[i].getInfo() << endl;
- }
- }
- Vector sum() {
- float sum_x = 0;
- float sum_y = 0;
- for (int i = 0; i < length; i++) {
- sum_x += data[i].getX();
- sum_y += data[i].getY();
- }
- return Vector(sum_x, sum_y);
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement