Trong lập trình C, việc tạo ra các số ngẫu nhiên là một công việc phổ biến trong nhiều ứng dụng như chơi game, mô phỏng, hoặc đo lường hiệu suất. Để làm việc này, thư viện chuẩn C cung cấp hàm rand()
, nhưng để khởi tạo bộ sinh số ngẫu nhiên một cách có kiểm soát, chúng ta sử dụng hàm srand()
.
Hàm rand()
trong C
Trước khi đi vào chi tiết về hàm srand()
, hãy tìm hiểu về hàm rand()
. Đây là hàm số trả về một số nguyên ngẫu nhiên trong khoảng từ 0 đến RAND_MAX
. Mặc định, RAND_MAX
thường có giá trị là 32767. Cú pháp sử dụng hàm này rất đơn giản:
#include <stdlib.h>
int main() {
int random_number = rand();
return 0;
}
Khởi tạo bộ sinh số ngẫu nhiên với srand()
Hàm rand()
sẽ tạo ra các số ngẫu nhiên, nhưng nếu bạn chạy chương trình nhiều lần, bạn sẽ thấy rằng các số ngẫu nhiên được sinh ra không thay đổi từ lần chạy này đến lần chạy khác. Để thay đổi trình tự các số ngẫu nhiên sinh ra, chúng ta sử dụng hàm srand()
để thiết lập một "seed" (hạt giống).
Hàm srand()
có cú pháp như sau:
void srand(unsigned int seed);
Tham số seed
là một số nguyên dùng để khởi tạo bộ sinh số ngẫu nhiên. Ví dụ, bạn có thể khởi tạo với một giá trị cố định như sau:
#include <stdlib.h>
int main() {
srand(1); // Khởi tạo với seed là 1
int random_number = rand();
return 0;
}
Sử dụng giá trị thời gian làm seed
Một cách phổ biến để khởi tạo bộ sinh số ngẫu nhiên mỗi lần chạy chương trình là sử dụng giá trị thời gian hiện tại làm seed
. Điều này đảm bảo rằng mỗi lần chạy chương trình sẽ tạo ra một dãy số ngẫu nhiên khác nhau. Để làm việc này, chúng ta sử dụng hàm time()
từ thư viện time.h
:
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(0)); // Khởi tạo với giá trị thời gian hiện tại
int random_number = rand();
return 0;
}
Trong đoạn mã trên, time(0)
trả về giá trị thời gian hiện tại dưới dạng số giây đã trôi qua từ mốc thời gian 1/1/1970. Giá trị này sau đó được sử dụng làm seed
cho hàm srand()
.
Ví dụ thực tế
Dưới đây là một ví dụ đầy đủ về cách khởi tạo và sử dụng bộ sinh số ngẫu nhiên trong C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// Khởi tạo bộ sinh số ngẫu nhiên với giá trị thời gian hiện tại
srand(time(0));
// Tạo và in ra 5 số ngẫu nhiên
for (int i = 0; i < 5; i++) {
int random_number = rand();
printf("%d\n", random_number);
}
return 0;
}
Chạy đoạn mã trên nhiều lần, bạn sẽ thấy các dãy số ngẫu nhiên khác nhau được in ra mỗi lần.
Kết luận
Việc khởi tạo bộ sinh số ngẫu nhiên bằng hàm srand()
là rất quan trọng để đảm bảo rằng mỗi khi chương trình được chạy, các số ngẫu nhiên tạo ra là thực sự ngẫu nhiên. Bằng cách sử dụng time()
để khởi tạo seed
, chúng ta có thể đạt được mục đích này một cách hiệu quả và đơn giản. Việc hiểu rõ cách sử dụng srand()
cùng với rand()
sẽ giúp bạn trong việc phát triển các ứng dụng cần tính ngẫu nhiên cao.
Comments