Advertisement
xotohop

vector

Apr 30th, 2020
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3.  
  4. using namespace std;
  5.  
  6. // класс вектор
  7. // два конструктора: 1) для определения вектора по его размеру
  8. //                   2) путем копирования другого вектора
  9. // при задании вектора по его размеру предусмотреть его заполнение случайными числами
  10. // функция удаления из вектора повторяющихся значений
  11. // функция подсчета среднего арифметического элементов вектора
  12.  
  13. class NumberArray
  14. {
  15.     private:
  16.         int *m_pArray;
  17.         int m_count;
  18.         // копирует содержимое (параметры: указатель на 0й элемент и количество)
  19.         void Assign(int *pArray, unsigned int count)
  20.         {
  21.             m_count = count;                        // новое количество
  22.             m_pArray = new int[count];              // выделение памяти под буфер
  23.             for (int i = 0; i < count; ++i)         // копирование элементов в массив из буфера-источника
  24.                 m_pArray[i] = pArray[i];
  25.         }
  26.     public:
  27.         // конструктор по умолчанию (создает пустой массив)
  28.         NumberArray()
  29.         {
  30.             m_pArray = NULL;                        // для пустого массива указатель должен быть равен NULL
  31.             m_count = 0;                            // количество элементов в массиве равно 0
  32.         }
  33.         // конструктор копирования
  34.         NumberArray(const NumberArray &rhs)
  35.         {
  36.             m_pArray = NULL;
  37.             m_count = 0;
  38.             Assign(rhs.m_pArray, rhs.m_count);
  39.         }
  40.         // заполнение массива случайными числами
  41.         NumberArray(unsigned int count)
  42.         {
  43.             m_pArray = new int[count];
  44.             m_count = count;
  45.             srand(time(NULL));
  46.             int max = 10;                           // для удобства проверки ввел макс. значение для элемента
  47.             for (int i = 0; i < count; i++)
  48.                 m_pArray[i] = rand() % max;
  49.         }
  50.         // переопределение операции индексации
  51.         int &operator [] (unsigned int idx)
  52.         {
  53.             return m_pArray[idx];
  54.         }
  55.         // возвращает размер вектора
  56.         int GetCount() { return m_count;}
  57.         // возвращает макс. элемент вектора (нужен для функции удаления дубликатов)
  58.         int MaxNumber()
  59.         {
  60.             int max_elem = m_pArray[0];
  61.             for (int i = 1; i < m_count; i++)
  62.                 if (m_pArray[i] > max_elem)
  63.                     max_elem = m_pArray[i];
  64.             return max_elem;
  65.         }
  66.         // удаление дубликатов
  67.         void RemoveDuplicate(unsigned int count, int max_number)
  68.         {
  69.             int temp_array[max_number];
  70.             int result_array[count];
  71.            
  72.             for (int i = 0; i < max_number; i++)    // обнуление временного массива
  73.                 temp_array[i] = 0;
  74.  
  75.             int j = 0;
  76.             for (int i = 0; i < count; i++)
  77.             {
  78.                 if (!temp_array[m_pArray[i]])       // проверка на уникальность
  79.                 {
  80.                     result_array[j++] = m_pArray[i];// сохранение в выходном массиве
  81.                     temp_array[m_pArray[i]] = 1;    // флаг уникальности
  82.                 }
  83.             }
  84.             m_count = j;                            // изменение размера
  85.             for (int i = 0; i < m_count; i++)       // перезапись
  86.             {
  87.                 m_pArray[i] = result_array[i];
  88.             }
  89.         }
  90.         // среднее арифметическое
  91.         int Average()
  92.         {
  93.             int avg;
  94.             for (int i = 0; i < m_count; i++)
  95.                 avg += m_pArray[i];
  96.             return avg;
  97.         }
  98.         void Clear()
  99.         {
  100.             if (m_pArray != NULL && m_count > 0)    // если массив не пустой
  101.             {
  102.                 delete[] m_pArray;                  // очищение выделенной динамической памяти
  103.                 m_pArray = NULL;                    // установка указателя в NULL, т.к. массив теперь пустой
  104.                 m_count = 0;                        // обнуление количества элементов
  105.             }
  106.         }
  107.         ~NumberArray() { Clear(); }
  108. };
  109.  
  110. int main()
  111. {
  112.     int size;
  113.  
  114.     cout << "enter vector size: "; cin >> size; cout << endl;
  115.  
  116.     NumberArray vector_x(size);
  117.     cout << "randomized vector:" << endl;
  118.     for (int i = 0; i < size; i++)
  119.         cout << vector_x[i] << " ";
  120.     cout << "\n\n";
  121.    
  122.     cout << "vector average: " << float(vector_x.Average()) / vector_x.GetCount()<< "\n\n";
  123.  
  124.     NumberArray vector_y(vector_x);
  125.     cout << "copied vector:" << endl;
  126.     for (int i = 0; i < size; i++)
  127.         cout << vector_y[i] << " ";
  128.     cout << "\n\n";
  129.  
  130.     int max_number = vector_y.MaxNumber();
  131.  
  132.     vector_y.RemoveDuplicate(size, max_number);
  133.  
  134.     cout << "vector without repeating elements:" << endl;
  135.     for (int i = 0; i < vector_y.GetCount(); i++)
  136.         cout << vector_y[i] << " ";
  137.     cout << "\n\n";
  138.  
  139.     cout << "vector average after removing duplicates: " << float(vector_y.Average()) / vector_y.GetCount() << "\n\n";
  140.  
  141.     return 0;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement