Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- //#include "stdafx.h"
- using namespace std;
- // Класс Матрица
- class Matrix {
- protected:
- int sizeX; // Размер матрицы по горизонтале
- int sizeY; // Размер матрицы по вертикали
- int ** values; // Значения матрицы
- public:
- Matrix(int X = 5, int Y = 5) {
- sizeX = X;
- sizeY = Y;
- values = new int * [sizeY];
- for (int i = 0; sizeY > i; i++) {
- values[i] = new int [sizeX];
- for (int j = 0; sizeX > j; j++) {
- values[i][j] = 0;
- }
- }
- }
- // Выводит матрицу
- void printValues() {
- for (int i = 0; sizeY > i; i++) {
- for (int j = 0; sizeX > j; j++) {
- cout << values[i][j] << " ";
- }
- cout << endl;
- }
- }
- // Выводит Решение задачи
- void algorithm() {
- int * arr_sum = new int[sizeY];
- bool flag = 0;
- int range_start; // Значение интервала ОТ (включительно)
- int range_finish; // Значения интервала ДО (включительно)
- // Ввод значений интервала
- cout << "Введите интервал суммы строк ОТ:";
- cin >> range_start;
- cout << "Введите интервал суммы строк ДО:";
- cin >> range_finish;
- // Нахождение сумм строк
- // Если найдется хоть одна: начнется вывода
- // аких строк (все в одном цикле)
- for (int i = 0; i < sizeY; i++) {
- int sum = 0;
- for (int j = 0; j < sizeX; j++) {
- sum += values[i][j];
- }
- arr_sum[i] = sum;
- if (sum > range_finish || range_start > sum) {
- if (flag == 0) {
- cout << "Строки, сумма которых не попала на заданный отрезок:";
- }
- cout << " " << i + 1;
- flag = 1;
- }
- }
- // Если таких все суммы строк в интервале
- if (flag == 0) {
- int max = 0;
- int max_id = 0;
- for (int i = 0; i < sizeY; i++) {
- if (arr_sum[i] > max) {
- max_id = i;
- max = arr_sum[i];
- }
- }
- cout << "Номер строки с наибольшей суммой элементов: " << max_id + 1;
- }
- cout << endl;
- }
- };
- // Класс Рандомная - Матрица
- class MatrixRandom : public Matrix {
- public:
- // Конструктор
- MatrixRandom(int X, int Y) {
- sizeX = X;
- sizeY = Y;
- for (int i = 0; sizeY > i; i++) {
- for (int j = 0; sizeX > j; j++) {
- values[i][j] = rand() % 10;
- }
- }
- }
- };
- // Класс Кольцевая - Матрица
- class MatrixСircles : public Matrix {
- public:
- // Конструктор
- MatrixСircles(int X, int Y) {
- sizeX = X;
- sizeY = Y;
- int count = 0;
- values = new int * [sizeY];
- if (sizeX >= sizeY) {
- for (int y = 0; sizeY > y; y++) {
- values[y] = new int [sizeX];
- for (int x = 0; sizeX > x; x++) {
- values[y][x] = count % 10;
- // Левые бока колец
- if (x < y) {
- count++;
- }
- // Правые бока колец
- if (sizeX - y - 2 < x) {
- count--;
- }
- }
- count = 0;
- }
- } else {
- for (int y = 0; sizeY > y; y++) {
- values[y] = new int [sizeX];
- for (int x = 0; sizeX > x; x++) {
- values[y][x] = count % 10;
- if (y > int(sizeX/2)) {
- values[y][x] = values[y-1][x];
- continue;
- }
- // Левые бока колец
- if (x < y) {
- count++;
- }
- // Правые бока колец
- if (sizeX - y - 2 < x) {
- count--;
- }
- }
- count = 0;
- }
- }
- // Отзеркаливание
- for (int y = 0; sizeY / 2 > y; y++) {
- for (int x = 0; sizeX > x; x++) {
- values[sizeY / 2 + (sizeY % 2) + y][x] = values[sizeY / 2 - y - 1][x];
- }
- count = 0;
- }
- }
- };
- int main() {
- srand(time(NULL));
- setlocale(LC_ALL, "Russian");
- cout << "Объект класса Matrix(6, 4):" << endl;
- Matrix objA(6, 4);
- objA.printValues();
- cout << "Объект класса MatrixRandom():" << endl;
- MatrixRandom objB(5, 5);
- objB.printValues();
- objB.algorithm();
- cout << "Объект класса MatrixCircles(5, 6):" << endl;
- MatrixСircles objC(5, 6);
- objC.printValues();
- objC.algorithm();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement