Другие языки программирования и технологии

Помогите, пожалуйста. Как на языке СИ транспонировать матрицу?

Metin Akgun
Metin Akgun
1 165
Есть похожая программка. Считывает N, заполняет матрицу NxN, транспонирует ее и умножает на оригинальную. Думаю не особо сложно будет взять нужную часть.

http://pastebin.com/GYS2jGrn
Farhod Gadoev
Farhod Gadoev
5 871
Лучший ответ
транспонировать матрицу - всего лишь поменять местами индексы. Т. е. переписать элементы а (м, н) в б (н, м) : а (i,j)=б (j,i)
Саша Самоха
Саша Самоха
54 957
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <conio.h>
int random_matrix(int **, const size_t, const size_t, const int _left, int _rigth);
void show_matrix(int **, const size_t, const size_t);
void destroy_matrix(int **, size_t);
int ** create_matrix(int **, const size_t, const size_t);
int ** transpose_matrix(int **, int **, const size_t, const size_t);
int main() {
    int ** matrix = NULL, ** tmatrix = NULL;
    size_t rows = 5, cols = 6;
    matrix = create_matrix(matrix, rows, cols);
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    if (random_matrix(matrix, rows, cols, 1, 100)) {
        printf("\tИсходная матрица: \n\n");
        show_matrix(matrix, rows, cols);
        if (tmatrix = transpose_matrix(tmatrix, matrix, rows, cols)) {
            printf("\t\n\n Транспонированная матрица: \n\n");
            show_matrix(tmatrix, cols, rows);
            destroy_matrix(tmatrix, cols);
        } else printf("\n\nОшибка! \n\a");
    } else printf("\n\nОшибка! \n\a");
    destroy_matrix(matrix, rows);
    _getch();
    return 0;
}
int ** transpose_matrix(int ** _tmatrix, int ** _matrix, const size_t _r, const size_t _c) {
    size_t r, c;
    if (_matrix) {
        _tmatrix = create_matrix(_tmatrix, _c, _r);
        for (r = 0; r < _r; r++) for (c = 0; c < _c; c++) _tmatrix[c][r] = _matrix[r][c];
    }
    return _tmatrix;
}
int random_matrix(int ** _matrix, const size_t _rows, const size_t _cols, const int _left, int _rigth) {
    size_t row, col;
    if (_left >= _rigth) return 0;
    if (_left < 0 && _rigth >= 0) _rigth += abs(_left);
    else if (_left < 0 && _rigth < 0) _rigth = abs(_left) - abs(_rigth);
    else if (_left >= 0 && _rigth > 0) _rigth -= _left;
    for (row = 0; row < _rows; row++) for (col = 0; col < _cols; col++) _matrix[row][col] = rand() % _rigth + _left;
    return 1;
}
void show_matrix(int ** _matrix, const size_t _rows, const size_t _cols) {
    size_t row, col;
    if (_cols && _rows) for (row = 0; row < _rows; row++, printf("\n")) for (col = 0; col < _cols; col++) printf("%5i", _matrix[row][col]);
    else printf("Нет данных для отображения! \n");
}
void destroy_matrix(int ** _matrix, size_t _rows) {
    size_t row;
    for (row = 0; row < _rows; row++) free(_matrix[row]);
    free(_matrix);
}
int ** create_matrix(int ** _matrix, const size_t _rows, const size_t _cols) {
    size_t row;
    _matrix = (int **)calloc(_rows, sizeof(int *));
    for (row = 0; row < _rows; row++) _matrix[row] = (int *)calloc(_cols, sizeof(int));
    return _matrix;
}
Сергей Ивлев
Сергей Ивлев
68 086
а как ты ее ввела в язык СИ ?