Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tính ma trận chuyển vị (Transpose) trong C

Khái niệm ma trận chuyển vị

Ma trận chuyển vị của ma trận A (ký hiệu AT) là ma trận có hàng bằng cột của A và cột bằng hàng của A. Phần tử tại vị trí (i,j) của A sẽ chuyển sang vị trí (j,i) của AT.

Ví dụ: Ma trận 2×3 → Chuyển vị thành 3×2

Ma trận gốc:        Ma trận chuyển vị:
1  2  3             1  4
4  5  6             2  5
                    3  6

Logic cốt lõi

for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
        transpose[j][i] = matrix[i][j];
    }
}

Chương trình 1: Sử dụng mảng tĩnh (kích thước cố định)

#include <stdio.h>

int main() {
    int m, n, i, j;
    int matrix[10][10], transpose[10][10];
    
    printf("Nhap so hang va cot: ");
    scanf("%d %d", &m, &n);
    
    printf("Nhap cac phan tu ma tran:\n");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }
    
    // Tính chuyển vị
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            transpose[j][i] = matrix[i][j];
        }
    }
    
    // In kết quả (kích thước n x m)
    printf("Ma tran chuyen vi:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("%d\t", transpose[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

Kết quả chạy chương trình 1

Nhap so hang va cot: 2 3
Nhap cac phan tu ma tran:
1 2 3
4 5 6
Ma tran chuyen vi:
1       4
2       5
3       6

Chương trình 2: Sử dụng #define cho kích thước cố định

#include <stdio.h>
#define ROW 2
#define COL 5

int main() {
    int i, j;
    int mat[ROW][COL], trans[COL][ROW];
    
    printf("Nhap ma tran %dx%d:\n", ROW, COL);
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            scanf("%d", &mat[i][j]);
        }
    }
    
    // Tạo ma trận chuyển vị
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            trans[j][i] = mat[i][j];
        }
    }
    
    printf("\nMa tran chuyen vi (%dx%d):\n", COL, ROW);
    for (i = 0; i < COL; i++) {
        for (j = 0; j < ROW; j++) {
            printf("%d ", trans[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

Kết quả chạy chương trình 2

Nhap ma tran 2x5:
1 2 3 4 5
5 4 3 2 1

Ma tran chuyen vi (5x2):
1 5
2 4
3 3
4 2
5 1

Lưu ý quan trọng

  • Kích thước ma trận chuyển vị là n × m (đảo ngược m × n)
  • Chỉ số hàng và cột được hoán đổi: transpose[j][i] = matrix[i][j]
  • Khi in, vòng lặp ngoài chạy tới n (số cột gốc), vòng lặp trong chạy tới m (số hàng gốc)