Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

Các bài được khuyến nghị

Lisp đánh số thứ tự point (sưu tầm từ cadviet) nè: http://www.cadviet.com/upfiles/2/stt_point_sttp.lsp

Cái lisp đánh số thứ tự này đánh từ trái sang phải, Thiep có thể chỉnh lại để nó sắp xếp từ trên xuống cho mình với, mình cần đánh số thứ tự từ trên xuống.

Bạn sửa lại hàm sosanh. Dòng màu đỏ là sửa lại

 

(defun sosanh (ent1 ent2 / p1 p2 x1 y1 x2 y2)

(setq

p1 (getp ent1)

x1 (car p1)

y1 (cadr p1)

p2 (getp ent2)

x2 (car p2)

y2 (cadr p2)

)

(or (> y1 y2)

(and (= y1 y2) (> x1 x2))

)

)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn Thiêp nha! Lisp chạy tốt lắm.

Thiep có thể làm thêm mình một cái nữa nhé, Mình muốn kết hợp lisp đánh số thứ tự của các point và sau đó xuất các toạ độ của các point này ra một file .tdo. Fiile .tdo gồm có stt (là số vừa đánh) và toạ độ của point. Toạ độ thì có 2 sự chọn lựa 2D (x,y) hay 3D(x,y,z) tuỳ chọn.

Lisp đánh số thứ tự point (sưu tầm từ cadviet) nè: http://www.cadviet.com/upfiles/2/stt_point_sttp.lsp

Cái lisp đánh số thứ tự này đánh từ trái sang phải, Thiep có thể chỉnh lại để nó sắp xếp từ trên xuống cho mình với, mình cần đánh số thứ tự từ trên xuống.

Cảm ơn nhiều! Chúc Thiep sức khoẻ!

Chao CH1003, sau khi dùng lisp đánh số thứ tự điểm từ trên xuống mà Tue_NV vừa giúp chỉnh sửa, CH1003 có thể dùng các lisp export text, export điểm có trên diễn đàn:

http://www.cadviet.com/forum/index.php?s=&...ost&p=20741

hoặc: http://www.cadviet.com/forum/index.php?s=&...post&p=1260

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn Thiêp nha! Lisp chạy tốt lắm.

Thiep có thể làm thêm mình một cái nữa nhé, Mình muốn kết hợp lisp đánh số thứ tự của các point và sau đó xuất các toạ độ của các point này ra một file .tdo. Fiile .tdo gồm có stt (là số vừa đánh) và toạ độ của point. Toạ độ thì có 2 sự chọn lựa 2D (x,y) hay 3D(x,y,z) tuỳ chọn.

Lisp đánh số thứ tự point (sưu tầm từ cadviet) nè: http://www.cadviet.com/upfiles/2/stt_point_sttp.lsp

Cái lisp đánh số thứ tự này đánh từ trái sang phải, Thiep có thể chỉnh lại để nó sắp xếp từ trên xuống cho mình với, mình cần đánh số thứ tự từ trên xuống.

Cảm ơn nhiều! Chúc Thiep sức khoẻ!

Hề hề, chào bác Conghoan1003,

Bác theo đuổi cái thằng líp này cũng kha khá thời gian rồi nhỉ. Với sự giúp sức của các bác Thiep, Tue_NV, hy vọng bác sẽ có thể tự giải quyết được cái yêu cầu bác đặt ra. Thực tế trong công việc của bác dùng lisp khá nhiều, bác hãy mạnh dạn làm thử vài cái là sẽ quen dần thôi. Lisp cũng không quá khó khăn đâu đối với những người đã có nền kiến thức tốt như bác. Khi bác co thể tự làm được những thằng lisp nho nhỏ này, bác sẽ thấy yêu đời hơn khá nhiều và cũng sẽ đỡ bị phụ huộc hơn trong công việc bác ạ.

Theo yêu cầu của bác thì cái phần đánh số thứ tự điểm theo trật tự bác Tue_NV đã bày rồi, còn phần xuất ra file đã có cái lisp của bác Thiep, bây giờ bác chỉ phải ghép chúng lại với nhau và thay đổi chút xíu trong cái nội dung xuất ra cho phù hợp với yêu cầu của bác thôi mà. Hãy thử xem bác nhé. Rất mong bác thành công.

Nếu trong quá trình bác chơi thử, có chỗ nào trục trặc thì bác cứ tống nó lên diễn đàn, mọi ngưòi sẽ gỡ giúp bác ngay bác ạ.

Chào bác, mong bác chơi thiệt hay mọi nhẽ.

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hề hề, chào bác Conghoan1003,

Bác theo đuổi cái thằng líp này cũng kha khá thời gian rồi nhỉ. Với sự giúp sức của các bác Thiep, Tue_NV, hy vọng bác sẽ có thể tự giải quyết được cái yêu cầu bác đặt ra. Thực tế trong công việc của bác dùng lisp khá nhiều, bác hãy mạnh dạn làm thử vài cái là sẽ quen dần thôi. Lisp cũng không quá khó khăn đâu đối với những người đã có nền kiến thức tốt như bác. Khi bác co thể tự làm được những thằng lisp nho nhỏ này, bác sẽ thấy yêu đời hơn khá nhiều và cũng sẽ đỡ bị phụ huộc hơn trong công việc bác ạ.

Theo yêu cầu của bác thì cái phần đánh số thứ tự điểm theo trật tự bác Tue_NV đã bày rồi, còn phần xuất ra file đã có cái lisp của bác Thiep, bây giờ bác chỉ phải ghép chúng lại với nhau và thay đổi chút xíu trong cái nội dung xuất ra cho phù hợp với yêu cầu của bác thôi mà. Hãy thử xem bác nhé. Rất mong bác thành công.

Nếu trong quá trình bác chơi thử, có chỗ nào trục trặc thì bác cứ tống nó lên diễn đàn, mọi ngưòi sẽ gỡ giúp bác ngay bác ạ.

Chào bác, mong bác chơi thiệt hay mọi nhẽ.

 

Em thấy Bác phamthanhbinh nói đúng đó. Biết một chút về lisp sẽ rất chủ động trong công việc. Autolisp cũng là ngôn ngữ tương đối đơn giản, trực quan và dễ học. Bác Conghoan1003 cứ thử xem, thành công rồi có thể bác sẽ nghiện luôn đó :s_big:

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em thấy Bác phamthanhbinh nói đúng đó. Biết một chút về lisp sẽ rất chủ động trong công việc. Autolisp cũng là ngôn ngữ tương đối đơn giản, trực quan và dễ học. Bác Conghoan1003 cứ thử xem, thành công rồi có thể bác sẽ nghiện luôn đó :s_big:

Nói thiệt với các bạn chứ mình cũng rất muốn biết 1 tí j về LISP!nhưng mà mình nhìn 1 cái LISP mà TUE hoặc là THIEP viết dùm mình thì mình thấy rất là nhiều chi tiết nên mình ko biết bắt đầu từ đâu (mình ko biết nó có dàn bài như thế nào ko?hoặc là cấu trúc như thế nào nữa?)mình nghỉ đó là tâm lý chung của người yêu LISP, muốn học LISP nhưng ko có phương hướng!Mong các bạn có kinh nghiệm chia sẽ dùm mình!thân!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em thấy Bác phamthanhbinh nói đúng đó. Biết một chút về lisp sẽ rất chủ động trong công việc. Autolisp cũng là ngôn ngữ tương đối đơn giản, trực quan và dễ học. Bác Conghoan1003 cứ thử xem, thành công rồi có thể bác sẽ nghiện luôn đó :s_big:

Nói thiệt với các bạn chứ mình cũng rất muốn biết 1 tí j về LISP!nhưng mà mình nhìn 1 cái LISP mà TUE hoặc là THIEP viết dùm mình thì mình thấy rất là nhiều chi tiết nên mình ko biết bắt đầu từ đâu (mình ko biết nó có dàn bài như thế nào ko?hoặc là cấu trúc như thế nào nữa?)mình nghỉ đó là tâm lý chung của người yêu LISP, muốn học LISP nhưng ko có phương hướng!Mong các bạn có kinh nghiệm chia sẽ dùm mình!thân!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hề hề, chào bác Conghoan1003,

Bác theo đuổi cái thằng líp này cũng kha khá thời gian rồi nhỉ. Với sự giúp sức của các bác Thiep, Tue_NV, hy vọng bác sẽ có thể tự giải quyết được cái yêu cầu bác đặt ra. Thực tế trong công việc của bác dùng lisp khá nhiều, bác hãy mạnh dạn làm thử vài cái là sẽ quen dần thôi. Lisp cũng không quá khó khăn đâu đối với những người đã có nền kiến thức tốt như bác. Khi bác co thể tự làm được những thằng lisp nho nhỏ này, bác sẽ thấy yêu đời hơn khá nhiều và cũng sẽ đỡ bị phụ huộc hơn trong công việc bác ạ.

Theo yêu cầu của bác thì cái phần đánh số thứ tự điểm theo trật tự bác Tue_NV đã bày rồi, còn phần xuất ra file đã có cái lisp của bác Thiep, bây giờ bác chỉ phải ghép chúng lại với nhau và thay đổi chút xíu trong cái nội dung xuất ra cho phù hợp với yêu cầu của bác thôi mà. Hãy thử xem bác nhé. Rất mong bác thành công.

Nếu trong quá trình bác chơi thử, có chỗ nào trục trặc thì bác cứ tống nó lên diễn đàn, mọi ngưòi sẽ gỡ giúp bác ngay bác ạ.

Chào bác, mong bác chơi thiệt hay mọi nhẽ.

Cảm ơn mọi người đã nhắc nhở!

Mình cũng đang cố gắng để có thể làm ra một cái gì đó nhưng mà quả thật mới bắt đầu nên gặp nhiều khó khăn quá. Mong mọi người thông cảm! Hy vọng thời gian không xa mình sẽ viết được món này! Chúc anh e diễn đàn sức khoẻ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nói thiệt với các bạn chứ mình cũng rất muốn biết 1 tí j về LISP!nhưng mà mình nhìn 1 cái LISP mà TUE hoặc là THIEP viết dùm mình thì mình thấy rất là nhiều chi tiết nên mình ko biết bắt đầu từ đâu (mình ko biết nó có dàn bài như thế nào ko?hoặc là cấu trúc như thế nào nữa?)mình nghỉ đó là tâm lý chung của người yêu LISP, muốn học LISP nhưng ko có phương hướng!Mong các bạn có kinh nghiệm chia sẽ dùm mình!thân!

Hề hề,

Cái bác Truongthanh này khiêm tốn quá đi.

Bác đã vào tới cái mục này, hẳn bác cũng đã dạo loanh quanh diễn đàn vài chục bận. Trên diễn đàn đã có hẳn một topic hướng dẫn viết lisp mà. Các bài hướng dẫn trên đó của các bác lão thành như SSG, Nguyênhoanh khá đơn giản và đầy đủ.

Thú thực với các bác chứ cái thằng tui cũng bắt đầu chỉ từ diễn đàn này thôi. Sau khi có được cái khoái từ các bài viết đó mới tọc mạch thêm cái tài liệu của cụ Jeff Sanders gì gì đó. Thế rồi là làm thử theo một số yêu cầu của chính bản thân mình, dốt đâu lại hỏi đó. Nhiều khi còn bị mắng nữa ấy chứ. Tuy nhiên sau một hồi cố gắng thì chí ít mình cũng có thể hiểu được cái mà các bác trên diễn đàn biếu tặng. Bước tiếp theo là lần mò theo mót các bác ấy, cố gắng biến cái các bác ấy biếu thành cái của mình, chỗ nào chửa rõ lại hỏi nữa. Tất nhiên là vẫn còn nhiều cái phải học hỏi lắm lắm, nhưng dù sao thì cũng bớt đi được nhiều cái quấy rầy các bác ấy đồng thời cũng có được tí đỉnh cái gọi là của nhà trồng được. Cho dù nó chửa tốt tươi, ngon ngọt như của các bác ấy nhưng cũng làm mình mát ruột những lúc đói lòng các bác ạ. Các cụ bảo của cố là của được nên mình cũng cứ mạo gan mót cố thôi, được củ nào xào củ nấy.

Vậy nên nếu bác hỏi về kinh nghiệm đi mót của mình thì nó chỉ đơn giản có vậy thôi. Rất mong các bác hiểu cho chứ chả phải mình giấu nghề đâu.

Vạn sự khởi đầu nan, nhưng vạn sự muốn thành đều phải có cái khởi đầu cả. Bởi vậy nếu bác muốn học thì cứ mạnh dạn mà lao vào làm thử, thế nào cũng có kết quả thôi, chẳng chóng thì trầy bác ạ. Miễn là mình có quyết tâm thì ắt sẽ có ngày hái quả do mình trồng thôi bác ạ.

Chúc bác chóng thành công.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nói thiệt với các bạn chứ mình cũng rất muốn biết 1 tí j về LISP!nhưng mà mình nhìn 1 cái LISP mà TUE hoặc là THIEP viết dùm mình thì mình thấy rất là nhiều chi tiết nên mình ko biết bắt đầu từ đâu (mình ko biết nó có dàn bài như thế nào ko?hoặc là cấu trúc như thế nào nữa?)mình nghỉ đó là tâm lý chung của người yêu LISP, muốn học LISP nhưng ko có phương hướng!Mong các bạn có kinh nghiệm chia sẽ dùm mình!thân!

Trên cadviet đã có nhiều bài viết hướng dẫn viết lisp rồi. Riêng mình thì có 1 loạt bài căn bản theo mình là rất dể hiểu :s_big: bạn vào blog của mình (phía dưới chử ký của mình) xem .

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trên cadviet đã có nhiều bài viết hướng dẫn viết lisp rồi. Riêng mình thì có 1 loạt bài căn bản theo mình là rất dể hiểu :s_big: bạn vào blog của mình (phía dưới chử ký của mình) xem .

blog của anh vào ko dc anh ơi!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nhờ các cao thủ giúp mình một lisp như này.

đây là file bản vẽ minh hoạ

http://www.cadviet.com/upfiles/2/ghep_text..._doi_cao_do.dwg

Chào bạn vqhnb,

Thủ mình thì thấp thôi, bạn chớ gọi là cao kẻo mà mình trốn hổng được.

Do cái yêu cầu của bạn chưa rõ ràng, bạn muốn một phát ăn ngay xơi hết tất cả các điểm hay muốn chơi bắn tỉa từng thằng theo kiểu nhát một???? Hì hì

Hơn nữa bạn muốn một lisp cho ra hai kết quả hay bạn muốn hai lisp chạy hai lần mỗi lần cho một kết quả như bản vẽ bạn đưa ra??? Hì hì.

 

Mình chưa hiểu rõ ý bạn, vả lại vốn lười nên mình chọn cái dễ ăn nhất là viết một lisp thôi, và lisp chỉ xơi một thằng để cho ra cái kết quả ở bản vẽ thứ ba của bạn. Nếu muốn xơi nhiều thằng bạn phải chạy lisp nhiều lần. Hì hì.

Bạn xài thử, nếu thấy đúng ý thì là quá tốt, còn nếu chửa đúng thì đừng có giận mà vứt nó đi. Bạn có thể dùng nó để sửa lại theo ý của bạn vì trong đó cơ bản đã có đủ những hàm bạn cần để xử lý cái yêu cầu của bạn. Chỉ cần sửa lại một chút hay bổ sung thêm một tẹo là sẽ đúng ý bạn thôi. Còn nếu như bạn chưa thể tự sửa thì hãy post lại nói rõ và chính xác cái yêu cầu bạn cần, mọi người sẽ sửa giúp nha.

Lisp đây bạn ạ.

http://www.cadviet.com/upfiles/2/chgtext.lsp

 

Chúc bạn thành đạt trong công việc và cuộc sống.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn vqhnb,

Thủ mình thì thấp thôi, bạn chớ gọi là cao kẻo mà mình trốn hổng được.

Do cái yêu cầu của bạn chưa rõ ràng, bạn muốn một phát ăn ngay xơi hết tất cả các điểm hay muốn chơi bắn tỉa từng thằng theo kiểu nhát một???? Hì hì

Hơn nữa bạn muốn một lisp cho ra hai kết quả hay bạn muốn hai lisp chạy hai lần mỗi lần cho một kết quả như bản vẽ bạn đưa ra??? Hì hì.

 

Mình chưa hiểu rõ ý bạn, vả lại vốn lười nên mình chọn cái dễ ăn nhất là viết một lisp thôi, và lisp chỉ xơi một thằng để cho ra cái kết quả ở bản vẽ thứ ba của bạn. Nếu muốn xơi nhiều thằng bạn phải chạy lisp nhiều lần. Hì hì.

Bạn xài thử, nếu thấy đúng ý thì là quá tốt, còn nếu chửa đúng thì đừng có giận mà vứt nó đi. Bạn có thể dùng nó để sửa lại theo ý của bạn vì trong đó cơ bản đã có đủ những hàm bạn cần để xử lý cái yêu cầu của bạn. Chỉ cần sửa lại một chút hay bổ sung thêm một tẹo là sẽ đúng ý bạn thôi. Còn nếu như bạn chưa thể tự sửa thì hãy post lại nói rõ và chính xác cái yêu cầu bạn cần, mọi người sẽ sửa giúp nha.

Lisp đây bạn ạ.

http://www.cadviet.com/upfiles/2/chgtext.lsp

 

Chúc bạn thành đạt trong công việc và cuộc sống.

Cám ơn bạn 'phamthanhbinh'

mình muốn một phát ăn ngay xơi hết tất cả các điểm không chơi bắn tỉa. Thực ra mình chỉ biết tác dụng của chương trình lisp thôi chứ chưa một ngày học lisp. Ý mình là dùng một lisp để chuyển ra kết quả cuối cùng nhưng ở dòng Command: lisp có hỏi là có đổi cao độ hay không tức là +,-,*,/ vào một số x nào đấy vì có lúc công trình chỉ dùng cao độ giả định, nhưng có công trình lại đỏi hỏi cao độ quốc gia. thanks lời chúc của bạn

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.

nhờ bạn hoanh viết dùm mình họa đồ trích đo này nhé minh đa rât cần.

text đánh theo thứ tự từ trái qua phải

bản vẽ gán theo tỷ lệ cho trước

Bản trích đo: http://www.cadviet.com/upfiles/2/mau_trich_do.dwg

File bản đồ: http://www.cadviet.com/upfiles/2/dc_4f135ivd.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Ý mình là dùng một lisp để chuyển ra kết quả cuối cùng nhưng ở dòng Command: lisp có hỏi là có đổi cao độ hay không tức là +,-,*,/ vào một số x nào đấy vì có lúc công trình chỉ dùng cao độ giả định, nhưng có công trình lại đỏi hỏi cao độ quốc gia. thanks lời chúc của bạn

Mình đã nhiều lần gặp trường hợp như bạn trong công việc. đây là lisp mình tìm được trên diễn đàn này. mình đã sửa lại 1 chút để bạn có thể sử dụng được cả 4 phép tính. Nó có tác dụng cộng, hoặc trừ, hoặc nhân, hoặc chia tất cả các text số mà bạn chọn với một số mà bạn nhập vào.

lệnh là: cong; tru; nhan; chia.

(defun c:cong()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon cong them: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (+ cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:tru()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so tru: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (- cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:nhan()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon nhan: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (* cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:chia()
(setq i 0 s1 0)
(setq n (getreal "\nnhap mau so: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (/ cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------

Chú ý là kết quả tính toán sẽ lấy số chữ số sau dấu phẩy theo Precision trong định dạng Units bản vẽ của bạn. Với text cao độ thường lấy 2 chữ số sau dấu phẩy. bạn nên thiết lập lại Precision trước khi chạy thực hiện lệnh.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình đã nhiều lần gặp trường hợp như bạn trong công việc. đây là lisp mình tìm được trên diễn đàn này. mình đã sửa lại 1 chút để bạn có thể sử dụng được cả 4 phép tính. Nó có tác dụng cộng, hoặc trừ, hoặc nhân, hoặc chia tất cả các text số mà bạn chọn với một số mà bạn nhập vào.

lệnh là: cong; tru; nhan; chia.

(defun c:cong()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon cong them: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (+ cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:tru()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so tru: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (- cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:nhan()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon nhan: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (* cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------
(defun c:chia()
(setq i 0 s1 0)
(setq n (getreal "\nnhap mau so: "))
 (prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
  	(setq txt_ent (entget txt_name))
	(setq cont (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont))
	(setq s (/ cont n))	  
  (setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)
	(setq i (+ i 1))
);repeat
);defun	
;------------------------------------------------------

Chú ý là kết quả tính toán sẽ lấy số chữ số sau dấu phẩy theo Precision trong định dạng Units bản vẽ của bạn. Với text cao độ thường lấy 2 chữ số sau dấu phẩy. bạn nên thiết lập lại Precision trước khi chạy thực hiện lệnh.

Bác Thaistreetz là ks giao thông ạ. lisp đúng ý tớ cảm ơn bác, mong được học hỏi bác nhiều hơn nữa, cám ơn bác nhé, cám ơn sự nhiệt tình của các thành viên trong diễn đàn. Thanhs

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nhờ các cao thủ giúp mình một lisp như này.

đây là file bản vẽ minh hoạ

http://www.cadviet.com/upfiles/2/ghep_text..._doi_cao_do.dwg

Chào Thaistreet.

Lisp của bạn chỉ thực hiện phép tính cộng, nhân chia rời rạc, chưa thể hiện được yêu cầu của bạn vqnhb đề ra là như trong file minh hoạ là thực hiện phép tính trên Text theo quy tắc : Nhân chia trước, cộng trừ sau.

Mình thấy bạn cũng biết về Lisp -> bạn hãy suy nghĩ và xây dựng 1 code thực hiện phép tính trên Text theo quy tắc : Nhân chia trước, cộng trừ sau nhé.

Chúc bạn xây dựng Code thành công.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào Thaistreet.

Lisp của bạn chỉ thực hiện phép tính cộng, nhân chia rời rạc, chưa thể hiện được yêu cầu của bạn vqnhb đề ra là như trong file minh hoạ là thực hiện phép tính trên Text theo quy tắc : Nhân chia trước, cộng trừ sau.

Mình thấy bạn cũng biết về Lisp -> bạn hãy suy nghĩ và xây dựng 1 code thực hiện phép tính trên Text theo quy tắc : Nhân chia trước, cộng trừ sau nhé.

Chúc bạn xây dựng Code thành công.

Chào anh Tuệ.

Vì em cũng gặp trường hợp của bạn vqnhb khá nhiều lần nên em hiểu chính xác điều bạn vqnhb muốn là gì qua bản vẽ của bạn ấy (có lẽ khác với cách mà mọi người sẽ hiểu). Và lisp trên đã thỏa mãn được nhu cầu sử dụng của vqnhb.

Còn về ý tưởng của anh em chưa rõ ý anh lắm. Nếu ta thực hiện phép tính trên theo quy tắc: Nhân chia trước, cộng trừ sau. Vậy thì số liệu chúng ta nhập vào là gì? có phải một biểu thức toán học đơn giản với 4 phép tính không ạ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào hai bạn Tuệ và Thaistreetz lisp mà bạn Thaistreetz viết đúng như yêu cầu của tớ đấy hình như bạn Thaistreetz là dân giao thông nên rất hiểu sử lý vụ cốt cách, ý bạn Tuệ là cộng trừ nhân chia cùng một lúc thì đúng là phải dùng biểu thức toán học chắc phải phức tạp lắm.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào anh Tuệ.

Vì em cũng gặp trường hợp của bạn vqnhb khá nhiều lần nên em hiểu chính xác điều bạn vqnhb muốn là gì qua bản vẽ của bạn ấy (có lẽ khác với cách mà mọi người sẽ hiểu). Và lisp trên đã thỏa mãn được nhu cầu sử dụng của vqnhb.

Còn về ý tưởng của anh em chưa rõ ý anh lắm. Nếu ta thực hiện phép tính trên theo quy tắc: Nhân chia trước, cộng trừ sau. Vậy thì số liệu chúng ta nhập vào là gì? có phải một biểu thức toán học đơn giản với 4 phép tính không ạ?

Dữ liệu đầu vào (Input)

 

nhap so muon nhan hoac chia : (1)

 

nhap so muon cong hoac tru : (2)

 

chon cac so can sua : (3)

 

Xử lý (Processor)

 

-> Xuất kết quả (Output)

 

 

Lisp này sẽ tương đương với 4 Lisp trên của bạn (có thể cộng; hoặc trừ; hoặc nhân; hoặc chia cùng trong 1 Lisp nhưng có tính năng ưu việt hơn là khả năng tính theo quy tắc : Nhân chia trước, cộng trừ sau

 

Nếu chỉ cộng hoặc trừ text với 1 số thôi thì : (tương đương với Lisp cong.lsp và tru.lsp của bạn)

Hàng 1 : nhập số 1 (Khi nhân hay chia một số với số 1 thì kết quả là chính nó)

Hàng 2 : Nhập số cần cộng (ví dụ số 10 thì nhập 10) , muốn trừ thì nhập trừ (- 10)

 

Nếu chỉ nhân hoặc chia text với 1 số thôi thì : (tương đương với Lisp nhan.lsp và chia.lsp của bạn)

Hàng 1 : Nhập số cần nhân hoặc chia

Hàng 2 : nhập số 0 (Khi cộng hay trừ một số với số 0 thì kết quả là chính nó)

 

Nếu để nhân chia trước, cộng trừ sau đối với Text : tính năng mới : nhân chia trước, cộng trừ sau)

Hàng 1 : Nhập số cần nhân hoặc chia

Hàng 2 : Nhập số cần cộng hoặc trừ

 

Bước nhập vào (Input); và xuất ra (output). Bạn đã làm thành công. Chỉ còn bước Xử lý (Processor) : Tue_NV để cho bạn suy nghĩ. Yên tâm đi, có gặp gì khó khăn thì Tue_NV sẽ hỗ trợ cho bạn.

Chúc bạn xây dựng Code thành công.

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào hai bạn Tuệ và Thaistreetz lisp mà bạn Thaistreetz viết đúng như yêu cầu của tớ đấy hình như bạn Thaistreetz là dân giao thông nên rất hiểu sử lý vụ cốt cách, ý bạn Tuệ là cộng trừ nhân chia cùng một lúc thì đúng là phải dùng biểu thức toán học chắc phải phức tạp lắm.

Uh, mình là dân giao thông.

giải quyết một biểu thức toán học cũng không fải là vấn đề phức tạp lắm. bản thân cad đã cung cấp cho ta công cụ để giải quyết các biểu thức toán học là lệnh CAL. có thể nhúng lệnh này vào lisp khá đơn giản. Tuy nhiên mình nghĩ điều đó không cần thiết.

Vấn đề có lẽ là do anh Tuệ và mọi người không hiểu đc ý của bạn từ bản vẽ bạn up lên. (như bản vẽ của bạn thì ai cũng có thể hiểu phần thứ 3 mới là kết quả cuối cùng bạn muốn). Bạn chú ý cho lần sau nhé. Người viết lisp không phải là bạn nên có thể không hiểu đc điều bạn muốn, vì thế khi yêu cầu phải rõ ràng, cụ thể, một nghĩa thì mọi người mới có thể giúp bạn được. cũng để tránh gây cảm giác bực mình cho người giúp bạn khi công sức bỏ ra đành vứt đi và fải viết lại lisp.

 

EDIT: Ah, em hiểu ý của anh Tuệ rồi, để em thử xem thế nào :s_big:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào Kamezoko,

Trước hết Thiep đề nghị định dạng lại bản vẽ của bạn như sau:

Các điểm đo là đối tượng POINT được đặt trong lớp "DIEM"

Các ký hiệu điểm đo là đối tượng TEXT được đặt trong lớp "TENDIEM"

Các cao độ điểm đo là đối tượng TEXT được đặt trong lớp "CAODO"

Các ký hiệu điểm đo phải là một ký tự chữ kèm với 1 số tự nhiên tăng dần. ví dụ: đường chuyền đa giác 1: I.1, I.2, I.3... I.100, đường chuyền đa giác 2: H-1, H-2, H-3 ... H-100, không được là II.1, II.2, II.3 ...Nếu bạn lỡ ký hiệu như vậy thì dùng chức năng find and replace của CAD để chỉnh sửa lại.

Lisp sẽ tự động dò các điểm có ký hiệu cùng 1 kiểu đường chuyền sẽ nối với nhau thành một 3dpolyline

Thiep dùng lisp JD của bác Hoanh chỉnh sửa lại cho phù hợp với bạn hơn.

Các bạn trắc địa dùng và cho ý kiến nhé:

;;;===============================================
;;; Lisp tao duong chuyen 3DPOLYLINE
;;; Update: 09/09/2009
;;; Free from CADVIET.COM
(defun 3DPoly (Lp *ModelSpace* / PntArr)
 (setq	PntArr (vlax-make-safearray
	 vlax-vbDouble
	 (cons 0 (1- (length Lp)))
       )
 )
 (vlax-safearray-fill PntArr Lp)
 (vla-Add3Dpoly *ModelSpace* PntArr)
)
;;;---------------------
(defun SAVE_MODE ()
 (command "UCS" "W" "")
 (setq	OLD_OSMODE    (getvar "OSMODE")
OLD_CECOLOR   (getvar "CECOLOR")
OLD_AUTOSNAP  (getvar "AUTOSNAP")
OLD_ORTHOMODE (getvar "ORTHOMODE")
 )
 (setvar "osmode" 0)
 (setvar "cmdecho" 0)
 (setvar "plinegen" 1)

)
(defun RESTORE ()
 (setvar "osmode" OLD_OSMODE)
 (setvar "AUTOSNAP" OLD_AUTOSNAP)
 (setvar "ORTHOMODE" OLD_ORTHOMODE)
 (setvar "CECOLOR" OLD_CECOLOR)
 (setvar "cmdecho" 1)
 )
;;;------------------------------------
 (defun timgan	(p lst / dmin ppluu)
   (foreach pp	lst
     (setq d (distance p (car pp)))
     (if (or (not dmin) (> dmin d))
(setq dmin d
      ppluu pp
)
     )
   )
   (cdr ppluu)
 )

(defun filter (lstent otype olayer / kq)
 (foreach pp lstent
    (setq tt (entget pp))
    (if (and
   (member (cons 0 otype) tt)
   (member (cons 8 olayer) tt)
 )
      (setq kq (append kq (list pp)))
    )
 )
 kq
)
(defun ss2ent(ss / sodt index lstent)
 (setq
   sodt (if ss (sslength ss) 0)	   
   index 0
 )
 (repeat sodt
   (setq ent (ssname ss index)
  index (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)
;;;===============================================
(vl-load-com)
(defun c:jd (/ ss	lstent	 lstcode  lstpoint lstponew lstassoc
       lstass	pc	 code	  p	   lstPLY   p0
       lstponew	co n
      )
 (setq	ActDoc	(vla-get-ActiveDocument (vlax-get-acad-object))
*Model*	(vla-get-ModelSpace ActDoc)
*layer*	(vla-get-Layers ActDoc)
 )
 (vla-StartUndoMark ActDoc)
 (if (not (setq enlay (tblobjname "layer" "DUONGCHUYEN")))
   (setq lay (vla-add *layer* "DUONGCHUYEN"))
   (progn
     (setq lay (vlax-ename->vla-object enlay))
     (setq lay (vla-add *layer* "DUONGCHUYEN"))
   )
 )
 (vla-put-color lay acRed)
 (vla-put-Linetype lay "continuous")
 (setvar "clayer" "DUONGCHUYEN")
 (SAVE_MODE)
 (setq
   ss	     (ssget
       '((-4 . "		 (-4 . "		 (0 . "POINT")
	 (8 . "DIEM")
	 (-4 . "AND>")
	 (-4 . "		 (0 . "TEXT")
	 (8 . "TENDIEM")
	 (-4 . "AND>")
	 (-4 . "OR>")
	)
     )
   lstent   (ss2ent ss)
   lstcode  (mapcar '(lambda (e)
		(cons (cdr (assoc 10 (entget e)))
		      (cdr (assoc 1 (entget e)))
		)
	      )
	     (filter lstent "TEXT" "TENDIEM")
     )
   lstpoint (mapcar '(lambda (e) (cdr (assoc 10 (entget e))))
	     (filter lstent "POINT" "DIEM")
     )
   lstpoint (mapcar '(lambda (p)
		(cons (timgan p lstcode) p)
	      )
	     lstpoint
     )
 )
 (setq	lstpoint
 (vl-sort
   lstpoint
   '(lambda (e1 e2)
      (< (car e1)
	 (car e2)
      )
    )
 )
 )
 (foreach pn lstpoint
   (setq lstponew
   (cons (cons (read (substr (car pn) 1 1)) (list (cdr pn)))
	 lstponew
   )
   )
   (setq lstassoc (cons (substr (car pn) 1 1) lstassoc))
 )
 (setq lstponew (reverse lstponew))
 (while lstassoc
   (setq lstass (cons (car lstassoc) lstass)) ;flag
   (setq lstassoc (vl-remove (car lstassoc) lstassoc))
 )
 (setq n 1)
 (foreach flag	lstass
   (setq lstPLY nil)
   (while (setq co (assoc (read flag) lstponew))
     (setq lstPLY (append (cadr co) lstPLY))
     (setq lstponew (vl-remove co lstponew))
   )
   (vla-put-color (3DPoly lstPLY *Model*) n)
   (setq n (1+ n))
 )
 (RESTORE)
 (princ)
)

Còn đây là bản vẽ Thiep đã test:

http://www.cadviet.com/upfiles/2/vd_3_1.dwg

cám ơn bạn nhiều, nhưng mình muốn nối điểm tự do,ko muốn nối tư động,nếu có thế thực hiện trên 1 lớp thì tốt hơn..mong bạn giúp đở... :s_big:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Uh, mình là dân giao thông.

giải quyết một biểu thức toán học cũng không fải là vấn đề phức tạp lắm. bản thân cad đã cung cấp cho ta công cụ để giải quyết các biểu thức toán học là lệnh CAL. có thể nhúng lệnh này vào lisp khá đơn giản. Tuy nhiên mình nghĩ điều đó không cần thiết.

Vấn đề có lẽ là do anh Tuệ và mọi người không hiểu đc ý của bạn từ bản vẽ bạn up lên. (như bản vẽ của bạn thì ai cũng có thể hiểu phần thứ 3 mới là kết quả cuối cùng bạn muốn). Bạn chú ý cho lần sau nhé. Người viết lisp không phải là bạn nên có thể không hiểu đc điều bạn muốn, vì thế khi yêu cầu phải rõ ràng, cụ thể, một nghĩa thì mọi người mới có thể giúp bạn được. cũng để tránh gây cảm giác bực mình cho người giúp bạn khi công sức bỏ ra đành vứt đi và fải viết lại lisp.

 

EDIT: Ah, em hiểu ý của anh Tuệ rồi, để em thử xem thế nào :s_big:

Chân thành cảm ơn các bác đã giúp đỡ. Đúng là khi mình yêu cầu một lisp nào đó mình cũng cố gắng viết làm sao cho ngắn ngọn dễ hiểu, nhưng trình độ mình có hạn có thể không hiểu hết vấn đề phát sinh khi yêu cầu, công sức các pác bỏ ra quả là rất đáng trân trọng. Một lần nữa mình xin chân thành cám ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đây là lisp em đã viết lại theo gợi ý của anh Tuệ

Lisp sẽ đưa ra yêu cầu

- nhập số muốn nhân. (nếu không có thì enter bỏ qua)

- nhập số muốn chia. (nếu không có thì enter bỏ qua. em tách số muốn nhân và số muốn chia thành 2 số độc lập để đỡ fải nhẩm giá trị nghịch đảo của một số nào đó khi thực muốn hiện phép chia)

- nhập số muốn cộng (nếu không có thì enter bỏ qua. nếu muốn thực hiện phép trừ thay cho phép cộng thì chỉ cần nhập giá trị âm)

- chọn các text số cần thay đổi giá trị. --> OK

(defun c:tinh()
(setq i 0 nhan 1 chia 1 cong 0)
(setq 	nhan1 (getreal "\nnhap so muon nhan: ")
chia1 (getreal "\nnhap so muon chia: ")
cong1 (getreal "\nnhap so muon cong them: "))
(if nhan1 (setq nhan nhan1))
(if chia1 (setq chia chia1))
(if cong1 (setq cong cong1))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
	(repeat (sslength txt)
	(setq txt_name (ssname txt i))
	  (setq txt_ent (entget txt_name))
	(setq cont1 (cdr(assoc 1 txt_ent)))
	(setq cont (atof cont1))
	(if (and (/= cont1 "0") (/= cont1 "0.0") (/= cont1 "0.00") (/= cont1 "0.000") (/= cont1 "0.0000") (/= cont1 "0.0000")  (/= cont1 "00.0") (/= cont1 "00.00") (/= cont1 "00.000") (/= cont1 "00.0000") (/= cont1 "00.0000") (= cont 0)) ()
	(progn
	(setq s (+ (/ (* cont nhan) chia) cong))
	(setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent)))
	(setq i (+ i 1))
);repeat
);defun

Quả thật sau khi hoàn thiện lisp này mới thấy ý tưởng của anh Tuệ rất hay, rất thông minh. cảm ơn anh đã góp ý để em hoàn thiện code này. :s_big:

 

Đoạn code này em có bổ xung thêm phần lọc đối tượng text là số và chuỗi ký tự. cách làm hơi củ chuối tý nhưng em nghĩ nó hoạt động tương đối hiệu quả rồi. hiện tại em cũng chưa nghĩ ra cách nào tốt hơn giúp lọc đối tượng text thành số và chuỗi ký tự riêng biệt.

cách làm này có nhược điểm:

- bị giới hạn nhận diện các số có giá trị bằng 0 (ngoài các số có giá trị là 0 đã đưa vào lisp như trên thì các số 0 dạng khác nó sẽ hiểu thành chuỗi ký tự. VD số 0.0 thì nó nhận diện được, còn số 000.00000 nó hiểu là chuỗi ký tự "000.00000" và ko thực hiện phép tính cho số này)

- còn bị nhầm lẫn một chỗi ký tự thành một số nếu các kỹ tự đầu chuỗi là số. VD chỗi 23ABCD thì nó sẽ hiểu thành 23.

tuy nhiên những trường hợp trên là rất ít gặp và có thể khắc phục trong qúa trình sử dụng. Hi vọng anh Tuệ mọi người có cách khác hay hơn.

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bác Thaistreetz là dân giao thông chắc bác biết lệnh tạo nhà trong nova bác có thể giúp em viết một lisp tạo nhà giống như thế được không.

Chào bạn Tuynh

Quả thật là mình không biết lệnh "tạo nhà" trong nova là lệnh nào. Phải chăng bạn muốn nói đến các loại địa vật vẽ trên trắc ngang? nếu không fải thì bạn cho mình tên lệnh và tên bản nova bạn đang dùng để mình kiểm tra nhé. nếu giúp được mình sẵn lòng.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Đây là lisp em đã viết lại theo gợi ý của anh Tuệ

Lisp sẽ đưa ra yêu cầu

- nhập số muốn nhân. (nếu không có thì enter bỏ qua)

- nhập số muốn chia. (nếu không có thì enter bỏ qua. em tách số muốn nhân và số muốn chia thành 2 số độc lập để đỡ fải nhẩm giá trị nghịch đảo của một số nào đó khi thực muốn hiện phép chia)

- nhập số muốn cộng (nếu không có thì enter bỏ qua. nếu muốn thực hiện phép trừ thay cho phép cộng thì chỉ cần nhập giá trị âm)

- chọn các text số cần thay đổi giá trị. --> OK

 

cách làm này có nhược điểm:

- bị giới hạn nhận diện các số có giá trị bằng 0 (ngoài các số có giá trị là 0 đã đưa vào lisp như trên thì các số 0 dạng khác nó sẽ hiểu thành chuỗi ký tự. VD số 0.0 thì nó nhận diện được, còn số 000.00000 nó hiểu là chuỗi ký tự "000.00000" và ko thực hiện phép tính cho số này)

- còn bị nhầm lẫn một chỗi ký tự thành một số nếu các kỹ tự đầu chuỗi là số. VD chỗi 23ABCD thì nó sẽ hiểu thành 23.

tuy nhiên những trường hợp trên là rất ít gặp và có thể khắc phục trong qúa trình sử dụng. Hi vọng anh Tuệ mọi người có cách khác hay hơn.

- nhập số muốn cộng (nếu không có thì enter bỏ qua. nếu muốn thực hiện phép trừ thay cho phép cộng thì chỉ cần nhập giá trị âm) : cái này mình đồng ý với bạn.

 

- nhập số muốn nhân. (nếu không có thì enter bỏ qua)

- nhập số muốn chia. (nếu không có thì enter bỏ qua. em tách số muốn nhân và số muốn chia thành 2 số độc lập để đỡ fải nhẩm giá trị nghịch đảo của một số nào đó khi thực muốn hiện phép chia)

Cái này Tue_NV không đồng ý với bạn

 

Chỉ cần (setq nhan1 (getreal "\nnhap so muon nhan: "))

-> nnhap so muon nhan: 100 -> Return -> 100.0

Còn nếu : -> nnhap so muon nhan: 1/100 -> Return -> 0.01

Tức là nếu nhân với 100 thì nhập 100; nếu chia cho 100 thì nhập 1/100 -> OKay

 

Vậy nên dòng này trong Code của bạn : chia1 (getreal "\nnhap so muon chia: ") -> bỏ

 

Vô hình dung 1 mũi tên bắn 2 nhạn -> bạn đã khắc phục được dãy số 0.00000000 hoặc 000.00 vô nghĩa đó là nhược điểm trong Code của bạn. Bạn thử xem -> sẽ rút ra vấn đề của bài toán

 

Hãy hoàn thành Code trên theo ý tưởng của Tue_NV và mình cũng đã hoàn thành xong code này. Nó rất tuyệt

Bạn chú ý tới số 1 và số 0 màu đỏ ở dưới nhé. Thêm chúng vào chuỗi để người dùng dễ hiểu nhé.

Chỉ cần 3 dòng Input thôi nhé

 

Dữ liệu đầu vào (Input)

 

nhap so muon nhan hoac chia : (1)

 

nhap so muon cong hoac tru : (2)

 

chon cac so can sua : (3)

 

Xử lý (Processor)

 

-> Xuất kết quả (Output)

 

Lisp này sẽ tương đương với 4 Lisp trên của bạn (có thể cộng; hoặc trừ; hoặc nhân; hoặc chia cùng trong 1 Lisp nhưng có tính năng ưu việt hơn là khả năng tính theo quy tắc : Nhân chia trước, cộng trừ sau

Nếu chỉ cộng hoặc trừ text với 1 số thôi thì : (tương đương với Lisp cong.lsp và tru.lsp của bạn)

Hàng 1 : nhập số 1 (Khi nhân hay chia một số với số 1 thì kết quả là chính nó)

Hàng 2 : Nhập số cần cộng (ví dụ số 10 thì nhập 10) , muốn trừ thì nhập trừ (- 10)

 

Nếu chỉ nhân hoặc chia text với 1 số thôi thì : (tương đương với Lisp nhan.lsp và chia.lsp của bạn)

Hàng 1 : Nhập số cần nhân hoặc chia (Ví dụ : Nếu nhân với 100 thì nhập 100; nếu chia cho 100 thì nhập 1/100)

Hàng 2 : nhập số 0 (Khi cộng hay trừ một số với số 0 thì kết quả là chính nó)

 

Nếu để nhân chia trước, cộng trừ sau đối với Text : tính năng mới : nhân chia trước, cộng trừ sau)

Hàng 1 : Nhập số cần nhân hoặc chia (Ví dụ : Nếu nhân với 100 thì nhập 100; nếu chia cho 100 thì nhập 1/100)

Hàng 2 : Nhập số cần cộng hoặc trừ

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×