Prac13 ตอนที่ ๑ โครงสร้างทำซ้ำซ้อนกัน (Nested loop) --------------------------------------- โปรแกรมพิมพ์สูตรคูณมาตรา m - n เป็นคัวอย่างที่ดีของ loop ซ้อน ที่การทำงานของ loop ใน ขึ้นอยู่กับตัวแปรของ loop นอก แบบฝึกหัดในการทำ loop ซ้อนที่ดีคือการพิมพืเครื่องหมายดอกจันหรือ "ดาว" (*) เป็นรูปสามเหลี่ยมในลักษณะต่างๆ ที่ง่ายที่สุด เป็นโปรแกรมพิมพ์ดาว n บรรทัด บรรทัดที่หนึ่ง มีดาว 1ดวง, บรรทัดที่สองมีดาว 2 ดวง, ... , บรรทัดที่ n มีดาว n ดวง เช่น $ star1.sh 3 * ** *** $ star1.sh 4 * ** *** **** $ star1.sh 5 * ** *** **** ***** โปรแกรมเฉพาะส่วนของการทำงานหลัก (ไม่รวมการตรวจสอบความสมเหตุสมผลของข้อมูล และการจัดการความผิดพลาด) ใช้ while loop ซ้อนกันสองชั้น ในกรณีของ shell script ไม่สามารถใช้ for loop ได้ เพราะไม่สามารถใช้ตัวแปรในโครงสร้าง โปรแกรมเป็นดังนี้ $ cat star1.sh #!/bin/bash row=1 # จำนวนบรรทัดที่ต้องการพิมพ์กำหนดใน $1 while [ $row -le $1 ]; do # บรรทัดแรก - บรรทัดสุดท้าย col=1 while [ $col -le $row ]; do # จำนวน "ดาว" ในแต่ละบรรทัดขึ้นอยู่กับหมายเลขบรรทัด echo -n "*" col=$(($col + 1)) done echo row=$(($row + 1)) done จงศึกษา ทดลอง และทำความเข้าใจ จากนั้นจงเลียนแบบการทำงาน เขียนโปรแกรมชื่อ star2.sh, star3.sh และ star4.sh เพื่อพิมพ์ "ดาว" ตามรูปแบบต่อไปนี้ตามลำดับ star2.sh star3.sh star4.sh * ***** ***** ** **** **** *** *** *** **** ** ** ***** * * ตอนที่ ๒ ศึกษาตัวอย่างการเขียนโปรแกรมตรวจสอบปีอธิกสุรทิน ------------------------------------------------ ปฏิบัติการครั้งที่ 11 (Prac11.txt) กำหนดให้เขียนโปรแกรมตรวจสอบปี ค.ศ. ว่าเป็นปีอธิกสุรทินหรือไม่ เป็นแบบฝึกหัดการใช้งานโครงสร้าง if ที่ดี โปรแกรมนี้มีลักษณะหลายอย่างที่น่าสนใจ หากเขียนไม่ได้หรือยังไม่ได้เขียน ศึกษาวิธีคิด วิเคราะห์ การเขียน และการปรับปรุงโปรแกรมได้จากแฟ้ม LeapYear.txt ทำความเข้าใจให้ดี เพื่อใช้เป็นแนวทางในตอนที่ ๓ ต่อไป ตอนที่ ๓ อนุกรมหลายชั้น -------------------- อนุกรมหลายชั้น คืออนุกรมทีมีความแตกต่างระหว่างสมาชิกเป็นอนุกรมด้วย จงพิจารณาอนุกรมต่อไปนี้ อนุกรม: 17, 20, 28, 45, 75, 122, ... ความสัมพันธ์ระหว่างสมาชิกของอนุกรมเป็นไปตามแผนภาพดังนี้ 17 20 28 45 75 122 ... \ / \ / \ / \ / \ / \ / +3 +8 +17 +30 +47 ... \ / \ / \ / \ / \ / +5 +9 +13 +17 ... \ / \ / \ / \ / +4 +4 +4 +4 ... # ค่าคงที่ 4 งานนี้อาจดูไม่ยากนัก หากนั่งหน้าเครื่องแล้วพิมพ์โปรแกรมแบบลองผิดลองถูก ส่วนใหญ่จะพบว่าทำอย่างไร โปรแกรมก็ทำงานไม่ถูกต้องสักที หากเกิดเหตุการณ์เช่นนี้ ให้เลิกใช้คอมพิวเตอร์ ลองคิด วิเคราะห์ปัญหา เขียนด้วยมือโดยใช้กระดาษดินสอ เมื่อเข้าใจชัดเจนดีแล้ว ค่อยทดสอบด้วยคอมพิวเตอร์ พึงระลึกไว้เสมอว่า โปรแกรมที่ซับซ้อน จำเป็นต้องมีการคิด วิเคราะห์ ทำความเข้าใจให้ชัดเจน จึงจะสามารถทำให้โปรแกรมทำงานตามที่ต้องการได้