Advertisement
Guest User

diagschecker

a guest
Mar 18th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.45 KB | None | 0 0
  1. // ConsoleApplication4.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include "stdio.h"
  7. #include "stdlib.h"
  8. #include "time.h"
  9. #include "locale.h"
  10.  
  11. using namespace std;
  12.  
  13. void createhandlymatrix(int** &arr, int n);
  14. void createrandomlymatrix(int** &arr, int n);
  15. void showmatrix(int** arr, int n);
  16. void showrowofmatrix(int** arr, int n, int m);
  17. void showdynmas(int* arr);
  18. int* weakspot(int** arr, int n);
  19.  
  20. int main()
  21. {
  22.     setlocale(LC_ALL, "RUS");
  23.     int** z = new int*[0];
  24.     int cho = 0, dimension = 0, destiny = 666;
  25.     bool inputflag = false;
  26.     while (destiny != 0)
  27.     {
  28.         system("cls");
  29.         cout << "Лабораторная работа №2 ИКБО-07-17 Судариков К.А. Вариант 10" << endl << endl;
  30.         cout << "Задание 3" << endl;
  31.         cout << "Меню\n";
  32.         cout << "1) Ввести квадратную матрицу\n";
  33.         cout << "2) Вывести матрицу\n";
  34.         cout << "3) Вывести элементы диагонали массива, параллельной главной,\n   сумма значений которой минимальна\n";
  35.         cout << "0) Выход\n";
  36.         cout << "Ваш выбор: ";
  37.         if (cin >> destiny)
  38.         {
  39.             system("cls");
  40.             cout << "Лабораторная работа №2 ИКБО-07-17 Судариков К.А. Вариант 10" << endl << endl;
  41.             switch (destiny)
  42.             {
  43.             case 1:
  44.             {
  45.                 cout << "Какой способ ввода вы выбираете?\n";
  46.                 cout << "1) Вручную\n";
  47.                 cout << "2) Случайными числами\n";
  48.                 cin >> cho;
  49.                 switch (cho)
  50.                 {
  51.                 case 1:
  52.                 {
  53.                     cout << "Введите размерность матрицы: \n";
  54.                     cin >> dimension;
  55.                     if (dimension < 1)
  56.                     {
  57.                         cout << "Размерность - натуральное целое число!\n";
  58.                         getchar();
  59.                         getchar();
  60.                         break;
  61.                     }
  62.                     createhandlymatrix(z, dimension);
  63.                     cout << "Операция успешна!\n";
  64.                     getchar();
  65.                     getchar();
  66.                     inputflag = true;
  67.                     break;
  68.                 }
  69.                 case 2:
  70.                 {
  71.                     cout << "Введите размерность матрицы: \n";
  72.                     cin >> dimension;
  73.                     if (dimension < 1)
  74.                     {
  75.                         cout << "Размерность - натуральное целое число!\n";
  76.                         getchar();
  77.                         getchar();
  78.                         break;
  79.                     }
  80.                     createrandomlymatrix(z, dimension);
  81.                     cout << "Операция успешна!\n";
  82.                     getchar();
  83.                     getchar();
  84.                     inputflag = true;
  85.                     break;
  86.                 }
  87.                 default:
  88.                     break;
  89.                 }
  90.                 break;
  91.             }
  92.             case 2:
  93.             {
  94.                 if (inputflag)
  95.                 {
  96.                     cout << "Какие данные вы хотите вывести?\n";
  97.                     cout << "1) Из строки\n";
  98.                     cout << "2) Все данные\n";
  99.                     cin >> cho;
  100.                     switch (cho)
  101.                     {
  102.                     case 1:
  103.                     {
  104.                         cout << "Введите номер строки\n";
  105.                         cin >> cho;
  106.                         if (cho < 1 || cho > dimension)
  107.                         {
  108.                             if (cho > dimension)
  109.                             {
  110.                                 cout << "Такой строки в массиве нет!\n";
  111.                                 getchar();
  112.                                 getchar();
  113.                             }
  114.                             else
  115.                             {
  116.                                 cout << "Номер - натуральное целое число!\n";
  117.                                 getchar();
  118.                                 getchar();
  119.                             }
  120.                             break;
  121.                         }
  122.                         cout << "Данные из строки " << cho << ":\n";
  123.                         showrowofmatrix(z, cho - 1, dimension);
  124.                         getchar();
  125.                         getchar();
  126.                         break;
  127.                     }
  128.                     case 2:
  129.                     {
  130.                         cout << "Вывод массива\n\n";
  131.                         showmatrix(z, dimension);
  132.                         getchar();
  133.                         getchar();
  134.                         break;
  135.                     }
  136.                     default:
  137.                         break;
  138.                     }
  139.                 }
  140.                 else
  141.                 {
  142.                     cout << "Создайте матрицу!\n";
  143.                     getchar();
  144.                     getchar();
  145.                 }
  146.                 break;
  147.             }
  148.             case 3:
  149.             {
  150.                 if (dimension > 2)
  151.                 {
  152.                     cout << "Самая маленькая диагональ:\n";
  153.                     int* y = weakspot(z, dimension);
  154.                     showdynmas(y);                 
  155.                     getchar();
  156.                     getchar();
  157.                     delete[] y;
  158.                 }
  159.                 else
  160.                 {
  161.                     cout << "В вашей матрице нет диагоналей, параллельных главной!\n";
  162.                     getchar();
  163.                     getchar();
  164.                 }
  165.                 break;
  166.             }
  167.             default:
  168.                 break;
  169.             }
  170.         }
  171.         else
  172.         {
  173.             system("cls");
  174.             cout << "Не ломайте программу, или программа сломает вас!\n";
  175.             break;
  176.         }
  177.     }
  178.     for (int i = 0; i<dimension; i++)
  179.         delete[] z[i];
  180.     delete[] z;
  181.     system("pause");
  182.     return 0;
  183. }
  184.  
  185. void createhandlymatrix(int** &arr, int n)
  186. {
  187.     arr = new int *[n];
  188.     for (int i = 0; i < n; i++)
  189.     {
  190.         cout << "Ввод " << i << "-й строки\n";
  191.         arr[i] = new int[n];
  192.         for (int j = 0; j < n; j++)
  193.         {
  194.             cin >> arr[i][j];
  195.         }
  196.         cout << endl;
  197.     }
  198. }
  199.  
  200. void createrandomlymatrix(int** &arr, int n)
  201. {
  202.     arr = new int *[n];
  203.     srand((unsigned int)time(NULL));
  204.     for (int i = 0; i < n; i++)
  205.     {
  206.         arr[i] = new int[n];
  207.         for (int j = 0; j < n; j++)
  208.         {
  209.             arr[i][j] = rand() % 5;
  210.         }
  211.     }
  212. }
  213.  
  214. void showmatrix(int** arr, int n)
  215. {
  216.     int temp = n * n, highrise = 0;
  217.     while (temp / 10 > 0)
  218.     {
  219.         temp = temp / 10;
  220.         highrise++;
  221.     }
  222.     for (int i = 0; i < n; i++)
  223.     {
  224.         for (int j = 0; j < n; j++)
  225.         {
  226.             int zifry = -1, temp = arr[i][j];
  227.             while (temp / 10 > 0)
  228.             {
  229.                 temp = temp / 10;
  230.                 zifry++;
  231.             }
  232.             for (int i = 0; i < highrise - zifry; i++)
  233.                 cout << " ";
  234.             cout << arr[i][j];
  235.         }
  236.         cout << "\n";
  237.     }
  238.     cout << endl;
  239. }
  240.  
  241. void showrowofmatrix(int** arr, int n, int m)
  242. {
  243.     for (int i = 0; i < m; i++)
  244.     {
  245.         cout << arr[n][i] << " ";
  246.     }
  247.     cout << endl;
  248. }
  249.  
  250. int* weakspot(int** arr, int n)
  251. {
  252.     int* y = new int[n+1]; int leng = 0;
  253.     for (int k = 0; k < n - 2; k++)
  254.     {
  255.         int sum1 = 0, sum2 = 0;
  256.         leng += 2;
  257.         for (int i = 0; i + k + 1 < n; i++)
  258.         {
  259.             sum1 += arr[i][i + k + 1];
  260.             sum2 += arr[i + k + 1][i];
  261.         }
  262.             y[2*k] = sum1;
  263.             y[1+2*k] = sum2;
  264.     }
  265.     int min = 25000, member=0;
  266.     for (int i = 0; i < leng; i++)
  267.     {
  268.         if (min > y[i])
  269.         {
  270.             min = y[i];
  271.             member = i + 1;
  272.         }
  273.     }
  274.     if (member % 2 == 0)
  275.     {
  276.         for (int i = 0; i + (member / 2)  < n ; i++)
  277.         {
  278.             y[0] = i + 1;
  279.             y[i+1] = arr[i + (member / 2)][i];
  280.         }
  281.     }
  282.     else
  283.     {
  284.         for (int i = 0; i + (member / 2) + 1 < n; i++)
  285.         {
  286.             y[0] = i + 1;
  287.             y[i+1] = arr[i][i + (member / 2)+1];
  288.         }
  289.     }
  290.     return y;
  291. }
  292.  
  293. void showdynmas(int* arr)
  294. {
  295.     for (int i = 1; i-1 < arr[0]; i++)
  296.     {
  297.         cout << arr[i] << " ";
  298.     }
  299.     cout << endl;
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement