Trang 2 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối
Kết quả 11 đến 20 của 33

Chủ đề: làm sao giá trị thay đổi ngẫu nhiên nhưng tổng không đổi?

  1. #11
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi HYen17
    D6: Nếu số ngẫu bé hơn 5 thì đem nó + thêm 1
    Bạn giải thích kĩ hơn giúp tôi dòng này được không? Tôi vẫn chưa hiểu tại sao lại phải cộng thêm 1 nếu nhỏ hơn 5.

  2. #12
    mailong90 Guest
    Hàm RND() tạo ra số ngẫu nhiên trong (0;1) (không bằng 1 được) nên để tạo số nguyên ngẫu nhiên từ 0 đến 9 thì dùng int(10*Rnd) chứ không phải 9.

  3. #13
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Hau151978
    Hàm RND() tạo ra số ngẫu nhiên trong (0;1) (không bằng 1 được) nên để tạo số nguyên ngẫu nhiên từ 0 đến 9 thì dùng int(10*Rnd) chứ không phải 9.
    Em test thử code này thấy kết quả tuyệt vời luôn anh ạ!

  4. #14
    hoanghuy200515 Guest
    Trích dẫn Gửi bởi chuot0106
    Em test thử code này thấy kết quả tuyệt vời luôn anh ạ!
    Mình chưa hiểu code này, đang online bằng điện thoại thôi. Bài trên mình viết do bác HaiYen nói số ngẫu nhiên từ 0 đến 9, thực tế chỉ từ 0 đến 8 thôi. Nếu tác giả nhầm chỗ này thì có thể code không bao giờ ra chuỗi có số 1 ở cuối (có thể thôi vì code khó hiểu quá).

  5. #15
    vanbaokrong Guest

    Bạn giải thích kĩ hơn giúp tôi dòng này được không? Tôi vẫn chưa hiểu tại sao lại phải cộng thêm 1 nếu nhỏ hơn 5.
    Vì lệnh trên nó có thể tạo ra số 0, nên cần cộng thêm 1 để khỏi bị lỗi cho dòng lệnh kế tiếp dưới nó;
    Thực ra dòng lệnh đó chỉ cần: Nếu là 0 thì cộng thêm 1 là đủ



    Mình chưa hiểu code này, đang online bằng điện thoại thôi. Bài trên mình viết do bác HaiYen nói số ngẫu nhiên từ 0 đến 9, thực tế chỉ từ 0 đến 8 thôi. Nếu tác giả nhầm chỗ này thì có thể code không bao giờ ra chuỗi có số 1 ở cuối (có thể thôi vì code khó hiểu quá).
    Nếu ta đem 0.99999999999999 * 9 =?

  6. #16
    sutuhong123 Guest
    Trích dẫn Gửi bởi HYen17
    Vì lệnh trên nó có thể tạo ra số 0, nên cần cộng thêm 1 để khỏi bị lỗi cho dòng lệnh kế tiếp dưới nó;
    Thực ra dòng lệnh đó chỉ cần: Nếu là 0 thì cộng thêm 1 là đủ



    Nếu ta đem 0.99999999999999 * 9 =?
    Cảm ơn bạn tôi đã hiểu rồi!

  7. #17
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Đố ai làm được bài này trong 1 vòng lập!
    Ẹc... Ẹc...

  8. #18
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ndu96081631
    Đố ai làm được bài này trong 1 vòng lập!
    Ẹc... Ẹc...
    Nói như vậy chắc chắn thầy đã có đáp án rồi!

  9. #19
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi HYen17
    Nếu ta đem 0.99999999999999 * 9 =?
    Bác thử với 2 sub sau sẽ thấy. 2 sub lấy các số nguyên 0 - 9 sau 1000000 vòng lặp, ghi kết quả số các số 0 -9 vào các ô A1 - A10 và B1 - B10. Sub Test9() dùng INT(9*RND) và su test10() dùng INT(10*RND). Kết quả sub test9 không ra số 9 nào.

    Mã:
    Sub test9()
        Dim i&, n&, arr(0 To 9) As Long
        Randomize
        For i = 1 To 1000000
            n = Int(9 * Rnd)
            arr(n) = arr(n) + 1
        Next
        For i = 0 To 9
            Cells(i + 1, 1) = arr(i)
        Next
    End Sub
    Sub test10()
        Dim i&, n&, arr(0 To 9) As Long
        Randomize
        For i = 1 To 1000000
            n = Int(10 * Rnd)
            arr(n) = arr(n) + 1
        Next
        For i = 0 To 9
            Cells(i + 1, 2) = arr(i)
        Next
    End Sub

  10. #20
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trên cửa sổ "Immediate", nếu ta nhập

    ?0.9999*9\1
    Nó cho ta kết quả 9 tròn trịa đó bạn.

    Mà thật ra không có số 9 xuất hiện lần nào trong 65500 lần lặp cũng không ảnh hưởng gì đến hòa bình thế giới cả.
    [IMG]images/smilies/a44.gif[/IMG] [IMG]images/smilies/a44.gif[/IMG] [IMG]images/smilies/a44.gif[/IMG]

Trang 2 của 4 Đầu tiênĐầu tiên 1234 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •