Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- using namespace std;
- /*
- Определитель матрицы A=[n×n] — это алгебраическая сумма n! слагаемых, составленных следующим образом.
- */
- double **A, *B;
- ifstream devInput("H:/C Projects/Lab13/det_tests.txt", ios_base::binary);
- ifstream invInput("H:/C Projects/Lab13/inv_tests.txt", ios_base::binary);
- double eps = 0.00000001;
- void determinant(double **a, int n) {
- int i = 0, r = n, p = 1, v, j, z, k;
- double c, X = 1;
- while (i < r) {
- // выбор ведущего элемента
- v = i; // v - столбец текущего ведущего элемента
- for (j = i + 1; j < n; j++) {
- if (abs(a[j][i]) > abs(a[v][i])) v = j;
- }
- if (abs(a[v][i]) < eps) r = i;
- else {
- // перестановка строк
- if (v != i) {
- p = -p;
- swap(a[v], a[i]);
- /*for (j = i; j <= n; j++) {
- z = a[i][j];
- a[i][j] = a[v][j];
- a[v][j] = z;
- }*/
- }
- // вычитание строк матрицы
- for (k = i + 1; k < n; k++) {
- c = a[k][i] / a[i][i];
- for (j = i; j < n; j++) a[k][j] -= c * a[i][j];
- }
- i++;
- }
- }
- // вычисление определителя
- if (r < n) X = 0;
- else {
- X = p * a[0][0];
- for (i = 1; i < n; i++) X *= a[i][i];
- }
- cout << X;
- }
- int main()
- {
- devInput.seekg(8);
- int r, c; //amount of rows and collumns
- devInput >> r;
- c = r;
- // выделение памяти под матрицу
- A = new double*[r]; // задаём указатель на количество строк
- for (int i = 0; i < r; i++) {
- A[i] = new double[c];
- }
- // считываем матрицу
- for (int i = 0; i < r; i++) {
- for (int j = 0; j < c; j++) {
- devInput >> A[i][j];
- }
- }
- determinant(A, r);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement