Создать процедуру, перемножающую две матрицы по правилам матричного умножения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Создать процедуру, перемножающую две матрицы по правилам матричного умножения. Предусмотреть случай, когда размеры матриц заданы некорректно.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
                // прототипы функций
 
void vorm_mass(int pp, int yy,  int mass[pp][yy]);
void multi (int pp, int yy, int aa, int bb, int mass[pp][yy], int massf [aa][bb]);
 
int main()
{
    int i, j,   p,  a, b, y;
 
    printf("\nEnter the number of lines matrix A:");
    scanf("%d", &p);
    printf("\nEnter the number of columns matrix A:");
    scanf("%d", &y);
    printf("\nEnter the number of lines matrix B:");
    scanf("%d", &a);
    printf("\nEnter the number of columns matrix B:");
    scanf("%d", &b);

    int massiv[p][y];
    int massivf[a][b];
 
    printf("\nInitial array A:\n");
 
   vorm_mass(p, y,  massiv);
 
    for (i=0; i<p; i++)
    {
        for (j=0; j<y; j++)
            printf("%5d", massiv[i][j]);
        printf("\n");
    }
 
    printf("\n");
    printf("\nInitial array B:\n");
 
    vorm_mass(a, b,  massivf);
 
    for (i=0; i<a; i++)
    {
        for (j=0; j<b; j++)
            printf("%5d", massivf[i][j]);
        printf("\n");
    }
 
    printf("\n");
    if (y==a)
        {
 
    multi (p, y, a, b, massiv, massivf);
 
    }
    else printf("\nMatrices can not be multiplied");

    return 0;
}
                    //описание функций
 
                    // 1. формирование массива
void vorm_mass(int pp, int yy,  int mass[pp][yy])
{
    int i, j;
    time_t t;       // текущее время для инициализации
                    // генератора случайных чисел
 
    srand((unsigned) time(&t)); // инициализация генератора
                                // случайных чисел

    for (i=0; i<pp; i++)
        for (j=0; j<yy; j++)
            mass[i][j]=rand()% 100;
}

void multi(int pp, int yy, int aa, int bb, int mass[pp][yy], int massf [aa][bb])
 
{
    int i, j, k, r, e;
    int mu[r][e];
 
    for (i=0;i<pp; i++){
        for(j=0; j<bb;j++)
    {mu[i][j]=0;
 
        for (k=0; k<yy; k++)
            mu[i][j] += mass[pp][k]*massf[k][bb];
 
    }}
    printf("\nMultiplication of the matrix A and B:\n");
 
    for (i=0;i<pp; i++){
        for(j=0; j<bb;j++)
            printf("%5d", mu[i][j]);
        printf("\n");
 
        }
}
Не выдает матрицу

Решение задачи: «Создать процедуру, перемножающую две матрицы по правилам матричного умножения»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
 
                // прототипы функций
 
void vorm_mass(int pp, int yy,  int mass[pp][yy]);
void multi (int pp, int yy, int aa, int bb, int mass[pp][yy], int massf [aa][bb]);
 
int main()
{
    int i, j,   p,  a, b, y, ii, jj;
 
 
 
    printf("\nEnter the number of lines matrix A:");
    scanf("%d", &p);
    printf("\nEnter the number of columns matrix A:");
    scanf("%d", &y);
    printf("\nEnter the number of lines matrix B:");
    scanf("%d", &a);
    printf("\nEnter the number of columns matrix B:");
    scanf("%d", &b);
 
 
 
    int massiv[p][y];
    int massivf[a][b];
 
    printf("\nInitial array A:\n");
 
   vorm_mass(p, y,  massiv);
 
    for (i=0; i<p; i++)
    {
        for (j=0; j<y; j++)
            printf("%5d", massiv[i][j]);
        printf("\n");
    }
 
    printf("\n");
    printf("\nInitial array B:\n");
 
    vorm_mass(a, b,  massivf);
 
    for (ii=0; ii<a; ii++)
    {
        for (jj=0; jj<b; jj++)
            printf("%5d", massivf[ii][jj]);
        printf("\n");
    }
 
    printf("\n");
    if (y==a)
        {
 
    multi (i, j, ii, jj, massiv, massivf);
 
    }
    else printf("\nMatrices can not be multiplied");
 
 
    return 0;
}
 
void vorm_mass(int pp, int yy,  int mass[pp][yy])
{
    int i, j;
    time_t t;
 
    srand((unsigned) time(&t));
 
    for (i=0; i<pp; i++)
        for (j=0; j<yy; j++)
            mass[i][j]=rand()% 10;
}
 
 
 
void multi(int pp, int yy, int aa, int bb, int mass[pp][yy], int massf [aa][bb])
 
{
    int i, j, k;
    int mu[0][0];
 
    for (k=0;k<pp; k++)
        {
        for(j=0; j<bb;j++)
    {mu[k][j]=0;
 
        for (i=0; i<yy; i++)
            mu[k][j] += mass[k][j]*massf[i][j];
 
    }}
    printf("\nMultiplication of the matrix A and B:\n");
 
    for (i=0;i<pp; i++)
        {
        for(j=0; j<bb;j++)
            printf("%5d", mu[i][j]);
        printf("\n");
 
        }
}

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

8   голосов , оценка 3.875 из 5