Сумма и произведение двух матриц в C (с функциями) - PullRequest
0 голосов
/ 03 ноября 2019

Я должен написать программу на C, которая находит сумму и произведение двух матриц.

Я написал функции, но застрял при вызове их в main. Я не знаю, какая переменная для строк и столбцов матрицы результатов.

#include <stdio.h>
void enterMatrix(int a[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            printf("a(%d,%d)=",i,j);
            scanf("%d",&a[i][j]);
        }
    }
}
void displayMatrix(int a[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            printf("%d", a[i][j]);
            printf(" ");
        }
        printf("\n");
    }
}
void matrixSum(int a[][10], int b[][10], int c[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            c[i][j]=a[i][j]+b[i][j];
        }
    }
}
void matrixProduct(int a[][10], int b[][10], int c[][10], int rows, int columns)
{
    int i,j,k;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            c[i][j]=0;
            for(k=0;k<columns;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }

        }
    }
}
int main(void)
{
    int a[10][10], b[10][10], sum[10][10], product[10][10];
    int rowsA,columnsA,rowsB,columnsB;
    printf("Number of rows for matrix A: \n");
    scanf("%d",&rowsA);
    printf("Number of columns for matrix A: \n");
    scanf("%d",&columnsA);
    printf("Number of rows for matrix B: \n");
    scanf("%d",&rowsB);
    printf("Number of columns for matrix B: \n");
    scanf("%d",&columnsB);
    printf("Enter first matrix: \n");
    enterMatrix(a,rowsA,columnsA);
    printf("Show first matrix: \n");
    displayMatrix(a,rowsA,columnsA);
    printf("Enter second matrix: \n");
    enterMatrix(b,rowsB,columnsB);
    printf("Show second matrix: \n");
    displayMatrix(b,rowsB,columnsB);

    if((rowsA==rowsB) && (columnsA==columnsB))
    {
        matrixSum(a,b,sum, ???, ???);
        printf("The sum matrix is: \n");
        displayMatrix(sum, ???, ???);
    }
    else
    {
        printf("Wrong information.");
    }
    if((rowsA==columnsB) && (rowsB==columnsA))
    {
        matrixProduct(a,b,product,???,???);
        printf("The product matrix is \n");
        displayMatrix(product,???,???);
    }
    return 0;
}

1 Ответ

0 голосов
/ 03 ноября 2019

Для matrixSum вы просто указываете строки A и столбцы A, так как они равны rowB и столбцам B.

Для matrixProduct вам нужны три числа: rowA, columnsA и columnsB. Строки B не нужны, так как они равны столбцам A.

Вам нужно изменить функцию matrixProduct, чтобы использовать эти три числа в правильных местах. Ваш текущий код не работает, за исключением случаев, когда все числа равны.

Также ваш тест if((rowsA==columnsB) && (rowsB==columnsA)) перед вызовом matrixProduct требует только if(rowsB==columnsA).

if((rowsA==rowsB) && (columnsA==columnsB))
{
    matrixSum(a,b,sum, rowsA, columnsA);
    printf("The sum matrix is: \n");
    displayMatrix(sum, rowsA, columnsA);  // the sum has the same dimensions as A and B
}
else
{
    printf("Both matrices don't have equal dimension.\n");
}
if(rowsB==columnsA)
{
    matrixProduct(a,b,product,rowsA,columnsA,columnsB);
    printf("The product matrix is \n");
    displayMatrix(product,rowsA,columnsB);  // the product matrix has the
       // number of rows of A and the number of columns of B
}
else
{
    printf("The number of columns of A needs to be equal to the number or rows of B.\n");
}

Ваша функция matrixProduct может быть адаптированаследующим образом:

void matrixProduct(int a[][10], int b[][10], int c[][10], int rowsA, int columnsA, int columnsB)
{
    int i,j,k;
    for(i=0;i<rowsA;i++)
    {
        for(j=0;j<columnsB;j++)
        {
            c[i][j]=0;
            for(k=0;k<columnsA;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...