daily pastebin goal
60%
SHARE
TWEET

Untitled

a guest May 16th, 2018 98 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top