Search…

Random Số Trong C++

16/06/20152 min read
Hướng dẫn cách sinh ra số ngẫu nhiên và số ngẫu nhiên trong 1 khoảng xác định với hàm rand() trong C++ (thư viện cstdlib).

Trong quá trình kiểm thử chương trình, vấn đề nhập số liệu có thể làm bạn cảm thấy vô cùng nhàm chán, mất thời gian và thậm chí là khiến bạn căng thẳng. Đặc biệt, điều này càng dễ dàng xảy ra hơn nếu bạn gặp phải lỗi phải sửa đi sửa lại nhiều lần hoặc số lượng số liệu cần nhập quá nhiều. Bài viết này hướng dẫn sử dụng 1 hàm tiện ích rand() để sinh ra các số ngẫu nhiên.

Tạo 1 số ngẫu nhiên

Để tạo ra một số ngẫu nhiên, cstdlib hỗ trợ hàm rand(). Hàm này trả về cho chúng ta kết quả là một giá trị nguyên có giá trị từ 0 đến RAND_MAX, với RAND_MAX là một hằng số được định nghĩa trong thư viện <cstdlib>. Để sử dụng cần khai báo thư viện <cstdlib>.

Ví dụ:

#include <cstdlib>
#include <ctime>

int main()
{
	srand(time(NULL));
	int res = rand();
	return 0;
}

Lưu ý: Giá trị RAND_MAX trên từng trình biên dịch là không giống nhau. Chẳng hạn như với trình biên dịch của Visual Studio 2019 cho C++, giá trị RAND_MAX là ‭32767‬. Kiểm tra giá trị này một cách dễ dàng bằng đoạn code ngắn gọn sau.

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
	cout << RAND_MAX;
	return 0;
}

Tạo số ngẫu nhiên thay đổi theo thời gian

Khi sử dụng hàm rand() để tạo ra một số ngẫu nhiên bất kì như trên. Ở bất kỳ lần chạy nào các kết quả ở mỗi lần chạy đều giống nhau theo thứ tự. Để mỗi lần chạy cho ra 1 chuỗi kết quả khác nhau, thay đổi random seed bằng cách sử dụng hàm srand() và truyền vào 1 con số có thể thay đổi được (thông thường sử dụng đơn vị thời gian hiện tại time(NULL) ở mỗi lần chạy - thư viện <ctime>). Đặt dòng code srand(time(NULL)) khi chương trình bắt đầu trước khi hàm rand() được sử dụng.

#include <cstdlib>
#include <ctime>

int main()
{
	srand(time(NULL));
	int res = rand();
	return 0;
}

Tạo số ngẫu nhiên với một khoảng xác định

Hai cách sử dụng trên đều cho kết quả giá trị ngẫu nhiên là những giá trị trong khoảng từ 0 đến RAND_MAX. Để tạo ra một giá trị ngẫu nhiên trong khoảng xác định, sử dụng công thức rand() % (max – min + 1) + min để nhận kết quả trong khoảng từ min đến max.

Ví dụ: random giá trị trong khoảng [3, 50]

#include <cstdlib>
#include <ctime>

int main()
{
	srand(time(NULL)); 
	int res = rand() % (50 - 3 + 1) + 3;
	return 0;
}

Các bài hữu ích tương tự

Giải Thuật Sinh Chuỗi Ngẫu Nhiên

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024