Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.84 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. void search(int **A, int sizeline, int sizecolumn) //среднее арифметическое значение элементов каждого столбца массива
  66. {
  67.     int k = 0;
  68.     double sumc,av;
  69.     for (int i = 0; i < sizecolumn; i++)
  70.     {
  71.         sumc = 0;
  72.         while (k < sizeline)
  73.         {
  74.             sumc += A[k][i]; //суммируем значения элементов одного столбца
  75.             k++;
  76.         }
  77.         k = 0;
  78.         sumc = sumc * 1.0;
  79.         av = sumc / sizeline ;
  80.         cout << "Cреднее арифметическое значение элементов " <<i<<"-го столбца= "<<av<< endl;
  81.     }
  82.    
  83. }
  84.  
  85. void rearrange(int **A, int sizeline, int sizecolumn) //Переставить местами четные и нечетные столбцы
  86. {
  87.     for (int i = 0; i < sizeline; i++)
  88.     {
  89.         for (int j = 1; j < sizecolumn; j=j+2)
  90.         {
  91.             swap(A[i][j-1], A[i][j]);
  92.         }
  93.     }
  94. }
  95.  
  96. void add(int **A, int &sizeline, int sizecolumn) //Вставить первую строку со случайными числами.
  97. {
  98.     sizeline++;
  99.     for (int i = sizeline-1; i > 0; i--)
  100.     {
  101.         for (int j = 0; j < sizecolumn; j++)
  102.         {
  103.             A[i][j] = A[i-1][j];
  104.         }
  105.     }
  106.    
  107.     for (int i = 0; i <-1; i--)
  108.     {
  109.         for (int j = 0; j < sizecolumn; j++)
  110.         {
  111.             A[i][j] = rand() % 100;
  112.         }
  113.     }
  114. }
  115.  
  116. void del(int **A, int sizeline, int &sizecolumn) // Удалить столбец с последним  максимальным элементом.
  117. {
  118.     int max = -101;
  119.     int indc = -1, indl = 0;
  120.     for (int i = 0; i < sizeline; i++)//поиск последнего вхождения минимального элемента и его индексов
  121.     {
  122.         for (int j = 0; j < sizecolumn; j++)
  123.         {
  124.             if (A[i][j] >= max)
  125.             {
  126.                 max = A[i][j];
  127.                 indl = i;
  128.                 indc = j;
  129.             }
  130.         }
  131.     }
  132.  
  133.     cout << "Последнее вхождение максимального элемента: " << max << endl;
  134.     for (int i = 0; i < sizeline; i++)//удаление столбца
  135.     {
  136.         for (int j = indc; j < sizecolumn-1 ; j++)
  137.         {
  138.             A[i][j] = A[i][j+1];
  139.         }
  140.     }
  141.     sizecolumn--;
  142. }
  143.  
  144. void newa(int **A, int &sizeline, int &sizecolumn)
  145. {
  146.     sizeline++;
  147.     int **a; //создание массива
  148.     a = new int*[sizeline];
  149.     for (int i = 0; i < sizeline; i++)
  150.         a[i] = new int[sizecolumn];
  151.     for (int i = sizeline - 1; i > 0; i--)
  152.     {
  153.         for (int j = 0; j < sizecolumn; j++)
  154.         {
  155.             a[i][j] = a[i - 1][j];
  156.         }
  157.     }
  158.     for (int i = 0; i < -1; i--)
  159.         {
  160.             for (int j = 0; j < sizecolumn; j++)
  161.             {
  162.                 a[i][j] = rand() % 100;
  163.             }
  164.         }
  165.     /*for (int i = 0; i < sizeline; i++)
  166.     {
  167.         for (int j = 0; j < sizecolumn; j++)
  168.         {
  169.             A[i][j] = a[i][j];
  170.         }
  171.     }*/
  172. }
  173.  
  174. void sort(int **A, int sizeline, int sizecolumn)//Сортировка простое включение, по убыванию, все четные столбцы
  175. {
  176.     int k=0;
  177.     int min;
  178.     int i = 0;
  179.     for (int k = 1; k < sizecolumn; k+=2)
  180.     {
  181.         while (i < sizeline)
  182.         {
  183.             int j = i - 1;
  184.             while ((j >= 0) && (A[i][k] > A[j][k]))
  185.             {
  186.                 j--;
  187.             }
  188.             j++;
  189.  
  190.             int buf = A[i][k];
  191.  
  192.             for (int m = i; m > j; m--)
  193.                 A[m][k] = A[m-1][k];
  194.             A[j][k] = buf;
  195.             i++;
  196.         }
  197.         i = 0;
  198.     }
  199. }
  200.  
  201. int main()
  202. {
  203.  
  204.     setlocale(LC_ALL, "rus");
  205.     int m, n;
  206.     int flag=1;
  207.     cout << "Количество строк: ";
  208.     cin >> m;
  209.     cout << "Количество столбцов: ";
  210.     cin >> n;
  211.     int ** a; //создание массива
  212.     a = new int*[m];
  213.     for (int i = 0; i < m; i++)
  214.         a[i] = new int[n];
  215.     input(a, m, n);
  216.  
  217.     cout << "Первоначальное значение массива: " << endl;
  218.     output(a, m, n);
  219.     while (flag != 8)
  220.     {
  221.         cout <<"___________________________________________________________________________________________________"<<endl<<endl<< "Выберите действие: " << endl << "1.Создание массива" << endl << "2.Поиск элементов массивa(уменьшение всех элементoв на значение индекса по строке в столбце с наибольшим количеством четных элементов)";
  222.         cout << endl << "3.Cреднее арифметическое значение элементов каждого столбца массива" << endl << "4.Перестановка местами четных и нечетных столбцов" << endl;
  223.         cout << "5.Удаление столбца с последним  максимальным элементом " << endl << "6.Вставка первой строки со случайными числами " << endl << "7.Сортировка простым включением, по убыванию, все четные столбцы" << endl << "8.Выход" << endl << "___________________________________________________________________________________________________"<<endl;
  224.        
  225.         cin >> flag;
  226.         if (flag == 1)
  227.         {
  228.            
  229.         }
  230.         if (flag == 3)
  231.         {
  232.             cout << "Cреднее арифметическое значение элементов каждого столбца массива" << endl;
  233.             search(a, m, n);
  234.         //  output(a, m, n);
  235.         }
  236.         if (flag == 2)
  237.         {
  238.             reduce(a, m, n);
  239.             cout << "Массив после того как в столбце с наибольшим количеством четных элементов уменьшили все элементы на значение индекса по строке: " << endl;
  240.             output(a, m, n);
  241.         }
  242.         if (flag == 4)
  243.         {
  244.             rearrange(a, m, n);
  245.             cout << "Перестановка четных и нечетных столбцов:" << endl;
  246.             output(a, m, n);
  247.         }
  248.         if (flag == 5)
  249.         {
  250.             del(a, m, n);
  251.             cout << "Массив после того как удалuли столбец " << endl;
  252.             output(a, m, n);
  253.         }
  254.         if (flag == 6)
  255.         {
  256.             cout << "Начальное значение массива: " << endl;
  257.             output(a, m, n);
  258.             add(a, m, n);
  259.             cout << "Массив после того как добавили первую строку, заполненную случайно сгенерированными числами:  " << endl;
  260.             //newa(a, m, n);
  261.             output(a, m, n);
  262.         }
  263.         if (flag == 7)
  264.         {
  265.             cout << "Массив до сортировки: " << endl;
  266.             output(a, m, n);
  267.             sort(a, m, n);
  268.             cout << "Массив после сортировки: "<<endl;
  269.             output(a, m, n);
  270.         }
  271.     }
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement