โจทย์
เขียนโปรแกรม 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 ไม่ Reset | row=row+A[i][j] นอก Loop | row_sum = 0 ใน Loop i |
| Column sum ใช้ i ผิด | printf(..., i, col) i=5 | printf(..., j, col_sum) |
| Variable Name Confusion | row, 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