// zadanie_10.cpp: определяет точку входа для консольного приложения. // //12. //Найти сумму элементов квадратной матрицы //X(n,n), находящихся по //периметру этой матрицы и сумму элементов на ее диагоналях. Если //суммы равны, то каждый отрицательный элемент заменить модулем этого //же элемента. #include "stdafx.h" #include #include #include #include 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]; } } }