Trao đổi về thuật toán trong lập trình VBA (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,201
Được thích
24,664
Tôi mở chủ đề này vì thấy ít các nhà lập trình VBA (hay ngôn ngữ khác) quan tâm và không thấy trao đổi.

Hiểu đơn giản nhất: Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện, giải quyết một vấn đề hay bài toán nào đó. Như vậy, để giải quyết một bài toán nào đó, cần phải có trình tự các bước giải quyết, đó là thuật toán.

Trong lập trình, thuật toán đóng vai trò hết sức quan trọng, quyết định đến sự thành công của các bài toán trong VBA. Chúng ta không thể giải được bài toán nếu không nắm được thuật toán (nhiều bạn nhờ giúp đỡ công việc mà chính họ nhiều khi còn hiểu một cách ấm ớ +-+-+-+). Ngoài ra 1 bài toán có thể có nhiều lời giải. Có lời giải khoa học, ngắn gọn, nhanh chóng, có lời giải thì dài dòng... Điều đó phụ thuộc vào tư duy và kỹ năng của mỗi người...
Cũng phải khẳng định nếu không có tư duy thuật toán tốt thì việc xây dựng chương trình lớn trên VBA coi như không khả thi.

Do vậy, tôi lập chủ đề này để chúng ta trao đổi thêm về thuật toán và kỹ năng giải quyết.
 
Lần chỉnh sửa cuối:
Em chưa rõ là topic này là để trao đổi ý kiến hay có thể đưa ra cả các yêu cầu để mọi người giúp đỡ ạ???
 
Upvote 0
[ThongBao]Đây là topic trao đổi bạn nhé.[/Thongbao]

Vậy có thể hiểu như thế này fải không thầy Hướng:

"Topic này là để trao đổi ý kiến hay có thể đưa ra cả các yêu cầu (đã biết đáp án) để mọi người giải quyết."
 
Upvote 0
[ThongBao]Đây là topic trao đổi bạn nhé.[/Thongbao]

Vậy có thể hiểu như thế này fải không thầy Hướng:

"Topic này là để trao đổi ý kiến hay có thể đưa ra cả các yêu cầu (đã biết đáp án) để mọi người giải quyết."

Em nghĩ là trao đổi thuật toán về các bài toán + các bước thực hiện để giải quyết, các thủ thuật hay. Tài liệu về nội dung này cũng khá nhiều, cần chọn lọc. Ngoài ra các ví dụ phải hơi hướng về VBA cho phù hợp.
 
Upvote 0
Gọi là THUẬT TOÁN (hoặc giải thuật) nghĩa là người ta muốn tìm hiểu về HƯỚNG ĐI để giải quyết một bài toán. Ví dụ người ta có thể hỏi hoặc trao đổi thế này:
- Thuật toán để sort mảng là gì?
- Phương pháp nào để giải quyết bài toán lọc duy nhất
vân... vân...
Chi tiết áp dụng thế nào vào từng bài toán cụ thể là tùy mỗi người (sau khi đã có thuật toán)
 
Upvote 0
Nói đến thảo luận, trao đổi kinh nghiệm về thuật toán, chúng quá rộng lớn và đa dạng. Cho nên chủ topic cần phải đưa ra chủ đề giải thuật của vấn đề gì, từ đó phát triển thuật toán tối ưu của vấn đề đó. Khi giải quyết xong vấn đề này thì lại đưa ra một chủ đề mới khác để mọi người đưa ra thuật toán tối ưu của mình.

Đôi lời góp ý.
 
Upvote 0
Nói đến thảo luận, trao đổi kinh nghiệm về thuật toán, chúng quá rộng lớn và đa dạng. Cho nên chủ topic cần phải đưa ra chủ đề giải thuật của vấn đề gì, từ đó phát triển thuật toán tối ưu của vấn đề đó. Khi giải quyết xong vấn đề này thì lại đưa ra một chủ đề mới khác để mọi người đưa ra thuật toán tối ưu của mình.

Đôi lời góp ý.

Chính xác là vậy! Cho 1 bài toán cụ thể và chúng ta cùng bàn về giải thuật tối ưu
Hay Nghĩa đưa ra 1 ví dụ nào đó đi
(mấy trò chơi này e rằng người mới học chả thèm quan tâm??? Ẹc... Ẹc...)
 
Upvote 0
Nói đến thảo luận, trao đổi kinh nghiệm về thuật toán, chúng quá rộng lớn và đa dạng. Cho nên chủ topic cần phải đưa ra chủ đề giải thuật của vấn đề gì, từ đó phát triển thuật toán tối ưu của vấn đề đó. Khi giải quyết xong vấn đề này thì lại đưa ra một chủ đề mới khác để mọi người đưa ra thuật toán tối ưu của mình.

Đôi lời góp ý.
Theo ý kiến cá nhân của em có thể là chủ Topic đưa ra chủ để hoặc có thể thành viên khác đưa ra cũng được và thành viên nào giỏi về chủ đề nào thì đưa ra ý kiến về chủ đề đó. Thành viên nào quan tâm chủ đề nào thì thảo luận về chủ đề đó.
 
Upvote 0
Chính xác là vậy! Cho 1 bài toán cụ thể và chúng ta cùng bàn về giải thuật tối ưu
Hay Nghĩa đưa ra 1 ví dụ nào đó đi
(mấy trò chơi này e rằng người mới học chả thèm quan tâm??? Ẹc... Ẹc...)
Hihihi, Thầy là một trong những cây cao bóng cả của diễn đàn, vậy Thầy đưa ra một ví dụ trước đi để mọi người cùng đưa ra giải thuật.

Khi đưa ra giải thuật, nên giải thích tại sao người giải thuật làm như vậy, tác dụng của nó là gì thì sẽ dễ dàng cho việc nắm bắt thuật toán hơn.
 
Upvote 0
Trao đổi về thuật toán

Gọi là THUẬT TOÁN (hoặc giải thuật) nghĩa là người ta muốn tìm hiểu về HƯỚNG ĐI để giải quyết một bài toán. Ví dụ người ta có thể hỏi hoặc trao đổi thế này:
- Thuật toán để sort mảng là gì?
- Phương pháp nào để giải quyết bài toán lọc duy nhất
vân... vân...
Chi tiết áp dụng thế nào vào từng bài toán cụ thể là tùy mỗi người (sau khi đã có thuật toán)

Bài viết này cũng chưa đầy đủ ý nghĩa về thuật toán ( giải thuật )
Thuật toán phải bao gồm :
1 - Cách tổ chức, cách mô tả thông tin ( hay gọi là cách biểu diễn mô tả, tổ chức thông tin trong máy tính ) sao cho phù hợp với bài toán và cách giải bài toán.
2 - Lựa chọn giải pháp, cách thức giải quyết từ dữ liệu được mô tả ban đầu, để qua hữu hạn các bước đi đến kết quả ( Thông tin mô tả kết quả đang mong muốn )
3 - Thuật toán = Dữ liệu + Phương Pháp .
 
Upvote 0
Bài viết này cũng chưa đầy đủ ý nghĩa về thuật toán ( giải thuật )
Thuật toán phải bao gồm :
1 - Cách tổ chức, cách mô tả thông tin ( hay gọi là cách biểu diễn mô tả, tổ chức thông tin trong máy tính ) sao cho phù hợp với bài toán và cách giải bài toán.
2 - Lựa chọn giải pháp, cách thức giải quyết từ dữ liệu được mô tả ban đầu, để qua hữu hạn các bước đi đến kết quả ( Thông tin mô tả kết quả đang mong muốn )
3 - Thuật toán = Dữ liệu + Phương Pháp .
Thực ra thầy viết vắn tắt thôi mà. Những ai theo học VBA ai mà chẳng hiểu thuật toán là gì.
 
Upvote 0
Bài viết này cũng chưa đầy đủ ý nghĩa về thuật toán ( giải thuật )
Thuật toán phải bao gồm :
1 - Cách tổ chức, cách mô tả thông tin ( hay gọi là cách biểu diễn mô tả, tổ chức thông tin trong máy tính ) sao cho phù hợp với bài toán và cách giải bài toán.
2 - Lựa chọn giải pháp, cách thức giải quyết từ dữ liệu được mô tả ban đầu, để qua hữu hạn các bước đi đến kết quả ( Thông tin mô tả kết quả đang mong muốn )
3 - Thuật toán = Dữ liệu + Phương Pháp .

Xem cách bạn viết thì có vẻ như bạn được học rất bài bản (không như mình chỉ học "rừng", thiếu căn bản nên biết đâu nói đó)
Vậy bạn cũng nên tham gia vào topic này một vài bài toán cụ thể nào đó để mọi người học hỏi thêm chứ nhỉ?
 
Upvote 0
Xin giới thiệu đến các bạn quan tâm tài liệu Thuật toán và Giải thuật của thầy Lê Minh Hoàng. Bạn nào yêu thích khám phá thì thử thực hiện giải thuật trên VBA xem, nhớ cho ví dụ minh họa để mọi người cùng học với nhé :).

Link tải: http://cntt.epu.edu.vn/images/book_LeMinhHoang.pdf

Chúc vui vẻ,

Thanh Phong
 
Lần chỉnh sửa cuối:
Upvote 0
Xin giới thiệu đến các bạn quan tâm tài liệu Thuật toán và Giải thuật của thầy Lê Minh Hoàng. Bạn nào yêu thích khám phá thì thử thực hiện giải thuật trên VBA xem, nhớ cho ví dụ minh họa để mọi người cùng học với nhé :).

Link tải: http://cntt.epu.edu.vn/images/book_LeMinhHoang.pdf

Chúc vui vẻ,

Thanh Phong
Coi mới được 1 phần thôi mà thấy choáng! Quả thật, kiến thức là vô hạn!
 
Upvote 0
(/ạn sự khởi đầu nan!

Vậy nên mình xin đưa ra ví dụ đầu tiên; Xin các bạn có trên trăm bài về VBA chỉ gợi í lúc cần & khoan làm trước!

Đề bài viết rõ như sau:
LẬP BÁO CÁO THEO TỪNG ĐƠN VỊ

Gỉả dụ chúng ta có 1 CSDL cấp fát hàng cho các đơn vị (gồm nhóm, đội hay tổ) độc lập gồm các trường như sau:


Ngay|MaHang|TenHang|SoLuong|MaDV
1/5/13|ABC01|Bộ chuyển đổi|49|BM
…|…|…||
1/19/13|CCA09|Điều khiển|103|CS
…|…|…||
…|…|…||
2/15/13|ADC01|Máy biến tầng|90|BH
…|…|…||
3/9/13|CBA09|Máy fát điện|17|KS1
…|…|…||

Ở cột cuối ghi mã đơn vị trong công ti nhận hàng; Tên của các đơn vị trực thuộc này được liệt kê theo bảng sau:


TenDV|MaDV
Đội Bình minh|BM
Nhóm Biến hóa|BH
Đội Kiểm soát|KS1
Tổ Sửa chữa|SC
…..|…

Nhiệm vụ đề ra là:

Tạo 1 trang báo cáo có tiêu đề ở dòng 4 như sau:
BÁO CÁO QUYẾT TOÁN NHẬP-XUẤT-TỒN CỦA TỔ SỬA CHỮA.

Nội dung báo cáo giống như bảng dưới đây:

TT|MaVT|TenVT, hàng hóa|Tồn ĐK|SL Nhập| SL Xuất |Tồn CK|Ghi chú

Để có báo cáo này, các bạn cần viết 1 macro sự kiện gắn kết với 1 ô validation để chọn tên các đơn vị thành viên. Sau khi chọn lựa thành viên nào đó thì số liệu của đơn vị đó hiện lên bảng báo cáo!

Chúc vui!
 

File đính kèm

Upvote 0
Mình thấy có 2 tên nhấn nút CO & số lần tải file cũng đã có, vậy xin đề nghị

HTN làm dàn bài theo trình độ của Thảo & dựa vô đó Thảo sẽ viết các lệnh của macro xem nào.

Rất mong 2 bạn chiếu cố & chúc vui!
 
Lần chỉnh sửa cuối:
Upvote 0
Thuật giải (thuật giải quyết) là một quá trình giải quyết vấn đề theo các trình tự có nguyên tắc hay quy ước nào đó.
Vấn đề được giải quyết đôi khi chẳng thấy có tý toán cho nên gọi thuật giải có vẻ hay hơn.

Dựa vào định nghĩa này thì có thể thấy thuật giải không có gì là quá mới mẻ bởi vì con người từ khi biết tư duy họ đã phải nghĩ ra những trình tự và nguyên tắc logic để giải quyết một số vấn đề trong đời sống của họ. Và cho đến tận một ngày cách đây khoảng 4 thế kỷ, người ta mới nghĩ đến một thuật ngữ bao quát chung đó là từ thuật giải - Algorithm.
(Bạn có thể tìm định nghĩa từ Algorithm trong từ điển).

Có vài thuật giải khá nổi tiếng từ xưa chẳng hạn tìm các số nguyên tố nhỏ hơn 100 theo sàng Eratosthenes. Eratosthenes - người đưa ra giải thuật này sinh năm 276 TCN (cách đây khoảng 23 thế kỷ cơ đấy).

Hay là thuật giải hoán vị mà theo tôi có lẽ có cách đây cả hàng vạn năm.
Thuật giải hoán vị có thể hiểu đơn giản qua một ví như sau: Có một cái thùng A đựng chất AA, và một cái thùng B đựng chất BB. Làm thế nào để kết quả thu được là thùng A đựng chất BB, và thùng B đựng chất AA.

Qủa không khó để giải quyết vấn đề này phải không các anh/chị? Và áp dụng nguyên lý khái quát của thuật giải hoán vị trong việc hoán đổi giá trị của 2 biến trong lập trình ta có như sau:
Mã:
C = A
A = B
B = C
Thuật giải trước thời có máy tính điện tử chắc là đơn giản và thực hiện hữu hạn trong khả năng ghi chép, tính toán, thao tác bằng tay của con người. Nhưng với sự ra đời của máy tính điện tử thì người ta có thể thực hiện được những thuật giải phức tạp ví như dùng vòng lặp vài tỷ lần chẳng hạn.

Trong máy tính điện tử, thuật giải được mô tả bằng các đoạn code. Nhưng nếu suy diễn ngược lại mọi đoạn code là diễn giải của thuật toán nào đó thì chắc... nhầm. Ví dụ người ta xây dựng sẵn một cái hàm sin(x) tìm sin của x. Hỏi một anh viết thuật toán tìm sin của x thì anh viết: y = sin(x)...

Tôi thấy có khá nhiều người lạm dụng từ thuật giải/thuật toán cho bất cứ đoạn code nào họ viết ra chẳng khác nào cái cách một anh mua động cơ, khung, linh kiện... về ráp thành cái xe rồi kêu rằng mình chế tạo ra... cái xe đó.

Thuật giải được mô tả trực quan bằng các lưu đồ diễn giải. Bởi thế nhiều bạn cứ tưởng mình không biết thuật giải nhưng trong các bài luận thì lại chứng tỏ mình khá rành... thuật giải thông qua các lưu đồ diễn tả cách giải quyết nghiệp vụ.

Với người lập trình, thuật giải giống như một bản phác thảo. Nó giúp người lập trình hình dung ra được những tiến trình mà phần mềm sẽ giải quyết theo cách thuật giải mô tả. Công đoạn viết code thực ra chỉ là quá trình chi tiết và cụ thể hóa bản phác thảo đó.

Trên đây phần lớn là cách suy nghĩ của riêng bản thân tôi nên chắc cũng có nhiều điều còn nhầm lẫn mong anh chị góp ý.
 
Lần chỉnh sửa cuối:
Upvote 0
trong giáo trình cấu trúc dữ liệu có phát biểu:
giải thuật + cấu trúc dữ liệu = chương trình
(tui suy ra) giải thuật = chương trình - cấu trúc dữ liệu
thật sự là quá rộng để bàn về giải thuật/thuật giải nói chung, chỉ nên trao đổi các vấn đề cụ thể. qua đó mọi người có thể tham khảo, ứng dụng.
 
Upvote 0
HTN làm dàn bài theo trình độ của Thảo & dựa vô đó Thảo sẽ viết các lệnh của macro xem nào.

Rất mong 2 bạn chiếu cố & chúc vui!
Xin lỗi bác ChanhTQ@, cuối năm bận rộn việc "nước" việc "nhà", nên chỉ nghía nghía qua, nhưng qua tết thì em nghĩ có nhiều thời gian hơn dành cho diễn đàn.

Trân trọng.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom