na studiach właśnie zaczął mi się C++. Oczywiście uczenie na studiach takich rzeczy zaczyna się z grubej rury i ciężko jest cokolwiek samemu ogarnąć z wykładu. Na ćwiczeniach doktor dał za zadanie, żeby wykonać mnożenie dwóch macierzy. Znalazłem tu na forum taki program:
https://www.matematyka.pl/56375.htm
Troche go zmieniłem, dodając losowe generowanie macierzy. Mniej więcej wszystko ogarnąłem, tylko jedno jest dla mnie niezrozumiałe. Pewnie jest to cała istota tego programu Chodzi o te funkcje for co jest na początku programu mnozeniemacierzy. Co tam się dokładnie dzieje, jakby ktoś mógł mi wytłumaczyć każdą linijke. Wydaje mi się, że for użyte niżej gdzie jest też printf użyte, sprawia, że bierze po kolei każdą rubryke macierzy i wpisuje tam cyfre.
Kod: Zaznacz cały
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <ctime>
#define ILWIERSZY 2
#define ILKOLUMN 3
/* Mnozenie macierzy A * B = C */
int mnozeniemac(double A[ILWIERSZY][ILKOLUMN], double D[ILKOLUMN][ILWIERSZY], double C[ILWIERSZY][ILKOLUMN]) {
int i, j, k;
for(i = 0; i < ILWIERSZY; i++)
for(j = 0; j < ILKOLUMN; j++)
C[i][j] = 0;
for(i = 0; i < ILWIERSZY; i++)
for(j = 0; j < ILWIERSZY; j++)
for(k = 0; k < ILKOLUMN; k++)
C[i][j] = C[i][j] + A[i][k] * D[k][j];
return 0;
}
int main() {
int i, j; // liczniki
srand( time( NULL ) );
double A[2][3] = {
{rand() % 11,rand() % 11, rand() % 11},
{rand() % 11, rand() % 11, rand() % 11}};
double B[2][3] = {
{rand() % 11,rand() % 11, rand() % 11},
{rand() % 11, rand() % 11, rand() % 11}};
double C[2][3]; // macierz wyników
double D[3][2] = {
{rand() % 11, rand() % 11},
{rand() % 11, rand() % 11},
{rand() % 11, rand() % 11}};
printf("Macierz A
");
for(i = 0; i < ILWIERSZY; i++)
{
for(j = 0; j < ILKOLUMN; j++)
printf("%g ", A[i][j] );
puts("");
}
puts("");
printf("Macierz D
");
for(i = 0; i < ILKOLUMN; i++) {
for(j = 0; j < ILWIERSZY; j++)
printf("%g ", D[i][j] );
puts("");
}
puts("");
mnozeniemac(A, D, C);
printf("Iloczyn macierzy A * D
");
for(i = 0; i < ILWIERSZY; i++) {
for(j = 0; j < ILWIERSZY; j++)
printf("%g ", C[i][j] );
puts("");
}
return 0;
}
Jeszcze pytanie na koniec. Czy da się to napisać krócej lub prościej... bardziej amatorsko