Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
TRUNGNGAMY

[Trao đổi] Về giải quyết một vấn đề bằng nhiều ngôn ngữ khác nhau

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

Chào các bạn.

Đôi lúc vào Cadviet mình thấy cũng hơi buồn. Những gì mình biết về Lisp thì các bạn đã biết nhiều hơn mình, đôi lúc định ra tay giúp đỡ một số bạn mới học Lisp mà chưa kịp viết gì thì các bạn đã viết, thậm chí rất hay. Do đó, hôm nay mình mạo muội đưa ra chủ đề này giúp cho các bạn không cùng sở trường có dịp thể hiện. Cũng là dịp để chúng ta có thể nhìn thấy ưu thế của một ngôn ngữ trong giải quyết cùng một vấn đề như thế nào.

Mình tạm qui định ở đây các bạn có thể viết bất cứ ngôn ngữ nào mình biết (kể cả Lisp), Code có thể là code mở hay đã biên dịch đều được nhưng nên viết bằng code mở thì tốt hơn.

Bạn nào có yêu cầu gì hay xin cứ đưa lên để mọi người cùng tham gia cho vui nhé. Cám ơn các bạn

 

Trước hết mình đưa ra chủ đề như thế này :

 

Chủ đề 1 : Quản lý điểm

Căn cứ vào file text có format như sau : sohieudiem, toadoX, toadoY, [caodoZ]

Các bạn hãy viết chương trình quản lý điểm với yêu cầu như sau :

- 1/ Đọc file trên và thể hiện trên Cad vị trí (theo x,y,z) và số hiệu của chúng bằng định dạng tùy ý

- 2/ Gọi lệnh qldiem (các điểm sẽ đc quản lý theo sohieudiem và tọa độ của chúng trong bộ nhớ bằng cách nào đó)

- 3/ Gọi lệnh timkiem. Lệnh này cho phép tìm kiếm và đưa điểm đến giữa màn hình (khi ta cung cấp sohieudiem) hoặc trả về sohieudiem khi ta cung cấp tọa độ

- 4/ Thêm và xóa một điểm khỏi bộ nhớ.

- 5/ Lệnh "Noi" : Lệnh này cho phép nối các điểm với nhau (như lệnh line). Có điều khác là : Khi cung cấp sohieudiem hoặc tọa độ thì đều thực hiện được.

 

Đây là file tọa độ mẫu : http://www.cadviet.com/upfiles/3/37170_filetoado.rar

 

Những vd này mình đã làm trên Arx và Delphi trong một CT khá dài, mình sẽ trích ra cho các bạn tham khảo.

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êu cầu này nếu làm bằng lisp thì quá đơn giản, nhưng tốc độ thì ^^

Cũng chưa hẳn dễ đâu, Một số chức năng cũng khó làm đấy chứ. Trước đây mình đã làm bằng Lisp, từ năm 1994 trên Cad12-14 gì đó, kg biết code bây giờ có còn kg để mình tìm lại xem. Nếu làm thông thường nó sẽ kg chạy nhanh đc, mình phải dùng "bí kíp" nên mới tàm tạm. Tuy nhiên có một số chức năng như xóa một điểm thì rất khó. Còn làm trên Arx hay các ngôn ngữ bậc cao nói chung khá cực và dài dòng. Vì mình là dân kg chuyên nên gán ghép đủ thứ nó mới ra đc cái cần dùng. Nên tuy đã làm rồi nhưng mình cũng muốn các bạn làm trên các ngôn ngữ mới khác xem thử nó thế nào.

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

Vấn đề chính của bài toán này là tốc độ, chứ xoá 1 điểm theo đề toán thì cũng không khó lắm đâu.

Bạn đưa ra nhiều bài toán khá hay về tốc độ. Ít bữa rảnh chắc cũng thử... đua tốc độ xem sao.

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òn làm trên Arx hay các ngôn ngữ bậc cao nói chung khá cực và dài dòng.

Arx là ngôn ngữ cấp thấp, VBA, VB, lisp, ... là ngôn ngữ bậc cao, chắc bạn nhầm chỗ này chút :D

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

Vấn đề chính của bài toán này là tốc độ, chứ xoá 1 điểm theo đề toán thì cũng không khó lắm đâu.

Bạn đưa ra nhiều bài toán khá hay về tốc độ. Ít bữa rảnh chắc cũng thử... đua tốc độ xem sao.

Khi bạn có 1 cái list dài dằng dặc, việc xóa hoặc chèn một phần tử kg phải là đơn giản đối với Lisp khi mà bạn phải chờ nó nhớ lại toàn bộ cái list đó. Còn làm thế nào cho mỗi lần nó nhớ lại ít thôi để tăng tốc thì kg phải là đơn giản. Để khi rãnh rỗi mình sẽ viết một số biện pháp tăng tốc trên Lisp thử xem sao

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

Arx là ngôn ngữ cấp thấp, VBA, VB, lisp, ... là ngông ngữ bậc cao, chắc bạn nhầm chỗ này chút :D

Đúng là mình kg rành, nhưng nghe nói C++ là ngôn ngữ vừa bậc cao vừa bậc thấp, Arx dựa trên nền tảng C++ và VC++ (và đã hướng đối tượng), có đầy đủ tính chất và các hàm của VB, VBA, Lisp nên mình nghĩ nó cũng là bậc cao. Còn chính xác vì sao Arx vẫn gọi là cấp thấp có lẽ bạn chịu khó giải thích thêm tý nữa cho mình hiểu. Cám ơn bạn

Lúc này thất bạn kg đưa bài lên nữa. Mình thấy những vđ tương đối đơn giản như truy xuất và thay đổi tính chất của đối tượng mà làm trên Arx coi bộ hơi chua, làm trên Lisp sướng hơn. vđ tốc độ có lẽ kg quan trọng lắm vì những xử lý này thường là ngắn. Nếu bạn có thể sd nó trong các xử lý thiên về dữ liệu như mô phỏng độ cao hay vẽ đường đồng mức mới thấy giá trị của 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

Khi bạn có 1 cái list dài dằng dặc, việc xóa hoặc chèn một phần tử kg phải là đơn giản đối với Lisp khi mà bạn phải chờ nó nhớ lại toàn bộ cái list đó. Còn làm thế nào cho mỗi lần nó nhớ lại ít thôi để tăng tốc thì kg phải là đơn giản. Để khi rãnh rỗi mình sẽ viết một số biện pháp tăng tốc trên Lisp thử xem sao

1). Lisp dài ngắn không quan trọng. Ngắn thì nhìn nó" bác học" tí, dài thì nhìn nó "hai lúa" tí. Nhưng chưa chắc bác học thì chạy nhanh hơn hai lúa.

2). Sao lại phải nhớ toàn bộ lisp làm chi.

3). Tất nhiên để tăng tốc độ là cả 1 nghệ thuật, chứ không dễ dàng gì.

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

Đúng là mình kg rành, nhưng nghe nói C++ là ngôn ngữ vừa bậc cao vừa bậc thấp, Arx dựa trên nền tảng C++ và VC++ (và đã hướng đối tượng), có đầy đủ tính chất và các hàm của VB, VBA, Lisp nên mình nghĩ nó cũng là bậc cao. Còn chính xác vì sao Arx vẫn gọi là cấp thấp có lẽ bạn chịu khó giải thích thêm tý nữa cho mình hiểu. Cám ơn bạn

Lúc này thất bạn kg đưa bài lên nữa. Mình thấy những vđ tương đối đơn giản như truy xuất và thay đổi tính chất của đối tượng mà làm trên Arx coi bộ hơi chua, làm trên Lisp sướng hơn. vđ tốc độ có lẽ kg quan trọng lắm vì những xử lý này thường là ngắn. Nếu bạn có thể sd nó trong các xử lý thiên về dữ liệu như mô phỏng độ cao hay vẽ đường đồng mức mới thấy giá trị của nó.

C++ hay VC++ tương tác trực tiếp với bộ nhớ thông qua pointer, tác động điều khiển phần cứng thông qua các hàm, thư viện của chính nó nên gọi là "cấp thấp" (thấp hơn nữa thì có Asm - lập trình trên mã lệnh của CPU :D)

VB, VBA, lisp (vla) lập trình thông qua activeX, activeX có nhiệm vụ "thông báo lại cho HDH (host) các yêu cầu nên gọi là "cấp cao"

Về phần mấy post về ARX mình đưa lên chủ yếu là để mọi người làm quen với nó, bây giờ muốn làm 1 post về Object DBX thì lại ko biết là sao để ng đọc hiểu dc inherit class AcDbEntity, override các virtual function của nó, viết các hàm clone, deep clone, .....

Về việc dạo này ko post tiếp là do mình hơi bận và thấy cũng ít ng quan tâm đến nó, chủ yếu mọi ng thích dùng lisp hơn :D

Giả sử như vấn đề của bạn nêu ở trên, bạn có vài chục ngàn điểm (block Att chứa thông tin điểm) bây giờ lọc ra các cao độ bằng nhau đưa về cùng layer hay đổi màu lại thì chắc đoạn code bạn làm trên ARX tuy "dài" mà "nhanh" :D

Thân!

  • 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

1). Lisp dài ngắn không quan trọng. Ngắn thì nhìn nó" bác học" tí, dài thì nhìn nó "hai lúa" tí. Nhưng chưa chắc bác học thì chạy nhanh hơn hai lúa.

2). Sao lại phải nhớ toàn bộ lisp làm chi.

3). Tất nhiên để tăng tốc độ là cả 1 nghệ thuật, chứ không dễ dàng gì.

Chắc là mình viết nhầm, list chứ kg phải lisp. ý nói là cái biến lưu danh sách đấy mà. Trong lisp mỗi lần danh sách thay đổi đều phải nhớ lại từ đấu chứ kg như các ngôn ngữ có con trỏ. Đồng ý, chạy nhanh hay chậm do bản thân ngôn ngữ và ý tưởng của giải thuật chư kg phải do code viết dài ngay ngắ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

Bác DVH không hiểu ý bác đang muốn nói chứ không phải bác nhầm. Đúng là việc không có con trỏ là 1 trong những điều đáng tiếc nhất của lisp, không chỉ riêng việc xử lý list mà cả các vòng lặp của lisp cũng yếu luôn. không nhảy ra nhảy vô thoải mái như những ngôn ngữ khác.

 

@Detailing: Mình nghĩ là không phải mọi người không hứng thú đâu. Như bản thân mình, nhìn những gì bạn làm thì thích lắm. Dù rất muốn học nhưng không đủ điều kiện (tiền bạc, thời gian) để theo đuổi sư đam mê như bạn. Lisp cũng chỉ là rẽ ngang phục vụ cho công việc chính, mục đích để nối dài cái cần câu cơm ra 1 chút thôi chứ cũng không mong gì hơn ở nó, bởi ai cũng biết, so với nghề xây dựng thì nghề lập trình còn bạc hơn rất nhiều :(

  • 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

Trước hết mình đưa ra chủ đề như thế này :

 

Chủ đề 1 : Quản lý điểm

Căn cứ vào file text có format như sau : sohieudiem, toadoX, toadoY, [caodoZ]

Các bạn hãy viết chương trình quản lý điểm với yêu cầu như sau :

- 1/ Đọc file trên và thể hiện trên Cad vị trí (theo x,y,z) và số hiệu của chúng bằng định dạng tùy ý

- 2/ Gọi lệnh qldiem (các điểm sẽ đc quản lý theo sohieudiem và tọa độ của chúng trong bộ nhớ bằng cách nào đó)

- 3/ Gọi lệnh timkiem. Lệnh này cho phép tìm kiếm và đưa điểm đến giữa màn hình (khi ta cung cấp sohieudiem) hoặc trả về sohieudiem khi ta cung cấp tọa độ

- 4/ Thêm và xóa một điểm khỏi bộ nhớ.

- 5/ Lệnh "Noi" : Lệnh này cho phép nối các điểm với nhau (như lệnh line). Có điều khác là : Khi cung cấp sohieudiem hoặc tọa độ thì đều thực hiện được.

 

Đây là file tọa độ mẫu : http://www.cadviet.c...0_filetoado.rar

 

Những vd này mình đã làm trên Arx và Delphi trong một CT khá dài, mình sẽ trích ra cho các bạn tham khảo.

Bạn đã có code ARX và delphi rồi thì mình gửi 1 cái .NET xem có nhanh bằng của bạn ko.

load vào CAD (2007 trở lên) bằng lệnh NETLOAD (required .NET Framework 3.5 or higher)

các lệnh gồm:

  • qldiem ghi ra tex (sohieudiem) với điểm đặt tại bottom center của text
  • timkiem (nhập sohieudiem hoac tọa độ format: X,Y,Z -> vd: 1.234, 223.098, 987.222)
  • them
  • xoa
  • noi

download here: http://www.cadviet.c...ointcontrol.rar

 

p/s: trong lệnh qldiem có luôn chức năng kiểm tra và loại bỏ các điểm "giống nhau"

  • 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

Bạn đã có code ARX và delphi rồi thì mình gửi 1 cái .NET xem có nhanh bằng của bạn ko.

load vào CAD (2006 trở lên) bằng lệnh NETLOAD (required .NET Framework 3.5 or higher)

các lệnh gồm:

  • qldiem ghi ra tex (sohieudiem) với điểm đặt tại bottom center của text
  • timkiem (nhập sohieudiem hoac tọa độ format: X,Y,Z -> vd: 1.234, 223.098, 987.222)
  • them
  • xoa
  • noi

download here: http://www.cadviet.c...ointcontrol.rar

 

p/s: trong lệnh qldiem có luôn chức năng kiểm tra và loại bỏ các điểm "giống nhau"

Cám ơn. Bạn làm nhanh quá. Cái của mình nó nằm lẫn lộn trong một Ct lớn có cả trăm file vừa Lisp, Arx, Delphi nên lọc ra nó cũng lâu. Nếu để nguyên nó lại lớn quá

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 Deta viết bằng cách gì mà ngắn quá. Mình thì viết lung tung có cả Lisp, Arx và Delphi. Ngôi trích ra hoài cũng mệt nên mình để nguyên hai file dll của Delphi up lên cho các bạn tham khảo. Khi sd các bạn copy vào thư mục nào đó và báo cho cad(2006) biết đường dẫn của nó. Khi chạy cần load file "kd.lsp" để khởi động. Các bạn cần load file mnu để biết các lệnh của nó. Mình chỉ đưa lên cho vui thôi chứ mình ngán viết trên Arx rồi. Nếu có thể chuyển qua Lisp đc thì mình chuyển nốt cho xong chứ mỗi lần biên dịch khi cad lên đời quá mệt.

http://www.cadviet.com/upfiles/3/37170_trungngamy_2.rar

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ột số ví dụ nhỏ về objectarx tổng hợp từ một số lisp trên cadviet.

Để tìm hiểu về objectarx nên bắt đầu từ c(malloc, free, *,&,->,[], ...), c++(new, delete, class , template...), google, cadviet...

File arx, dbx: Cad2010-2012, font command vnmono.

http://www.cadviet.com/upfiles/3/104814_arx_1.rar

Các lệnh: ut...

Minh họa:

http://www.youtube.com/watch?feature=player_detailpage&v=hrZQP9kdCZ4

  • 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×