Транспонирование матрицы - 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, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д