การวิเคราะห์ปัญหา (Problem Analysis) 1204102 Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์ อ. สำรวน เวียงสมุทร อ.ณภัทร สักทอง อ.อุมาภรณ์ สายแสงจันทร์ 1204102 Problem Solving
Outline การแก้ไขปัญหาในชีวิตประจำวัน การพัฒนาซอฟท์แวร์ การพัฒนาโปรแกรมคอมพิวเตอร์ การวิเคราะห์ปัญหา การออกแบบโปรแกรม 1204102 Problem Solving
การแก้ไขปัญหาในชีวิตประจำวัน Identify the problem : ระบุปัญหา Understand the problem : เข้าใจปัญหา Identify alternative ways to solve the problem : ระบุทางเลือก(ที่เป็นไปได้)ที่สามารถนำมาใช้ในการแก้ไขปัญหา Select the best way to solve the problem from the list of alternative solutions : เลือกวิธีการที่ดีที่สุดในแก้ไขปัญหา List instructions that enable you to solve the problem using the selected solution : แจงแจงขั้นตอนวิธีการทำงานที่จะนำไปสู่การแก้ปัญหาได้สำเร็จ Evaluate the solution : ตรวจสอบและประเมินผลลัพธ์ 1204102 Problem Solving
ตัวอย่าง การแก้ไขปัญหาในชีวิตประจำวัน ระบุปัญหา : ต้องการทราบว่านิสิตแต่ละคนต้องการทำกิจกรรมอะไรในช่วงเย็นๆ เข้าใจปัญหา : เราจำเป็นต้องทราบข้อมูลเบื้องต้นเกี่ยวกับนิสิตแต่ละคน และทางเลือกที่เป็นไปได้(กิจกรรมที่เลือกทำ)ก็ต้องเป็นกิจกรรมที่นิสิตทุกคนรู้จักและทำเป็น เช่น เราจะไม่เลือกกิจกรรม “ถักนิ๊ตติ้ง” เป็นตัวเลือกหากว่า นิสิตทุกคนไม่รู้ว่าการถักนิตติ๊งคืออะไรและทำได้อย่างไร เป็นต้น ระบุทางเลือก(ที่เป็นไปได้ทั้งหมด) : 1. ดูทีวี 2. สังสรรค์กับเพื่อน 3. เล่นวีดีโอเกมส์ 4. ไปดูหนัง 5. ไปช๊อปปิ้ง 6. ทบทวนบทเรียน 7. ทำการบ้าน 1204102 Problem Solving
ตัวอย่าง การแก้ปัญหาในชีวิตประจำวัน (ต่อ) เลือกวิธีการแก้ไขปัญหาที่ดีที่สุด : ตัดทางเลือกที่ยอมรับไม่ได้ออกไปเช่น มีค่าใช้จ่ายสูงเกินไป หรือ กิจกรรมที่ไม่มีนิสิตคนใดสนใจเลย จากนั้นทำการระบุข้อดี-ข้อเสียของแต่ละทางเลือกที่เหลือ ชั่งน้ำหนักข้อดี-ข้อเสีย เพื่อตัดสินใจเลือกทางเลือกที่ดีที่สุด แจงแจงขั้นตอน วิธีการทำงาน : ระบุขั้นตอนต่างๆที่จะทำให้กิจกรรมที่จะทำในช่วงเย็นเต็มไปด้วยความสนุกสนานที่สุด ตรวจสอบและประเมินผลลัพธ์ : ตรวจสอบว่าทุกคนพึงพอใจในกิจกรรมที่ทำหรือไม่ หากไม่ ก็จำเป็นต้องปรับขั้นตอนวิธีการทำงาน(ข้อ 5) แล้วตรวจสอบอีกครั้งว่า ดีขึ้นหรือไม่ หากไม่ อาจต้องเริ่มกระบวนการทั้งหมดใหม่อีกรอบ 1204102 Problem Solving
กิจกรรม จงระบุขั้นตอนการทำงานเป็นข้อๆสำหรับงานต่อไปนี้ โดยให้มีความสมบูรณ์ชัดเจน เพื่อให้บุคคลอื่นเข้าใจกระบวนการทุกอย่างโดยไร้ข้อสงสัย และให้ระบุความรู้พื้นฐานของคนที่จะทำงานใดๆด้วย เช่น งานชงกาแฟ ผู้ทำต้องมีความรู้เรื่อง นม น้ำ ตู้เย็น หม้อต้มน้ำ กาแฟ ช้อน ถ้วยกาแฟ ฯลฯ เป็นต้น ชงกาแฟ ทอดไข่เจียว เหลาดินสอ สตาร์ทรถยนต์ เปิดคอมพิวเตอร์ (pairwise) สลับใบงานให้เพื่อนนิสิตอ่านแล้วประเมินว่า ขั้นตอนที่ระบุมานั้น สามารถทำได้จริงหรือไม่ หากไม่ต้องปรับปรุงแก้ไขกระบวนการใด เพื่อให้งานสำเร็จ 1204102 Problem Solving
การวิเคราะห์ปัญหา (Problem Analysis) เขาวงกต Start สังเกตว่าสองรูปนี้แก้ปัญหาออกจากเขาวงกตกันคนละเส้นทางแต่ก็ได้ออกจากเขาวงกตเหมือนกัน Finished Start Finished 1204102 Problem Solving 1204102 Problem Solving
ขั้นตอนการพัฒนาซอฟท์แวร์ พัฒนาและออกแบบโปรแกรม (Development & Design) จัดทำเอกสาร (Documentation) บำรุงรักษาซอฟท์แวร์ (Maintenance) Maintenance Program Life Cycle Stages Documentation Development & Design Time Request for a program Program no longer used 1204102 Problem Solving
* แนวทางการพัฒนาโปรแกรมคอมพิวเตอร์ * Problem Solving วิเคราะห์ปัญหา (Problem Analysis) ออกแบบโปรแกรม (Program Design) ทดสอบด้วยมือ (Testing by Hand) Implementation เขียนโปรแกรม (Coding) ทดสอบโปรแกรม (Testing Code) Program 1204102 Problem Solving
* การวิเคราะห์ปัญหา (Problem Analysis) * ระบุข้อมูลนำเข้า (Input Specification) ข้อมูลที่ป้อนเข้าสู่ระบบคอมพิวเตอร์เพื่อให้โปรแกรมประมวลผล ระบุผลลัพธ์ที่ต้องการ (Output Specification) สิ่งที่ผู้ใช้ต้องการ โดยพิจาณาจากเป้าหมายหรือวัตถุประสงค์ของผู้ใช้เป็นหลัก กำหนดขั้นตอนการประมวลผล (Process Specification) ต้องกำหนดขั้นตอนการทำงานเพื่อให้ได้ผลลัพธ์ที่ต้องการ Input Process Output 1204102 Problem Solving
Problem Analysis การพิจารณาสิ่งที่เป็น Input/Output นาม/กลุ่มของนาม (Noun/Noun Phrase) คุณศัพท์ (Adjective) การพิจารณาการประมวลผล กริยา (Verb) วิเศษณ์ (Adverb) 1204102 Problem Solving
Example 01 (แบบที่ 1) ต้องการสร้างโปรแกรมที่มีการอ่านตัวเลข 3 จำนวนเข้ามา หาผลรวมของตัวเลขเหล่านั้นและทำการพิมพ์ผลรวมนั้นออกมา การวิเคราะห์ปัญหาเริ่มจากการหาคำนามและกริยาของโจทย์ได้ดังนี้ “คำนาม” ประกอบด้วย ตัวเลข 3 จำนวน ผลรวม “คำกริยา” ประกอบด้วย อ่านค่าตัวเลข 3 จำนวน หาผลรวมของตัวเลขเหล่านั้น พิมพ์ผลรวมออกมา 1204102 Problem Solving
Example 01 (แบบที่ 2) จงหาผลรวมของตัวเลข 3 จำนวน คำนาม ผลรวม ตัวเลข 3 จำนวน กริยา หาผลรวม โจทย์ลักษณะนี้พบเห็นได้บ่อย เนื่องจากเป็นปัญหาทั่วไปที่เป็นที่ทราบกัน ถ้าต้องการให้แก้ปัญหาด้วยคอมพิวเตอร์ จะต้องคิดเสมอว่า ส่วนของ Process จะต้องดำเนินการ รับค่าเข้ามา พิมพ์ผลลัพธ์ที่ได้ 1204102 Problem Solving
Example 01 (ต่อ) Input Process Output ตัวเลขตัวที่ 1 ตัวเลขตัวที่ 2 ตัวเลขตัวที่ 3 อ่านตัวเลขทั้ง 3 จำนวนเข้ามา บวกตัวเลขทั้ง 3 จำนวน พิมพ์ผลรวม ผลรวมของตัวเลข 3 จำนวน 1204102 Problem Solving
Example 02 (แบบที่ 1) จงเขียนโปรแกรมอ่านค่าความยาว และความกว้าง ของสี่เหลี่ยมผืนผ้า คำนวณหาพื้นที่สี่เหลี่ยมผืนผ้า และพิมพ์พื้นที่สี่เหลี่ยมผืนผ้าที่ได้ “คำนาม” ประกอบด้วย ความยาว ความกว้าง พื้นที่สีเหลี่ยมผืนผ้า “คำกริยา” ประกอบด้วย อ่านค่าความยาว และความกว้าง คำนวณหาพื้นที่สี่เหลี่ยมผืนผ้า พิมพ์พื้นที่สี่เหลี่ยมผืนผ้า 1204102 Problem Solving
Example 02 (แบบที่ 2) จงหาพื้นที่สี่เหลี่ยมผืนผ้า “คำนาม” ประกอบด้วย พื้นที่สีเหลี่ยมผืนผ้า “คำกริยา” ประกอบด้วย หาพื้นที่สี่เหลี่ยมผืนผ้า จะเห็นว่าโจทย์จะสั้น มิได้บอกว่า Input คืออะไร และขั้นตอนการดำเนินงานทำอย่างไร แต่เป็นโจทย์ที่เป็นที่ทราบกันว่าจะต้องทำอย่างไร ผู้เขียนโปรแกรมจะต้องกำหนดสิ่งที่เป็น Input เอง ค่าความกว้าง ค่าความยาว ส่วนขั้นตอนการทำงานผู้เขียนโปรแกรมต้องทราบเองว่า อ่านค่า Input ทั้งสอง พิมพ์ผลลัพธ์ที่ได้ 1204102 Problem Solving
Example 02 (ต่อ) Input ค่าความกว้าง ค่าความยาว Process อ่านค่าความกว้าง อ่านค่าความยาว คำนวณหาพื้นที่สีเหลี่ยมผืนผ้า พิมพ์พื้นที่ Output พื้นที่สี่เหลี่ยมผืนผ้า 1204102 Problem Solving
Example 03 แบบที่ 1 ต้องการสร้างโปรแกรมอ่านค่าคะแนนของนักเรียนทั้งหมดในชั้นเข้ามาคำนวณหาคะแนนเฉลี่ย และพิมพ์คะแนนเฉลี่ยออกมาให้เห็น แบบที่ 2 จงหาคะแนนเฉลี่ยของนักเรียนทั้งหมดในชั้น “คำนาม” ประกอบด้วย คะแนนของนักเรียนแต่ละคน คะแนนเฉลี่ย “คำกริยา” ประกอบด้วย อ่านคะแนนของนักเรียนแต่ละคน คำนวณคะแนนเฉลี่ย พิมพ์คะแนนเฉลี่ย 1204102 Problem Solving
Example 03 (ต่อ) Input Process Output ค่าคะแนนนักเรียนแต่ละคน อ่านค่าคะแนนนักเรียนแต่ละคน คำนวณคะแนนเฉลี่ย พิมพ์คะแนนเฉลี่ย คะแนนเฉลี่ย ไม่มีจำนวนนักเรียน เป็น Input แล้วหาคะแนนเฉลี่ยได้ยังไงน้า?? 1204102 Problem Solving
Example 04 จงเขียนโปรแกรมเพื่อแปลง ปี ค.ศ เป็น ปี พ.ศ ข้อมูลนำเข้า: ตัวเลขจำนวนเต็ม 4 ตัว แทนปี ค.ศ. Process: ปี พ.ศ. = ปี ค.ศ. + 543 ข้อมูลออก: ตัวเลขจำนวนเต็ม 4 ตัว แทนปี พ.ศ. 1204102 Problem Solving
Example 05 จงเขียนโปรแกรมเพื่อรับค่าจำนวนเต็ม และแสดงผลลัพธ์ว่าเป็นเลขคู่หรือเลขคี่ ข้อมูลนำเข้า: ตัวเลขจำนวนเต็ม 1 จำนวน Process: ถ้าจำนวนเต็ม หารด้วย 2 ได้เศษเท่ากับ 0 แสดงว่าเป็น เลขคู่ ถ้าจำนวนเต็ม หารด้วย 2 ได้เศษไม่เท่ากับ 0 แสดงว่าเป็น เลขคี่ ข้อมูลออก: ผลการตรวจสอบเลขจำนวนเต็มว่า เป็นเลขคู่หรือเลขคี่ 1204102 Problem Solving
Example 06 จงเขียนโปรแกรมเพื่อคิดผลของการสอบ ของนิสิตจากคะแนน โดยกำหนดให้ ถ้ามากกว่าหรือเท่ากับ 50 ถือว่าผ่าน ถ้าต่ำกว่า ถือว่าไม่ผ่าน ข้อมูลนำเข้า: คะแนนของนิสิต Process: ถ้าผลสอบมากกว่าหรือเท่ากับ 50 แสดงว่า ผ่าน ถ้าผลสอบต่ำกว่า 50 แสดงว่า ไม่ผ่าน ข้อมูลออก: ผลการสอบว่าผ่านหรือไม่ผ่าน 1204102 Problem Solving
Example 07 ปัญหาการคำนวณจำนวนช่องจอดรถในลานจอดรถ ซูเปอร์มาร์เกตแห่งหนึ่ง จัดพื้นที่ด้านหน้าสำหรับจอดรถให้กับลูกค้าที่มาใช้บริการ กว้าง 25 เมตร ยาว 35 เมตร สมมติ โดยเฉลี่ย ช่องจอดรถ 1 ช่อง มีความกว้าง 2 เมตร ความยาว 3.5 เมตร และพื้นที่ 1 ใน 10 ของพื้นที่ลานจอดรถทั้งหมดคิดเป็นพื้นที่ถนนให้รถวิ่ง อยากทราบว่าซูเปอร์มาร์เกตแห่งนี้จะสามารถจัดช่องจอดรถให้กับลูกค้าได้ทั้งหมดจำนวนกี่ช่อง 1204102 Problem Solving
Example 07 (ต่อ) จากปัญหานี้ เราต้องการคำนวณหาจำนวนช่องจอดรถในลานจอดรถ โดยพื้นที่ที่จะนำมาคำนวณจะต้องหักพื้นที่ส่วนที่เป็นถนนออกจากพื้นที่ของลานจอดรถทั้งหมดก่อน จึงจะนำมาคำนวณหาจำนวนช่องจอดรถที่ต้องการได้ โดยอาศัยข้อมูลขนาดของช่องจอดรถ 1 คัน ตามที่กำหนดให้ในปัญหา ดังนั้นรายละเอียดของข้อมูลออกจึงกำหนดไว้เป็น ข้อมูลเข้า : ความกว้าง ความยาวของพื้นที่ลานจอดรถทั้งหมด และความกว้าง ความยาวของพื้นที่ช่องจอดรถ 1 คัน ข้อมูลออก : จำนวนช่องจอดรถในลานจอดรถ 1204102 Problem Solving
Example 08 จงเขียนโปรแกรม คำนวณหาส่วนลดของราคาสินค้าให้กับลูกค้า10 % สิ่งที่โจทย์ต้องการ: ส่วนลดของราคาสินค้า 10 เปอร์เซ็นต์ ข้อมูลนำเข้า: -ลำดับที่ (No) -รหัสสินค้า (Code) -ราคาสินค้า (Price) 1204102 Problem Solving
Example 08 (ต่อ) Process ข้อมูลออก คำนวณหาส่วนลด Discount = Price * 0.1 ข้อมูลออก 1204102 Problem Solving
Example 09 จงเขียนโปรแกรมคำนวณหาส่วนลดของราคาสินค้าและราคาที่ต้องจ่ายจริงโดยมีเงื่อนไขดังนี้ ถ้าซื้อสินค้ามากกว่าหรือเท่ากับ 1000 บาท คิดส่วนลด 10 เปอร์เซ็นต์ ถ้าซื้อสินค้าน้อยกว่า 1000 บาท คิดส่วนลด 5 เปอร์เซ็นต์ สิ่งที่โจทย์ต้องการ: 1. ส่วนลดของราคาสินค้า 2. ราคาที่ต้องจ่ายจริง 1204102 Problem Solving
Example 09 (ต่อ) ข้อมูลนำเข้า : Process ลำดับที่ (No) รหัสสินค้า (Code) และ ราคา(Price) Process คำนวณหรือเปรียบเทียบ เปรียบเทียบ ถ้า Price >= 1000 ให้ Discount = Price * 0.1 ถ้า Price < 1000 ให้ Discount = Price * 0.05 คำนวณราคาที่ต้องจ่ายจริง Amount = Price - Discount 1204102 Problem Solving
Example 09 (ต่อ) ข้อมูลออก 1204102 Problem Solving
Exercises จงเขียนโปรแกรมเพื่อคำนวณหาพื้นที่สามเหลี่ยม และแสดงผลลัพธ์ที่คำนวณได้ จงวิเคราะห์ปัญหาการคำนวณเปลี่ยนหน่วยชั่วโมง ให้เป็นหน่วยวินาทีและแสดงผลลัพธ์ที่ได้ จงเขียนโปรแกรมคำนวณหาจำนวนเงินที่ต้องการจ่ายให้พนักงานรายวัน แต่ละคน โดยมีค่าแรงเป็น 40 บาทต่อชั่วโมง ถ้าทำงานเกินจะมีค่าล่วงเวลาคิดเป็นอัตรา 7 บาทต่อชั่วโมง จากโจทย์ ผลลัพธ์ที่ต้องการ คือ จำนวนที่ต้องจ่ายให้แก่พนักงาน ข้อมูลนำเข้า คือ จำนวนชั่วโมงที่ทำงาน จากนั้นนำมาเขียนเป็นสูตร เชิงคณิตศาสตร์ดังนี้ ค่าแรงของพนักงาน = จำนวนชั่วโมงที่ทำงาน *40 (ถ้าจำนวนชั่วโมงน้อยกว่าหรือเท่ากับ 8) ค่าล่วงเวลา = (จำนวนชั่วโมงที่ทำงาน -8)*7 (ถ้าจำนวนชั่วโมงมากกว่า 8 ชั่วโมง) รวมจำนวนเงินค่าแรงของพนักงานแต่ละคน = ค่าแรงของพนักงาน + ค่าล่วงเวลา 1204102 Problem Solving
การวิเคราะห์ปัญหา (Problem Analysis) Program Design ข้อกำหนดของการออกแบบโปรแกรม กำหนดตัวแปรสำหรับ Input Output ค่าที่เกี่ยวข้องกับ Process กำหนดค่าเริ่มต้นที่เกี่ยวข้องกับตัวแปร การคำนวณและเปรียบเทียบ เครื่องมือที่นิยมใช้ในการออกแบบโปรแกรม ขั้นตอนวิธี (Algorithm) นำเสนอด้วยภาพ บรรยาย รหัสเทียม (Pseudo-code) ผังงาน (Flowchart) แผนภูมิโครงสร้าง (Structure Chart) สร้างแนวทางการเขียนโปรแกรมเพื่อช่วยให้การเขียนโปรแกรมทำได้ง่ายขึ้น และมีข้อผิดพลาดน้อยลง 1204102 Problem Solving 1204102 Problem Solving
Thank You See you next time. 1204102 Problem Solving