การเขียนผังงาน

 
Home

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

Go to Top

ประโยชน์ของผังงาน
1. ทำให้เข้าใจและแยกแยะปัญหาต่าง ๆ ได้ง่ายขึ้น
2. ผู้เขียนโปรแกรมมองเห็นลำดับการทำงาน รู้ว่าสิ่งใดควรทำก่อน สิ่งใดควรทำหลัง
3. สามารถหาข้อผิดพลาดของโปรแกรมได้ง่าย
4. ทำให้ผู้อื่นเข้าใจการทำงานได้ง่ายกว่าการดูจาก source code
5. ไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง ผู้อื่นสามารถเรียนรู้และเข้าใจได้ง่าย
ข้อจำกัดของผังงาน
ผู้เขียนโปรแกรมบางคนไม่นิยมเขียนผังงานก่อนการเขียนโปรแกรม เพราะเห็นว่าเสียเวลา นอกจากนี้แล้ว ยังมีข้อจำกัดอื่น ๆ อีก คือ
1. ผังงานเป็นการสื่อความหมายระหว่างบุคคลกับบุคคลมากกว่าที่สื่อความหมายระหว่างบุคคลกับเครื่อง เพราะผังงานไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง ทำให้เครื่องไม่สามารถรับและเข้าใจได้ว่าในผังงานนั้นต้องการให้ทำอะไร
2. ในบางครั้ง เมื่อพิจารณาจากผังงาน จะไม่สามารถทราบได้ว่า ขั้นตอนการทำงานใดสำคัญกว่ากัน เพราะทุก ๆ ขั้นตอนจะใช้รูปภาพหรือสัญลักษณ์ในลักษณะเดียวกัน
3. การเขียนผังงานเป็นการสิ้นเปลือง เพราะจะต้องใช้กระดาษและอุปกรณ์อื่น ๆ เพื่อประกอบการเขียนภาพ ซึ่งไม่สามารถเขียนด้วยมืออย่างเดียวได้ และในบางครั้ง การเขียนผังงานอาจจะต้องใช้กระดาษมากกว่า 1 แผ่น หรือ 1 หน้า ซึ่งถ้าเป็นข้อความอธิบายอาจะใช้เพียง 2-3 บรรทัดเท่านั้น

Go to Top

การเขียน Flowchart เบื้องต้นเราจะใช้สัญลักษณ์ดังต่อไปนี้คือ

Go to Top

การเขียน Flowchart แบบโครงสร้าง
การเขียน Flowchart แบบโครงสร้างมีประโยชน์คือทำให้การไล่ขั้นตอนการทำงานทำได้ง่ายและเป็นระเบียบ ซึ่งมีหลักการเขียนอยู่ สามข้อ คือ
• Sequence
• Selection
• Iteration|

SEQUENCE
คือ เป็นการทำงานแบบเรียงลำดับ ตั้งแต่ต้นจนจบ เป็นรูปแบบง่าย ๆ ไม่มีการเปรียบเทียบใด ๆ มีทิศทางการไหลของข้อมูลเพียงทางเดียว ซึ่งอาจจะเป็นแบบบนลงล่าง หรือ จากซ้ายไปขวาก็ได้ ดังรูปที่ 1. ไม่ใช่เขียนข้ามไปข้ามมาดังรูปที่ 2.
          
เช่น การให้คำนวณหาพื้นที่ของสี่เหลี่ยมผืนผ้า จะเขียนเป็นผังงานได้ดังรูป

SELECTION
เป็นทางเลือกของโปรแกรมซึ่ง จะต้องมีเพียงสองทางเลือกเท่านั้น และ หลังจากนั้นทางเลือกทั้งสองต้องมาพบกัน และทำงานในขั้นตอนต่อไป

เช่น การคำนวณว่าตัวเลขที่รับมานั้นเป็นจำนวนคี่หรือคู่ จะเขียนเป็นผังงานได้ดังรูป

ITERATION
คือการทำซ้ำ เป็นการเขียน flowchart ให้กลับมาทำงานในขั้นตอนอย่างเก่า จะเห็นว่า flowchart มีลักษณะวน ซึ่งเรียกว่า loop และจะสังเกตุว่า การวน loop ดัง รูปที่ 4 จะไม่มีทางออกไปทำงานในขั้นตอนต่อไปได้เลย เพื่อที่จะทำให้ออกจาก loop ได้จะต้องมีการ เช็คเพื่ออกจาก loop ดังจะได้กล่าวต่อไป



ในการเขียน flowchart จะมี loop ให้เลือกใช้ได้สองประเภทคือ DO WHILE และ DO UNTIL
• DO WHILE จะ ทำการเช็คเพื่อที่จะออกจาก loop ก่อนที่จะทำงานตามคำสั่งใน loop และ เงื่อนไขเพื่อที่จะออกจาก loop จะต้องเป็นเท็จ ดังรูปที่ 5.

• DO UNTIL จะ ทำการเช็คเพื่อที่จะออกจาก loop ณ ตำแหน่งสุดท้ายของ loop และ เงื่อนไขเพื่อที่จะออกจาก loop จะต้องเป็นจริง ดังรูปที่ 6.

เช่น การหาผลบวกของตัวเลข ตั้งแต่ 1-10 จะเขียนเป็นผังงานได้ดังรูป

Go to Top

เทคนิคการเขียนผังงาน
เราต้องการเขียน Flowchart เพื่อคำนวณภาษีที่พนักงานต้องชำระ อัตราภาษี 10%
Flowchart ดังกล่าวกำหนดให้ผู้ใช้ป้อนค่าเงินเดือน (salary) แล้วเครื่องจะทำการคำนวณ ภาษี (tax) 10% ให้โดยอัตโนมัติ และจะพิมพ์ค่า salary กับ tax Output ที่เราต้องการก็คือ salary และ tax ( การสั่งพิมพ์ขึ้นอยู่ที่เราว่าเราต้องการให้พิมพ์อะไร ไม่จำเป็นต้องพิมพ์ salary, tax ตามตัวอย่างก็ได้ เราอาจสั่งพิมพ์ tax อย่างเดียวก็ได้

Input คือสิ่งที่ผู้ใช้ต้องป้อนให้ระบบ จากตัวอย่างก็คือ salary เพราะหากผู้ใช้ไม่ป้อน salary ระบบจะคำนวณ tax ไม่ได้ ส่วนอัตราภาษี 10% ผู้ใช้ไม่ต้องป้อนเพราะมีการกำหนดมาอยู่แล้วว่าภาษีคือ 10% ระบบไม่จำเป็นต้องถามผู้ใช้ เพราะฉะนั้นอัตราภาษี 10% จึงไม่ใช่ input หากจะสรุปง่ายๆ input ก็คือสิ่งที่เราต้องถามผู้ใช้ ส่วนอัตราภาษีคือ ค่าคงที่ ซึ่งเราจะกำหนดไว้ในโปรแกรมเลย โดยผู้ใช้ไม่ต้องป้อน

หากเราต้องการเขียน Flowchart ให้บวกเลข 1 ถึง 10 จะพบว่า Flowchart ดังกล่าวไม่มี input เลยเพราะ flow ดังกล่าวไม่จำเป็นต้องถามผู้ใช้ ดังรูปที่ 8. แต่หากเราต้องการเขียน Flowchart ให้บวกเลขจำนวนที่หนึ่ง ถึง เลขจำนวนที่สอง เราจะพบว่าผู้ใช้จำเป็นต้องบอกเราว่า จำนวนที่หนึ่ง คือเลขอะไร และ จำนวนที่สอง คือเลขอะไร เพราะฉนั้น input คือ first ( เลขจำนวนที่หนึ่ง) และ last ( เลขจำนวนที่สอง) ดังรูปที่ 9


Iteration ( การทำซ้ำ)
Flowchart ดังแสดงในรูปที่ 7 จะคำนวณภาษีสำหรับพนักงานหนึ่งคน หากเราต้องการให้คำนวณคนที่สอง สาม สี่ … เราจะต้องสั่งให้กลับมาทำงานดังแสงในรูปที่ 10 ให้สังเกตว่า flowchart ดังกล่าวไม่มีทางออกจาก loop ได้เลย นั่นหมายถึงหลังจากคำนวณภาษีเสร็จเครื่องจะรอรับค่า salary คนต่อไปไม่มีวันสิ้นสุด

คำถามที่เกิดขึ้นก็คือ เมื่อไหร่ที่เราต้องการออกจาก loop คำตอบก็คือ เมื่อคำนวณภาษีให้พนักงานทุกคนครบแล้ว วิธีการที่เราจะบอกระบบว่าพนักงานหมดแล้วเราสามารถบอกได้โดย “ ถ้าเรา input ค่า salary เป็น 0 หมายถึงพนักงานหมดแล้ว นั่นคือให้ออกจาก loop” ( ที่ใช้เป็น 0 เพราะไม่มีพนักงานคนใดที่มีเงินเดือนเท่ากับ 0 บาท) ซึ่งเราเรียกค่าดังกล่าวว่าค่า dummy ดังได้กล่าวไว้ต้นแล้วว่าการเลือกใช้ loop มีให้เลือกใช้สองชนิดคือ DO WHILE และ DO UNTIL ซึ่ง DO WHILE จะทำการเช็คเพื่อออกจาก loop ที่ต้น loop ในขณะที่ DO UNTIL เช็คปลาย loop

ให้สังเกตว่า การเช็ค ณ ต้น loop คือ การเช็คก่อนมี process ใดๆทั้งสิ้น (DO WHILE) ในขณะที่การเช็ค ณ ปลาย loop คือให้มี process ทุกอย่างก่อนแล้วค่อยเช็ค (DO UNTIL) โดยปกติแล้วเราจะใช้ DO WHILE หรือ DO UNTIL ก็ได้ ( แต่มีบางกรณีที่จำเป็นต้องใช้ DO WHILE หรือ DO UNTIL) จาก flowchart รูปที่ 11 หากเราใช้ DO UNTIL จะได้ flowchart ดังรูปที่ 12

จะเห็นว่าเงื่อนไขออกจาก loop จะต้องเป็นจริง และการเช็คออกจาก loop จะอยู่ ณ ตำแหน่งสุดท้ายของ loop นอกจากนี้การที่ต้องมี input salary เพิ่มขึ้นมาอีกหนึ่ง process และไว้อยู่หน้าการเช็คเพื่อออกจาก loop เพราะว่า เมื่อ ผู้ใช้ใส่ค่า 0 มา ระบบจะทำการออกจาก loop ทันที เพราะหากไว้ตำแหน่งอื่นระบบอาจจะมีการ print หรือคำนวณ tax ซึ่งเราไม่ต้องการให้ทำ

Flowchart รูปที่ 13 แสดงการใช้ DO WHILE loop ให้สังเกตุว่า การเช็คเพื่อที่จะออกจาก loop อยู่ต้น loop และเงื่อนไขเพื่อที่จะออกจาก loop จะเป็นเท็จ ( เพราะฉนั้น เงื่อนไขจึงต้องเป็น salary > 0)


ใน flowchart จะมีการ input Salary อยู่สองตำแหน่งคือบนสุด และใน loop ณ ตำแหน่งล่างสุด input Salary ซึ่งอยู่บนสุดมีไว้เพื่อ input ค่า salary คนแรก เท่านั้น สำหรับค่า salary คนต่อๆมา จะถูก input จาก input salary ที่อยู่ใน loop สาเหตุที่เราไม่สามารถเขียน flowchart ให้วนกลับไป input salary คนต่อๆมาดังรูปที่ 14 แม้ว่าจะสามารถทำงานได้ถูกต้อง เนื่องจากจะผิดกฏ DO WHILE ซึ่งกำหนดไว้ว่า การเช็คเพื่อออกจาก loop จะต้องอยู่ต้น loop

 


คำบรรยายภาพแบบสี่เหลี่ยมมุมมน: ไม่ได้อยู่ต้น loop









Go to Top



ACCUMULATION (การสะสมค่า)
ในการเขียน flowchart ทางธุรกิจส่วนใหญ่จะต้องการให้หายอดรวม เช่นหายอดรวมเงินเดือนของพนักงานทุกคน หายอดรวมของเงินภาษี ฯลฯ ในการเขียน flowchart เราจะใช้วิธีสะสมค่า โดยกำหนด ตัวแปรที่ไว้สำหรับเก็บค่าสะสม = ตัวแปรที่ไว้สำหรับเก็บค่าสะสม + ตัวแปรที่ต้องการสะสม เช่น
T_SAL = T_SAL + SALARY    

สมมติเราต้องการหายอดรวมของ salary เราสามารถเขียนการทำงานดังกล่าวได้ดังนี้
T_SAL = T_SAL + SALARY
จากตัวอย่าง หากเราต้องการหายอดรวมของ salary และ tax จะได้ process ดังนี้
T_SAL = T_SAL + SALARY
T_TAX = T_TAX + TAX
การวางตำแหน่งของ process ดังกล่าวจะต้องวางในตำแหน่งที่ salary, และ tax ของทุกคนวิ่งผ่าน (เนื่องจากเราจะหาค่าสะสมของทุกคน) นั่นก็คือจะต้องวาง process ทั้งสองใน loop แต่นั่นมิได้หมายความว่าทุกตำแหน่งภายใน loop จะสามารถวางได้

Go to Top