diff options
author | Jasper | 2025-09-01 20:10:12 +0200 |
---|---|---|
committer | Jasper | 2025-09-01 20:10:12 +0200 |
commit | bc4215edfd34590c8078b3bb459005807d36c5cf (patch) | |
tree | b94cf727dbdb86e5ef0a03d20dbf1cc4ea57c0ee /matrix.c | |
parent | b780a32d53e718328ab496c37cbb2710254da6d2 (diff) |
Merge row-swap and col-swap
Diffstat (limited to 'matrix.c')
-rw-r--r-- | matrix.c | 64 |
1 files changed, 30 insertions, 34 deletions
@@ -121,53 +121,49 @@ Matrix *matrix_copy (const Matrix *mat) return tmp; } -Matrix *matrix_swap_rows(const Matrix *mat, size_t i, size_t j) +Matrix *matrix_swap(const Matrix *mat, MatrixSwapType t, size_t i, size_t j) { Matrix *tmp = matrix_copy(mat); + size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m); - for (size_t k = 0; k < mat->n; ++k) + for (size_t k = 0; k < lim; ++k) { - matrix_at(tmp, i, k) = matrix_at(mat, j, k); - matrix_at(tmp, j, k) = matrix_at(mat, i, k); + switch (t) + { + case MATRIX_SWAP_ROWS: + matrix_at(tmp, i, k) = matrix_at(mat, j, k); + matrix_at(tmp, j, k) = matrix_at(mat, i, k); + break; + case MATRIX_SWAP_COLS: + matrix_at(tmp, k, i) = matrix_at(mat, k, j); + matrix_at(tmp, k, j) = matrix_at(mat, k, i); + break; + } } return tmp; } -void matrix_swap_rows1(Matrix *mat, size_t i, size_t j) +void matrix_swap1(Matrix *mat, MatrixSwapType t, size_t i, size_t j) { double tmp; + size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m); - for (size_t k = 0; k < mat->n; ++k) - { - tmp = matrix_at(mat, i, k); - matrix_at(mat, i, k) = matrix_at(mat, j, k); - matrix_at(mat, j, k) = tmp; - } -} - -Matrix *matrix_swap_cols(const Matrix *mat, size_t i, size_t j) -{ - Matrix *tmp = matrix_copy(mat); - - for (size_t k = 0; k < mat->m; ++k) + for (size_t k = 0; k < lim; ++k) { - matrix_at(tmp, k, i) = matrix_at(mat, k, j); - matrix_at(tmp, k, j) = matrix_at(mat, k, i); - } - - return tmp; -} - -void matrix_swap_cols1(const Matrix *mat, size_t i, size_t j) -{ - double x; - - for (size_t k = 0; k < mat->m; ++k) - { - x = matrix_at(mat, k, i); - matrix_at(mat, k, i) = matrix_at(mat, k, j); - matrix_at(mat, k, j) = x; + switch (t) + { + case MATRIX_SWAP_ROWS: + tmp = matrix_at(mat, i, k); + matrix_at(mat, i, k) = matrix_at(mat, j, k); + matrix_at(mat, j, k) = tmp; + break; + case MATRIX_SWAP_COLS: + tmp = matrix_at(mat, k, i); + matrix_at(mat, k, i) = matrix_at(mat, k, j); + matrix_at(mat, k, j) = tmp; + break; + } } } |