Hej,
mam program, który z podanej macierzy oblicza macierz odwrotną. Pierwotnie do kopiowania, przeglądania, ogólnie operacji na macierzy korzystałem klasycznej iteracji. Muszę jednak przerobić tak program żeby wszędzie gdzie się da używać wskaźników. Wszystkie funkcje już przerobiłem i mam problem z funkcją obliczającą wyznacznik macierzy. Próbowałem już wszystkiego i za każdym razem program się wysypuje i mam błąd access violation location. Na czerwono zaznaczyłem miejsca do zamiany. Proszę o jakąkolwiek formę pomocy.
pozdrawiam
double det(int n, int w, int * WK, double ** A)
{
int i,j,k,m, * KK;
double s;
if(n == 1)
return **A; //sprawdzamy warunek zakończenia rekurencji
//return A[w][WK[0]]; // macierz 1 x 1, wyznacznik równy elementowi
else
{
KK = (int*) malloc ((n - 1)*sizeof(int)); // tworzymy dynamiczny wektor kolumn
s = 0; // zerujemy wartość rozwinięcia
m = 1; // początkowy mnożnik
for(i = 0; i < n; i++) // pętla obliczająca rozwinięcie
{
k=0;// tworzymy wektor kolumn dla rekurencji
for(j = 0; j < n; j++) // ma on o 1 kolumnę mniej niż WK
{
if(j == i)
continue; // pomijamy bieżącą kolumnę
KK[k++] = WK[j]; // pozostałe kolumny przenosimy do KK
}
if ( n==2 ) // jeżeli 2x2 to liczymy na krzyż i kończymy rekurencje
return (A[w][WK[i]] * A[w+1][WK[i+1]] - A[w][WK[i+1]] * A[w+1][WK[i]]);
else {
s += m * A[w][WK[i]] * det(n-1, w+1, KK, A);
m = -m; // kolejny mnożnik
}
}
free (KK); // usuwamy zbędną już tablicę dynamiczną
return s; // ustalamy wartość funkcji
}
}