1. Vòng lặp FOR.
Cú pháp: FOR [biến chạygiá trị bắt đầugiá trị cuốibước tăng] [lệnh…]
Ví dụ : FOR [i 1 10 1] [Show :i] ; viết ra 1 2 3 4 5 6 7 8 9 10
FOR [i 1 10 2] [Show :i] ; viết ra 1 3 5 7 9
Với n đưa từ ngoài vào hãy tính tổng 1+2+3+…+n.
To TinhTong :n
CS ;Xóa sân chơi
RT 90 ; Xoay rùa 90 độ để viết chữ ra sân chơi theo chiều ngang
PU ; nhấc viết của rùa lên
BK 100 ; lùi 100 bước, trong bài này là lùi về bên trái do ta đã xoay đầu rùa mục đích để viết chữ ra cho nó cân đối ko bị lệch 1 bên, có thể dùng Setx cũng được.
Make “tong 0 ;ban đầu cho tổng là 0
FOR [i 1 :n 1] [Make “tong :tong+ :i] ; mỗi lần chạy lại cộng thêm vào giá trị của tổng
Label(List “Tong “cong “1+2+…+ :n “= :tong) ;Lệnh List trong trường nợp này giúp ta nối các chữ lại với nhau
Sety -50 ; Xuống dòng
Label [Http://www.emyeutinhoc.com] ;cái dòng này chỉ để chèn quảng cáo vào ^^
End
2. Vòng lặp Repeat.
Ở ví dụ trên chúng ta đã gặp lệnh repeat khi vẽ đa giác, ngay sau đây chúng ta sẽ làm 1 ví dụ khác để hiểu hơn về nó. Giả sử với yêu cầu vẽ một hình vuông có độ dài 200 bước ta lần lượt thực hiện các lệnh.
FD 200
RT 90
FD 200
RT 90
FD 200
RT 90
FD 200
RT 90
Chúng ta dễ ràng nhận ra rằng cặp lệnh FD 200 RT 90 lặp đi lặp lại 4 lần vì vậy ta có thể dùng REPEAT rút ngắn lại như sau
REPEAT 4 [FD 200 RT 90]
Cú pháp của lệnh lặp Repeat
Repeat số.lần.lặp [lệnh…] dễ dàng nhận thấy ở một khía cạnh nào đó thì For và Repeat là giống nhau. Để biết hiện đang ở vòng lặp thứ bao nhiêu các bạn sử dụng REPCOUNT. Ví dụ in từ 1 cho tới 10 Repeat 10 [PRINT (LIST “So “thu “: REPCOUNT)]
Một số ví dụ khác :
To Ngoisao :n
Repeat 5 [fd :n rt 144]
End
Vẽ ngôi sao 5 cánh với độ dài n ví dụ Ngoisao 200
Ví dụ dưới đây sẽ vẽ một cái thang với độ dài các ô là n và có k bậc thang
To Thang :k :n
Repeat :k [Repeat 5[fd :n lt 90] rt 90]
Home
Bk :n
Repeat 3 [fd :n lt 90]
End
Thang 8 30 ( vẽ thang 8 ô và độ dài là 30)
3. Vòng lặp While.
Để hiểu về cách sử dụng While ta cùng giải một bài toán : Tính tổng S=1+2+…+n S nhỏ hơn hoặc bằng 65000. Ta không thể biết n bằng bao nhiêu để thỏa mãn yêu cầu của đề, do đó việc xác định số lần lặp là không khả thi vậy nên ta không thể dùng For hay Repeat. Hãy xem While xử lý bài toán như thế nào.
Cú pháp : While điều.kiện [Lệnh…] Trong khi điều kiện còn đúng thì thực hiện lệnh.
Bài toán có thể mở rộng ra thay vì 65000 ta có thể mở rộng ra bằng cách sử dụng biến để nhận giá trị tổng tùy ý. Thủ tục được viết như sau :
To TimSo :K
CS ; Xoa san choi
RT 90 ; Xoay rua ve ben phai
PU ; Nhac viet len
SetX -100 ; Cho rua lùi ve ben trai
HT ;An rua
SetPC [0 0 255] ; Doi mau pen
Make “S 0 ; Ban tong cho tong S =0
Make “i 0 ; Dung de chay tu 1 cho toi khi tim ra so n
While [:S <= :K] [Make “i :i+1 Make “S :S+:i] ;Trong khi tong con <= K
; Cong don S va tang i len 1
;Khi S>K thi vong lap se tu thoat ra
Label (List “Can “phai “cong “toi :i-1 “so) ; Xuat thong bao ra san choi
SetY -50 ; Xuong dong
Label [http://www.emyeutinhoc.com ] ; Quang cao 1 ty (@@)
End
4. Vòng lặp Until.
Vòng lặp Untill cũng tương tự While tuy nhiên nó chỉ thoát khi điều kiện là đúng, nói một cách tóm tắt
While đúng thì làm, sai thì thoát (Làm tới khi sai)
Until đúng thì thoát, sai thì làm (Làm tới khi đúng )
To TimSo :K
CS ; Xoa san choi
RT 90 ; Xoay rua ve ben phai
PU ; Nhac viet len
SetX -100 ; Cho rua lùi ve ben trai
HT ;An rua
SetPC [255 43 45] ; Doi mau pen
Make “S 0 ; Ban tong cho tong S =0
Make “i 0 ; Dung de chay tu 1 cho toi khi tim ra so n
Until [:S > :K] [Make “i :i+1 Make “S :S+:i] ;Trong khi tong chua > K
; Cong don S va tang i len 1
;Khi S>K thi vong lap se tu thoat ra
Label (List “Can “phai “cong “toi :i-1 “so) ; Xuat thong bao ra san choi
SetY -50 ; Xuong dong
Label [http://www.emyeutinhoc.com ] ; Quang cao 1 ty (@@)
END
Câu lệnh While [:S <= :K] trong MSWLogo nó không hiểu đâu thầy. nó chỉ hiểu trong FMSLogo thôi ạ.
^^ mình soạn trên FMSLogo nên không để ý, lúc trước ở bên kia thì nhớ, vậy code chỗ đó cho MSWlogo chắc phải sửa lại là While [OR(:S<:K)(:S=:K)], không hiểu sao nó lại không cho so sánh <= nhỉ @@
repeat 123 [fd 234 rt 949] mọi người thử đi nhé
hay qúa ta ai nghĩ ra vây
lệnh make là để lạm gì thầy ?
Bạn xem bài viết này Thủ tục và biến
cảm ơn thầy!
thử cái này đi : repeat 36 [ repeat 4 [ fd 100 rt 90 ] rt 10]