Умножение матриц произвольного размера - C (СИ)
Формулировка задачи:
Доброго времени суток.Нужно написать вот это Написать функцию для умножения матриц произвольного размера. размеры матриц передавать в параметрах и контролировать их корректность. Имеется вот это помогите сделать пожалуйста
# include "stdafx.h" # include <stdio.h> # include <Windows.h> # include <conio.h> int result( int size11, int size12, int size21, int size22, int resultmas[100][100]) { int i=0; // ввод массивов int N; int j=0; int digitmas1[100][100]; int digitmas2[100][100]; printf("---------------------\nвведите первый массив\n"); for (i=0; i<size12; i++) for (j=0; j< size11; j++) scanf("%d", & digitmas1[i][j]); printf("---------------------\nвведите второй массив\n"); for (i=0; i<size22; i++) for (j=0; j< size21; j++) scanf("%d", & digitmas2[i][j]); int u=0; for (i=0; i<size12; i++) // заполнение результирующего массива for (j=0; j<size11; j++) for (u=0; u<size11; u++) resultmas[i][j]=resultmas[i][j]+(digitmas1[i][u]*digitmas2[u][j]); return 0; } void main (void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); int size11; // ввод размерности массива int size12; int size21; int size22; printf("введите количество столбцов первой матрицы: "); scanf("%d", &size11); printf("введите количество строк первой матрицы: "); scanf("%d", &size12); printf("введите количество столбцов второй матрицы: "); scanf("%d", &size21); printf("введите количество строк второй матрицы: "); scanf("%d", &size22); if (size11!=size22||size12!=size21) { printf("некорректные данные\n"); exit(1); } int i; int j; int N; int u; // создание и обнуление массива int resultmas[100][100]; for (i=0; i<100; i++) for (j=0; j<100; j++) resultmas[i][j]=0; result(size11, size12, size21, size22, resultmas); printf("\n результат умножения матриц\n"); printf("------------------------------------------------------------------\n"); for (i=0; i<size12; i++) //вывод результата { for (j=0; j<size21; j++) printf("%10d", resultmas[i][j]); printf("\n"); } printf("------------------------------------------------------------------\n"); getch(); }
Решение задачи: «Умножение матриц произвольного размера»
textual
Листинг программы
#include "stdafx.h" #include <stdio.h> #include <Windows.h> #include <malloc.h> void result( int n, int m, int **resultmas) { int i=0; // ввод массивов int N; int j=0; int **digitmas1 = (int**)malloc(n * sizeof(int*)); for (i = 0; i < n; ++i) digitmas1[i] = (int*)malloc(m * sizeof(int)); int **digitmas2 = (int**)malloc(n * sizeof(int*)); for (i = 0; i < n; ++i) digitmas2[i] = (int *)malloc(m * sizeof(int)); printf("---------------------\nвведите первый массив\n"); for (i=0; i<n; i++) for (j=0; j< m; j++) scanf("%d", &digitmas1[i][j]); printf("---------------------\nвведите второй массив\n"); for (i=0; i<n; i++) for (j=0; j< m; j++) scanf("%d", &digitmas2[i][j]); int u=0; for (i=0; i<n; i++) // заполнение результирующего массива for (j=0; j<m; j++) for (u=0; u<m; u++) resultmas[i][j] = resultmas[i][j]+(digitmas1[i][u] * digitmas2[u][j]); return 0; } void main (void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); int size11; // ввод размерности массива int size12; int size21; int size22; printf("введите количество столбцов первой матрицы: "); scanf("%d", &size11); printf("введите количество строк первой матрицы: "); scanf("%d", &size12); printf("введите количество столбцов второй матрицы: "); scanf("%d", &size21); printf("введите количество строк второй матрицы: "); scanf("%d", & size22); if (size11!=size22||size12!=size21) { printf("некорректные данные\n"); exit(1); } int i; int j; int N; int u; // создание и обнуление массива int **resultmas = (int**)malloc(size12 * sizeof(int*)); for (i = 0; i < size12; ++i) *resultmas = (int*)malloc(size11 * sizeof(int)); for (i=0; i<size12; i++) for (j=0; j<size11; j++) resultmas[i][j]=0; result(size12, size11, resultmas); printf("\n результат умножения матриц\n"); printf("------------------------------------------------------------------\n"); for (i=0; i<size12; i++) //вывод результата { for (j=0; j<size11; j++) printf("%10d", &resultmas[i][j]); printf("\n"); } printf("------------------------------------------------------------------\n"); }
Объяснение кода листинга программы
Код выполняет умножение двух матриц. Список действий:
- Ввод размеров матриц и значений матрицы digitmas1.
- Ввод размеров матриц и значений матрицы digitmas2.
- Создание и заполнение нулями результирующей матрицы resultmas.
- Ввод значений матрицы digitmas1 и digitmas2.
- Умножение элементов матриц и запись результата в результирующую матрицу.
- Вывод результирующей матрицы. Ошибки и проверка на них:
- Проверка на некорректные данные (размеры матриц не совпадают).
- Проверка на некорректные данные (невозможность выделения памяти под матрицы). Примечание: в коде присутствуют ошибки (некорректный ввод размеров матриц и заполнение матрицы), которые приводят к неопределенному поведению программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д