Trong nhiều trường hợp, số lần lần lặp lại không biết trước và số vòng lặp được xác định bởi một điều kiện nào đó... Cấu trúc lặp với số lần lặp chưa biết trước (lặp có điều kiện) 2.1.[r]
Trang 1I KHÁI NI M V BI N Ệ Ề Ế
Bi n là m t đ i l ế ộ ạ ượ ng có th thay đ i giá tr c a nó ể ổ ị ủ
T i sao ph i dùng bi n? Có th hi u m t cách đ n gi n nh t: Dùng bi n đ đ m b o tính ạ ả ế ể ể ộ ơ ả ấ ế ể ả ả tính t ng quát c a m t d ng bài toán Sau này khi s d ng thành th o ta sẽ th y còn nhi u ổ ủ ộ ạ ử ụ ạ ấ ề
trường h p khác cũng ph i dùng đ n bi nợ ả ế ế
Ví d : Mai có 20 cái k o, Mai cho Minh 5 cái, sau đó Mai l i ăn h t 3 cái H i Mai còn l i bao ụ ẹ ạ ế ỏ ạ nhiêu cái k o?ẹ
Trong bài toán này, ta đã bi t trế ước (ch c ch n) là: S k o Mai có 20 cái, s k o Mai cho ắ ắ ố ẹ ố ẹ Minh là 5, s k o Mai ăn là 3.ố ẹ
d ng t ng quát, bài toán trên đ c phát bi u nh sau: B n Mai có a cái k o, Mai cho Minh
b cái, sau đó Mai l i ăn h t c cái k o H i Mai còn l i bao nhiêu cái k o?ạ ế ẹ ỏ ạ ẹ
Ta bi t r ng các s a,b,c ch a bi t ngay khi ta vi t th t c, và có th thay chúng b ng b t kỳ ế ằ ố ư ế ế ủ ụ ể ằ ấ
s nào Trố ường h p này ta g i các s a, b,c là các bi n.ợ ọ ố ế
Chú ý: V i cách gi i toán b ng phớ ả ằ ương pháp dùng ký hi u thay th thì các ký hi u thay th ệ ế ệ ế cũng đượ ọc g i là các bi n.ế
II CÁCH KHAI BÁO BI N TRONG TH T C Ế Ủ Ụ
1 Đ i v i các bi n nh n giá tr tr c ti p t bên ngoài ố ớ ế ậ ị ự ế ừ
- Trong bài toán tính s k o trên, các bi n a, b và c sẽ đố ẹ ở ế ược đ a vào t bên ngoài đ ư ừ ể
chương trình th c hi n tính toán, khi đó ta sẽ ự ệ khai báo các bi n này cùng dòng v i dòng ế ớ ghi tên th t c b ng cách ghép d u hai ch m( :) ngay tr ủ ụ ằ ấ ấ ướ c tên bi n ( có th s d ng ế ể ử ụ nhi u bi n trong 1 th t c) ề ế ủ ụ
Khai báo:
TO KEO :a :b :c ( đây các bi n a, b, c đở ế ược khai báo cùng dòng ghi tên th t c KEO ủ ụ
b ng cách ghép d u (:) ngay trằ ấ ước tên bi n)ế
Ví d : TO KEO :a :b :cụ
Lúc này các bi n a,b,c sẽ tr thành các giá tr đ th c hi n các bi u th c có trong th t c:ế ở ị ể ự ệ ể ứ ủ ụ
TO KEO :a :b :c
Cs
RT 90 LABEL [ S k o còn l i là:]ố ẹ ạ PU FD 250 PD LABEL :a - :b - :c
Ho c: ặ
RT 90 LABEL(list "so "keo "con "lai "la: :a-:b-:c)
Trang 2Khi th c hi n, ta sẽ nh p giá tr c a a,b,c ngay cùng dòng v i l nh g i th t c t i c a ự ệ ậ ị ủ ớ ệ ọ ủ ụ ạ ử
s l nh ổ ệ
ví d : TO KEO 20 5 3 Khi đó các bi n a, b,c sẽ nh n l n lụ ế ậ ầ ượt các giá tr là 20, 5 ,3 và th c hi nị ự ệ tính k t qu ế ả
Bài t p1: Vẽ hình vuông bi t chi u dài m i c nh là a đ n v ậ ế ề ỗ ạ ơ ị
To hinhvuong :a
Cs
Repeat 4 [ fd :a rt 90]
Ht
end
Khi th c hi n, ta sẽ nh p giá tr c a a ngay cùng dòng v i l nh g i th t c t i c a s l nh, ví ự ệ ậ ị ủ ớ ệ ọ ủ ụ ạ ử ổ ệ
d : hinhvuong100; hinhvuong 200,… Khi đó sẽ vẽ các hình vuông có đ dài c nh l n l ụ ộ ạ ầ ượ t là 100,200,
Bài t p 2: Vi t th t c vẽ và tính di n tích hình ch nh t bi t chi u dài là a đ n v , ậ ế ủ ụ ệ ữ ậ ế ề ơ ị chi u r ng b đ n v ề ộ ơ ị
To HCN :a :b
Cs
Repeat 2 [ fd :b rt 90 fd :a rt 90 ]
Pu bk 50 rt 90 label [ dien tich hinh chu nhat la:]
Pu fd 250 label :a *:b
Ht
end
Th c hành: ch y l i th t c trên v i nhi u giá tr a,b,c khác nhau ự ạ ạ ủ ụ ớ ề ị
2 Đ i v i các bi n nh n giá tr trong khi ch y th t c ố ớ ế ậ ị ạ ủ ụ
Trường h p các bi n nh n giá tr t m t bi u th c có trong th t c, ta sẽ khai báo theo cú ợ ế ậ ị ừ ộ ể ứ ủ ụ pháp sau:
MAKE “< Tên bi n> ế :< Bi u th c> ể ứ
ví dụ Make “n 100 có nghĩa là n bây giờ =100, muốn hiện giá trị của n ra ta dùng
Show :n
Ví d : ụ
TO KEO :b
Trang 3MAKE "a :b+3 //ở đây bi n a = b+3ế
Show :a
END
C n phân bi t: N u bi n nh n giá tr t bên ngoài thì dùng d u hai ch m ngay tr ầ ệ ế ế ậ ị ừ ấ ấ ướ c tên bi n, thì đ i v i bi n nh n giá tr t m t bi u th c trong th t c sẽ dùng d u nháy ế ố ớ ế ậ ị ừ ộ ể ứ ủ ụ ấ kép tr ướ c tên bi n ế
Lo i bi n này th ạ ế ườ ng s d ng khi gi i toán b ng PP dùng ký hi u thay th ử ụ ả ằ ệ ế
Ví d 1: ụ
to tinhtoan :a :b
make "tong :a+:b
make "hieu :a-:b
make "tich :a*:b
make "thuong :a/:b
rt 90 label (list "tong "la: :a+:b ",hieu "la: :a-:b ",tich
"la: :a*:b ",thuong "la: :a/:b )
end
Ví d 2: ụ
M t m nh đ t hình ch nh t có chi u lài là a đ n v Bi t r ng chi u r ng b ng 2/3 chi u ộ ả ấ ữ ậ ề ơ ị ế ằ ề ộ ằ ề dài
Hãy vi t th t c vẽ hình và tính di n tích m nh đ t hình ch nh t đó?ế ủ ụ ệ ả ấ ữ ậ
Th t c m u:ủ ụ ẫ
to hcn :a
CS
make "b :a*2/3
repeat 2 [ fd :b rt 90 fd :a rt 90]
pu bk 50 rt 90 pd label [ Dien tich hình cn la:] pu fd 200 label :a* :b
Ho c:ặ
pu bk 50 rt 90 pd
label (list "Dien "tich "hinh "cn "la: :a*:b )
end
Ví d th t c tính di n tích trên, chi u dài là a = 9 thì chi u r ng b = a*2/3= 9*2/3= 6.ụ ở ủ ụ ệ ề ề ộ
Trang 4L nh ệ label :a* :b là hi n th và tính ra giá tr di n tích = a *b = 9 * 6= 54ể ị ị ệ
Ví dụ 3 :
M t khu đ t hình ch nh t có chi u dài là a, chi u r ng b ng ¾ chi u dài Ngộ ấ ữ ậ ề ề ộ ằ ề ười ta đào m tộ cái gi ng hình tròn có tâm n m t i giao đi m hai đế ằ ạ ể ường chéo c a khu đ t, bán kính b ng ¾ ủ ấ ằ chi u r ng c a khu đ t Hãy vi t th t c vẽ l i khu đ t trên và tính di n tích ph n đ t còn ề ộ ủ ấ ế ủ ụ ạ ấ ệ ầ ấ
l i sau khi đã đào gi ng.ạ ế
Th t c m u:ủ ụ ẫ
To khudat :a // Khai báo bi n a là chi u dài hình cn ế ề
Cs st pd
Make "b :a*3/4 // chi u r ngề ộ là b b ng ¾ chi u dàiằ ề a là b =a *3/4
Make "r :b/4 // bán kính r k b ng ¾ chi u r ng ằ ề ộ là: r = b *3/4
Make "Scn :a* :b // Di n tích c a hình ch nh t là: Scn = a*bệ ủ ữ ậ
Make "Sht :r * :r * 3.14 // Di n tích hình tròn cái gi ng là: Sht = r*r*3.14ệ ế
Make "Scl :Scn- :Sht // Di n tích còn l i = di n tích hcn - di n tích hình trònệ ạ ệ ệ
Repeat 2 [ fd :b rt 90 fd :a rt 90] // Vẽ hình ch nh t chi u dài a, chi u r ng bữ ậ ề ề ộ
Pu setxy :a/2 :b/2 // Nh c bút và Đ a rùa v tâm đấ ư ề ường tròn
pd circle :r // h bút vẽ đạ ường tròn bán kính r, rùa tâm đở ường tròn
Pu home bk 30 rt 90 Label [ Dien tich khu dat con lai la:]
// Nh c bút ti n lên 30 bấ ế ước và xoay hướng 90 đ đ vi t dòng ch ộ ể ế ữ Dien tich khu dat con lai la:
fd 300 label :Scl //ti n thêm 300 bế ước n a đ hi n th giá tr c a di n tích còn l iữ ể ể ị ị ủ ệ ạ
ht
end
Trang 5V CẤU TRÚC LẶP
1 Cấu trúc lặp với số lần lặp biết trước: người ta thường dùng cú pháp sau:
1.1.Câu lệnh REPEAT:
Cú pháp: Repeat N[ lệnh1 lệnh2 …]
Ý nghĩa: Lặp lại N lần các lệnh: lệnh1 lệnh2 …
Cách thực hiện vòng lặp như sau: MSWLogo cho thực hiện N lần dãy lệnh lệnh1 lênh2 …
Ví dụ 1: vẽ một đa giác đều có số cạnh và độ dài mỗi cạnh do người chạy chương trình ra lệnh
to DG_NcanhM :M :N repeat :N[FD :M RT 360/:N]
end
Rõ ràng sô lần lặp được biết trước đó là N
Ví du 2: Giải đề thi tin học trẻ toàn quốc năm 2015
Câu 1 (20 điểm): Biển báo
Em viết các câu lệnh trong chương trình
MSWLogo để vẽ hình 1 – Biển báo giao thông
“cấm dừng và đổ xe” Biết rằng bán kính vòng tròn
ngoài là 110 đơn vị, bán kính vòng tròn trong là 90
đơn vị, độ dày đường chéo là 10 đơn vị Tô màu
như quy định trong biển báo giao thông
Giải: to bienbao
cs pd setpc [255 0 0] circle
110 rt 45 pu fd 5 lt 90 fd 5
pd
repeat 4[fd 85 rt 90 arc2 90
85 rt 90 fd 85 pu fd 10 pd]
pu home setFC 4 fill fd 30
setFC 1 fill rt 135 fd 40
repeat 3[fill rt 90 fd 40]pd
ht
end
Hình 1(bản chính màu đen, xám)
Câu 2 (10 điểm): Hình vẽ
Em viết các câu lệnh trong chương trình
MSWLogo để vẽ hình 2 Biết rằng Hình 2 được tạo
thành từ các hình vuông và tam giác đều có kích
thước cạnh là 100 đơn vị
Giải:
to vehinh
cs pd
repeat 8[repeat 4[fd 100 rt
Trang 690]
fd 100 lt 90
repeat 2[rt 120 fd 100]
rt 75 pu fd 100*sqrt(2) rt 180
pd]
end
Hình 2
Câu 3 (10 điểm): Tinh toán
Một bể nước có thể tích 2015 lít và 2 thùng đựng nước có thể tích là 31 lít và 8 lít Chỉ có hai thao tác:
- Thao tác 1: Múc đầy thùng 31 lít đổ vào bể
- Thao tác 2: Múc đầy thùng 8 lít đổ vào bể
Em sử dụng các câu lệnh của MSWLogo để tính và đưa ra đúng số cách sử dụng 2 thao tác trên để làm đầy bể nước Hai cách được gọi là khác nhau nếu tổng số thao tác sử dụng khác nhau
Giải:
to tinhtoan
cs
make "d 0
make "m 0
make "n 0
repeat 66[repeat 251[if (:m*31+:n*8)=2015[make "d :d+1] make "n :n+1] make "n 0 make
"m :m+1]
rt 90
label [so cach la]
pu fd 100 pd
label :d
ht
end
2 Cấu trúc lặp với số lần lặp chưa biết trước (lặp có điều kiện)
Ta đã biết câu lệnh Repeat để lặp lại một công việc Trong câu lệnh này, số bước lặp đã được biết trước và MSWLogo sẽ thực hiện đúng số bước đã chỉ định
Ví dụ 1: Cần tính tổng S = 1 + 2 + 3 + 4 + 5 + …+ N
Ta có thể giải quyết bài toán trên với 2 biến S và A và thực hiện như sau: Đầu tiên, ta cho S
= 0 và A = 1; thực hiện lặp N lần với hai công việc là cộng dồn S = S + A và cho tăng A một đơn vị: A = A + 1
To cong :N
CS
Make “S 0
Make “A 1
Repeat :N [Make “S :S*:A Make “A :A+1]
RT 90 Label :S
End
Với bài toán trên, mặc dù N là một biến nhưng ta đã biết trước khi thực hiện chương trình Trong nhiều trường hợp, số lần lần lặp lại không biết trước và số vòng lặp được xác định bởi một điều kiện nào đó Khi đó cần sử dụng vòng lặp có điều kiện While (hay còn gọi là vòng lặp với số lần lặp không xác định)
Ví dụ 2: Tính tổng S = 3 + 7 + 11 + 15 + 19 + … cho đến khi số hạng cuối cùng gần bằng
100 nhất
Cũng giống như bài trên, ta có thể giải quyết với 2 biến là S và A, đầu tiên ta cho S=0 và A=3; sau đó thực hiện lặp với hai việc là cộng dồn S = S + A và tăng A = A + 4 (vì khoảng cách
giữa các số hạng là 4) Vấn đề đặt ra là: Số lần lặp là bao nhiêu ?
Trang 71.2.Câu lệnh FOR:
Cú Pháp: For [<biến chạy> <giá trị đầu> <giá trị cuối> <giá trị tăng>] [Câu lệnh]
Công dụng:
- Ban đầu <biến chạy> nhận giá trị là <giá trị đầu>
- [Câu lệnh] được thực hiện khi <biến chạy> còn nhỏ hơn hoặc bằng giá trị cuối, mỗi lần thực hiện câu lệnh <biến chạy> tăng lên <giá trị tăng>
Ví dụ:
1/Vẽ 6 hình vuông lồng nhau như hình vẽ bên có
kích thước lần lượt là 30; 60; 90; 120; 150; 180
Cách 1:
to vehinhvuong
cs pd
For [I 6 1][repeat 4[fd :i*30 rt
90]]
HT
Cách 2:
end
to vehinhvuong
cs pd
For [I 6 1][repeat 4[fd :i*30 rt
90]]
HT
2/ Vẽ hình tái tim với cạnh ngắn nhất là 20, cạnh
dài nhất 200, mỗi cạnh tăng, giảm lần lượt là 10,
góc giữa các cạnh là 10 độ (Như hình vẽ bên)
to vetraitim
cs
pd
For [i 20 200 10][fd :i BK :i rt
10]
For [i 200 20 -10][fd :i BK :i rt
10]
HT
end
2 Cấu trúc lặp với số lần lặp chưa biết trước (lặp có điều kiện)
2.1 Mở đầu:
Ta đã biết câu lệnh Repeat, For để lặp lại một công việc Trong câu lệnh này, số bước lặp đã được biết trước và MSWLogo sẽ thực hiện đúng số bước đã chỉ định
Ví dụ 1: Cần tính tổng S = 1+2+3+4+5+…… +N
Ta có thể giải quyết bài toán trên với 2 biến S và A thực hiện như sau: Đầu tiên, ta cho S=0
và A=1; thực hiện lặp N lần với hai công việc là cộng dồn S=S+A và cho tăng A một đơn vị: A=A+1
to cong :N
CS
Make “S 0
Trang 8Make “A 1
Repeat :N [Make “S :S+:A Make “A :A+1]
RT 90 Label :S
HT
end
Hoặc
to cong :N
Make “S 1
For [I 2 :N][Make “S :S+1]
RT 90 Label :S
HT
End
Với bài toán trên, mặc dù N là một biến nhưng ta đã biết trước khi thực hiện chương trình Trong nhiều trường hợp, số lần lặp lại không biết trước và số vòng lặp được xác định bởi một điều kiện nào đó Khi đó cần sử dụng vòng lặp có điều kiện While (hay còn gọi là vòng lặp với số lần lặp không xác định)