Trong chương trình này bạn sẽ điều khiển 1 hoặc nhiều con rùa là một hình tam giác di chuyển trên sân chơi thông qua các lệnh, bên cạnh đó nó cũng được dùng để xử lý tính toán xử lý đưa
Trang 1I MSWLogo là gì
Giới thiệu
Là một ngôn ngữ lập trình được thiết kế và phát triển bởi Seymour Papert, Daniel Bobrow và Wallace Feurzeig Trong chương trình này bạn sẽ điều khiển 1 hoặc nhiều con rùa (là một hình tam giác) di chuyển trên sân chơi thông qua các lệnh, bên cạnh đó nó cũng được dùng để xử
lý tính toán xử lý đưa ra kết quả các bài toán lập trình phức tạp
Cách cài đặt
Bạn có thể tải chương trình từ nhiều nguồn trên mạng hoặc theo địa chỉ sau
http://www.softronix.com/download/mswlogo65.exe và cài đặt theo hướng
dẫn của chương trình Sau khi cài đặt xong bạn sẽ thấy biểu tượng của chương
trình ngoài Desktop
Giao diện MSWLogo
Cách viết và lưu một chương trình
Với MSWLogo bạn có thể thoát bằng cách Click vào hoặc nhập lệnh Bye
Bạn có thể ra lệnh cho Mswlogo làm việc thông qua các lệnh nhấn từ bàn phím vào ngăn nhập
lệnh và nhấn phím enter hay Click để ra lệnh cho Mswlogo thực hiện lệnh Tuy nhiên khi bạn thoát chương trình thì những lệnh này sẽ không lưu lại, bạn phải thực hiện lại từ đầu
ở lần làm việc tiếp theo, nếu muốn lưu lại bạn thực hiện theo trình tự sau
Bước 1: Click vào Edall để mở khung soạn thảo chương trình
Trang 2Bước 2: Đặt tên chương trình sau to, kế đó bạn ghi các lệnh mà bạn muốn thực hiện ở giữa
to và end Ví dụ:
Bước 3: Click File Save and Exit Nếu có lỗi, bạn sẽ được thông báo và phải chỉnh sửa lỗi
xong mới có thể thoát ra Sau đó, bạn có thể gọi chương trình từ ngăn lệnh bằng lệnh
Ve_Hinh_Vuong và nhấn phím enter, kế đó hãy lưu lại thành file chương trình của Mswlogo
Bước 4: Click vào File Save và lưu lại thành tập tin mặc định của Mswlogo lgo
Như vậy ở lần làm việc sau muốn tiếp tục làm việc bạn chỉ cần Click FileLoad… để mở file đã
Trang 3II Một số lệnh cơ bản
Nhóm lệnh di chuy ển
Khi di chuyển từ điểm này qua điểm khác tùy theo trạng thái của bút vẽ Trên đường di chuyển, rùa sẽ để lại đường đi trên sân chơi Sân chơi có tọa độ ±500 cho 4 góc và ngay tại vị trí chính giữa có tọa độ x = 0, y = 0 Có một số lệnh di chuyển từ vị trí hiện tại tới một vị trí nào đó như sau:
a) FORWARD viết tắt FD, cú pháp: FD n đi thẳng tới n bước, n có thể mang giá trị âm lúc
đó rùa sẽ đi lùi
b) BACK viết tắt BK, cú pháp: BK n đi lùi lại n bước
c) SetX n di chuyển tới tọa độ có vị trí là (n,y) -500 ≤ n ≤ 500 Tọa độ y là y hiện tại của rùa
d) SetY n di chuyển tới tọa độ có vị trí là (x,n) -500 ≤ n ≤ 500
e) SetXY x y di chuyển từ vị trí hiện tại tới tọa độ x, y
f) SetPOS [x y] tương tự lệnh SetXY
g) Home từ vị trí hiện tại di chuyển về ngay tọa độ (0,0)
h) Right n Viết tắt RT, xoay rùa về phía bên phải một góc n độ
i) Left n Viết tắt LT, xoay rùa về phía bên trái một góc n độ
Ví dụ 1: Vẽ tam giác đều có độ dài cạnh là 250
Ví dụ 2: Vẽ hình chữ nhật có chiều dài là 300 và chiều rộng là 200
Ví dụ 3: Vẽ theo tọa độ hình sau:
Bước 1: Nhấn lệnh FD 250 vào
ngăn nhập lệnh rồi nhấn
enter, ta sẽ thấy ngay lập tức
rùa từ vị trí ban đầu chạy
Trang 4Chú ý: Ở ví dụ này có thể sử dụng lệnh SetPOS cũng có kết quả tương tự, ở hình minh họa
Dưới đây, ta tạo một chương trình con tên là HCN rồi sau đó gọi chương trình đó ra Với
SETX, SETY, SETXY, SETPOS thì góc quay rùa không thay đổi
Nhóm lệnh vẽ đường tròn, cung tròn và ellipse
a) ARC a r Vẽ cung tròn với góc là a và bán kính là r Sau khi vẽ xong rùa đứng yên tại tâm
b) ARC2 a r Vẽ cung tròn với góc là a và bán kính là r Bắt đầu vẽ từ chỗ rùa đang đứng, vẽ tới đâu rùa đi theo tới đó (rùa nằm trên cung tròn)
c) ELLIPSE x.ngang y.cao Vẽ hình ellipse với 2 thông số, chiều ngang theo trục x, chiều cao theo trục y, rùa đứng yên tại tâm
d) ELLIPSE2 x.ngang y.cao Vẽ hình ellipse với 2 thông số, chiều ngang theo trục x, chiều cao theo trục y, rùa chạy theo đường ellipse
e) ELLIPSEARC độ dài cung x y góc Ví dụ muốn vẽ 1 nửa vòng ellipse ở phía trước mặt rùa (90) lệnh như sau : ELLIPSEARC 180 150 80 90
f) ELLIPSEARC2 Rùa chạy theo cung khi vẽ
g) CIRCLE r Vẽ đường tròn bán kính r rùa đứng tại tâm
h) CIRCLE2 r Vẽ đường tròn bán kính r rùa di chuyển theo đường tròn, sau khi hoàn thành rùa nẳm trên đường tròn
Trang 5Các lệnh ARC2, ELLIPSE2 , ELLIPSEARC2, Circle2 về các thông số cũng giống như ARC, ELLIPSE, ELLIPSEARC, Circle các bạn tự tìm hiểu
Nhóm lệnh về bút vẽ, màu sắc
a) Pen Up viết tắt là PU :
Lệnh này nhấc viết của rùa lên và kết quả là khi di chuyển rùa không để lại dấu vết
b) Pen Down viết tắt là PD :
Lệnh này hạ viết của rùa xuống Các lệnh di chuyển sau lệnh này ta sẽ thấy dấu vết của sự di
Thiết lập độ dày, cao của nét vẽ Lệnh này có thể thực hiện qua Menu Set→Pen Size …
e) SETPENCOLOR viết tắt SetPC [Red Green Blue]
Thiết lập màu cho bút vẽ Red, Green, Blue có giá trị từ 0→255, ví dụ SetPC [255 0 0] sẽ cho ta màu đỏ Có thể sử dụng 16 màu có sẵn từ 0 15
f) Setfloodcolor [R G B] viết tắt SetFC[R G B]
Cài đặt màu nền (giống SetPC ) và tô bằng lệnh FILL
g) FILL Tô màu nền trong phạm vi khép kín của hình
Màu nền tô đã được báo trước bằng lệnh Setfloodcolor Lệnh Fill không cần phải hạ bút xuống
mà vẫn tô được
Ví dụ 1: Vẽ tam giác đều cạnh 200 và tô màu đỏ bên trong
To TamGiac
Setfloodcolor [255 0 0 ] ; đặt màu tô nền là màu đỏ
FD 200 RT 120 FD 200 RT 120 FD 200 ; vẽ tam giác đều độ dài cạnh 200
Trang 6Nhóm lệnh về in kết quả, thông báo
a) PRINT [Nội dung, kết quả, thông báo] viết tắt PR ví dụ PR 1+2+3 ra kết quả là 6 ở trong cửa sổ lệnh
b) SHOW [nội dung, kết quả muốn in ], lệnh tương tự PR
c) LABEL thì hiện ra kết quả ở sân chơi, nếu muốn hiện thị theo chiều ngang thì chúng ta phải xoay rùa về phải 90 độ, nếu muốn hiển thị nhiều hơn một từ thì sử dụng:
Label [Đây là nội dung muốn đưa ra sân chơi]
Label (List “Các “từ “sau “đây “sẽ “hiển “thị “ra “ngoài “sân “chơi).
Nhóm lệnh về vị trí rùa
a) HIDETURTLE viết tắt HT ẩn rùa, không thấy hình tam giác (Rùa) trên sân chơi nữa
b) SHOWTURTLE viết tắt ST hiện rùa
c) POS cho ta biết vị trí hiện tại của rùa Ví dụ: Show POS
d) CLEARSCREEN viết tắt CS xóa sân chơi, đưa rùa về vị trí ban đầu(0,0) Nếu có nhiều rùa thì xóa luôn chỉ để lại 1 rùa
e) CLEAN Xóa hết các nét vẽ trên sân chơi, rùa giữ nguyên vị trí và góc độ
f) CLEARTEXT viết tắt CT , xóa hết tất cả các lệnh đã nhập trong ngăn lệnh
g) HOME Đưa rùa về vị trí ban đầu (0,0)
h) HEADING Cho biết đầu rùa đang xoay ở vị trí bao nhiêu (0 đến 360)
i) SetHeading n Quay rùa về góc n độ, tương tự RT hoặc LT
j) TOWARDS x y Quay đầu rùa về hướng tọa độ x, y
k) DISTANCE x y đo khoảng cách từ vị trí hiện tại tới tọa độ x y
III Các phép toán trong MSWLogo
Cộng, trừ, nhân, chia, ( )
MSWLogo thực hiện theo trình tự ưu tiên trong ngoặc trước rồi tới *, /, +, - Ví dụ:
Ví dụ: Print 2+3*4 cho kết quả là 14
Ví dụ: Print (2+3)*4 cho kếtquả là 20
Trang 7Phép toán logic AND, OR, NOT
a) AND đk1 đk2 nếu muốn nhiều hơn thì viết như sau (AND đk1 đk2 đk3 đk4…) AND chỉ
đúng (TRUE) khi tất cả các điều kiện bên trong đều đúng
b) OR đk1 đk2 nếu muốn nhiều hơn thì viết như sau (OR đk1 đk2 đk3 đk4…) OR chỉ sai
(FALSE) khi tất cả các điều kiên bên trong đều sai
c) NOT đk Nếu đk là đúng thì trả về giá trị sai và ngượi lại
Trong thực tế để giải quyết một bài toán đôi khi cần phải phối hợp nhiều các phép toán logic lại với nhau
NOT EQUALP(<>), EQUALP(=), LESSP(<), GREATERP(>)
MSWLogo không cho phép thực hiện trực tiếp phép toán <>, <=, >= mà phải thông qua hàm, cách viết như sau:
NOT EQUALP thay cho <> Ví dụ Show Not Equalp 3 5 đúng (true)
<=, >= Sử dụng chung với hàm OR Ví dụ Show (OR 3>5 3=5) 3≥5 Show (OR 3<5 3=5) 3≤5
Phạm vi của biến, cách k hai báo
Biến có thể được sử dụng từ tất cả các chương trình khác nhau thì gọi là biến toàn cục, nếu biến đó chỉ sử dụng trong một chương trình thôi và khi kết thúc chương trình thì nó biến mất thì gọi là biến cục bộ Trong MSWLogo có thể khai báo biến ở đâu cũng được, tuy nhiên nên khai báo ở đầu chương trình Tên biến bắt đầu bàng một chữ cái và không được giống với các lệnh của Mswlogo
Make “tên_biến_toàn_cục giá_trị_ban_đầu
Local “tên_biến_cục_bộ
Khi muốn đọc giá trị của một biến nào đó thì thêm dấu : trước tên biến
Khi muốn thay đổi giá trị của biến sử dụng Make “tên_biến giá_trị_mới
Hãy xem một ví dụ:
Cửa sổ soạn thảo chương trình con
Trang 8Truyền biến cho chương trình
Để truyền một giá trị vào chương trình con thì ngay phần khai báo tên chương trình con, ta phải liệt kê các biến truyền vào, biến này là biến cục bộ
Ví dụ 1 : viết một chương trình cộng 2 số bất kỳ
Ví dụ 2 : viết chương trình vẽ hình tam giác đều với chiều dài cạnh được truyền từ
ngoài vào
Cửa sổ chính của MSWLogo
Gọi chương trình Tong_Cong
Label (List :a "+ :b "= :a+:b)
Show :a+:b Truy cập giá trị biến cục bộ, bị lỗi Truy cập giá trị biến toàn cục
Trang 9Đưa vào 2 số và in ra sân chơi số lớn hơn:
IF điều kiện [Lệnh sẽ thực hiện nếu điều kiện là đúng]
IFELSE điều kiện [Lệnh thực hiện nếu điều kiện là đúng] [Lệnh thực hiện nếu điều kiện là sai]
Trang 10VI Vòng lặp trong MSWLogo
Khi một lệnh hay nhiều lệnh lặp đi lặp lại nhiều lần thì người ta sử dụng vòng lặp, trong MSWLogo có 2 loại vòng lặp chính : Vòng lặp biết trước số lần lặp (For, Repeat) và vòng lặp không biết trước số lần lặp (While, Until) Đối với vòng không biết trước số lần lặp, chúng ta phải có biến để kiểm soát giúp nó thoát ra, nếu không thoát ra được trương trình sẽ chạy không dừng lại bắt buộc ta phải bấm nút để ngắt ngang, nếu không có thể dẫn đến việc máy tính bị treo
Vòng lặp REPEAT
REPEAT n [ lệnh 1 lệnh 2…] n là số lần muốn thực hiện các lệnh trong []
Xem lại ví dụ vẽ tam giác đều ở trên ta thấy lệnh FD :canh RT 360/3 viết lặp lại 3 lần, bây giờ
nếu dùng Repeat thì lệnh như sau:
Còn việc vẽ hình vuông với cạnh 150 bây giờ chỉ còn đơn giản như thế này REPEAT 4 [FD 150
RT 90]
Một cách tổng quá để vẽ đa giác đều n cạnh với chiều dài là 200 Repeat n [FD 200 RT 360/n]
Khi sử dụng hàm REPEAT để biết số vòng lặp hiện tại là bao nhiêu ta sử dụng hàm Repcount
Ví dụ in ra cửa sổ lệnh các số từ 1 tới 50 : REPEAT 50 [Show Repcount]
Xem chương trình sau:
Trang 11Đây là chương trình vẽ một hình vuông có cạnh dài 200 và tại các cạnh của hình vuông lại vẽ thêm các tam giác đều cạnh 200
Kết quả:
Bài tập mở rộng: Vẽ hình sau: (Gợi ý: Hình trên được tạo bởi các hình ngũ giác xếp chồng vào
nhau (Trích đề thi tài năng trẻ tin học của một số tỉnh)
Bạn đoán thử xem lệnh này vẽ ra hình gì ? Repeat 24 [Circle2 90 RT 360/24]
Vòng lặp FOR
For cũng là một vòng lặp với số lần lặp biết trước, tuy nhiên for linh hoạt hơn Repeat ở chỗ nó
có thể chỉnh được bước nhảy, với repeat thì bước nhảy luôn là 1, 2, 3, 4 …
Ví dụ :
1) For [i 1 100 1][Show :i] in ra 1, 2, 3, 4, …, 100
2) For [i 3 100 2][Show :i] in ra 3, 5, 7, 9, …, 99
3) For [i 0 100 10][Show :i] in ra 0, 10, 20, 30, …, 100
4) For [i 100 0 -1][Show :i] in ra 100,99,98,97, …, 0
Bài tập: Biết rằng MODULO là hàm chia lấy dư của 2 số, cú pháp lệnh MODULO a b
Ví dụ: Modulo 5 3 được giá trị là 2 Tính tổng các số chia hết cho 3 từ 1 đến 100 (Gợi ý: Sử dụng For, IF và một biến dùng để tính tổng IF (Modulo :i 3)=0)
Vòng lặp WHILE
Vòng lặp While được sử dụng trong các trường hợp không biết trước số lần lặp, tuy nhiên vẫn
có thể sử dụng trong trường hợp biết số lần lặp Khi sử dụng while cần phải kiểm soát biến để vòng lặp có thể thoát ra
Trong khi điều kiện đúng thì thực hiện lệnh
FOR [biến chạy giá trị bắt đầu giá trị cuối bước tăng ] [Lệnh…]
WHILE [điều kiện] [Lệnh…]
Trang 12Ví dụ 1:
Ví dụ 2: Chương trình sau đây sẽ vẽ liên tiếp các đường thẳng từ trong ra ngoài mỗi lần vẽ cạnh tăng lên 5 đơn vị và xoay về bên phải một góc 91 độ
Vòng lặp UNTILL
Vòng lặp Untill cũng tương tự While điểm khác biệt của nó được rút gọn như sau:
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)
Trang 13Bạn có biết vì sao i lại mang giá trị 24
Cách viết bằng Until
Yêu cầu: điều kiện của vòng lặp Until không dùng Not
Bài Tập
Bài 1: Mswlogo là gì
Mục tiêu: Biết được Mswlogo là gì, cách mở, đóng chương trình, các nhập lệnh và cách lưu
lại bài dưới dạng file lgo
Mục tiêu: Sử dụng được một số lệnh thông dụng, điều khiển rùa di chuyển xoay và tô màu
Vẽ được một số hình đơn giản
Trang 14Bài 3: Các phép toán trong Mswlogo
Mục tiêu: Viết và hiểu được cách tính các phép toán bình thường và phép toán logic
Câu hỏi:
1 Cho biết kết quả của phép toán: 7+(7+7)*7+7/7-7 =?
2 NOT (AND OR(5>3 2=9) 1+1=2) kết quả nhận được cuối cùng là true hay false?
Bài 4: Biến là gì, khai báo, phạm vi
Mục tiêu: Hiểu được biến là gì, phạm vi của biến, biết cách khai báo và thay đổi giá trị của
biến
Bài 5: Lệnh rẽ nhánh
Mục tiêu: Đưa được phép toán logic vào trong biểu thức điều kiện của lệnh rẽ nhánh IF và
IFELSE, biết phối hợp nhiều điều kiện lại với nhau để diễn đạt được yêu cầu của bài toán
Bài 6: Vòng lặp
Mục tiêu: Biết cách đưa những lệnh giống nhau vào trong vòng lặp, hiểu được cách thức làm
việc của các vòng lặp REPEAT, FOR, WHILE, UNTIL
Sử dụng vòng lặp và các lệnh đã học vẽ những hình sau:
6 hình tròn lồng nhau
cách nhau 10 bước
6 hình ellipse lồng nhau cách nhau 10 bước
Các hình vuông có cạnh là 20 xếp lên nhau tạo thành hình tam giác vuông Dùng FOR, hoặc Repeat vẽ từ trên xuống dưới
Trang 15Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ Hình 1 với các cạnh của ngôi sao
là 100, đường tròn chứa ngôi sao có bán kính bằng 162, sau khi vẽ xong đổ màu cho ngôi sao
là màu cam (14)
Em hãy tìm tất cả các số chia hết cho 5 trong 50 số lẻ đầu
tiên
Trăm con gà giá trăm đồng Gà trống 5 đồng một con, gà
mái 3 đồng một con, gà con 2 con một đồng Em hãy sử
dụng các câu lệnh trong MSW Logo tính số gà trống, gà
mái và gà con
6 hình vuông cách nhau một góc
360/6
6 hình lục giác cách nhau một góc 360/6
10 hình ngũ giác cách nhau một góc 360/10
5 hình tam giác đều cách nhau một góc 360/5
8 hình tròn cách nhau một góc 360/8
Đây là hình được tạo bởi 7 hình vuông cách nhau 10 bước
Đây là hình được tạo bởi hình bát giác(đa giác đều 8 cạnh)
Tại từng cạnh lại vẽ một hình vuông có chiều dài cạnh bằng với cạnh của
đa giác
Vẽ 5 cánh sen, cung đường tròn là 60
bán kính là 80
Trang 18Học sinh tự vẽ 3 hình này