Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. void free_mat(int rows, double **mat)
  6. {
  7. int i;
  8. for(i=0;i<rows;i++)
  9. {
  10. free(mat[i]);
  11. }
  12. free(mat);
  13. }
  14.  
  15. int scan_rows(FILE *fp)
  16. {
  17. int rows;
  18. fseek(fp,0,SEEK_SET);
  19. fscanf(fp, "%d", &rows);
  20. return rows;
  21. }
  22.  
  23. double **allocate_mem(int rows)
  24. {
  25. double **mat=NULL;
  26. int cols=rows;
  27. int i;
  28.  
  29. mat=(double**)malloc(rows*sizeof(double*));
  30.  
  31. for(i=0;i<rows;i++)
  32. {
  33. mat[i]=(double*)malloc(cols*sizeof(double));
  34. }
  35.  
  36. return mat;
  37. }
  38.  
  39. FILE *file_open(char *file_name)
  40. {
  41. FILE *fp;
  42. if( (fp=fopen(file_name,"r"))==NULL)
  43. {
  44. printf("Blad otwarcia pliku!\n");}
  45.  
  46. return fp;
  47. }
  48.  
  49. double **load_mat(FILE *fp, int rows)
  50. {
  51. int i,j;
  52. int columns=rows;
  53.  
  54. double **mat = allocate_mem(rows);
  55.  
  56. for(i = 0; i < rows; i++)
  57. {
  58. for(j = 0; j < columns; j++)
  59. {
  60. fscanf(fp, "%lf", *(mat+i)+j);
  61. printf("%.2f\t", *(*(mat+i)+j));
  62. }
  63. printf("\n");
  64. }
  65. return mat;
  66. }
  67.  
  68. void file_close(FILE *fp)
  69. {
  70. if(fclose(fp)) printf("Blad zamkniecia pliku\n");
  71. else printf("Udalo sie zamknac plik\n");
  72. }
  73. double det(double **mat, int rows)
  74. {
  75. double **minor = NULL;
  76. double sum=0;
  77. double sign=1;
  78. int i, minor_i, minor_j, mat_i, mat_j;
  79.  
  80. if(rows == 1)
  81. {
  82. sum = mat[0][0];
  83. return sum;
  84. }
  85. if(rows == 2)
  86. {
  87. sum = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1];
  88. return sum;
  89. }
  90.  
  91. minor = allocate_mem(rows - 1);
  92. for(i=0; i < rows; i++)
  93. {
  94. for(minor_i=0, mat_i=1; mat_i < rows; mat_i++, minor_i++)
  95. {
  96. for(mat_j=0,minor_j=0;minor_j<rows-1;minor_j++,mat_j++)
  97. {
  98. if(mat_j == i) mat_j++;
  99. minor[minor_i][minor_j] = mat[mat_i][mat_j];
  100. // printf("%.2f\t",minor[minor_i][minor_j]);
  101. }
  102. // printf("\n");
  103. }
  104. // printf("\n\n");
  105. sum += sign * mat[0][i] * det(minor, rows-1);
  106. sign = -sign;
  107. }
  108. return sum;
  109. }
  110.  
  111. int main()
  112. {
  113. char name[20] = "file_matrix.txt";
  114. char *file_name = name;
  115.  
  116. FILE *fp;
  117. fp = file_open(file_name);
  118.  
  119. double **mat = NULL;
  120. mat = load_mat(fp, scan_rows(fp));
  121.  
  122. printf("\n\nDet= %.2f\n",det(mat, scan_rows(fp)));
  123. free_mat(scan_rows(fp),mat);
  124. file_close(fp);
  125.  
  126.  
  127. return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement