Advertisement
Guest User

Untitled

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