Mnożenie macierzy
dodane 2016-03-29 00:03
/*prosty program, trudno znaleźć taki na necie, jakieś malloce, niewiadomo co. Ten liczy macierze 3x3 można go też dostosować do innych rozmiarów. Na pewno przyda się początkującym.*/
Dzisiaj prosty program w C, mnozy macierze. Nie używa ani mamlloców ani wskaźników. Wskaźniki miał używac ale nie wyszło. W każdym razie pokazuje najmniej zaawansowany sposób zapisywania i odczytywania tablic dwuwymiarowych.
#include <stdio.h>
#include <stdlib.h>
/*i logicznie powiaż sobie z liczbą wierszy macierzy A
j - kolumny macierzy A i wiersze macierzy B
c- kolumny macierzy B */
//patrz też uwagi na końcu
int i,j,k;
//deklaracja macierzy A i zerowanie jej
int tab1 [3] [3] ={0};
//deklaracja macierzy B i zerowanie jej
int tab2 [3] [3] = {0};
//deklaracja macierzy wynik i zerowanie jej
int wynik [3] [3] = {0};
//zaczynamy program
int main(int argc, char *argv[])
{
// Wprowadzanie macierzy A
{
printf("Wprowadz macierz A wierszami:\n");
for(i=0; i<3; i++)
{
printf("Wiersz %d\n", i+1);
for(j=0; j<3; j++)
scanf("%d",&tab1 [i][j]);
/*powyższe pętle for są konstrukcją niezwykle istotną. Umożliwia ona wprowadzanie tablicy dwuwymiarowej.
j jest zagnieżdżone i liczy kolumny, i - numery wierszy. Pojęcie tego jest niełatwe.
W scanf przed tab1 musi być &, to znaczy że będzie pobierać czy coś.
*/
}
}
/*tu mozna wyświetlić macierz A - w celach testowych
{
for (i=0; i<3;++i)
for(j=0; j<3; j++)
printf("element %d %d = %d\n", i+1,j+1, tab1 [i][j]);
*/
printf("Wprowadz macierz B wierszami:\n");
for(i=0; i<3; i++)
{
printf("Wiersz %d\n", i+1);
for(j=0; j<3; j++)
scanf("%d",&tab2 [i][j]);
}
/* *tu mozna wyświetlić macierz A - w celach testowych
for (i=0; i<3;++i)
for(j=0; j<3; j++)
{
printf("element macierzy B %d %d = %d\n", i+1,j+1, tab2 [i][j]);
} }
*/
//Obliczanie wyniku, 2 pętla zagnieżdzone, paranoja
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
wynik[i][j]=0;
for(k=0;k<3;k++)
wynik[i][j]+=tab1[i][k]*tab2[k][j];
//powyższy wiersz stanowi sedno programu, żebym rozumiał o co chodzi w nim do końca to nei rozumiem.
}
}
//wyswietlanie
for(i=0; i<3; i++)
{
for(j=0;j<3;j++)
{
printf("%d %d = %d\n",i+1,j+1,wynik[i][j]);
//i+1. j+1 dlatego, że w C numer zaczyna się od zera, więc żeby nie mieć wierszy 0,1,2 zwiekszam
}
}
//poniższe odkomentuj pod Windows
// system("PAUSE");
return 0;
}
/*prosty program, trudno znaleźć taki na necie, jakieś malloce, niewiadomo co. Ten liczy macierze 3x3 można go też dostosować do innych rozmiarów. Na pewno przyda się początkującym.*/