Giải toán bằng LogoI Làm các phép tính trong LOGOCó thể sử dụng các phép tính cộng (+), trừ (), nhân () và chia () trong LOGO.Khi đó, LOGO sẽ hiện kết quả trong khung xám của cửa sổ lệnh bằng lệnh PRINT (pr)Ví dụ: Pr 3+5 sẽ hiện kết quả của phép tính 3+5.Nếu biểu thức cần tính kết quả là đây các phép tính thì LOGO sẽ thực hiện nhânchia trước, cộng trừ sau.Nếu dãy các phép tính chỉ có cộng và trừ hoặc nhân và chia thì LOGO sẽ thựchiện các phép tính tuần tự từ trái qua phải.Nếu có các thành phần nằm trong cặp dấu ngoặc đơn thì các thành phần đỏ sèđược ưu tiên thực hiện trước.Khi giải các bài toán, ngoài việc thực hiện các phép toán để tìm ra đáp số thì cònphải ghi lời giải của nó.Để ghi lời giải dạng văn bản hoặc kết quả các phép tính vào màn hình chính củaLOGO ta dùng lệnh LABEL. Nội dung viết ra được đặt trong cặp dấu . Sử dụng biến trong LogoBiế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 để đảmbảo 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ònnhiều trường hợp khác cũng phải dùng đến biến.Ghi 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. Các cấu trúc xét điều kiện trong Logo+ ififesle+ While
Trang 1Tài liệu LẶP TRÌNH LOGO (Dành cho học sinh tiêu học)
C h ư ơ n g 1
L À M Q U E N V Ơ I L O G O (Quyén 2 sách củng học Tin học)
C h ư ơ n g 2
V I Ế T C Á C T H Ủ T Ụ C T R O N G L O G O (Quyén 3 sách củng học Tin học)
C h ư ơ n g 3
G IẢ I T O Á N B Ả N G L O G O
I - Làm các phcp tính trong LOGO
Có thế sử dụng các phép tính cộng (+), trừ (-), nhân (*) và chia (/) trong LOGO Khi đó, LOGO sè hiện kẻt quả trong khung xám của cửa sô lệnh băng lệnh PRINT (pr)
Ví dụ: Pr 3+5 sè hiện kết quả của phép tính 3+5
Nếu biếu thức cẩn tính kết quà là dây các phép tính thì LOGO sè thực hiện nhân chia trước, cộng trừ sau
Nếu dày các phép tính chi có cộng vả trừ hoặc nhân và chia thì LOGO sè thực hiện các phép tính tuần tự từ trái qua phải
Nếu cỏ các thảnh phần nằm trong cặp dấu ngoặc đơn thì các thành phần đỏ sè được ưu tiên thực hiện trước
Ví dụ: Print 2+3*4 cho kết quà lả 14
Print (2+3)*4 cho kết quả là 20
Ghi chú: c ỏ thé sừ dụng lệnh SHOW cùng cho kết quả tương tự như lệnh PRINT Bài tập:
3.1 - Dùng LOGO đé tính các biéu thức sau:
II - Giải toán bằng LOGO
Khi giải các bài toán, ngoài việc thực hiện các phép toán đề tim ra đáp số thỉ còn phải ghi lời giài cũa nỏ
Đê ghi lời giãi dạng văn bàn hoặc kết quà các phép tính vào màn hỉnh chính cùa LOGO ta dùng lệnh LABEL Nội dung viẽt ra được đặt trong cặp dâu [ ]
Trang 2LABEL 10+5*25 ; viết các giá trị thỉ không cỏ cặp dấu [ ].
Trẽn màn hình chính sè hiển thị kết quà của phép tính 10+5*25 là 135
Cần chủ ý: ơ chế độ mặc định, rùa luôn hướng lẽn trên (theo phương thẳng đứng) nên trước khi viết bầng lệnh LABEL cần chuyến hướng của rùa theo phương nằm ngang bầng cách xoay 90°
Ví dụ: Bạn 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 mấy cái kẹo?
Một cách đơn giàn, ta cỏ thể viết câu lệnh sau:
Print 2 0 - 5 - 3 Ket quả là 12 sè hiện tại khung xám của cửa sô lệnh
LABEL [So keo con lai la: ] ; Viết ra câu trả lời
Cần chú ý: - Lệnh LABEL sè viết ra tại vị trí cùa rùa theo hướng hiện tại v i vậy nếu trong thủ tục cỏ nhiều lệnh LABEL cần phài tính toán số bước di chuyển và thực hiện treo trinh tự: Nhấc bút - Di chuyến - Hạ bút - viết
- Có thề ghi nhiều câu lệnh trên một dòng, ví dụ:
RT 90 LABEL [So keo con lai la: ] PU FD 250 PD LABEL 20-5-3
Bài tập
3.2 - Một miếng đất hình chừ nhật cỏ chiều dài là 150 mét chiểu rộng là 70 mét Người ta chia miếng đất cho hai người theo cạnh dài cùa nỏ người thử nhất được 85 mét phần còn lại đé cho người thứ 2 Hày tính diện tích đất được chia cho mồi người 3.3 - Hai sổ cỏ trung bỉnh cộng là 108 Hày tìm 2 số đó biết ràng thương của nỏ bàng 5
3.4 - Cho dày số 3, 7, 11, 15, 19, Hày tìm số thứ 6 vả số thứ 7 của dày ưẽn và tính trung bỉnh cộng của cà 7 số cỏ trong dày
2
Trang 3C hư ơng 4
SỬ DỤNG BIÉN TRO N G LO G O
1 - 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 đom giàn nhất: Dùng biến đế đàm bào 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
Trở lại ví dụ ỡ phần trước: Bạn 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 mấy 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ỏ lả 20 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: Ban Mai cỏ a cái kẹo
Mai cho Minh b cái, sau đó Mai lại ăn hết ccái Hòi Mai còn lại may cái kẹo?
Ta thấy rang 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 cứ so nào Trường họp này, ta gọi các số fl, b, clả các biến
Ghi 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 bien
II - Cách khai báo biến trong thủ tục
/ - Đ ổi vói cá c biến nhận g iá trị trự c tiếp từ bên ngoài
Trong bài toán tính số kẹo kể trẽn, các biến a, b và c sè được đưa vào từ bên ngoải đê chương trinh 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:
TO KEO :a :b :c Lúc này, các biến a, b, c sè ưở 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 [So keo con lai la: ]
PU FD 250 PD LABEL :a - :b - :c
END
Khi thực hiện, ta sè nhập các giá ưị 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 bien a b c sè lần lượt nhận các giá ưị là 20, 5 và 3 và thực hiện tính kết quả
Thực hành: chạy lại thủ tục ưẻn với nhiều giá trị a b c khác nhau
2 - Đ ối vói cá c biến nhận g iá trị tron g k h i 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 khai báo
Trang 4cầ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, thi đối với biến nhận giá trị từ một bieu thức trong thủ tục sè dùng dấu nháy kép ngay trước tên biến
Loại biến này thường sứ dụng khi giải toán bàng phương pháp dùng kỷ hiệu thay thế
Ví dụ: Một hỉnh chừ nhật cỏ chu vi là 56 cm Biết rang chiểu rộng bẳng 3/4 chiều dài hày tính diện tích của hình chừ nhật đỏ
Ta gọi a và b là chiểu dài và chiểu rộng của hỉnh chừ nhật, ta có:
(a + b) X 2 = 56 => a + b = 28
Mà b = (3/4) X a => a + (3/4) X a = 28 => 7xa = 28x4
Tức là a = (28x4)/7
b = 28 - a Gọi s là diện tích của hình chừ nhật, ta cỏ s = a X b
Ta viết thủ tục như sau:
to dientich
Make "a (28*4)/7
Make "b 28 - :a
Make " s :a * :b
RT 90 LABEL [Dien tich hinh chu nhat la: ]
PU FD 250 PD LABEL :S
end
Bài tập
4.1 - Một người buôn 1200 đồng một quà trứng Đem về bị vờ mất 20 quả số trứng còn lại bán như sau: 2/4 số trứng bán với giá 2000 đồng một quà; l/4số trứng bán với giá 1800 đồng 1 quả; cò n lại bao nhiêu bán với giá 1500 dồng một quá Sau khi bán xong người đỏ lãi 206.000 đồng Tỉm số trứng người đó đà mua
Hướng dần cách giãi:
Gọi số trứng sau khi bị vờ 20 quả lả a ta có số tiền bán trứng thu được là:
(2xa/4) X 2000 + (a/4) X 1800 + (a/4) X 1500 = 1.000 X a + 450 X a + 345 X a = 1.825 X a
Sổ tiền mua trứng ban đầu là: (a + 20) X 1.200 = 1200 X a + 24.000
Ta có 1.825 X a = 1.200 X a + 24.000 + 206.000 = 1.200 a X 230.000
1.825 X a - 1.200X3 = 230.000
625 X a = 230.000 suy ra a = 368 Vậy số trứng mua ban đầu là 368 + 20 = 388 (quả)
4
Trang 5C h ư o n g 5
C Á C C Ấ U T R Ú C X E T Đ I È U K I Ệ N
I - Vòng lặp có điều kiện While
Ta đà biết câu lệnh lặp REPEAT đé lặp lại một số công việc Trong câu lệnh này,
số bước lặp đà được biết trước và LOGO sè thực hiện đủng so bước đà chi định
Ví dụ 1: cần tỉnh t ổ n g 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à cho s = s + A và cho A = A + 1
to c o n g :N
c s
M A K E "S 0
M A K E "A 1
R E P E A T :N [MAKE "S :S+:A M A K E "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 trinh Trong nhiều trường hợp so 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 không xác định)
Ví dụ 2: Tính tổng S = 3 + 7 + ll + 1 5 + 1 9 + cho đến khi số hạng cuổi cùng gần bàng 100 nhất
Cùng giống như bài ưẽ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 = 4; sau đó thực hiện lặp với hai việc lả cho s = s + A và cho 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?
Vòng lặp cỏ điều kiện While như sau: WHILE [điều kiện] [công việc]
Cách thực hiện vòng lặp như sau: Đầu tiên LOGO sè kiếm tra [điều kiện] nếu điều kiện được thỏa màn (tức là ĐỦNG) thi [công việc] được thực hiện, sau đỏ lại kiểm tra [điều kiện] nếu điều kiện vần được thỏa màn thỉ [công việc] tiếp tục được thực hiện , cứ như thế cho đến khi [đièu kiện] không được thỏa màn nừa (tức là SAI) thi dừng lại
Ớ ví dụ 2 ta nhận thấy: Biến A liên tục được tăng lẻn sau mồi lần lặp ta sè xác định điểu kiện là A < 100 tức lả: nếu A lớn hơn 100 vì ket thúc vòng lặp
Chương trinh tính tổng tại ví dụ 2 với vòng lặp WHILE như sau:
to co n g W
c s
M A K E "S 0
M A K E "A 3
W H I L E [:A < 100] [
Trang 6Ớ VÍ dụ 1, mặc dù sổ lần lặp đà biết trước, nhưng ta vần cỏ thẻ sứ dụng vòng lặp While như sau:
to congW2 : N
c s
M a k e "S 0
M a k e "A 1
W h i l e [:A <= :N] [
Ma ke "S : s + : A
Ma ke "A :A + 1
RT 90 Label i:S
Cần chú ý : [côngviệc] trong lệnh WHILE cỏ thề lả một hoặc nhiều công việc
được đặt trong cặp dấu [ ] Trường hợp có nhiều còng việc thì ta nên viết mồi việc trẽn một dòng cho tường minh và dề soát lồi Trong trường hop này, dấu mờ [ đặt ờ cuối dòng cỏ lệnh WHILE và dấu đóng ] đẻ ở cuối dòng lệnh cuổi cùng (xem ví dụ)
Ví dụ 3: Giài bài toán cổ:
Vừa gà vừa chó
Bó lại cho tròn
Ba mươi sáu con Một trăm chân chần.
Với bài toán này, khi học toán ta thường dùng phương phái giả thiết tạm (giả sử
gà cỏ 4 chân hoặc già sữ chỏ cỏ 2 chân), đày là phương pháp khoa học nhất Tuy nhiên,
ta cùng cỏ thề dùng phương pháp thử loại trừ dần:
Nếu cỏ 1 con gà và 35 con chỏ thì sổ chân lả 142 > 100 nên loại
Nếu cỏ 2 con và và 34 con chỏ thì số chân lả 140 > 100 nên loại
Cứ như thế nếu số chân đúng bàng 100 thỉ ta chọn phương án đỏ
Cách giải này dề nhưng quá dài vả mất nhiều thời gian Tuy nhiên, đối với máy tính, việc “lây cân cù bù khả năng" lả một ưu thê, nên nêu sứ dụng phương pháp nảy sè thuận lợi hơn cho người viết chương trình
Gọi số gà lả X, số chỏ là y, bắt đầu với X = 1 vả y = 35, sau đỏ lần lượt kiếm tra số chân, khi nào tồng số chân đúng bầng 100 thi dừng lại
to ga c h o
c s
m a k e "x 1
m a k e "y 35
m a k e "chan 2 * : x + 4 * : y
W h i l e [ ¡chart <> ÎOO] [
m a k e "x :x + 1
m a k e "y : y - 1
m a k e "chan 2 * : x + 4*:y ]
RT 90 Label :x PU FD 50 PD Label :y
end
6
Trang 7BÀI TẬP 5.1 - Giãi bài toán sau:
Trong g iỏ vừa thó vừa gà
100 cá i cang, 43 cải đầu
Hòi có bao nhiêu gà bao nhiêu thỏ?
5.2 - C huồn ch u ồ n và N h ệ n
Chuồn chuồn và N hện hợp sức đế chống lại lào Tò vò độc ác Một hôm chúng tập trung lại để cùng tấn công Tò vò Mới đầu chúng đồng loạt bò trẽn mặt đẩt và lào
Tò vò đem được tất cà cỏ 200 cái chân Sau đó chúng thay đồi chiến thuật, nhện thì bò dưới đất còn chuồn chuồn thì con bay con bò làm lào tò vò hoa mắt vả chi đém được tất
cả cỏ 28 cái đầu không biết mồi loại cỏ m ấy con Em hăy tính giúp xem cỏ bao nhiêu Nhện và bao nhiêu c h u ồ n chuồn củng tấn công lào Tò vò, biết ràng 1 con nhện cỏ 8 chân, 1 con chuồn chuổn cỏ 6 chân
5.3 - Giãi bài toán cổ:
Trâm trâu trảm cỏ Trâu đứng ãn 5 Trâu nam ãn 3
Lụ khụ trâu già
3 con 1 bỏ
Hỏi cỏ bao nhiêu trâu đứng, bao nhiêu trâu nằm bao nhiêu trâu già?
5.4 - Tim so viên bi.
Việt cỏ 20 viên bi, Nam có 8 viên bi C à v iệ t và N am cùng cho Bình một số viên
bi như nhau, sau đó v iệ t lại cho Nam số viên bi đúng bằng số viên bi mà N am hiện có,
vả nhận thấy rang số bi của v iệ t và N am là bầng nhau Hỏi cả v iệ t và Nam cùng cho Binh mấy viên bi?
5.5 - C ho dãy số c h o dày số 5, 8, 11, trong đỏ số cuối củng không lớn horn 64.000 Hày tính trung bỉnh cộng của các sô cỏ trong dày
Trang 82 - Câu lệnh xét điều kiện
2.1 - Câu lệnh IF
Một hành động chi được thực hiện nếu một điều hiện nào đó được thỏa màn sè được thực hiện bời một câu lệnh cỏ điêu kiện
Ví dụ 1: hày vè một đa giác cỏ N cạnh, chiều dài mồi cạnh là 50 bước rùa với số cạnh lớn nhất lả 10
to dag ỉ a c :N
c s
IF :N <= 10 [ Repeat :N [FD 50 RT 360/:N]]
end
Trong ví dụ trên, ta sử dụng càu lệnh IF:
IF <điều_kiện> [công việc]
Ví dụ 2: hày in ra màn hình tất cà các số chia hết cho 5 cỏ trong 50 số lé đầu tiên
to dkỉenl
c s RT 90
M a k e "A 1
M a k e "N 0
M a k e "dem 0
W h i l e [idem <= 50] [
M a k e "Ktra :A + :N
IF (MODULO :Ktra 5) - 0 [PU FD 35 Label :Ktra]
M a k e "N :N + 2
M a k e "dem idem + 1 ]
end
Giải thích:
- Trong chưorng trinh cỏ sử dụng bển dem để đếm sổ lượng các số được tạo trong dày, khi nào biến dem đạt giá trị là 50 thi dừng lại.
- Biến Ktra là các số lẻ cỏ trong dày đà được xác định.
- Câu lệnh:
IF (MODULO :Ktra 5) = 0 [PU FD 35 Label :Ktra]
dùng để kiếm tra xem giá trị của biến Ktra cỏ chia hết cho 5 hay không, nếu chia
hết thỉ viết ra giá trị cùa nỏ
Ghi nhở: hàm MODULO :A :B đé xác định số dư của phép chia số A cho số B
Gộp nhiều diều kiện:
Hây xem lại v í dụ 1 (vè đa giác), ta nhận thấy: Một hỉnh đa giác phải cỏ ít nhất là
3 cạnh (gọi là tam giác) Như vậy với số cạnh lả N được đưa từ ngoài vảo, ngoải việc
8
Trang 9kiềm tra điều kiện không quá 10, ta còn phãi kiềm tra xem số đỏ cỏ lớn hơn 2 hay không? Trong LOGO cỏ sử dụng một sô hàm đê gộp các điêu kiện như sau:
Hàm AND <điều_kiệnl> <điều_kiện2>
hàm sè xét các điều kiện và chi cho là thỏa màn (ĐÚNG) khi tất cả các điều kiện đêu thỏa màn (ĐỦNG), ch i cần một điêu kiện không thỏa màn (SAI) thì hàm sè cho là tât cà không thỏa màn (SAI)
Hàm OR <điều_kiệnl> <điều_kỉện2>
ngược lại với hàm AND, hàm sè xét các điều kiện và cho lả thỏa màn (ĐÚNG) nêu chi càn 1 điêu kiện thỏa màn (ĐUNG), ch i khi nào tât cả các điêu kiện đêu không thỏa màn (SAI) thỉ hàm mới cho là không thỏa màn (SAI)
Với ví dụ I phải đồng thời thỏa màn 2 điều kiện là N > 2 và N <= 10 nên ta phải viẻt lại càu lệnh IF như sau:
IF AND (:N <- 10) (:N > 2) [ Repeat :N [FD 50 RT 360/:N]]
2.2 - Câu lệnh IFELSE
Ớ câu lệnh IF nếu điểu kiện thỏa màn thì [công việc] được thực hiện, còn nếu điêu kiện thỏa màn thì không lảm gỉ cả
Với vỉ dụ vè hình đa giác, nếu thỏa màn 2 điều kiện là N > 2 và N <= 10 thl LOGO sè vè hình đa giác, ngược lại sè không làm gỉ Mong muốn cùa người dùng là phải thông báo cho biẻt trường hợp không vẽ được
Ví dụ 3: hày vè một đa giác cỏ N cạnh, chiều dài mồi cạnh là 50 bước rùa với số cạnh lớn nhất là 10 Trường hợp không vè được thì in ra màn hình câu thông báo
•‘Không hợp lệ"
to dagiac3 :N
c s
IFELSE AND (:N <= 10) (:N > 2) [Repeat :N [FD 50 RT 360/:N]] [
RT 90 Label [Khong hop le]]
end
Trong ví dụ trên ta nhận thấy: Thay vỉ sừ dụng lệnh IF thì ta dùng lệnh IFELSE với củ pháp như sau:
IFELSE <điều_kiện> [công việcl] [công_việc2]
Câu lệnh này được LOGO thực hiện như sau: Nếu điều kiện được thỏa màn (ĐUNG) thỉ thực hiện [công việcl] còn nêu điêu kiện không thỏa màn (SAI) thỉ thực hiện [công_việc2]