Advertisement
Ansaid

Определитель матрицы

Apr 24th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <time.h>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     setlocale(LC_ALL, "Russian");
  11.     srand(time(NULL));
  12.     int SIZE;
  13.     cout << "Введите размерность матрицы: "; // ввод размерности
  14.     cin >> SIZE;
  15.     vector <vector <double>> arr(SIZE, vector <double>(SIZE)); // создает двумерный вектор размера SIZE
  16.  
  17.     for (int i = 0; i < SIZE; i++) // присваивание значений матрице
  18.     {
  19.         for (int j = 0; j < SIZE; j++)
  20.         {
  21.             arr[i][j] = rand() % 10;
  22.         }
  23.     }
  24.  
  25.     for (int i = 0; i < SIZE; i++) // вывод матрицы
  26.     {
  27.         for (int j = 0; j < SIZE; j++)
  28.         {
  29.             cout << arr[i][j] << "\t";
  30.         }
  31.         cout << endl;
  32.     }
  33.  
  34.     double temp = 0;      // временная переменная для хранения элемента
  35.     int temp_index = 0;   // временная переменная для хранения индекса элемента
  36.     int repit = SIZE - 1; //кол-во повторов
  37.     double chethik = 1;   // переменная для хранения накопленного произведения коэффициентов при минорах
  38.  
  39.     if (SIZE == 1)
  40.     {
  41.         chethik = chethik * arr[0][0];
  42.         cout << "Определитель = " << chethik << endl;
  43.         return 0;
  44.     }
  45.  
  46.     for (int t = 0; t < repit; t++)
  47.     {
  48.         temp = 0;
  49.         temp_index = 0;
  50.  
  51.         for (int i = 0; i < SIZE; i++) // выбор элемента через который будем делать 0
  52.         {
  53.             if (arr[i][0] != 0)
  54.             {
  55.                 temp = arr[i][0];
  56.                 temp_index = i;
  57.                 break;
  58.             }
  59.         }
  60.  
  61.         if (temp == 0)
  62.         {
  63.             cout << "Определитель матрицы равен 0" << endl;
  64.             return 0;
  65.         }
  66.  
  67.         double k = 0; // коэффициент пропорциональности
  68.  
  69.         for (int i = 0; i < SIZE; i++) // умножение строчки на коэффициент пропорциональности и вычитание ее из всех остальных
  70.         {
  71.             if (i != temp_index)
  72.             {
  73.                 k = arr[i][0] / temp;
  74.                 for (int j = 0; j < SIZE; j++)
  75.                 {
  76.                     arr[i][j] = arr[i][j] - arr[temp_index][j] * k;
  77.                 }
  78.             }
  79.         }
  80.  
  81.         if (temp_index % 2 == 0)
  82.             chethik = chethik * temp;
  83.         else
  84.             chethik = -chethik * temp;
  85.  
  86.         SIZE--; // уменьшаем размер матрицы
  87.  
  88.         arr.erase(arr.begin()); // делаем вектор на 1 меньше(удаляем 1 столбец)
  89.         for (int i = 0; i < SIZE; i++) // удаляем строчку
  90.         {
  91.             arr[i].erase(arr[i].begin() + temp_index);
  92.         }
  93.  
  94.         if (SIZE == 1)
  95.             chethik = chethik * arr[0][0];
  96.     }
  97.  
  98.     cout << "Определитель = " << chethik << endl;
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement