//program dodajacy i mnozacy macierze.//dostepny na WTFPL (http://sam.zoy.org/wtfpl/).//autor: Krzysztof 'lordmorgul' Hankiewicz (http://lordmorgul.dyndns.org).//wykonane w vim 7.2.257, kompilowane i sprawdzane na GNU/Linux 2.6.31, openSUSE 11.2, gcc-4.4#include <stdio.h>int main(){ int m1[10][10],i,j,k,m2[10][10],add[10][10],mul[10][10],r1,c1,r2,c2; //definiujemy wszystkie zmienne. macierz pierwsza m1; iteratory i, j, k; macierz druga m2; pomnozona macierz mul; rozmiary pierwszej macierzy (rn - rzedy; cn - kolumny) printf("Podaj wymiary pierwszej macierzy w nastepujacy sposob:\n\nilosc rzedow [return]\nilosc kolumn [return]\n\n"); scanf("%d%d",&r1,&c1); //czytamy zmienne, ktore beda wyzanaczaly wymiary tablic (macierzy) - najpierw rzedy, potem kolumny (zgodnie z powyzszymi zmiennymi) printf("Podaj wymiary drugiej macierzy w nastepujacy sposob:\n\nilosc rzedow [return]\nilosc kolumn [return]\n\n"); scanf("%d%d",&r2,&c2); //i to samo dla drugiej macierzy if(r2==c1) { printf("\nPodaj zawartosc pierwszej macierzy\n(rzedami; kazdy element potwierdzaj [return])\n\n"); for(i=0;i<r1;i++) //petla czytajaca zawartosc macierzy. ma sie wykonywac r1 razy (po skonczeniu rzedu przechodzi do ponizszej petli) { for(j=0;j<c1;j++) //petla wewnetrza, wykonywana c1 (ilosc kolumn) razy - do podawania zawartosci wierszy (w kazdym wierszu mamy tyle elementow, ile kolumn zdefiniowalismy) scanf("%d",&m1[i][j]); //czyli czytaj zmienne do tablicy m1 } printf("\nPodaj zawartosc drugiej macierzy\n(takze rzedami; potwierdzaj kazdy element [return])\n\n"); for(i=0;i<r2;i++) { for(j=0;j<c2;j++) //to samo, co wyzej - dla drugiej tablicy/drugiej macierzy scanf("%d",&m2[i][j]); } printf("\nTak wyglada pierwsza macierz:\n\n"); for(i=0;i<r1;i++) //petla wyswietlajaca pierwsza macierz. wykonuje ponizsza petle r1-krotnie (czyli wyswietla r1 wierszy) { for(j=0;j<c1;j++) //wyswietla wiersz o c1 elementow printf("%d\t",m1[i][j]); //i dorzuca tab po kazdym elemencie tablicy m1, dla wyrownania printf("\n"); } printf("\nA tak druga:\n\n"); for(i=0;i<r2;i++) //analogicznie dla drugiej macierzy. r1-krotnie { for(j=0;j<c2;j++) //c2 elementow na wiersz printf("%d\t",m2[i][j]); printf("\n"); } if(r1==r2&&c1==c2) //jesli ilosc wierszy i kolumn macierzy pierwszej jest rowna ich liczbie w drugiej { printf("\nOto suma podanych macierzy:\n\n"); for(i=0;i<r1;i++) //r1-krotnie (mogloby byc tez r2, w koncu kod wykonuje sie tylko wtedy, gdy sa rowne) wykonaj to, co ponizej: { for(j=0;j<c1;j++) //c1-krotnie wykonaj { add[i][j]=m1[i][j]+m2[i][j]; //macierz o nazwie add wynosi dodane elementy z m1 i m2 printf("%d\t",add[i][j]); //tu rowniez tabulatory dla wyrownania } printf("\n"); } } else { printf("\nNie udalo sie dodac macierzy, gdyz maja one rozne wymiary\n"); } printf("\nTeraz mnozymy macierze.\nOto wynik mnozenia:\n\n"); /* a11*A11 + a12*A21 + a13*A31 a11*A12 + a12*A22 + a13*A32 a11*A13 + a12*A23 + a13*A33 - dla przypomnienia, tak mnozymy macierze*/ for(i=0;i<r1;i++) //r1-krotnie wykonaj { for(j=0;j<c2;j++) //c2-krotnie wykonaj { mul[i][j]=0; for(k=0;k<r1;k++) // r1-krotnie wykonaj { mul[i][j]+=m1[i][k]*m2[k][j]; /*pomnoz poszczegolne elementy macierzy, by wygladaly tak: mul[0][0]=m1[0][0]*m2[0][0]+m1[0][1]*m2[1][0]+m1[0][2]*m2[2][0];*/ } printf("%d\t",mul[i][j]); //wyswietl elementy, rowniez z tabami dla wyrownania } printf("\n"); } //getch(); mozna odkomentowac dla kompilowania na windowsie, zeby nie zamknal konsoli } else { printf("\nNie udalo sie pomnozyc macierzy :-(\n"); }}