[C] Problem z argumentem.

0

Mam za zadanie napisać program, który będzie wyliczał wyznacznik dla macierzy. Pogrzebałem trochę w sieci i okazało się, że trzeba użyć funkcji rekurencyjnej. Jednak pojawił się problem

 int wyznacznik(int tab[][], wym)
{
 for(int w=0;w<wym;w++)
 {
 int wyzn = tab[0][w]*(-1)^(1+w)*wyznacznik(tab[][], wym-1);
}
return wyzn;
}

Wiem, że w samym kodzie jest sporo błędów i zapewne za chwile mnie za to ochrzanicie, ale jak na razie interesuje mnie to jak zadeklarować tę macierz w argumentach funkcji? Kompilator zgłasza mi, że powinna mieć ona podany chociaż drugi wymiar, a on przecież zmienia się wraz z następnymi rekurencjami. Czy mógłby ktoś pomóc?

Z góry dziękuję.

0

^ to jest xor a nie podnoszenie do potęgi. co do macierzy do jako argument zawsze musi iść cała tablica dwuwymiarowa, a pozostałe parametry powinny określać gdzie rozpocząć działać na tej tablicy

0

Heh. Tak właściwie to miałem zrobić liczący wyznacznik dla macierzy maksymalnie 3x3. Myślałem, że upchnięcie tego w ładną funkcję będzie zgrabniejsze niż robienie tego ręcznie, ale teraz widzę, że jednak efektowniej będzie chyba po prostu wypisać te wzory. Dziękuję za odpowiedz.

P.S.: Hm...nie wiedziałem, że w C trzeba samemu stworzyć funkcję potęgi. Cenna lekcja :D.

0
Sergi napisał(a):

P.S.: Hm...nie wiedziałem, że w C trzeba samemu stworzyć funkcję potęgi. Cenna lekcja :D.

Bredzisz, czy udajesz?
Funkcja potęgi jest w standardowej bibliotece. To nie wina twórców języka, że ktoś z nie wiadomo jakiego powodu uważa, że potęgę się zapisuje jako ^.

0

Czy ja na kogokolwiek zrzucam winę. Po prostu nie wiedziałem o tym. Boże, już nawet kiwnąć palcem nie można bo znajdzie się osoba, która odezwie się takim tonem jakbym zabił jej rodzinę.

0

Czy przy przyjęciu wartości wyznaczników już na wejściu jako 0 spowoduje, że to będzie działać? Czy da się to zrobić prościej np. jakimiś pętlami?

int w, wx, wy, wz;
w=0;
wx=0;
wy=0;
wz=0;

switch(wym)
{


      case 1:
             w=tab[0][0];
             wx=wynik[0];
             break;


       case 2:
              //wzór na W, Wx, Wy macierzy 2x2
              break; 


        case 3:
              //wzór na W, Wx, Wy, Wz macierzy 3x3
}

//sprawdzenie czy równanie ma w ogóle rozwiązania

if (w==0 && wx!=0 && wy!=0 && wz!=0)
printf("Uklad nie ma rozwiazan");

if (w==0 && wx==0 && wy==0 && wz==0)
printf("Uklad ma nieskonczenie wiele rozwiazan");


if(w!=0 && wx!=0 && wy!=0 && wz!=0)
{

switch(wym)
{
         case 1:
               
               printf("W=%d\nWx=%d\n", w,wx);
               fprintf(p,"W=%d\nWx=%d\n", w,wx);

         case 2:

               printf("W=%d\nWx=%d\nWy=%d\n", w,wx,wy); 
               fprintf(p,"W=%d\nWx=%d\nWy=%d\n", w,wx,wy);    

         case 3:
               printf("W=%d\nWx=%d\nWy=%d\nWz=%d\n", w,wx,wy,wz);
               fprintf(p,"W=%d\nWx=%d\nWy=%d\nWz=%d\n", w,wx,wy,wz);

}
}

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