Транспонирование матрицы - C (СИ) (73680)
Формулировка задачи:
Нужно транспонировать матрицу тобишь A[j][i] сделать A[i][j]
Вот мой код
что я делаю не так?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
#define Left 1
#define Right 100
#define N 10
#define M 10
int main(void)
{
int i, j;
int A[N][M];
int transp_A[N][M];
SetConsoleCP(1551);
SetConsoleOutputCP(1251);
srand((unsigned)time(NULL));
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
A[i][j] = (rand() % Right) + Left;
printf("Исходная матрица:\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%5d", A[i][j]);
}
putchar('\n');
}
printf("Транспонированная матрица:\n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
transp_A[j][i]=A[i][j];
printf("%5d",transp_A[j][i]);
}
putchar('\n');
}
_getch();
return 0;
}Решение задачи: «Транспонирование матрицы»
textual
Листинг программы
#include <stdio.h>
#define ROW 2
#define COL 5
int mat_a[ROW][COL] = {
{0,1,2,3,4},
{5,6,7,8,9}
}; // исходная матрица
int trans_mat[COL][ROW]; // заготовка для транспонированной матрицы (пустая)
void transparacy_matr(int *matA, int *matT, int matArow, int matAcolmn);
void print_matr(int *matriX, int roW, int coL);
int main(void)
{
int *ptr_matr, *ptr_matr_Tr; // указатели на исходную и загатовку
ptr_matr = mat_a[0]; // инициализация указателей значениями (нулевые знач. массивов указателей)
ptr_matr_Tr = trans_mat[0]; // для 3-х мерного случая (если mat_a[7][3][5]) было бы так: ptr_matr = mat_a[0][0]
print_matr(ptr_matr, ROW, COL); // печать исходной матрицы правильный порядок строк и столбцов
transparacy_matr(ptr_matr, ptr_matr_Tr, ROW, COL); // транспонирование исходной матрицы
printf("\n<br>"); // печать разделителя
print_matr(ptr_matr_Tr, COL, ROW); // печать транспонированной матрицы (строки ROW меняются местом cо столбцами COL)
return 0;
}
//##################################
void transparacy_matr(int *matA, int *matT, int matArow, int matAcolmn)
{
int i,j;
for(i=0; i < matArow; i++)
for(j=0; j < matAcolmn; j++)
matT[i + matArow*j] = matA[i*matAcolmn + j]; // индексы идут по столбцам matT, а в matA по строкам
}
//##################################
void print_matr(int *matriX, int roW, int coL)
{
int i;
for(i=0; i < roW*coL; i++)
{
if(i%coL==0)
printf("\n");
printf(" %d", matriX[i]);
}
}
Объяснение кода листинга программы
- Объявление переменных и массивов:
- mat_a - исходная матрица размером ROW x COL
- trans_mat - матрица для транспонированной матрицы размером COL x ROW
- ROW и COL - константы, определяющие размерность матрицы
- ptr_matr и ptr_matr_Tr - указатели на исходную и транспонированную матрицы соответственно
- main - функция, содержащая основной код программы
- transparacy_matr - функция для транспонирования матрицы
- print_matr - функция для печати матрицы
- Инициализация указателей:
- ptr_matr инициализируется значением первого элемента первого столбца исходной матрицы
- ptr_matr_Tr инициализируется значением первого элемента первого столбца транспонированной матрицы
- Печать исходной матрицы:
- Вызывается функция print_matr с указателем на исходную матрицу и ее размерностью
- Транспонирование матрицы:
- Вызывается функция transparacy_matr с указателями на исходную и транспонированную матрицы и их размерностью
- Печать транспонированной матрицы:
- Вызывается функция print_matr с указателем на транспонированную матрицу и ее размерностью
- Завершение программы:
- Возвращается 0 из функции main, что означает успешное завершение программы