// 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];
}
}
}
Comments