//Autor: Artur Czekalski (Sator) www.epokaY.net/artur artur@epokaY.net //Liczenie wyznacznika macierzy import std.c.windows.windows; //GetTickCount import std.stdio; //writefln //--------------------------------------------------------------------------- const int gWymiar = 11; //liczba wierszy i kolumn w macierzy double Mat[gWymiar*gWymiar]; //macierz //--------------------------------------------------------------------------- bool PermLexSuccSelf(int N, int P[]) { //Ustala nastepnika permutacji w kolejnosci leksykogrficznej tzn. t[i]=0 && P[i+1] < P[i]) --i; //znajdz pierwszy od prawej, ktory psuje porzadek rosnacy if (i == -1) return false; //ostatnia permutacja while (j>i && P[j] <= P[i]) --j; //znajdz element pierwszy od prawej > P[i] if (j == i) return false; //to nie jest permutacja w = P[i]; P[i] = P[j]; P[j] = w; //zamien P[i] z P[j] k = i + (N-i-1)/2; for (j=i+1; j<=k; j++) //zapisz w odwrotnej kolejnosci: od i+1 do n {w = P[j]; P[j] = P[N+i-j]; P[N+i-j] = w; } return true; //Jest nastepnik } //--------------------------------------------------------------------------- int LInwersji(int N, int P[]) { //Podaje liczbe inwersji w permutacji P; np. 3,1,4,2 ma 3 inw.: (3,1),(3,2),(4,2) int i, j, LInw = 0; for (i=0; i P[j]) ++LInw; return LInw; } //-------------------------------------------------------------- double DetMacierz(int Wymiar, double *M) {//Liczy wyznacznik macierzy M ze wzoru if (Wymiar <= 1) return 0.0; double Suma = 0.0, Iloczyn; int i; int P[] = new int[Wymiar]; //permutacja for (i=0; i