Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <malloc.h>
- #define _CRT_SECURE_NO_WARNINGS
- #pragma warning(disable : 4996)
- void PrintMatr(int* mas, int m);
- int Determinant(int* mas, int m);
- void GetMatr(int* mas, int* p, int i, int j, int m);
- int main() {
- setlocale(LC_ALL, "");
- int m, i, j, d;
- int *mas;
- printf("Введите размерность квадратной матрицы: ");
- scanf("%d", &m);
- mas = (int*)malloc(m*m * sizeof(int));
- for (i = 0; i < m; i++)
- {
- for (j = 0; j < m; j++)
- {
- printf("mas[%d][%d] = ", i, j);
- scanf("%d", (mas + i * m + j));
- }
- }
- PrintMatr(mas, m);
- d = Determinant(mas, m);
- printf("Определитель матрицы равен: %d", d);
- return 0;
- }
- void PrintMatr(int* mas, int m) {
- int i, j;
- for (i = 0; i < m; i++)
- {
- for (j = 0; j < m; j++)
- {
- printf("%5d", *(mas + i * m + j), " ");
- }
- printf("\n");
- }
- }
- int Determinant(int* mas, int m) {
- int i, j, d, k, n;
- int* p;
- p = (int*)malloc(m * m * sizeof(int));
- j = 0; d = 0; k = 1;
- n = m - 1;
- if (m < 1) printf("Определитель вычислить невозможно!");
- if (m == 1)
- {
- d = *(mas);
- return d;
- }
- if (m == 2)
- {
- d = (*(mas)) * (*(mas + 1 * m + 1)) - (*(mas + 1 * m)) * (*(mas + 1));
- return d;
- }
- if (m > 2)
- {
- for (i = 0; i < m; i++)
- {
- GetMatr(mas, p, i, 0, m);
- printf("%d\n", *(mas + i * m + j));
- PrintMatr(p, n);
- d = d + k * (*(mas + i * m)) * Determinant(p, n);
- k = -k;
- }
- }
- return d;
- }
- void GetMatr(int* mas, int* p, int i, int j, int m) {
- int ki, kj, di, dj;
- di = 0;
- for (ki = 0; ki < m - 1; ki++)
- {
- if (ki == i)di = 1;
- dj = 0;
- for (kj = 0; kj < m - 1; kj++)
- {
- if (kj == j)dj = 1;
- *(p + ki * (m - 1) + kj) = *(mas + (ki + di) * (m) + (kj + dj));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement