Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h> //Добавил две билиотеки
- #include <conio.h>
- typedef struct Matrix {
- int **data;
- int row;
- int colomn;
- } matrix;
- void init_size(matrix *A, matrix *B) {
- printf("Enter the amount of rows of matrix A: ");
- scanf_s("%d", &(*A).row);
- printf("Enter the amount of colomns of matrix A: ");
- scanf_s("%d", &(*A).colomn);
- printf("Enter the amount of rows of matrix B: ");
- scanf_s("%d", &(*B).row);
- printf("Enter the amount of colomns of matrix B: ");
- scanf_s("%d", &(*B).colomn);
- }
- void create_matrix(matrix *A, matrix *B, matrix *C) {
- (*A).data = (int**)malloc((*A).row * sizeof(int*));
- for (int i = 0; i < (*A).row; i++) {
- (*A).data[i] = (int*)malloc((*A).colomn * sizeof(int));
- }
- (*B).data = (int**)malloc((*B).row * sizeof(int*));
- for (int j = 0; j < (*B).row; j++) {
- (*B).data[j] = (int*)malloc((*B).colomn * sizeof(int));
- }
- printf("A: \n");
- for (int i = 0; i < (*A).row; i++) {
- for (int j = 0; j < (*A).colomn; j++) {
- (*A).data[i][j] = rand() % 100;
- printf("%d ", (*A).data[i][j]);
- }
- printf("\n");
- }
- printf("B: \n");
- for (int i = 0; i < (*B).row; i++) {
- for (int j = 0; j < (*B).colomn; j++) {
- (*B).data[i][j] = rand() % 100;
- printf("%d ", (*B).data[i][j]);
- }
- printf("\n");
- }
- (*C).row = (*A).row;
- (*C).colomn = (*B).colomn;
- (*C).data = (int**)malloc((*C).row * sizeof(int*));
- for (int i = 0; i < (*C).row; i++) {
- (*C).data[i] = (int*)malloc((*C).colomn * sizeof(int));
- }
- }
- matrix* mult(matrix *A, matrix *B, matrix *C) { //Изменил тип функции на matrix* с int**
- if ((*A).colomn != (*B).row) {
- printf("\nError");
- return 0;
- }
- for (int m = 0; m < (*C).row; m++) {
- for (int n = 0; n < (*C).colomn; n++) {
- (*C).data[m][n] = 0;
- for (int k = 0; k < (*A).colomn; k++) {
- (*C).data[m][n] += (*A).data[m][k] * (*B).data[k][n];
- }
- }
- }
- return C; //функция должна вернуть указатель типа матрицы => тут просто С
- }
- void show_result(matrix *C) {
- printf("C: \n");
- for (int i = 0; i < (*C).row; i++) {
- for (int j = 0; j < (*C).colomn; j++) {
- printf("%d ", (*C).data[i][j]);
- }
- printf("\n");
- }
- }
- void free_memory(matrix *A, matrix *B, matrix *C) {
- for (int i = 0; i < (*A).row; i++) {
- free((*A).data[i]);
- }
- free((*A).data);
- for (int i = 0; i < (*A).row; i++) {
- free((*B).data[i]);
- }
- free((*B).data);
- for (int i = 0; i < (*C).row; i++) {
- free((*C).data[i]);
- }
- free((*C).data);
- printf("\nThe memory was cleaned");
- }
- int main() {
- matrix A, B, C;
- init_size(&A, &B);
- create_matrix(&A, &B, &C);
- matrix *X = mult(&A, &B, &C);
- if (X != NULL) {
- show_result(X);
- }
- free_memory(&A, &B, &C);
- _getch(); //В conio.h теперь на писать getch(); с нижним подчеркиванием
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement