snazim sa spravit program na dvoch nasobenie matic. Mam to robene tak , ze polia mam dynamicky alokovane , len akosi som sa domotal v smernikoch a uz som aj jemne zufali :-P
vid:
/*
[C]m,n=[A]m,p X [B]p,n
*/
#include <stdio.h>
#include <stdlib.h>
int **MatrixProduct(int **A,int **B, int m, int n, int p);
int **NacitajMaticu(int m, int n, char ozn);
void VypisMaticu(int **A, int m, int n);
main()
{
int **A,**B,**C,m,n,p;
printf("Zadajte rozmer m,n,p >> ");
scanf("%d,%d,%d",&m,&n,&p);
A = NacitajMaticu(m,p,'A');
printf("\n");
B = NacitajMaticu(p,n,'B');
C = MatrixProduct(A,B,m,n,p);
printf("----------------------- matrix A\n");
VypisMaticu(A,m,p);
printf("----------------------- matrix B\n");
VypisMaticu(B,p,n);
printf("----------------------- matrix C\n");
VypisMaticu(C,m,n);
}
int **MatrixProduct(int **A,int **B, int m, int n, int p)
{
int i,j,k;
int **C = (int**)calloc(m,sizeof(int));
for(i=0;i<m;i++)
C[i] = (int *)calloc(n,sizeof(int));
for(i=0; i<m; i++)
for(j=0;j<n;j++)
*(C+(i*n)+j) = 0;
for(i=0; i<m; i++)
for(j=0;j<n;j++)
for(k=0;k<p;k++)
*(C+(i*n)+j) += *(A+(i*p)+k) * *(B+(k*n)+j);
return C;
}
int **NacitajMaticu(int m,int n, char ozn )
{
int i,j;
int **A = (int**)calloc(m,sizeof(int));
for(i=0;i<m;i++)
A[i] = (int *)calloc(n,sizeof(int));
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("Zadajte prvok matice %c[%d][%d]",ozn,i,j);
scanf("%d",(A+(i*n)+j));
}
return A;
}
void VypisMaticu(int **A, int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("\t%d",*(A+(i*n)+j));
}
printf("\n");
}
}
Ak by mi niekto povedal co robim zle tak by som bol velmi vdacny
pridavam upravenu funkciu
int **MatrixProduct(int **A,int **B, int m, int n, int p)
{
int i,j,k,a,b,c=0;
int **C = (int**)calloc(m,sizeof(int *));
for(i=0;i<m;i++)
C[i] = (int *)calloc(n,sizeof(int));
for(i=0; i<m; i++)
for(j=0;j<n;j++)
{
for(k=0;k<p;k++)
{ a = *(A+(i*p)+k);
b = *(B+(k*n)+j);
c = c + (a * b);
printf("%d %d %d \n",a,b,c);
}
*(C+(i*n)+j) = c;
c = 0;
}
return C;
}