Chủ Nhật, 13 tháng 11, 2011

Tạo số ngẫu nhiên trong c.

Trong việc lập trình, vấn đề tạo số ngẫu nhiên là thực sự cần thiết khi lượng test quá lớn để kiểm tra.


1.Tạo số ngẫu nhiên.
        Việc tạo số ngẫu nhiên khá đơn giản với hàm rand() nằm trong thư viện stdlib.h.
        VD:
         #include <stdlib.h>
         #include <stdio.h>
        #include <conio.h>
         int main ()
         {
                  int random1 = rand();
                  int random2 = rand();
                  printf("%d\n",random1);
                  printf("%d\n",random2);
                  getch();
           }
           OUTPUT : 41 18467
         
          Nếu để ý các bạn có thể dể dàng phát hiện ngay, kết quả được lặp lại như vậy sau mỗi lần chạy chương trình.

2.Tạo số ngẫu nhiên với thời gian hệ thống.
          Để khắc phục tình trạng lặp lại kết quả random, ta đặng seed ngẫu nhiên cho hàm rand() với lời gọi srand() thuộc thư viện stdlib.h
          VD:
         #include <stdlib.h>
         #include <stdio.h>
        #include <conio.h>
         int main ()
         {
                  srand(100);
                  int random1 = rand();
                  int random2 = rand();
                  printf("%d\n",random1);
                  printf("%d\n",random2);   
                  getch();
           }
           OUTPUT : 365 1216
           Như vậy với việc gọi srand() seed random được thay đổi, dẫn đến thay đổi kết quả. Tuy nhiên kết quả trên vẫn lặp lại sau những lần gọi. Để giải quyết vấn đề trên ta đặt seed random là thời gian hệ thống như thế seed sẽ thay đổi liên tục sau mỗi lần chạy chương trinh.

  VD:
         #include <stdlib.h>
         #include <stdio.h>
        #include <conio.h>
         #include <time.h>
         int main ()
         {
                  srand(time(0));
                  int random1 = rand();
                  int random2 = rand();
                  printf("%d\n",random1);
                  printf("%d\n",random2);   
                  getch();
           }


 3.Tạo số ngẫu nhiên trong đoạn [a,b]
       Trên thực tế việc tạo số ngẫu nhiên sẽ bị gói buộc trong một giới hạn nào đó, để đáp ứng yêu cầu trên ta thực hiện một phép tính nho nhỏ:

                  + Tạo số ngẫu nhiên từ 0->N:    
                                            rand() % (N+1)
                                
                  + Tạo số ngẫu nhiên từ a->b:
                                            a + rand() % (b+1-a)


--------------------------------------------------------------------Hết---------------------------------------------------------------
Chúc các bạn thành công!!

1 nhận xét:

  1. thế còn tạo một mảng 1 chiều ngẫu nhiên thì làm thế nào bạn?

    Trả lờiXóa