Advertisement
Tucancitto

Metoda eliminării succesive (Metoda Gauss) - rezolvarea sistemului de N ecuații cu N necunoscute

Feb 4th, 2021 (edited)
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6. void Citire(float a[][10], int& n)
  7. {
  8.     ifstream f("matrice.in");
  9.     f >> n;
  10.  
  11.     for (int i = 0; i < n; i++)
  12.         for (int j = 0; j <= n; j++)
  13.             f >> a[i][j];
  14. }
  15.  
  16. void Zero(float& x)
  17. {
  18.     if (x == -0)
  19.         x = 0;
  20. }
  21.  
  22. void Afisare(float a[][10], int n)
  23. {
  24.     for (int i = 0; i < n; i++, cout << "\n")
  25.         for (int j = 0; j <= n; j++)
  26.         {
  27.             Zero(a[i][j]);
  28.             cout << setw(10) << a[i][j];
  29.         }
  30. }
  31. void Pivotare(float a[][10], int n)
  32. {
  33.     for (int i = 0; i < n; i++)
  34.         for (int k = i + 1; k < n; k++)
  35.             if (fabs(a[i][i]) < fabs(a[k][i]))
  36.                 for (int j = 0; j <= n; j++)
  37.                     swap(a[i][j], a[k][j]);
  38. }
  39.  
  40. void Eliminare(float a[][10], int n)
  41. {
  42.     for (int i = 0; i < n - 1; i++)
  43.         for (int k = i + 1; k < n; k++)
  44.         {
  45.             float t = a[k][i] / a[i][i];
  46.             for (int j = 0; j <= n; j++)
  47.             {
  48.                 a[k][j] = a[k][j] - t * a[i][j];
  49.                 Zero(a[k][j]);
  50.             }
  51.         }
  52. }
  53.  
  54. void Solutie(float a[][10], int n, float x[])
  55. {
  56.     char variabila = 'a';
  57.     for (int i = n - 1; i >= 0; i--)
  58.     {
  59.         x[i] = a[i][n];
  60.         for (int j = i + 1; j < n; j++)
  61.             if (j != i)
  62.                 x[i] = x[i] - a[i][j] * x[j];
  63.         x[i] = x[i] / a[i][i];
  64.         Zero(x[i]);
  65.     }
  66.  
  67.     cout << "\nValorile variabilelor: \n";
  68.     for (int i = 0; i < n; i++)
  69.     {
  70.         cout << (char)(variabila + i) << " = ";
  71.         cout << x[i] << endl;
  72.     }
  73. }
  74.  
  75. int main()
  76. {
  77.     int n;
  78.     float a[10][10] = { 0 }, x[10] = { 0 };
  79.     char variabila = 'a';
  80.  
  81.     cout.precision(4);
  82.     cout.setf(ios::fixed);
  83.  
  84.     Citire(a, n);
  85.  
  86.     Pivotare(a, n);
  87.     cout << "Matricea extinsa dupa pivotare: \n";
  88.     Afisare(a, n);
  89.  
  90.     Eliminare(a, n);
  91.     cout << "\n\nMatricea extinsa dupa aplicarea metodei eliminarii: \n";
  92.     Afisare(a, n);
  93.  
  94.     Solutie(a, n, x);
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement