rendered paste body#include <stdio.h>
#include <stdlib.h>
typedef struct Macierz
{
int x,y;
int *wiersz;
int **tab;
}*macierz;
macierz make(void)
{
int i,j;
macierz m;
m=malloc(sizeof(struct Macierz));
printf("podaj liczbe wierszy : "); scanf("%d",&m->x);
printf("podaj liczbe kolumn : "); scanf("%d",&m->y);
m->tab=malloc((m->x)*sizeof(int*));
for(i=0;i<(m->x);i++)
{
m->wiersz=malloc((m->y)*sizeof(int));
for(j=0;j<(m->y);j++)
{
m->wiersz[j]=rand()%10;
}
m->tab[i]=m->wiersz;
}
return m;
}
void pisz(macierz m)
{
int i,j;
for(i=0;i<(m->x);i++)
{
for(j=0;j<(m->y);j++)
printf("[%3d]",m->tab[i][j]);
printf("\n");
}
printf("\n");
}
macierz dodaj(macierz m, macierz n)
{
int i,j;
macierz wy;
wy=malloc(sizeof(struct Macierz));
wy->tab=malloc((m->x)*sizeof(int*));
wy->x=m->x;
wy->y=m->y;
for(i=0;i<(m->x);i++)
{
wy->wiersz=malloc((m->y)*sizeof(int));
wy->tab[i]=wy->wiersz;
}
for(i=0;i<m->x;i++)
for(j=0;j<n->y;j++)
wy->tab[i][j]=(m->tab[i][j])+(n->tab[i][j]);
return wy;
}
macierz mnoz(macierz m, macierz n)
{
int i,j,k,l;
macierz wy;
wy=malloc(sizeof(struct Macierz));
wy->tab=malloc((m->x)*sizeof(int*));
wy->x=m->x;
wy->y=n->y;
for(i=0;i<(m->x);i++)
{
wy->wiersz=malloc((n->y)*sizeof(int));
wy->tab[i]=wy->wiersz;
}
for(i=0;i<m->x;i++)
for(j=0;j<n->y;j++)
{
wy->tab[i][j]=0;
for(k=0;k<m->y;k++)
wy->tab[i][j]+=(m->tab[i][k])*(n->tab[k][j]);
}
return wy;
}
macierz transp(macierz m)
{
int i,j;
macierz wy;
wy=malloc(sizeof(struct Macierz));
wy->tab=malloc((m->y)*sizeof(int*));
wy->x=m->y;
wy->y=m->x;
for(i=0;i<(m->y);i++)
{
wy->wiersz=malloc((m->x)*sizeof(int));
wy->tab[i]=wy->wiersz;
}
for(i=0;i<m->x;i++)
for(j=0;j<m->y;j++)
wy->tab[j][i]=m->tab[i][j];
return wy;
}
main()
{
int i,j;
macierz m,n,dod,mn,trm,trn;
m=make();
n=make();
printf("macierz M\n");pisz(m);
printf("macierz N\n");pisz(n);
if((m->x==n->x)&&(m->y==n->y))
{
dod=dodaj(m,n);
printf("DODAWANIE M+N\n");
pisz(dod);
}
else printf("dodawanie niewykonalne\n");
trm=transp(m);
printf("TRANSPONOWANIE M\n");pisz(trm);
trn=transp(n);
printf("TRANSPONOWANIE N\n");pisz(trn);
if(m->y==n->x)
{
mn=mnoz(m,n);
printf("MNOZENIE MxN\n");
pisz(mn);
}
else printf("mnozenie niewykonalne\n");
getch();
}