การแก้ปัญหาด้วย Algorithm
- ความหมายของ Algorithm ก่อนที่จะลงมือเขียนโปรแกรม ต้องออกแบบขั้นตอนการทำงาน หรืออัลกอริทึม (Algorithm) ก่อน ซึ่งเป็นเครื่องมือในการแสดงขั้นตอนการทำงาน ของระบบงานใด ๆ เพื่อให้การเขียนโปรแกรมเป็นไปได้อย่างรวดเร็วและง่ายขึ้น
- ที่มาของคำว่าอัลกอริทึม (Algorithm) คือ คำที่ตั้งให้เป็นเกียรติแก่ อแลน เดอะ กอริทึม ทิวริง (Alan The Gorithm Turing) ผู้ค้นพบว่าการพิสูจน์ทางคณิตศาสตร์หรือปัญหาทางตรรกะ สามารถหาคำตอบได้ด้วยชุดของขั้นตอนวิธีที่ถูกต้อง
- ประโยชน์ของอัลกอริทึม (Algorithm) คือ ทำให้ไม่สับสนกับวิธีดำเนินงาน เพราะทุกอย่างจะถูกจัดเรียงเป็นขั้นตอนมีวิธีการและทางเลือกไว้ เมื่อนำมาใช้จะทำให้การทำงานสำเร็จอย่างรวดเร็ว ทำให้ปัญหาลดลงหรือสามารถค้นหาต้นเหตุของปัญหาได้อย่างรวดเร็ว เนื่องจากกระบวนการถูกแยกแยะกิจกรรม ขั้นตอน และความสัมพันธ์ ออกมาให้เห็นอย่างชัดเจน
รูปแบบการเขียนอัลกอริทึม
รูปแบบ Algorithm
<ชื่อของอัลกอริทึม>
START
1……………………………….
2……………………………….
3…………………………………
END
- ลักษณะการบรรยาย (Narrative Description)
ตัวอย่างโจทย์ ให้เขียนอัลกอริธึมเพื่ อหาคะแนนเฉลี่ยของการสอบทั้งหมด 5 วิชา โดยวัดผลจากคะแนน ถ้าคะแนน ต่ำกว่า 50 สอบไม่ผ่าน แต่ถ้าคะแนนมากกว่า 50 ขึ้นไป สอบผ่าน
ใส่คะแนนสอบทั้ง 5 วิชา
คอมพิวเตอร์คำนวนค่าเฉลี่ยโดยการบวกคะแนนทั้ง 5 วิชา แล้วหาร 5
ถ้าค่าเฉลี่ยต่ำกว่า 50 แสดงข้อความสอบไม่ผ่าน
แต่ถ้าค่าเฉลี่ยสูงกว่า 50 แสดงข้อความสอบผ่าน
2. การเขียนผังงาน (Flowchart)
ผังงาน (Flowchart) คือ แผนภาพที่มีการใช้สัญลักษณ์รูปภาพและลูกศรที่แสดงถึงขั้นตอนการทำงานของโปรแกรมหรือระบบทีละขั้นตอน รวมไปถึงทิศทางการไหลของข้อมูลตั้งแต่แรกจนได้ผลลัพธ์ตามที่ต้องการ เรามักจะพบว่าทุกๆกิจกรรมที่เกิดขึ้นบนโลกใบนี้มีกระบวนการ (Process) ซึ่งเราสามารถที่จะใช้ผังงาน (Flowchart) อธิบายปะติปะต่อเหตุการณ์ต่างๆ แต่ไม่ถูกเสมอไป เรามักจะนำไปใช้ในกิจกรรมที่เกิดขึ้นซ้ำๆ อย่างต่อเนื่อง ยิ่งเหตุการณ์มีความซับซ้อน ยุ่งยาก หลากหลายขั้นตอนและกระบวนการซึ่งบางครั้งเกินที่จะนำเสนอในรูปแบบอื่นได้ เราก็ใช้ผังงาน (Flowchart) นี่แหละอธิบายระบบงานทั้งหมด
ประโยชน์ของผังงาน
วิธีการเขียนผังงานที่ดี
การเขียนผังงาน สามารถแบ่งออกเป็น 2 ประเภท คือ
รูปแบบการเขียน Flowchart
การเขียนผังงาน (Flowchart) มี 3 แบบ คือ sequence(ตามลำดับ) selection(ทางเลือก/เงื่อนไข) iteration(ทำซ้ำ)
Reference: Link1 Link2 Link3 Link4
Source Code
ผังงาน (Flowchart) คือ แผนภาพที่มีการใช้สัญลักษณ์รูปภาพและลูกศรที่แสดงถึงขั้นตอนการทำงานของโปรแกรมหรือระบบทีละขั้นตอน รวมไปถึงทิศทางการไหลของข้อมูลตั้งแต่แรกจนได้ผลลัพธ์ตามที่ต้องการ เรามักจะพบว่าทุกๆกิจกรรมที่เกิดขึ้นบนโลกใบนี้มีกระบวนการ (Process) ซึ่งเราสามารถที่จะใช้ผังงาน (Flowchart) อธิบายปะติปะต่อเหตุการณ์ต่างๆ แต่ไม่ถูกเสมอไป เรามักจะนำไปใช้ในกิจกรรมที่เกิดขึ้นซ้ำๆ อย่างต่อเนื่อง ยิ่งเหตุการณ์มีความซับซ้อน ยุ่งยาก หลากหลายขั้นตอนและกระบวนการซึ่งบางครั้งเกินที่จะนำเสนอในรูปแบบอื่นได้ เราก็ใช้ผังงาน (Flowchart) นี่แหละอธิบายระบบงานทั้งหมด
ประโยชน์ของผังงาน
- ช่วยลำดับขั้นตอนการทำงานของโปรแกรม และสามารถนำไปเขียนโปรแกรมได้โดยไม่สับสน
- ช่วยในการตรวจสอบ และแก้ไขโปรแกรมได้ง่าย เมื่อเกิดข้อผิดพลาด
- ช่วยให้การดัดแปลง แก้ไข ทำได้อย่างสะดวกและรวดเร็ว
- ช่วยให้ผู้อื่นสามารถศึกษาการทำงานของโปรแกรมได้อย่างง่าย และรวดเร็วมากขึ้น
วิธีการเขียนผังงานที่ดี
- ใช้สัญลักษณ์ตามที่กำหนดไว้
- ใช้ลูกศรแสดงทิศทางการไหลของข้อมูลจากบนลงล่าง หรือจากซ้ายไปขวา
- คำอธิบายในภาพควรสั้นกระทัดรัด และเข้าใจง่าย
- ทุกแผนภาพต้องมีลูกศรแสดงทิศทางเข้า - ออก
- ไม่ควรโยงเส้นเชื่อมผังงานที่อยู่ไกลมาก ๆ ควรใช้สัญลักษณ์จุดเชื่อมต่อแทน
- ผังงานควรมีการทดสอบความถูกต้องของการทำงานก่อนนำไปเขียนโปรแกรม
การเขียนผังงาน สามารถแบ่งออกเป็น 2 ประเภท คือ
- ผังงานระบบ (System Flowchart) ใช้แสดงขั้นตอนการทำงานในระบบงานหนึ่ง ๆ โดยกล่าวถึงข้อมูลต่าง ๆ ที่เกี่ยวข้องทั้งหมด เช่น เอกสารเบื้องต้นคืออะไร วัสดุที่ใช้คืออะไร หน่วยความจำประเภทใด จะต้องส่งผ่านไปยังหน่วยงานใด วิธีการประมวลผลและการแสดงผลลัพธ์ โดยอาจจะกล่าวอย่างกว้าง ๆ ไม่สามารถนำมาเขียนเป็นโปรแกรมได้
- ผังงานโปรแกรม (Program Flowchart) ผังงานประเภทนี้ จะแสดงถึงขั้นตอนของคำสั่งที่ในโปรแกรม การรับข้อมูล การประมวลผล การแสดงข้อมูล บางครั้งเรียกว่าผังการเขียนโปรแกรม
การเขียนผังงาน (Flowchart) มี 3 แบบ คือ sequence(ตามลำดับ) selection(ทางเลือก/เงื่อนไข) iteration(ทำซ้ำ)
ตัวอย่างการเขียน Flowchart
1) การทำงานแบบเป็นลำดับ (Sequence)
เป็นโครงสร้างควบคุมโดยจะ ทำงานทีละคำสั่งจากบนลงล่าง ตามทิศทางการทำงาน (Direction of Flow)
ตัวอย่าง Source Code (การวางของคำสั่ง)
คำสั่งที่ 1
คำสั่งที่ 2
คำสั่งที่ 3
|
ตัวอย่าง Source Code (การวางของคำสั่ง) เริ่มต้น รับเงินไปจ่ายตลาดมา 100 บาท ซื้อไข่ไก่ 25 บาท ซื้อผลไม้ 25 บาท จบการทำงาน |
2) ผังงานแบบมีทางเลือกหรือแบบมีเงื่อนไข (Selectiom or Condition Flowchart)
เป็นโครงสร้างการทำงานที่มีการตัดสินใจแบบมีเงื่อนไข ถ้าเงื่อนไขนั้นเป็น จริงจะทำอะไร แล้วถ้าเงื่อนไขนั้นเป็น เท็จจะทำอะไร การทำงานแบบทางเลือก (Selection) นั้นถูกแบ่งได้อีก 3 รูปแบบ
2.1) IF-Then (ถ้า ... เป็นจริงจะทำอะไร) รูปแบบนี้มีลักษณะการทำงานคือ ถ้าเงื่อนไขนั้นเป็นจริง จะให้ทำอะไร แต่ถ้าเงื่อนไขนั้นเป็นเท็จก็จะไม่เกิดการทำงานใดๆ ขึ้นเลย
ตัวอย่าง Source Code (การวางของคำสั่ง) If เงื่อนไข Then คำสั่งที่ 1 จะทำงานเมื่อผลลัพธ์ของเงือนไขเป็นจริง |
ตัวอย่าง Source Code (การวางของคำสั่ง) เริ่มต้น เอาเงินมาทำงาน 100 บาท If ซื้อหมูปิ้งหรือไม่Then จ่ายค่าหมูปิ้ง 25 บาท จบการทำงาน |
2.2) IF - Then - Else (ถ้า ... เป็นจริงจะทำอะไร เป็นเท็จจะทำอะไร) รูปแบบนี้มีลักษณะการทำงานคือ ถ้าเงื่อนไขนั้นเป็นจริง จะให้ทำอะไร แล้วถ้าเงื่อนไขนั้นเป็นเท็จจะให้ทำอะไร เช่นกัน
ตัวอย่าง Source Code (การวางของคำสั่ง) If เงื่อนไข Then
คำสั่งที่ 1 จะทำงานเมื่อผลลัพธ์ของเงือนไขเป็นจริง
else
คำสั่งที่ 2 จะทำงานเมื่อผลลัพธ์ของเงือนไขเป็นเท็จ
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
If ซื้อหมูปิ้งหรือไม่Then
จ่ายค่าหมูปิ้ง 25 บาท
else
จ่ายค่าข้าวกระเพรา 45 บาท
จบการทำงาน
|
2.3) Case (กรณีที่ ...) รูปแบบการทำงานคือ ตรวจสอบว่า ค่าข้อมูลที่นำมาเปรียบเทียบนั้นตรงกับเงื่อนไขใด ถ้าเป็นจริงก็เข้ากรณีนั้น
ตัวอย่าง Source Code (การวางของคำสั่ง)
Case ข้อมูล
กรณี่ที่ 1 : คำสั่งที่ 1
กรณีที่ 2 : คำสั่งที่ 2
กรณีที่ n : คำสั่งที่ n
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
Case เลือกกินอะไร ?
กรณี่ที่ 1 "ข้าวกระเพรา" : จ่ายค่าข้าวกระเพรา 45 บาท
กรณีที่ 2 "หมูปิ้ง" : จ่ายค่าหมูปิ้ง 25 บาท
กรณีที่ 3 "ไม่กินอะไรเลย" : ไม่จ่าย
จบการทำงาน
|
3) การทำงานวนรอบ (Repetition)
เป็นโครงสร้างที่มีจะมีการทำงานแบบทำซ้ำคำสั่งใน Loop Body หากว่าเงื่อนไขที่กำหนดไว้เป็นไปตามที่กำหนด การทำงานแบบวนรอบ (Repetition) นั้นถูกแบ่งออกได้อีก 6 รูปแบบดังนี้
3.1) While Loop (ตราบเท่าที่ ... เป็นจริง) รูปแบบนี้มีลักษณะการทำงานคือ ตรวจสอบเงื่อนไขก่อน ถ้าเงื่อนไขนั้นเป็นจริง จะทำคำสั่งใน Loop Body จนครบ จากนั้นก็กลับไปตรวจสอบเงื่อนไขอีกครั้ง ถ้าเงื่อนไขเป็นจริงอีก ก็ทำซ้ำ Loop Body อีกครั้ง จนกว่าเงื่อนไขที่ตรวจสอบนั้นจะเป็นเท็จ (สังเกตรูปผังงาน (Flowchart) สีเขียวคือคำสั่งใน Loop Body)
ตัวอย่าง Source Code (การวางของคำสั่ง)
While เงื่อนไข
คำสั่งที่ 1 จะทำงานเมื่อผลลัพธ์ของเงือนไขเป็นจริง
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
while ถ้ามีเงินเหลือ
ซื้อหมูปิ้ง 25 บาท
จบการทำงาน
|
3.2) Do While Loop (ทำก่อน 1 ครั้ง แล้วตราบเท่าที่ ... เป็นจริง) รูปแบบนี้มีลักษณะการทำงานคือ จะทำคำสั่งใน Loop Body ก่อน 1 ครั้ง แล้วตรวจสอบเงื่อนไข ถ้าเงื่อนไขนั้นเป็นจริง จะกลับไปทำคำสั่งใน Loop Body จนครบแล้วตรวจสอบเงื่อนไขอีกครั้ง จนกว่าเงื่อนไขที่ตรวจสอบนั้นจะเป็นเท็จ (สังเกตรูปผังงาน (Flowchart) สีเขียวคือคำสั่งใน Loop Body)
ตัวอย่าง Source Code (การวางของคำสั่ง)
Do
คำสั่งที่ 1 จะทำงานก่อน 1 ครั้ง และจะทำงานอีกครั้งเมื่อ
ผลลัพธ์ของเงือนไขเป็นจริง
While เงื่อนไข
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
Do
จ่ายค่าหมูปิ้ง 25 บาท
While ถ้ายังมีเงินเหลือ
จบการทำงาน
|
3.3) Until Loop (วนจนกระทั่ง ... เป็นจริง) รูปแบบนี้มีลักษณะการทำงานคือ ตรวจสอบเงื่อนไขก่อน ถ้าเงื่อนไขนั้นเป็นเท็จ จะทำคำสั่งใน Loop Body จนครบ จากนั้นก็กลับไปตรวจสอบเงื่อนไขอีกครั้ง ถ้าเงื่อนไขเป็นเท็จอีก ก็ทำซ้ำ Loop Body อีกครั้ง จนกว่าเงื่อนไขที่ตรวจสอบนั้นจะเป็นจริง (สังเกตรูปผังงาน (Flowchart) สีเขียวคือคำสั่งใน Loop Body)
ตัวอย่าง Source Code (การวางของคำสั่ง)
Until เงื่อนไข
คำสั่งที่ 1 จะทำงานเมื่อผลลัพธ์ของเงือนไขเป็นเท็จ
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
Until ถ้าไม่มีเงินเหลือ
ซื้อหมูปิ้ง 25 บาท
จบการทำงาน
|
3.4) Do Until Loop (ทำก่อน 1 ครั้ง แล้ววนจนกระทั่ง ... เป็นจริง) รูปแบบนี้มีลักษณะการทำงานคือ จะทำคำสั่งใน Loop Body ก่อน 1 ครั้ง แล้วตรวจสอบเงื่อนไข ถ้าเงื่อนไขนั้นเป็นเท็จ จะกลับไปทำคำสั่งใน Loop Body จนครบแล้วตรวจสอบเงื่อนไขอีกครั้ง จนกว่าเงื่อนไขที่ตรวจสอบนั้นจะเป็นจริง (สังเกตรูปผังงาน (Flowchart) สีเขียวคือคำสั่งใน Loop Body)
ตัวอย่าง Source Code (การวางของคำสั่ง)
Do
คำสั่งที่ 1 จะทำงานก่อน 1 ครั้ง และจะทำงานอีกครั้งเมื่อ
ผลลัพธ์ของเงือนไขเป็นเท็จ
Until เงื่อนไข
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
เริ่มต้น
เอาเงินมาทำงาน 100 บาท
Do
จ่ายค่าหมูปิ้ง 25 บาท
Until ถ้ายังมีเงินเหลือ
จบการทำงาน
|
3.5) For Loop (นับจำนวนรอบ) รูปแบบนี้มีลักษณะการทำงานคือ การวนรอบตามจำนวนรอบที่กำหนดให้ โดยจะมีตัวแปรหนึ่งตัวเก็บว่าขณะนี้เป็นรอบที่เท่าไรแล้ว และเมื่อวนจนเงื่อนไขนั้นเป็นเท็จก็จะจบการวนซ้ำ (สังเกตรูปผังงาน (Flowchart) สีเขียวคือคำสั่งใน Loop Body)
ตัวอย่าง Source Code (การวางของคำสั่ง)
for ตั้งค่าเริ่มต้นให้ตัวนับ ; เงื่อนไข ; เปลี่ยนแปลงค่าตัวนับ
คำสั่งที่ 1 จะทำงานเมื่อเงื่อนไขเป็นจริง
|
ตัวอย่าง Source Code (การวางของคำสั่ง)
for ตัวนับ = 1 ; ตัวนับ < 5 ; เพิ่มค่าตัวนับขึ้น 1
คำนวณค่าอาหาร
|
Reference: Link1 Link2 Link3 Link4
3. รหัสจำลองที่เรียกว่า การเขียนซูโดโค้ด (Pseudo Code) คือการเขียนคำอธิบายขั้นตอนการทำงานของโปรแกรม โดยใช้ถ้อยคำผสมระหว่างภาษาอังกฤษและภาษาการเขียนโปรแกรมแบบโครงสร้าง ซึ่งจะช่วยให้ผู้เขียนโปรแกรมสามารถพัฒนาขั้นตอนต่าง ๆ ให้เป็นโปรแกรมได้ง่ายขึ้น ส่วนใหญ่มักใช้คำเฉพาะ (Reserve Word) ที่มีในภาษาการเขียนโปรแกรมและมักเขียนด้วยตัวอักษรตัวใหญ่ ซูโดโค้ดที่ดี จะต้องมีความชัดเจน สั้น และได้ใจความ ข้อมูลต่าง ๆ ที่ใช้จะถูกเขียนอยู่ในรูปของตัวแปร
ส่วนในการคำนวณ
สูตรในการหาพื้นที่สามเหลี่ยมคือ (1/2) * ฐาน * สูง
ส่วนผลลัพธ์
ผลลัพธ์ของพื้นที่ออกทางจอภาพ
Algorithm การหาพื้นที่สามเหลี่ยม
1. เริ่มต้น
2. รับค่าความยาวของฐานมาเก็บในตัวแปร base
3. รับค่าความยาวของสูงมาเก็บในตัวแปร height
4. คำนวณหาพื้นที่ area = 0.5 * base * height
5. แสดงผลพื้นที่ area
6. จบ
ตัวอย่างโจทย์
จงเขียนโปรแกรมคำนวณหาพื้นที่ สามเหลี่ยมทั่วไป โดยให้โปรแกรมมีการรับค่า ฐาน และ สูงจากทาง Keyboard จากนั้นแสดงผลลัพธ์ของพื้นที่ออกทางจอภาพ
วิเคราะห์โจทย์
สูตรหาพื้นที่สามเหลี่ยมคือ (1/2) * ฐาน * สูง
ส่วนในการรับค่า
รับค่า ฐาน และ สูงจากผู้ใช้มาเก็บไว้ในตัวแปร
ส่วนในการรับค่า
รับค่า ฐาน และ สูงจากผู้ใช้มาเก็บไว้ในตัวแปร
ส่วนในการคำนวณ
สูตรในการหาพื้นที่สามเหลี่ยมคือ (1/2) * ฐาน * สูง
ส่วนผลลัพธ์
ผลลัพธ์ของพื้นที่ออกทางจอภาพ
Algorithm การหาพื้นที่สามเหลี่ยม
1. เริ่มต้น
2. รับค่าความยาวของฐานมาเก็บในตัวแปร base
3. รับค่าความยาวของสูงมาเก็บในตัวแปร height
4. คำนวณหาพื้นที่ area = 0.5 * base * height
5. แสดงผลพื้นที่ area
6. จบ
Flow Chart การหาพื้นที่สามเหลี่ยม
(Pseudo codes) Algorithm Triangle
1. START
2. READ base
3. READ height
4. COMPUTE area = 0.5 * base * height
5. PRINT area
6. END
1. START
2. READ base
3. READ height
4. COMPUTE area = 0.5 * base * height
5. PRINT area
6. END