QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

Thư viện các hàm tự lập bằng VB

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • a2tiep
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Tôi đang gặp vấn đề rất khó khăn. Mong cả nhà chỉ bảo. Tôi đang thực hiện một tool để kiểm xoát dữ liệu trong CAD bằng VBA.
    Được mô tả như sau:
    - Chương trình AutoCAD mở nhiều bản vẽ. Tôi có một đối tượng ở bản vẽ 1 được chuyển sang bản vẽ 2. Làm thế nào quản lý được ObjectID của nó. Bởi vì khi chuyển đối tượng đó từ 1 sang 2 thì ObjectID của nó bị thay đổi. Làm thế nào nhận ra đối tượng đó.
    - Có cơ chế nào trong lập trình VBA chuyển đối tượng hay copy đối tượng từ bản vẽ 1 sang bản vẽ 2 mà vẫn kiểm xoát được ObjectID của nó không.

    help me....

    Leave a comment:


  • a2tiep
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Tôi cũng xin nói thêm về collection. Có thể coi là một danh sách liên kết các "objects".
    Khi ta lập trình với Pascal thì ta trật vật tạo danh sách liên kết. Nhưng collection bao gồm toàn bộ dữ liệu và toàn bộ các object tồn tại. Cơ chế tìm kiếm và cơ chế thêm bớt rất tiện lợi.
    Thời kỳ tôi làm đồ án tốt nghiệp, Nhờ một anh thế hệ trước chỉ bảo tôi. Mà tôi đã đơn giản được hàng đống code. Mà nhìn vào nó đã tôi phát ớn. Code được trình bày đơn giản rễ hiểu. Các anh em chỉ cần bật help của Vb hay VBA (Excel, AutoCAD, Word) với từ khóa collection.

    Chúc anh em thành công.

    Leave a comment:


  • PMXD
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nếu dùng Redim Preserve Mang(0 to k) thì sẽ giữ lại được các giá trị mà mình đã Redim trước đó, nếu không nó sẽ xóa hết các giá trị cũ.

    Leave a comment:


  • truongkct
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi tien2005
    Các bác cho em hỏi sử dụng hàm Redim như thế nào?
    Có thể khai báo giatri=redim(i,j,k)
    sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
    vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
    Cám ơn các Bác
    Hàm Redim dùng để cấp phát vùng nhớ cho các mảng động, ví dụn như sau:
    Dim a() as Double 'Khai báo mảng động a() kiểu số thực

    Redim a(1 to 100) 'cap phat vung nho 100 phan tu cho mang a()
    Sao tu nhien khong viet tieng Viet duoc vay ta ?

    Leave a comment:


  • maikhoanam
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    'Tim cac cap noi luc tuong ung!
    'Mai Khoa Nam -STU
    '1-xuat bieu do bao vat lieu sang Excel(ko xuat cac TH to hop) de lay cac gia tri min,mac
    '2--xuat cac truong hop to hop sang Excel (ko xuat bieu do bao vat lieu)
    '3-Tu cac gia tri min mac di tim cac gia tri noi luc tuong ung co trong cac TH to hop thong qua ham tim kiem nay
    'chuc cac ban thanh cong
    Public Function timMtuongung(khoangP, khoangM3 As Range, Gt As Double)
    Dim i As Integer
    i = 0
    Do While i < khoangP.Cells.Count
    i = i + 1
    If khoangP(i) = Gt Then
    timMtuongung = khoangM3(i)
    Exit Do
    End If
    If khoangP(i + 1) = Gt Then
    timMtuongung = khoangM3(i + 1)
    Exit Do
    End If
    Loop
    End Function
    Public Function timNtuongung(khoangM3, khoangP As Range, Gt As Double)
    Dim i As Integer
    i = 0
    Do While i < khoangM3.Cells.Count
    i = i + 1
    If khoangM3(i) = Gt Then
    timNtuongung = khoangP(i)
    Exit Do
    End If
    If khoangM3(i + 1) = Gt Then
    timNtuongung = khoangP(i + 1)
    Exit Do
    End If
    Loop
    End Function
    Last edited by maikhoanam; 11-06-2006, 07:54 PM.

    Leave a comment:


  • tien2005
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Cám ơn bác Cuong gt41, tôi sẽ tìm hiểu thêm đối tượng Collection

    Leave a comment:


  • tien2005
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi PMXD
    Xin chào mọi người!
    Lâu nay tôi cũng chẳng lập thêm được hàm nào hay ho cả, các hàm thông thường có POST lên chắc cũng không hiệu quả. Để góp vui thêm cho Box, tôi thảo luận với anh em về 1 thuật toán mà trước đây tôi thu thập được.
    '========
    Đề bài: Cho một tập hợp N(gồm n phần tử),. Hãy tìm trong tập hợp N phần tử thỏa mãn tính chất A.
    '========
    Khi đọc đề bài này, chắc ai cũng nghĩ ngay đến thuật toán "VÉT CẠN", đó là dùng vòng For chạy từ đầu đến cuối tập hợp để tìm ra phần tử có thuộc tính A. Tuy nhiên, nếu số lượng phần tử rất rất nhiều thì vòng lặp này sẽ chạy rất lâu (Đặc biệt khi dùng ngôn ngữ VB) vì số phép tính là n!.
    '========
    Thuật toán "CHIA ĐÔI" (tôi quên tên chính xác rồi, cứ tạm gọi như vậy):Chia đôi tập hợp ban đầu thành 2 tập hợp con N1 và N2. Dùng 1 vòng lặp For chạy trong tập hợp N1. Nếu gặp phần tử thỏa mãn thuộc tính A thì kết thúc lặp, nếu chạy hết mà không gặp phần tử đó thì xét đến tập con N2. Trong tập con N2 lại chia thành 2 tập con N21 và N22 và làm tương tự.
    Cứ như vậy thì số lượng phép toán sẽ giảm đi rất nhiều, tăng tốc độ chạy chương trình.
    Nếu bạn nào dùng Delphi hoặc C++ chắc cũng chẳng cần để ý đến thuật toán này, nhưng tôi làm VB, nếu cứ "VÉT CẠN" nhiều khi chạy toàn "TREO MÁY"
    Các bạn xem có gì đóng góp ý kiến
    Theo tôi bác có thể dùng hàm Find để giải quyết công việc này sẽ tốt hơn vòng For (kinh nghiệm này có được khi tôi viết chương trình tính dự toán)

    Leave a comment:


  • Cuong_gt41
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi tien2005
    Các bác cho em hỏi sử dụng hàm Redim như thế nào?
    Có thể khai báo giatri=redim(i,j,k)
    sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
    vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
    Cám ơn các Bác
    Bác có thể dùng đối tượng thùng chứa của VB (Collection) Trong đó nhồi gì vào chẳng được...
    Như của bác thì bác nên tạo ra một đối tượng có các thuộc tính tương ứng là i,j,k...
    Rồi nhồi nó vào cái collection vừa tạo ra đấy.
    (Collection : là mảng để chứa đối tượng bất kỳ Bác nên tìm hiểu cách sd nó vì nó rất hữu dụng. Chứ không cần thiết phải dùng redim đâu)

    Leave a comment:


  • tien2005
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Các bác cho em hỏi sử dụng hàm Redim như thế nào?
    Có thể khai báo giatri=redim(i,j,k)
    sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
    vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
    Cám ơn các Bác

    Leave a comment:


  • Cuong_gt41
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    ok. Đúng là n chứ không phải là n! . Khi cho chung chung như thế thì chỉ có cách làm for(i=1 to n). Còn khi muốn tối ưu thì phải xắp xếp theo một quy luật nhất định

    Leave a comment:


  • tnlinh
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Mục đích của bài toán trên là lọc trong 1 tập hợp những phần tử thỏa mãn điều kiện nào đó. Theo tôi, số phép tính duyệt chỉ là n, bằng số phần tử của tập hợp, không phải là n!???

    Không có cái nào tốt hơn và dễ hơn cách for i:=0 to n-1 do duyet(i)

    Không cần bàn việc tối ưu ở đây, nếu bàn thì bài toán cần thêm dữ kiện.

    Leave a comment:


  • PMXD
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Xin chào mọi người!
    Lâu nay tôi cũng chẳng lập thêm được hàm nào hay ho cả, các hàm thông thường có POST lên chắc cũng không hiệu quả. Để góp vui thêm cho Box, tôi thảo luận với anh em về 1 thuật toán mà trước đây tôi thu thập được.
    '========
    Đề bài: Cho một tập hợp N(gồm n phần tử),. Hãy tìm trong tập hợp N phần tử thỏa mãn tính chất A.
    '========
    Khi đọc đề bài này, chắc ai cũng nghĩ ngay đến thuật toán "VÉT CẠN", đó là dùng vòng For chạy từ đầu đến cuối tập hợp để tìm ra phần tử có thuộc tính A. Tuy nhiên, nếu số lượng phần tử rất rất nhiều thì vòng lặp này sẽ chạy rất lâu (Đặc biệt khi dùng ngôn ngữ VB) vì số phép tính là n!.
    '========
    Thuật toán "CHIA ĐÔI" (tôi quên tên chính xác rồi, cứ tạm gọi như vậy):Chia đôi tập hợp ban đầu thành 2 tập hợp con N1 và N2. Dùng 1 vòng lặp For chạy trong tập hợp N1. Nếu gặp phần tử thỏa mãn thuộc tính A thì kết thúc lặp, nếu chạy hết mà không gặp phần tử đó thì xét đến tập con N2. Trong tập con N2 lại chia thành 2 tập con N21 và N22 và làm tương tự.
    Cứ như vậy thì số lượng phép toán sẽ giảm đi rất nhiều, tăng tốc độ chạy chương trình.
    Nếu bạn nào dùng Delphi hoặc C++ chắc cũng chẳng cần để ý đến thuật toán này, nhưng tôi làm VB, nếu cứ "VÉT CẠN" nhiều khi chạy toàn "TREO MÁY"
    Các bạn xem có gì đóng góp ý kiến

    Leave a comment:


  • morpheus
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi PMXD
    Rất cám ơn morpheus đã đóng góp ý kiến. Ở diễn đàn cũng hầu hết là các anh em xây dựng tự lập trình nên đôi lúc cũng không tránh khỏi việc thiếu tối ưu trong thuật toán. Ở bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộ.
    Bác PMXD cứ lập ra đi, đồng bào nhiều khi cũng chẳng chủ động lắm đâu. Nếu lập ra một thời gian mà thấy không có hiệu quả thì ta lại đóng lo gì. Bác là mod mà, tiếp thị thêm vài bài ở các chủ đề khác thế nào chả có người quan tâm. Tôi nghĩ mục đó cũng sẽ HOT đấy. Ít nhất bác cũng đã có 2 thành viên rồi nhé.

    Leave a comment:


  • minhtu
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi morpheus
    Các bác không chuyên rồi. Thuật toán "sủi bọt" (bubble sort) này là thuật toán cơ bản nhất khi học tin. Ở đây ta nên dùng với phép lặp điều kiện thì đúng hơn là với phép lặp đếm. Điều này cho phép chủ động dừng vòng lặp khi thuật toán đã hoàn tất (chứ không nhất thiết phải thực hiện toàn bộ 2 phép lặp chồng nhau) và sẽ không sót trường hợp nào.
    Em cũng được học một ít về tin học thì được biết các bài toán mức độ tính toán phụ thuộc dữ liệu đầu vào thì không có giải thuật nào là tốt nhất. Mỗi giải thuật hay trong trường hợp này nhưng lại chưa hay trong trường hợp khác. Các bác cứ thử với 2 bộ số liệu (9,8,7,6,5,4,3,2,1,0) và (0,1,2,3,4,5,6,7,8,9) rồi dùng thử các hàm sort sẽ thấy mỗi giải thuật hay với bộ 1 nhưng chưa chắc đã hay với bộ 2 và ngược lại.

    Còn giải thuật nổi bọt theo lý thuyến vẫn có 2 vòng for ***g nhau, không biết có cách 2 như bác viết không.

    Nguyên văn bởi PMXD
    Ở bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộ
    Em ủng hộ.
    Last edited by minhtu; 30-05-2006, 01:11 PM.

    Leave a comment:


  • PMXD
    replied
    Ðề: Thư viện các hàm tự lập bằng VB

    Nguyên văn bởi morpheus
    Các bác không chuyên rồi. Thuật toán "sủi bọt" (bubble sort) này là thuật toán cơ bản nhất khi học tin. Ở đây ta nên dùng với phép lặp điều kiện thì đúng hơn là với phép lặp đếm. Điều này cho phép chủ động dừng vòng lặp khi thuật toán đã hoàn tất (chứ không nhất thiết phải thực hiện toàn bộ 2 phép lặp chồng nhau) và sẽ không sót trường hợp nào.

    Dim Mang() As Double
    Dim i As Integer
    Dim isNotYetSorted As Boolean
    Do
    isNotYetSorted = False
    For i = Lbound(Mang) to Ubound(Mang) - 1
    If Mang(i) > Mang(i + 1) Then
    HoanVi(Mang(i), Mang (i+1))
    isNotYetSorted = True
    End If
    Next
    Loop Until Not isNotYetSorted.

    Các bác check lại xem nhé.
    Rất cám ơn morpheus đã đóng góp ý kiến. Ở diễn đàn cũng hầu hết là các anh em xây dựng tự lập trình nên đôi lúc cũng không tránh khỏi việc thiếu tối ưu trong thuật toán. Ở bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộ.

    Leave a comment:

Working...
X