skioe

Лабораторная 3 (СП)

Jun 5th, 2021 (edited)
1,226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. using namespace std;
  4.  
  5.  
  6. class Matrix
  7. {
  8. protected:
  9.  
  10.     int r, c, k;
  11.     int** Matr;
  12.    
  13.     // Создаём матрицу
  14.     void Create()
  15.     {
  16.         if (r <= 0 || c <= 0)
  17.             return;
  18.         Matr = new int* [r];
  19.         for (int z = 0; z < r; z++)
  20.             Matr[z] = new int[c];
  21.     }
  22.  
  23. public:
  24.  
  25.     // Конструкторы и деструктор
  26.     Matrix() : r(0), c(0), Matr(nullptr) { k = 0; }
  27.  
  28.     ~Matrix()
  29.     {
  30.         for (int z = 0; z < r; z++)
  31.             delete[] Matr[z];
  32.         delete[] Matr;
  33.     }
  34.  
  35.     // Получаем данные от пользователя и создаем с ними матрицу
  36.     void get_data_and_create()
  37.     {
  38.         cout << "Введите кол-во строк: \n";
  39.         cin >> r;
  40.         cout << "Введите кол-во столбцов: \n";
  41.         cin >> c;
  42.         cout << "Введите k: \n";
  43.         cin >> k;
  44.         Create();
  45.         for (int i = 0; i < r; i++) // Указатель i
  46.         {
  47.             for (int j = 0; j < c; j++) // Цикл, заполняющий массив / указатель j
  48.             {
  49.                 cout << "Массив [" << i + 1 << "][" << j + 1 << "] = "; // Показываем, какой элемент сейчас вводим
  50.                 cin >> Matr[i][j]; // Вводим этот элемент
  51.             }
  52.         }
  53.        
  54.     }
  55.  
  56.     int& Element(int i, int j)
  57.     {
  58.         if (i < r && j < c)
  59.             return Matr[i][j];
  60.         else
  61.             cout << "Error: 1";
  62.     }
  63. };
  64.  
  65. class actions : public Matrix
  66. {
  67. private:
  68.     int mincolnum, mincolsum, tempcolsum;
  69.    
  70. public:
  71.     actions()
  72.     {  
  73.         mincolnum = 0;
  74.         mincolsum = 0;
  75.         tempcolsum = 0;
  76.     }
  77.  
  78.     // Доп. методы
  79.     //
  80.     // Выводим матрицу на экран
  81.     void Display()
  82.     {
  83.         cout << "\nМатрица:\n\n";
  84.  
  85.         for (int i = 0; i < r; i++)
  86.         {
  87.             for (int j = 0; j < c; j++)
  88.             {
  89.                 cout.width(5);
  90.                 cout << Matr[i][j];
  91.             }
  92.             cout << endl;
  93.         }
  94.     }
  95.  
  96.     // Сумма первого столбца
  97.     void FirstColumnSum()
  98.     {
  99.         for (int i = 0; i < r; i++)
  100.             mincolsum += Matr[i][0];
  101.     }
  102.  
  103.     // Минимальная сумма столбца
  104.     void MinColumnSum()
  105.     {
  106.         FirstColumnSum();
  107.         for (int i = 1; i < c; i++)
  108.         {
  109.             for (int j = 0; j < r; j++)
  110.                 tempcolsum += Matr[j][i];
  111.  
  112.             if (tempcolsum < mincolsum)
  113.             {
  114.                 mincolsum = tempcolsum;
  115.                 mincolnum = i;
  116.             }
  117.  
  118.             tempcolsum = 0;
  119.         }
  120.         cout << "\nМинимальная сумма столбца и его номер - " << mincolsum << " " << mincolnum + 1 << endl;
  121.     }
  122.  
  123.     // Выводим результат на экран
  124.     void DisplayResult(int _i, int _c)
  125.     {
  126.         cout << "Номера столбцов и их сумма: \n\n";
  127.         for (int i = _i; i < _c; i++)
  128.         {
  129.             for (int j = 0; j < r; j++)
  130.                 tempcolsum += Matr[j][i];
  131.  
  132.             cout << i + 1 << " = " << tempcolsum << endl;
  133.  
  134.             tempcolsum = 0;
  135.         }
  136.     }
  137.  
  138.     // В зависимости от выволнения условия, указанного в задании, выводим данные
  139.     void result()
  140.     {
  141.         MinColumnSum();
  142.         tempcolsum = 0;
  143.         if (mincolnum == k - 1) DisplayResult(0, mincolnum);
  144.         if (mincolnum != k - 1) DisplayResult(k, c);
  145.     }
  146. };
  147.  
  148.  
  149. int main()
  150. {
  151.     setlocale(LC_ALL, "russian");
  152.  
  153.     Matrix M;
  154.     actions AT;
  155.  
  156.     AT.get_data_and_create();
  157.     AT.Display();
  158.     AT.result();
  159.  
  160.     return 0;
  161. }
Add Comment
Please, Sign In to add comment