Почему моя программа умножения матриц с использованием C не работает? - PullRequest
0 голосов
/ 29 сентября 2019

Я написал программу для вычисления умножения матрицы . Я принимаю пользовательские данные, чтобы определить размер массива и содержащиеся в нем элементы. (Мои знания по программированию следует рассматривать как начинающие). Когда явыполнить программу, она печатает нулевой массив.Когда я тестировал код построчно.Я узнал, что программа работает правильно до вычисления матрицы. (Принимая пользовательский ввод и вызывая функцию).Я не мог найти источник проблемы.Я включил часть кода, которая содержит функцию умножения.

#include <stdio.h>
#define MAX 100
void matrix_mul(int, int, int, int, int [MAX][MAX], int [MAX][MAX]);

int main()
{

int mat_1[MAX][MAX] ,mat_2[MAX][MAX];
int row1, row2, column1, column2;

printf("Input number of rows for the first matrix:  ");
scanf("%d", &row1);
printf("Input number of columns for the first matrix:  ");
scanf("%d", &column1);

printf("Input number of rows for the second matrix:  ");
scanf("%d", &row2);
printf("Input number of columns for the second matrix:  ");
scanf("%d", &column2);

if(column1 != row2 || column2 != row1)
{
    printf("Incompatible matrices. Try Again! ");
    return 0;
}

printf("Enter elements for matrix 1 of order %d x %d\n", row1, column1);

for(int i=0; i<row1; i++)
{
    for(int j=0; j<column1; j++)
        scanf("%d", &mat_1[i][j]);
}

printf("\n\nEnter elements for matrix 1 of order %d x %d\n", row2, column2);

for(int i=0; i<row2; i++)
{
    for(int j=0; j<column2; j++)
        scanf("%d", &mat_2[i][j]);
}
 matrix_mul(row1, row2, column1, column2, mat_1, mat_2);

}

// for testing r1 = 3 c1 =2 r2 =2 c2 =3
void matrix_mul(int row1, int row2, int column1, int column2, int ar1[MAX][MAX], int ar2[MAX][MAX])
{

    int arr [MAX][MAX]; 

    for(int i=0 ; i<row1; i++)
    {

        for(int j=0; j<column2; j++)
        {
            int sum = 0;
            for(int k=0; k<column1; k++)
                sum += ar1[row1][k] * ar2[column1][row1];
            printf("%d", sum);
            arr[row1][column2] = sum;
        }
    }

    for(int i=0; i<row1; i++)
    {
        for(int j=0; j<column2; j++)
            printf("%d ", arr[i][j]);
        printf("\n");
    }

}

1 Ответ

1 голос
/ 29 сентября 2019

Вы смешиваете значения вашего цикла с вашими границами.Вот исправленные версии соответствующих строк:

            sum += ar1[i][k] * ar2[k][j];
        arr[i][j] = sum;

Вы видите 88888 вместо 8, потому что вы оставили оператор отладки в:

printf("%d", sum);

Удалите это, и вы увидите только правильный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...