การวิเคราะห์โจทย์ปัญหา (Problem Analysis) 226111 Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 5 การวิเคราะห์โจทย์ปัญหา (Problem Analysis)
Outline 1 Objectives 2 Problem Analysis 3 Process Description 4 5 Pseudo Code 5 Assignments
Objectives เพื่อให้นิสิตรู้และเข้าใจกระบวนการในการวิเคราะห์โจทย์ปัญหาอันเป็นพื้นฐานในการประมวลผลเบื้องต้นของภาษาคอมพิวเตอร์ การวิเคราะห์โจทย์ปัญหา การอธิบายกระบวนการทำงาน การเขียนรหัสเทียม เครื่องหมาย การคำนวณทางคณิตศาสตร์ และลำดับความสำคัญของเครื่องหมายในการคำนวณ เพื่อเตรียมความพร้อมให้นิสิตสามารถวิเคราะห์และแก้ปัญหาโจทย์ทางด้านวิศวกรรมคอมพิวเตอร์เบื้องต้นได้
โจทย์ : จงคำนวณหาพื้นที่วงกลม ? Problem 1 โจทย์ : จงคำนวณหาพื้นที่วงกลม ?
โจทย์ : จงเขียนโปรแกรมคำนวณหาพื้นที่วงกลม ? Problem 2 โจทย์ : จงเขียนโปรแกรมคำนวณหาพื้นที่วงกลม ? ผู้ใช้จะต้องป้อนค่าอะไรบ้าง ? ตัวแปรที่เกี่ยวข้องมีอะไรบ้าง ? ขั้นตอนการทำงานของโปรแกรมจะเป็นอย่างไร ? ผลลัพธ์ที่ออกมาต้องแปรผันตามค่าของจำนวนหรือตัวเลขที่ผู้ใช้ป้อนเข้าไปหรือไม่ ?
Problem Solving Process วิเคราะห์โจทย์ (Problem Analysis) เขียนขั้นตอนการทำงานอย่างละเอียด (Process Description) เขียนรหัสเทียม (Pseudo Code) เขียนแผนภาพการไหลของข้อมูล (Flowchart) เขียนโค้ด (Coding)
Problem Definition Problem is : any question or matter involving doubt, uncertainty, or difficulty. a question proposed for solution or discussion.
Outline 1 Objectives 2 Problem Analysis 3 Process Description 4 5 Pseudo Code 5 Assignments
Principal of Problem Analysis การวิเคราะห์ข้อมูลเอาท์พุท หรือผลลัพธ์ (Output Analysis) วิเคราะห์ความต้องการของผู้ใช้ หรือผลลัพธ์จากโจทย์ปัญหา การวิเคราะห์ข้อมูลอินพุท (Input Analysis) วิเคราะห์ข้อมูลที่ผู้ใช้ป้อน หรือข้อมูลที่โจทย์ให้มา การวิเคราะห์กระบวนการทำงาน (Process Analysis) วิเคราะห์ขั้นตอนการทำงานที่ให้ได้มา ซึ่งผลลัพธ์ การกำหนดตัวแปร (Variable Define) กำหนดตัวแปรที่ใช้งานการเขียนโปรแกรมเพื่อความถูกต้อง
Example 1 of Problem Analysis โจทย์ จงเขียนโปรแกรมคำนวณหาพื้นที่วงกลม Output Analysis ผลลัพธ์ที่ต้องการ คือ พื้นที่ของวงกลม Input Analysis การคำนวณหาพื้นที่วงกลม จำเป็นต้องทราบขนาดของรัศมี (หรือเส้นผ่านศูนย์กลาง)
Example 1 of Problem Analysis (cont.) Process Analysis 1. รอรับค่ารัศมี (หรือเส้นผ่านศูนย์กลาง) จากผู้ใช้งาน 2. คำนวณหาพื้นที่วงกลมจากสูตร 3. แสดงผลค่าพื้นที่วงกลมออกทางหน้าจอ Variable Define radius : เป็นตัวแปรชนิดจำนวนทศนิยม (float) สำหรับรับค่ารัศมี pi : เป็นตัวแปรชนิดจำนวนทศนิยม (float) สำหรับเก็บค่า area : เป็นตัวแปรชนิดจำนวนทศนิยม (float) สำหรับเก็บค่าพื้นที่
Example 2 of Problem Analysis Example: จงเขียนผังงานและโปรแกรมแสดงผลรูปสี่เหลี่ยมขนาด n x n โดยโปรแกรมจะรอรับจำนวนเต็มจากผู้ใช้งาน ดังตัวอย่าง Please enter number : 4 Output **** Please enter number : 9 Output *********
Example 2 of Problem Analysis (cont.) Output Analysis ผลตัวเลข เป็นรูปสี่เหลี่ยมจัตุรัสขนาดเท่ากับจำนวนตัวเลขที่รับเข้ามา Input Analysis เลขจำนวนเต็มที่ผู้ใช้ป้อนเข้ามา Process Analysis โปรแกรมรอรับค่าจำนวนเต็มจากผู้ใช้งาน โปรแกรมวนรอบเพื่อทำการแสดง '*' เป็นรูปสี่เหลี่ยมจัตุรัส
Example 2 of Problem Analysis (cont.) … บรรทัดที่ n แสดงผล '\n' แล้วแสดงผล '*' จำนวนเท่ากับค่าที่รับมา Variable Define num เป็นจำนวนเต็ม (integer) เพื่อใช้เก็บค่าตัวเลขที่ผู้ใช้ป้อน i เป็นจำนวนเต็ม (integer) เพื่อใช้นับจำนวนบรรทัด j เป็นจำนวนเต็ม (integer) เพื่อใช้นับจำนวน '*'
Example 3 of Problem Analysis จงเขียนผังงานและโปรแกรมสำหรับรับ ชื่อ นามสกุล รหัสนักศึกษา และคะแนนวิชา Computers and Programming เพื่อตรวจสอบว่านักศึกษาได้เกรดระดับใด โดยใช้เกณฑ์ดังนี้ คะแนน 90 – 100 ได้เกรด A คะแนน 80 – 89.99 ได้เกรด B คะแนน 70 – 79.99 ได้เกรด C คะแนน 60 – 69.99 ได้เกรด D คะแนน 0 – 59.99 ได้เกรด F แล้วแสดงผลลัพธ์ ชื่อ สกุล รหัสนักศึกษา คะแนน และเกรด
Example 3 of Problem Analysis (cont.) Output Analysis แสดงชื่อ นามสกุล รหัสนักศึกษา คะแนน และเกรดที่ได้ Input Analysis ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนน Process Analysis โปรแกรมรอรับชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ แสดงผลชื่อ-สกุล รหัสนักศึกษา และคะแนน
Example 3 of Problem Analysis (cont.) Process Analysis (ต่อ) การตรวจสอบคะแนนสอบ ถ้ามากกว่าหรือเท่ากับ 90 แสดงผลว่าได้เกรด A ถ้ามากกว่าหรือเท่ากับ 80 แสดงผลว่าได้เกรด B ถ้ามากกว่าหรือเท่ากับ 70 แสดงผลว่าได้เกรด C ถ้ามากกว่าหรือเท่ากับ 60 แสดงผลว่าได้เกรด D ถ้าไม่ตรงเงื่อนไขที่ผ่านมาทั้งหมด แสดงผลว่าได้เกรด F
Example 3 of Problem Analysis (cont.) Variable Define first : ตัวแปรชนิดข้อความ (character) สำหรับเก็บชื่อขนาด 20 last : ตัวแปรชนิดข้อความ (character) สำหรับเก็บนามสกุลขนาด 20 id : ตัวแปรชนิดข้อความ (character) สำหรับเก็บรหัสนักศึกษาขนาด 9 point : ตัวแปรชนิดจำนวนเต็ม (integer) สำหรับเก็บคะแนน
Example 4 of Problem Analysis Output Analysis แสดงผลเลข 0, 1, 2, … , 10 Input Analysis ไม่มี Process Analysis โปรแกรมแสดงผลเลข 0, 1, 2, … ,10 Variable Define ไม่ใช้ (หรือใช้ count เพื่อเพิ่มค่า)
Example 5 of Problem Analysis Output Analysis แสดงผลเลขรวมของตัวเลขจาก 0-100 Input Analysis ไม่มี Process Analysis โปรแกรมทำการบวกค่าเก็บไว้ในตัวแปรผลลัพธ์ แล้วเพิ่มค่าจนถึง 100 Variable Define count เป็นตัวแปรชนิดจำนวนเต็ม (integer) เพื่อนับจำนวน sum เป็นจำนวนเต็ม (integer) เพื่อเก็บค่าผลรวม
Outline 1 Objectives 2 Problem Analysis 3 Process Description 4 5 Pseudo Code 5 Assignments
What is process description ? Process description is : Broad and written statement of a specific process, based upon the findings of an analysis to generally explore the triggers and outcomes of the process. It specifies a sequence of events that need to be performed throughout the process to reach the process’s objectives. Process description usually forms the basis of process specification. Description of a process essays are frequently found in baking or cooking instructions when the individual needs to follow specific steps in a process to prepare a favourite dish or to try out the latest health food recipe.
What is pseudo code ? Pseudo code (pronounced SOO-doh-kohd) is a detailed yet readable description of what a computer program or algorithm must do, expressed in a formally-styled natural language rather than in a programming language. Pseudo code is sometimes used as a detailed step in the process of developing a program. It allows designers or lead programmers to express the design in great detail and provides programmers a detailed template for the next step of writing code in a specific programming language.
Example 6 of Process Description จงเขียนผังงานและโปรแกรมรับชื่อนามสกุล รหัสนักศึกษา คะแนนสอบรวม และคะแนนเต็ม หากนักศึกษาสอบได้มากกว่า 60% ให้แสดงผลชื่อ นามสกุล รหัสนักศึกษา คะแนน และผลสอบว่าผ่าน Input Analysis ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ / คะแนนเต็ม Output Analysis แสดงผลชื่อ-สกุล รหัสนักศึกษา คะแนนสอบ ผลสอบ Process Analysis โปรแกรมรอรับชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ / คะแนนเต็ม ตรวจสอบว่าคะแนนมากกว่าหรือเท่ากับ 60 % หรือไม่ ถ้าจริง แสดงผลชื่อ-สกุล รหัสนักศึกษา คะแนน และแสดงว่าสอบผ่าน
Example 6 of Process Description (cont.) Variable Define first : ตัวแปรชนิดข้อความ (character) สำหรับเก็บชื่อขนาด 20 last : ตัวแปรชนิดข้อความ (character) สำหรับเก็บนามสกุลขนาด 20 id : ตัวแปรชนิดข้อความ (character) สำหรับเก็บรหัสนักศึกษาขนาด 9 point : ตัวแปรชนิดจำนวนทศนิยม (float) สำหรับเก็บคะแนนรวม full : ตัวแปรชนิดจำนวนทศนิยม (float) สำหรับเก็บคะแนนเต็ม
Process Description 4. แสดงผล คะแนนสอบและคะแนนเต็ม 6. จบการทำงาน 1. เริ่มต้นการทำงาน 2. รับค่า ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ / คะแนนเต็ม 3. แสดงผล ชื่อ / นามสกุล / รหัสนักศึกษา 4. แสดงผล คะแนนสอบและคะแนนเต็ม 5. ตัดสินใจเพื่อทำคำสั่งควบคุมการทำงานแบบมีเงื่อนไข โดยถ้านักศึกษาสอบได้มากกว่า 60% แล้วให้แสดง ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ และผลสอบ 6. จบการทำงาน
Pseudo Code 4. Show Point / Full Point 1. Begin 2. Read Name / Surname / ID / Point / Full Point 3. Show Name / Surname / ID 4. Show Point / Full Point 5. if (Point > = 60 %) Show Name / Surname / ID / Point / Passed 6. End
Example 7 of Process Description (cont.) Example 2 : จงเขียนผังงานและโปรแกรม เพื่อรับจำนวนนักศึกษาในห้อง หลังจากนั้น ให้โปรแกรมรอรับส่วนสูงของคน n คน แล้ววิเคราะห์ว่ามีนักศึกษาในห้องมีส่วนสูงช่วงต่างๆ จำนวนกี่คน แล้วคำนวณส่วนสูงเฉลี่ย แล้วแสดงผลส่วนสูงของนักศึกษาทั้งหมด 0 – 160 161 – 170 171 – 180 181 - 200
Problem Analysis Output Analysis จำนวนนักศึกษาที่สูงแต่ละช่วง ส่วนสูงของนักศึกษาเฉลี่ยในห้อง ส่วนสูงของนักศึกษาทั้งหมด Input Analysis จำนวนนักศึกษาทั้งหมด และส่วนสูงของแต่ละคน Process Analysis โปรแกรมรับจำนวนนักศึกษา วนรอบเพื่อรับส่วนสูงเท่ากับจำนวนนักศึกษา วนรอบเพื่อตรวจสอบช่วงส่วนสูงของนักศึกษาและหาผลรวมส่วนสูงของนักศึกษาทุกคน คำนวณหาค่าเฉลี่ย
Problem Analysis Variable Define num เป็นจำนวนเต็ม (integer) เพื่อเก็บจำนวนนักศึกษา a เป็นจำนวนเต็ม (integer) เพื่อตรวจตำแหน่งตัวแปร และนับรอบ range1=0, range2=0, range3=0, range4=0 เป็นจำนวนเต็ม (integer) สำหรับเก็บค่าจำนวนนักศึกษาแต่ละช่วง high[300] เป็นตัวแปรแถว (array) ลำดับชนิดทศนิยมเพื่อเก็บส่วนสูง avg = 0 เป็นจำนวนทศนิยม (float) เพื่อเก็บค่าผลรวมและค่าเฉลี่ย
Process Description เริ่มต้นทำงาน ทำการรับจำนวนนักศึกษา วนรอบเท่ากับจำนวนนักศึกษาที่ป้อนเข้ามาเพื่อรับส่วนสูงของนักศึกษาแต่ละคน วนรอบเพื่อตรวจสอบจำนวนของนักศึกษาที่มีความสูงตรงกับแต่ละช่วงความสูงและหาค่าผลรวมความสูงของนักศึกษาทั้งหมด หาค่าเฉลี่ยความสูง จบการทำงาน
Pseudo Code Begin Read amount of students Repeat { Read each height of student Check and increase amount of each range Calculate the summation of height } Calculate the average height End
Outline 1 Objectives 2 Problem Analysis 3 Process Description 4 5 Pseudo Code 5 Assignments
Assignments จงวิเคราะห์โปรแกรม อธิบายขั้นตอนการทำงาน และเขียนรหัสเทียมเพื่อแสดงสูตรคูณแม่ 2 จงวิเคราะห์โปรแกรม อธิบายขั้นตอนการทำงาน และเขียนรหัสเทียมเพื่อรับอักษรตัวเล็กมา 20 ตัว แล้วตรวจสอบว่ามีอักษรที่เป็นสระกี่ตัว และไม่ใช่สระกี่ตัว จงวิเคราะห์โปรแกรม อธิบายขั้นตอนการทำงาน และเขียนรหัสเทียมของการจ่ายเงินของตู้ ATMโดยให้ผู้ใช้กรอกจำนวนเงินเข้ามาแล้วโปรแกรมจะตรวจสอบว่าถูกต้องหรือไม่โดยมีเงื่อนไขว่า ATM จะจ่ายเงินให้ไม่เกิน 20000 และต้องมากกว่า 100 ซึ่งโปรแกรมจะต้องคำนวณว่าต้องจ่ายเป็นธนบัตรมูลค่าต่างๆอย่างละจำนวนกี่ใบโดยกำหนดให้ในเครื่อง ATM มีธนบัตรมูลค่าต่างๆดังนี้ ธนบัตรใบละ 1000 ธนบัตรใบละ 500 ธนบัตรใบละ 100
Assignments (cont.) จงเขียนผังงานและโปรแกรมแสดงผลรูปสี่เหลี่ยมขนาด n x n โดยโปรแกรมจะรอรับจำนวนเต็มจากผู้ใช้งาน ดังตัวอย่าง Please enter number : 4 Output **** * * Please enter number : 9 Output ********* * * * *
Assignments (cont.) จงเขียนผังงานและโปรแกรม เมนูรับรายการอาหารจากลูกค้าเพื่อคำนวณ ราคาอาหารทั้งหมด โดยกำหนดให้โปรแกรมมีรายการดังนี้ 1. Pizza 150 ฿ 2. Hamburger 50 ฿ 3. Sandwich 25 ฿ 4. Water 10 ฿ 0. Calculate money โดยทุกครั้งที่เลือกเมนูรายการอาหารจะแสดงจำนวนอาหารที่สั่งไปแล้วด้วย
Assignments (cont.) ตัวอย่างการรันโปรแกรม เลือก 1 เพื่อสั่ง Pizza แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม
Assignments (cont.) แสดงจำนวนของ และราคา รอรายการ เลือก 4 เพื่อสั่ง Water แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม
Assignments (cont.) แสดงจำนวนของ และราคา รอรายการ เลือก 0 เพื่อจบรายรายและสรุปจำนวนเงิน
Hint : ตรวจสอบสระ Output Analysis Input Analysis Process Analysis Solution: จงเขียนผังงาน และโปรแกรมเพื่อรับอักษรตัวเล็กมา 20 ตัว แล้วตรวจสอบว่ามีอักษรที่เป็นสระกี่ตัว และไม่ใช่สระกี่ตัว Output Analysis จำนวนอักษรที่เป็นสระและไม่ใช่สระ Input Analysis อักษรที่ผู้ใช้ป้อนมาจำนวน 20 ตัว Process Analysis โปรแกรมทำงานแบบวนรอบเพื่อรับค่าจำนวนอักขระ แล้วตรวจสอบว่าเป็นสระ หรือไม่ แล้วนับจำนวนไว้จนครบ 20 ตัว
Hint : ตรวจสอบสระ (ต่อ) Variable Define vowel เป็นจำนวนเต็ม (integer) เพื่อใช้นับจำนวนสระ alphabet เป็นจำนวนเต็ม (integer) เพื่อใช้นับจำนวนที่ไม่ใช่สระ count เป็นจำนวนเต็ม (integer) เพื่อใช้นับว่าครบ 20 ตัวหรือไม่ letter เป็นอักขระ (character) เพื่อรับตัวอักษร
Hint : โปรแกรมตู้ ATM จงเขียนโปรแกรมเพื่อรับค่าตัวเลขของผู้ใช้งานตู้ ATM พร้อมทั้งแสดงผลจากการรับค่าตัวเลขดังกล่าวออกสู่หน้าจอ (ให้วิเคราะห์ขั้นตอนการทำงาน เขียนรายละเอียดการทำงาน รหัสเทียม Flowchart พร้อมทั้งเขียนโปรแกรม) ตัวอย่าง ผู้ใช้ป้อนค่า : 2,500 ->แบงค์ 1,000 จำนวน 2 ใบ ->แบงค์ 500 จำนวน 1 ใบ ข้อควรระลึก - ป้อนค่าเป็นเลขทศนิยมและเลขหลักสิบได้ไหม? - มีวิธีการใดบ่งบอกมิให้ผู้ใช้ป้อนค่าผิดหรือไม่?
Hint : โปรแกรมตู้ ATM Output Analysis Input Analysis Process Analysis แสดงผลลัพธ์ของจำนวนธนบัตรมูลค่าต่างๆ Input Analysis จำนวนเงินที่ผู้ใช้ต้องการกรอก Process Analysis โปรแกรมทำงานแบบวนรอบ เพื่อรับค่าจำนวนเงินที่ถูกต้อง ถ้าจำนวนเงินถูกต้องให้คำนวณว่ามีธนบัตรใดจำนวนเท่าใด
Hint : โปรแกรมตู้ ATM (ต่อ) ตรวจสอบว่าจำนวนเงินควรมีธนบัตรมูลค่า 1000 ฿ กี่ใบ แสดงผลและหักจำนวนเงินที่จ่ายธนบัตรมูลค่า 1000 ฿ ตรวจสอบว่าจำนวนเงินที่เหลือควรมีธนบัตรมูลค่า 500 ฿ กี่ใบ แสดงผลและหักจำนวนเงินที่จ่ายธนบัตรมูลค่า 500 ฿ ตรวจสอบว่าจำนวนเงินที่เหลือควรมีธนบัตรมูลค่า 100 ฿ กี่ใบ แสดงผล Variable Define money เป็นจำนวนเต็ม (integer) สำหรับเก็บค่าเงิน amount เป็นจำนวนเต็ม (integer) สำหรับเก็บจำนวนธนบัตรที่จ่ายออกไป
Hint : โปรแกรมคำนวณค่าอาหาร Output Analysis แสดงผลจำนวนรายการอาหาร และราคา Input Analysis จำนวนรายการอาหารที่ผู้ซื้อเลือก Process Analysis โปรแกรมทำงานแบบวนรอบ เพื่อแสดงรายการอาหาร และรับข้อมูลรายการอาหารที่เลือก แล้วรวมผลของรายการแต่ละชนิด และราคารวม
Hint : โปรแกรมคำนวณค่าอาหาร (ต่อ) Variable Define menu เป็นจำนวนเต็ม (integer) สำหรับรับรายการอาหาร m1,m2,m3,m4 เป็นจำนวนเต็ม (integer) สำหรับนับจำนวนรายการอาหาร money เป็นจำนวนทศนิยม (float) สำหรับเก็บจำนวนเงินรวม i เป็นจำนวนเต็ม (integer) เพื่อควบคุมการเว้นบรรทัด