Dạ vô tình hôm nay có người theo dõi và thấy topic này, thật sự là tui không nhớ về các bài này viết khi nào. tui có thể giải thích đơn giản như vậy
@vodoi2x. Vòng lặp For theo như kiến thức tôi biết và tôi luôn chắc chắn nó là vòng lặp đặt biệt. của Do While - Loop
2 vòng lặp này điều kiểm tra điều kiện trước khi thực hiện lệnh, nhưng For thì số vòng lặp sẽ biết trước còn Do While thì không? ví dụ cụ thể tìm số chữ số trong 1 dãy số cho trước, For sẽ không biết bao nhiêu chữ số còn do while thì cứ chia cho 10 cho tới khi nào gặp số 0.
còn tại sao tui nó nó là trường hợp đặt biệt, vì tất cả các bài toán mà for làm được thì Do While sẽ làm được, còn ngược lại thì chưa chắc.
còn Do Loop While cũng là vòng lặp mà không biết trước số lần lặp, nhưng Do Loop While sẽ làm trước và kiểm tra sau, chính vì vậy nó luôn luôn làm ít nhất 1 lệnh trước khi kết thúc. Chỉ có vậy thôi
Tôi xin phép chỉnh bài của bạn, tôi tin chắc là điều này sẽ cố lợi cho dân trong nghề giáo như bạn nếu bạn chịu khó đọc cho kỹ, list đây là tóm lượt, chi tiết sẽ cho biết sau:
1. For-Next không phải là dạng tắt của Do While-Loop
2. While-Wend là dạng cũ của vòng lặp While. Có nhiều bất tiện mafd MS cải tiến về sau bằng Do While
Giải thích:
1. For-Next là căn bản ngôn ngữ lập trình. Được IBM hoàn thiện theo tiêu chuẩn FORTRAN IV (lưu ý phiên bản IV, các phiên bản trước chưa là tiêu chuẩn).
Do-Loop cũng là căn bản của lập trình. Chính thức là để gói một đoạn code cần chạy lặp lại nhiều lần.
Vì là code vòng lại cho nên điểm quan trọng nhất của chúng là phải có cách để dứt, không lặp nữa.
Vòng lặp Do dùng cách dứt tự do, tức là đặt điều kiện gì đó để dứt (ở mệnh đề While hoặc Until).
Vòng lặp For cải tiến tốc độ bằng cách xác định điều kiện với một biến điều khiển, vòng lặp sẽ dứt khi biến điều khiển này vượt quá giới hạn mà For đặt trước. (giới hạn tức là trị của biểu thức nằm ngay bên phải từ khóa TO)
1.2. Các điểm khác biệt:
While test điều kiện, điều kiện này có thể là "biến điều khiển vượt giới hạn" (như For), hay bất cứ biểu thức nào có thể chio về kết quả True/False
- Biến điều khiển của For có thể được thay đổi bên trong vòng lặp, nhưng giới hạn chỉ tính 1 lần, thay đổi trong vòng lặp không ảnh hưởng đến giới hạn vòng lặp
GH = 5
i = 1
Do While i <= GH
...
GH = 10
i = i+1
Loop ' vòng lặp sẽ chạy 10 lần
GH = 5
For i = 1 To GH
...
GH = 10
Next i ' vòng lăp chỉ chạy 5 lần, khi i = 6 (lớn hơn trị ban đầu của GH) thì nó dứt.
Điều này là điều hết sức quan trọng mà nhiều người không biết, vì chưa hề trải qua cái vụ "biểu thức giới hạn thay đổi".
Vì vậy, ta có thể kết luận rằng "trong trường hợp thông thường, hai loại vòng lặp này có thể thay thế lẫn nhau. For nhanh hơn Do nhưng nếu điều kiện thoát vòng lặp phức tạp thì Do-Loop uyển chuyển hơn For-Next"
2. While-Wend là dạng cũ. Không nên dùng nữa vì nó không hỗ trợ việc thoát vòng lặp giữa chừng qua lệnh Exit (trừ Exit Function, Exit Sub)
2.1. Do...Loop Until/While (biểu thức) bảo đảm vòng lặp chạy ít nhất 1 lần, Do While (biểu thức)...Loop thì không bảo đảm.
2.2. For Each là dạng đặc biết của For dùng để duyệt qua các phần tử của một object có thực hiện (implement) giao diện "tuần tự" (iteratable). Code này rất hiệu quả, tốt hơn duyệt bằng chỉ số.