Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <random>
- using namespace std;
- void input(int **A, int sizeline,int sizecolumn) //считывание массива из файла
- {
- ifstream f;
- f.open("file.txt");
- for (int i = 0; i < sizeline; i++)
- {
- for (int j = 0; j < sizecolumn; j++)
- f >> A[i][j];
- }
- f.close();
- }
- void output(int **A, int sizeline, int sizecolumn) //вывод массива
- {
- for (int i = 0; i < sizeline; i++)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- cout.width(4); //для красивого вывода
- cout << A[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl;
- }
- void reduce(int **A, int sizeline, int sizecolumn) //В столбце с наибольшим количеством четных элементов уменьшить все элементы на значение индекса по строке.
- {
- int evc = 0;//локальный счетчик четных
- int maxevc = 0; //глобальный счетчик четных
- int ind = 0;
- int k = 0;
- for (int i = 0; i < sizecolumn; i++)//поиск столбца с наибольшим количеством четных элементов
- {
- while (k < sizeline)
- {
- if ((abs(A[k][i] % 2)) == 0)
- evc++;
- k++;
- }
- if (evc > maxevc)
- {
- maxevc = evc;
- ind = i;
- }
- evc = 0;
- k = 0;
- }
- for (int i = 0; i < sizeline; i++)//проходим по массиву и уменьшаем на значение индекса
- {
- for (int j = ind; j <ind+1; j++)
- {
- A[i][j] =A[i][j]- i;
- }
- }
- }
- void search(int **A, int sizeline, int sizecolumn) //среднее арифметическое значение элементов каждого столбца массива
- {
- int k = 0;
- double sumc,av;
- for (int i = 0; i < sizecolumn; i++)
- {
- sumc = 0;
- while (k < sizeline)
- {
- sumc += A[k][i]; //суммируем значения элементов одного столбца
- k++;
- }
- k = 0;
- sumc = sumc * 1.0;
- av = sumc / sizeline ;
- cout << "Cреднее арифметическое значение элементов " <<i<<"-го столбца= "<<av<< endl;
- }
- }
- void rearrange(int **A, int sizeline, int sizecolumn) //Переставить местами четные и нечетные столбцы
- {
- for (int i = 0; i < sizeline; i++)
- {
- for (int j = 1; j < sizecolumn; j=j+2)
- {
- swap(A[i][j-1], A[i][j]);
- }
- }
- }
- void add(int **A, int &sizeline, int sizecolumn) //Вставить первую строку со случайными числами.
- {
- sizeline++;
- for (int i = sizeline-1; i > 0; i--)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- A[i][j] = A[i-1][j];
- }
- }
- for (int i = 0; i <-1; i--)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- A[i][j] = rand() % 100;
- }
- }
- }
- void del(int **A, int sizeline, int &sizecolumn) // Удалить столбец с последним максимальным элементом.
- {
- int max = -101;
- int indc = -1, indl = 0;
- for (int i = 0; i < sizeline; i++)//поиск последнего вхождения минимального элемента и его индексов
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- if (A[i][j] >= max)
- {
- max = A[i][j];
- indl = i;
- indc = j;
- }
- }
- }
- cout << "Последнее вхождение максимального элемента: " << max << endl;
- for (int i = 0; i < sizeline; i++)//удаление столбца
- {
- for (int j = indc; j < sizecolumn-1 ; j++)
- {
- A[i][j] = A[i][j+1];
- }
- }
- sizecolumn--;
- }
- void newa(int **A, int &sizeline, int &sizecolumn)
- {
- sizeline++;
- int **a; //создание массива
- a = new int*[sizeline];
- for (int i = 0; i < sizeline; i++)
- a[i] = new int[sizecolumn];
- for (int i = sizeline - 1; i > 0; i--)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- a[i][j] = a[i - 1][j];
- }
- }
- for (int i = 0; i < -1; i--)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- a[i][j] = rand() % 100;
- }
- }
- /*for (int i = 0; i < sizeline; i++)
- {
- for (int j = 0; j < sizecolumn; j++)
- {
- A[i][j] = a[i][j];
- }
- }*/
- }
- void sort(int **A, int sizeline, int sizecolumn)//Сортировка простое включение, по убыванию, все четные столбцы
- {
- int k=0;
- int min;
- int i = 0;
- for (int k = 1; k < sizecolumn; k+=2)
- {
- while (i < sizeline)
- {
- int j = i - 1;
- while ((j >= 0) && (A[i][k] > A[j][k]))
- {
- j--;
- }
- j++;
- int buf = A[i][k];
- for (int m = i; m > j; m--)
- A[m][k] = A[m-1][k];
- A[j][k] = buf;
- i++;
- }
- i = 0;
- }
- }
- int main()
- {
- setlocale(LC_ALL, "rus");
- int m, n;
- int flag=1;
- cout << "Количество строк: ";
- cin >> m;
- cout << "Количество столбцов: ";
- cin >> n;
- int ** a; //создание массива
- a = new int*[m];
- for (int i = 0; i < m; i++)
- a[i] = new int[n];
- input(a, m, n);
- cout << "Первоначальное значение массива: " << endl;
- output(a, m, n);
- while (flag != 8)
- {
- cout <<"___________________________________________________________________________________________________"<<endl<<endl<< "Выберите действие: " << endl << "1.Создание массива" << endl << "2.Поиск элементов массивa(уменьшение всех элементoв на значение индекса по строке в столбце с наибольшим количеством четных элементов)";
- cout << endl << "3.Cреднее арифметическое значение элементов каждого столбца массива" << endl << "4.Перестановка местами четных и нечетных столбцов" << endl;
- cout << "5.Удаление столбца с последним максимальным элементом " << endl << "6.Вставка первой строки со случайными числами " << endl << "7.Сортировка простым включением, по убыванию, все четные столбцы" << endl << "8.Выход" << endl << "___________________________________________________________________________________________________"<<endl;
- cin >> flag;
- if (flag == 1)
- {
- }
- if (flag == 3)
- {
- cout << "Cреднее арифметическое значение элементов каждого столбца массива" << endl;
- search(a, m, n);
- // output(a, m, n);
- }
- if (flag == 2)
- {
- reduce(a, m, n);
- cout << "Массив после того как в столбце с наибольшим количеством четных элементов уменьшили все элементы на значение индекса по строке: " << endl;
- output(a, m, n);
- }
- if (flag == 4)
- {
- rearrange(a, m, n);
- cout << "Перестановка четных и нечетных столбцов:" << endl;
- output(a, m, n);
- }
- if (flag == 5)
- {
- del(a, m, n);
- cout << "Массив после того как удалuли столбец " << endl;
- output(a, m, n);
- }
- if (flag == 6)
- {
- cout << "Начальное значение массива: " << endl;
- output(a, m, n);
- add(a, m, n);
- cout << "Массив после того как добавили первую строку, заполненную случайно сгенерированными числами: " << endl;
- //newa(a, m, n);
- output(a, m, n);
- }
- if (flag == 7)
- {
- cout << "Массив до сортировки: " << endl;
- output(a, m, n);
- sort(a, m, n);
- cout << "Массив после сортировки: "<<endl;
- output(a, m, n);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement