Умножение матриц (не работает для неквадратных матриц) - C (СИ)

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

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

Доброго времени суток. Написал код для перемножения двух матриц. При вводе квадратной матрицы всё работает нормально. При вводе матриц с разным количеством столбцов, т.е. 3x2 и 2x3 например, программа вылетает, при этом выдает правильный ответ. Видимо выход за границы массива. Помогите доработать. Заранее спасибо.
#include <stdio.h> 
#include <stdlib.h> 
int vvod(int **a, int m, int n){ 
int i,j; 
{ 
for ( i=0;i<m;i++) 
for ( j=0;j<n;j++) 
{ 
a[i][j]=rand()%25-5; 

}}} 
 
int vivod(int **a, int m, int n){ 
int i,j; 
for ( i=0;i<m;i++){ 
 
for ( j=0;j<n;j++) 
{ 
printf("%4d\t",a[i][j]); 
 
} 
printf("\n");} 
} 
 
//int rogueone(int **c,int **b,int **a,int i,int j ,int k) 
//{ 
//c[i][j] += a[i][k] * b[k][j]; 
//} 
 
int main(void) 

{ 
 
int **a,**b,**c,h,k,z,x,i,j,m,n,co; 
 
printf("Enter Matrix 1\n"); 
 
scanf("%d",&m); 
scanf("%d",&n); 
scanf("Enter Matrix 2\n"); 
scanf("%d %d",&z,&x); 
if(n!=z){ 
system("pause"); return 0;} 
 
a=(int**)malloc(m*sizeof(int*)); 
b=(int**)malloc(z*sizeof(int*)); 
c=(int**)malloc(m*sizeof(int*)); 
for (i=0;i<m;i++) 

{ a[i]=(int*)malloc(n*sizeof(int)); 

} 
for (i=0;i<m;i++) 

{ b[i]=(int*)malloc(x*sizeof(int)); 

} 
for (i=0;i<m;i++) 
{ c[i]=(int*)malloc(x*sizeof(int)); 
} 
 
vvod(a,m,n); 
vivod(a,m,n); 
printf("\n\n"); 
vvod(b,z,x); 
vivod(b,z,x); 
printf("\n\n"); 

for(i = 0; i < m; i++) 
for(j = 0; j < x; j++) 
{ 
co=0;
for(k = 0; k < z; k++) 
{ 
co+=a[i][k]*b[k][j];
c[i][j]=co;
 
//rogueone(c,b,a,i,j,k); 
 
} 
} 
vivod(c,m,x); 
for( i=0;i<m;i++)

      {   
       free(a[i]);

      }
    for( i=0;i<z;i++)

      {   
       free(b[i]);

      }
    for( i=0;i<m;i++)

      {   
       free(c[i]);

      }
    
free(a); 
free(b); 
free(c); 
system("pause"); 
return 0; 
}

Решение задачи: «Умножение матриц (не работает для неквадратных матриц)»

textual
Листинг программы
scanf("Enter Matrix 2\n");

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


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

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

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