float wyznacznik(int n, float macierz[n][n]) { int i, j, k, znak; float det[n][n], suma; suma = 0; znak = 1; if (n == 1) return macierz[0][0]; else if (n > 1) { /* przygotowywanie macierzy (det) z wycietym ostatnim wierszem i i-ta kolumna*/ for (i = n - 1; i >= 0; i = i - 1) { for (j = 0; j < n - 1; j = j + 1) { for (k = 0; k < i; k = k + 1) { det[j][k] = macierz[j][k]; } for (k = i; k < n - 1; k = k + 1) { det[j][k] = macierz[j][k + 1]; } } /* dodawanie do sumy kolejnych skladnikow (wyznacznikow macierzy det) */ suma = suma + znak * macierz[n - 1][i] * wyznacznik(n - 1, det); znak = -znak; } } return suma; }
int main(){ int i,j,n; printf("Podaj wymiar macierzy: "); scanf("%d",&n); while(n<1){ printf("Podaj wymiar macierzy: "); scanf("%d",&n); } float matrix[n][n]; for(i=0;i<n;i++){ printf("Podaj %d wiersz macierzy: ",i+1); for(j=0;j<n;j++){ scanf("%f",&matrix[i][j]); } } for(i=0;i<n;i++){ printf("|"); for(j=0;j<n;j++){ printf(" %f ",matrix[i][j]); } printf("|\n"); } printf("\nWyznacznik wynosi: %f\n",wyznacznik(n,matrix)); }
int main() { wczytaj_wymiar_macierzy(n); float macierz[n][n]; wczytaj_macierz(n, macierz); printf("%f", wyznacznik(n, macierz)); printf("\n"); return EXIT_SUCCESS; }
float wyznacznik(int n,float matrix[n][n]){ float m[n-1][n-1]; float suma=0; int i,j,k,w=1; if(n==1) return matrix[0][0]; else{ for(i=n-1;i>=0;i--){ for(j=0;j<n-1;j++){ for(k=0;k<i;k++) m[j][k]=matrix[j][k]; for(k=i;k<n-1;k++) m[j][k]=matrix[j][k+1]; } suma=suma+w*matrix[n-1][i]*wyznacznik(n-1,m); w=(-1)*w; } return suma; } }
/* * Maciej Malecki * [email protected] */ float wyznacznik (int n, float macierz[n][n]) { int i,j,k,znak; float det[n][n],suma; suma=0; znak=1; if (n==1) return macierz[0][0]; else if (n>1){ for (i=n-1; i>=0; i=i-1) { for (j=0; j<n-1; j=j+1) { for (k=0; k<i; k=k+1) {det[j][k]=macierz[j][k];} for (k=i; k<n-1; k=k+1) {det[j][k]=macierz[j][k+1];} } suma = suma + znak*macierz[n-1][i]*wyznacznik(n-1, det); znak=-znak; } } return suma; }