Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <random>
  4.  
  5. using namespace std;
  6.  
  7. void input(int **A, int sizeline,int sizecolumn) //считывание массива из файла
  8. {
  9.  
  10.     ifstream f;
  11.     f.open("file.txt");
  12.     for (int i = 0; i < sizeline; i++)  
  13.     {
  14.         for (int j = 0; j < sizecolumn; j++)
  15.             f >> A[i][j];
  16.     }
  17.     f.close();
  18. }
  19.  
  20. void output(int **A, int sizeline, int sizecolumn) //вывод массива
  21. {
  22.     for (int i = 0; i < sizeline; i++)
  23.     {
  24.         for (int j = 0; j < sizecolumn; j++)
  25.         {
  26.             cout.width(4); //для красивого вывода
  27.             cout << A[i][j] << " ";
  28.         }
  29.         cout << endl;
  30.     }
  31.     cout << endl;
  32. }
  33.  
  34. void reduce(int **A, int sizeline, int sizecolumn) //В столбце с наибольшим количеством четных элементов уменьшить все элементы на значение индекса по строке.
  35. {
  36.     int evc = 0;//локальный счетчик четных
  37.     int maxevc = 0; //глобальный счетчик четных
  38.     int ind = 0;
  39.     int k = 0;
  40.     for (int i = 0; i < sizecolumn; i++)//поиск столбца с наибольшим количеством четных элементов
  41.     {
  42.         while (k < sizeline)
  43.         {
  44.             if ((abs(A[k][i] % 2)) == 0)
  45.                 evc++;
  46.             k++;
  47.         }
  48.        
  49.         if (evc > maxevc)
  50.         {
  51.             maxevc = evc;
  52.             ind = i;
  53.         }
  54.         evc = 0;
  55.         k = 0;
  56.     }
  57.     for (int i = 0; i < sizeline; i++)//проходим по массиву и уменьшаем на значение индекса
  58.     {
  59.         for (int j = ind; j <ind+1; j++)
  60.         {
  61.             A[i][j] =A[i][j]- i;
  62.         }
  63.   }
  64. }
  65.  
  66. void search(int **A, int sizeline, int sizecolumn) //среднее арифметическое значение элементов каждого столбца массива
  67. {
  68.     int k = 0;
  69.     double sumc,av;
  70.     for (int i = 0; i < sizecolumn; i++)
  71.     {
  72.         sumc = 0;
  73.         while (k < sizeline)
  74.         {
  75.             sumc += A[k][i]; //суммируем значения элементов одного столбца
  76.             k++;
  77.         }
  78.         k = 0;
  79.         sumc = sumc * 1.0;
  80.         av = sumc / sizeline ;
  81.         cout << "Cреднее арифметическое значение элементов " <<i<<"-го столбца= "<<av<< endl;
  82.     }
  83.    
  84. }
  85.  
  86. void rearrange(int **A, int sizeline, int sizecolumn) //Переставить местами четные и нечетные столбцы
  87. {
  88.     for (int i = 0; i < sizeline; i++)
  89.     {
  90.         for (int j = 1; j < sizecolumn; j=j+2)
  91.         {
  92.             swap(A[i][j-1], A[i][j]);
  93.         }
  94.     }
  95. }
  96.  
  97. int ** add(int **A, int &sizeline, int sizecolumn) //Вставить первую строку со случайными числами.
  98. {
  99.     A = (int **)realloc(A, (++sizeline)*sizeof(int *));
  100.     for (int i = 0; i < sizeline - 1; i++) {
  101.         A[i] = (int *)realloc(A[i], sizecolumn*sizeof(int));
  102.     }
  103.     A[sizeline-1] = (int *)malloc(sizecolumn*sizeof(int));
  104.     for (int i = sizeline-1; i > 0; i--)
  105.     {
  106.         for (int j = 0; j < sizecolumn; j++)
  107.         {
  108.             A[i][j] = A[i-1][j];
  109.         }
  110.     }
  111.    
  112.     for (int i = 0; i <-1; i--)
  113.     {
  114.         for (int j = 0; j < sizecolumn; j++)
  115.         {
  116.             A[i][j] = rand() % 100;
  117.         }
  118.     }
  119.     return A;
  120. }
  121.  
  122. void del(int **A, int sizeline, int &sizecolumn) // Удалить столбец с последним  максимальным элементом.
  123. {
  124.     int max = -101;
  125.     int indc = -1, indl = 0;
  126.     for (int i = 0; i < sizeline; i++)//поиск последнего вхождения минимального элемента и его индексов
  127.     {
  128.         for (int j = 0; j < sizecolumn; j++)
  129.         {
  130.             if (A[i][j] >= max)
  131.             {
  132.                 max = A[i][j];
  133.                 indl = i;
  134.                 indc = j;
  135.             }
  136.         }
  137.     }
  138.  
  139.     cout << "Последнее вхождение максимального элемента: " << max << endl;
  140.     for (int i = 0; i < sizeline; i++)//удаление столбца
  141.     {
  142.         for (int j = indc; j < sizecolumn-1 ; j++)
  143.         {
  144.             A[i][j] = A[i][j+1];
  145.         }
  146.     }
  147.     sizecolumn--;
  148. }
  149.  
  150. void newa(int **A, int &sizeline, int &sizecolumn)
  151. {
  152.     sizeline++;
  153.     int **a; //создание массива
  154.     a = new int*[sizeline];
  155.     for (int i = 0; i < sizeline; i++)
  156.         a[i] = new int[sizecolumn];
  157.     for (int i = sizeline - 1; i > 0; i--)
  158.     {
  159.         for (int j = 0; j < sizecolumn; j++)
  160.         {
  161.             a[i][j] = a[i - 1][j];
  162.         }
  163.     }
  164.     for (int i = 0; i < -1; i--)
  165.         {
  166.             for (int j = 0; j < sizecolumn; j++)
  167.             {
  168.                 a[i][j] = rand() % 100;
  169.             }
  170.         }
  171.     /*for (int i = 0; i < sizeline; i++)
  172.     {
  173.         for (int j = 0; j < sizecolumn; j++)
  174.         {
  175.             A[i][j] = a[i][j];
  176.         }
  177.     }*/
  178. }
  179.  
  180. void sort(int **A, int sizeline, int sizecolumn)//Сортировка простое включение, по убыванию, все четные столбцы
  181. {
  182.     int k=0;
  183.     int min;
  184.     int i = 0;
  185.     for (int k = 1; k < sizecolumn; k+=2)
  186.     {
  187.         while (i < sizeline)
  188.         {
  189.             int j = i - 1;
  190.             while ((j >= 0) && (A[i][k] > A[j][k]))
  191.             {
  192.                 j--;
  193.             }
  194.             j++;
  195.  
  196.             int buf = A[i][k];
  197.  
  198.             for (int m = i; m > j; m--)
  199.                 A[m][k] = A[m-1][k];
  200.             A[j][k] = buf;
  201.             i++;
  202.         }
  203.         i = 0;
  204.     }
  205. }
  206.  
  207. int main()
  208. {
  209.  
  210.     setlocale(LC_ALL, "rus");
  211.     int m, n;
  212.     int flag=1;
  213.     cout << "Количество строк: ";
  214.     cin >> m;
  215.     cout << "Количество столбцов: ";
  216.     cin >> n;
  217.     int ** a; //создание массива
  218.     a = new int*[m];
  219.     for (int i = 0; i < m; i++)
  220.         a[i] = new int[n];
  221.     input(a, m, n);
  222.  
  223.     cout << "Первоначальное значение массива: " << endl;
  224.     output(a, m, n);
  225.     while (flag != 8)
  226.     {
  227.         cout <<"___________________________________________________________________________________________________"<<endl<<endl<< "Выберите действие: " << endl << "1.Создание массива" << endl << "2.Поиск элементов массивa(уменьшение всех элементoв на значение индекса по строке в столбце с наибольшим количеством четных элементов)";
  228.         cout << endl << "3.Cреднее арифметическое значение элементов каждого столбца массива" << endl << "4.Перестановка местами четных и нечетных столбцов" << endl;
  229.         cout << "5.Удаление столбца с последним  максимальным элементом " << endl << "6.Вставка первой строки со случайными числами " << endl << "7.Сортировка простым включением, по убыванию, все четные столбцы" << endl << "8.Выход" << endl << "___________________________________________________________________________________________________"<<endl;
  230.        
  231.         cin >> flag;
  232.         if (flag == 1)
  233.         {
  234.            
  235.         }
  236.         if (flag == 3)
  237.         {
  238.             cout << "Cреднее арифметическое значение элементов каждого столбца массива" << endl;
  239.             search(a, m, n);
  240.         //  output(a, m, n);
  241.         }
  242.         if (flag == 2)
  243.         {
  244.             reduce(a, m, n);
  245.             cout << "Массив после того как в столбце с наибольшим количеством четных элементов уменьшили все элементы на значение индекса по строке: " << endl;
  246.             output(a, m, n);
  247.         }
  248.         if (flag == 4)
  249.         {
  250.             rearrange(a, m, n);
  251.             cout << "Перестановка четных и нечетных столбцов:" << endl;
  252.             output(a, m, n);
  253.         }
  254.         if (flag == 5)
  255.         {
  256.             del(a, m, n);
  257.             cout << "Массив после того как удалuли столбец " << endl;
  258.             output(a, m, n);
  259.         }
  260.         if (flag == 6)
  261.         {
  262.             cout << "Начальное значение массива: " << endl;
  263.             output(a, m, n);
  264.             a = add(a, m, n);
  265.             cout << "Массив после того как добавили первую строку, заполненную случайно сгенерированными числами:  " << endl;
  266.             //newa(a, m, n);
  267.             output(a, m, n);
  268.         }
  269.         if (flag == 7)
  270.         {
  271.             cout << "Массив до сортировки: " << endl;
  272.             output(a, m, n);
  273.             sort(a, m, n);
  274.             cout << "Массив после сортировки: "<<endl;
  275.             output(a, m, n);
  276.         }
  277.     }
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement