Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. #include <malloc.h>
  5.  
  6. #define _CRT_SECURE_NO_WARNINGS
  7. #pragma warning(disable : 4996)
  8.  
  9. void PrintMatr(int* mas, int m);
  10. int Determinant(int* mas, int m);
  11. void GetMatr(int* mas, int* p, int i, int j, int m);
  12.  
  13.  
  14.  
  15. int main() {
  16.     setlocale(LC_ALL, "");
  17.     int m, i, j, d;
  18.     int *mas;
  19.     printf("Введите размерность квадратной матрицы: ");
  20.     scanf("%d", &m);
  21.     mas = (int*)malloc(m*m * sizeof(int));
  22.     for (i = 0; i < m; i++)
  23.     {
  24.         for (j = 0; j < m; j++)
  25.         {
  26.             printf("mas[%d][%d] = ", i, j);
  27.             scanf("%d", (mas + i * m + j));
  28.         }
  29.     }
  30.     PrintMatr(mas, m);
  31.     d = Determinant(mas, m);
  32.     printf("Определитель матрицы равен: %d", d);
  33.  
  34.     return 0;
  35. }
  36.  
  37.  
  38.  
  39. void PrintMatr(int* mas, int m) {
  40.     int i, j;
  41.     for (i = 0; i < m; i++)
  42.     {
  43.         for (j = 0; j < m; j++)
  44.         {
  45.             printf("%5d", *(mas + i * m + j), " ");
  46.         }
  47.         printf("\n");
  48.     }
  49. }
  50.  
  51.  
  52.  
  53. int Determinant(int* mas, int m) {
  54.     int i, j, d, k, n;
  55.     int* p;
  56.     p = (int*)malloc(m * m * sizeof(int));
  57.     j = 0; d = 0; k = 1;
  58.     n = m - 1;
  59.     if (m < 1) printf("Определитель вычислить невозможно!");
  60.     if (m == 1)
  61.     {
  62.         d = *(mas);
  63.         return d;
  64.     }
  65.     if (m == 2)
  66.     {
  67.         d = (*(mas)) * (*(mas + 1 * m + 1)) - (*(mas + 1 * m)) * (*(mas + 1));
  68.         return d;
  69.     }
  70.     if (m > 2)
  71.     {
  72.         for (i = 0; i < m; i++)
  73.         {
  74.             GetMatr(mas, p, i, 0, m);
  75.             printf("%d\n", *(mas + i * m + j));
  76.             PrintMatr(p, n);
  77.             d = d + k * (*(mas + i * m)) * Determinant(p, n);
  78.             k = -k;
  79.         }
  80.     }
  81.     return d;
  82. }
  83.  
  84.  
  85.  
  86. void GetMatr(int* mas, int* p, int i, int j, int m) {
  87.     int ki, kj, di, dj;
  88.     di = 0;
  89.     for (ki = 0; ki < m - 1; ki++)
  90.     {
  91.         if (ki == i)di = 1;
  92.         dj = 0;
  93.         for (kj = 0; kj < m - 1; kj++)
  94.         {
  95.             if (kj == j)dj = 1;
  96.             *(p + ki * (m - 1) + kj) = *(mas + (ki + di) * (m) + (kj + dj));
  97.         }
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement