ITK35Zone
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
ITK35Zone


 
Trang ChínhTrang Chính  Latest imagesLatest images  Đăng kýĐăng ký  Đăng Nhập  
Chào mừng các bạn đã đến với diễn đàn ITK35Zone - Lớp CNTT K35 Trường Đại học Sư phạm TP.HCM
Hiện diễn đàn đang bị lỗi kĩ thuật, mong mọi người thông cảm. BQT sẽ cố gắng khắc phục trong thời gian sớm nhất...

Share | 

 

 Cách sinh số ngẫu nhiên trong C++

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Cách sinh số ngẫu nhiên trong C++ EmptyWed Mar 09, 2011 3:18 pm

blackrose4s
Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính : Nam
Đến từ : không gian
Join : 10/11/2009
Bài gửi : 312
HUMOR : không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Cách sinh số ngẫu nhiên trong C++

 
Việc phát sinh số ngẫu nhiên là cần thiết khi chúng ta cần test chương trình. Việc tạo số ngẫu nhiên trong C++ cũng khá đơn giản. Thư viện chuẩn của C++ cung cấp môt hàm gọi là rand () trong cstdlib.h . Bài viết này sẽ giúp chúng ta hiểu hơn về chức năng tạo số ngẫu nhiên trong C++.

1. Tạo một số ngẫu nhiên:

Hàm rand() trả về một số nguyên nằm trong dãy [0, RAND_MAX], với RAND_MAX là một hằng số được định nghĩa trước. Hãy xem ví dụ bên dưới:

Code:
// First example
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int r0 = rand();
    int r1 = rand();
    int r2 = rand();
    int r3 = rand();
    int r4 = rand();

    cout<< "r0 = "<< r0 << endl;
    cout<< "r1 = "<< r1 << endl;
    cout<< "r2 = "<< r2 << endl;
    cout<< "r3 = "<< r3 << endl;
    cout<< "r4 = "<< r4 << endl;

    system("pause");
    return 0;
}
- Output là:

Cách sinh số ngẫu nhiên trong C++ Image_thumb39

- Nhưng sau khi chạy nhiều lần chương trình trên, bạn vẫn nhận được một output như lúc đầu. Vấn đề này sẽ được giải quyết trong mục 2.

2. Tạo một số ngẫu nhiên thay đổi theo thời gian

- Để tạo một số ngẫu nhiêu sau thay đổi khác nhau trong những lần chạy, bạn sử dụng hàm time (có trong #include ctime). Theo như thư viện MSDN (Microsoft Developers Network) nói rằng: time trả về số của giây được trôi qua được tính từ nữa đêm (00:00:00), ngày 1, tháng 1, năm 1970 theo UTC . (“The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time (UTC), according to the system clock”).

- Các số ngẫu nhiên giả được tạo ra bắt đầu từ thời điểm bạn thiết lập sử dụng hàm srand. Dòng code dưới đây thiết lập điểm bắt đầu của thời gian hiện hành.

Code:
srand(time(0));


- Giá trị được trả về từ time là qua srand. Lưu ý rằng số ngẫu nhiên được tạo ra trước lời gọi rand.

Ví dụ với chương trình đầu tiên: chúng ta thêm srand(time(0)) trước lời gọi rand().

Code:
// Second example
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand(time(0));
    int r0 = rand();
    int r1 = rand();
    int r2 = rand();
    int r3 = rand();
    int r4 = rand();

    cout<< "r0 = "<< r0 << endl;
    cout<< "r1 = "<< r1 << endl;
    cout<< "r2 = "<< r2 << endl;
    cout<< "r3 = "<< r3 << endl;
    cout<< "r4 = "<< r4 << endl;

    system("pause");
    return 0;
}


- Output lần đầu:

Cách sinh số ngẫu nhiên trong C++ Image_thumb40

- Output lần 2:

Cách sinh số ngẫu nhiên trong C++ Image_thumb41

- Output lần 3:

Cách sinh số ngẫu nhiên trong C++ Image_thumb42

3. Tạo số ngẫu nhiên nằm trong dãy xác định (Specifying the range)

- Thông thường, một số ngẫu nhiên nằm trong dãy [0, RAND_MAX] không được mô tả. Đúng hơn là chúng ta không thích một dãy được xác định. Một số ngẫu nhiên trong dãy [0, n – 1] có thể được xác định bằng cách sử dụng toán tử % (modulus). Ví dụ như sinh ra một số ngẫu nhiên trong dãy [0, 21], thì bạn có thể viết như sau:

Code:
int num = rand();
int val = num % 22;

- Hoặc có thể viết một cách mạch lạc hơn là:

Code:
int num = rand() % 22;


- Khi chúng ta cần một dãy không bắt đầu từ 0. Ví dụ như sinh một số ngẫu nhiên nằm trong dãy [22, 100] thì phải làm sao? Chúng ta có thể thực hiện một cách khá đơn giản theo công thức

Để tạo một số ngẫu nhiên trong dãy [a, b] ta sử dụng công thức:

Code:
a + rand() % (b – a + 1)

Như muốn sinh một số ngẫu nhiên từ dãy [22, 100] ta viết như sau:

Code:
int num = 22 + rand() % (100 – 22 + 1);



hay đúng hơn là:

Code:
int num = 22 + rand() % (79);


(Tham khảo Frank Luna,C++ Programming for Games – Module I)



Cách sinh số ngẫu nhiên trong C++ EmptyWed Mar 09, 2011 4:55 pm

sherry^^
Usersherry^^ Người này hiện đang:
Level: Thành Viên Chuẩn
Danh vọng:46


Thành Viên Chuẩn

sherry^^

Thành Viên Chuẩn

Giới tính : Nữ
Đến từ : nhà tui
Join : 21/01/2011
Bài gửi : 46
HUMOR : ^^^^^^

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 
Thanks bạn Phú ha...đang tìm lại cái hàm random mà chưa thấy Cách sinh số ngẫu nhiên trong C++ 786971



Cách sinh số ngẫu nhiên trong C++ EmptyWed Mar 09, 2011 5:44 pm

Admin
UserAdmin Người này hiện đang:
Level: Tổng điều hành
Danh vọng:581


Tổng điều hành

Admin

Tổng điều hành

https://cnttdhsupham.forumvi.com
Giới tính : Nam
Đến từ : Bình Phước
Join : 29/10/2009
Bài gửi : 581
HUMOR : Du Lịch - Hoạt Động Tập thể - Vọc Phần Mềm

Thú cưng
.:

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 
Bác Phú lần sau nhớ ghi nguồn bài viết nghen!
Bài random của đồ họa trong đoạn [0,1] với x nằm trong đoạn này là float.
nếu như bác: a + rand() % (b – a + 1) thì số 1 không chính xác. vì độ chênh lệch phải lớn hơn 0 nhưng nhỏ hơn 1.
Vậy lối thoát nào cho chúng ta? mời các bạn xem các comment sau sẽ rõ...
Help me!!!!!!!!!!!1



Cách sinh số ngẫu nhiên trong C++ EmptyWed Mar 09, 2011 9:07 pm

avatar
Userseamouse Người này hiện đang:
Level: Thành Viên Chuẩn
Danh vọng:20


Thành Viên Chuẩn

seamouse

Thành Viên Chuẩn

Giới tính : Nữ
Đến từ : tphcm
Join : 22/01/2010
Bài gửi : 20
HUMOR : &quot;tán dóc&quot;.....chuyện trên trời..dưới đất ;))

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 
Code:

#include
#include
#include

using namespace std;

int main()
{
  srand((unsigned)time(0));
float r = (float)rand()/(float)RAND_MAX; 
cout<< "r = "<< r << endl;

    system("pause");
    return 0;
}

Chút ít đóng góp zui!! Cách sinh số ngẫu nhiên trong C++ 168320
Tham khảo từ đây nè :http://stackoverflow.com/questions/686353/c-random-float/



Cách sinh số ngẫu nhiên trong C++ EmptyWed Mar 09, 2011 10:43 pm

Regulus™
UserRegulus™ Người này hiện đang:
Level: Tổng điều hành
Danh vọng:758


Tổng điều hành

Regulus™

Tổng điều hành

http://itk35.tk
Giới tính : Nam
Đến từ : ...
Join : 06/11/2009
Bài gửi : 758
HUMOR : Nghe nhạc.. Computer

Thú cưng
.:

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 
thì nó ra số nguyên thì đem đi chia là ra số <1 thôi
ví dụ rand()%100/rand()%100

Smile)



Cách sinh số ngẫu nhiên trong C++ EmptyThu Mar 10, 2011 12:56 am

blackrose4s
Userblackrose4s Người này hiện đang:
Level: Người Nhà
Danh vọng:312


Người Nhà

blackrose4s

Người Nhà

Giới tính : Nam
Đến từ : không gian
Join : 10/11/2009
Bài gửi : 312
HUMOR : không rõ ràng

Thú cưng
.:

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 
Regulus™ đã viết:
thì nó ra số nguyên thì đem đi chia là ra số <1 thôi
ví dụ rand()%100/rand()%100

Smile)

Chính xác lun !!!



Cách sinh số ngẫu nhiên trong C++ Empty

UserSponsored content Người này hiện đang:
Level:
Danh vọng:



Sponsored content

Bài gửiTiêu đề: Re: Cách sinh số ngẫu nhiên trong C++

 


 

Cách sinh số ngẫu nhiên trong C++

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
ITK35Zone :: Học tập :: Lưu trữ (năm 1) :: Tin học đại cương-
 
Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất