Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- using namespace std;
- double M01(double **A);
- double M02(double **A);
- int main()
- {
- double A[4][4] = { {1,2,3,4},{5,6,7,8},{9,1,5,3},{2,2,9,8} };
- //объявляем массив строк
- double **arr = (double**)calloc(4, sizeof(double*));
- //объявляем строки
- for (int i = 0; i < 4; i++)
- {
- arr[i] = (double*)calloc(4, sizeof(double));
- }
- //заполняем динамический массив
- for (int i = 0; i < 4; i++)
- {
- for (int j = 0; j < 4; j++)
- {
- arr[i][j] = A[i][j];
- }
- }
- //запускаем функцию
- double det = M02(arr);
- //чистим данные строк
- for (int i = 0; i < 4; i++)
- {
- arr[i] = (double*)malloc (4 * sizeof(double));
- }
- //чистим данные массива строк
- arr = (double**)malloc(4 * sizeof(double*));
- cout << det << endl;
- return 0;
- }
- double M01(double **A)
- {
- double sum = 0;
- sum = A[0][0] * A[1][1] * A[2][2] + A[0][1] * A[1][2] * A[2][0] + A[0][2] * A[1][0] * A[2][1];
- sum -= A[0][2] * A[1][1] * A[2][0] + A[0][0] * A[1][2] * A[2][1] + A[0][1] * A[1][0] * A[2][2];
- return sum;
- }
- double M02(double **A)
- {
- //tmp - массив для вычисления миноров 3 на 3
- //minor - значение отдельных миноров
- //det - детерминант отдельных строк
- double **tmp, minor, det = 0;
- //легковычисляемые det 4 и 1 строки
- tmp = A; minor = M01(tmp); det += A[3][3] * minor;
- tmp = A + 1; minor = M01(tmp); det -= A[0][3] * minor;
- //перемещаем указатель на безопасное место
- tmp = A + 4;
- //вычисление det 2 и 3 строки, и тут ошибка
- tmp[0] = A[0]; tmp[1] = A[2]; tmp[2] = A[3];
- minor = M01(tmp); det += A[1][3] * minor;
- tmp[0] = A[0]; tmp[1] = A[1]; tmp[2] = A[3];
- minor = M01(tmp); det -= A[2][3] * minor;
- return det;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement