Advertisement
bloowper

klasa macierz(problem z wyznacnzikiem)

Jun 15th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. #pragma once
  2. #include <vector>
  3. #include <iostream>
  4. #include <math.h>
  5. using namespace std;
  6.  
  7. class matrix
  8. {
  9. public:
  10.     matrix(vector< vector<double> > main_matrix);
  11.     matrix(vector< vector<double> > main_matrix, unsigned wiersz_do_pominiecia, unsigned kolumna_do_pominiecia);
  12.     void print_matrix();
  13.     void transpone_matrix();
  14.     unsigned row_matrix();
  15.     unsigned column_matrix();
  16.     double det_matrix();// w trakcie pisania
  17.  
  18.  
  19. private:
  20.     vector< vector<double> > main_matrix;
  21. };
  22. #include "ftmatrix.h"//przyszle ewentualne dodatkowe funkcje gdyby byly potrzebne do pisania klasy
  23.  
  24.  
  25. matrix::matrix(vector< vector<double> > main_matrix)
  26. {
  27.     matrix::main_matrix = main_matrix;
  28. }
  29.  
  30. matrix::matrix(vector< vector<double> > in_matrix, unsigned wiersz_do_pominiecia, unsigned kolumna_do_pominiecia)
  31. {//oczywiscie 0 0 to pierwszy wiersz pierwsza kolumna
  32.  
  33.     //resize main_matrix ro rozmiarow po utworzeniu minora z in_matrix
  34.     main_matrix.resize(in_matrix.size() - 1);
  35.     for (unsigned i = 0; i < main_matrix.size(); i++)
  36.     {
  37.         main_matrix[i].resize(in_matrix[0].size()-1);
  38.     }
  39.     //****
  40.  
  41.     /*  for (unsigned i1 = 0; i1 < in_matrix.size(); i1++ )
  42.     TOOOO BYL DUZY BLAD LOGICZNY!!!!! NIGDY WIECEJ TAK NIE MYSLEC!!!! BO UJEMNE IQ WPADA XD
  43.     {
  44.         unsigned iterator_wierszy_main_matrix = 0;
  45.  
  46.         for (unsigned i2 = 0; i2 < in_matrix[i1].size(); i2++)
  47.         {
  48.             unsigned iterator_kolumn_main_matrix = 0;
  49.             if (i1+1!= wiersz_do_pominiecia && i2+1!= kolumna_do_pominiecia)
  50.             {
  51.                 main_matrix[iterator_wierszy_main_matrix][iterator_kolumn_main_matrix] = in_matrix[i1][i2];
  52.                 iterator_kolumn_main_matrix++;
  53.             }
  54.         }
  55.        
  56.         if (i1 != wiersz_do_pominiecia)
  57.             iterator_wierszy_main_matrix++;
  58.     }
  59. */
  60.     unsigned i1_main = 0;
  61.     for (unsigned i1 = 0; i1 < in_matrix.size(); i1++)
  62.     {
  63.         unsigned i2_main = 0;
  64.         for (unsigned i2 = 0; i2 < in_matrix[i1].size(); i2++)
  65.         {
  66.             if (i1 != wiersz_do_pominiecia && i2 != kolumna_do_pominiecia)
  67.                 matrix::main_matrix[i1_main][i2_main] = in_matrix[i1][i2];
  68.            
  69.             if (i2 != kolumna_do_pominiecia) i2_main++;
  70.         }
  71.         if (i1 != wiersz_do_pominiecia) i1_main++;
  72.  
  73.     }
  74.  
  75. }
  76.  
  77. void matrix::print_matrix()
  78. {
  79.     for (unsigned i1 = 0; i1 < main_matrix.size(); i1++)
  80.     {
  81.         for (unsigned i2 = 0; i2 < main_matrix.at(i1).size(); i2++)
  82.         {
  83.             cout << main_matrix.at(i1).at(i2)<<' ';
  84.         }
  85.         cout << endl;
  86.     }
  87. }
  88.  
  89. void matrix::transpone_matrix()
  90. {
  91.     vector< vector<double> > temp_matrix;
  92.     temp_matrix = main_matrix;
  93.     unsigned row_main = temp_matrix.size();
  94.     unsigned column_main = temp_matrix[0].size();
  95.     main_matrix.clear();
  96.     main_matrix.resize(column_main);
  97.     for (unsigned i1 = 0; i1 < temp_matrix.size(); i1++)
  98.     {
  99.         for (unsigned i2 = 0; i2 < temp_matrix[i1].size(); i2++)
  100.         {
  101.             main_matrix[i2].push_back(temp_matrix[i1][i2]);
  102.         }
  103.     }
  104.  
  105. }
  106.  
  107. unsigned matrix::row_matrix()
  108. {
  109.     return main_matrix.size();
  110. }
  111.  
  112. unsigned matrix::column_matrix()
  113. {
  114.     return main_matrix.at(0).size();
  115. }
  116.  
  117. double znak(unsigned a)//funkcja do det_matrix// nie chcialem rozbijac klasy na dodatkowy plik
  118. {
  119.     if (a % 2 == 0)
  120.         return 1.0;
  121.     else
  122.         return -1.0;
  123. }
  124. double matrix::det_matrix()
  125. {
  126.     if (main_matrix.size() != main_matrix.at(0).size())
  127.         return 0.0;
  128.    
  129.     if (main_matrix.size() == 2)
  130.         return ((main_matrix[0][0] * main_matrix[1][1] - main_matrix[0][1] * main_matrix[1][0]));
  131.  
  132.     double to_return = 0;
  133.  
  134.     for (unsigned i = 0; i < main_matrix.at(0).size(); i++)
  135.     {
  136.         matrix minor(main_matrix, 0, i);
  137.         to_return += (znak(i+1) * main_matrix[0][i] * minor.det_matrix());
  138.     }
  139.     return to_return; //!!!! ZWRACAL ZLY ZNAK ZMIENILEM ZNAK PRZY SAMYM RETURN=>jest blad w algorytmie;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement