Witam! Mam zadanie: wykonać na macierzach działania M1M2 i M2M1. Niestety, choć wyniki są poprawne, funkcja Mnozenie wyświetla mi jedną kolumnę za dużo, a funkcja Mnożenie2 wyświetla jeden wiersz za mało.
Co jest nie tak? Chciałabym też jeszcze wiedzieć jak wypisać wyniki powyższych funkcji używając printfa w mainie(ćwiczeniowiec się czepia).
void Mnozenie( int( * M1 )[ 3 ], int( * M2 )[ 2 ], int n, int m ) {
int i, j, k, tmp, M3[ 2 ][ 2 ];
for( i = 0; i < n; i++ )
for( j = 0; j < n; j++ )
{
tmp = 0;
for( k = 0; k < m; k++ )
tmp +=( M1[ i ][ k ] * M2[ k ][ j ] );
M3[ i ][ j ] = tmp;
}
printf( "M3 = \n" );
for( i = 0; i < n; i++ ) {
for( j = 0; j < m; j++ )
printf( "%d ", M3[ i ][ j ] );
printf( "\n" );
}
}
void Mnozenie2( int( * M2 )[ 2 ], int( * M1 )[ 3 ], int n, int m ) {
int i, j, k, tmp, M4[ 3 ][ 3 ];
for( i = 0; i < n; i++ )
for( j = 0; j < m; j++ )
{
tmp = 0;
for( k = 0; k < n; k++ )
tmp +=( M2[ i ][ k ] * M1[ k ][ j ] );
M4[ i ][ j ] = tmp;
}
printf( "M4 = \n" );
for( i = 0; i < n; i++ ) {
for( j = 0; j < m; j++ )
printf( "%d ", M4[ i ][ j ] );
printf( "\n" );
}
}
int main( int argc, char ** argv ) {
//int i,j;
int n = 2;
int m = 3;
int M1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
int M2[ 3 ][ 2 ] = { { 8, 7 }, { 6, 5 }, { 4, 3 } };
//int M3[2][2], M4[3][3];
printf( "Macierz wynikowa: \n" );
Mnozenie( M1, M2, n, m );
// printf("M3 = \n");
//for (i=0 ;i<n; i++)
//for(j=0 ;j<m ;j++)
//printf("%d \n", M3[i][j]);
Mnozenie2( M2, M1, n, m );
return 0;
}
}