Quipex

zadanie_10

Mar 1st, 2016
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.33 KB | None | 0 0
  1. // zadanie_10.cpp: определяет точку входа для консольного приложения.
  2. //
  3. //12.
  4. //Найти сумму элементов квадратной матрицы  
  5. //X(n,n), находящихся по
  6. //периметру этой матрицы и сумму элементов на ее диагоналях. Если
  7. //суммы равны, то каждый отрицательный элемент заменить модулем этого
  8. //же элемента.
  9.  
  10. #include "stdafx.h"
  11. #include <iostream>
  12. #include <ctime>
  13. #include <iomanip>
  14. #include <math.h>
  15. using namespace std;
  16.  
  17. void showArr(int** pArr, int sizeOfArr);
  18. void fillArr(int** pArr, int sizeOfArr);
  19. int countPer(int** pArr, int sizeOfArr);
  20. int countDia(int** pArr, int sizeOfArr);
  21. void swapArrElem(int** pArr, int sizeOfArr);
  22. void enterArr(int** pArr, int sizeOfArr);
  23.  
  24.  
  25. int main()
  26. {
  27.     setlocale(0, "rus");
  28.  
  29.     int sizeOfArr = 0;
  30.     cout << "Введите размер квадратной матрицы:\n>> ";
  31.     cin >> sizeOfArr;
  32.  
  33.     //Выделение памяти под массив
  34.     int** pArrForFill = new int*[sizeOfArr];
  35.     for (int i(0); i < sizeOfArr; i++)
  36.     {
  37.         pArrForFill[i] = new int[sizeOfArr];
  38.     }
  39.  
  40.     //Меню
  41.     cout << "Сгенерировать матрицу автоматически(1)/вручную(0)?\n>> ";
  42.     int k = 1;
  43.     do {
  44.         cin >> k;
  45.         switch (k)
  46.         {
  47.         case 1: {
  48.             //Автогенерация массива
  49.             cout << "Матрица " << sizeOfArr << "x" << sizeOfArr << " с рандомными числами от -15 до 15\n\n";
  50.             fillArr(pArrForFill, sizeOfArr);
  51.             showArr(pArrForFill, sizeOfArr);
  52.         }
  53.                 break;
  54.         case 0: {
  55.             //Генерация вручную
  56.             cout << "Введите элементы матрицы " << sizeOfArr << "x" << sizeOfArr << " :\n\n";
  57.             enterArr(pArrForFill, sizeOfArr);
  58.         }
  59.                 break;
  60.         default: {
  61.             cout << "Неверный ввод, попробуйте еще раз...\n>> ";
  62.         }
  63.                  break;
  64.         }
  65.     } while ((k != 1) && (k != 0));
  66.  
  67.     //Подсчёт суммы элементов
  68.     cout << "Сумма элементов матрицы по периметру = " << countPer(pArrForFill, sizeOfArr) << endl;
  69.     cout << "Сумма элементов матрицы по диагонали = " << countDia(pArrForFill, sizeOfArr) << endl;
  70.  
  71.     //Равны ли суммы
  72.     if (countPer(pArrForFill, sizeOfArr) == countDia(pArrForFill, sizeOfArr))
  73.         //Равны, замена
  74.     {
  75.         cout << endl << "Суммы равны, замена отрицательных элементов на их модули:\n\n";
  76.         swapArrElem(pArrForFill, sizeOfArr);
  77.         showArr(pArrForFill, sizeOfArr);
  78.     }
  79.     //Всё ок, не равны
  80.     else
  81.     {
  82.         cout << "Суммы не равны, матрица неизменна.\n\n";
  83.         showArr(pArrForFill, sizeOfArr);
  84.     }
  85.  
  86.     //Освобождение памяти
  87.     for (int i(0); i < sizeOfArr; i++)
  88.     {
  89.         delete[] pArrForFill[i];
  90.     }
  91.     delete[] pArrForFill;
  92.     return 0;
  93. }
  94.  
  95. void fillArr(int** pArr, int sizeOfArr)
  96. {
  97.     srand(time(0));
  98.     for (int i(0); i < sizeOfArr; i++)
  99.     {
  100.         for (int j(0); j < sizeOfArr; j++)
  101.         {
  102.             pArr[i][j] = rand() % 31 - 15;
  103.         }
  104.     }
  105. }
  106.  
  107. void showArr(int** pArr, int sizeOfArr)
  108. {
  109.     for (int i(0); i < sizeOfArr; i++)
  110.     {
  111.         cout << "| ";
  112.         for (int j(0); j < sizeOfArr; j++)
  113.         {
  114.             cout << setw(3) << pArr[i][j] << " ";
  115.         }
  116.         cout << "|\n";
  117.     }
  118.     cout << endl;
  119. }
  120.  
  121. int countPer(int** pArr, int sizeOfArr)
  122. {
  123.     int count = 0;
  124.     for (int i(0); i < sizeOfArr; i++)
  125.     {
  126.         for (int j(0); j < sizeOfArr; j++)
  127.         {
  128.             if ((i == 0) || (i == sizeOfArr-1) || (j == 0) || (j == sizeOfArr-1))
  129.             {
  130.                 count += pArr[i][j];
  131.             }
  132.         }
  133.     }
  134.     return count;
  135. }
  136.  
  137. int countDia(int** pArr, int sizeOfArr)
  138. {
  139.     int count = 0;
  140.     for (int i(0); i < sizeOfArr; i++)
  141.     {
  142.         for (int j(0); j < sizeOfArr; j++)
  143.         {
  144.             if ((i == j) || ((j + i) == (sizeOfArr - 1)))
  145.             {
  146.                 count += pArr[i][j];
  147.             }
  148.         }
  149.     }
  150.     return count;
  151. }
  152.  
  153. void swapArrElem(int** pArr, int sizeOfArr)
  154. {
  155.     for (int i(0); i < sizeOfArr; i++)
  156.     {
  157.         for (int j(0); j < sizeOfArr; j++)
  158.         {
  159.             if (pArr[i][j] < 0)
  160.             {
  161.                 pArr[i][j] = abs(pArr[i][j]);
  162.             }
  163.         }
  164.     }
  165. }
  166.  
  167. void enterArr(int** pArr, int sizeOfArr)
  168. {
  169.     for (int i(0); i < sizeOfArr; i++)
  170.     {
  171.         for (int j(0); j < sizeOfArr; j++)
  172.         {
  173.             cin >> pArr[i][j];
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment