Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <ctime>
- #include <conio.h>
- using namespace std;
- //Задать двумерный массив размера a на b с клавиатуры
- int **inputMatrixFromKeyboard(size_t a, size_t b);
- //Задать двумерный массив размера a на b случайным образом целыми числами от min до max (от -5 до 9 по умолчанию)
- int ** createRandomMatrix(size_t a, size_t b, int max = 9, int min = -5);
- //Выводит матрицу в виде таблицы с заданной шириной поля (3 по умолчанию) на экран
- void showMatrix(int **m, size_t a, size_t b, int wide = 3);
- //Удаляет матрицу, чистит память
- void freeMatrix(int **m, size_t a, size_t b);
- //Функция для задания 1 - выводит на экран сумму элементов тех строк, которые содержат хотя бы один отрицательный элемент.
- void Task1(int **m, size_t a, size_t b);
- //Функция для задания 2 - выводит на экран седловые точки матрицы (максимальные в своёй строке, но минимальные в своём столбце)
- void Task2(int **m, size_t a, size_t b);
- int main()
- {
- setlocale(0, "Russian");
- srand(time(NULL));
- //Считываем размер матрицы у пользователя
- size_t N = 0, M = 0;
- cout << "Введите количество строк матрицы: ";
- cin >> N;
- cout << "Введите количество столбцов матрицы: ";
- cin >> M;
- int ** Matrix;
- char choice = 0;
- cout << "Хотите ввести матрицу вручную? (y/n)";//Хочет ли пользователь ввести массив вручую?
- choice = _getch();
- cout << endl;
- if (choice == 'y')//Если да
- Matrix = inputMatrixFromKeyboard(N, M);//Вводим матрицу с клавиатуры
- else//Иначе
- {
- Matrix = createRandomMatrix(N, M);//Создаём случайную матрицу указанного размера
- cout << "Сгенерирована случайная матрица " << N << " на " << M << "." << endl;
- }
- showMatrix(Matrix, N, M);//Выводим её на экран
- cout << "Суммы элеметов строк, содержащих отрицательный элемент:" << endl;
- Task1(Matrix, N, M);//Первое задание
- cout << endl << "Седловые точки:" << endl;
- Task2(Matrix, N, M);//Второе задание
- freeMatrix(Matrix, N, M);//Удаляем матрицу из динамической памяти
- system("pause");
- return 0;
- }
- int **inputMatrixFromKeyboard(size_t a, size_t b)
- {
- int **m = new int *[a];
- for (size_t i = 0; i < a; i++)
- {
- m[i] = new int[b];
- cout << "Ввод " << ( i + 1 ) << " - ой строки: " << endl;
- for (size_t j = 0; j < b; j++)
- cin >> m[i][j];
- }
- return m;
- }
- int ** createRandomMatrix(size_t a, size_t b, int max, int min)
- {
- int **m = new int *[a];
- for (size_t i = 0; i < a; i++)
- {
- m[i] = new int[b];
- for(size_t j = 0; j < b; j++)
- m[i][j] = rand() % (max - min + 1) + min;
- }
- return m;
- }
- void showMatrix(int **m, size_t a, size_t b, int wide)
- {
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- cout << setw(wide) << m[i][j] << " ";
- cout << endl;
- }
- cout << endl;
- }
- void freeMatrix(int **m, size_t a, size_t b)
- {
- for (size_t i = 0; i < a; i++)
- delete[] m[i];
- delete[] m;
- }
- void Task1(int **m, size_t a, size_t b)
- {
- bool ThereIsNegativeElement = false; //Флаг, показывающий, есть ли в текущей строке отрицательные элементы
- int rowSum = 0; //Сумма элементов одной строки
- for (size_t i = 0; i < a; i++)
- {
- for (size_t j = 0; j < b; j++)
- {
- rowSum += m[i][j];//Ищем сумму строки
- if (m[i][j] < 0)//Если нашли отрицательный элемент
- ThereIsNegativeElement = true;//Устанавливаем флаг в true
- }
- if (ThereIsNegativeElement)//Если флаг true
- cout << "Сумма эдементов " << (i + 1) << " строки равна " << rowSum << endl;
- rowSum = 0;//Обнуляем сумму ряда
- ThereIsNegativeElement = false;//Устанавливаем флаг в false
- }
- }
- void Task2(int **m, size_t a, size_t b)
- {
- bool thereAreSaddlePoints = false;
- int iMax = 0, jMax = 0, max = 0;
- bool itIsMin = true;//Флаг, показывающий, является ли точка минимальной в своём столбце
- for (size_t i = 0; i < a; i++)
- {
- max = m[i][0];//Устанавливаем изначальное значение max для текущей строки - первый её элемент
- jMax = 0;
- iMax = i;
- itIsMin = true;//Восстанавливаем флаг
- for (size_t j = 1; j < b; j++)//Ищем максимальный элемент i строки и запоминаем его строку и столбец в матрице
- {
- if (m[i][j] > max)
- {
- max = m[i][j];
- jMax = j;
- }
- }
- for (int k = 0; k < a; k++)//Проверяем, является ли данный элемент минимальным в своём столбце
- {
- if (m[k][jMax] < max)//Если находим элемент меньше чем max
- itIsMin = false;//Устанавливаем флаг в false
- }
- if (itIsMin)//Если данный элемент действительно наименьший в своём столбце
- {
- cout << "m [ " << iMax << " ] [ " << jMax << " ] = " << m[iMax][jMax] << " - седловая точка." << endl;
- thereAreSaddlePoints = true;
- }
- }
- if (!thereAreSaddlePoints)
- cout << "В данной матрице нет седловых точек" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement