Умножение матриц произвольного размера - 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");
}

Объяснение кода листинга программы

Код выполняет умножение двух матриц. Список действий:

  1. Ввод размеров матриц и значений матрицы digitmas1.
  2. Ввод размеров матриц и значений матрицы digitmas2.
  3. Создание и заполнение нулями результирующей матрицы resultmas.
  4. Ввод значений матрицы digitmas1 и digitmas2.
  5. Умножение элементов матриц и запись результата в результирующую матрицу.
  6. Вывод результирующей матрицы. Ошибки и проверка на них:
  7. Проверка на некорректные данные (размеры матриц не совпадают).
  8. Проверка на некорректные данные (невозможность выделения памяти под матрицы). Примечание: в коде присутствуют ошибки (некорректный ввод размеров матриц и заполнение матрицы), которые приводят к неопределенному поведению программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы