Умножение матриц (не работает для неквадратных матриц) - 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");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д