Advertisement
Infidelis

Max's Matrixes

Mar 28th, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h> //Добавил две билиотеки
  3. #include <conio.h>
  4.  
  5. typedef struct Matrix {
  6.     int **data;
  7.     int row;
  8.     int colomn;
  9. } matrix;
  10.  
  11. void init_size(matrix *A, matrix *B) {
  12.     printf("Enter the amount of rows of matrix A: ");
  13.     scanf_s("%d", &(*A).row);
  14.     printf("Enter the amount of colomns of matrix A: ");
  15.     scanf_s("%d", &(*A).colomn);
  16.     printf("Enter the amount of rows of matrix B: ");
  17.     scanf_s("%d", &(*B).row);
  18.     printf("Enter the amount of colomns of matrix B: ");
  19.     scanf_s("%d", &(*B).colomn);
  20. }
  21.  
  22. void create_matrix(matrix *A, matrix *B, matrix *C) {
  23.     (*A).data = (int**)malloc((*A).row * sizeof(int*));
  24.     for (int i = 0; i < (*A).row; i++) {
  25.         (*A).data[i] = (int*)malloc((*A).colomn * sizeof(int));
  26.     }
  27.     (*B).data = (int**)malloc((*B).row * sizeof(int*));
  28.     for (int j = 0; j < (*B).row; j++) {
  29.         (*B).data[j] = (int*)malloc((*B).colomn * sizeof(int));
  30.     }
  31.     printf("A: \n");
  32.     for (int i = 0; i < (*A).row; i++) {
  33.         for (int j = 0; j < (*A).colomn; j++) {
  34.             (*A).data[i][j] = rand() % 100;
  35.             printf("%d ", (*A).data[i][j]);
  36.         }
  37.         printf("\n");
  38.     }
  39.     printf("B: \n");
  40.     for (int i = 0; i < (*B).row; i++) {
  41.         for (int j = 0; j < (*B).colomn; j++) {
  42.             (*B).data[i][j] = rand() % 100;
  43.             printf("%d ", (*B).data[i][j]);
  44.         }
  45.         printf("\n");
  46.     }
  47.     (*C).row = (*A).row;
  48.     (*C).colomn = (*B).colomn;
  49.     (*C).data = (int**)malloc((*C).row * sizeof(int*));
  50.     for (int i = 0; i < (*C).row; i++) {
  51.         (*C).data[i] = (int*)malloc((*C).colomn * sizeof(int));
  52.     }
  53. }
  54.  
  55. matrix* mult(matrix *A, matrix *B, matrix *C) {    //Изменил тип функции на matrix* с int**
  56.     if ((*A).colomn != (*B).row) {
  57.         printf("\nError");
  58.         return 0;
  59.     }
  60.     for (int m = 0; m < (*C).row; m++) {
  61.         for (int n = 0; n < (*C).colomn; n++) {
  62.             (*C).data[m][n] = 0;
  63.             for (int k = 0; k < (*A).colomn; k++) {
  64.                 (*C).data[m][n] += (*A).data[m][k] * (*B).data[k][n];
  65.             }
  66.         }
  67.     }
  68.     return C; //функция должна вернуть указатель типа матрицы => тут просто С
  69. }
  70.  
  71. void show_result(matrix *C) {
  72.     printf("C: \n");
  73.     for (int i = 0; i < (*C).row; i++) {
  74.         for (int j = 0; j < (*C).colomn; j++) {
  75.             printf("%d ", (*C).data[i][j]);
  76.         }
  77.         printf("\n");
  78.     }
  79. }
  80.  
  81. void free_memory(matrix *A, matrix *B, matrix *C) {
  82.     for (int i = 0; i < (*A).row; i++) {
  83.         free((*A).data[i]);
  84.     }
  85.     free((*A).data);
  86.     for (int i = 0; i < (*A).row; i++) {
  87.         free((*B).data[i]);
  88.     }
  89.     free((*B).data);
  90.     for (int i = 0; i < (*C).row; i++) {
  91.         free((*C).data[i]);
  92.     }
  93.     free((*C).data);
  94.     printf("\nThe memory was cleaned");
  95. }
  96.  
  97. int main() {
  98.     matrix A, B, C;
  99.     init_size(&A, &B);
  100.     create_matrix(&A, &B, &C);
  101.     matrix *X = mult(&A, &B, &C);
  102.     if (X != NULL) {
  103.         show_result(X);
  104.     }
  105.     free_memory(&A, &B, &C);
  106.     _getch(); //В conio.h теперь на писать getch(); с нижним подчеркиванием
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement