Directory: | ./ |
---|---|
File: | s21_calc_complements.c |
Date: | 2025-08-15 23:01:21 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 38 | 38 | 100.0% |
Branches: | 24 | 24 | 100.0% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "s21_matrix.h" | ||
2 | |||
3 | void s21_calc_complements_n_greater_1(matrix_t *A, matrix_t *result); | ||
4 | double s21_calc_minor(matrix_t *A, int row, int col, matrix_t *temp); | ||
5 | void s21_calc_minor_matrix(matrix_t *A, int row, int col, matrix_t *temp); | ||
6 | |||
7 | 24 | int s21_calc_complements(matrix_t *A, matrix_t *result) { | |
8 |
4/4✓ Branch 1 taken 22 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 20 times.
|
24 | if (s21_check_matrix_is_invalid(A) || result == NULL) { |
9 | 4 | return ERROR; | |
10 | } | ||
11 | |||
12 | 20 | int code = OK; | |
13 |
2/2✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2 times.
|
20 | if (A->columns == A->rows) { |
14 | 18 | s21_create_matrix(A->rows, A->columns, result); | |
15 | |||
16 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 16 times.
|
18 | if (A->columns == 1) { |
17 | 2 | result->matrix[0][0] = A->matrix[0][0]; | |
18 | } else { | ||
19 | 16 | s21_calc_complements_n_greater_1(A, result); | |
20 | } | ||
21 | } else { | ||
22 | 2 | code = CALC_ERROR; | |
23 | } | ||
24 | |||
25 | 20 | return code; | |
26 | } | ||
27 | |||
28 | 16 | void s21_calc_complements_n_greater_1(matrix_t *A, matrix_t *result) { | |
29 | matrix_t temp; | ||
30 | 16 | s21_create_matrix(A->rows - 1, A->columns - 1, &temp); | |
31 | |||
32 | 16 | int multiplier = 1; | |
33 |
2/2✓ Branch 0 taken 48 times.
✓ Branch 1 taken 16 times.
|
64 | for (int i = 0; i < result->rows; i++) { |
34 |
2/2✓ Branch 0 taken 152 times.
✓ Branch 1 taken 48 times.
|
200 | for (int j = 0; j < result->rows; j++) { |
35 | 152 | result->matrix[i][j] = multiplier * s21_calc_minor(A, i, j, &temp); | |
36 | 152 | multiplier *= -1; | |
37 | } | ||
38 | |||
39 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 24 times.
|
48 | if (result->rows % 2 == 0) { |
40 | 24 | multiplier *= -1; | |
41 | } | ||
42 | } | ||
43 | |||
44 | 16 | s21_remove_matrix(&temp); | |
45 | 16 | } | |
46 | |||
47 | 152 | double s21_calc_minor(matrix_t *A, int row, int col, matrix_t *temp) { | |
48 | 152 | s21_calc_minor_matrix(A, row, col, temp); | |
49 | |||
50 | double result; | ||
51 | 152 | s21_determinant(temp, &result); | |
52 | |||
53 | 152 | return result; | |
54 | } | ||
55 | |||
56 | 152 | void s21_calc_minor_matrix(matrix_t *A, int row, int col, matrix_t *temp) { | |
57 | 152 | int temp_i = 0; | |
58 | 152 | int temp_j = 0; | |
59 |
2/2✓ Branch 0 taken 504 times.
✓ Branch 1 taken 152 times.
|
656 | for (int i = 0; i < A->rows; i++) { |
60 | 504 | temp_j = 0; | |
61 |
4/4✓ Branch 0 taken 1384 times.
✓ Branch 1 taken 352 times.
✓ Branch 2 taken 1232 times.
✓ Branch 3 taken 152 times.
|
1736 | for (int j = 0; j < A->columns && i != row; j++) { |
62 |
2/2✓ Branch 0 taken 880 times.
✓ Branch 1 taken 352 times.
|
1232 | if (j != col) { |
63 | 880 | temp->matrix[temp_i][temp_j] = A->matrix[i][j]; | |
64 | 880 | temp_j++; | |
65 | } | ||
66 | } | ||
67 | |||
68 |
2/2✓ Branch 0 taken 352 times.
✓ Branch 1 taken 152 times.
|
504 | if (i != row) { |
69 | 352 | temp_i++; | |
70 | } | ||
71 | } | ||
72 | 152 | } | |
73 |