PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-06-2008, 10:56 AM   #1
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Đây là code tính random của CCS C - thư viện stdlib.h, mô phỏng 10 lần ra giá trị "ngẫu nhiên" chỉ có 1.
PHP Code:
unsigned int32 _Randseed;

unsigned int16 rand(void)
{
   
_Randseed _Randseed 1103515245 12345;
   return ((
unsigned int16)(_Randseed >> 16) % RAND_MAX);
}

void srand(unsigned int32 seed)
{
   
_Randseed seed;

Ai có giải thuật tính random khác không nhỉ, như cái dùng Timer chẳng hạn, cho nó chạy tự do, khi nào cần thì cứ lấy giá trị, muốn lấy giới hạn bao nhiêu thì cứ module bấy nhiếu, muốn thành thập phân thì giống như chizardxx nói
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-06-2008, 02:47 PM   #2
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi phamminhtuan View Post
Đây là code tính random của CCS C - thư viện stdlib.h, mô phỏng 10 lần ra giá trị "ngẫu nhiên" chỉ có 1.
PHP Code:
unsigned int32 _Randseed;

unsigned int16 rand(void)
{
   
_Randseed _Randseed 1103515245 12345;
   return ((
unsigned int16)(_Randseed >> 16) % RAND_MAX);
}

void srand(unsigned int32 seed)
{
   
_Randseed seed;

Ai có giải thuật tính random khác không nhỉ, như cái dùng Timer chẳng hạn, cho nó chạy tự do, khi nào cần thì cứ lấy giá trị, muốn lấy giới hạn bao nhiêu thì cứ module bấy nhiếu, muốn thành thập phân thì giống như chizardxx nói
Đây là giải thuật để tạo ra dãy uniform pseudo-random (tạm dịch: giả ngẫu nhiên), theo mình biết giải thuật này nằm trong cuốn "The C programming language".

Uniform mang nghĩa dãy phân phối đều, tức là xác suất để các con số xuất hiện trong dãy là như nhau.

Dãy pseudo-random phụ thuộc vào trạng thái ban đầu (seed), nếu tạo dãy với seed giống nhau thì kết quả lúc nào cũng như nhau.

Để dãy gần với ngẫu nhiên thì seed cũng phải có tính ngẫu nhiên. Cách dễ nhất để có seed gần với ngẫu nhiên là lấy thời gian hiện tại. Với VDK có thể dùng RTC hoặc timer + các biến đếm để xác định thời gian trôi qua, sau đó tính toán các giá trị này và seed cho pseudo-random generator.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-06-2008, 07:45 PM   #3
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Đây là giải thuật để tạo ra dãy uniform pseudo-random (tạm dịch: giả ngẫu nhiên), theo mình biết giải thuật này nằm trong cuốn "The C programming language".

Uniform mang nghĩa dãy phân phối đều, tức là xác suất để các con số xuất hiện trong dãy là như nhau.

Dãy pseudo-random phụ thuộc vào trạng thái ban đầu (seed), nếu tạo dãy với seed giống nhau thì kết quả lúc nào cũng như nhau.

Để dãy gần với ngẫu nhiên thì seed cũng phải có tính ngẫu nhiên. Cách dễ nhất để có seed gần với ngẫu nhiên là lấy thời gian hiện tại. Với VDK có thể dùng RTC hoặc timer + các biến đếm để xác định thời gian trôi qua, sau đó tính toán các giá trị này và seed cho pseudo-random generator.
Cám ơn bác nhé, thế là em biết sử dụng cái hàm rand() trong CCS C rồi
PHP Code:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
...
srand(get_timer1());
_rand rand(); 
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-11-2010, 08:55 PM   #4
magicskull
Nhập môn đệ tử
 
Tham gia ngày: Oct 2010
Bài gửi: 3
:
vậy có ai huynh nào tóm tắt lại giùm em cách tạo 1 số ngẫu nhiên được không
em đang cần chọn ngẫu nhiên 1 số từ 1 tới 8
anh chỉ giùm em với em đang cần gấp lắm
cám ơn nhiều
magicskull vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:12 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam