fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <sstream>
  4. using namespace std;
  5.  
  6. class VectorN {
  7. private:
  8. int n;
  9. double* data;
  10.  
  11. public:
  12. VectorN() {
  13. n = 0;
  14. data = nullptr;
  15. }
  16.  
  17. VectorN(int size, double* values) {
  18. n = size;
  19. data = new double[n];
  20. for (int i = 0; i < n; i++) {
  21. data[i] = values[i];
  22. }
  23. }
  24.  
  25. VectorN(const VectorN& other) {
  26. n = other.n;
  27. data = new double[n];
  28. for (int i = 0; i < n; i++) {
  29. data[i] = other.data[i];
  30. }
  31. }
  32.  
  33. VectorN& operator=(const VectorN& other) {
  34. if (this != &other) {
  35. delete[] data;
  36. n = other.n;
  37. data = new double[n];
  38. for (int i = 0; i < n; i++) {
  39. data[i] = other.data[i];
  40. }
  41. }
  42. return *this;
  43. }
  44.  
  45. ~VectorN() {
  46. delete[] data;
  47. }
  48.  
  49. double getNorm() {
  50. double sum = 0;
  51. for (int i = 0; i < n; i++) {
  52. sum += data[i] * data[i];
  53. }
  54. return sqrt(sum);
  55. }
  56.  
  57. void normalize() {
  58. double norm = getNorm();
  59. if (norm == 0) return;
  60. for (int i = 0; i < n; i++) {
  61. data[i] /= norm;
  62. }
  63. }
  64.  
  65. double getDistance(const VectorN& other) {
  66. double sum = 0;
  67. for (int i = 0; i < n; i++) {
  68. double diff = data[i] - other.data[i];
  69. sum += diff * diff;
  70. }
  71. return sqrt(sum);
  72. }
  73.  
  74. //string toString() ?
  75.  
  76. VectorN operator+(const VectorN& other) {
  77. VectorN result(n, data);
  78. for (int i = 0; i < n; i++) {
  79. result.data[i] += other.data[i];
  80. }
  81. return result;
  82. }
  83.  
  84. VectorN operator+(double value) {
  85. VectorN result(n, data);
  86. for (int i = 0; i < n; i++) {
  87. result.data[i] += value;
  88. }
  89. return result;
  90. }
  91.  
  92. VectorN operator-(const VectorN& other) {
  93. VectorN result(n, data);
  94. for (int i = 0; i < n; i++) {
  95. result.data[i] -= other.data[i];
  96. }
  97. return result;
  98. }
  99.  
  100. VectorN operator-(double value) {
  101. VectorN result(n, data);
  102. for (int i = 0; i < n; i++) {
  103. result.data[i] -= value;
  104. }
  105. return result;
  106. }
  107.  
  108. double operator*(const VectorN& other) {
  109. double sum = 0;
  110. for (int i = 0; i < n; i++) {
  111. sum += data[i] * other.data[i];
  112. }
  113. return sum;
  114. }
  115.  
  116. VectorN operator*(double value) {
  117. VectorN result(n, data);
  118. for (int i = 0; i < n; i++) {
  119. result.data[i] *= value;
  120. }
  121. return result;
  122. }
  123.  
  124. friend ostream& operator<<(ostream& os, const VectorN& v) {
  125. os << "(";
  126. for (int i = 0; i < v.n; i++) {
  127. os << v.data[i];
  128. if (i < v.n - 1) os << ", ";
  129. }
  130. os << ")";
  131. return os;
  132. }
  133.  
  134. };
  135.  
  136. // “<<” не знаю як зробити
  137.  
  138.  
  139. int main() {
  140. double arr1[] = {3, 4};
  141. double arr2[] = {1, 2};
  142.  
  143. VectorN v1(2, arr1);
  144. VectorN v2(2, arr2);
  145.  
  146. cout << v1 << endl;
  147. cout << v2 << endl;
  148.  
  149. cout << "v1 + v2 = " << v1 + v2 << endl;
  150. cout << "v1 - v2 = " << v1 - v2 << endl;
  151. cout << "v1 * v2 = " << (v1 * v2) << endl;
  152.  
  153. cout << "Норма v1: " << v1.getNorm() << endl;
  154.  
  155. v1.normalize();
  156. cout << "v1 після нормалізації: " << v1 << endl;
  157.  
  158. cout << "Відстань між векторами: " << v1.getDistance(v2) << endl;
  159.  
  160. return 0;
  161. }
  162.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
(3, 4)
(1, 2)
v1 + v2 = (4, 6)
v1 - v2 = (2, 2)
v1 * v2 = 11
Норма v1: 5
v1 після нормалізації: (0.6, 0.8)
Відстань між векторами: 1.26491