Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <chrono>
- using namespace std;
- int first, last; // сортировка
- void fillArray(int* const Arr_A, int const size)
- {
- int sposob;
- cout << "Выберите способ задания массива" << endl
- << "1.Рандом" << endl
- << "2.Ручной ввод" << endl;
- cin >> sposob;
- switch (sposob)
- {
- case 1:
- srand(time(NULL));
- cout << "Arr_A=";
- for (int i = 0; i < size; i++) {
- Arr_A[i] = rand() % 100;
- cout << " " << Arr_A[i];
- }
- break;
- case 2:
- cout << "Arr_A=";
- for (int i = 0; i < size; i++) {
- cin >> Arr_A[i];
- }
- break;
- default:
- cout << "Нет такого способа\n" << endl;
- return fillArray(Arr_A, size);
- break;
- }
- }
- void showArray(int* const Arr_A, int const size)
- {
- cout << "Массив Arr_A: ";
- for (int i = 0; i < size; i++) cout << Arr_A[i] << ",";
- }
- void quicksort(int* mas, int first, int last)
- {
- int mid, count;
- int f = first, l = last;
- mid = mas[(f + l) / 2]; //Вычисление опорного элемента
- do
- {
- while (mas[f] < mid) f++;
- while (mas[l] > mid) l--;
- if (f <= l) //перестановка элементов
- {
- count = mas[f];
- mas[f] = mas[l];
- mas[l] = count;
- f++;
- l--;
- }
- } while (f < l);
- if (first < l) quicksort(mas, first, l);
- if (f < last) quicksort(mas, f, last);
- }
- void valueMinMax(int* mas, int n)
- {
- int aver = (mas[0] + mas[n - 1]) / 2;
- int k = 0;
- cout << "Average = " << aver << endl;
- for (int i = 0; i < n; i++)
- {
- if (mas[i] == aver) k++;
- if (aver < mas[i]) break;
- }
- cout << endl << "Количество чисел массива равных среднему между min и max = " << k;
- }
- void ab(int* mas, int n) {
- int a, b;
- int counta = 0, countb = 0;
- cout << "\nВведите число a:";
- cin >> a;
- cout << "Введите число b:";
- cin >> b;
- for (int i = 0; i < n; i++) {
- if (mas[i] < a) {
- counta++;
- }
- if (mas[i] > b) {
- countb++;
- }
- }
- cout << "Чисел меньше a:" << counta << endl;
- cout << "Числе больше b:" << countb << endl;
- }
- void symmetry(int*& mas, int& size) {
- int* Arr_B = new int[size * 2];
- for (int i = 0; i < size; i++) {
- Arr_B[i] = mas[i];
- Arr_B[size * 2 - 1 - i] = mas[i];
- }
- delete[] mas;
- mas = Arr_B;
- cout << "Симметричный массив =";
- for (int i = 0; i < size * 2; i++) cout << mas[i] << " ";
- }
- void timeDel(int*& mas, int& size)
- {
- int indexDel;
- cout << "\nВведите номер элемента для удаления:";
- cin >> indexDel;
- if (indexDel > size) {
- cout << "Такого элемента нет! МАССИВ МАНЬШЕ!";
- return ;
- }
- else {
- std::chrono::time_point<std::chrono::system_clock> start, end;
- start = std::chrono::system_clock::now();
- size--;
- for (int i = indexDel - 1; i < size; i++)
- {
- mas[i] = mas[i + 1];
- }
- int* masResized = new int[size];
- for (int i = 0; i < size; i++) masResized[i] = mas[i];
- delete[] mas;
- mas = masResized;
- end = std::chrono::system_clock::now();
- std::chrono::duration<double> elapsed_seconds = end - start;
- cout << "Время затраченное на удаление = " << elapsed_seconds.count() << "s\n";
- cout << "Новый массив:";
- for (int i = 0; i < size; i++) cout << mas[i] << " ";
- cout << endl;
- }
- }
- void timeAdd(int*& mas, int& size)
- {
- int indexAdd, value;
- cout << "\nНа какую позицию добавить элемент? " << "Позиция: ";
- cin >> indexAdd;
- cout << "Введитче число: ";
- cin >> value;
- std::chrono::time_point<std::chrono::system_clock> start, end;
- start = std::chrono::system_clock::now();
- size++;
- int* masResized = new int[size];
- masResized[indexAdd - 1] = value;
- for (int i = 0; i < size; i++)
- {
- if (i < indexAdd - 1) {
- masResized[i] = mas[i];
- }
- else if (i >= indexAdd - 1) {
- masResized[i + 1] = mas[i];
- }
- }
- delete[] mas;
- mas = masResized;
- end = std::chrono::system_clock::now();
- std::chrono::duration<double> elapsed_seconds = end - start;
- cout << "Время затраченное на вставку = " << elapsed_seconds.count() << "s\n";
- cout << "Новый массив:";
- for (int i = 0; i < size; i++) cout << mas[i] << " ";
- cout << endl;
- }
- void timeFind(int* mas, int size)
- {
- int value;
- cout << "\nВведите значние, которое хотите найти: ";
- cin >> value;
- std::chrono::time_point<std::chrono::system_clock> start, end;
- start = std::chrono::system_clock::now();
- int f = 0;
- for (int i = 0; i < size; i++)
- {
- if (mas[i] == value) {
- f++;
- cout << "Такой же элемент под номером: " << i + 1;
- }
- }
- if (f == 0) {
- cout << "Таких элементов нет";
- }
- end = std::chrono::system_clock::now();
- std::chrono::duration<double> elapsed_seconds = end - start;
- cout << "\nВремя затраченное на поиск = " << elapsed_seconds.count() << "s\n";
- }
- void timeSwap(int* mas, int size)
- {
- int index_1, index_2;
- int tmp;
- cout << "\nВведите первый номер элемента: ";
- cin >> index_1;
- cout << "Введите второй номер элемента: ";
- cin >> index_2;
- std::chrono::time_point<std::chrono::system_clock> start, end;
- start = std::chrono::system_clock::now();
- tmp = mas[index_1-1];
- mas[index_1-1] = mas[index_2-1];
- mas[index_2-1] = tmp;
- end = std::chrono::system_clock::now();
- std::chrono::duration<double> elapsed_seconds = end - start;
- cout << "Время затраченное на обмен = " << elapsed_seconds.count() << "s\n";
- cout << "Новый массив:";
- for (int i = 0; i < size; i++) cout << mas[i] << " ";
- }
- void main() {
- setlocale(0, "");
- int size;
- cout << "Введите размерность массива ";
- while (!(cin >> size) || (cin.peek() != '\n'))
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Ошибка ввода.Введите целое число!" << endl;
- }
- cout << "Размерность массива = " << size << endl;
- int* Arr_A = new int[size];
- fillArray(Arr_A, size);
- first = 0; //Сортировка
- last = size - 1;
- quicksort(Arr_A, first, last);
- cout << endl << "Arr_A Sort=";
- for (int i = 0; i < size; i++) cout << Arr_A[i] << " ";
- cout << endl << "Max=" << Arr_A[size - 1] << ", " << "Min=" << Arr_A[0] << endl; //Максимальное и минимальное значение
- cout << endl;
- valueMinMax(Arr_A, size);
- cout << endl;
- ab(Arr_A, size); // больше a, меньше b
- timeDel(Arr_A,size);
- timeAdd(Arr_A, size);
- timeFind(Arr_A, size);
- timeSwap(Arr_A, size);
- symmetry(Arr_A, size);
- delete[] Arr_A;
- cout << endl;
- int repeat;
- cout << "Выполнить программу повторно?" << endl
- << "1.Да"
- << "2.Нет" << endl;
- cin >> repeat;
- if (repeat == 1) {
- main();
- }
- system("pause");
- }
- //while (!(cin >> size) || (cin.peek() != '\n'))
- //{
- // cin.clear();
- // while (cin.get() != '\n');
- // cout << "Ошибка ввода.Введите целое число!" << endl;
- //}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement