Quipex icon

zadanie_10

Quipex | PRO | 03/01/16 07:56:49 PM UTC | 0 ⭐ | 464 👁️ | Never ⏰ | []
C++ |

4.33 KB

|

None

|

0 👍

/

0 👎

// 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