Advertisement
daniil_mironoff

Laba 2 for Andrey

May 7th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. //#include "stdafx.h"
  4.  
  5. using namespace std;
  6.  
  7. // Выводит матрицу
  8. void print_matrix(int ** matrix, int sizeX, int sizeY) {
  9.     cout << "Матрица:" << endl;
  10.     for (int i = 0; sizeY > i; i++) {
  11.         for (int j = 0; sizeX > j; j++) {
  12.             cout << matrix[i][j] << " ";
  13.         }
  14.        
  15.         cout << endl;
  16.     }
  17.    
  18.     cout << endl;
  19. }
  20.  
  21. // Возвращает (создает) случайную матрицу (с знач. от 0 до 9)
  22. int ** gen_matrix_rand(int sizeX = 5, int sizeY = 5) {
  23.     int ** matrix = new int * [sizeY];
  24.    
  25.     for (int i = 0; sizeY > i; i++) {
  26.         matrix[i] = new int [sizeX];
  27.        
  28.         for (int j = 0; sizeX > j; j++) {
  29.             matrix[i][j] = rand() % 10;
  30.         }
  31.     }
  32.    
  33.     cout << "Сгенерирована матрица размером " << sizeX << " на " << sizeY << endl;
  34.     return matrix;
  35. }
  36.  
  37. // Функция для решения задачи
  38. // --------------------------
  39. // Если в прямоугольногой мат
  40. // рице все суммы элементов с
  41. // трок попадают на заданнный
  42. // отрезок, определить номеер
  43. // строки с максимальной сумм
  44. // ой элементов, иначе опреде
  45. // лить номера строк, сумма э
  46. // лементов которых не попала
  47. // на заданный отрезоооооооок
  48. void algorithm(int ** matrix, int sizeX, int sizeY) {
  49.     int * arr_sum = new int[sizeY];
  50.     bool flag = 0;
  51.     int range_start; // Значение интервала ОТ (включительно)
  52.     int range_finish; // Значения интервала ДО (включительно)
  53.    
  54.     // Ввод значений интервала
  55.     cout << "Введите интервал суммы строк ОТ:";
  56.     cin >> range_start;
  57.     cout << "Введите интервал суммы строк ДО:";
  58.     cin >> range_finish;
  59.    
  60.     // Нахождение сумм строк
  61.     // Если найдется хоть одна: начнется вывода
  62.     // аких строк (все в одном цикле)
  63.     for (int i = 0; i < sizeY; i++) {
  64.         int sum = 0;
  65.         for (int j = 0; j < sizeX; j++) {
  66.             sum += matrix[i][j];
  67.         }
  68.        
  69.         arr_sum[i] = sum;
  70.        
  71.         if (sum > range_finish || range_start > sum) {
  72.             if (flag == 0) {
  73.                 cout << "Строки, сумма которых не попала на заданный отрезок:";
  74.             }
  75.            
  76.             cout << " " << i + 1;
  77.            
  78.             flag = 1;
  79.         }
  80.     }
  81.    
  82.     // Если таких все суммы строк в интервале
  83.     if (flag == 0) {
  84.         int max = 0;
  85.         int max_id = 0;
  86.         for (int i = 0; i < sizeY; i++) {
  87.             if (arr_sum[i] > max) {
  88.                 max_id = i;
  89.                 max = arr_sum[i];
  90.             }
  91.         }
  92.        
  93.         cout << "Номер строки с наибольшей суммой элементов: " << max_id + 1;
  94.     }
  95.    
  96.     cout << endl;
  97. }
  98.  
  99. int main() {
  100.     srand(time(NULL));
  101.     setlocale(LC_ALL, "Russian");
  102.  
  103.     int ** matrix = gen_matrix_rand(10, 10);
  104.     cout << endl;
  105.     print_matrix(matrix, 10, 10);
  106.     cout << endl;
  107.     algorithm(matrix, 10, 10);
  108.    
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement