Advertisement
Merso1913

dynamic_matrix

Nov 14th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. int main() {
  5.     int a, b;
  6.     printf("Введите размер матрицы A(nxn):\n");              //scaning dimensions
  7.     scanf("%d", &a);
  8.     printf("Введите размер матрицы B(nxn):\n");              //scaning dimensions
  9.     scanf("%d", &b);
  10.  
  11.     double** A;                                     //initing matrixes
  12.     double** B;
  13.     A = (double**)malloc(a * sizeof(double*));
  14.     B = (double**)malloc(b * sizeof(double*));
  15.     for (int i = 0; i < a; ++i) {
  16.         A[i] = (double*)malloc(a * sizeof(double));
  17.     }
  18.     for (int i = 0; i < b; ++i) {
  19.         B[i] = (double*)malloc(b * sizeof(double));
  20.     }
  21.  
  22.     while (a != b || a <= 0 || b <= 0) {
  23.         printf("Для заданных размеров операция невозможна!\n");
  24.         printf("Введите размер матрицы A(nxn) еще раз:\n");              //scaning dimensions
  25.         scanf("%d", &a);
  26.         printf("Введите размер матрицы B(nxn) еще раз:\n");              //scaning dimensions
  27.         scanf("%d", &b);
  28.     }
  29.  
  30.  
  31.     printf("Введите матрицу A:\n");         //scaning matrix values
  32.     for (int i = 0; i < a; ++i) {
  33.         for (int j = 0; j < a; ++j) {
  34.             scanf("%lf", &A[i][j]);
  35.         }
  36.     }
  37.     printf("Введите матрицу B:\n");      //scaning matrix values
  38.     for (int i = 0; i < b; ++i) {
  39.         for (int j = 0; j < b; ++j) {
  40.             scanf("%lf", &B[i][j]);
  41.         }
  42.     }
  43.  
  44.  
  45.     double** C;                                     //initing resulting matrix
  46.     C = (double**)malloc(a * sizeof(double*));
  47.     for (int i = 0; i < b; ++i) {
  48.         C[i] = (double*)malloc(b * sizeof(double));
  49.     }
  50.  
  51.  
  52.     for (int i = 0; i < a; ++i){       //multiplying and summing A*B
  53.         for (int j = 0; j < b; ++j) {
  54.             C[i][j] = 0;
  55.             for (int k = 0; k < a; ++k) {
  56.                 C[i][j] += A[i][k] * B[k][j];
  57.             }
  58.         }
  59.     }
  60.  
  61.     for (int i = 0; i < b; ++i){       //multiplying and summing - B*A
  62.         for (int j = 0; j < a; ++j) {
  63.             for (int k = 0; k < b; ++k) {
  64.                 C[i][j] -= B[i][k] * A[k][j];
  65.             }
  66.         }
  67.     }
  68.  
  69.  
  70.     printf("\nПолучите ответ:\n");             //printing answer
  71.     for (int i = 0; i < a; ++i) {
  72.         for (int j = 0; j < a; ++j) {
  73.             printf("%lf ", C[i][j]);
  74.         }
  75.         printf("\n");
  76.     }
  77.  
  78.  
  79.     for (int i = 0; i < a; ++i) {                   //deleting
  80.         free(A[i]);
  81.         free(B[i]);
  82.         free(C[i]);
  83.     }
  84.     free(A);
  85.     free(B);
  86.     free(C);
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement