Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- void free_mat(int rows, double **mat)
- {
- int i;
- for(i=0;i<rows;i++)
- {
- free(mat[i]);
- }
- free(mat);
- }
- int scan_rows(FILE *fp)
- {
- int rows;
- fseek(fp,0,SEEK_SET);
- fscanf(fp, "%d", &rows);
- return rows;
- }
- double **allocate_mem(int rows)
- {
- double **mat=NULL;
- int cols=rows;
- int i;
- mat=(double**)malloc(rows*sizeof(double*));
- for(i=0;i<rows;i++)
- {
- mat[i]=(double*)malloc(cols*sizeof(double));
- }
- return mat;
- }
- FILE *file_open(char *file_name)
- {
- FILE *fp;
- if( (fp=fopen(file_name,"r"))==NULL)
- {
- printf("Blad otwarcia pliku!\n");}
- return fp;
- }
- double **load_mat(FILE *fp, int rows)
- {
- int i,j;
- int columns=rows;
- double **mat = allocate_mem(rows);
- for(i = 0; i < rows; i++)
- {
- for(j = 0; j < columns; j++)
- {
- fscanf(fp, "%lf", *(mat+i)+j);
- printf("%.2f\t", *(*(mat+i)+j));
- }
- printf("\n");
- }
- return mat;
- }
- void file_close(FILE *fp)
- {
- if(fclose(fp)) printf("Blad zamkniecia pliku\n");
- else printf("Udalo sie zamknac plik\n");
- }
- double det(double **mat, int rows)
- {
- double **minor = NULL;
- double sum=0;
- double sign=1;
- int i, minor_i, minor_j, mat_i, mat_j;
- if(rows == 1)
- {
- sum = mat[0][0];
- return sum;
- }
- if(rows == 2)
- {
- sum = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
- return sum;
- }
- minor = allocate_mem(rows - 1);
- for(i=0; i < rows; i++)
- {
- for(minor_i=0, mat_i=1; mat_i < rows; mat_i++, minor_i++)
- {
- for(mat_j=0,minor_j=0;minor_j<rows-1;minor_j++,mat_j++)
- {
- if(mat_j == i) mat_j++;
- minor[minor_i][minor_j] = mat[mat_i][mat_j];
- // printf("%.2f\t",minor[minor_i][minor_j]);
- }
- // printf("\n");
- }
- // printf("\n\n");
- sum += sign * mat[0][i] * det(minor, rows-1);
- sign = -sign;
- }
- return sum;
- }
- int main()
- {
- char name[20] = "file_matrix.txt";
- char *file_name = name;
- FILE *fp;
- fp = file_open(file_name);
- double **mat = NULL;
- mat = load_mat(fp, scan_rows(fp));
- printf("\n\nDet= %.2f\n",det(mat, scan_rows(fp)));
- free_mat(scan_rows(fp),mat);
- file_close(fp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement