Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. using namespace std;
  4. double M01(double **A);
  5. double M02(double **A);
  6.  
  7. int main()
  8. {
  9. double A[4][4] = { {1,2,3,4},{5,6,7,8},{9,1,5,3},{2,2,9,8} };
  10.  
  11. //объявляем массив строк
  12. double **arr = (double**)calloc(4, sizeof(double*));
  13.  
  14. //объявляем строки
  15. for (int i = 0; i < 4; i++)
  16. {
  17. arr[i] = (double*)calloc(4, sizeof(double));
  18. }
  19.  
  20. //заполняем динамический массив
  21. for (int i = 0; i < 4; i++)
  22. {
  23. for (int j = 0; j < 4; j++)
  24. {
  25. arr[i][j] = A[i][j];
  26. }
  27. }
  28.  
  29. //запускаем функцию
  30. double det = M02(arr);
  31.  
  32. //чистим данные строк
  33. for (int i = 0; i < 4; i++)
  34. {
  35. arr[i] = (double*)malloc (4 * sizeof(double));
  36. }
  37.  
  38. //чистим данные массива строк
  39. arr = (double**)malloc(4 * sizeof(double*));
  40.  
  41. cout << det << endl;
  42.  
  43. return 0;
  44. }
  45.  
  46. double M01(double **A)
  47. {
  48. double sum = 0;
  49. 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];
  50. 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];
  51. return sum;
  52. }
  53.  
  54. double M02(double **A)
  55. {
  56. //tmp - массив для вычисления миноров 3 на 3
  57. //minor - значение отдельных миноров
  58. //det - детерминант отдельных строк
  59. double **tmp, minor, det = 0;
  60.  
  61. //легковычисляемые det 4 и 1 строки
  62. tmp = A; minor = M01(tmp); det += A[3][3] * minor;
  63.  
  64. tmp = A + 1; minor = M01(tmp); det -= A[0][3] * minor;
  65.  
  66. //перемещаем указатель на безопасное место
  67. tmp = A + 4;
  68. //вычисление det 2 и 3 строки, и тут ошибка
  69. tmp[0] = A[0]; tmp[1] = A[2]; tmp[2] = A[3];
  70. minor = M01(tmp); det += A[1][3] * minor;
  71.  
  72. tmp[0] = A[0]; tmp[1] = A[1]; tmp[2] = A[3];
  73. minor = M01(tmp); det -= A[2][3] * minor;
  74.  
  75. return det;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement