226111 Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 13 การออกแบบผังงานแบบมีเงื่อนไขร่วมกับการทำงานแบบวนซ้ำ (Advance Flowchart Design)
Objectives เพื่อให้นิสิตรู้และเข้าใจกระบวนการในการวิเคราะห์โจทย์ปัญหาแบบวนซ้ำร่วมกับการทำงานแบบมีเงื่อนไขได้ for -> if While -> if-else do-while ->if-else if-else Switch ->Nested if, Switch เพื่อเตรียมความพร้อมให้นิสิตสามารถวิเคราะห์และแก้ปัญหาโจทย์การทำงานแบบวนซ้ำร่วมกับการทำงานแบบมีเงื่อนไขอันเป็นพื้นฐานในการประมวลผลเบื้องต้นของภาษาคอมพิวเตอร์ได้
Example #1 for & if-else-if จงเขียนผังงานและโปรแกรมสำหรับรับ ชื่อ นามสกุล รหัสนักศึกษา และคะแนนวิชา Principle of Problem Solving and Basic Programming ของนิสิตวิศวกรรมคอมพิวเตอร์ชั้นปีที่ 1 เพื่อตรวจสอบว่านิสิตแต่ละคนได้เกรดระดับใด โดยใช้เกณฑ์ดังนี้ คะแนน 90 – 100 ได้เกรด A คะแนน 80 – 89.99 ได้เกรด B คะแนน 70 – 79.99 ได้เกรด C คะแนน 60 – 69.99 ได้เกรด D คะแนน 0 – 59.99 ได้เกรด F แล้วแสดงผลลัพธ์ ชื่อ สกุล รหัสนักศึกษา คะแนน และเกรด ของนิสิตแต่ละคนก่อนวนซ้ำเพื่อประมวลผลนิสิตคนถัดไป
Example #1 for & if-else-if (cont.) Output Analysis แสดงชื่อ นามสกุล รหัสนักศึกษา คะแนน และเกรดที่ได้ของนิสิตแต่ละคน Input Analysis ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนของนิสิตแต่ Process Analysis โปรแกรมวนรอรับชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ แสดงข้อมูลที่กรอกเพื่อตรวจทานความถูกต้อง แสดงผลชื่อ-สกุล รหัสนักศึกษา และคะแนน
Example #1 for & if-else-if (cont.) Process Analysis (ต่อ) การตรวจสอบคะแนนสอบ ถ้ามากกว่าหรือเท่ากับ 90 แสดงผลว่าได้เกรด A ถ้ามากกว่าหรือเท่ากับ 80 แสดงผลว่าได้เกรด B ถ้ามากกว่าหรือเท่ากับ 70 แสดงผลว่าได้เกรด C ถ้ามากกว่าหรือเท่ากับ 60 แสดงผลว่าได้เกรด D ถ้าไม่ตรงเงื่อนไขที่ผ่านมาทั้งหมด แสดงผลว่าได้เกรด F
Example #1 for & if-else-if (cont.) Variable Define first : ตัวแปรชนิดข้อความสำหรับเก็บชื่อขนาด 20 last : ตัวแปรชนิดข้อความสำหรับเก็บนามสกุลขนาด 20 id : ตัวแปรชนิดข้อความสำหรับเก็บรหัสนักศึกษาขนาด 9 point : ตัวแปรชนิดจำนวนเต็มสำหรับเก็บคะแนน n : ตัวแปรชนิดจำนวนเต็มสำหรับรับจำนวนนิสิต
Example #1 for & if-else-if (cont.) START first, last, id, point, n = 0 n < = 65 False True b first, last, id, point first, last, id, point a
Example #1 for & if-else-if (cont.) "Grade A" Point >= 90 True False "Grade B" Point >= 80 True False Point >= 70 "Grade C" True False Point >= 60 "Grade D" True c d
Example #1 for & if-else-if (cont.) b,d False "Grade F" END
Example #2 for & while & if-else-if จงเขียนผังงาน และโปรแกรมการจ่ายเงินของตู้ ATMโดยให้ผู้ใช้กรอกจำนวนเงินเข้ามาแล้วโปรแกรมจะตรวจสอบว่าถูกต้องหรือไม่โดยมีเงื่อนไขว่า ATM จะจ่ายเงินให้ไม่เกิน 20000 และต้องมากกว่า 100 ซึ่งโปรแกรมจะต้องคำนวณว่าต้องจ่ายเป็นธนบัตรมูลค่าต่างๆอย่างละจำนวนกี่ใบโดยกำหนดให้ในเครื่อง ATM มีธนบัตรมูลค่าต่างๆดังนี้ ธนบัตรใบละ 1000 ธนบัตรใบละ 500 ธนบัตรใบละ 100
Example #2 for & while & if-else-if (cont.) Output Analysis แสดงผลลัพธ์ของจำนวนธนบัตรมูลค่าต่างๆ Input Analysis รหัสผ่านและจำนวนเงินที่ผู้ใช้ต้องการกรอก Process Analysis โปรแกรมทำงานแบบวนรอบเพื่อรับรหัสผ่านจำนวน 3 ครั้ง ถ้ารหัสผ่านถูกต้องแล้วจะดำเนินการวนซ้ำเพื่อรับค่าจำนวนเงินที่ถูกต้องต่อไป ถ้าจำนวนเงินถูกต้องให้คำนวณว่ามีธนบัตรใดจำนวนเท่าใด
Example #2 for & while & if-else-if (cont.) ตรวจสอบว่าจำนวนเงินควรมีธนบัตรมูลค่า 1000 ฿ กี่ใบ แสดงผลและหักจำนวนเงินที่จ่ายธนบัตรมูลค่า 1000 ฿ ตรวจสอบว่าจำนวนเงินที่เหลือควรมีธนบัตรมูลค่า 500 ฿ กี่ใบ แสดงผลและหักจำนวนเงินที่จ่ายธนบัตรมูลค่า 500 ฿ ตรวจสอบว่าจำนวนเงินที่เหลือควรมีธนบัตรมูลค่า 100 ฿ กี่ใบ แสดงผล Variable Define money เป็นจำนวนเต็มสำหรับเก็บค่าเงิน amount เป็นจำนวนเต็มสำหรับเก็บจำนวนธนบัตรที่จ่ายออกไป i เป็นจำนวนเต็มสำหรับวนรอบจำนวนครั้งของรหัสผ่าน
Example #2 for & while & if-else-if (cont.) START money, amount, password, i X i <= 3 False True password 2 Password != ‘Correct’ True 1
Example #2 for & while & if-else-if (cont.) 1 (money > 20000) || (money%100!=0) True money False 3
Example #2 for & while & if-else-if (cont.) money/1000!=0 amount = money/1000 money = money%1000 "1000฿" amount True 3 False X A money/500!=0 amount = money/500 money = money%500 "500฿" 4
Example #3 for & while & if-else-if (cont.) END money/100!=0 amount = money/100 money = money%100 "100฿" amount True 4 False X 2
Example #2 do-while & if-else-if จงเขียนผังงานและโปรแกรม เมนูรับรายการอาหารจากลูกค้าเพื่อคำนวณ ราคาอาหารทั้งหมด โดยกำหนดให้โปรแกรมมีรายการดังนี้ 1. Pizza 150 ฿ 2. Hamburger 50 ฿ 3. Sandwich 25 ฿ 4. Water 10 ฿ 0. Calculate money โดยทุกครั้งที่เลือกเมนูรายการอาหารจะแสดงจำนวนอาหารที่สั่งไปแล้วด้วย
Example #3 do-while & if-else-if (cont.) ตัวอย่างการรันโปรแกรม เลือก 1 เพื่อสั่ง Pizza แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม
Example #3 do-while & if-else-if (cont.) แสดงจำนวนของ และราคา รอรายการ เลือก 4 เพื่อสั่ง Water แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม
Example #3 do-while & if-else-if (cont.) แสดงจำนวนของ และราคา รอรายการ เลือก 0 เพื่อจบรายรายและสรุปจำนวนเงิน
Example #3 do-while & if-else-if (cont.) Output Analysis แสดงผลจำนวนรายการอาหาร และราคา Input Analysis จำนวนรายการอาหารที่ผู้ซื้อเลือก Process Analysis โปรแกรมทำงานแบบวนรอบ เพื่อแสดงรายการอาหาร และรับข้อมูลรายการอาหารที่เลือก แล้วรวมผลของรายการแต่ละชนิด และราคารวม
Example #3 do-while & if-else-if (cont.) Variable Define menu เป็นจำนวนเต็มสำหรับรับรายการอาหาร m1,m2,m3,m4 เป็นจำนวนเต็มสำหรับนับจำนวนรายการอาหาร money เป็นจำนวนทศนิยมสำหรับเก็บจำนวนเงินรวม i เป็นจำนวนเต็มเพื่อควบคุมการเว้นบรรทัด
Example #3 do-while & if-else-if (cont.) START menu, money=0 m1=0,m2=0,m3=0 money END menu menu == 1 money=money+150 m1++ money=money+50 m2++ money=money+25 m3++ menu!=0 m1,m2 m3,m4 money=money+10 m4++ menu == 2 menu == 3 menu == 4 True False
Example #4 switch & if-else-if (cont.) โรงสีแห่งหนึ่งต้องการโปรแกรมสำหรับคิดยอดเงินรวมสำหรับเกษตรกรแต่ละรายตามโครงการรับจำนำข้าวเปลือกของรัฐบาล ซึ่งแต่ละครอบครัวสามารถจำนำข้าวได้สูงสุด 500,000 บาทต่อครัวเรือน โรงจะรับจำนำข้าวให้แก่เกษตรกรวันละ 300 ราย โดยมีรายละเอียดของข้าวในโครงการรับจำนำดังนี้ ข้าวสาวไห้ตันละ 7,500 บาท ข้าวชัยนาทตันละ 8,500 บาท ข้าวหอมปทุมราคาตันละ 9,000 บาท
Example #4 switch & if-else-if (cont.) ข้าวหอมมะลิซึ่งจะแบ่งออกเป็นสามประเภทตามเปอร์เซ็นต์ความชื้นและสิ่งเจือปน ความชื้น 5 เปอร์เซ็นต์และสิ่งเจือปนไม่เกิน 10 เปอร์เซ็นต์ ตันละ 15,000 บาท ความชื้น 10 เปอร์เซ็นต์และสิ่งเจือปนไม่เกิน 15 เปอร์เซ็นต์ ตันละ 13,000 บาท ความชื้น 15 เปอร์เซ็นต์และสิ่งเจือปนไม่เกิน 20 เปอร์เซ็นต์ ตันละ 12,000 บาท ความชื้น 20 เปอร์เซ็นต์และสิ่งเจือปนไม่เกิน 25 เปอร์เซ็นต์ ตันละ 10,000 บาท
Example #4 switch & if-else-if (cont.) โปรแกรมจะรับรายละเอียดจากเกษตรกร คือ วันเดือนปี ลำดับคิวที่เข้ามา ชื่อ นามสกุล ชนิดของข้าวน้ำหนักข้าวที่รับจำนำ จากนั้นจะทำการคำนวณยอดเงินที่เกษตรกรจะได้ตามเงื่อนไขที่กำหนดไว้ข้างต้น กำหนดให้ :
Example #4 switch & if-else-if (cont.) START Name, Last, Date, Q, Type, W X i <= 300 False True 2 Name, Last, Date, Q, Type, W 5 True 1
Example #4 switch & if-else-if (cont.) 1 Type สาวไห้ : 1 ชัยนาท : 2 หอมปทุม : 3 Default (มะลิ : 4) Money = W*7.50 Money = W*8.50 Money = W*9.00 If ( H <= 5&&C<=10) Money = W*15.00 Else if (??) Money = W*13.00 Money = W*12.00 Else (??) Money = W*10.00 3
Example #4 switch & if-else-if (cont.) 3 Humidity, Clarity H & C กรณี 1 กรณี 2 กรณี 3 กรณี 4 Money = W*15.00 Money = W*13.00 Money = W*12.00 Money = W*10.00 4
Example #4 switch & if-else-if (cont.) 5 True Money > 500000 False Show Money END
Example #5 switch & if-else-if (cont.) ชมรมสื่อและทัศนศิลป์มหาวิทยาลัยพะเยาต้องการโปรแกรมเพื่อสำรวจความนิยมในการรับชมละครหลังข่าวของสถานีโทรทัศน์ช่อง 3, 5, 7 และ 9 จากนิสิตสาขาวิชาวิศวกรรมคอมพิวเตอร์ชั้นปีที่ 1 โดยละครหลังข่าวของสถานีโทรทัศน์ช่องต่างๆ มีดังนี้ ช่อง 3 แค้นเสน่หา กุหลาบไฟ นางร้ายสายลับ ช่อง 5 ปีกมาร สุดสายป่าน หัวใจเรือพ่วง
Example #5 switch & if-else-if (cont.) ช่อง 7 วันนี้ที่รอคอย โดมทอง ไฟหวน ช่อง 9 My Melody 360 องศารัก สาวน้อย นางมาร โปรแกรมจะทำการรับข้อมูล จำนวนนิสิตสาขาวิชาวิศวกรรมคอมพิวเตอร์ชั้นปีที่ 1 เพศ อายุ จากนั้นโปรแกรมจะทำการประมวลผลการโหวตของนิสิตแต่ละคน รวมรวมคะแนนโหวต จากนั้นจะแสดงผลละครสามอันดับแรกที่ได้รับความนิยมมากที่สุด แสดงผลช่องสถานีที่ได้รับความนิยมสามลำดับแรกก่อนสิ้นสุดการทำงาน
Example #5 switch & if-else-if (cont.) START channel, Series, C1-C4, m1-m12, i X i <= 65 False True 2 password 5 True 1
Example #5 switch & if-else-if (cont.) 1 Channel ช่อง 3 ช่อง 5 ช่อง 7 Default (ช่อง 9) If ( Series == 1) M1++ Else if (Series == 1) M2++ Else (Series == 1) M3++ If ( Series == 1) M4++ Else if (Series == 1) M5++ Else (Series == 1) M6++ If ( Series == 1) M7++ Else if (Series == 1) M8++ Else (Series == 1) M9++ If ( Series == 1) M10++ Else if (Series == 1) M11++ Else (Series == 1) M12++ 3
Example #5 switch & if-else-if (cont.) Series Series เรื่องที่ 2 เรื่องที่ 1 เรื่องที่ 3 M1++ M2++ M3++
Example #5 switch & if-else-if (cont.) 3 X i <= 4 False True Comparison of C1-C4 Show Top 3 Channel X 4
Example #5 switch & if-else-if (cont.) First = C1, Second = 0; Third = 0; I = 2 If (C2 > C1) , First = C2, Second = C1; Third = 0; Else , First = C1, Second = C2; Third = 0; I = 3 If ((C3 > C2) && (C2>C1)), First = C3, Second = C2; Third = C1; Else if (???), First = C2, Second = C1; Third = c3; ?? Else I = 4 If (C2 > C1) First = C2, Second = C1; Third = 0;
Example #5 switch & if-else-if (cont.) 4 X 5 i <= 12 False True Comparison of M1-M12 Show Top 3 Series X X 2 END
Example #5 switch & if-else-if (cont.) First = S1, Second = 0; Third = 0; I = 2 If (C2 > C1) , First = S2, Second = S1; Third = 0; Else , First = C1, Second = C2; Third = 0; I = 3 I = ??? If ((C3 > C2) && (C2>C1)), First = C3, Second = C2; Third = C1; Else if (???), First = C2, Second = C1; Third = c3; ?? Else I = 12 If (C2 > C1) First = C2, Second = C1; Third = 0;