Problem Solving

วัฎจักรของการพัฒนาโปรแกรม

1. การกำหนดปัญหา ( Defining the problem)
2. การวางแผนเกี่ยวกับการแก้ปัญหา (Planning the solution)
3. การเขียนเป็นภาษาคอมพิวเตอร์ (Coding the program)
4. การทดสอบโปรแกรม (Testing the program)
5. การจัดทำเอกสารประกอบโปรแกรม (Documenting the program)

ซึ่งในที่นี้จะกล่าวถึงปัญหา (Problem) และวิธีการแก้ปัญหาทางคอมพิวเตอร์ (Problem Solving)

การกำหนดปัญหา และการวางแผนเกี่ยวกับปัญหา

การกำหนดปัญหา

– เป็นการวิเคราะห์ปัญหา

– ต้องทำความเข้าใจกับปัญหา

– กำหนดให้ได้ว่าปัญหาหรือโจทย์คืออะไร โจทย์ต้องการอะไร เป็นผลลัพธ์

– ทำอย่างไรจึงจะแก้ปัญหานั้นได้ กำหนดขั้นตอนงานก่อนหลัง

– เพื่อให้ได้ผลลัพธ์ หรือคำตอบที่เราต้องการ เราจะทำความเข้าใจเกี่ยวกับ
-> ผลลัพธ์ (Output) ปัญหาหรือโจทย์ต้องการผลลัพธ์อะไร
-> ข้อมูลเข้า (Input) ข้อมูลอะไรที่ต้องการ ที่จำเป็นในการ ทำงาน

การประมวลผล (Process) เป็นวิธีการประมวลผล จะนำข้อมูลเข้ามาทำอย่างไรเพื่อให้ได้คำตอบที่ต้องการ
6684

การวางแผนเกี่ยวกับการแก้ปัญหา

– หาแนวทางในการแก้ปัญหา
– เป็นการอธิบายการทำงานที่ชัดเจนเพื่อเป็นแนวทางการเขียนโปรแกรม
– ในการแก้ปัญหานั้นเราจะแยกย่อย หรือแตกปัญหาเป็นงานย่อย ๆ เป็นขั้นตอน เพื่ออธิบายการทำงาน เราเรียกวิธีการเขียนนี้ว่า ขั้นตอนวิธี ( algorithm)
– การเขียนขั้นตอนวิธี เป็นการเขียนที่มีลักษณะเป็นขั้น เป็นตอน มีลำดับการทำงานก่อนหลังที่ชัดเจน
– เทคนิคหรือเครื่องมือที่อื่นๆ เช่น การเขียนผังงาน การเขียนรหัสเทียม

ปัญหาทางคอมพิวเตอร์

ปัญหาทางคอมพิวเตอร์ คืออะไรบ้าง ซึ่งปัญหาทางคอมพิวเตอร์อาจคล้ายกับการแก้ปัญหาทั่วไป กล่าวคือ เราจะทำอย่างไรในการสร้างสูตร หรือสมการในการแก้ปัญหา ในสูตรนั้นต้องการข้อมูลนำเข้าอะไรบ้าง จึงจะได้คำตอบที่ถูกต้อง จากนั้นมีการตรวจสอบผลลัพธ์ว่าเป็นไปตามสูตรที่กำหนดไว้หรือไม่ โดยมีขั้นตอนการแก้ปัญหาทางคอมพิวเตอร์ดังนี้

1. การนิยามปัญหา (Problem Definition)

2. การวิเคราะห์ปัญหา (Problem analysis)

3. การออกแบบอัลกอริธึม (Algorithm design) หรือการออกแบบขั้นตอนวิธีการแก้ปัญหา

4. การพัฒนาโปรแกรม (Program development)

5. การทดสอบความถูกต้อง (Program Testing)

6. การจัดทำเอกสาร (Documentation)

7. การบำรุงรักษา และการแก้ไข (Maintenance and modification)

ขั้นตอนการแก้ไขปัญหาทางคอมพิวเตอร์

1. การนิยามปัญหา (Problem Definition)
ในขั้นแรกของการแก้ปัญหา สิ่งสำคัญที่สุด คือเราต้องทำความเข้าใจให้ได้ว่าปัญหาคืออะไร ประเด็นหลักอยู่ที่ใด และต้องการให้ได้ผลลัพธ์อะไร

2. การวิเคราะห์ปัญหา (Problem analysis)
หลังจากที่เข้าใจปัญหาได้ดีแล้ว ขั้นต่อไป คือ การวิเคราะห์ปัญหา และพัฒนาสูตรเชิงคณิตศาสตร์ที่แทนวิธีการแก้ปัญหา วิเคราะห์ปัญหา ให้พิจารณาที่ผลลัพธ์ของปัญหาก่อน (output) ว่าคืออะไร และมีข้อมูลนำเข้า (input) อะไรบ้างที่จะทำให้ได้ผลลัพธ์เช่นนั้น จากนั้นจึงคิดสูตรเป็นสมการ หรือวิธีการที่จะแก้ปัญหานั้น เราต้องวิเคราะห์ให้ได้ว่า ข้อมูลอะไรที่นำเข้าจากผู้ใช้ ข้อมูลอะไรเกิดขึ้นจากการคำนวณ หรือข้อมูลใดเป็นค่าคงที่
ตัวอย่างเช่น โจทย์ต้องการให้เขียนโปรแกรมคำนวณหาจำนวนเงินที่ต้องการจ่ายให้พนักงานรายวัน แต่ละคน โดยมีค่าแรงเป็น 40 บาทต่อชั่วโมง ถ้าทำงานเกินจะมีค่าล่วงเวลาคิดเป็นอัตรา 7 บาทต่อชั่วโมง
จากโจทย์ ผลลัพธ์ที่ต้องการ คือ จำนวนที่ต้องจ่ายให้แก่พนักงาน ข้อมูลนำเข้า คือ จำนวนชั่วโมงที่ทำงาน จากนั้นนำมาเขียนเป็นสูตร เชิงคณิตศาสตร์ดังนี้

ค่าแรงของพนักงาน = จำนวนชั่วโมงที่ทำงาน *40 “ถ้าจำนวนชั่วโมงน้อยกว่าหรือเท่ากับ 8”
ค่าล่วงเวลา = (จำนวนชั่วโมงที่ทำงาน -8)*7 “ถ้าจำนวนชั่วโมงมากกว่า 8 ชั่วโมง”
รวมจำนวนเงินค่าแรงของพนักงานแต่ละคน = ค่าแรงของพนักงาน + ค่าล่วงเวลา

3. การออกแบบอัลกอริธึม (Algorithm design) หรือการออกแบบขั้นตอนวิธีการแก้ปัญหา
ในขั้นนี้เป็นการคิดหาขั้นตอนการแก้ปัญหาทีละขั้น เราต้องคิดว่าจะทำอย่างไรจึงจะแก้ปัญหาได้ และสามารถนำมาแปลงเป็นคำสั่งของภาษาโปรแกรมได้โดยง่าย ซึ่งเรียกขั้นตอนการแก้ปัญหาทีละขั้นนี้ว่าอัลกอริธึม (algorithm)
ตัวอย่างจากโจทย์การคำนวณหาจำนวนเงินที่ต้องการจ่ายให้แก่พนักงาน เขียนอธิบายแต่ละขั้นไดดังนี้
ขั้นที่ 1 รับข้อมูลชั่วโมงทำงานของพนักงานจากแป้นพิมพ์
ขั้นที่ 2 เปรียบเทียบจำนวนชั่วโมงทำงานกับ 8
ถ้าจำนวนชั่วโมงทำงาน มากกว่า 8 แล้ว ให้คำนวณตามสูตรต่อไปนี้
ค่าแรงของพนักงาน = 8*40
ค่าล่วงเวลา = (จำนวนชั่วโมงที่ทำงาน – 8 ) *7
ถ้าจำนวนชั่วโมงทำงาน น้อยกว่าหรือเท่ากับ 8 แล้วให้คำนวณ
ค่าแรงของพนักงาน = จำนวนชั่วโมงที่ทำงาน * 40
ค่าล่วงเวลา = 0
ขั้นที่ 3 คำนวณจำนวนเงินที่ต้องจ่ายให้แก่พนักงาน
รวมจำนวนเงินค่าแรงของพนักงานแต่ละคน = ค่าแรงของพนักงาน + ค่าล่วงเวลา
ขั้นที่ 4 แสดงผลลัพธ์ให้ผู้ใช้ทราบ
ขั้นที่ 5 จบการทำงาน

แต่ละขั้นตอนต้องมีความชัดเจนว่าจะทำอะไร แล้วได้ผลลัพธ์อะไรในแต่ละขั้น

4. การพัฒนาโปรแกรม (Program development)
ในขั้นตอนนี้นักเขียนโปรแกรมต้องนำเอาคำอธิบายของขั้นตอนการแก้ปัญหาแต่ละขั้นจากอัลกอริธึมมาแปลงเป็นคำสั่งของภาษาโปรแกรมคอมพิวเตอร์ภาษาใดภาษาหนึ่ง เช่น เขียนด้วยภาษา c++ เป็นต้น การพัฒนาโปรแกรมจะทำได้ง่าย ถ้าอัลกอริธึมถูกต้อง และมีความชัดเจน

5. การทดสอบความถูกต้อง (Program Testing)
หลังจากที่เราเขียนคำสั่งของภาษาโปแกรมคอมพิวเตอร์แล้ว ขั้นต่อไป คือ การทดสอบ (Testing) เพื่อหาข้อผิดพลาดจากการเขียนคำสั่งผิดไวยกรณ์ของภาษา หรือข้อผิดพลาดจากการคำนวณการทดสอบควรทดสอบทุกกรณีที่คาดว่าจะเกิดขึ้น ตัวอย่างเช่น การคิดจำนวนเงินที่ต้องจ่ายให้แก่พนักงานเราต้องทดสอบด้วยการป้อนจำนวนชั่วโมงทำงานประมาร 3 ค่า คือ ค่าที่มากกว่า 8 หรือค่าที่น้อยกว่า 8 หรือค่าที่เท่ากับ 8 เพื่อทดสอบว่าถูกต้องทุกกรณีตามสูตรที่ออกแบบไว้หรือไม่

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

7. การบำรุงรักษา และการแก้ไข (Maintenance and modification)
การพัฒนาโปรแกรมขึ้นมาใหม่ถือว่าเป็นเรื่องที่ง่ายการการบำรุงรักษา และการแก้ไข ต้นทุนการบำรุงรักษาโปรแกรมจะเพิ่มมากขึ้นหากการออกแบบโปรแกรมทำได้ไม่ดี ตัวอย่างอัลกอริธึมคำนวณค่าแรง การระบุจำนวนชั่วโมง อัตราค่าแรง อัตราค่าแรงล่วงเวลาเป็น 8 และ 40 และ 7 ถ้าเราระบุแบบตายตัวเข้าไปในสูตร ในกรณีที่มีการเปลี่ยนนโยบาย เช่นอัตราค่าแรงเป็น 50บาท/ชั่วโมง อัตราค่าล่วงเวลา เป็น 10 บาท/ชั่วโมง ถ้าจำนวนบรรทัดคำสั่งไม่มากคงแก้ไขได้ไม่ยาก แต่ถ้าอัตราเหล่านี้ถูกนำไปใช้ในหลาย ๆ แห่ง ในแฟ้มคำสั่งคงจะยุ่งยากที่จะตามแก้ไขให้ครบสมบูรณ์ทุกแห่ง ดังนั้นการออแบบโปรแกรมใด ๆ ต้องให้มีลักษณะความยืดหยุ่น ปรับเปลี่ยนได้ง่ายเมื่อความต้องการเปลี่ยนเปลี่ยน ในอัลกอริธึม อาจเพิ่มตัวแปรเก็บค่าอัตราทั้งสองก็ได้ แล้วนำตัวแปรนั้นไปใช้ในทุกแห่งที่อ้างถึง เวลามีการเปลี่ยนค่าจะเปลี่ยนที่เดียวก็จะมีผลทุกแห่งที่อ้างถึงตัวแปรอัตราเหล่านั้น แก้ไขอัลกอริธึมใหม่ในขั้น 1, และ 2 ได้ดังนี้
ในขั้นที่ 1 เพิ่มบรรทัดคำสั่งต่อไปนี้
Rate <- 40
LimitHour <- 8
OTRate &<- 7
(เครื่องหมาย <- แทนการคัดลองค่าที่อยู่ด้านขวามาใส่ในตัวแปรที่อยู่ด้านซ้ายของเครื่องหมายนี้) ดังนั้น Rate <- 40 จึงอ่านว่า “ให้คัดลองค่า 40 มาใส่ในตัวแปร Rate”
จากนั้นแก้ไขสูตรในขั้นที่ 2
ถ้าจำนวนชั่วโมงทำงานมากกว่า 8 แล้ว ให้คำนวณตามสูตรต่อไปนี้
ค่าแรงพนักงาน = LimitHour * Rate
ค่าล่วงเวลา = (จำนวนชั่วโมงที่ทำงาน – LimitHour) * OTRate
ถ้าจำนวนชั่วโมงทำงาน น้อยกว่าหรือเท่ากับ 8 แล้วให้คำนวณ
ค่าแรงของพนักงาน = จำนวนชั่วโมงที่ทำงาน * Rate
ค่าล่วงเวลา = 0

ข้อผิดพลาดที่เกิดจากการเขียนโปรแกรม

ข้อผิดพลาดที่เกิดจากการเขียนโปรแกรม มี 3 ชนิด
1) ข้อผิดพลาดทางไวยากรณ์ (Syntax error)
– เกิดเนื่องจากเขียนคำสั่งของภาษาไม่ถูกตามหลักไวยากรณ์
– ข้อผิดพลาดนี้โปรแกรมจะหยุดการทำงาน
– พบได้ในช่วงแปลโปรแกรม (Compile Time)

2) ข้อผิดพลาดเมื่อมีการทำงาน (Runtime error)
– เกิดจากวิธีการเขียนโปรแกรม เช่น การหารด้วยศูนย์ ชนิดข้อมูลไม่ถูกต้อง
– พบได้ในช่วงการปฎิบัติงานโปรแกรม (Execution Time)
– ข้อผิดพลาดนี้โปรแกรมจะหยุดการปฏิบัติการ

3) ข้อผิดพลาดทางตรรกะ (Logical error)
– เกิดเนื่องจากผู้เขียนเขียนผิดขั้นตอน ผู้เขียนตีความหมายของปัญหาผิด
– ข้อผิดพลาดนี้โปรแกรมจะไม่หยุดการทำงาน แต่จะให้ได้ผลลัพธ์ไม่ถูกต้อง

ดังนั้น จึงต้องมีการทดสอบการทำงานของโปรแกรม ว่าถูกต้อง เป็นไปตามที่เราต้องการหรือไม่ วิธีการหนึ่งที่นิยมใช้กันคือ การสร้างข้อมูลทดสอบ (Test data) เป็นการจำลองข้อมูลขึ้นมาให้คล้ายข้อมูลจริง มีโอกาสเกิดข้อผิดพลาดได้ทุกแง่ทุกมุม การเลือก test data ต้องคลอบคลุมทุกกรณีที่ข้อมูลมีความเป็นไปได้

Problem Solving

สรุปการแก้ไขปัญหาทางคอมพิวเตอร์นั้น เราต้องรู้อะไรบ้าง

1. งานของเราคืออะไร
2. ขั้นตอนการทำงานเป็นอย่างไรบ้าง
3. ข้อมูลจะเข้าสู่งานหรือระบบได้อย่างไร
4. ข้อมูลมีการประมวลผลอย่างไร
5. ผลลัพธ์ที่ได้จากการทำงานคืออะไร
6. และทำอย่างไรผู้ปฏิบัติงานจะทำได้ง่ายและสะดวกขึ้น

อ้างอิง ผู้จัดทำ :

กำไล ลิ่มสอน รหัส 49233240
ปิยวรรณ เปรมประชา รหัส 49233323
รชตภรณ์ กุลแพทย์ รหัส 49233422

MIT รุ่น 11

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s