All pastes #1758183 Raw Edit

crazy-frog-matrices.c

public c v1 · immutable
#1758183 ·published 2010-01-19 23:15 UTC
rendered paste body
//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");	}}