khóa huấn luyện và đào tạo Lập trình lập trình sẵn C++ khóa đào tạo và huấn luyện lập trình C++ căn phiên bản Phát sinh số thốt nhiên trong C++ (Random number generation)

Dẫn nhập

Ở bài học trước, mình đã chia sẻ cho chúng ta về TỪ KHÓA BREAK & CONTINUE. Từ khóa break được dùng để ngừng các vòng lặp while, do-while, for và câu đk switch. Từ khóa continue vẫn nhảy mang đến cuối vòng lặp hiện tại, với thực thi lần lặp tiếp theo.

Bạn đang xem: Cách dùng hàm rand trong c

Trong bài hôm nay, mình sẽ giới thiệu cho chúng ta về phương pháp Phát sinh số hốt nhiên trong C++ (Random number generation). Bạn có thể ứng dụng nó vào những chương trình yêu cầu phát sinh số ngẫu nhiên, những trò chơi, hoặc để vận dụng vào những bài học kinh nghiệm về mảng tiếp theo.

Nội dung

Để đọc hiểu bài xích này tốt nhất chúng ta nên có kỹ năng cơ bạn dạng về:

Trong bài xích ta đã cùng khám phá các vấn đề:

Tổng quan lại về gây ra số ngẫu nhiênPhát sinh số thốt nhiên trong C++Phát sinh số thốt nhiên trong C++ 11

Tổng quan về gây ra số ngẫu nhiên

Phát sinh các số ngẫu nhiên được ứng dụng không hề ít trong lập trình, đặc biệt là trong những trò chơi, những chương trình cần dữ liệu ngẫu nhiên, ….

Ví dụ về trò chơi bắn máy bay, nếu như nó không tồn tại những sự kiện ngẫu nhiên, hầu như máy bay sẽ luôn luôn luôn mở ra cùng 1 vị trí, tấn công bạn theo và một cách, đầy đủ vật thể mở ra trên mặt đường không lúc nào thay đổi, vv ... Và đó không phải là một trong trò đùa hay.

*

Vậy số bỗng dưng được chế tạo ra bằng cách nào?

Trong cuộc sống, các bạn thường tạo nên số ngẫu nhiên bằng phương pháp như nhấp lên xuống 1 bé xúc xắc, rút 1 lá thăm, tung 1 đồng xu, … và không ít vấn đề thốt nhiên trong cuộc sống khác.

Trong lập trình, những thứ phần lớn được tạo cho từ 2 số 0 cùng 1, chỉ gồm đúng hoặc sai, không tồn tại trường hợp ở giữa. Máy tính không thể rung lắc 1 con xúc xắc, rút 1 lá thăm, tung 1 đồng xu, … hiệu quả mà nó đưa ra, luôn luôn là kết quả rất có thể dự đoán trước, lấy một ví dụ 1 + 1 luôn luôn luôn là 2, không thể là 1 giá trị khác.

Vì vậy, các máy vi tính không có chức năng tạo ra số ngẫu nhiên. Ao ước tạo số ngẫu nhiên, xây dựng viên bắt buộc tự kiến tạo 1 khối hệ thống phát sinh số ngẫu nhiên.

Phát sinh số ngẫu nhiên là 1 vấn đề rất cần thiết trong lập trình, để đáp ứng nhu cầu đó, C++ đã xuất bản sẵn một số thuật toán tạo nên số ngẫu nhiên.

Phát sinh số bỗng dưng trong C++

Ngôn ngữ C++ cung ứng 2 hàm có chức năng khởi sinh sản và phát sinh số ngẫu nhiên, 2 hàm này ở trong thư viện cstdlib:

Khởi tạo thành số bỗng dưng (initialize random number generator)

Để khởi sinh sản số ngẫu nhiên, bạn sử dụng hàm srand() ở trong thư viện cstdlib:

void srand(unsigned int seed);

Lưu ý:

Hàm srand() nhận vào một trong những đối số hình dạng số nguyên ko dấu, được gọi là seed (hạt giống).Với từng seed khác nhau, hàm srand() sẽ tạo nên ra những cỗ số thốt nhiên khác nhau. đều số thốt nhiên này đang được lôi ra bởi hàm rand().Hai khởi tạo ra số ngẫu nhiên không giống nhau với cùng một seed sẽ khởi tạo ra cùng một kết quả.Chỉ nên gọi hàm srand() 1 lần trước khi phát sinh số ngẫu nhiên.

Kết quả gây ra số đột nhiên của hàm rand() nhờ vào vào quý giá của seed (hạt giống), nếu các lần khởi chế tác đều áp dụng cùng 1 seed, các số tự nhiên nhận được đang là như nhau.

Vì vậy, cực hiếm của seed (hạt giống) cũng phải là một số ngẫu nhiên trong mỗi lần truyền vào hàm srand(). Nghe có vẻ khá mâu thuẩn, bọn họ đang cần một số ngẫu nhiên để tạo thành các số ngẫu nhiên. Vậy, vấn đề là bạn ta đề xuất tìm ra 1 số biến hóa mỗi khi chương trình được chạy, không hẳn là số do người dùng chọn.

Một giải pháp cho sự việc này là dựa trên thời hạn hệ thống. Mỗi lần chương trình được chạy, thời hạn sẽ khác nhau. Nên người ta lấy cực hiếm thời gian khối hệ thống làm seed (hạt giống), hiệu quả sẽ là hầu như số ngẫu nhiên khác biệt trong mỗi lần chạy chương trình.

Để rước được thời gian từ hệ thống, bạn có thể sử dụng hàm time() ở trong thư viện ctime. Hàm này vẫn trả về số giây từ 00:00 giờ, ngày 01 tháng một năm 1970.

Xem thêm: Cách Dùng Google Photo Trên Iphone, Sao Lưu Ảnh Và Video

Ví dụ:

#include #include // for rand() và srand()#include // for time()using namespace std;int main()// initialize random number generatorsrand(time(0)); // mix initial seed value khổng lồ system clock// generate random number// ...return 0;Ví dụ trên mới chỉ khởi tạo số tự dưng từ thời gian hệ thống, phương pháp phát sinh những số tự dưng sẽ được reviews ở phần tiếp theo.

Phát sinh số tình cờ (generate random number)

Để phạt sinh một số ít ngẫu nhiên, bạn sử dụng hàm rand() ở trong thư viện cstdlib:

int rand(void);

int rand(void);Lưu ý:

Hàm rand() trả về 1 số ít nguyên ngẫu nhiên trong tầm từ 0 đến RAND_MAX.RAND_MAX là một trong hằng số có giá trị 32767, được có mang trong thư viện cstdlib.

Ví dụ về phát sinh số ngẫu nhiên:

int v1 = rand();// v1 in the range 0 to lớn 32767int v2 = rand() % 100;// v2 in the range 0 to lớn 99int v3 = rand() % 100 + 1;// v3 in the range 1 khổng lồ 100int v4 = rand() % 30 + 1985;// v4 in the range 1985-2014Một số lấy ví dụ về gây ra số ngẫu nhiên

Ví dụ về trò chơi đoán số từ là một số gây ra ngẫu nhiên:

#include #include // for rand() and srand()#include // for time()using namespace std;int main(){int nSecret, nGuess;// initialize random seedsrand(time(NULL));// generate secret number between 1 & 10nSecret = rand() % 10 + 1;do {cout > nGuess;if (nSecret nGuess) cout Output:

*

Chương trình trên vạc sinh một số ngẫu nhiên từ là 1 đến 10, với yêu cầu người tiêu dùng lặp lại việc lựa chọn một số làm sao để cho trùng với số đột nhiên của hệ thống.

Ví dụ tạo ra một hàng 10 chữ số ngẫu nhiên:

#include #include // for rand() & srand()#include // for time()using namespace std;int main(){srand(time(0)); // set initial seed value to lớn system clockfor (int count = 0; count Output:

*

Phát sinh số hốt nhiên trong C++ 11

C++ 11 cung ứng thêm không hề ít thuật toán tạo nên số tự dưng thuộc tủ sách random.

Ví dụ về 1 thuật toán phát sinh số ngẫu nhiên Mersenne Twister thường xuyên được sử dụng:

#include #include using namespace std;int main(){random_device rd;// only used once khổng lồ initialize (seed) enginemt19937 rng(rd());// random-number engine used (Mersenne-Twister in this case)// đầu ra 10 random numberfor (int i = 0; i uni(1, 100);for (int i = 0; i Output:

*

Thuật toán trên tạo thành các số nguyên không dấu 32 bit, nên sẽ có phạm vi mập hơn không hề ít so với áp dụng hàm rand(). Chúng ta có thể sử dụng vẻ bên ngoài mt19937_64 cho biến rng để có phạm vi số to hơn (64 bit).

Ví dụ trên có thực hiện từ khóa auto, cụ thể về nó sẽ được hướng dẫn trong bài xích TỪ KHÓA tự động hóa TRONG C++ (The tự động hóa keyword).

Vẫn còn không hề ít thuật toán gây ra số bất chợt khác, chúng ta có thể xem thêm và chia sẽ lại cho mọi fan nhé.

Kết luận

Qua bài học kinh nghiệm này, bạn đã hiểu rõ về phương thức Phát sinh số ngẫu nhiên trong C++ (Random number generation). Chúng ta cũng có thể ứng dụng nó vào hồ hết chương trình nên phát sinh số ngẫu nhiên, các trò chơi, hoặc để ứng dụng vào những bài học về mảng tiếp theo.

Trong bài xích tiếp theo, mình sẽ trình làng cho chúng ta về MẢNG 1 CHIỀU vào C++ (Arrays).

Cảm ơn chúng ta đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phạt triển bài viết tốt hơn. Đừng quên “Luyện tập – thử thách – không ngại khó”.

Thảo luận

Nếu bạn có bất kỳ khó khăn hay vướng mắc gì về khóa học, đừng e dè đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên tủ sách chuyenly.edu.vn.com để nhận thấy sự hỗ trợ từ cùng đồng.