SkeptaProgrammer

Untitled

Oct 9th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. // Сырых В.Н. Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов.Вывести на печать найденные строки и суммы их элементов.
  2.  
  3. #include "pch.h"
  4. #include <iostream>
  5. #include <time.h>
  6.  
  7. using namespace std;
  8.  
  9. const int randomLimit = 21; // предел выбора чисел для алгоритма
  10.  
  11. void ResetInput(int &m)
  12. {
  13.     bool t = cin.good();
  14.     switch (t)
  15.     {
  16.         case 1:
  17.         {
  18.             while (t)
  19.             {
  20.                 cin.clear();
  21.                 cout << "\nВвод некорректен. Повторите ввод: ";
  22.                 if(!(cin >> m)) ResetInput(m);
  23.                 if (m > 1) break;
  24.             }
  25.             break;
  26.         }
  27.         case 0:
  28.         {
  29.             while (!(cin >> m))
  30.             {
  31.                 cout << "\nВвод некорректен. Повторите ввод: ";
  32.                 cin.clear();
  33.                 while (cin.get() != '\n');
  34.             }
  35.             break;
  36.         }
  37.     }
  38.    
  39. }
  40.  
  41. void FillMatrix(int **matrix,int m, int n)
  42. {
  43.     for (int i = 0; i < m; i++)
  44.         for (int j = 0; j < n; j++)
  45.             matrix[i][j] = rand() % randomLimit;
  46. }
  47.  
  48. int CalculateSum(int numString, int n, int **matrix) // где n - длина строки
  49. {
  50.     int sum = 0;
  51.     for (int j = 0; j < n; j++)
  52.         sum += matrix[numString][j];
  53.     return sum;
  54. }
  55.  
  56. void OutputMatrix(int start, int finish, int n, int **matrix) // 0 <= start -- номер строки с которой начинается вывод, finish <= m -- на которой заканчивается
  57. {
  58.     for (int i = start; i < finish; i++)
  59.         for (int j = 0; j < n; j++)
  60.         {
  61.             cout.width(3);
  62.             if (j == n - 1)
  63.                 cout << matrix[i][j] <<" Сумма= "<<CalculateSum(i,n,matrix)<< "\n";
  64.             else cout << matrix[i][j] << " ";
  65.         }
  66. }
  67.  
  68.  
  69. int main()
  70. {
  71.     srand(time(0));
  72.     setlocale(0, "");
  73.     int m, n, indexMin=0,indexMax=0, max=0, min=randomLimit*1000;
  74.     cout << "Введите размер матрицы MxN\n";
  75.     cout << "Введите М: ";
  76.     if (!(cin >> m)) ResetInput(m);
  77.     if(m < 1) ResetInput(m);
  78.     cout << "Введите N: ";
  79.     if (!(cin >> n)) ResetInput(n);
  80.     if (n < 1) ResetInput(n);
  81.     int **matrix = new int*[m];
  82.     for (int i = 0; i < m; i++)
  83.         matrix[i] = new int[n];
  84.  
  85.     FillMatrix(matrix,m,n);
  86.     OutputMatrix(0, m, n, matrix);
  87.  
  88.     for (int i = 0; i < m; i++)
  89.     {
  90.         int result = CalculateSum(i, n, matrix);
  91.             if (max < result)
  92.             {
  93.                 max = result;
  94.                 indexMax = i;
  95.             }
  96.             if (min > result)
  97.             {
  98.                 min = result;
  99.                 indexMin = i;
  100.             }
  101.     }
  102.     cout << "Строка, содержащая максимальную сумму: \n";
  103.     OutputMatrix(indexMax, indexMax + 1, n, matrix);
  104.     cout << "Строка, содержащая минимальную сумму: \n";
  105.     OutputMatrix(indexMin, indexMin + 1, n, matrix);
  106.  
  107.     for (int i = 0; i < n; i++)
  108.         delete[] matrix[i];
  109.     delete[] matrix;
  110.    
  111.     return 0;
  112. }
Add Comment
Please, Sign In to add comment