การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design SCC : Suthida Chaichomchuen std@kmitnb.ac.th
Structured Design มักใช้ในงานที่มีความซับซ้อนมาก วัตถุประสงค์เพื่อลดความยาวของผังงาน หรือซูโดโค้ดที่มีความยาวมาก ใช้หลักการแบ่งงานออกเป็นส่วนหลัก ๆ จากนั้นจึงแบ่งส่วนหลักออกเป็นย่อย ๆ ลงไปอีกชั้นหนึ่ง
Structured Design งานย่อยในขั้นสุดท้ายที่ได้จะเรียกว่า ปัญหา ย่อย หรือมีชื่อทั่วไปคือ งานย่อย (subtask) ฟังก์ชั่น (function) โมดูล (module)
Top-Down Design เป็นการออกแบบโปรแกรมแบบโครงสร้างชนิดหนึ่ง ใช้หลักการของการแบ่งปัญหาออกเป็นส่วนหลัก ๆ แล้วจึงแยกออกเป็นโมดูลย่อย ๆ อีกครั้ง มีขั้นตอนการออกแบบ 6 ขั้นตอน
การออกแบบเป็นโมดูล …………….. Call SubA Return โปรแกรมหลัก SubA
การออกแบบเป็นโมดูล …………….. Call subX Call subY Call subX1 Return โปรแกรมหลัก SubX SubY SubX1
Top-Down Design มีขั้นตอนการออกแบบ 6 ขั้นตอน 1. กำหนดปัญหา 2. แบ่งส่วนของงานออกเป็นงานย่อย 3. เขียนแผนภาพลำดับชั้น 4. กำหนดโมดูลหลักในรูปของซูโดโค้ด 5. พัฒนาซูโดโค้ดของทุกโมดูล 6. ตรวจสอบผลของอัลกอริทึมที่ได้
1. กำหนดปัญหา โดยการแบ่งปัญหาออกเป็น 3 ส่วน ส่วนการรับข้อมูล ส่วนการประมวลผล ส่วนการแสดงผลลัพธ์
2. แบ่งส่วนของงานออกเป็นงานย่อย นำส่วนงานหลักแต่ละส่วนออกเป็นงานย่อย หรือที่เรียกว่า โมดูล แต่ละโมดูลจะถูกกำหนดขึ้นมาเพื่อให้ทำงานเฉพาะอย่าง และถือเป็นส่วนหนึ่งของงานหลัก
3. เขียนแผนภาพลำดับชั้น เขียนแผนภาพแบบลำดับชั้น (Hierarchy chart) เพื่อให้เห็นถึงโครงสร้างรวมของโปรแกรม เพื่อแสดงถึงความสัมพันธ์ของโมดูลหลักกับโมดูลย่อย
4. กำหนดโมดูลหลักในรูปของซูโดโค้ด กำหนดอัลกอริทึมของโมดูลหลักในรูปของซูโดโค้ด บางครั้งอาจต้องมีการกำหนดค่าเริ่มต้นของตัวแปร หรืองานบางอย่างก่อนที่จะเข้าขั้นตอนการวนซ้ำ หรือหลังจากออกจากขั้นตอนการวนซ้ำ
5. พัฒนาซูโดโค้ดของทุกโมดูล พัฒนาซูโดโค้ดของทุกโมดูลย่อยที่อยู่ในแผนภาพลำดับชั้น การพัฒนาซูโดโค้ดจะเสร็จสิ้นลงได้ ถ้าเขียนซูโดโค้ดทุกโมดูลได้สำเร็จ
6. ตรวจสอบผลของอัลกอริทึมที่ได้ กำหนดตัวอย่างชุดข้อมูล และนำไปแทนค่าตัวแปรในอัลกอริทึม เพื่อตรวจสอบความถูกต้องในระดับแรกก่อนที่จะพัฒนาเป็นโปรแกรมต่อไป
โครงสร้างการแก้ปัญหาการหาพื้นที่วงกลม จงสร้างโปรแกรมคำนวณพื้นที่วงกลม โดยรับค่ารัศมีจากแป้นพิมพ์ และแสดงค่าพื้นที่ออกทางจอภาพ ปัญหาพื้นที่วงกลม แสดงผล คำนวณพื้นที่ รับข้อมูล รัศมี พื้นที่=พาย*รัศมี พื้นที่วงกลม
ข้อดีของ Top-Down Design ทำให้การวิเคราะห์และทำความเข้าใจในปัญหาง่ายขึ้น การปรับปรุงแก้ไขโปรแกรมทำได้ง่าย เพียงแก้ไขที่โมดูลเท่านั้น ทดสอบวิธีแก้ปัญหาได้ง่าย
ตัวอย่างที่ 1 จงออกแบบอัลกอริทึมให้แสดงข้อความพร้อมที่จะรับอักษรสามตัว และเรียงลำดับอักษรสามตัวนั้นจากน้อยไปหามาก แล้วแสดงผลการเรียงลำดับบนจอภาพและรอรับอักษรชุดใหม่ ทำเช่นนี้เรื่อยไปจนกว่าชุดอักษรที่เข้ามามีค่าเป็น ‘xxx’ จึงเลิกการทำงาน
วิธีทำ : กำหนดปัญหา ส่วนที่ 1 รับตัวอักษร ส่วนที่ 2 เรียงลำดับตัวอักษร ส่วนที่ 3 แสดงผลการเรียงลำดับ
วิธีทำ : แบ่งส่วนของงานออกเป็นงานย่อย ส่วนที่ 1 รับตัวอักษร รับตัวอักษรตัวที 1, 2 และ 3 ตรวจสอบว่าแต่ละตัวเป็น ‘x’ หรือไม่ วนรับจนจบเงื่อนไข
แบ่งส่วนของงานออกเป็นงานย่อย ส่วนที่ 2 เรียงลำดับตัวอักษร เปรียบเทียบตัวที่ 1 กับตัวที่ 2 เปรียบเทียบตัวที่ 2 กับตัวที่ 3 เปรียบเทียบตัวที่ 1 กับตัวที่ 2 ซ้ำ ส่วนที่ 3 แสดงผลการเรียงลำดับ แสดงผลตัวอักษรที่ 1, 2 และ 3
วิธีทำ : เขียนแผนภาพลำดับชั้น ปัญหาเรียงตัวอักษร แสดงตัวอักษร จัดเรียงจากน้อยไปมาก รับตัวอักษร เปรียบเทียบกับ ‘xxx’ จับคู่ตัวอักษรเปรียบเทียบ
วิธีทำ : กำหนดโมดูลหลักในรูปของซูโดโค้ด Begin Call Input_Characters Call Sort_Characters Call Output_Characters End
วิธีทำ : พัฒนาซูโดโค้ดของทุกโมดูล Call Input_Characters Read char1, char2, char3 While (char1<>‘x’) AND (char2<>‘x’) AND (char3<>‘x’) DO . . . ENDDO
พัฒนาซูโดโค้ดของทุกโมดูล Call Sort_Characters IF (char1>char2) THEN temp=char1 char1=char2 char2=temp ENDIF
พัฒนาซูโดโค้ดของทุกโมดูล IF (char2>char3) THEN temp=char2 char2=char3 char3=temp ENDIF
พัฒนาซูโดโค้ดของทุกโมดูล Call Output_Characters Write char1, char2, char3
วิธีทำ : ตรวจสอบผลของอัลกอริทึมที่ได้ ป้อนชุดตัวอักษรเช่น ‘x’ ‘a’ ‘m’ สังเกตว่าผลที่ได้คือ amx หรือไม่? ป้อนชุดตัวอักษรเช่น ‘x’ ‘x’ ‘x’ สังเกตว่าจบการทำงานหรือไม่?
ตัวอย่างที่ 2 จงออกแบบอัลกอริทึมสำหรับอ่านรหัสพนักงาน อัตราการจ่ายเงินเดือน จำนวนชั่วโมงการทำงานในหนึ่งสัปดาห์ แล้วคำนวณรายได้ของพนักงานคนนั้น เพื่อแสดงออกมาบนจอภาพตามเงื่อนไขที่กำหนด แล้วรอรับข้อมูลของพนักงานคนต่อไป จนกระทั่งหมดข้อมูล
ตัวอย่างที่ 2 : เงื่อนไข 1 พนักงานทุกคนต้องมีชั่วโมงการทำงานน้อยกว่าหรือเท่ากับ 60 ชั่วโมง ถ้ามีจำนวนชั่วโมงการทำงานมากกว่า 60 ให้พิมพ์ข้อความ ‘Hours worked exceeds limit of 60’
ตัวอย่างที่ 2 : เงื่อนไข 2 อัตราการจ่ายเงินมากที่สุดชั่วโมงละ 125 บาท ถ้ามีอัตราการจ่ายเงินมากกว่า 125 บาทต่อชั่วโมง ให้พิมพ์ข้อความ ‘Pay rate exceeds 125 baht’
ตัวอย่างที่ 2 : เงื่อนไข 3 ถ้ามีจำนวนชั่วโมงการทำงานมากกว่า 35 ชั่วโมง ส่วนที่เหลือคิดเป็น การทำงานล่วงเวลา คำนวณอัตราการทำงานล่วงเวลาเป็น 1.5 เท่าของอัตราปกติ