Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#2081 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 October 2014 - 09:23 AM

Trên máy của ketxu vẫn vậy ạ.

0, 1024 : Osnap vẫn là on, cho dù trên thanh trạng thái đang k On :) : T

17408 : osnap off : nil

(CAD 2008 64 bit)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#2082 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 25 October 2014 - 10:25 AM

Cám ơn Tue_NV

Vì mình tinh chuyển qua Microstation nhưng phần mềm này không hiểu Mpolygon bằng Hatch nên mình dự định chuyển Mpolygon thành Hatch.

Bản thân các Mpolygon trong file của mình do cadmap Improt từ Mic.

Nếu trên Mic save as qua cad thì nó lại là Hatch.


  • 0

#2083 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 October 2014 - 11:40 AM

Cám ơn Tue_NV

Vì mình tinh chuyển qua Microstation nhưng phần mềm này không hiểu Mpolygon bằng Hatch nên mình dự định chuyển Mpolygon thành Hatch.

Bản thân các Mpolygon trong file của mình do cadmap Improt từ Mic.

Nếu trên Mic save as qua cad thì nó lại là Hatch.

 

Không biết bác muốn chuyển Hatch có Partern nào?

Tue_NV chuyển giúp bác sang dạng SOLID

Code đây bác :

(defun c:M->H (/ count ss ename Tue-ss-new Tue-explode)
(defun Tue-ss-new(lst / Reslst e include)
  (mapcar 'set '(e include) lst)
  (if include (setq Reslst (list e)) (setq Reslst '()))
  (while (setq e (entnext e))
    (if (null (wcmatch (strcase (cdr(assoc 0 (entget e)))) "MPOLYGON,POLYLINE,ATTRIB,SEQEND"))
          (setq Reslst (append Reslst (list e)))
    )
  )
Reslst
)
(defun Tue-explode (ename / ss-explode elast);;Tue-dxf Tue-ss-new Tue-ss-list
      (setq elast (entlast))
      (Command "Explode" ename)
      (setq ss-explode (Tue-ss-new (list elast) ) )
)
;;;main
(setq count -1)
(if (setq ss (ssget '((0 . "MPOLYGON"))))
     (while (setq ename (ssname ss (setq count (1+ count))))
       (setq ename (Tue-explode ename))
       (command "._hatch" "S")
          (Foreach x ename (command x))
       (command "")
     )
)
)

  • 1

#2084 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 October 2014 - 11:53 AM

- mấy anh ơi nhoc mò ra đc tới đây rút ngắn bớt đk dài thòng lòng, nhưng có 1 trường hợp nó trả ra chưa đúng ý nhoc, nhoc cũng ko hiểu tại sao, các trường hợp khác tới giờ thì vẫn ổn,nhoc còn phải test nhiều lắm trường hợp để chắc chắn ^^

(defun c:test(/ kcx kcy ds)
(setq ds (list 500 400 250 200 100 50 25 20 10))
(setq kcx (getreal "\nnhap kcx:"))
(setq kcy (getreal "\nnhap kcy:"))
(foreach p ds
 (if (and (> (/ kcx p) 2) (< (/ kcx p) 5) (> (/ kcy p) 2)) 
     (setq donvi p))
	  )
donvi
)

- Vd: kích thước khung của nhoc , trục x = 78, y = 65, dựa theo hàm nhoc viết thì đáng ra nó chạy đến thằng 25 thì thỏa, trả ra đơn vị = 25, nhưng nhoc test nó cứ chạy xuống 20 mới chịu trả ra = 20 , trong khi nhoc mún nó là 25, nhoc xếp từ thấp đến cao rùi

- Mong đc các anh quan tâm  :P


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

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








#2085 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 25 October 2014 - 12:01 PM

Tại sao nhóc ko dùng While, đến khi đạt y/cầu thì dừng, ko cần duyệt thằng khác nữa.

Foreach, nó phải duyệt qua tất cả >>> trả về cái cuối cùng thỏa mãn

 

Thêm nữa, phải có cái gì đó ràng buộc 2 thằng kcx và kcy chứ ???


  • 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


#2086 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 October 2014 - 12:39 PM

- nhoc cũng nghĩ dùng while nhưng lại không biết viết thế nào, làm thế nào biểu thức điều kiện của nhoc duyệt qua từng phần tử trong danh sách cho nó tính hix, nên mới nghĩ đến thằng foreach

- kcx với kcy của nhoc  là  kích thước khung, nhoc ko hiểu phải ràng buộc sao, kcx với kcy đã được tính ra ở bước trên, kcx chia cho từng phần tử danh sách khi nào thỏa  2 < n < 5 và kcy chia cho phần tử đó > 2, thì trả ra giá trị phần tử trong danh sách


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

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








#2087 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 October 2014 - 12:52 PM

- nhoc cũng nghĩ dùng while nhưng lại không biết viết thế nào, làm thế nào biểu thức điều kiện của nhoc duyệt qua từng phần tử trong danh sách cho nó tính hix, nên mới nghĩ đến thằng foreach

- kcx với kcy của nhoc  là  kích thước khung, nhoc ko hiểu phải ràng buộc sao, kcx với kcy đã được tính ra ở bước trên, kcx chia cho từng phần tử danh sách khi nào thỏa  2 < n < 5 và kcy chia cho phần tử đó > 2, thì trả ra giá trị phần tử trong danh sách

 

Nhóc tham khảo :

(defun c:test(/ kcx kcy ds c)
(setq ds (list 500 400 250 200 100 50 25 20 10))
(setq kcx (getreal "\nnhap kcx:"))
(setq kcy (getreal "\nnhap kcy:"))
(setq c -1)
(while (null (and (setq p (nth (setq c (1+ c)) ds)) (< 2 (/ kcx p) 5) (> (/ kcy p) 2)) ))
p
)

  • 1

#2088 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 October 2014 - 01:11 PM

- hi thanks anh Tue_VN nhiều lắm, về thuật toán nhóc còn phải luyện tập nhiều ^^


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

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








#2089 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 26 October 2014 - 10:16 AM

@Nhoc: có 4 vấn đề:

1). Vì 25 và 20 đều thỏa >> lặp xong 25 thì đến 20.

2). Đảo ds lại là OK.

3). Không đặt donvi làm biến cục bộ thì coi chừng!

4). Dùng while của bác Tue_NV thì chú ý điều kiện ràng buộc số liệu, nếu không thì có thể lặp bất tận.


  • 0

* 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.


#2090 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 26 October 2014 - 11:54 AM

Nhóc !
2 thằng kcx, kcy laˋ tùy tiện hay theo một quy luật bất kyˋ nào không ?!
Nếu đc, co´ thể lấy ra cạnh nhỏ trong kcx, kcy để xét cho đơn giản
  • 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


#2091 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 26 October 2014 - 12:38 PM

@Nhoc: có 4 vấn đề:

1). Vì 25 và 20 đều thỏa >> lặp xong 25 thì đến 20.

2). Đảo ds lại là OK.

3). Không đặt donvi làm biến cục bộ thì coi chừng!

4). Dùng while của bác Tue_NV thì chú ý điều kiện ràng buộc số liệu, nếu không thì có thể lặp bất tận.

- hi thanks a Ha, cách anh Tue cho nhoc thấy cũng ổn ^^, nhoc test chay nhiều lần thấy cũng ổn, nhoc cũng tìm ra đc nhược điểm khi dùng while ^^, đúng là có lúc ko để ý nó lập thoát cad lun kaka, nhoc cố gắng mò ra cách khắc phục rùi ^^

- dảo lại ds nhoc chưa thử, để khi nào nhoc thử xem ^^, dùng foreach nhoc thấy dễ hiểu hơn, vậy là mình sẽ xếp từ nhỏ đến lớn nó sẽ chạy đúng phải ko anh ^^

- thằng while nhoc cũng còn hơi lơ mơ :)

- mọi biến nhóc đều khử sau khi xong việc, trừ biến nhập tỷ lệ ban đầu, cái lsp nhoc post chưa khử chắc là nhoc mún kiểm tra biến lại ^^

 

Nhóc !
2 thằng kcx, kcy laˋ tùy tiện hay theo một quy luật bất kyˋ nào không ?!
Nếu đc, co´ thể lấy ra cạnh nhỏ trong kcx, kcy để xét cho đơn giản

- hi Hiep kcx và kcy của nhoc là bất kỳ ko có quy luật, vì nó dựa vào độ lớn của khu đất để set khung cho vừa khu đất, nhoc cũng tính rùi kích thước khung ít nhất chia cho đơn vị = 10 là nhỏ nhất và  phải kết quả phải hơn từ 2 trở lên nếu nhỏ hơn sẽ báo người dùng biết rùi thoát lệnh lun.

- cơ quan có nhưng nó ràng buộc nhiều thứ kèm theo, nhoc thử tự viết riêng để xử lý nhanh tình huống, độc lập ko bị phụ thuộc ấy mà  :P

P/s: thanks các anh đã quan tâm giúp đỡ nhoc ^^


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

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








#2092 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 26 October 2014 - 12:50 PM

Phát biểu liều phát ^^
Lơ˜ khu đất 3000x3000 thiˋ chọn làm sao cho vừa ?! kcx, kcy laˋ tùy maˋ :D
  • 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


#2093 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 26 October 2014 - 02:38 PM

- nhoc đã test thử tới 100000 - 1 triệu vẫn chạy nổi, 10 triệu thì cad bị tràn bộ nhớ thoát lun ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

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








#2094 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 26 October 2014 - 09:26 PM

- cách anh Tue cho nhoc thấy cũng ổn ^^, nhoc test chay nhiều lần thấy cũng ổn, nhoc cũng tìm ra đc nhược điểm khi dùng while ^^, đúng là có lúc ko để ý nó lập thoát cad lun kaka, nhoc cố gắng mò ra cách khắc phục rùi ^^

- Trong bài toán cụ thể của nhoc thì dùng foreach hay while hay repeat đều được cả, vì list không đủ lớn.

- Về lý thuyết thì trong trường hợp này dùng while hợp lý hơn. Không thể gọi là "nhược điểm" khi dùng while. Nhược điểm nếu có là do chúng ta đặt điều kiện chưa phù hợp nên nó mới chạy vô tận.


  • 0

* 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.


#2095 hiepttr

hiepttr

    Edu level: li10

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

Đã gửi 27 October 2014 - 02:18 AM

- nhoc đã test thử tới 100000 - 1 triệu vẫn chạy nổi, 10 triệu thì cad bị tràn bộ nhớ thoát lun ^^


Cả 2 cạnh 1triệu thì trả lại kết quả thế nào ko thấy đề cập nhỉ ???
  • 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


#2096 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 27 October 2014 - 06:31 AM

- Trong bài toán cụ thể của nhoc thì dùng foreach hay while hay repeat đều được cả, vì list không đủ lớn.

- Về lý thuyết thì trong trường hợp này dùng while hợp lý hơn. Không thể gọi là "nhược điểm" khi dùng while. Nhược điểm nếu có là do chúng ta đặt điều kiện chưa phù hợp nên nó mới chạy vô tận.

- hi đúng là không phải do thằng while, mà do nhoc mới đúng, vì đk nhoc nó hơi kibo, ý nhoc là ko mún mắt lưới rãi ra dày quá nhìn rối, nên nhoc hạn chế lại tối đa 5x5= 25 mắt là đẹp ^^, khi khung quá lớn thì dẫn đến ko có đơn vị nào trong danh sách thỏa đc đk nhoc đặt nên chạy miết thui ^^, thực tế công việc của nhoc ít khi chạy khung nào lớn hớn 2.5km cả, 2.5km thì vừa thỏa đk nhoc đưa ra rùi ^^, có lớn hơn thì cũng chia ra thành nhiều khung, lớn quá cũng đâu có in ra nổi ^^


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

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








#2097 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 27 October 2014 - 07:43 AM

Cả 2 cạnh 1triệu thì trả lại kết quả thế nào ko thấy đề cập nhỉ ???

- thật ra với đơn vị = 500 mà kcx, kcy lên tới 500000, thì cad nó cũng mún đơ rùi ^^, tương đương lặp 1000 lần vẫn ra đc nhưng mất tới khoảng 2 phút ^^, vì vậy nhoc phải tăng đơn vị lên thì lên để giảm số lần lặp, nhoc đã set đơn vị  cho nó tối đa nó chạy đc cho 10 triệu, tới bây giờ nhoc chỉ biết làm mẹo như thế ^^, còn viết để chạy vô tư  với đơn vị = 500 thì chưa làm đc, mà 10 triệu thì lớn hơn nước mình rùi Hiep nhỉ ^^, nhoc cũng đâu làm bản đồ nào lên tới con số đó, hên xui có thì chia khung ra chạy cho đỡ nhọc  :P , ko dám nói ghê hơn nhưng với 500000 thì chương trình có sẵn của cơ quan nhoc cũng chạy hết nỗi ^^, nhoc pit là chương trình đó cũng đâu tính đến mức lớn như vậy ^^, nên nó đơ là chuyện bình thường ^^


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

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








#2098 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 27 October 2014 - 08:25 AM

- thật ra với đơn vị = 500 mà kcx, kcy lên tới 500000, thì cad nó cũng mún đơ rùi ^^, tương đương lặp 1000 lần vẫn ra đc nhưng mất tới khoảng 2 phút ^^, vì vậy nhoc phải tăng đơn vị lên thì lên để giảm số lần lặp, nhoc đã set đơn vị  cho nó tối đa nó chạy đc cho 10 triệu, tới bây giờ nhoc chỉ biết làm mẹo như thế ^^, còn viết để chạy vô tư  với đơn vị = 500 thì chưa làm đc, mà 10 triệu thì lớn hơn nước mình rùi Hiep nhỉ ^^, nhoc cũng đâu làm bản đồ nào lên tới con số đó, hên xui có thì chia khung ra chạy cho đỡ nhọc  :P , ko dám nói ghê hơn nhưng với 500000 thì chương trình có sẵn của cơ quan nhoc cũng chạy hết nỗi ^^, nhoc pit là chương trình đó cũng đâu tính đến mức lớn như vậy ^^, nên nó đơ là chuyện bình thường ^^

Quan trọng là mình phải phán đoán trước các tình huống có thể xảy ra và đưa ra những cảnh báo cho người dùng. 

(vì người dùng thường "ngu ngơ" lắm chỉ biết sử dụng và khi có lỗi xảy ra thì .. la làng)

VD : Trong t/hợp này, nếu người dùng nhập ch/dài 2 cạnh là 1 triệu thì ra thông báo đại loại như : "số quá lớn, vui lòng nhập lại số khác ..."


  • 1

#2099 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 27 October 2014 - 08:56 AM

hihi mình viết thì mới test con số khủng vậy, bình thường xài vẽ khung ôm trọn đủ khu đất hay rộng hơn tẹo cho thoáng mà anh gia_bạch, chỉ khi người dùng muốn troll chương trình ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

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








#2100 thanhduan2407

thanhduan2407

    biết lệnh adcenter

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

Đã gửi 27 October 2014 - 02:48 PM

Nhoclangbat nên nghiên cứu cái khác đi, cái có rồi thì nghiên cứu chi cho mệt.

Hay nhoclangbat đang tập tành viết cho quen tay?

Rảnh ghê. ^^


  • 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