Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int rozmiar(FILE *plik)
  6. {
  7. int wiersze;
  8. fseek(plik, 0, SEEK_SET);
  9. fscanf(plik,"%d",&wiersze);
  10. return wiersze;
  11. }
  12.  
  13. FILE *otworz(char *nazwa_pliku)
  14. {
  15. FILE *plik;
  16. if ((plik=fopen(nazwa_pliku,"r"))==NULL)
  17. {
  18. printf("Nie mozna otworzyc pliku");
  19. exit(1);
  20. }
  21. return plik;
  22. }
  23.  
  24. void zamknij(FILE * plik)
  25. {
  26. if(fclose(plik)) printf("Blad zamkniecia pliku\n");
  27. else printf("Zamknieto plik!\n");
  28. }
  29.  
  30. double **Alokacja(int wiersze)
  31. {
  32. int i;
  33. int kolumny=wiersze;
  34. double **macierz=NULL;
  35. macierz=(double**)malloc(wiersze*sizeof(double*));
  36.  
  37. for(i=0;i<kolumny;i++)
  38. {
  39. macierz[i] = (double*)malloc(wiersze * sizeof(double));
  40. }
  41. return macierz;
  42. }
  43.  
  44. void Zwolnij(double **macierz,int wiersze)
  45. {
  46. int i;
  47. for(i=0; i < wiersze;i++)
  48. {
  49. free(macierz[i]);
  50. }
  51. free(macierz);
  52. }
  53.  
  54. double **Wyswietl(FILE *plik, int wiersze)
  55. {
  56. int i,j;
  57. int kolumny=wiersze;
  58. double **macierz = Alokacja(wiersze);
  59.  
  60. for(i=0;i<wiersze;i++)
  61. {
  62. for(j=0;j<kolumny;j++)
  63. {
  64. fscanf(plik,"%lf", *(macierz+i)+j);
  65. printf("%.2f ", *(*(macierz+i)+j));
  66. }
  67. printf(" \n");
  68. }
  69. return macierz;
  70. }
  71.  
  72. double Determinant(double **macierz, int wiersze)
  73. {
  74. int i,minor_i,minor_j,macierz_i,macierz_j;
  75. double **minor=NULL;
  76. double wynik=0;
  77. double sign=1;
  78.  
  79. printf("wiersze : %d", wiersze);
  80. if (wiersze==1)
  81. {
  82. wynik=macierz[0][0];
  83. }
  84. if (wiersze==2)
  85. {
  86. wynik = macierz[0][0] * macierz[1][1] - macierz[1][0] * macierz[0][1];
  87. return wynik;
  88. }
  89.  
  90. minor = Alokacja(wiersze - 1);
  91.  
  92. for(i=0; i < wiersze; i++)
  93. {
  94. for(minor_i = 0, macierz_i = 1; macierz_i < wiersze; macierz_i++,minor_i++)
  95. {
  96. for(minor_j = 0, macierz_j = 0; minor_j < wiersze - 1; minor_j++, macierz_j++)
  97. {
  98. if(macierz_j == i)
  99. { macierz_j++;}
  100. minor[minor_i][minor_j] = macierz[macierz_i][macierz_j];
  101. printf("[%d][%d]: %f ", minor_i, macierz_j, minor[minor_i][minor_j]);
  102. }
  103. printf("\n");
  104. }
  105. printf("\n\n");
  106. wynik += sign* macierz[0][i] * Determinant(minor, wiersze-1);
  107. sign=-sign;
  108. }
  109. Zwolnij(minor,wiersze-1);
  110. return wynik;
  111. }
  112.  
  113. int main()
  114. {
  115. FILE *plik;
  116. char nazwa[30]="plik.txt";
  117. char *nzw=nazwa;
  118. plik=otworz(nzw);
  119. double **matrix=NULL;
  120. matrix = Wyswietl(plik,rozmiar(plik));
  121. printf(" WYZNACZNIK WYNOSI : %f \n", Determinant(matrix,rozmiar(plik)));
  122. zamknij(plik);
  123. Zwolnij(matrix,rozmiar(plik));
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement