khóa huấn luyện và đào tạo Lập trình thiết kế C++ khóa học lập trình C++ căn bạn dạng Phát sinh số ngẫu nhiên trong C++ (Random number generation)

Dẫn nhập

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

Bạn đang xem: Tạo số ngẫu nhiên trong c

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

Nội dung

Để phát âm hiểu bài bác này tốt nhất các bạn nên có kỹ năng cơ bản về:

Trong bài bác ta vẫn cùng khám phá các vấn đề:

Tổng quan liêu về tạo nên số ngẫu nhiênPhát sinh số tự dưng trong C++Phát sinh số tự dưng trong C++ 11

Tổng quan về tạo ra số ngẫu nhiên

Phát sinh những 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, các chương trình cần tài liệu ngẫu nhiên, ….

Ví dụ về trò chơi phun máy bay, giả dụ nó không có những sự kiện ngẫu nhiên, những máy cất cánh sẽ luôn luôn luôn mở ra cùng 1 vị trí, tấn công bạn theo cùng một cách, rất nhiều vật thể lộ diện trên mặt đường không bao giờ thay đổi, vv ... Cùng đó không phải là một trò nghịch hay.

*

Vậy số thốt nhiên được tạo ra ra bằng phương pháp nào?

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

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

Vì vậy, các máy tính xách tay không có khả năng tạo ra số ngẫu nhiên. ước ao tạo số ngẫu nhiên, xây dựng viên yêu cầu tự xuất bản 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 nhu mong đó, C++ đã xây dựng sẵn 1 số ít thuật toán phát sinh số ngẫu nhiên.

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

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

Khởi tạo thành số thiên nhiên (initialize random number generator)

Để khởi sinh sản số ngẫu nhiên, bạn thực hiện hàm srand() thuộc thư viện cstdlib:

void srand(unsigned int seed);

Lưu ý:

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

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

Vì vậy, quý hiếm của seed (hạt giống) cũng phải là 1 trong những số ngẫu nhiên trong những 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, sự việc là người ta buộc phải tìm ra 1 số biến đổi mỗi khi chương trình được chạy, không phải là số do người dùng chọn.

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

Để đem được thời gian từ hệ thống, chúng ta cũng có thể sử dụng hàm time() trực thuộc thư viện ctime. Hàm này vẫn trả về số giây trường đoản cú 00:00 giờ, ngày 01 tháng 1 năm 1970.

Xem thêm: Hình Xăm Hoa Mẫu Đơn Ở Cánh Tay Đẹp Nhất 2022, Ý Nghĩa Hoa Mẫu Đơn Trong Xăm Hình Nghệ Thuật

Ví dụ:

#include #include // for rand() and srand()#include // for time()using namespace std;int main()// initialize random number generatorsrand(time(0)); // mix initial seed value lớn system clock// generate random number// ...return 0;Ví dụ trên mới chỉ khởi sinh sản số bất chợt từ thời hạn hệ thống, cách phát sinh những số bỗng nhiên sẽ được giới thiệu ở phần tiếp theo.

Phát sinh số hốt nhiên (generate random number)

Để phân phát sinh 1 số ngẫu nhiên, bạn thực hiện hàm rand() nằm trong thư viện cstdlib:

int rand(void);

int rand(void);Lưu ý:

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

Ví dụ về tạo ra số ngẫu nhiên:

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

Ví dụ về trò đùa đoán số từ một số phát sinh ngẫu nhiên:

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

*

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

Ví dụ phát sinh 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 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 tương đối nhiều thuật toán phát sinh số bỗng dưng thuộc thư viện random.

Ví dụ về 1 thuật toán phát sinh số tình cờ Mersenne Twister hay được sử dụng:

#include #include using namespace std;int main(){random_device rd;// only used once lớn initialize (seed) enginemt19937 rng(rd());// random-number engine used (Mersenne-Twister in this case)// output 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 lớn hơn không ít so với thực hiện hàm rand(). Chúng ta có thể sử dụng mẫu mã mt19937_64 cho biến hóa rng để có phạm vi số lớn hơn (64 bit).

Ví dụ bên trên có áp dụng từ khóa auto, chi tiết về nó sẽ tiến hành hướng dẫn trong bài bác TỪ KHÓA tự động hóa TRONG C++ (The tự động keyword).

Vẫn còn rất nhiều thuật toán phát sinh số tự dưng khác, chúng ta có thể tham khảo thêm và phân chia sẽ lại mang lại mọi tín đồ nhé.

Kết luận

Qua bài học kinh nghiệm này, các bạn đã hiểu rõ về cách thức Phát sinh số bỗng dưng trong C++ (Random number generation). Bạn cũng có thể ứng dụng nó vào rất nhiều 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 kinh nghiệm về mảng tiếp theo.

Trong bài tiếp theo, mình sẽ giới thiệu cho các bạn về MẢNG 1 CHIỀU vào C++ (Arrays).

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

Thảo luận

Nếu chúng ta có ngẫu nhiên 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 vào mục HỎI và ĐÁP trên tủ sách ptt.edu.vn.com để nhận được sự hỗ trợ từ cùng đồng.