โจทย์
หาค่าสูงสุด (Max) และต่ำสุด (Min) จาก Array โดยใช้ Dynamic Memory Allocation
โปรแกรม
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // INT_MIN, INT_MAX
int main() {
int *p, n, i;
int max = INT_MIN; // -2147483648
int min = INT_MAX; // 2147483647
printf("Enter size: ");
scanf("%d", &n);
// จอง Memory
p = (int *)malloc(n * sizeof(int));
if (p == NULL) {
printf("Memory allocation failed\n");
return 1;
}
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", p + i);
// หา Max/Min พร้อมกัน
if (*(p + i) > max) max = *(p + i);
if (*(p + i) < min) min = *(p + i);
}
printf("Maximum = %d\n", max);
printf("Minimum = %d\n", min);
free(p);
return 0;
}
ผลลัพธ์ตัวอย่าง:
Enter size: 5
Enter 5 elements:
12 45 3 89 22
Maximum = 89
Minimum = 3
การปรับปรุงจากโค้ดต้นฉบับ
- เพิ่ม
<limits.h>ใช้INT_MIN/INT_MAXแทน Magic Numbers - เพิ่ม Error Checking หลัง
malloc() - คำนวณ Max/Min ใน Loop เดียว (Single Pass)
- ใช้
free(p)ปล่อย Memory
ขยายความ: หา Index ของ Max/Min
int max_idx = 0, min_idx = 0;
for (i = 1; i < n; i++) {
if (*(p + i) > *(p + max_idx)) max_idx = i;
if (*(p + i) < *(p + min_idx)) min_idx = i;
}
printf("Max at index %d, Min at index %d\n", max_idx, min_idx);
การใช้ realloc() ขยาย Array
// เพิ่มขนาด Array จาก n เป็น n+5
int *temp = realloc(p, (n + 5) * sizeof(int));
if (temp != NULL) {
p = temp;
n += 5;
// รับข้อมูลเพิ่ม...
}