Создать процедуру, перемножающую две матрицы по правилам матричного умножения - 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");
}
}