Trang Chủ   Vn+ TiVi   Fanpage Twitter  Fanpage FaceBook
Loading
                                         

Bản Tin Câu Lạc Bộ Pa Tin Im-Pod                                                                          
Diễn đàn Vn+
Tiêu Điểm

Tình Yêu - Giới Tính

1001 Bí Ẩn

Tổng hợp phần mềm

Ebook

Thủ Thuật IT

Thủ Thuật Blog

Video Clip

Lạ & Fun


You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

1Cấu Trúc Lặp trong autoit Empty Cấu Trúc Lặp trong autoit Mon Aug 22, 2011 4:53 pm

Trunks-Kun

Trunks-Kun
Administrator
Administrator
1. While... WEnd...

- Cấu trúc While... WEnd... này 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.

Code:
    $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ẽ xoay vòng cho đến khi nào biến $var khác 0, tức là khi $var=0 nó sẽ thực thi các câu lệnh bên trong nó mãi, việc kiểm tra này tương tự như việc kiểm tra của If, khi $var có giá trị là chuỗi vẫn tương đương với $var=0. Còn cấu trúc Switch mình đã giới thiệu ở bài trước rùi nên bỏ qua nhé


2. Do... Until...

- AutoIT có khả năng tự tạo các biến khi chúng được sử dụng lần đầu tiên. Vậy nếu ta cho câu lệnh $var = InputBox("Nhập Số",... trong vòng lặp While thực thi trước rồi mới kiểm tra nó sau thì việc khai báo bằng biến $var ở ngoài vòng lặp có thể được rút gọn và Do... Until... có thể làm được việc đó.

Code:
    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

- Các bạn mới làm quen với lập trình cần chú ý cách mà 2 cấu trúc này kiểm tra điều kiện, đối với While thì $var bằng 0 còn với Do thì $var phải khác 0. Nếu bạn vẫn chưa hiểu, hãy đọc 2 câu mô tả dưới đây vài lần sẽ thấy được sự khác biệt của chúng, lúc đó các bạn sẽ hiểu sự khác nhau giữa 2 cấu trúc lặp này:
While... WEnd...: Khi biến $var còn bằng 0 thì thực hiện các câu lệnh trong vòng lặp.
Do... Until...: Thực hiện các câu lệnh trong vòng lặp cho đến khi biến $var khác 0.

3. Mở Rộng While... WEnd... và Do... Until...

- Các vòng lặp được sử dụng rất nhiều trong thực tế, một trong số đó là việc 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, ví dụ như trong trường hợp của mật khẩu. Đô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... WEnd... và Do... 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 vòng lặp thoát.

Code:
    $var=0 ;Khởi tạo biến $var để vòng lặp được thực thi
    $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($count,"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ả này.

Code:
    Do
        $var=InputBox("Nhập","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 Case được trang bị từ khóa Exit của Cấu Trúc Switch. Tiếp tục nói về 2 ví dụ mở rộng này, không biết các bạn có nhận ra sự khác biệt trong cách thoát của chúng không, nếu chưa thì bạn hay khoan đọc tiếp và quay lại so sánh xem.
- Nếu không thể phát hiện ra cũng không sao "cần cù sẽ bù thông mình" mà :rb99: Điểm khác biệt mà mình muốn đề cập đến chính là với Do muốn thoát người dùng nhập đúng số liệu mà nó muốn và chỉ đúng lúc đó mà thôi, không thì nó lặp mãi. Còn ví dụ của While cũng thoát, nhưng có thêm điều kiện là biến đếm bằng 7, tức là việc thoát được lập trình viên qui định trước. Và nếu đã biết trước khi nào thoát vòng lặp thì tụi mình nên cùng một cậu trúc khác tốt hơn.


4. For... To... Step...

Code:
    ;~ $var=0 ;Không cần Khởi tạo biến $var
    ;~ $count=0 ;Không cần tạo biến đếm trước
   
    For $count=1 To 7 Step 1
    ;~  $count+=1 ;Biến đếm sẽ tự tăng không cần cộng
        $var=InputBox($count,"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")
        Else
            ExitLoop ;Từ khóa thoát vòng lặp
        EndIf
    ;~  If $count=7 Then Exit ;Không cần kiểm tra biến đếm
    Next
    ;...

- Có thể lúc mới nhìn thì Cấu Trúc này nó rườm rà hơn ở While và Do, nhưng thực tế nó giúp tụi mình đơn giản hóa công việc vì không phải tăng biến đếm, không cần đặt điều kiện kiểm tra và cũng không cần khai báo biến gì cả.
- Và khả năng hoạt động của cấu trúc For này không chỉ có vậy, ngoài việc cho biến đếm tăng dần bằng từ khóa Step, tụi mình còn có thể cho nó giảm dần đến khi gặp một giới hạn được định trước nó sẽ thoát vòng lặp. Ví dụ mở rộng ở dưới đây chỉ là để nói thêm về nó, còn vận dụng thế nào là tùy vào tài năng của mọi người thui.

Code:
    $end=9 ;Giá trị giới hạn
    $step=2 ;Số đơn vị sẽ tăng
   
    ;~ Tăng dần
    For $start=1 To $end Step $step
        MsgBox(0,"Step: "&$step,"Start: "&$start&" to: "&$end)
    Next
   
    ;~ Giảm dần
    For $start=43 To $end Step $step-9
        MsgBox(0,"Step: "&$step-9,"Start: "&$start&" to: "&$end)
    Next

nguồn autoit.72ls.ne

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết

 

Legend :  [ Vn-plus Founder ] [ Administrator ] [ Super Moderator ] [ Moderator ] [ Member ] [ VIP member ] [ banned ]



Free Auto Backlink Exchange ServiceFree Backlink Exchange For SeoVietnam BacklinksTravel BacklinksFree BacklinksText Backlink ExchangesText Back Link ExchangeFlorists LinksOverShopping Link ExchangeFree Automatic LinkWeb Link Exchange - Linkcsere

    Diễn Đàn Vn-Plus.Org | Thống kê | Liên hệ | Báo cáo lạm dụng  | Bạn muốn quảng cáo | Lên Đầu Trang

    Powered by: PHPBB2. Copyright © 2011  Diễn Đàn Mở VN+
    Contact: Vn-plus Founder . Yahoo: Nobita_xuka_ccy. Địa chỉ: Từ Tây - Yên Phú - Yên Mỹ - Hưng Yên
    BQT không chịu trách nhiệm bất cứ nội dung nào của thành viên đăng tải

Liên Kết Vớivn+

Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất