nasobenie matic

Sekcia: Programovanie 16.11.2008 | 09:34
Avatar zr3zo Arch Linux  Používateľ
zdravim,
snazim sa spravit program na dvoch nasobenie matic. Mam to robene tak , ze polia mam dynamicky alokovane , len akosi som sa domotal v smernikoch a uz som aj jemne zufali :-P
vid:

/*
[C]m,n=[A]m,p X [B]p,n
*/

#include <stdio.h>
#include <stdlib.h>

int **MatrixProduct(int **A,int **B, int m, int n, int p);
int **NacitajMaticu(int m, int n, char ozn);
void VypisMaticu(int **A, int m, int n);

main()
{
int **A,**B,**C,m,n,p;

printf("Zadajte rozmer m,n,p >> ");
scanf("%d,%d,%d",&m,&n,&p);

A = NacitajMaticu(m,p,'A');

printf("\n");

B = NacitajMaticu(p,n,'B');

C = MatrixProduct(A,B,m,n,p);

printf("----------------------- matrix A\n");
VypisMaticu(A,m,p);

printf("----------------------- matrix B\n");
VypisMaticu(B,p,n);

printf("----------------------- matrix C\n");
VypisMaticu(C,m,n);

}

int **MatrixProduct(int **A,int **B, int m, int n, int p)
{
int i,j,k;

int **C = (int**)calloc(m,sizeof(int));
for(i=0;i<m;i++)
C[i] = (int *)calloc(n,sizeof(int));

for(i=0; i<m; i++)
for(j=0;j<n;j++)
*(C+(i*n)+j) = 0;

for(i=0; i<m; i++)
for(j=0;j<n;j++)
for(k=0;k<p;k++)
*(C+(i*n)+j) += *(A+(i*p)+k) * *(B+(k*n)+j);
return C;
}

int **NacitajMaticu(int m,int n, char ozn )
{
int i,j;

int **A = (int**)calloc(m,sizeof(int));
for(i=0;i<m;i++)
A[i] = (int *)calloc(n,sizeof(int));

for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("Zadajte prvok matice %c[%d][%d]",ozn,i,j);
scanf("%d",(A+(i*n)+j));
}
return A;
}

void VypisMaticu(int **A, int m,int n)
{
int i,j;

for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("\t%d",*(A+(i*n)+j));
}
printf("\n");
}
}

Ak by mi niekto povedal co robim zle tak by som bol velmi vdacny
zrezo@jabbim.sk
    • Re: nasobenie matic 16.11.2008 | 10:23
      Avatar Miroslav Bendík Gentoo  Administrátor
      int **A = (int**)calloc(m,sizeof(int *));
      Zzvyšok sa mi nechce čítať.
    • Re: nasobenie matic 16.11.2008 | 11:15
      Avatar zr3zo Arch Linux  Používateľ
      Vyriesene ... ale komentare a ponaucenia mozte pisat dalej nech sa cosi priucim :-P

      pridavam upravenu funkciu
      int **MatrixProduct(int **A,int **B, int m, int n, int p)
      {
      int i,j,k,a,b,c=0;

      int **C = (int**)calloc(m,sizeof(int *));
      for(i=0;i<m;i++)
      C[i] = (int *)calloc(n,sizeof(int));

      for(i=0; i<m; i++)
      for(j=0;j<n;j++)
      {
      for(k=0;k<p;k++)
      { a = *(A+(i*p)+k);
      b = *(B+(k*n)+j);
      c = c + (a * b);
      printf("%d %d %d \n",a,b,c);
      }
      *(C+(i*n)+j) = c;
      c = 0;
      }
      return C;
      }
      zrezo@jabbim.sk
      • Re: nasobenie matic 03.12.2008 | 23:43
        andy warhol   Návštevník
        kto si? z fei?
        • Re: nasobenie matic 04.12.2008 | 21:04
          stewe   Návštevník
          urcite je, tam nasobia matice kazdy rok o takomto case :D
        • Re: nasobenie matic 04.12.2008 | 21:29
          Avatar zr3zo Arch Linux  Používateľ
          ee ZU
          zrezo@jabbim.sk
          • Re: nasobenie matic 04.12.2008 | 21:30
            Avatar zr3zo Arch Linux  Používateľ
            presnejsie FRI
            zrezo@jabbim.sk
        • Re: nasobenie matic 04.12.2008 | 22:20
          Avatar Dušan Ďurech Debian Lenny 5.0  Používateľ
          BTW vcera som na prednaske ( Logicke systemy ) na STU FEI videl, ako si jeden studen pozera na notebooku obsah tejto diskusie. ;)