Advertisement
Solingen

z14.3.cpp

Dec 22nd, 2024
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. #include <iostream>
  2. #include "string.h"
  3. #include "array.h"
  4. using namespace std;
  5.  
  6. // Функция вычисления ранга
  7. int matrixRank(Array<Array<double>>& A)
  8. {
  9. int m = A.size();
  10. if(m == 0) return 0;
  11. int n = A[0].size();
  12.  
  13. int rank = 0;
  14. int row = 0;
  15. for(int col = 0; col < n && row < m; col++)
  16. {
  17. // Ищем pivotRow
  18. int pivotRow = row;
  19. while(pivotRow < m && A[pivotRow][col] == 0.0)
  20. {
  21. pivotRow++;
  22. }
  23. if(pivotRow == m) continue;
  24.  
  25. // swap row <-> pivotRow
  26. if(pivotRow != row)
  27. {
  28. // Обмен строк
  29. Array<double> tmp = A[row];
  30. A[row] = A[pivotRow];
  31. A[pivotRow] = tmp;
  32. }
  33.  
  34. double pivot = A[row][col];
  35. // Нормируем
  36. for(int c = col; c < n; c++)
  37. {
  38. A[row][c] /= pivot;
  39. }
  40.  
  41. // Зануляем ниже
  42. for(int r2 = row+1; r2 < m; r2++)
  43. {
  44. double factor = A[r2][col];
  45. for(int c = col; c < n; c++)
  46. {
  47. A[r2][c] -= factor * A[row][c];
  48. }
  49. }
  50.  
  51. rank++;
  52. row++;
  53. }
  54. return rank;
  55. }
  56.  
  57. int main()
  58. {
  59. int m, n;
  60. cin >> m >> n;
  61.  
  62. Array<Array<double>> mat;
  63. for(int i = 0; i < m; i++)
  64. {
  65. Array<double> row;
  66. for(int j = 0; j < n; j++)
  67. {
  68. double val;
  69. cin >> val;
  70. row.append(val);
  71. }
  72. mat.append(row);
  73. }
  74.  
  75. int r = matrixRank(mat);
  76. cout << "Ранг = " << r << endl;
  77.  
  78. return 0;
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement