Thứ Bảy, 13 tháng 2, 2010

[AutoIT] Cấu trúc lặp

While…WEnd

Cấu trúc lặp này sẽ hoạt động dựa trên việc kiểm tra biến $var, nên ta cần tạo biến này trước khi cấu trúc được thực thi. Và mình sẽ bỏ qua việc kiểm tra xem Người Dùng có bấm Cancel hay không để cho nó đơn giản, như thế việc bấm Cancel tương đương với việc nhập Chuỗi hoặc 0.

Dim $var=0 ;Khởi tạo biến $var để vòng lặp được thực thi

While $var=0 ;Kiểm tra giá trị của $var
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
;~__Exit ;Bỏ Từ khóa này để chương trình không thoát
WEnd

Switch $var ;Kiểm tra biến $var
___Case -9999999 To -1
______MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
___Case 1 To 9
______MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
___Case 10 To 99
______MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
___Case 100 To 999
______MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
___Case 1000 To 9999
______MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
___Case 10000 To 99999
______MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
___Case 100000 To 999999
______MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
___Case 1000000 To 9999999
______MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
EndSwitch


Cấu trúc lặp sẽ hoạt động cho đến khi nào biến $var khác 0 tức là khi $var=0 nó sẽ lặp mãi, việc kiểm tra này tương tự như việc kiểm tra của If ở bài trước, khi $var có giá trị là chuỗi vẫn tương đương với $var=0.

Do…Until:

Do
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
Until $var<>0 ;Thay đổi Phương Thức kiểm tra

Switch $var ;Kiểm tra biến $var
___Case -9999999 To -1
______MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
___Case 1 To 9
______MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
___Case 10 To 99
______MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
___Case 100 To 999
______MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
___Case 1000 To 9999
______MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
___Case 10000 To 99999
______MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
___Case 100000 To 999999
______MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
___Case 1000000 To 9999999
______MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
EndSwitch

Không như While…WEnd, Do…Until sẽ thực hiện các câu lệnh trong vòng lặp của mình trước rồi mới kiểm tra điều kiện lặp, bằng chứng là tụi mình không cần khởi tạo biến $var ở ngoài mà vòng lặp vẫn kiểm tra được.
Các bạn mới làm quen với lập trình cần chú ý cách mà 2 vòng lặp này kiểm tra điều kiện, đối với While…WEnd thì $var bằng 0 còn với Do…Until thì $var phải khác 0

Mở Rộng While…WEndDo…Until

Các vòng lặp thường được sử dụng rất nhiều trong thực tế, một trong số đó là các vòng lặp kiểm tra mật khẩu… điều mình muốn nói ở đây là không phải vòng lặp nào cũng chạy mãi nếu Người Dùng cứ nhập sai. Đôi khi Người Dùng chủ được phép nhập 1 số lần nhất định nào đó rồi thôi, lúc ấy vòng lặp sẽ ngưng và tự thoát ra dù điều kiện vẫn chưa thõa.

While…WEndDo…Until hoàn toàn có thể đáp ứng được vấn đề mà mình đặt ra ở trên bằng cách dùng cấu trúc If để kiểm tra 1 biến đếm, rồi ép cho điều kiện thoát vòng lặp được thõa mãn.

Dim $var=0 ;Khởi tạo biến $var để vòng lặp được thực thi
Dim $count=0 ;Khởi tạo biến đếm

While $var=0 ;Kiểm tra giá trị của $var
___$count+=1 ;Tăng biến đếm lên 1 đơn vị
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)
___If $count=7 Then Exit ;Khi $count=7 thoát chương trình luôn
WEnd

Nếu hiểu theo một nghĩa khác thì việc kiểm tra biến đếm bằng cấu trúc If thật chất là một điều kiện thoát thứ 2 của vòng lặp, như thế với sự kết hợp các cấu trúc Rẽ Nhánh (không riêng gì If) ta sẽ có nhiều đều kiện thể thoát vòng lặp. Ví dụ của tụi mình sẽ được thay đổi 1 chút để phù hợp với mô tả…

Do
___$var=InputBox(“Nhập Số”,”Hãy nhập một số gì đó, trừ số 0 và Chuỗi”,7,” M7″)
___If $var=0 Then MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập Chuỗi hoặc số 0″)

___Switch $var ;Kiểm tra biến $var
______Case -9999999 To -1
_________MsgBox(0,”Khoanh Vùng”,”Bạn đã nhập số Âm”)
_________Exit
______Case 1 To 9
_________MsgBox(0,”Khoanh Vùng”,”Số có 1 chữ số”)
_________Exit
______Case 10 To 99
_________MsgBox(0,”Khoanh Vùng”,”Số có 2 chữ số”)
_________Exit
______Case 100 To 999
_________MsgBox(0,”Khoanh Vùng”,”Số có 3 chữ số”)
_________Exit
______Case 1000 To 9999
_________MsgBox(0,”Khoanh Vùng”,”Số có 4 chữ số”)
_________Exit
______Case 10000 To 99999
_________MsgBox(0,”Khoanh Vùng”,”Số có 5 chữ số”)
_________Exit
______Case 100000 To 999999
_________MsgBox(0,”Khoanh Vùng”,”Số có 6 chữ số”)
_________Exit
______Case 1000000 To 9999999
_________MsgBox(0,”Khoanh Vùng”,”Số có 7 chữ số”)
_________Exit
___EndSwitch
Until False ;Với False cấu trúc sẽ lặp mãi

Trong ví dụ này điều kiện thoát của Do…Until chỉ là False, như thế vòng lặp sẽ hoạt động mãi và điều kiện để thoát là những trường hợp của Cấu Trúc Switch


Không có nhận xét nào:

Đăng nhận xét