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; // Значения матрицы Монеточку (рукалицо)
- int size_maxVal = 5; // Кол-во цифр макс. возможного значения
- public:
- // Возвращает размер числа
- int return_size_num(int num) {
- if (num == 0) {
- return 1;
- }
- int size_num = 0;
- while(num) {
- num /= 10;
- size_num++;
- }
- return size_num;
- }
- // Выводит матрицу
- void printValues() {
- cout << "Матрица:" << endl;
- for (int i = 0; sizeY > i; i++) {
- for (int j = 0; sizeX > j; j++) {
- int size_num = return_size_num(values[i][j]);
- // Затычка для красоты матрицы (заполнение ннезначащих нулей)
- for(int i = 0; size_maxVal - size_num > i; i++) {
- cout << "0";
- }
- 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 = 5, int Y = 5, int maxVal = 32767, int minVal = 0) {
- sizeX = X;
- sizeY = Y;
- size_maxVal = return_size_num(maxVal);
- maxVal -= (minVal - 1);
- 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] = (rand() % maxVal) + minVal;
- }
- }
- }
- };
- // Класс Кольцевая - Матрица
- // (Данная матрица - квадратная)
- // Пример:
- // 0 0 0 0 0
- // 0 1 1 1 0
- // 0 1 2 1 0
- // 0 1 1 1 0
- // 0 0 0 0 0
- class MatrixСircles : public Matrix {
- public:
- // Конструктор
- MatrixСircles(int size = 8) {
- sizeX = size;
- sizeY = size;
- size_maxVal = 1;
- int count = 0;
- values = new int * [sizeY];
- // Заполнение первой половины матрицы
- for (int y = 0; (sizeY / 2 + (sizeY % 2)) > y; y++) {
- values[y] = new int [sizeX];
- for (int x = 0; sizeX > x; x++) {
- values[y][x] = count % 10;
- // Левые бока колец
- if (x < y) {
- count++;
- }
- // Правые бока колец
- if (size - y - 2 < x) {
- count--;
- }
- }
- count = 0;
- cout << endl;
- }
- // Отзеркаливание
- for (int y = 0; sizeY / 2 > y; y++) {
- values[(sizeY / 2 + (sizeY % 2)) + y] = new int [sizeX];
- for (int x = 0; sizeX > x; x++) {
- values[sizeY / 2 + (sizeY % 2) + y][x] = values[sizeY / 2 - y - 1][x];
- }
- count = 0;
- cout << endl;
- }
- size_maxVal = 1;
- }
- };
- int main() {
- srand(time(NULL));
- setlocale(LC_ALL, "Russian");
- MatrixСircles objA(5);
- objA.printValues();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement