Tải bản đầy đủ (.doc) (56 trang)

LÝ THUYẾT VÀ BÀI TẬP LOGO

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (469.47 KB, 56 trang )

MSWLOGO

THAY LỜI NÓI ĐẦU…
Hãy đọc và suy nghĩ về nội dung bài báo mạng dưới đây về vấn đề dạy tin học cho trẻ
“Cách dạy công nghệ thông tin cho trẻ em hiện nay đang cần được xem xét lại một cách triệt
để”. Tác giả John Naughton giải thích vấn đề trên và đề xuất hướng cải cách trong bài viết này. Điều gì
còn thiếu trong việc dạy công nghệ thông tin tại các trường học đang là vấn đề lớn.
Một cuộc thảo luận sôi nổi đã và đang diễn ra - trong và ngoài chính phủ - về vấn đề “Cần phải
làm gì đối với Công nghệ thông tin và truyền thông (ICT) trong chương trình phổ thông”. Các tổ chức
- Royal Society, Association for Learning Technology, Computing at School (Tổ chức của các giáo
viên liên quan) và British Computer Society - đã công bố các báo cáo và tài liệu thảo luận nhắm tới các
bộ trưởng và Bộ Giáo dục. Michael Gove, thư ký giáo dục của Nhà trắng, trình bày bài phát biểu tại
hội thảo công nghệ BETT gần đây, chỉ ra rằng Nhà trắng đang cân nhắc. Trong lúc đó, đang xảy ra một
số sự kiện đáng ngạc nhiên, chẳng hạn như hơn một triệu người đã đặt hàng sản phẩm Raspberry Pi,
một máy tính rẻ tiền, nhỏ xíu cỡ thẻ tín dụng từ Cambridge geeks.
Vậy thì, điều gì đang xảy ra: đang có một sự dịch chuyển kiến tạo. Các trường đại học muốn
thay đổi sự giảm sút số lượng học viên ở các khóa học khoa học máy tính. Các công ty sản xuất trò
chơi muốn có nhiều lập trình viên hơn. Chính phủ đòi hỏi nhân viên có trình độ công nghệ cao hơn.
Các nhà sản xuất muốn có nhân viên biết thiết kế hệ thống nhúng. Và giáo viên muốn có nhiều tiền
hơn cho các phòng thí nghiệm máy tính...
Câu chuyện thiếu gì rõ ràng là một vấn đề lớn. Do vậy, đề xuất của John là:
Ngay từ tiểu học, trẻ em ở Anh bất kể năng lực và nguồn gốc cần có cơ hội: học một số kiến
thức cơ bản về khoa học máy tính; hiểu cách tư duy điện toán; học lập trình; và có cơ hội tiến tới các
cấp độ hoàn hảo hơn trong các lĩnh vực này.
Chúng ta sẽ đi vào câu hỏi tại sao việc này lại quan trọng và cần thiết, nhưng trước hết ta cần
đối mặt với thực tế “đau thương”. Đó là phần lớn những gì ta đang làm cho giáo dục ICT tại các
trường học nước Anh trong hai thập kỷ qua đã bị lạc hướng và hầu như là vô ích. Thay vì giáo dục trẻ
em về công nghệ tiên tiến nhất, ta lại tập trung vào giáo dục chúng sử dụng các sản phẩm phần mềm
lỗi thời. Và chúng ta làm điều này vì ta gặp phải vấn đề mà nhà triết học Gilbert Ryle đã gọi là “sai lầm
thể loại” - các việc cùng loại được biểu hiện như là thuộc về loại khác. Ta đang mắc sai lầm khi nghĩ
rằng học về máy tính giống như học lái xe ô tô, và do kiến thức về công nghệ đốt trong không cần thiết


cho việc trở thành một lái xe chuyên nghiệp, nên kéo theo là những hiểu biết về sự hoạt động của máy
tính không quan trọng đối với trẻ em.
Điều ta đã quên mất là xe hơi không vận hành thế giới, không giám sát truyền thông, không hỗ
trợ điện thoại di động, không giúp quản lý tài khoản ngân hàng, không lưu trữ nhật ký, không can thiệp
vào các hoạt động xã hội và thậm chí - ở một số nước - không tính được số phiếu bầu cử. Nhưng máy
tính được nối mạng có thể làm được tất cả các việc trên, và hơn thế nữa.
Do vậy ta cần phải thừa nhận rằng “ICT trong trường học” đã trở thành món hàng độc hại. Ta
phải thay thế nó bằng một môn học khác tương đương, hỗ trợ về mặt tri thức và mở rộng cuộc sống
cho sinh viên. Nếu cần một cái tên hay hơn, hãy gọi môn đó là khoa học máy tính. Đây là thuật ngữ
lớn, bao trùm hai lĩnh vực riêng biệt. Trước tiên là tập hợp các khái niệm cơ bản cần thiết nếu trẻ em
muốn hiểu về thế giới mạng mà chúng đang lớn lên trong đó. Và thứ hai là khoa học máy tính liên
quan tới cách suy nghĩ giải quyết vấn đề: còn gọi là suy nghĩ điện toán, và nó là những hiểu biết về sự
khác biệt giữa trí tuệ con người và trí tuệ nhân tạo, đồng thời là suy nghĩ đệ quy, là tỉnh táo trước nhu
cầu ngăn chặn, dò tìm và chống lại các nguy cơ, sử dụng tư duy trừu tượng và phân tích khi giải quyết
các công việc lớn, và là huy động năng lực phỏng đoán, lặp và tìm kiếm để khám phá giải pháp cho
các vấn đề phức tạp.
Sẽ có rất nhiều thảo luận thú vị về các khái niệm cơ bản mà sinh viên cần phải hiểu được, ở đây
đưa ra một danh mục khái niệm cho người mới bắt đầu. Trẻ em cần biết về: thuật toán (các công thức
toán học để làm thành các chương trình); mật mã (mức độ bảo mật thông tin trên mạng); trí tuệ máy
(cách các dịch vụ Youtube, NetFlix, Google và Amazon đoán được ý muốn của bạn); sinh học điện
toán (cách hoạt động của mã di truyền); tìm kiếm (cách ta tìm cây kim trong một tỉ đống cỏ khô); đệ
quy (một phương pháp trong đó giải pháp phụ thuộc vào các giải pháp cho các mẫu nhỏ của cùng vấn
đề); và phương pháp thử - sai (các kỹ thuật dựa vào kinh nghiệm để giải quyết vấn đề, học và khám
phá).

1


MSWLOGO


Nếu các khái niệm này là bí ẩn cho phần nhiều độc giả, thì đó là do chúng ta sống trong môi
trường văn hóa mà những khái niệm cho các thế hệ bị cố ý che đi. Về mặt này, tác phẩm “Two
Cultures” của C.P. Snow đang tồn tại, tốt và ở ngay nước Anh. Và nếu bạn nghĩ rằng những khái niệm
này quá phức tạp để dạy cho trẻ nhỏ, thì đó là vì bạn chưa bao giờ biết tới những giáo viên tài năng và
sáng tạo đang thực hiện điều này. Trên thực tế, nhiều độc giả Anh ở độ tuổi 30 sẽ biết tới đệ quy, ví dụ,
vì ngày xửa xưa nhiều trường học Anh đã dạy lập trình Logo, giúp trẻ em học cách chế tạo một con rùa
máy để thực hiện các vận động phức tạp. Nhưng cuối cùng, hầu hết các trường đều từ bỏ dạy Logo và
quay lại dạy trẻ sử dụng Microsoft Word.
Nhân tiện, câu chuyện Logo cho thấy một minh họa về việc tại sao dạy trẻ viết các chương
trình máy tính phải là một phần tất yếu trong bất kỳ chương trình khoa học máy tính mới. Lý do là sẽ
không có cách nào tốt hơn để giúp một người hiểu các khái niệm như đệ quy hay thuật toán bằng cách
cho họ tự viết mã thực thi các khái niệm này. Đó cũng là lý do tại sao câu thần chú thời thượng - “mã
là bộ chữ Latin mới” - lại khó hiểu đến vậy. Điều này có nghĩa rằng lập trình là một kỹ năng phù hợp
nhưng lại không hữu ích và chỉ là tùy chọn. Bộ chữ Latin là loại ngôn ngữ thú vị, nhưng đã chết; mã
máy tính là ngôn ngữ của cuộc sống kết nối mạng - và đồng thời là của sự tái tạo di truyền.
Một quan niệm sai nữa đang lan tràn trong cuộc tranh luận về chương trình mới là lý do căn
bản cho điều này là kinh tế: ta cần nhiều trẻ em hiểu điều này vì nền công nghiệp “sáng tạo” đang cần
nguồn nhân lực có thể viết mã, từ đó suy ra rằng các trường đại học cần nguồn sinh viên nhất định
thành thạo máy tính. Đó là sự thật, hiển nhiên, nhưng không phải là lý do chính mà ta cần phải tạo ra
thay đổi tận gốc đối với hệ thống giáo dục.
Lời biện hộ lớn nhất cho sự thay đổi không phải là kinh tế mà là đạo đức. Đó là nếu ta không
hành động ngay bây giờ, ta sẽ là lừa đảo trẻ con. Chúng sống trong thế giới được hình thành nhờ các
nhà vật lý, hóa học, sinh học và lịch sử, và do vậy ta muốn chúng hiểu những thứ này. Nhưng thế giới
của chúng cũng sẽ được định hình nhờ điện toán mạng và nếu chúng không có hiểu biết sâu hơn về
những khái niệm này thì chúng sẽ tê liệt về tri thức.
Chúng sẽ lớn lên như những người thụ động sử dụng các thiết bị và sản phẩm đóng, dẫn tới
cuộc sống bị bao bọc bởi công nghệ do một số người ưu tú tạo ra từ các công ty khổng lồ như Google,
Facebook và những công ty giống như vậy. Thực vậy, ta sẽ nuôi lớn các thế hệ chuột cảnh trong
chuồng có bánh xe lấp lánh do Mark Zuckerberg và đồng nghiệp anh ta tạo ra.
Đó có phải là điều ta muốn không? Đương nhiên là không. Vậy thì bắt tay vào thôi.


2


MSWLOGO

I. LOGO LÀ GÌ?
1. XUẤT XỨ
Bắt đầu từ thế hệ 3 của máy tính, vào giữa thập kỷ 60, ý tưởng về “máy tính thông minh” đã
nảy nở và ngành trí tuệ nhân tạo đã hình thành. Tại Viện công nghệ MIT, nơi đang có dự án v ề trí tuệ
nhân tạo, đã ra đời ngôn ngữ lập trình LISP, một ngôn ngữ chuyên xử lý danh sách, nghĩa là có tính phi
số, phục vụ cho việc nghiên cứu trí tuệ nhân tạo, đã ra đời ngôn ngữ lập trình LISP, một ngôn ngữ
chuyên xử lý danh sách, nghĩa là có tính phi số, phục vụ cho việc nghiên cứu trí tuệ nhân tạo. Cũng tại
đó, nhà tin học sư phạm S.Papert lại nảy ý muốn nghiên cứu sự hình thành trí tuệ trẻ em. Từ 1967 ông
đã cùng J.Piaget hợp tác nghiên cứu. J.Piaget là nhà tâm lý nổi tiếng, từ thập kỷ 20 đã đưa ra giả thuyết
về trí tuệ có cấu trúc thao tác và đã minh họa hệ thống thao tác đó bằng logic toán. Sự thành công của
MTĐT, một công cụ của logic hình thức, đã biện hộ ý tưởng của J.Piaget. Sự hợp tác của hai nhà bác
học thuộc hai lĩnh vực khác nhau vì sự ưu ái tuổi thơ đã đưa đến sự ra đời LOGO, một ngôn ngữ lập
trình được sự công nhận quốc tế là ngôn ngữ sư phạm dành cho trẻ em. Theo cách chiết tự thì LOGO
có bao hàm hai nhân tố đặc trưng: LOGOS (ý niệm trí tuệ) và LISP (truyền thống kế thừa). Nghĩa là
LOGO tự coi là xuất thân từ LIPS vì trí tuệ trẻ em. Chịu ảnh hưởng sâu sắc tư tưởng kiến thiết của
J.Piaget, S. Papert đã thiết kế LOGO như môi trường tin học có “các - thực - thể - để - cùng - tư - duy”
nhằm giúp các em phát triển trí tuệ trong quá trình giao tiếp với LOGO. Cụ thể trong môi trường ấy
các em có thể “chơi mà học và học như chơi”, phù hợp với sự phát triển tự nhiên của tâm sinh lý trẻ
em.
Thành công của các thử nghiệm ban đầu trong thập kỷ 70 đã cho phép S.Papert đưa ra nhận
xét: “Ngày nay trong giáo dục khi trẻ em được đặt đối diện với máy tính thì y như rằng để thử thách,
để giải các bài toán có cỡ, để nhồi nhét thông tin. Ấy là máy chương trình hóa các em, không hơn
không kém. Với môi trường LOGO thì tình thế sẽ đảo ngược: chính các em chế ngự máy, chương
trình hóa máy”. Quan điểm sư phạm và giàu tính nhân hậu ấy được sự tán đồng rộng rãi nên từ những

năm 80 cùng với sự phổ cập máy vi tính, LOGO đã đi vào phục vụ đại trà các em học sinh, từ tuổi mẫu
giáo trở đi, tại nhiều nước có nên công nghiệp tin học phát triển. Để các em có thể giao tiếp với máy
như thể với người thân. Từ 1996 LOGO theo các nhà tin học sư phạm Pháp đến Việt Nam.
2. CÁC ĐẶC TRƯNG CƠ BẢN CỦA LOGO
2.1. Đơn giản. Đơn giản được hiểu theo nghĩa ai cũng có thể sử dụng được ngay và sẽ phát
triển dần theo sở thích, nhu cầu và mức độ hiểu biết. Điều này bảo đảm yếu tố chủ động, tích cực và
tiềm năng sáng tạo của người dùng.
2.2. Trực quan. Bằng con Rùa, một rôbốt trên màn hình, và bằng các thông báo ngắn gọn trong
chế độ thông dịch, LOGO vừa trực quan hóa ý tưởng người dùng vừa bám sát nâng giấc trong từng
bước đi chập chững của từng người. Mặt khác nó cũng tạo những cơ chế để có thể rà soát, khảo sát và
mô phỏng, ngay cả với các tình huống phức tạp nhất. Cụ thể, người dùng có thể làm chậm lại quá trình
chế biến và cho hiển thị tất cả những thông tin cần quan sát, như thể quay chậm để xác minh các pha
gay cấn trên sân cỏ. Nói chung, LOGO có thể giúp cho mỗi người từ tư duy hình tượng đi dần vào tư
duy trừu tượng, từ biểu tượng đi vào khái niệm, phán đoán và suy lý. Đó là "chơi mà học và học như
chơi" phù hợp với lứa tuổi đang phát triển, giàu tưởng tượng, năng động nhưng cũng rất cần sự hài hòa
của các em bé.
2.3. Mở. LOGO được xây dựng từ bộ từ vựng nguyên thủy, tức từ một số từ khóa ban đầu. Số
từ khóa này hoàn toàn có thể được bổ sung, tức bộ từ vựng có thể được mở rộng. Không chỉ mở rộng
bộ từ vựng mà ý tưởng tạo ra các vi thế giới của LOGO sẽ tạo nên những phần mềm mở, có thể mô
phỏng thế giới hiện thực lẫn thế giới viễn tưởng. Như vậy nguyên lý mở của LOGO có dụng ý trình
bày một quan điểm về tương lai. Chúng ta là những người đương thời, chưa ý thức được đầy đủ tương
lai mà chỉ hình dung nó, cảm thấy nó. Vậy ta hãy đặt vào tay thế hệ trẻ một công cụ có thể tự phác họa
thiết kế tương lai.
2.4. Hiện đại. Tuy rất giản đơn nhưng LOGO vẫn chứa một tiềm năng hiện đại lớn. Trước hết
đó là cách để nó tồn tại, vì tin học phát triển như vũ báo. Yếu tố hiện đại ấy thể hiện ở năng lực xử lý
danh sách và kỹ thuật đệ quy cùng tính cấu trúc của nó. Là ngôn ngữ có cấu trúc nhưng với cách cấu
trúc môđun theo nguyên lý "phân tán tuyệt đối", LOGO thích ứng được với mọi trình độ lập trình, mở
rộng biên độ sử dụng. Mặt khác, tuy là ngôn ngữ thủ tục nhưng LOGO có chứa các yếu tố vị từ của
ngôn ngữ phi thủ tục, đặt được cái gạch nối giữa ngôn ngữ cổ điển với ngôn ngữ vị ngữ và đó là cơ sở
để nó có thể hòa nhập được với các ngôn ngữ trong tương lai. Với các đặc trưng cơ bản ấy, LOGO

3


MSWLOGO

được coi như một phần mềm dạy học và là phần mềm mở, một ngôn ngữ sư phạm. Ở đây chúng ta
chưa đi vào các khía cạnh tinh tế nhưng cũng gắng minh họa các đường nét có tính phác thảo toàn
cảnh.
3. TÌM HIỂU CÁC THÀNH PHẦN CƠ BẢN CỦA LOGO
3.1. Bộ chữ viết và bộ từ vựng LOGO
LOGO được xây dựng trên bộ ký tự bao gồm:
+ Bộ chữ cái latinh: 26 chữ cái hoa A, B,... Z và 26 chữ cái thường a, b,...., z
+ Bộ chữ số thập phân : 0, 1 , ......9.
+ Bộ các ký hiệu toán học thông dụng : +, -, *, / , =, >, <, ().
+ Bộ các ký hiệu đặc biệt
+ Dấu gạch nối và dấu cách.
Bộ từ vựng LOGO có 207 từ gốc nguyên thủy và 40 từ gốc tiện ích. Tất cả chúng được liệt kê,
giải trình chức năng và cách sử dụng trong bộ ba LOGO
3.2. Văn phạm LOGO
Văn phạm là hệ thống quy tắc cấu tạo các thành phần của ngôn ngữ mà ở đây chủ yếu là cấu
tạo từ, từ gốc và câu để phục vụ cho việc lập trình. Văn phạm nào cũng phải quan tâm đ ến cả ba mặt
của các thành phần trong ngôn ngữ là cú pháp, ngữ nghĩa và thực dụng. Với LOGO, tính đơ n giản
được thể hiện ở chỗ nó có văn phạm rất gần với văn phạm của ngôn ngữ tự nhiên và có cố gắng ít tạo
ra các tìn huống nhân tạo để người sử dụng bằng vốn ngôn ngữ tự nhiên có thể tiếp nhận nó ngay. Để
làm điều đó, văn phạm LOGO đưa ra một số định nghĩa tối thiểu.
3.3. Định nghĩa đối tượng LOGO.
LOGO có hai đối tượng là từ và danh sách
a) Từ: Từ là dãy ký tự viết liền nhau, không được dài quá 248 ký tự. Từ chỉ có một ký tự gọi là
ký tự. Từ không có ký tự nào gọi là từ rỗng. Từ cũng được chia thành 3 loại chính, được đánh dấu để
nhận diện:

+ Từ gốc được quy định bởi ngôn ngữ LOGO.
+ Từ là từ bất kỳ được quy định phải viết với dấu nháy kép (“) ở đầu. Ví dụ ta muốn đưa thông
tin là từ “MSW logo” vào chương trình chạy thì phải gõ: “MSW logo tức là gõ dấu nháy kép trước rồi
mới gõ “MSW logo”.
+ Từ là một tên (tức là một biến), tức khi từ được dùng để đại diện cho sự vật nào đó. Ví dụ, sự
vật ấy là hoa hồng nhưng muốn được gọi là HH thì HH là đại diện hay là tên. Để máy hiểu từ đó là
một biến thì nó phải được đặt sau dấu hai chấm (:), cụ thể phải viết: :HH thì chương trình mới nhận
diện được. Việc này sẽ nói rõ ở các ví dụ cụ thể trong các chương sau.
b. Danh sách: danh sách được hiều là một thực thể gồm nhiều thành phần đặt trong ngoặc
vuông, với các thành phần đó có thể là các ký tự, từ hay danh sách thành phần.
Ví dụ ta có các kiểu danh sách sau:
[A B C D E] : danh sách chỉ gồm các ký tự (các ký tự viết rời nhau).
[A B [C D E]] : danh sách gồm ký tự và danh sách thành phần.
[[A B][C D E]] : danh sách gồm hai danh sách thành phần.
[A B ANH EM] : danh sách gồm ký tự và từ.
[A [B C D] ANH] : danh sách gồm ký tự, từ và danh sách thành phần.
Trong danh sách các ký tự và từ viết không có dấu nháy kép ở đầu. Số phần tử không hạn chế
miễn không quá 248 ký tự, kể cả dấu cách. Danh sách không có thành phần nào là danh sách rỗng và
ký hiệu là [ ].
2. Định nghĩa câu lệnh.
Câu lệnh là đơn vị cơ bản của ngôn ngữ, cũng là của thủ tục, bao gồm các từ gốc và các đối
tượng của LOGO, từ và danh sách, với các đối tượng này thường là dữ liệu của từ gốc.
Một số từ gốc là các lệnh cơ bản:
TT Danh định
Viết tắt Cú pháp
Chức năng
1
Home
home
Rùa về chính giữa sân chơi (vị

trí xuất phát)
2
ClearScreen
CS
CS
Rùa về vị trí xuất phát. Xoá
toàn bộ sân chơi
3
Clean
clean
Xoá màn hình và Rùa vẫn ở vị
4


MSWLOGO

4
5
6
7
8
9
10
11
12
13

ClearText
PenUp
PenDown

Hideturtle
Showturtle
ForwarD
BacK
RighT
LefT
Print
Wait

14

Setpensize

15

Label

16
17

Bye
ARoundCircle

18

ARoundCircle2
Ví dụ: repeat 36[rr 10
arc2 180 100 arc2
-180 100 fd 5]


19

Repeat

20

Modulo

CT
PU
PD
FD
BK
RT
LT
PR

ARC

ARC2

trí hiện tại
CT
Xóa các dòng lẹnh đã ghi
PU
Nâng bút
PD
Hạ bút để vẽ
hideturtle
Ẩn rùa

showturtle
Hiện rùa
FD n
Rùa tới n bước
BK n
Rùa lui n bước
RT k
Quay sang phải k độ
LT k
Quay sang trái k độ
PR 4 + 5
In ra kết quả 9 (vì 4 + 5 =9)
Wait m
Chờ đợi m đơn vị thời gian
trước khi thực hiện lệnh tiếp
theo (m/100 giây)
Setpensize [k k]
làm cho nét bút lớn hơn đến độ
rộng k, để xem dễ dàng hơn!
kích thước bút mặc định là [1
1]
Label[MSWLogo] Viết tại vị trí rùa đang đứng
dòng chữ “MSWLogo” theo
hướng của rùa
bye
Thoát khỏi phần mềm Logo
ARC k n
Vẽ cung tròn k độ bán kính n
và vị trí rùa đứng là tâm vào
phía bên trái sau lưng rùa,

hướng rùa không thay đổi
ARC2 k n
Vẽ cung tròn k độ bán kính n
và vị trí rùa đứng là vị trí xuất
phát vào phía bên phải trước
mặt rùa, đồng thời rùa di
chuyển theo cung tròn
Repeat n[ … ]
Lặp lại n lần các lệnh trong
ngoặc vuông
Modulo m n
Hàm Modulo m n để xác định
số dư của phép chia số m cho
số n (m, n là các số tự nhiên
khác 0)
ellipse m n
Vẽ elip trục ngang m trục đứng
n (không thay đổi vị trí rùa)

Ellipse
Ví dụ: repeat
72[ellipse 250 150 rr
5 fd 5]
Ví dụ, chỉ thị: FD 50
Là một câu lệnh, trong đó FD (forward), 50 là một số và là dữ liệu của FD. Có những câu phải
được viết theo mẫu sẵn như câu lệnh rẽ nhánh, câu lệnh lặp và v.v... Còn nói chung, câu trong thủ tục
do người lập trình đặt.
Một câu được gọi là đúng văn phạm khi được viết đúng cú pháp và chương trình thực hiện
được. Cú pháp được xác lập trước cho từng từ gốc.
3. Định nghĩa thủ tục.

Thủ tục với tư cách thuật ngữ tin học có nghĩa là chương trình con. Nhưng với LOGO, với kiểu
cấu trúc theo môđun triệt để phân tán, thì thủ tục cũng là chương trình. Mỗi thủ tục bao gồm 3 bộ
phận:
• Mở đầu (to)
• Thân
• Kết thúc (end)
5


MSWLOGO

Mở đầu bao giờ cũng bắt đầu bằng từ gốc TO. Sau TO là tên thủ tục. Tên thủ tục do người lập
trình đặt bằng một từ. Đó là từ không có dấu nháy kép ở đầu. Sau tên thủ tục có thể có dữ liệu của tên
ấy. Nếu có thì dữ liệu cũng được đặc trưng bằng tên, tức bằng một từ có dấu (:) ở đầu. Có thể có một
hay nhiều dữ liệu. Sau dữ liệu là sang dòng.
Thân thủ tục bao gồm các câu lệnh. Các câu lệnh sẽ xác lập nội dung và chức năng của thủ tục.
Thân có thể chứa nhiều câu, miễn mỗi câu không quá 248 ký tự, kể cả dấu cách. Khi thân được xác lập
xong phải sang dòng.
Kết thúc chỉ gồm mỗi từ gốc END đứng ở dầu dòng. Đó là quy định nghiêm ngặt.
Ví dụ ta muốn vẽ một hình vuông ta có thể thực hiện lần lượt từng lệnh vào cửa sổ lệnh như
sau:
FD 100 RT 90
FD 100 RTI 90
FD 100 RT 90
FD 100 RT 90
Hoặc FD 100 RT 90 FD 100 RTI 90 FD 100 RT 90 FD 100 RT 90
Hoặc ta có thể lập thủ tục vẽ một hình vuông mà ta cũng muốn đặt tên là HINHVUONG, thì
thủ tục có tên HINHVUONG sẽ có dạng như sau:
Mở đầu
TO HINH VUONG

Thân
FD 100 RT 90
FD 100 RTI 90
FD 100 RT 90
FD 100 RT 90
Kết thúc
END
Trong thủ tục hình vuông ta có:
TO và END là hai từ gốc đặc biệt, chỉ dùng vào việc mở đầu và kết thúc thủ tục.
FD và RT (ý nghĩa: rùa bước tới và rùa quay phải) là hai từ gốc, sẽ điều khiển Rùa vẽ nên hình
vuông, tức xác lập nội dung và chức năng cho thủ tục HINHVUONG. 100 và 90 là dữ liệu của FD và
RT. Khi ta viết FD 100 hay RT 90 là viết theo cú pháp đã quy định là FD n, RT m, với n, m là các một
số. Tên HINHVUONG do ta đặt nhưng phải tuân thủ một số quy định sau:
* Tên thủ tục phải là một từ, ví dụ ta không thể viết HINHVUONG thành HINH VUONG,
nghĩa là thành hai từ.
* Tên thủ tục không được trùng với tên từ gốc. Nếu trùng chương trình sẽ thông báo lỗi (ở chế
độ trực tiếp).
* Tên thủ tục không được trùng với tên thủ tục khác đã có mặt trong thời gian làm việc. N ếu
trùng, máy sẽ từ chối (ở chế độ trực tiếp).
* Khi được định nghĩa tên thủ tục thì nó biến thành tên từ gốc tiện ích và ta có thể dùng nó như
từ gốc.
Với thủ tục HINHVUONG trên có thẻ dùng tham số như sau:
Mở đầu
TO DAGIAC :canh :goc
Thân
REPEAT :goc[FD :canh RT 360/:goc]
Kết thúc
END
Với thủ tục này ta gọi lệnh “DAGIAC 100 4” thỉ sẽ vẽ được hình vuông cạnh 100; nếu sử dụng
lệnh “DAGIAC 200 5” thì vẽ được một ngũ giác đều cạnh 200; …

Đến đây ta có thể coi như đã tóm tắt xong phần văn phạm. Như vậy là cực kỳ đơn giản. Tuy
nhiên khi ứng dụng sẽ có nhiều chi tiết được giải trình dần và sẽ quen dần.
4. Sử dụng biến trong MSWLogo:
4.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 đơn giản nhất: Dùng biến để đảm bảo tính tổng
quát của dạng bài toán. Sau này khi sử dụng thành thạo, ta sẽ còn nhiều trường hợp khác cũng phải
dùng đến biến.
4.2. Cách khai báo biến trong thủ tục:
a) Đối với các biến nhận giá trị trực tiếp từ bên ngoài:
6


MSWLOGO

Trong bài toán tính số kẹo kể trên, các biến a, b và c sẽ đư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:
Ví dụ: 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. Hỏi Mai còn lại
mấy cái kẹo?(a ≥ b + 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á 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 kẹo 20 5 3. Khi đó các biến a, b, c sẽ lần lượt nhận giá trị là 20, 5 và 3 và thực hiện tính
kết quả.
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 khai báo theo cú pháp

sau:
Make “<Tên _biến> <biểu _thức>
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, đố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 (“) 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ế.
3
Ví dụ: Một hình chữ nhật có chu vi là M cm. Biết rằng chiều rộng bằng
chiều dài. Hãy tính
4
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) × 2 = M ⇒ a + b = M/2
3
3
Mà b = × a ⇒ a + × a = M/2 ⇒ 7 × a = M × 4
4
4
Tức là:
a = (M × 4)/7
b=M-a
Gọi S là diện tích của hình chữ nhật, ta có S = a × b.
Ta viết thủ tục như sau:
To dientich :M
CS
Make “a (:M*4)/7
Make “b :M - :a
Make “S :a * :b
RT 90 Label [Dien tich hinh chu nhat la: ]
PU FD 250 PD Label :S

End
IV. CẤU TRÚC RẺ NHÁNH
1) Câu lệnh IF:
Nếu điều kiện (logic) được thỏa mãn thì các lệnh 1, 2,…
lần lượt được thực hiện còn nếu không thỏa thì thôi
không làm gì cả.
S
Cú pháp:
IF <điều_kiện> [Lệnh 1, Lệnh 2, …]
§ iÒu kiÖn

§
Lªnh 1
LÖnh 2 ...

Câu lệnh này được MSWLogo thực hiện như sau:
Nếu điều kiện Đúng thì lệnh 1, 2, … được thực hiện, còn
nếu điều kiện Sai thì không làm gì cả.

7


MSWLOGO

Ví dụ: Hãy vẽ một đa giác có N cạnh, chiều dài mỗi cạnh là M bước rùa với số cạnh lớn nhất là 10.
To vedagiac :M :N
CS
IF :N < 11 [DAGIAC :M :N]
End
2) Gộp nhiều điều kiện:

Hãy xem lại ví dụ trên, 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 kiểm tra điều kiện không vượt quá
10, ta còn phải kiểm tra xem số đó có lớn hơn 2 hay không? Trong MSWLogo có sử dụng một số hàm
để gộp các điều kiện như sau:
a) Hàm And
Cú pháp: And (điều_kiện 1) (điều_kiện 2)…
Hàm sẽ xét các điều kiện và chỉ kết quả Đúng khi tất cả các điều kiện đều thỏa mãn (Đúng).
Chỉ cần một điều kiện không thỏa mãn (Sai) thì hàm sẽ cho kết quả Sai.
Như vậy, ví dụ trên phải sửa lại chính xác như sau:
to vedagiac :M :N
CS
IF and (:N < 11) (:N >2) [DAGIAC :M :N]
end
b) Hàm OR
Cú pháp: OR (điều_kiện 1) (điều_kiện 2)…
Ngược lại với hàm And, hàm sẽ xét các điều kiện và cho kết quả Đúng nếu chỉ cần 1 điều kiện
thỏa mãn (Đúng). Chỉ khi nào tất cả các điều kiện đều không thỏa mãn (Sai) thì hàm sẽ cho kết quả
Sai.
3) Về so sánh trong các biểu thức logic:
Về cơ bản MSWLogo vẫn có các phép so sánh như các ngôn ngữ lập trình khác như so sánh
bằng (=), so sánh lớn hơn (>), so sánh nhỏ hơn (<),…
Riêng phép so sánh tuy nhiên, do phần mềm sử dụng mã nguồn mở nên mỗi nhà phát triển lại
theo một hướng khác nhau. Cụ thể là phép so sánh “Khác”.
Với FMS Logo, phép so sánh “Khác” có thể dùng cặp toán tử “nhỏ lớn” (<>), tuy nhiên trong
MSWLogo lại không cho dùng toán tử này.
Để giải quyết vấn đề, ta dùng toán tử “=” hoặc hàm “Bằng” – EQUALP.
a) Cú pháp: NOT <A> = <B> (trong đó <A>, <B> là hằng hoặc biến)
Ý nghĩa:
Nếu đẳng thức A = B là sai thì cho kết quả TRUE ngược lại cho kết quả FALSE.
Ví dụ: Not 1 = 2 thì sẽ cho kết quả là: “You don't say what to do with true”.

Not 1 = 1 thì sẽ cho kết quả là: “You don't say what to do with false”.
Show Not 1 = 2 sẽ cho kết quả là: “true”.
Show Not 1 = 1 sẽ cho kết quả là: “false”.
b) Cú pháp: EQUALP <A> <B> (trong đó <A>, <B> là hằng hoặc biến)
Ý nghĩa:
Hàm trả về kết quả là TRUE nếu <A> = <B> đúng, ngược lại kết quả là FALSE.
Nên cú pháp so sánh khác nhau là: NOT EQUALP <A> <B>
Ý nghĩa:
Hàm trả về kết quả là TRUE nếu <A> khác <B> đúng, ngược lại kết quả là
FALSE.
Ví dụ: Not Equalp 1 2 thì sẽ cho kết quả là: “You don't say what to do with true”.
Not Equalp 1 1 thì sẽ cho kết quả là: “You don't say what to do with false”.
Show Not Equalp 1 2 thì sẽ cho kết quả là: “true”.
Show Not Equalp 1 1 thì sẽ cho kết quả là: “false”.
3) Câu lệnh Ifelse:

8


MSWLOGO

§ iÒu kiÖn

S

Lªnh a
LÖnh b ...

§
Lªnh 1

LÖnh 2 ...

Nếu điều kiện (logic) được thỏa mãn thì các lệnh 1, 2,…
lần lượt được thực hiện còn nếu không thỏa thì các lệnh
a, b, … lần lượt được thực hiện.
Cú pháp: IFELSE <điều_kiện> [Lệnh 1, Lệnh 2, …]
[Lệnh a, Lệnh b, …]
Câu lệnh này được MSWLogo thực hiện như sau:
Nếu điều kiện Đúng thì thực hiện lệnh 1, 2,… còn nếu
điều kiện Sai thì thực hiện lệnh a, b, …

Ví dụ: Hãy vẽ một đa giác có N cạnh, chiều dài mỗi cạnh là M bước rùa với số cạnh lớn nhất là 10.
to vedagiac :M :N
IFELSE and (:N < 11) (:N >2) [DAGIAC :M :N]
[LABEL [so canh khong phu hop]]
End
V. 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 90]
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
9


MSWLOGO

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 ?
1.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ụ:


10


MSWLOGO

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
to vehinhvuong
cs pd
For [I 1 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
Make “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).
2.2. Câu lệnh While:
Cú Pháp:
While [điều_kiện] [lệnh1 lênh2 …]
Ý nghĩa:
Khi nào mà điều kiện còn đúng thì còn thực hiện dãy lệnh: lệnh1 lênh2 …
Cách thực hiện vòng lặp như sau: Đầu tiên, MSWLogo sẽ kiểm tra [điều_kiện], nếu điều kiện
đúng thì lệnh1 lênh2 …đượ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
11



MSWLOGO

mản thì lệnh1 lênh2 … 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) thì dừng lại.
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 toán 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 đó sẽ 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 ?
Khi đó bài toán được giải quyết bằng cách xác định được khi kết thúc vòng lặp, 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 thì kết thúc vòng lặp.
To congw
CS
Make “S 0
Make “A 3
While [ :A < 100] [Make “S :S + :A Make “A :A + 4]
RT 90 Label :S
End
Ở 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
CS
Make “S 0
Make “A 1
While [:A < :N+1] [Make “S :S+ :A Make “A :A+1]
RT 90 Label :S
End
VI.Một số bài toán:
Bài 1: 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áp 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 gà và 34 con chó thì số chân là 140 >200 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 thì dừng lại.
to gacho
CS
Make "x 1
Make "y 35
Make "chan 2*:x + 4*:y
While [Not :chan = 100] [make "x :x + 1 make "y :y - 1 make "chan 2* :x + 4 * :y]
RT 90 Label [so ga la:] PU FD 85 Label :x FD 50 Label [so cho la:] FD 90 Label :y
End
Bài tập:
1/ Giải bài toán sau:
12


MSWLOGO


Trong giỏ vừa thỏ vừa gà
100 cái cẳng, 43 cái đầu
Hỏi có bao nhiêu gà, bao nhiêu thỏ ?
2/ Chuồn chuồn và nhện:
Chuồn chuồn và Nhệ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ò đếm đượ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ì bay, con bò
làm lão Tò vò hoa mắt và chỉ đế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 Chuồ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.
3/ Giải bài toán cổ:
Trăm trâu trăm cỏ
Trâu đứng ăn 5
Trâu nằm ă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à?
4/ Tìm số viên bi:
Việt có 20 viên bi, Nam có 8 viên bi. Cả Việt và Nam cùng cho Bình một số viên bi như nhau,
sau đó Việt lại cho Nam số viên bi đúng bằng số viên bi mà Nam hiện có, và nhận thấy rằng số bi của
Việt và Nam là bằng nhau. Hỏi cả Việt và Nam cùng cho Bình mấy viên bi?
5/ Cho dãy số 5, 8, 11, … trong đó số cuối cùng không lớn hơn 64000. Hãy tính trung bình
cộng của các số có trong dãy.
3. For
VII. BÀI TẬP TỔNG HỢP(Xem phần bài tập)
Một số lệnh cơ bản:
Lệnh
Chức năng
Ví dụ
PU

Nhấc bút, không vẽ khi di chuyển
PD
Hạ bút, vẽ khi di chuyển
SetPenSize[n n]
Chỉnh độ rộng của nét vẽ
SetPenSize[5 5]
SetPC[r g b]
Chỉnh màu cho nét vẽ
SetPC[255 0 0] nét vẽ màu đỏ
PE
Lệnh đầy đủ Penerase xóa nét vẽ khi
muốn quay về chế độ bình thường
dùng Pennormal
Fill
Tô màu ngay tại vị trí con trỏ với Setfloodcolor [255 0 255] Fill
màu nền báo trước bởi Setfloodcolor
[r g b]
FD n
Đi tới n bước
FD 100 rùa tiến 100 bước
BK n
Đi lùi lại n bước
BK 100 rùa lùi 100 bước
LT x
Quay trái x độ
LT 90 Rùa quay trái 90 độ
RT x
Quay phải x độ
RT 90 Rùa quay phải 90 độ
ARC a r

Vẽ cung tròn a độ với bán kính r, rùa ARC 90 30 Vẽ cung tròn 90 độ
đứng tại tâm cung tròn.
với bán kính 30.
ARC2 a r
Vẽ cung tròn a độ bán kính r rùa
chạy theo vòng cung.
circle :i
Circle n
Vẽ đường tròn với bán kính n
ST
Hiện rùa
HT
Ẩn rùa
CS
Xóa màn hình rùa về vị trí ban đầu.
Home
Rùa về vị trí ban đầu
Clean
Xóa màn hình rùa đứng yên vị trí
hiện tại.
Repeat n[a b c]
Lặp lại n lần công việc a, b, c
13


MSWLOGO

Wait n

Chờ n/60 giây


Wait 60 chờ 1 giây.

BÀI TẬP DÙNG LỆNH MSWLOGO VẼ HÌNH
Hãy dùng các lệnh của MSWLogo để vẽ các hình sau:
Bài 1. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai1.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 4 [FD 100 LT 90]
RT 90 PU FD 30 PD
Repeat 4 [FD 70 LT 90]
HT

Bài 2. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai2.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
RT 60
Repeat 4 [Repeat 3 [FD 60 RT 360/3] RT 360/4]
HT

Bài 3. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai3.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
REPEAT 5 [REPEAT 3 [FD 60 RT 360/3] RT 360/5]
HT

Bài 4. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file

bai4.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

14


MSWLOGO
Repeat 6 [Repeat 3 [FD 50 RT 360/3] RT 360/6]
HT

Bài 5. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như Hình 1 sau đó viết lệnh để xếp
các hình tam giác ở hình 1 xếp thành hình 2 và lưu lại với tên file bai5.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

Hình 1
Hình 2

Repeat 6[rt 30 repeat 3[fd 50 rt 360/3] rt 60 pu fd 50 lt
90 pd]

Bài 6. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai6.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
RT 45
Repeat 8[Repeat 4[FD 100 RT 90] RT 90]
Repeat 8[Repeat 4[FD 50 RT 90] RT 90]
HT


Bài 7. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai7.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

15


MSWLOGO
RT 45
Repeat 8[Repeat 4[FD 100 RT 90] RT 45]
Repeat 8[Repeat 4[FD 50 RT 90] RT 45]
HT

Bài 8. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai8.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

Repeat 6[Repeat 6[FD 50 RT 360/6] RT 360/6]
HT

Bài 9. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai9.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 12[Repeat 3[FD 100 RT 360/3] RT 360/12]
HT


Bài 10. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai10.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

16


MSWLOGO
rt 90
Repeat 3[FD 20 lt 360/3]
Repeat 3[FD 40 lt 360/3]
Repeat 3[FD 60 lt 360/3]
Repeat 3[FD 80 lt 360/3]
Repeat 3[FD 100 lt 360/3]
Repeat 3[FD 120 lt 360/3]
Repeat 3[FD 140 lt 360/3]
Repeat 3[FD 160 lt 360/3]
Repeat 3[FD 180 lt 360/3]
to tamgiac
CS
RT 90
For [i 1 9 1] [Repeat 3[FD :i*20 LT
360/3]]
HT
end

Bài 11. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai11.doc gồm:
- Hình em đã vẽ.

- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 3[LT 90 FD 50/2 RT 360/3 Repeat 4[FD 50 RT 360/3] LT 150]
HT

Bài 12. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai12.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 12[FD 80 Repeat 4[FD 20 LT 360/4] BK 80 RT 360/12]
HT
Repeat 12[fd 50 repeat 4[fd 20 rt 360/4] bk 50 rt 360/12]
HT

Bài 13. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai13.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

17


MSWLOGO
Repeat 12[Repeat 4[FD 50 RT 360/4] RT 360/12]
HT

Bài 14. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai14.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 6[Repeat 3[FD 100 RT 120]FD 50 RT 60]


Bài 15. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai15.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 3[Repeat 2[FD 20 RT 90 FD 50 RT 90] RT 90 FD
50 LT 90]FD 20 LT 90 FD 125 RT 90
Repeat 2[Repeat 2[FD 20 RT 90 FD 50 RT 90] RT 90 FD
50 LT 90]FD 20 LT 90 FD 125 RT 90
Repeat 3[Repeat 2[FD 20 RT 90 FD 50 RT 90] RT 90 FD
50 LT 90]FD 20 LT 90 FD 125 RT 90
Repeat 2[Repeat 2[FD 20 RT 90 FD 50 RT 90] RT 90 FD
50 LT 90]FD 20 LT 90 FD 100 RT 90
HT
Bài 16. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai16.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
To vehinhcn
CS PD
For [i 1 6 1][Repeat 2 [FD :i*20 RT 90 FD :i*40 RT
90]]
HT
end

Bài 17. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai17.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.


18


MSWLOGO
to vehinhvuong
cs pd RT 180
For [i 1 8 1][repeat 2[FD 15 RT 90 fd :i*15 rt
90]FD 15]
HT
End
to vehinhvuong
cs pd
For [i 1 8 1][repeat 2[FD -15 RT 90 fd :i*-15
rt 90]FD -15]
HT
end

Bài 18. Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai18.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
RT 30 Repeat 3 [ FD 100 RT 120 ] LT 30 PU FD 60 RT 90 PD Repeat 3[FD 100 RT
120]

Bài 19 . Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai19.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
RT 30 Repeat 3 [FD 100 RT 120] LT 30 PU FD 60 RT 90 PD Repeat 3[FD 100 RT 120]
LT 90 Repeat 6[BK 58 LT 60]


Bài 20 . Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai20.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
RT 18 Repeat 5 [ FD 114 RT 144 ] RT 72 Repeat 5[FD
70 LT 72]

Bài 21: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai21.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

19


MSWLOGO
HT Repeat 12[Repeat 12[FD 20 RT 360/12] RT 360/12]

Bài 22: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai22.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT RT 360/20 Repeat 5 [FD 120 RT 360/5*2]

Bài 23: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai23.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 12 [FD 50 Repeat 12 [FD 10 BK 10 RT

360/12] BK 50 RT 360/12]

Bài 24: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai24.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 18 [FD 50 Repeat 18 [FD 10 BK 10 RT
360/18] BK 50 RT 360/18]

Bài 25: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai25.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

20


MSWLOGO
HT Repeat 18 [FD 100 Repeat 18 [FD 10 BK 20 RT 360/18] BK 100 RT
360/18]

Bài 26: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai26.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 12[Repeat 4[FD 50 RT 90]FD 50 RT 360/12 ]

Bài 27: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai27.doc gồm:
- Hình em đã vẽ.

- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 8[Repeat 4[FD 100 RT 90]FD 100 RT 45 ]

Bài 28: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai28.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 10[Repeat 6[FD 30 RT 360/6]FD 50 RT 360/10 ]

Bài 29: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai29.doc gồm:
- Hình em đã vẽ.
21


MSWLOGO
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 10[Repeat 3 [ FD 30 RT 120 ]FD 30 LT 360/10]

Bài 30: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai30.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 9[PU FD 60 PD BK 40 PU BK 20 RT 360/9]

Bài 31: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai31.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 72[PU FD 100 PD BK 60 PU BK 40 RT 360/72]


Bài 32: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai32.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT REPEAT 10[REPEAT 30 [FD 2 RT 6] LT 144]

Bài 33: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai33.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

22


MSWLOGO
HT REPEAT 10[REPEAT 30 [FD 5 RT 6] LT 72]

Bài 34: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai34.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 12 [Repeat 240[FD 10 RT 15] RT 360/12]

Bài 35: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai35doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 10[FD 200 RT 108]
RT 36 FD 125 LT 36

Repeat 10[FD 120 BK 120 RT 36]
RT 36 BK 80 LT 36
Repeat 10[FD 128 RT 108]

Bài 36: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai36.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 10 [Repeat 6[FD 50 RT 60] RT 360/10]

Bài 37: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai37.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

23


MSWLOGO
Repeat 10[Repeat 5[FD 50 RT 360/5]FD 50 RT 360/10 ]

Bài 38: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai38.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
REPEAT 12 [REPEAT 6 [FD 30 RT 60] RT 360/12]

Bài 39: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai39.doc gồm:
- Hình em đã vẽ.

- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Repeat 24 [Repeat 120[fd 5 rt 15] fd 15 RT 360/24]

Bài 40: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai40.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
Perspective Repeat 72 [Circle 100 rr 5]
HT
perspective - Chuyển sang đồ hoạ 3D.
RR - rightroll - Cuộn đi một cung tròn ... độ (72 × 5 = 360) – Circle:
Đường tròn

Bài 41: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai41.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

24


MSWLOGO
HT REPEAT 30 [FD 10 Repeat 20[fd 5 RT 18] Repeat 20[FD 2 RT 18] LT 12]

Bài 42: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai42.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT LT 180 REPEAT 36 [PD Repeat 30[fd 4 RT 12] PU LT 10 FD 12]


Bài 43: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai43.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT LT 180 REPEAT 36 [PD Repeat 30[FD 10 RT 12] PU LT 10 ]

Bài 44: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai44.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 5[Rt 60 Repeat 2[FD 100 RT 60 FD 100 RT 120] RT 30 PU FD 25 LT 90 PD]

Bài 45: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai45.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.
HT Repeat 10[Rt 60 Repeat 2[FD 100 RT 60 FD 100 RT 120]
RT 30 PU FD 30 LT 90 PD]

Bài 46: Em hãy viết các câu lệnh trong chương trình MSWLogo để vẽ hình như bên cạnh và lưu lại với tên file
bai46.doc gồm:
- Hình em đã vẽ.
- Các câu lệnh của MSWLogo theo trình tự đã vẽ.

25


×