โปรแกรมแบบมีโครงสร้าง (Structured programming)
การเขียนโปรแกรมคอมพิวเตอร์ที่ดีนั้น ควรออกแบบโปรแกรมในลักษณะที่มีโครงสร้างและลำดับขั้นตอนการทำงานที่แน่นอน ซึ่งโปรแกรมแบบมีโครงสร้างที่ดีนั้นจะมีโครงสร้างที่ง่ายต่อการทำความเข้าใจ และรวมไปถึงง่ายต่อการปรับปรุงแก้ไขในภายหลังด้วย ซึ่งการเขียนโปรแกรมแบบมีโครงสร้างสามารถใช้เครื่องมือในการอธิบายโครงสร้างได้ เช่น ผังงาน (Flowchart) และ โค้ดเทียม (Pseudo code) เป็นต้น และการแบ่ง โครงสร้างโดยทั่วไป มี 3 แบบ หลักๆ ดังนี้
1) โครงสร้างแบบลำดับ (Sequential structure)
คือ โครงสร้างที่ทำงานเป็นขั้นตอนเพื่อแก้ไขปัญหา และทำงานตามคำสั่งที่เขียนไว้แบบตามลำดับ ตั้งแต่คำสั่งแรกไปจนถึงคำสั่งสุดท้าย ดังแสดงในรูปที่ 1

คือ โครงสร้างการทำงานที่ที่มีเงื่อนไขการตัดสินใจ ซึ่งจะแบ่งเป็น
- การตัดสินใจ แบบ if....then....
ซึ่ง ในส่วนของการตัดสินใจ จะมีทางเลือก 2 ทาง คือ จริง / เท็จ เสมอ ดังแสดงในรูปที่ 2

- การตัดสินใจ แบบ case
เป็นกรณีที่ ในส่วนตัดสินใจ มีทางเลือกมากกว่า 2 ทางเลือก ดังแสดงในรูปที่ 3

คือ โครงสร้างที่มีขั้นตอนการประมวลผลมากกว่า 1 ครั้ง โดยจำนวนครั้งการประมวลผลขึ้นอยู่กับเงื่อนไขการตัดสินใจการทำซ้ำ โดยแบ่งเป็น 2 ลักษณะการทำซ้ำ ดังนี้
- การทำซ้ำแบบ do while
มีการตรวจสอบเงื่อนไขการทำซ้ำทุกครั้งก่อนดำเนินการกิจกรรมใดๆ โดยถ้าเงื่อนไขเป็นจริงก็จะทำงานซ้ำไปเรื่อยๆ และจะหยุดเมื่อเงื่อนไขเป็นเท็จ ดังแสดงในรูปที่ 4
- การทำซ้ำแบบ do until
ทำกิจกรรมเสร็จแต่ละครั้งก็จะมีการตรวจสอบเงื่อนไข โดยจะทำซ้ำไปเรื่อยๆ จนกระทั่งเงื่อนไขเป็นจริงแล้วจึงหยุดการทำงาน ดังแสดงในรูปที่ 5

========================================================================
ผังงาน (Flowchart)
คือ การใช้รูปภาพ หรือ สัญลักษณ์ อธิบายขั้นตอนการทำงาน
ตัวอย่าง สัญลักษณ์สำคัญในผังงาน
![]() |
สัญลักษณ์ของ การเริ่มต้น และ จบ ผังงาน (Start หรือ End) |
![]() |
สัญลักษณ์ของ การกระทำ (Process) ถูกใช้เพื่อแสดงงานที่การกระทำในผังงาน |
![]() |
สัญลักษณ์ของ ส่วนการนำข้อมูลเข้า และ แสดงผลข้อมูล (Input / Output) |
![]() |
สัญลักษณ์ของ การตัดสินใจ (Decision)
เพื่อพิจารณาเงื่อนไข ระหว่าง จริง (True) และ เท็จ (False)
|
![]() |
สัญลักษณ์ของ คำอธิบายประกอบ (Annotation)
ใช้เพื่อเขียนคอมเม้นต์ให้กับ ผังงาน
|
![]() |
สัญลักษณ์ของ จุดเชื่อมต่อ (Connector)
ใช้รวมเส้นการทำงานให้ออกไปเหลือเพียงเส้นเดียว
|
![]() |
สัญลักษณ์ของ ทิศทางการทำงาน (Direction Flow)
ใช้แสดงการไหลการงาน
|
โค้ดเทียม (Pseudo code)
คือ การแสดงขั้นตอน หรือ การอธิบายกระบวนการทำงาน โดยใช้ภาษาลดรูปที่เข้าใจง่าย
หลักการเขียน โค้ดเทียม โดยทั่วไป
- ใช้คำที่เข้าใจง่าย
- ใน 1 บรรทัด ควรมีเพียง 1 ประโยคโค้ดเทียม
- ใช้ย่อหน้าเพื่อความเป็นระเบียบ
- รูปแบบการทำงานของโค้ดควรเป็นแบบจากบนลงล่าง (Top to Down) และมีทางออกทางเดียว
- ควรมีรูปแบบคำสั่ง
========================================================================
Abstract Data Type หรือ ADT
คือ การประกาศคุณสมบัติของโครงสร้างข้อมูล และกลุ่มตัวดำเนินการที่กระทำกับโครงสร้างข้อมูล
ADT
เป็นกระบวนการที่พัฒนามาจากกระบวนการแก้ไขปัญหา แสดงถึงความสัมพันธ์ ระหว่างโครงสร้างข้อมูล และ กลุ่มตัวดำเนินการที่เป็นฟังก์ชัน โดยจะกำหนดการทำงานของโปรแกรมที่จะกระทำกับโครงสร้างข้อมูล ซึ่งแต่ละกลุ่มตัวดำเนินการจะทำงานอย่างอิสระไม่เกี่ยวเนื่องกัน โดยไม่มีการส่งค่าระหว่างกลุ่มตัวดำเนินการ และจะต้องมีลักษณะการทำงานที่ชัดเจน
ตัวอย่าง รายการ ADT
1. สนใจ วันที่ ก่อน วันที่กำหนด มาให้
2. สนใจว่าเป็นวันหยุด
3. สนใจจำนวนวันหยุด
4. สนใจว่าเป็น วันแรก ของ เดือน ที่กำหนดมาให้
5. สนใจ วันที่ ถัดไป ของ วันที่ ที่กำหนด มาให้
จาก รายการ ADT ในข้างต้น สามารถนำมาเขียน ให้อยู่ในรูป Pseudo code ได้ ดังนี้
+dayBefore(in date1:Date, date2:Date):boolean
//คืนค่า boolean : true เมื่อ date1 เป็นวันที่มาก่อน date2 นอกเหนือจากนั้นให้ คืนค่า boolean : false
+Holiday(in mount:Date):boolean
//คืนค่า boolean : true เมื่อ เป็นวันหยุด นอกเหนือจากนั้นให้ คืนค่า boolean : false
+countHolidays(in mount:interger):integer
//คืนค่า integer เป็นจำนวนวันหยุด
+firstDay(in Mount:integer):Date
//คืนค่า date เป็นวันแรกของเดือนที่กำหนด
+nextDay(in Date:aDate):Date
//คืนค่า date เป็นถัดไปจากวันที่กำหนดให้มา ในตัวแปร aDate
ตัวอย่าง
+countHolidays(in mount:integer):integer
//คืนค่า integer เป็นจำนวนวันหยุด ของ เดือน ที่ให้มา
ซึ่งภายในฟังก์ชันมีกระบวนการ ดังนี้
date = กำหนดให้ เริ่มต้นที่วันแรกของ เดือน
hDate = 0 //กำหนดค่าให้เป็น 0 ในเบื้องต้น
if (date = วันหยุด) //if ที่ 1
{
hDate = hDate+1
date = วันถัดไป
}
else{
date = วันถัดไป
} //end if ที่ 1
while (date != วันแรกของเดือน)
{
if (date = วันหยุด){ //if ที่ 2
hDate = hDate+1
} //end if ที่ 2
date = วันถัดไป
}//end while
========================================================================
ขอบคุณข้อมูลอนุเคราะห์บางส่วน และภาพบางส่วน จาก
1)ผังงานโครงสร้าง (Structure Flowchart)
2)สัญลักษณ์ Flowchart ความหมายและวิธีใช้เขียนผังงาน