Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- using namespace std;
- // класс вектор
- // два конструктора: 1) для определения вектора по его размеру
- // 2) путем копирования другого вектора
- // при задании вектора по его размеру предусмотреть его заполнение случайными числами
- // функция удаления из вектора повторяющихся значений
- // функция подсчета среднего арифметического элементов вектора
- class NumberArray
- {
- private:
- int *m_pArray;
- int m_count;
- // копирует содержимое (параметры: указатель на 0й элемент и количество)
- void Assign(int *pArray, unsigned int count)
- {
- m_count = count; // новое количество
- m_pArray = new int[count]; // выделение памяти под буфер
- for (int i = 0; i < count; ++i) // копирование элементов в массив из буфера-источника
- m_pArray[i] = pArray[i];
- }
- public:
- // конструктор по умолчанию (создает пустой массив)
- NumberArray()
- {
- m_pArray = NULL; // для пустого массива указатель должен быть равен NULL
- m_count = 0; // количество элементов в массиве равно 0
- }
- // конструктор копирования
- NumberArray(const NumberArray &rhs)
- {
- m_pArray = NULL;
- m_count = 0;
- Assign(rhs.m_pArray, rhs.m_count);
- }
- // заполнение массива случайными числами
- NumberArray(unsigned int count)
- {
- m_pArray = new int[count];
- m_count = count;
- srand(time(NULL));
- int max = 10; // для удобства проверки ввел макс. значение для элемента
- for (int i = 0; i < count; i++)
- m_pArray[i] = rand() % max;
- }
- // переопределение операции индексации
- int &operator [] (unsigned int idx)
- {
- return m_pArray[idx];
- }
- // возвращает размер вектора
- int GetCount() { return m_count;}
- // возвращает макс. элемент вектора (нужен для функции удаления дубликатов)
- int MaxNumber()
- {
- int max_elem = m_pArray[0];
- for (int i = 1; i < m_count; i++)
- if (m_pArray[i] > max_elem)
- max_elem = m_pArray[i];
- return max_elem;
- }
- // удаление дубликатов
- void RemoveDuplicate(unsigned int count, int max_number)
- {
- int temp_array[max_number];
- int result_array[count];
- for (int i = 0; i < max_number; i++) // обнуление временного массива
- temp_array[i] = 0;
- int j = 0;
- for (int i = 0; i < count; i++)
- {
- if (!temp_array[m_pArray[i]]) // проверка на уникальность
- {
- result_array[j++] = m_pArray[i];// сохранение в выходном массиве
- temp_array[m_pArray[i]] = 1; // флаг уникальности
- }
- }
- m_count = j; // изменение размера
- for (int i = 0; i < m_count; i++) // перезапись
- {
- m_pArray[i] = result_array[i];
- }
- }
- // среднее арифметическое
- int Average()
- {
- int avg;
- for (int i = 0; i < m_count; i++)
- avg += m_pArray[i];
- return avg;
- }
- void Clear()
- {
- if (m_pArray != NULL && m_count > 0) // если массив не пустой
- {
- delete[] m_pArray; // очищение выделенной динамической памяти
- m_pArray = NULL; // установка указателя в NULL, т.к. массив теперь пустой
- m_count = 0; // обнуление количества элементов
- }
- }
- ~NumberArray() { Clear(); }
- };
- int main()
- {
- int size;
- cout << "enter vector size: "; cin >> size; cout << endl;
- NumberArray vector_x(size);
- cout << "randomized vector:" << endl;
- for (int i = 0; i < size; i++)
- cout << vector_x[i] << " ";
- cout << "\n\n";
- cout << "vector average: " << float(vector_x.Average()) / vector_x.GetCount()<< "\n\n";
- NumberArray vector_y(vector_x);
- cout << "copied vector:" << endl;
- for (int i = 0; i < size; i++)
- cout << vector_y[i] << " ";
- cout << "\n\n";
- int max_number = vector_y.MaxNumber();
- vector_y.RemoveDuplicate(size, max_number);
- cout << "vector without repeating elements:" << endl;
- for (int i = 0; i < vector_y.GetCount(); i++)
- cout << vector_y[i] << " ";
- cout << "\n\n";
- cout << "vector average after removing duplicates: " << float(vector_y.Average()) / vector_y.GetCount() << "\n\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement