วาดรูปด้วยภาษาโลโก้ : ตอนที่ 4 – ทำซ้ำ
วาดรูปกันมาแล้ว 3 ตอน สังเกตดีๆ จะพบว่า หลายรูปมีขั้นตอนซ้ำๆ เดิมๆ เรามีวิธีเรียกคำสั่งเหล่านั้น โดยไม่ต้องพิมพ์คำสั่งเดิมๆ ซ้ำๆ ได้ครับ ด้วยคำสั่ง repeat (คราวนี้ไม่ต้อง copy + paste ให้เมื่อยมือแล้วครับ)
คำสั่งที่น้องๆ จะเจอในบทนี้คือ
คำสั่ง | ความสามารถ | ตัวอย่าง |
fd ระยะทาง | forward = เดินหน้า | fd 100 = เดินหน้า 100 pixel |
bk ระยะทาง | backward = ถอยหลัง | bk 50 = ถอยหลัง 50 pixel |
rt องศา | right turn = หมุนขวา | rt 90 = หมุนไปทางขวา 90 องศา |
lt องศา | left turn = หมุนซ้าย | lt 45 = หมุนไปทางซ้าย 45 องศา |
repeat จำนวนครั้ง [ คำสั่ง ] | repeat = ทำคำสั่งต่อไปนี้ ซ้ำ n ครั้ง | repeat 3 [ fd 100 rt 120 ]
repeat 4 [ fd 100 rt 90 ] repeat 6 [ fd 100 rt 60 ] |
cs
clean |
clear screen = ล้างหน้าจอ
clean = ล้างหน้าจอ |
|
pu
pd |
pen up = ยกปากกา
pen down = วางปากกา |
|
ht
st |
hide turtle = ซ่อนเต่าโลโก้
show turtle = แสดงเต่าโลโก้ |
หมายเหตุ: Tutorial นี้จะเขียนโปรแกรมภาษา LOGO ผ่านเว็บไซต์นี้ครับ http://www.calormen.com/jslogo/ (ขอบคุณเจ้าของเว็บไซต์มา ณ โอกาสนี้ด้วยครับ)
การทำงานของคำสั่ง repeat นั้น อยู่ในรูปแบบ
repeat จำนวนครั้ง [ คำสั่ง ] |
อธิบายง่ายๆ คือ ทำตามคำสั่ง ตามจำนวนครั้ง ที่ระบุครับ
ตัวอย่างเช่น การวาดรูปสี่เหลี่ยมจัตุรัส
fd 100 rt 90
fd 100 rt 90 fd 100 rt 90 fd 100 rt 90 |
เราสามารถใช้คำสั่ง repeat (ทำซ้ำ) ได้ดังนี้ครับ
repeat 4 [ fd 100 rt 90 ] |
เห็นไหมครับว่าคำสั่งที่เราใช้วาดรูปสี่เหลี่ยมจัตุรัส สั้นลงอย่างเห็นได้ชัดเลย
เรามาเปรียบเทียบให้เห็นกันชัดๆ อีกครั้งครับ (โปรแกรมที่ 4-1 สี่เหลี่ยมจัตุรัส)
โปรแกรมแบบปกติ | โปรแกรมที่ใช้คำสั่ง repeat |
fd 100 rt 90
fd 100 rt 90 fd 100 rt 90 fd 100 rt 90 |
repeat 4 [ fd 100 rt 90 ] |
อีกตัวอย่างหนึ่ง การวาดรูปสามเหลี่ยมด้านเท่า
rt 30
fd 100 rt 120 fd 100 rt 120 fd 100 rt 120 |
เราสามารถใช้คำสั่ง repeat (ทำซ้ำ) ได้ดังนี้ครับ
rt 30
repeat 3 [ fd 100 rt 120 ] |
เห็นไหมครับว่าคำสั่งที่เราใช้วาดรูปสามเหลี่ยมด้านเท่า สั้นลงอย่างเห็นได้ชัด และเราก็ใช้คำสั่ง repeat กับส่วนที่ต้องการทำซ้ำเท่านั้น ส่วนไหนที่ทำงานแค่ครั้งเดียว ก็ไม่ต้องใช้คำสั่ง repeat
เรามาเปรียบเทียบให้เห็นกันชัดๆ อีกครั้งครับ (โปรแกรมที่ 4-2 สามเหลี่ยมด้านเท่า)
โปรแกรมแบบปกติ | โปรแกรมที่ใช้คำสั่ง repeat |
rt 30
fd 100 rt 120 fd 100 rt 120 fd 100 rt 120 |
rt 30
repeat 3 [ fd 100 rt 120 ] |
เพื่อทำความเข้าใจคำสั่ง repeat (ทำซ้ำ) ให้มากขึ้น เราจะมาวาดรูปกันอีก 3 รูปครับ
รูปที่ 1
โปรแกรมที่ 4-3 หกเหลี่ยม
โปรแกรมแบบปกติ | โปรแกรมที่ใช้คำสั่ง repeat |
lt 60
fd 100 rt 60 fd 100 rt 60 fd 100 rt 60 fd 100 rt 60 fd 100 rt 60 fd 100 rt 60 |
lt 60
repeat 6 [ fd 100 rt 60 ] |
จากโปรแกรมที่ 4-3 หกเหลี่ยม เราจะมาอธิบายการวาดรูปนี้แต่ละขั้นตอนอย่างละเอียดกันครับ
- lt 60 = หมุนซ้าย 60 องศา
- fd 100 = เดินหน้า 100 pixel | rt 60 = หมุนขวา 60 องศา
(ทำซ้ำ 6 ครั้ง)
รูปที่ 2
โปรแกรมที่ 4-4 บันได
โปรแกรมแบบปกติ | โปรแกรมที่ใช้คำสั่ง repeat |
fd 50 rt 90 fd 50 lt 90
fd 50 rt 90 fd 50 lt 90 fd 50 rt 90 fd 50 lt 90 fd 50 rt 90 fd 50 lt 90 |
repeat 4 [ fd 50 rt 90 fd 50 lt 90 ] |
จากโปรแกรมที่ 4-4 บันได เราจะมาอธิบายการวาดรูปนี้แต่ละขั้นตอนอย่างละเอียดกันครับ
- lt 60 = หมุนซ้าย 60 องศา
- fd 50 = เดินหน้า 50 pixel | rt 90 = หมุนขวา 90 องศา | fd 50 = เดินหน้า 50 pixel | lt 90 = หมุนซ้าย 90 องศา
(ทำซ้ำ 4 ครั้ง)
รูปที่ 3
โปรแกรมที่ 4-5 ดอกจัน (asterisk)
โปรแกรมแบบปกติ | โปรแกรมที่ใช้คำสั่ง repeat |
fd 100 bk 100 rt 45
fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 fd 100 bk 100 rt 45 |
repeat 8 [ fd 100 bk 100 rt 45 ] |
จากโปรแกรมที่ 4-5 ดอกจัน (asterisk) เราจะมาอธิบายการวาดรูปนี้แต่ละขั้นตอนอย่างละเอียดกันครับ
- fd 100 = เดินหน้า 100 pixel | bk 100 = ถอยหลัง 100 pixel | rt 45 = หมุนขวา 45 องศา
(ทำซ้ำ 8 ครั้ง)
คำสั่ง repeat ช่วยให้เราเขียนโปรแกรมได้ง่ายและสะดวกขึ้นครับ แต่จริงๆ แล้ว เราไม่จำเป็นต้องใช้คำสั่ง repeat เสมอไปก็ได้ครับ ถ้าเราถนัดการใช้คำสั่งแบบธรรมดา ก็สามารถวาดรูปออกมาได้เหมือนกัน (แต่อาจจะเหนื่อยหน่อยนะครับ)
สามารถติดตามต่อตอนไปได้ที่นี่ครับ //karnlab.com/tag/ภาษาโลโก้
ลองวาดดู
ก่อนจากกัน มีโจทย์ให้น้องๆ ไปฝึกวาดรูปกันดังนี้ครับ (ลองวาดเองก่อนดูเฉลยนะครับ)
โจทย์ 4-1 แปดเหลี่ยม
โจทย์ที่ 4-2 สี่เหลี่ยม 4 รูป
โจทย์ที่ 4-3 ดาว
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
เฉลย
(คำตอบนี้เป็นแค่หนึ่งในวิธีที่ถูกต้อง อาจมีคำตอบอื่นๆ ที่ได้ผลลัพธ์เหมือนกันนะครับ)
repeat 8 [ fd 100 rt 45 ] |
โจทย์ 4-1
repeat 4 [ repeat 4 [ fd 50 rt 90 ] rt 90 fd 50 lt 90 ] |
โจทย์ 4-2
rt 18
repeat 5 [ fd 200 rt 144 ] |
โจทย์ 4-3