Advertisement
adwas33

Untitled

Apr 13th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4. #include <fstream>
  5. #include <algorithm>
  6. #include <cstddef>
  7.  
  8. using namespace std;
  9. const double eps = 1e-12; // stała przybliżenia zera
  10.  
  11. bool gauss(int n, double** AB, double* X)// za pomocą tej funkcji wykonuje się cały algorytm eliminacji gaussa
  12. {
  13. double m, s;
  14.  
  15. // przy pomocy poniższych forów eliminuje współczynniki
  16. for (int i = 0; i < n - 1; i++)
  17. {
  18. for (int j = i + 1; j < n; j++)
  19. {
  20. if (fabs(AB[i][i]) < eps)
  21. {
  22. return false;
  23. }
  24. m = -AB[j][i] / AB[i][i];
  25. AB[j][i] = 0;
  26. for (int k = i + 1; k <= n; k++)
  27. {
  28. AB[j][k] += m * AB[i][k];
  29. }
  30. }
  31. }
  32.  
  33. // przy pomocy poniższych forów wyliczam niewiadome
  34.  
  35. for (int i = n - 1; i >= 0; i--)
  36. {
  37. s = AB[i][n];
  38.  
  39. for (int j = n - 1; j >= i + 1; j--)
  40. {
  41. s -= AB[i][j] * X[j];
  42. }
  43. if (fabs(AB[i][i]) < eps)
  44. {
  45. return false;
  46. }
  47.  
  48. X[i] = s / AB[i][i];
  49. }
  50.  
  51. for (int i = 0; i < n; i++)
  52. {
  53. for (int j = 0; j < n + 1; j++)
  54. {
  55. cout << AB[i][j] << " ";
  56. }
  57. cout << endl;
  58. }
  59.  
  60. cout << endl << "--------------------------------------------------------------------------------" << endl;
  61.  
  62. return true;
  63. }
  64.  
  65.  
  66. //------------------------------------------------------------------------------------------------------
  67.  
  68. int main()
  69. {
  70. //double** AB;
  71. double* X;
  72.  
  73. //cout << "Podaj wielkosc macierzy: " << endl;
  74. //cin >> n; //przyjęcie ilości niewiadomych (pierwsza liczba w pliku)
  75. //cout << "Wpisz macierz: " << endl;
  76.  
  77. fstream file;
  78. file.open("", ios::in);//TODO ścieżka do pliku wejściowego
  79.  
  80. int n;
  81. file >> n;
  82.  
  83. // tworzenie tablicy dynamicznej dla macierzy dowolnej wielkości
  84. double** AB = new double* [n + 1];
  85. for (int i = 0; i < n + 1; i++)
  86. {
  87. AB[i] = new double[n+1];
  88. }
  89.  
  90. // wpisywanie danych z pliku do tablicy
  91. for (int x = 0; x < n; x++)
  92. {
  93. for (int y = 0; y < n + 1; y++)
  94. {
  95. double k;
  96. file >> k;
  97. AB[x][y] = k;
  98. }
  99. }
  100. file.close();
  101.  
  102. //AB = new double* [n];
  103. X = new double[n];
  104.  
  105. //for (int i = 0; i < n; i++)
  106. //{
  107. // AB[i] = new double[n + 1];
  108. //}
  109. //for (int i = 0; i < n; i++)// poniższe pętgle wczytują dane do tablicy AB
  110. //{
  111. // for (int j = 0; j <= n; j++)
  112. // {
  113. // cin >> AB[i][j];
  114. // }
  115. //}
  116.  
  117. //cout << endl << "--------------------------------------------------------------------------------" << endl;
  118.  
  119. for (int i = 0; i < n; i++)
  120. {
  121. for (int j = 0; j < n + 1; j++)
  122. {
  123. cout << AB[i][j] << " ";
  124. }
  125. cout << endl;
  126. }
  127.  
  128. cout << endl << "--------------------------------------------------------------------------------" << endl;
  129.  
  130. if (gauss(n, AB, X)) // uruchamiamy naszą funkcję liczącą (eliminację gaussa)
  131. {
  132. for (int i = 0; i < n; i++)
  133. {
  134. cout << "x" << i + 1 << " = " << X[i] << endl; // wypisanie wyników
  135. }
  136. }
  137. else
  138. {
  139. cout << "DZIELNIK ZERO" << endl; // jeśli będziemy dzielić przez 0 kompilator to wypisze
  140. }
  141.  
  142. for (int i = 0; i < n; i++)
  143. {
  144. delete[] AB[i];
  145. }
  146. delete[] AB;
  147. delete[] X;
  148.  
  149. return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement