Умножение матриц произвольного размера - 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.
- Умножение элементов матриц и запись результата в результирующую матрицу.
- Вывод результирующей матрицы. Ошибки и проверка на них:
- Проверка на некорректные данные (размеры матриц не совпадают).
- Проверка на некорректные данные (невозможность выделения памяти под матрицы). Примечание: в коде присутствуют ошибки (некорректный ввод размеров матриц и заполнение матрицы), которые приводят к неопределенному поведению программы.