Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- int rozmiar(FILE *plik)
- {
- int wiersze;
- fscanf(plik,"%d",&wiersze);
- return wiersze;
- }
- FILE *otworz(char *nazwa_pliku)
- {
- FILE *plik;
- if ((plik=fopen(nazwa_pliku,"r"))==NULL)
- {
- printf("Nie mozna otworzyc pliku");
- exit(1);
- }
- return plik;
- }
- void zamknij(FILE * plik)
- {
- if(fclose(plik)) printf("Blad zamkniecia pliku\n");
- else printf("Zamknieto plik!\n");
- }
- double **Alokacja(int wiersze)
- {
- int i;
- int kolumny=wiersze;
- double **macierz=NULL;
- macierz=(double**)malloc(wiersze*sizeof(double*));
- for(i=0;i<wiersze;i++)
- {
- macierz[i]=(double*)malloc(kolumny*sizeof(double));
- }
- return macierz;
- }
- double **Wyswietl(FILE *plik, int wiersze)
- {
- int i,j;
- int kolumny=wiersze;
- double **macierz = Alokacja(wiersze);
- for(i=0;i<wiersze;i++)
- {
- for(j=0;j<kolumny;j++)
- {
- fscanf(plik,"%lf", *(macierz+i)+j);
- printf("%.2f ", *(*(macierz+i)+j));
- }
- printf(" \n");
- }
- for(i=0;i<wiersze;i++)
- {
- free(macierz[i]);
- }
- free(macierz);
- return macierz;
- }
- double Determinant(double **macierz, int wiersze)
- {
- int i,j,j2,j1;
- int kolumny=wiersze;
- double **minor=NULL;
- double wynik=0;
- if (wiersze==1)
- {
- wynik=macierz[0][0];
- return wynik;
- }
- if (wiersze==2)
- {
- wynik = macierz[0][0] * macierz[1][1] - macierz[1][0] * macierz[0][1];
- return wynik;
- }
- else wynik=0;
- minor = Alokacja(wiersze - 1);
- for (j1 = 0 ; j1 < wiersze ; j1++)
- {
- for (i=1; i< wiersze; i++)
- {
- j2=0;
- for(j=0;j<wiersze;j++)
- {
- if (j == j1)
- {
- continue;
- j2++;
- }
- minor[i-1][j2] = macierz[i][j];
- printf("i-%d j-%d j1-%d j2-%d", i,j,j1,j2);
- j2++;
- }
- }
- wynik += pow(-1.0,1.0+j1+1.0) * macierz[0][j1] * Determinant(minor,wiersze-1);
- }
- return (wynik);
- }
- int main()
- {
- FILE *plik;
- char nazwa[30]="plik.txt";
- char *nzw=nazwa;
- plik=otworz(nzw);
- double **matrix=NULL;
- matrix = Wyswietl(plik,rozmiar(plik));
- printf(" WYZNACZNIK WYNOSI : %d \n", Determinant(matrix,rozmiar(plik)));
- zamknij(plik);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement