Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <vector>
- #include <iostream>
- #include <math.h>
- using namespace std;
- class matrix
- {
- public:
- matrix(vector< vector<double> > main_matrix);
- matrix(vector< vector<double> > main_matrix, unsigned wiersz_do_pominiecia, unsigned kolumna_do_pominiecia);
- void print_matrix();
- void transpone_matrix();
- unsigned row_matrix();
- unsigned column_matrix();
- double det_matrix();// w trakcie pisania
- private:
- vector< vector<double> > main_matrix;
- };
- #include "ftmatrix.h"//przyszle ewentualne dodatkowe funkcje gdyby byly potrzebne do pisania klasy
- matrix::matrix(vector< vector<double> > main_matrix)
- {
- matrix::main_matrix = main_matrix;
- }
- matrix::matrix(vector< vector<double> > in_matrix, unsigned wiersz_do_pominiecia, unsigned kolumna_do_pominiecia)
- {//oczywiscie 0 0 to pierwszy wiersz pierwsza kolumna
- //resize main_matrix ro rozmiarow po utworzeniu minora z in_matrix
- main_matrix.resize(in_matrix.size() - 1);
- for (unsigned i = 0; i < main_matrix.size(); i++)
- {
- main_matrix[i].resize(in_matrix[0].size()-1);
- }
- //****
- /* for (unsigned i1 = 0; i1 < in_matrix.size(); i1++ )
- TOOOO BYL DUZY BLAD LOGICZNY!!!!! NIGDY WIECEJ TAK NIE MYSLEC!!!! BO UJEMNE IQ WPADA XD
- {
- unsigned iterator_wierszy_main_matrix = 0;
- for (unsigned i2 = 0; i2 < in_matrix[i1].size(); i2++)
- {
- unsigned iterator_kolumn_main_matrix = 0;
- if (i1+1!= wiersz_do_pominiecia && i2+1!= kolumna_do_pominiecia)
- {
- main_matrix[iterator_wierszy_main_matrix][iterator_kolumn_main_matrix] = in_matrix[i1][i2];
- iterator_kolumn_main_matrix++;
- }
- }
- if (i1 != wiersz_do_pominiecia)
- iterator_wierszy_main_matrix++;
- }
- */
- unsigned i1_main = 0;
- for (unsigned i1 = 0; i1 < in_matrix.size(); i1++)
- {
- unsigned i2_main = 0;
- for (unsigned i2 = 0; i2 < in_matrix[i1].size(); i2++)
- {
- if (i1 != wiersz_do_pominiecia && i2 != kolumna_do_pominiecia)
- matrix::main_matrix[i1_main][i2_main] = in_matrix[i1][i2];
- if (i2 != kolumna_do_pominiecia) i2_main++;
- }
- if (i1 != wiersz_do_pominiecia) i1_main++;
- }
- }
- void matrix::print_matrix()
- {
- for (unsigned i1 = 0; i1 < main_matrix.size(); i1++)
- {
- for (unsigned i2 = 0; i2 < main_matrix.at(i1).size(); i2++)
- {
- cout << main_matrix.at(i1).at(i2)<<' ';
- }
- cout << endl;
- }
- }
- void matrix::transpone_matrix()
- {
- vector< vector<double> > temp_matrix;
- temp_matrix = main_matrix;
- unsigned row_main = temp_matrix.size();
- unsigned column_main = temp_matrix[0].size();
- main_matrix.clear();
- main_matrix.resize(column_main);
- for (unsigned i1 = 0; i1 < temp_matrix.size(); i1++)
- {
- for (unsigned i2 = 0; i2 < temp_matrix[i1].size(); i2++)
- {
- main_matrix[i2].push_back(temp_matrix[i1][i2]);
- }
- }
- }
- unsigned matrix::row_matrix()
- {
- return main_matrix.size();
- }
- unsigned matrix::column_matrix()
- {
- return main_matrix.at(0).size();
- }
- double znak(unsigned a)//funkcja do det_matrix// nie chcialem rozbijac klasy na dodatkowy plik
- {
- if (a % 2 == 0)
- return 1.0;
- else
- return -1.0;
- }
- double matrix::det_matrix()
- {
- if (main_matrix.size() != main_matrix.at(0).size())
- return 0.0;
- if (main_matrix.size() == 2)
- return ((main_matrix[0][0] * main_matrix[1][1] - main_matrix[0][1] * main_matrix[1][0]));
- double to_return = 0;
- for (unsigned i = 0; i < main_matrix.at(0).size(); i++)
- {
- matrix minor(main_matrix, 0, i);
- to_return += (znak(i+1) * main_matrix[0][i] * minor.det_matrix());
- }
- return to_return; //!!!! ZWRACAL ZLY ZNAK ZMIENILEM ZNAK PRZY SAMYM RETURN=>jest blad w algorytmie;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement