Câu hỏi

26/04/2013 21:39
Vấn đề sinh số ngẫu nhiên?
Cho em hỏi trang vật giá co giải đáp thắc mắc về các vấn đề học công nghệ thông tin ko a? nếu có xin giải thích cho em về hàm rand() sinh số ngẫu nhiên va cú pháp của nó, và còn srand (unsigned....) nữa ạ. em cám ơn
thieugia88
26/04/2013 21:39
Danh sách câu trả lời (1)

CÓ phải bạn đang học C++ nếu đúng bạn có thể tham khảo vấn đề này bên dưới nhé
Hàm rand() (nằm trong thư viện stdlib.h)
Cú pháp:
int rand();
Hàm rand() được sử dụng để sinh ra một số nguyên ngẫu nhiên nằm trong khoảng từ 0 đến RAND_MAX.
Ta sử dụng đoạn chương trình sau để sinh ra một số nguyên ngẫu nhiên nằm trong khoảng từ 0 đến RAND_MAX.
#include
#include
int main()
{
int so_nguyen_ngau_nhien = rand();
cout << so_nguyen_ngau_nhien << endl;
}
Nhận xét: Ta nhận thấy là mỗi khi chạy lại chương trình ta đều nhận được một số nguyên giống nhau nằm trong khoảng từ 0 đến RAND_MAX. Để giải quyết vấn đề này ra sẽ phải sử dụng hàm srand() khi bắt đầu chạy chương trình (ta sẽ tìm hiểu hàm srand() ở phần dưới)
--------------------------------------------
Hàm srand() (nằm trong thư viện stdlib.h)
Cú pháp:
void srand (unsigned int seed);
Hàm này được sử dụng để đặt điểm bắt đầu cho việc sinh số ngẫu nhiên của hàm rand(). Tham số seed chính là điểm bắt đầu để sinh số ngẫu nhiên.
Ta thấy rằng nếu dùng hàm rand() mà không sử dụng hàm srand() để đặt điểm bắt đầu thì mỗi lần chạy chương trình hàm rand() sẽ sinh ra các con số tương tự nhau. Để giải quyết vấn đề này ta sẽ đặt hàm srand() phía trên hàm rand() và thay đổi giá trị của tham số seed trong hàm srand() mỗi khi bắt đầu chạy chương trình. Việc thay đổi này, ta sẽ sử dụng giá trị trả về của hàm time() để làm giá trị cho seed bởi tại mỗi thời điểm thì giá trị trả về của hàm time() là khác nhau. Cách viết cụ thể như sau: srand ( (unsigned) time(NULL) );
Chú ý:
- Nếu seed = 1 thì kết quả số ngẫu nhiên do rand() sinh ra tương tự như không có hàm srand() ở phía trên.
- Nếu seed là một hằng số nguyên không đổi thì mỗi khi chạy chương trình, mặc dù có hàm srand() ở phía trên hàm rand() thì số ngẫu nhiên được sinh ra vẫn là một con số giống nhau (Điều này được giải thích bởi điểm bắt đầu vào chương trình do hàm srand() xác định là như nhau)
Đoạn chương trình sau sẽ sinh ra một số ngẫu nhiên trong khoảng từ 0 đến RAND_MAX và mỗi lần chạy lại thì chương trình sẽ không sinh ra các số giống nhau nữa.
#include
#include
#include
void main()
{
srand((unsigned)time(NULL)); //unsigned để xác định là số không dấu
int random_integer = rand();
cout << random_integer << endl;
}
Hàm rand() (nằm trong thư viện stdlib.h)
Cú pháp:
int rand();
Hàm rand() được sử dụng để sinh ra một số nguyên ngẫu nhiên nằm trong khoảng từ 0 đến RAND_MAX.
Ta sử dụng đoạn chương trình sau để sinh ra một số nguyên ngẫu nhiên nằm trong khoảng từ 0 đến RAND_MAX.
#include
#include
int main()
{
int so_nguyen_ngau_nhien = rand();
cout << so_nguyen_ngau_nhien << endl;
}
Nhận xét: Ta nhận thấy là mỗi khi chạy lại chương trình ta đều nhận được một số nguyên giống nhau nằm trong khoảng từ 0 đến RAND_MAX. Để giải quyết vấn đề này ra sẽ phải sử dụng hàm srand() khi bắt đầu chạy chương trình (ta sẽ tìm hiểu hàm srand() ở phần dưới)
--------------------------------------------
Hàm srand() (nằm trong thư viện stdlib.h)
Cú pháp:
void srand (unsigned int seed);
Hàm này được sử dụng để đặt điểm bắt đầu cho việc sinh số ngẫu nhiên của hàm rand(). Tham số seed chính là điểm bắt đầu để sinh số ngẫu nhiên.
Ta thấy rằng nếu dùng hàm rand() mà không sử dụng hàm srand() để đặt điểm bắt đầu thì mỗi lần chạy chương trình hàm rand() sẽ sinh ra các con số tương tự nhau. Để giải quyết vấn đề này ta sẽ đặt hàm srand() phía trên hàm rand() và thay đổi giá trị của tham số seed trong hàm srand() mỗi khi bắt đầu chạy chương trình. Việc thay đổi này, ta sẽ sử dụng giá trị trả về của hàm time() để làm giá trị cho seed bởi tại mỗi thời điểm thì giá trị trả về của hàm time() là khác nhau. Cách viết cụ thể như sau: srand ( (unsigned) time(NULL) );
Chú ý:
- Nếu seed = 1 thì kết quả số ngẫu nhiên do rand() sinh ra tương tự như không có hàm srand() ở phía trên.
- Nếu seed là một hằng số nguyên không đổi thì mỗi khi chạy chương trình, mặc dù có hàm srand() ở phía trên hàm rand() thì số ngẫu nhiên được sinh ra vẫn là một con số giống nhau (Điều này được giải thích bởi điểm bắt đầu vào chương trình do hàm srand() xác định là như nhau)
Đoạn chương trình sau sẽ sinh ra một số ngẫu nhiên trong khoảng từ 0 đến RAND_MAX và mỗi lần chạy lại thì chương trình sẽ không sinh ra các số giống nhau nữa.
#include
#include
#include
void main()
{
srand((unsigned)time(NULL)); //unsigned để xác định là số không dấu
int random_integer = rand();
cout << random_integer << endl;
}
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip