Strona 1 z 1

suma macierzy co nie tak

: 19 stycznia 2010, 14:28
autor: dzakens
Jestem początkujący i nie wiem co nie tak w tym programie. Z góry dzieki

Kod: Zaznacz cały

#include <stdio.h>

void summac(int *wsk1, int *wsk2, int *wynik, int wymiar1, int wymiar2)

{
  int i,j;
  for(j=0;j<wymiar1;j++)
  {m
    for(i=0;i<wymiar2;i++)
     *((wynik+j)+i) = *((wsk1+j)+i) + *((wsk2+j)+i);
  }
  for(j=0;j<wymiar1;j++)
  {
    for(i=0;i<wymiar2;i++)
      printf("%5d", *((wynik+j)+i));
  }
}

main()
{
  int wymiar1,wymiar2,i,j;
  printf("Podaj liczbe wierszy  macierzy\n");
  scanf("%d",&wymiar1);
  printf("Podaj liczbe kolumn macierzy\n");
  scanf("%d",&wymiar2);
  int tab1[wymiar1][wymiar2], tab2[wymiar1][wymiar2];
  int wynik[wymiar1][wymiar2];
  printf("Podaj elementy pierwszej macierzy wierszami\n");
    for(j=0;j<wymiar1;j++)
    {
      for (i=0;i<wymiar2;i++)
        scanf("%d",tab1[j][i]);
    }
  printf("Podaj elementy drugiej macierzy wierszami\n");
    for(j=0;j<wymiar1;j++)
    {
      for(i=0;i<wymiar2;i++)
        scanf("%d",tab2[j][i]);
    }

    summac(*tab1, *tab2 , *wynik,  wymiar1, wymiar2);
  return 0;
}
Używaj znaczników code.
AdeBe

: 19 stycznia 2010, 19:43
autor: jasiekmarc
Po pierwsze to m przed pętlą nie ma prawa się kompilować. Po drugie, nie jestem przekonany, że wskaźniki w tablicy dwuwymiarowej traktuje się w ten sposób. Zasadniczo, sprytnym rozwiązaniem jest używanie vectorów zamiast tablic i, żeby nie kopiować zbyt dużo danych, zrobić w funkcji pobieranie argumentu przez referencje. Można też elegancko stworzyć klasę macierz i napisać dla niej operatory (dodawanie, mnożenie). Tylko musiałbyś się przesiąść do C++ w tym celu. Jak wolisz C, to chyba można zrobić strukturę i w niej operator, ale nie wiem, czy to tak ładnie działa też.