Есть похожая программка. Считывает N, заполняет матрицу NxN, транспонирует ее и умножает на оригинальную. Думаю не особо сложно будет взять нужную часть.
http://pastebin.com/GYS2jGrn
Другие языки программирования и технологии
Помогите, пожалуйста. Как на языке СИ транспонировать матрицу?
транспонировать матрицу - всего лишь поменять местами индексы. Т. е. переписать элементы а (м, н) в б (н, м) : а (i,j)=б (j,i)
#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;
}
#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;
}
а как ты ее ввела в язык СИ ?
Похожие вопросы
- дана матрица а размерности n на m. Найти максимальный элемент в каждом столбце. Помогите пожалуйста решить. На языке C++
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!
- Помогите с тестом по языку СИ
- Помогите плиз написать программу(язык Си)
- помогите написать программу на языке Си: В одномерном массиве целых чисел заменить максимальное значение минимальным.
- Помогите пожалуйста решить на языке C++
- помогите написать программу на языке си
- Добрый день. Помогите пожалуйста с выбором языка программирования для изучения.
- помогите пожалуйста написать програмку на си ++
- Помогите пожалуйста решить задание (Язык Паскаль).