All pastes #526726 Raw Edit

Unnamed

public text v1 · immutable
#526726 ·published 2007-05-31 22:46 UTC
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();
}