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;
- fseek(plik, 0, SEEK_SET);
- 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<kolumny;i++)
- {
- macierz[i] = (double*)malloc(wiersze * sizeof(double));
- }
- return macierz;
- }
- void Zwolnij(double **macierz,int wiersze)
- {
- int i;
- for(i=0; i < wiersze;i++)
- {
- free(macierz[i]);
- }
- free(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");
- }
- return macierz;
- }
- double Determinant(double **macierz, int wiersze)
- {
- int i,minor_i,minor_j,macierz_i,macierz_j;
- double **minor=NULL;
- double wynik=0;
- double sign=1;
- printf("wiersze : %d", wiersze);
- if (wiersze==1)
- {
- wynik=macierz[0][0];
- }
- if (wiersze==2)
- {
- wynik = macierz[0][0] * macierz[1][1] - macierz[1][0] * macierz[0][1];
- return wynik;
- }
- minor = Alokacja(wiersze - 1);
- for(i=0; i < wiersze; i++)
- {
- for(minor_i = 0, macierz_i = 1; macierz_i < wiersze; macierz_i++,minor_i++)
- {
- for(minor_j = 0, macierz_j = 0; minor_j < wiersze - 1; minor_j++, macierz_j++)
- {
- if(macierz_j == i)
- { macierz_j++;}
- minor[minor_i][minor_j] = macierz[macierz_i][macierz_j];
- printf("[%d][%d]: %f ", minor_i, macierz_j, minor[minor_i][minor_j]);
- }
- printf("\n");
- }
- printf("\n\n");
- wynik += sign* macierz[0][i] * Determinant(minor, wiersze-1);
- sign=-sign;
- }
- Zwolnij(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 : %f \n", Determinant(matrix,rozmiar(plik)));
- zamknij(plik);
- Zwolnij(matrix,rozmiar(plik));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement