Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp tạo một số ngẫu nhiên trong khoảng nhập vào


  • Please log in to reply
14 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 08:18 AM

Chào các bác.

Trong Excel (2007-2010...) có 1 hàm rất hay là hàm randombetween cho phép chúng ta nhập khoảng trên khoảng dưới thì sẽ tạo ra một số ngẫu nhiên nằm trong khoảng đó.

Ví dụ: randombetween (0,9) = KQ

Kết quả này có thể chạy từ 0 đến 9 một cách ngẫu nhiên.

Không biết liệu LISP có thể tạo ra được hàm như vậy được không các bác

Nếu có thì rất mong được sự chia sẻ của các bác.

 


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 30 August 2014 - 08:30 AM

Đề tài này cách đây không lâu đã có rồi, ban thử kiếm xem.
  • 0

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 08:32 AM

Em đã xem nhưng chưa có lời giải đáp anh ạ và nó khác với yêu cầu của em. 


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 30 August 2014 - 08:46 AM

Random bằng lisp thì cụ gồ có nhiều lắm. Chẳng hạn em có thể biến tấu ở link này:

http://forums.autode...ht/true#M296571


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 30 August 2014 - 08:56 AM

Bạn cũng có thể dùng cái này, tôi không nhớ lấy ý tưởng từ đâu nữa nhưng thấy ngắn gọn.

Cái này cũng có nhược điểm là nếu a là số thực thì nó trả về số thực với phần lẻ giống phần lẻ của a.

Bạn cũng có thể bỏ cái fix đi nếu tính với số thực, còn số nguyên thì để nguyên.

 

(defun rand(a b)
    (+ a (fix (* (- b a) (atof (strcat "0." (substr (rtos (getvar 'cdate) 2 18) 16 2))))))
  )

  • 2

#6 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 09:11 AM

Em cảm ơn bác Hạ và anh Tot77.

LISP anh Tot77 thật tuyệt ạ.

Em đang cần 1 số ý tưởng nên cần 1 số modul nhỏ.

Chúc bác Hạ và anh Tot77 sức khoẻ và thành công. ^^


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#7 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 30 August 2014 - 10:02 AM

lee-mac có 2 lisp này đó bạn


  • 0

#8 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 10:07 AM

Anh tien2005 có thể chia sẻ cho em không ạ?

Lisp của anh Tot77 ok rồi. Em muốn nghiên cứu tìm hiểu chút nữa anh ạ.

Cảm ơn anh


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#9 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 10:13 AM

Hàm của anh Tot77 em có thể biến tấu được mà.

Chỉ cần phần nguyên là đủ, giống như hàm Randombetween rồi ạ.

Phần Nguyên+0.1*rand(a,B)+0.01*rand(c,d)+0.001*rand(e,f)...........

Như vậy là OK rồi ạ. ^^


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#10 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 30 August 2014 - 10:23 AM

Bạn vào trang cua leemac xem thêm nhé

http://www.lee-mac.com/random.html


  • 1

#11 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 11:06 AM

Cảm ơn bác Tien2005. Cơ bản cũng giống LISP của anh Tot77 ạ. ^^


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#12 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 30 August 2014 - 06:08 PM

Với góp ý anh Tot77 em có chương trình gửi lên để ai cần mng dùng.

(defun c:SRD(/ );;;;SO RANDOM
(setq i 0)
(setvar "CMDECHO" 0)
(or *a* (setq *a* 0))
(setq a (getreal (strcat "\n \nNhap so nho:  <"
		  (rtos *a* 2 0)
		 "> :"
	  )
 )
)
(if (not a) (setq a *a*) (setq *a* a))
(or *b* (setq *b* 10.0))
(setq b (getreal (strcat "\n \nNhap so lon: <"
		  (rtos *b* 2 0)
		 "> :"
	  )
 )
)
(if (not b) (setq b *b*) (setq *b* b))
(or *h* (setq *h* 1.00))
(setq h (getreal (strcat "\n \nNhap chieu cao chu: <"
		  (rtos *h* 2 2)
		 "> :"
	  )
 )
)
(if (not h) (setq h *h*) (setq *h* h))
(if (< a b)
    (progn
	(while
		(setq Pnt (getpoint "\nChon diem Pick ghi so ngau nhien: "))
	  	(setq NumberRandom (+ (rand1 a b) (* 0.1 (rand2 0 9)) (* 0.01 (rand2 0 9))))
		(Entmake (list (cons 0 "TEXT") (cons 10 Pnt) (cons 1 (rtos NumberRandom 2 2)) (cons 40 h)))

	)
     )
     (Alert "Ban nhap so a lon hon so b roi! Nhap lai nhe ban")
)
(princ)
)


(defun rand1 (a b)
    (+ a (fix (* (- b a) (atof (strcat "0." (substr (rtos (getvar 'cdate) 2 18) 16 2))))))
)
(defun rand2 (a b)
    (+ a  (* (- b a) (atof (strcat "0." (substr (rtos (getvar 'cdate) 2 18) 16 2)))))
)

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#13 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 31 August 2014 - 10:44 AM

1. Nhiều chuyện xíu để lỡ có sai thì lại đc 1 củ

2. Để đánh dấu cho dễ tìm :D

 

Cho hỏi: tại sao phải dùng tới (rtos (getvar 'cdate) 2 18) ?

Phải chăng là nhầm 8 thành 18 (lỗi đánh máy), vì mình thấy cad chỉ lấy đến phần trăm của giây thì phải ?!

Thanks !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#14 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 31 August 2014 - 11:32 AM

Nói chung chẳng thấy báo lỗi gì cả nên cứ xài như vậy.  :mellow:

Thật ra cũng chỉ cần 8 là đủ, dư chút càng "sang" chứ chẳng ảnh hưởng gì. :)

Rốt cuộc nó chì lấy 2 số dưới số giây (1/100 giây).

Quan trọng là 2 số 16 2 phía sau thôi.


  • 1

#15 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 31 August 2014 - 11:40 AM

^^ chắc lấy tới nano giây lun kaka


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^