Program macierzowy przy użyciu tablic dynamicznych

0

Piszę program na zajęcia z C i mam problem z przekazywaniem dynamicznej tablicy do funkcji która ma dodawać dwie tablice.
Mam taką oto funkcję

void Add2Arrays(long double **temp,const long double **tab1,const long double **tab2,int dim)
{
    int k;
    int i,j;

    for(i=0;i<dim;i++)
    {
        for(j=0;j<dim;j++)
        {
          //*(*(temp +i) +j) = *(*(tab1 +i) +j) + *(*(tab2 +i) +j);
           
          temp[i][j] = tab1[i][j] + tab2[i][j];
         //printf("%lf %lf %lf \n",temp[i][j],tab1[i][j],tab2[i][j]);

        }
    }
}
 

Wywołuję ją tak:

Add2Arrays(t,matrixA,matrixB,dimension);

po powrocie z funkcji wyświetlam zawartość tablicy i pojawiąją się głupoty.
Dlatego zacząłem sprawdzać co jest wpisywane do tablicy tym printefem wewnątrz funkcji. Co się okazuje? Już tam zarówno temp, jak i tab1 i tab2 wewnątrz pętli są głupotami.
Dlaczego tak się dzieje? Jak to naprawić żeby działało?
Dorzucam jeszcze definicję jak alokuję tablice.

long double** AllocateMatrix(int sizeofTab)
{
    long double **tab;
    tab = (long double**)calloc(sizeofTab , sizeof(long double*));
    if(tab != NULL)
        {
            int i;
            for(i = 0;i<sizeofTab;i++)
            {
                *(tab + i) = (long double *) calloc( sizeofTab,sizeof(long double) );
            }
        }

        return tab;
}

Dziękuję za pomoc i pozdrawiam.

0

To jeszcze pokaż deklaracje zmiennych i sposób wpisania danych.

0
void PutIntoMatrix(long double **tab,int sizeofTab)
{
    int i,j;
    for(i = 0;i<sizeofTab;i++)
    {
        for(j = 0;j<sizeofTab;j++)
        {
            printf("Podaj [%d][%d]\n",i,j);
            scanf("%lf",(*(tab + i) + j));
        }
    }

}
 
long double **matrixA; //to jest w mainie i analogicznie matrixB
matrixA = AllocateMatrix(dimension); // to w 1 casie
matrixB = AllocateMatrix(dimension);

 long double** t = AllocateMatrix(dimension); //te 2 linijki siedza w drugim casie odpowiedzialnym za dodawanie
 Add2Arrays(t,matrixA,matrixB,dimension);
0

Więc albo nie umiesz wyświetlić poprawnie albo gdzieś (ale w żadnym z pokazanych miejsc) mażesz po pamięci.
Możliwe że to w scanf C przeważnie wymaga formatu %Lf dla long double

Oprócz tego:

  1. nazywaj zmienne do iteracji po tablice y i x inaczej za chwile się pogubisz
  2. unikaj zmienna++ tam gdzie możesz użyć ++zmienna czyli w pętlach
  3. adres elementu tablicy dla scanf: &tab[y][x]
0

Tutaj większość tego co jest przydatne w tym przypadku. http://4programmers.net/Pastebin/2909
Ale tu nie chodzi, że źle wyświetlam ale to że w pętli w funkcji Add2Arrays wartości tab1[i][j] oraz tab2[i][j] nie są tym czym powinny.
Jeśli przed tą pętlą wywołam PrintMatrix(tab1,dim) to tab1 wyświetlana jest poprawnie, natomiast wewnątrz tej pętli działając printefem wyświetla liczby nie wiem skąd

0

Może zamiast:

printf("[%.2lf] ",*(*(tab+i)+j));

podczas wypisywania spróbuj: printf("[%.2Lf] ",((tab+i)+j));

1 użytkowników online, w tym zalogowanych: 0, gości: 1