1. บทนำ
ภาษา C เป็นภาษาการเขียนโปรแกรมที่ถูกใช้อย่างแพร่หลายในงานเขียนโปรแกรมระบบระดับต่ำและการพัฒนาเกม โดยหนึ่งในฟังก์ชันที่ใช้บ่อยคือ “การสร้างตัวเลขสุ่ม” ซึ่งมีการประยุกต์ใช้อย่างหลากหลาย เช่น การสร้างองค์ประกอบสุ่มในเกม การจำลอง (simulation) การเข้ารหัสข้อมูล และการสร้างข้อมูลทดสอบ เป็นต้น
บทความนี้จะอธิบายวิธีการสร้างตัวเลขสุ่มในภาษา C โดยกำหนดช่วงของค่า พร้อมตัวอย่างโค้ด เพื่อให้ผู้อ่านเข้าใจหลักการทำงานและสามารถนำไปประยุกต์ใช้ในโปรแกรมจริงได้
2. พื้นฐานของการสร้างตัวเลขสุ่มในภาษา C
ในภาษา C การสร้างตัวเลขสุ่มจะใช้ไลบรารีมาตรฐาน <stdlib.h>
ฟังก์ชัน rand()
จะสร้างจำนวนเต็มสุ่มตั้งแต่ 0 ถึง RAND_MAX
(ประมาณ 2147483647) แต่หากใช้ค่า seed เดิม จะได้ลำดับตัวเลขสุ่มเดิมทุกครั้ง
การสร้างเลขสุ่มแบบ Pseudo และการตั้งค่า Seed
แนวคิดสำคัญของการสร้างตัวเลขสุ่มคือ “ค่า seed” ซึ่งเป็นจุดเริ่มต้นของลำดับตัวเลขสุ่ม หากไม่ตั้งค่า seed จะทำให้ได้ผลลัพธ์ซ้ำเดิมทุกครั้ง เพื่อป้องกันปัญหานี้สามารถตั้งค่า seed ด้วยฟังก์ชัน srand()
โดยปกติมักใช้เวลาปัจจุบันจากฟังก์ชัน time()
เป็นค่า seed
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
printf("%d\n", rand());
return 0;
}
วิธีนี้จะทำให้ได้ตัวเลขสุ่มที่แตกต่างกันทุกครั้งที่รันโปรแกรม
3. วิธีการสร้างตัวเลขสุ่มในช่วงที่กำหนด
หากต้องการตัวเลขสุ่มในช่วงที่กำหนด ต้องใช้การคำนวณทางคณิตศาสตร์ร่วมกับผลลัพธ์จาก rand()
สูตรพื้นฐานคือ:
rand() % (max - min + 1) + min
สูตรนี้จะสร้างจำนวนเต็มสุ่มตั้งแต่ min
ถึง max
โค้ดตัวอย่าง: การสร้างตัวเลขสุ่มในช่วง
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int min = 1;
int max = 100;
srand((unsigned int)time(NULL));
int random_number = rand() % (max - min + 1) + min;
printf("Random number between %d and %d: %d\n", min, max, random_number);
return 0;
}
โค้ดนี้จะสร้างตัวเลขสุ่มในช่วง 1 ถึง 100
4. การสร้างตัวเลขสุ่มทศนิยม
การสร้างตัวเลขสุ่มทศนิยมสามารถทำได้โดยใช้ rand()
ร่วมกับ RAND_MAX
เพื่อปรับสเกล ตัวอย่างการสร้างตัวเลขสุ่มระหว่าง 0.0 ถึง 1.0 คือ:
โค้ดตัวอย่าง: ตัวเลขสุ่มทศนิยม
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
double random_number = (double)rand() / RAND_MAX;
printf("Random number between 0.0 and 1.0: %f\n", random_number);
return 0;
}
วิธีนี้สามารถปรับใช้กับช่วงทศนิยมอื่นได้ เช่น หากต้องการช่วง 0.0 ถึง 5.0 เพียงคูณผลลัพธ์ด้วย 5

5. ตัวอย่างการประยุกต์ใช้ตัวเลขสุ่ม
การจำลองการทอยลูกเต๋า
ในงานพัฒนาเกม การจำลองลูกเต๋าเป็นตัวอย่างพื้นฐานของการใช้ตัวเลขสุ่ม โค้ดด้านล่างจะสุ่มค่าระหว่าง 1 ถึง 6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
int dice_roll = rand() % 6 + 1;
printf("Dice roll: %d\n", dice_roll);
return 0;
}
การประมาณค่า π ด้วยวิธี Monte Carlo
วิธี Monte Carlo ใช้ตัวเลขสุ่มเพื่อประมาณค่าของปัญหาที่ซับซ้อน ตัวอย่างโค้ดต่อไปนี้จะแสดงการประมาณค่า π:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n_trials = 1000000;
int n_inside = 0;
double x, y, pi;
srand((unsigned int)time(NULL));
for (int i = 0; i < n_trials; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1) {
n_inside++;
}
}
pi = 4.0 * n_inside / n_trials;
printf("Approximated π: %f\n", pi);
return 0;
}
วิธีนี้ถูกนำไปใช้บ่อยในงานจำลองทางฟิสิกส์และงานวิเคราะห์ทางสถิติ
6. สรุป
บทความนี้ได้อธิบายวิธีการสร้างตัวเลขสุ่มในภาษา C โดยครอบคลุมตั้งแต่การใช้ rand()
และ srand()
พื้นฐาน การกำหนดช่วงตัวเลข การสร้างเลขสุ่มทศนิยม ไปจนถึงตัวอย่างการประยุกต์ใช้งานจริง การสร้างตัวเลขสุ่มเป็นทักษะสำคัญที่มีประโยชน์ในหลายด้าน เช่น การพัฒนาเกม และการจำลองข้อมูล
คุณสามารถนำความรู้จากบทความนี้ไปปรับใช้ในโปรเจ็กต์ถัดไปได้ทันที