Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "string.h"
- #include "array.h"
- using namespace std;
- // Функция вычисления ранга
- int matrixRank(Array<Array<double>>& A)
- {
- int m = A.size();
- if(m == 0) return 0;
- int n = A[0].size();
- int rank = 0;
- int row = 0;
- for(int col = 0; col < n && row < m; col++)
- {
- // Ищем pivotRow
- int pivotRow = row;
- while(pivotRow < m && A[pivotRow][col] == 0.0)
- {
- pivotRow++;
- }
- if(pivotRow == m) continue;
- // swap row <-> pivotRow
- if(pivotRow != row)
- {
- // Обмен строк
- Array<double> tmp = A[row];
- A[row] = A[pivotRow];
- A[pivotRow] = tmp;
- }
- double pivot = A[row][col];
- // Нормируем
- for(int c = col; c < n; c++)
- {
- A[row][c] /= pivot;
- }
- // Зануляем ниже
- for(int r2 = row+1; r2 < m; r2++)
- {
- double factor = A[r2][col];
- for(int c = col; c < n; c++)
- {
- A[r2][c] -= factor * A[row][c];
- }
- }
- rank++;
- row++;
- }
- return rank;
- }
- int main()
- {
- int m, n;
- cin >> m >> n;
- Array<Array<double>> mat;
- for(int i = 0; i < m; i++)
- {
- Array<double> row;
- for(int j = 0; j < n; j++)
- {
- double val;
- cin >> val;
- row.append(val);
- }
- mat.append(row);
- }
- int r = matrixRank(mat);
- cout << "Ранг = " << r << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement