Advertisement
Guest User

Untitled

a guest
Aug 20th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7.     setlocale(LC_ALL, "Russian");
  8.     setlocale(LC_ALL, "ru_RU.UTF-8");
  9.     setlocale(LC_ALL, "");
  10.     {
  11.         // Классы. Продолжение
  12.  
  13.         class Point3D { // Класс трёхмерной точки
  14.             public:
  15.                 double x;
  16.                 double y;
  17.                 double z;
  18.  
  19.                 Point3D() { // Конструктор класса трёхмерной точки
  20.                     // Производится инициализации нулевыми значениями переменных класса
  21.                     x = 0;
  22.                     y = 0;
  23.                     z = 0;
  24.                 }
  25.         };
  26.  
  27.         class Vector3D { // Класс трёхмерного вектора
  28.             public:
  29.                 Point3D start_point, end_point, vector_coords;
  30.  
  31.                 Vector3D() { // Конструктор класса трёхмерного вектора
  32.                     input(); // Ввод данных
  33.                 }
  34.  
  35.                 void vector_update() { // Обновление параметров точек start_point и end_point
  36.                     cout << "Обновление координат точек вектора." << endl;
  37.                     input(); // Ввод данных
  38.                 }
  39.  
  40.                 double vector_length() { // Возвращает длину вектора
  41.                     return sqrt(pow(vector_coords.x, 2) + pow(vector_coords.y, 2) + pow(vector_coords.z, 2));
  42.                 }
  43.  
  44.             private: // Приватные методы и переменные класса
  45.                 Point3D get_coords() { // Получение координат трёхмерного вектора
  46.                     Point3D vect_coords;
  47.                     vect_coords.x = end_point.x - start_point.x;
  48.                     vect_coords.y = end_point.y - start_point.y;
  49.                     vect_coords.z = end_point.z - start_point.z;
  50.                     return vect_coords;
  51.                 }
  52.  
  53.                 void input() { // Ввод данных точек вектора
  54.                     // Осуществляется ввод координат начальной и конечной точки вектора
  55.                     cout << "Введите координаты точки начала вектора (формат: X, Y, Z): ";
  56.                     cin >> start_point.x >> start_point.y >> start_point.z;
  57.                     cout << "Введите координаты точки конца вектора (формат: X, Y, Z): ";
  58.                     cin >> end_point.x >> end_point.y >> end_point.z;
  59.                     vector_coords = get_coords();
  60.                 }
  61.         };
  62.  
  63.         class VectorND { // Класс N-мерного вектора
  64.             public:
  65.                 double *Start_Point, *End_Point, *Vect_Coords; // Указатели для двух точек и координат вектора
  66.                 int dimension;
  67.  
  68.                 VectorND(int dim = 3) { // Конструктор класса N-мерного вектора
  69.                     // По умолчанию трёхмерный вектор
  70.                     dimension = dim;
  71.                     Start_Point = new double[dimension];
  72.                     End_Point = new double[dimension];
  73.                     Vect_Coords = new double[dimension];
  74.                     for (int i = 0; i < dimension; i++) { // Обнуляет точки
  75.                         Start_Point[i] = 0;
  76.                         End_Point[i] = 0;
  77.                         Vect_Coords[i] = 0;
  78.                     }
  79.                 }
  80.  
  81.                 void InputData(int dim = 3) { // Ввод данных
  82.                     delete[] Start_Point, End_Point, Vect_Coords;
  83.                     dimension = dim;
  84.                     Start_Point = new double[dimension];
  85.                     End_Point = new double[dimension];
  86.                     Vect_Coords = new double[dimension];
  87.                     cout << "Введите координаты точки начала вектора (" << dimension << " параметров): ";
  88.                     for (int i = 0; i < dimension; i++) cin >> Start_Point[i];
  89.                     cout << "Введите координаты точки конца вектора (" << dimension << " параметров): ";
  90.                     for (int i = 0; i < dimension; i++) cin >> End_Point[i];
  91.                     Get_Coords();
  92.                 }
  93.  
  94.                 ~VectorND() {
  95.                     delete[] Start_Point, End_Point, Vect_Coords;
  96.                 }
  97.  
  98.                 double vector_length() { // Возвращает длину вектора
  99.                     double length = 0;
  100.                     for (int i = 0; i < dimension; i++) length = length + pow(Vect_Coords[i], 2);
  101.                     return sqrt(length);
  102.                 }
  103.  
  104.                 void Get_Coords() { // Получение координат N-мерного вектора
  105.                     for (int i = 0; i < dimension; i++) {
  106.                         Vect_Coords[i] = End_Point[i] - Start_Point[i];
  107.                     }
  108.                 }
  109.  
  110.                 VectorND operator + (VectorND operator2) { // Перегрузка оператора "+"
  111.                     VectorND temp(dimension);
  112.                     if (dimension == operator2.dimension) {
  113.                         for (int i = 0; i < dimension; i++) {
  114.                             temp.End_Point[i] = operator2.End_Point[i];
  115.                             temp.Get_Coords();
  116.                         }
  117.                     }
  118.                     else {
  119.                         for (int i = 0; i < dimension; i++) { // Обнуляет точки
  120.                             temp.Start_Point[i] = 0;
  121.                             temp.End_Point[i] = 0;
  122.                             temp.Vect_Coords[i] = 0;
  123.                         }
  124.                     }
  125.                     return temp;
  126.                 }
  127.                
  128.                 VectorND operator = (VectorND operator2) { // Перегрузка оператора "="
  129.                     if (dimension == operator2.dimension) {
  130.                         for (int i = 0; i < dimension; i++) {
  131.                             Start_Point[i] = operator2.Start_Point[i];
  132.                             End_Point[i] = operator2.End_Point[i];
  133.                             Vect_Coords[i] = operator2.Vect_Coords[i];
  134.                         }
  135.                     }
  136.                     else {
  137.                         for (int i = 0; i < dimension; i++) { // Обнуляет точки
  138.                             this->Start_Point[i] = 0;
  139.                             this->End_Point[i] = 0;
  140.                             this->Vect_Coords[i] = 0;
  141.                         }
  142.                     }
  143.                     return *this;
  144.                 }
  145.         };
  146.  
  147.         VectorND v1;
  148.         VectorND v2;
  149.         VectorND v3;
  150.         v3 = v1 + v2;
  151.     }
  152.     system("pause");
  153.     return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement