Guest User

Untitled

a guest
May 16th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. struct MyVector {
  7. double* arr;
  8. double* m;
  9. int cop, size;
  10. double min, max, arabge, stds;
  11.  
  12. MyVector() {
  13. arabge = 0;
  14. stds = 0;
  15. cop = 2;
  16. size = 0;
  17. arr = new double[cop];
  18. m = new double[cop];
  19. }
  20.  
  21. void maxminadd(double val) // изменяет максимум и минимум при добавлении нового элемента
  22. {
  23. int i = 0;
  24. while (i != size && val > m[i])
  25. i++;
  26. if (i == size)
  27. m[i] = val;
  28. else {
  29. for (int j = size; j > i; j--)
  30. m[j] = m[j - 1];
  31. m[i] = val;
  32. }
  33. max = m[size];
  34. min = m[0];
  35. }
  36.  
  37. void maxmindel(double val) // изменяет максимум и минимум при удалении элемента
  38. {
  39. int i = 0;
  40. while (val != m[i])
  41. i++;
  42. for (int j = i; j < size; j++)
  43. m[j] = m[j + 1];
  44. max = m[size - 1];
  45. min = m[0];
  46. }
  47.  
  48. void reallocate() //увеличивает размер массива
  49. {
  50. cop *= 2;
  51. double* a = new double[cop];
  52. for (int i = 0; i < size; i++)
  53. a[i] = arr[i];
  54. delete[] arr;
  55. arr = a;
  56. for (int i = 0; i < size; i++)
  57. a[i] = m[i];
  58. delete[] m;
  59. m = a;
  60. }
  61.  
  62. void reallocate1() // уменьшает размер массива
  63. {
  64. cop /= 2;
  65. double* a = new double[cop];
  66. for (int i = 0; i < size; i++)
  67. a[i] = arr[i];
  68. delete[] arr;
  69. arr = a;
  70. for (int i = 0; i < size; i++)
  71. a[i] = m[i];
  72. delete[] m;
  73. m = a;
  74. }
  75.  
  76. void add(double val) // добавление элемента в конец массива
  77. {
  78. if (size == cop) {
  79. reallocate();
  80. }
  81. arr[size] = val;
  82. maxminadd(val);
  83. arabge = (arabge * size + val) / (size + 1);
  84. stds = sqrt((stds * stds * size + (val - arabge) * (val - arabge)) / (size + 1));
  85. size++;
  86. }
  87.  
  88. void del() // удаление последнего элемента массива
  89. {
  90. size--;
  91. if (size == cop / 4) {
  92. reallocate1();
  93. }
  94. maxmindel(arr[size]);
  95. arabge = (arabge * (size + 1) - arr[size]) / size;
  96. stds = sqrt(((stds * stds * (size + 1)) - ((arr[size] - arabge) * (arr[size] - arabge))) / size);
  97. }
  98.  
  99. void set(int i, double val) // вставляет элемент в указанное место в массиве
  100. {
  101. int c = size - (i - 1);
  102. if (c >= cop) {
  103. reallocate();
  104. }
  105. for (int j = size; j >= i+1; j--)
  106. arr[j] = arr[j--];
  107. arr[i] = val;
  108. maxminadd(val);
  109. arabge = (arabge * size + val) / (size + 1);
  110. stds = sqrt((stds * stds * size + (val - arabge) * (val - arabge)) / (size + 1));
  111. size++;
  112. }
  113.  
  114. void pop(int i) // удаляет указанный элемент
  115. {
  116. double g = arr[i];
  117. for (int j = i; j < size - 1; j++)
  118. arr[j] = arr[j + 1];
  119. size--;
  120. if (size == cop / 4)
  121. reallocate1();
  122. maxmindel(arr[size]);
  123. arabge = (arabge * (size + 1) - arr[size]) / size;
  124. stds = sqrt((stds * stds * (size + 1) - (arr[size] - arabge) * (arr[size] - arabge)) / size);
  125. }
  126.  
  127. void sort() // вызов сортированного массива
  128. {
  129. for (int i = 0; i < size; i++)
  130. cout << m[i] << ' ';
  131. cout << endl;
  132. }
  133.  
  134. double get(int i) // по индексу возращает сам элемент массива
  135. {
  136. return arr[i];
  137. }
  138.  
  139. ~MyVector(){
  140. delete[] arr;
  141. delete[] m;
  142. }
  143. };
  144.  
  145. int main()
  146. {
  147. MyVector v;
  148. v.add(11);
  149. for (int i = 0; i < v.size; i++)
  150. cout << v.get(i) << ' ';
  151. cout << "- min: " << v.min << " max: " << v.max << " arabge: " << v.arabge << " stds: " << v.stds << endl;
  152. v.add(12);
  153. for (int i = 0; i < v.size; i++)
  154. cout << v.get(i) << ' ';
  155. cout << "- min: " << v.min << " max: " << v.max << " arabge: " << v.arabge << " stds: " << v.stds << endl;
  156. v.del();
  157. for (int i = 0; i < v.size; i++)
  158. cout << v.get(i) << ' ';
  159. cout << "- min: " << v.min << " max: " << v.max << " arabge: " << v.arabge << " stds: " << v.stds << endl;
  160. v.set(1, 9);
  161. for (int i = 0; i < v.size; i++)
  162. cout << v.get(i) << ' ';
  163. cout << "- min: " << v.min << " max: " << v.max << " arabge: " << v.arabge << " stds: " << v.stds << endl;
  164. v.sort();
  165. system("pause");
  166. return 0;
  167. }
Add Comment
Please, Sign In to add comment