Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

คำนวณ Row Sum และ Column Sum ของ Matrix 5x5 ใน C


โจทย์

เขียนโปรแกรม C คำนวณผลรวมแต่ละแถว (Row Sum) และแต่ละคอลัมน์ (Column Sum) ของ Matrix 5x5 โดยรับค่าตอน Runtime

ตรรกะการคำนวณ

Row Sum (ผลรวมแถว)


for (i = 0; i < 5; i++) {        // วนแถว
    row_sum = 0;
    for (j = 0; j < 5; j++) {    // วนคอลัมน์
        row_sum += A[i][j];
    }
    printf("Row %d sum: %d\n", i, row_sum);
}

Column Sum (ผลรวมคอลัมน์)


for (j = 0; j < 5; j++) {        // วนคอลัมน์
    col_sum = 0;
    for (i = 0; i < 5; i++) {    // วนแถว
        col_sum += A[i][j];
    }
    printf("Column %d sum: %d\n", j, col_sum);
}

ตัวอย่างโปรแกรมสมบูรณ์ (แก้ไข Bug จากต้นฉบับ)

#include <stdio.h>

int main() {
    int A[5][5];
    int i, j, row_sum, col_sum;
    
    // Input Matrix
    printf("Enter 5x5 matrix elements:\n");
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            printf("A[%d][%d]: ", i, j);
            scanf("%d", &A[i][j]);
        }
    }
    
    // Row Sums
    printf("\n--- Row Sums ---\n");
    for (i = 0; i < 5; i++) {
        row_sum = 0; // Reset ต่อแถว
        for (j = 0; j < 5; j++) {
            row_sum += A[i][j];
        }
        printf("Row %d: %d\n", i, row_sum);
    }
    
    // Column Sums
    printf("\n--- Column Sums ---\n");
    for (j = 0; j < 5; j++) {
        col_sum = 0; // Reset ต่อคอลัมน์
        for (i = 0; i < 5; i++) {
            col_sum += A[i][j];
        }
        printf("Column %d: %d\n", j, col_sum);
    }
    
    return 0;
}

ผลลัพธ์ตัวอย่าง:


Enter 5x5 matrix elements:
A[0][0]: 1  A[0][1]: 2  A[0][2]: 3  A[0][3]: 4  A[0][4]: 5
A[1][0]: 6  A[1][1]: 7  A[1][2]: 8  A[1][3]: 9  A[1][4]: 10
A[2][0]: 11 A[2][1]: 12 A[2][2]: 13 A[2][3]: 14 A[2][4]: 15
A[3][0]: 16 A[3][1]: 17 A[3][2]: 18 A[3][3]: 19 A[3][4]: 20
A[4][0]: 21 A[4][1]: 22 A[4][2]: 23 A[4][3]: 24 A[4][4]: 25

--- Row Sums ---
Row 0: 15
Row 1: 40
Row 2: 65
Row 3: 90
Row 4: 115

--- Column Sums ---
Column 0: 55
Column 1: 60
Column 2: 65
Column 3: 70
Column 4: 75

Bug ในโค้ดต้นฉบับและวิธีแก้

ปัญหาโค้ดเดิมแก้ไข
Row sum ไม่ Resetrow=row+A[i][j] นอก Looprow_sum = 0 ใน Loop i
Column sum ใช้ i ผิดprintf(..., i, col) i=5printf(..., j, col_sum)
Variable Name Confusionrow, column ใช้ซ้ำrow_sum, col_sum แยกชัดเจน

ขยายเป็น Matrix ขนาดไดนามิก (Dynamic)


int rows, cols;
scanf("%d %d", &rows, &cols);
int **A = malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++) A[i] = malloc(cols * sizeof(int));
// ... คำนวณเหมือนเดิม ...
// Free memory