Advertisement
daniil_mironoff

Lab 3 (ver. FINAL) for Andrey with VERY BIG FUCKING LOVE

May 11th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. //#include "stdafx.h"
  5.  
  6. using namespace std;
  7.  
  8. // Класс Матрица
  9. class Matrix {
  10. protected:
  11.     int sizeX; // Размер матрицы по горизонтале
  12.     int sizeY; // Размер матрицы по вертикали
  13.     int ** values; // Значения матрицы
  14.    
  15. public:
  16.     Matrix(int X = 5, int Y = 5) {
  17.         sizeX = X;
  18.         sizeY = Y;
  19.        
  20.         values = new int * [sizeY];
  21.        
  22.         for (int i = 0; sizeY > i; i++) {
  23.             values[i] = new int [sizeX];
  24.            
  25.             for (int j = 0; sizeX > j; j++) {
  26.                 values[i][j] = 0;
  27.             }
  28.         }
  29.     }
  30.    
  31.     // Выводит матрицу
  32.     void printValues() {
  33.         for (int i = 0; sizeY > i; i++) {
  34.             for (int j = 0; sizeX > j; j++) {
  35.                 cout << values[i][j] << " ";
  36.             }
  37.            
  38.             cout << endl;
  39.         }
  40.        
  41.     }
  42.    
  43.     // Выводит Решение задачи
  44.     void algorithm() {
  45.         int * arr_sum = new int[sizeY];
  46.         bool flag = 0;
  47.         int range_start; // Значение интервала ОТ (включительно)
  48.         int range_finish; // Значения интервала ДО (включительно)
  49.        
  50.         // Ввод значений интервала
  51.         cout << "Введите интервал суммы строк ОТ:";
  52.         cin >> range_start;
  53.         cout << "Введите интервал суммы строк ДО:";
  54.         cin >> range_finish;
  55.        
  56.         // Нахождение сумм строк
  57.         // Если найдется хоть одна: начнется вывода
  58.         // аких строк (все в одном цикле)
  59.         for (int i = 0; i < sizeY; i++) {
  60.             int sum = 0;
  61.             for (int j = 0; j < sizeX; j++) {
  62.                 sum += values[i][j];
  63.             }
  64.            
  65.             arr_sum[i] = sum;
  66.            
  67.             if (sum > range_finish || range_start > sum) {
  68.                 if (flag == 0) {
  69.                     cout << "Строки, сумма которых не попала на заданный отрезок:";
  70.                 }
  71.                
  72.                 cout << " " << i + 1;
  73.                
  74.                 flag = 1;
  75.             }
  76.         }
  77.        
  78.         // Если таких все суммы строк в интервале
  79.         if (flag == 0) {
  80.             int max = 0;
  81.             int max_id = 0;
  82.             for (int i = 0; i < sizeY; i++) {
  83.                 if (arr_sum[i] > max) {
  84.                     max_id = i;
  85.                     max = arr_sum[i];
  86.                 }
  87.             }
  88.            
  89.             cout << "Номер строки с наибольшей суммой элементов: " << max_id + 1;
  90.         }
  91.        
  92.         cout << endl;
  93.     }
  94.    
  95. };
  96.  
  97.  
  98. // Класс Рандомная - Матрица
  99. class MatrixRandom : public Matrix {
  100. public:
  101.     // Конструктор
  102.     MatrixRandom(int X, int Y) {
  103.         sizeX = X;
  104.         sizeY = Y;
  105.        
  106.         for (int i = 0; sizeY > i; i++) {
  107.             for (int j = 0; sizeX > j; j++) {
  108.                 values[i][j] = rand() % 10;
  109.             }
  110.         }
  111.     }
  112. };
  113.  
  114. // Класс Кольцевая - Матрица
  115. class MatrixСircles : public Matrix {
  116. public:
  117.     // Конструктор
  118.     MatrixСircles(int X, int Y) {
  119.         sizeX = X;
  120.         sizeY = Y;
  121.         int count = 0;
  122.        
  123.         values = new int * [sizeY];
  124.        
  125.         if (sizeX >= sizeY) {
  126.             for (int y = 0; sizeY > y; y++) {
  127.                 values[y] = new int [sizeX];
  128.                
  129.                 for (int x = 0; sizeX > x; x++) {
  130.                     values[y][x] = count % 10;
  131.                    
  132.                     // Левые бока колец
  133.                     if (x < y) {
  134.                         count++;
  135.                     }
  136.                    
  137.                     // Правые бока колец
  138.                     if (sizeX - y - 2 < x) {
  139.                         count--;
  140.                     }
  141.                 }
  142.                
  143.                 count = 0;
  144.             }
  145.         } else {
  146.             for (int y = 0; sizeY > y; y++) {
  147.                 values[y] = new int [sizeX];
  148.                
  149.                 for (int x = 0; sizeX > x; x++) {
  150.                     values[y][x] = count % 10;
  151.                    
  152.                     if (y > int(sizeX/2)) {
  153.                         values[y][x] = values[y-1][x];
  154.                         continue;
  155.                     }
  156.                    
  157.                     // Левые бока колец
  158.                     if (x < y) {
  159.                         count++;
  160.                     }
  161.                    
  162.                     // Правые бока колец
  163.                     if (sizeX - y - 2 < x) {
  164.                         count--;
  165.                     }
  166.                 }
  167.                
  168.                 count = 0;
  169.             }
  170.         }
  171.        
  172.         //         Отзеркаливание
  173.         for (int y = 0; sizeY / 2 > y; y++) {
  174.             for (int x = 0; sizeX > x; x++) {
  175.                 values[sizeY / 2 + (sizeY % 2) + y][x] = values[sizeY / 2 - y - 1][x];
  176.             }
  177.            
  178.             count = 0;
  179.         }
  180.     }
  181. };
  182.  
  183. int main() {
  184.     srand(time(NULL));
  185.     setlocale(LC_ALL, "Russian");
  186.    
  187.     cout << "Объект класса Matrix(6, 4):" << endl;
  188.     Matrix objA(6, 4);
  189.     objA.printValues();
  190.  
  191.     cout << "Объект класса MatrixRandom():" << endl;
  192.     MatrixRandom objB(5, 5);
  193.     objB.printValues();
  194.     objB.algorithm();
  195.    
  196.     cout << "Объект класса MatrixCircles(5, 6):" << endl;
  197.     MatrixСircles objC(5, 6);
  198.     objC.printValues();
  199.     objC.algorithm();
  200.    
  201.     return 0;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement