VicoTas
Câu hỏi
Lê Thị Hoa Hồng hoahong
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

Danh sách câu trả lời (1)
Mạnh Linh thieugia88 26/04/2013 21:39
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;
}
Trả lời câu hỏi
Tải lại mã
Câu hỏi lĩnh vực Lập trình
Phương Hỏi về lập trình?

Đăng lúc: 21:39 - 26/04/2013 trong Lập trình

nophoto Các bác giúp em bài này với viết chương trình cộng 2 số có tối đa 50 chữ số (dùng visualbasic)?

Đăng lúc: 21:39 - 26/04/2013 trong Lập trình

Manh Linh Trần Anh và bản Win dùng thử 30 ngày?

Đăng lúc: 21:39 - 26/04/2013 trong Lập trình

Củ Chuối Xin hướng dẫn tạo nút lệnh max/min trong chương trình VB?

Đăng lúc: 21:39 - 26/04/2013 trong Lập trình

Hoài Nam (Nam Tước) Hướng dẫn sử dụng chương trình diệt virus avast

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

MrTien Làm thế nào để chuyển giá trị từ trang ASP.NET này sang trang khác

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

nophoto Tao glo da nang thi lam the nao?

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Lê Văn Tùng dùng VB để quản lý hồ sơ sinh viên

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

nophoto Bạn nào cho mình xin giáo trình hay tài liệu để học CAD 2008 đi. thanks!

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Hoài Nam (Nam Tước) Cho tôi hỏi chương trình Visual Basic 6 là gì?

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Thu Trang GIÚP MÌNH BÀI TẬP PASCAL VỚI????????

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Hương Cho em hỏi là máy tính có những chỉ số như thế nào thì phù hợp?

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Củ Chuối Công nghệ LAMP là gì????

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Thu Trang Hỏi về Lập trình với telnet client ?

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

lighting Hỏi về việc tạo Liên Kết Giữa ASP.NET và JSP ?

Đăng lúc: 21:38 - 26/04/2013 trong Lập trình

Uk Hỏi về Giao tiếp máy tính với PLC và VXL qua cổng Com bằng Visual Basic 6.0 ?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Đức Việt Xin hướng dẫn lập trình VB đọc dữ liệu của Microsoft Word?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Đức Việt Cách dùng thư viện ActiveX Control tên là SqlDmo?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Đức Cảnh Có cách nào chuyển code viết bằng Visual Foxpro sang VB .Net không?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Chip chip Tôi muốn thiết kế 1 chương trình bằng VB6, đề nghị hướng dẫn?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Rao vặt Siêu Vip