Category Archives: programming

วิทย์ม.ต้น: รู้จักกับวิธีเรียงลำดับข้อมูล (Sorting) นั่งปรับปรุงและ debug โปรแกรม Scratch กันต่อ

วันนี้เด็กม.3 ได้รู้จักวิธีเรียงลำดับข้อมูลกันครับ  วิธีมีหลากหลาย แต่ละวิธีก็ใช้เวลาต่างๆกันเมื่อเรียงลำดับข้อมูลแบบต่างๆ ตอนแรกผมถามเด็กว่าถ้ามีหนังสือเยอะๆแล้วจะเรียงตามลำดับชื่อหนังสือจะทำอย่างไร ปรากฎว่าเด็กๆคิดสักพักแล้วก็บอกวิธีอยู่ในตระกูล Radix Sort คือกรุ๊ปตามตัวอักษรตัวแรกว่าอยู่ในกลุ่ม ก-ฮ, A-Z ซะเลย แล้วทำอย่างเดิมในแต่ละกรุ๊ปตัวอักษรแต่ใช้ตัวอักษรตัวถัดๆมาในชื่อ (เหมือน Recursive Radix Sort)

ต่อมาเด็กๆได้ดูคลิปอธิบาย Bubble Sort, Insertion Sort, และ Quick Sort ใน TED-ED ได้รู้จักวิธีแบ่งปัญหาให้เล็กลงแล้วแก้ด้ววิธีเดิม (Divide and Conquer + Recursion) จาก Quick Sort:

เด็กๆได้ดูภาพเคลื่อนไหวเปรียบเทียบวิธีเรียงลำดับแบบต่างๆที่เพจ Sorting Algorithms Animations ครับ เข้าไปกดดูกันนะครับ หน้าตาจะเป็นประมาณนี้ครับ:

จากเว็บ Sorting Algorithms Animations https://www.toptal.com/developers/sorting-algorithms
จากเว็บ Sorting Algorithms Animations https://www.toptal.com/developers/sorting-algorithms

มีคนทำเรื่อง Sorting ไว้ด้วยภาษา Scratch เยอะเหมือนกันครับ กดเข้าไปดูได้ที่ Sorting Algorithms ครับ

จากนั้นเด็กๆทั้งม.1, 2, 3 ก็นั่งเขียนโปรแกรม Scratch กันต่อครับ พยายามทำให้เกมต่างๆสนุกขึ้น และมีบั๊กน้อยลง พยายามจัดการโปรแกรมว่าไม่ควรเขียนอะไรซ้ำกัน ถ้าจะทำอะไรควรทำจากที่เดียว จะได้รู้แน่นอนว่าเกิดอะไรขึ้นในโปรแกรมครับ

วิทย์ม.ต้น: รู้จักการทำ Trail (ลายวิ่งตาม) ใน Scratch, นั่ง debug โปรแกรมกัน

วันนี้เด็กๆมัธยมต้นก็เขียนโปรแกรม Scratch ของเขากันต่อนะครับ วันนี้รู้จักเทคนิคเพิ่มเติมที่จะทำให้เมื่อตัวละครเคลื่อนไหวจะมีเงาๆเป็นลายวิ่งตาม หน้าตาประมาณนี้ครับ:

มาจาก https://scratch.mit.edu/projects/58897590/#editor ครับ
มาจาก https://scratch.mit.edu/projects/58897590/ ครับ  กดเข้าไปดูโค้ดได้ครับ

วิธีทำก็ทำประมาณนี้ครับ:

เข้าไปดูวิธีได้ที่ https://scratch.mit.edu/projects/58897590/#editor และอ่านวิธีอื่นๆได้ที่ https://en.scratch-wiki.info/wiki/Making_a_Trail ครับ

อันนี้เป็นการใช้เทคนิคในโปรเจ็คผมเองครับ อยู่ที่ https://scratch.mit.edu/projects/227691459/ 

โปรเจ็คจำลองการเคลื่อนที่ของดาวหางที่ถูกแรงโน้มถ่วงของดวงอาทิตย์ดูดครับ โค้ดอยู่ที่ https://scratch.mit.edu/projects/227691459/

โปรเจ็คจำลองการเคลื่อนที่ของดาวหางที่ถูกแรงโน้มถ่วงของดวงอาทิตย์ดูดครับ โค้ดอยู่ที่ https://scratch.mit.edu/projects/227691459/
โปรเจ็คจำลองการเคลื่อนที่ของดาวหางที่ถูกแรงโน้มถ่วงของดวงอาทิตย์ดูดครับ โค้ดอยู่ที่ https://scratch.mit.edu/projects/227691459/

เวลาที่เหลือเราก็มานั่งรีวิวความคืบหน้าของโปรแกรมของเด็กๆแต่ละคน ช่วยกัน debug และหาวิธีแก้ปัญหาต่างๆครับ

 

วิทย์ม.ต้น: เขียน Scratch ต่อ, หัดใช้ Clone และ Broadcast

วันนี้เด็กๆม.ต้นก็เขียนโปรแกรม Scratch กันต่อนะครับ วันนี้ผมแนะนำเด็กๆให้รู้จักคำสั่งพวก Clone และ Broadcast

เราใช้คำสั่ง create clone of … เพื่อสร้างตัวละครใน Scratch เพิ่มขึ้น ตัวที่ถูกสร้างเรียกว่าเป็น clone (โคลน) ใช้คำสั่ง when I start as a clone เพื่อให้รู้ว่าตัวที่เป็นโคลนควรจะทำอะไรบ้าง ใช้คำสั่ง delete this clone เพื่อลบโคลนให้หายไปครับ

สามคำสั่งหลักเกี่ยวกับ Clone ครับ
สามคำสั่งหลักเกี่ยวกับ Clone ครับ

ตัวอย่างเช่น https://scratch.mit.edu/projects/226828866/ เราสร้างโคลนแมวออกมาหลายๆตัว โดยที่โคลนแต่ละตัวก็จะร้องเหมียวแล้วก็หายไปครับ:

ประโยชน์มันก็เช่นถ้าเราต้องการกองทัพหุ่นยนต์ในเกมของเรา เราก็สร้างตัวละครหุ่นยนต์ขึ้นมาตัวหนึ่งก่อน แล้วสร้างโคลนขึ้นมา 50 ตัวโดยโคลนแต่ละตัวก็มีโค้ดว่าพวกมันควรปฏิบัติตัวอย่างไรครับ

ให้เด็กๆไปดูเพิ่มเติมที่  https://scratch.mit.edu/projects/10170600/ และที่ https://en.scratch-wiki.info/wiki/Cloning ครับ

เราใช้คำสั่ง broadcast คู่กับ when I receive… คือให้ตัวละครป่าวประกาศข้อความบางอย่างด้วยคำสั่ง broadcast แล้วตัวละครอื่นๆใช้คำสั่ง when I receive คอยฟังข้อความที่อยากฟัง ถ้าได้ยินก็ทำงานต่อไปครับ ตัวอย่างเช่นที่ https://scratch.mit.edu/projects/226829837/ แมวร้องเหมียว แล้ว broadcast ว่าให้เป็ดร้องได้ เป็ดได้ยินดังนั้นก็ร้องก้าบแล้ว broadcast ว่าให้แมวร้องได้ แมวได้ยินดังนั้นก็ร้องเหมียว แล้วแล้ว broadcast ว่าให้เป็ดร้องได้ เป็นอย่างนี้ไปเรื่อยๆครับ

อีกตัวอย่างก็เช่นโค้ดที่ผมใช้จำลองการเคลื่อนที่ของดาวสองดวงเมื่อมีแรงโน้มถ่วงระหว่างกันที่ https://scratch.mit.edu/projects/225919898/
ที่ผมใช้คำสั่ง broadcast StartSimulation เพื่อประกาศให้ดาวต่างๆรู้ว่าจะเริ่มทำการจำลองการเคลื่อนที่ล่ะนะ:

broadcast StartSimulation เพื่อประกาศให้ดาวต่างๆรู้ว่าจะเริ่มคำนวณการเคลื่อนที่ล่ะนะ
broadcast StartSimulation เพื่อประกาศให้ดาวต่างๆรู้ว่าจะเริ่มคำนวณการเคลื่อนที่ล่ะนะ

ดาวต่างๆก็คอยฟังประกาศ ถ้ามีประกาศว่า StartSimulation ก็เตรียมตัววาดวงโคจร:

ถ้าดาวได้ยินว่า StartSimulation ก็เตรียมวาดวงโคจรได้
ถ้าดาวได้ยินว่า StartSimulation ก็เตรียมวาดวงโคจรได้

หรือเมื่อแก้สมการอนุพันธ์การเคลื่อนที่ของดาวจากแรงโน้มถ่วงเสร็จ ได้ตำแหน่งใหม่ของดาว ก็ broadcast UpdatePositions เพื่อประกาศให้ดาวขยับตัวไปตำแหน่งใหม่ได้:

เมื่อแก้สมการอนุพันธ์การเคลื่อนที่ของดาวจากแรงโน้มถ่วงเสร็จ ได้ตำแหน่งใหม่ของดาว ก็ broadcast UpdatePositions เพื่อประกาศให้ดาวขยับตัวไปตำแหน่งใหม่ได้
เมื่อแก้สมการอนุพันธ์การเคลื่อนที่ของดาวจากแรงโน้มถ่วงเสร็จ ได้ตำแหน่งใหม่ของดาว ก็ broadcast UpdatePositions เพื่อประกาศให้ดาวขยับตัวไปตำแหน่งใหม่ได้

เมื่อดาวได้ยินประกาศที่ว่า UpdatePositions ดาวก็ขยับไปตำแหน่งใหม่ที่คำนวณได้มา:

เมื่อดาวได้ยินประกาศ UpdatePositions ดาวก็ขยับไปตำแหน่งใหม่ที่คำนวณได้มา
เมื่อดาวได้ยินประกาศ UpdatePositions ดาวก็ขยับไปตำแหน่งใหม่ที่คำนวณได้มา

สำหรับเรื่อง Broadcast ถ้ายังไม่เข้าใจ ให้เด็กๆไปดูเพิ่มเติมที่ https://www.youtube.com/watch?v=BnYbOCiudyc และ https://en.scratch-wiki.info/wiki/Broadcast ครับ