Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
14 replies to this topic

#1 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 18 June 2012 - 08:20 PM

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.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.
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 June 2012 - 10:21 PM

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


#3 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 19 June 2012 - 01:22 AM

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.
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 June 2012 - 07:34 AM

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


#5 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 19 June 2012 - 08:41 AM

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
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#6 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 19 June 2012 - 09:35 AM

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
  • 0

#7 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 19 June 2012 - 09:50 AM

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ó.
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 June 2012 - 11:20 AM

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ì.
  • 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.


#9 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 19 June 2012 - 11:34 AM

Đú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!
  • 2

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#10 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 19 June 2012 - 01:13 PM

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.
  • 0

#11 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 19 June 2012 - 02:42 PM

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 :(
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#12 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 20 June 2012 - 07:39 PM

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"
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#13 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 20 June 2012 - 08:21 PM

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á
  • 0

#14 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 21 June 2012 - 12:25 AM

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.c...rungngamy_2.rar
  • 0

#15 reality

reality

    biết pan

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 06 June 2013 - 11:03 AM

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.c...04814_arx_1.rar

Các lệnh: ut...

Minh họa:


  • 1