Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // zadanie_10.cpp: определяет точку входа для консольного приложения.
- //
- //12.
- //Найти сумму элементов квадратной матрицы
- //X(n,n), находящихся по
- //периметру этой матрицы и сумму элементов на ее диагоналях. Если
- //суммы равны, то каждый отрицательный элемент заменить модулем этого
- //же элемента.
- #include "stdafx.h"
- #include <iostream>
- #include <ctime>
- #include <iomanip>
- #include <math.h>
- using namespace std;
- void showArr(int** pArr, int sizeOfArr);
- void fillArr(int** pArr, int sizeOfArr);
- int countPer(int** pArr, int sizeOfArr);
- int countDia(int** pArr, int sizeOfArr);
- void swapArrElem(int** pArr, int sizeOfArr);
- void enterArr(int** pArr, int sizeOfArr);
- int main()
- {
- setlocale(0, "rus");
- int sizeOfArr = 0;
- cout << "Введите размер квадратной матрицы:\n>> ";
- cin >> sizeOfArr;
- //Выделение памяти под массив
- int** pArrForFill = new int*[sizeOfArr];
- for (int i(0); i < sizeOfArr; i++)
- {
- pArrForFill[i] = new int[sizeOfArr];
- }
- //Меню
- cout << "Сгенерировать матрицу автоматически(1)/вручную(0)?\n>> ";
- int k = 1;
- do {
- cin >> k;
- switch (k)
- {
- case 1: {
- //Автогенерация массива
- cout << "Матрица " << sizeOfArr << "x" << sizeOfArr << " с рандомными числами от -15 до 15\n\n";
- fillArr(pArrForFill, sizeOfArr);
- showArr(pArrForFill, sizeOfArr);
- }
- break;
- case 0: {
- //Генерация вручную
- cout << "Введите элементы матрицы " << sizeOfArr << "x" << sizeOfArr << " :\n\n";
- enterArr(pArrForFill, sizeOfArr);
- }
- break;
- default: {
- cout << "Неверный ввод, попробуйте еще раз...\n>> ";
- }
- break;
- }
- } while ((k != 1) && (k != 0));
- //Подсчёт суммы элементов
- cout << "Сумма элементов матрицы по периметру = " << countPer(pArrForFill, sizeOfArr) << endl;
- cout << "Сумма элементов матрицы по диагонали = " << countDia(pArrForFill, sizeOfArr) << endl;
- //Равны ли суммы
- if (countPer(pArrForFill, sizeOfArr) == countDia(pArrForFill, sizeOfArr))
- //Равны, замена
- {
- cout << endl << "Суммы равны, замена отрицательных элементов на их модули:\n\n";
- swapArrElem(pArrForFill, sizeOfArr);
- showArr(pArrForFill, sizeOfArr);
- }
- //Всё ок, не равны
- else
- {
- cout << "Суммы не равны, матрица неизменна.\n\n";
- showArr(pArrForFill, sizeOfArr);
- }
- //Освобождение памяти
- for (int i(0); i < sizeOfArr; i++)
- {
- delete[] pArrForFill[i];
- }
- delete[] pArrForFill;
- return 0;
- }
- void fillArr(int** pArr, int sizeOfArr)
- {
- srand(time(0));
- for (int i(0); i < sizeOfArr; i++)
- {
- for (int j(0); j < sizeOfArr; j++)
- {
- pArr[i][j] = rand() % 31 - 15;
- }
- }
- }
- void showArr(int** pArr, int sizeOfArr)
- {
- for (int i(0); i < sizeOfArr; i++)
- {
- cout << "| ";
- for (int j(0); j < sizeOfArr; j++)
- {
- cout << setw(3) << pArr[i][j] << " ";
- }
- cout << "|\n";
- }
- cout << endl;
- }
- int countPer(int** pArr, int sizeOfArr)
- {
- int count = 0;
- for (int i(0); i < sizeOfArr; i++)
- {
- for (int j(0); j < sizeOfArr; j++)
- {
- if ((i == 0) || (i == sizeOfArr-1) || (j == 0) || (j == sizeOfArr-1))
- {
- count += pArr[i][j];
- }
- }
- }
- return count;
- }
- int countDia(int** pArr, int sizeOfArr)
- {
- int count = 0;
- for (int i(0); i < sizeOfArr; i++)
- {
- for (int j(0); j < sizeOfArr; j++)
- {
- if ((i == j) || ((j + i) == (sizeOfArr - 1)))
- {
- count += pArr[i][j];
- }
- }
- }
- return count;
- }
- void swapArrElem(int** pArr, int sizeOfArr)
- {
- for (int i(0); i < sizeOfArr; i++)
- {
- for (int j(0); j < sizeOfArr; j++)
- {
- if (pArr[i][j] < 0)
- {
- pArr[i][j] = abs(pArr[i][j]);
- }
- }
- }
- }
- void enterArr(int** pArr, int sizeOfArr)
- {
- for (int i(0); i < sizeOfArr; i++)
- {
- for (int j(0); j < sizeOfArr; j++)
- {
- cin >> pArr[i][j];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment