การแสดงขั้นตอนวิธีด้วยรหัสเทียม (Pseudo-Code) 1204102 Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์ อ. สำรวน เวียงสมุทร อ.ณภัทร สักทอง อ.อุมาภรณ์ สายแสงจันทร์
รหัสเทียม (Pseudo Code) เป็นคำสั่งที่ไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง โดยเป็นคำสั่งที่นำมาใช้เขียนเลียนแบบชุดคำสั่งแบบย่อๆ เพื่อออกแบบโปรแกรม หรือร่างเค้าโครงโปรแกรมที่จะเขียนขึ้นมา ก่อนที่จะนำไปแปลงเขียนเป็นชุดคำสั่งด้วยภาษาคอมพิวเตอร์จริงๆต่อไป 1204102 Problem Solving
ประโยชน์ของรหัสเทียม นำมาใช้ทบทวนความถูกต้องกับสิ่งที่ได้ออกแบบไป นำมาใช้เพื่อกำหนดงานเขียนโปรแกรม เพื่อให้โปรแกรมเมอร์นำไปเพิ่มเติมรายละเอียดและใช้เป็นแนวทางในการเขียนโปรแกรมต่อไป นำไปใช้เป็นเอกสารประกอบโปรแกรม เพื่องานบำรุงรักษาโปรแกรมที่อาจเกิดขึ้นในอนาคต นำมาใช้เป็นเครื่องมือเพื่อการออกแบบต่างๆ ที่เกี่ยวข้องกับเทคนิคเชิงโครงสร้ง เช่นการออกแบบโมดูลโปรแกรม การออกแบบโปรแกรมแบบบนลงล่าง เป็นต้น 1204102 Problem Solving
หลักการเขียนรหัสเทียม ถ้อยคำต่างๆให้เขียนเป็นภาษาอังกฤษอย่างง่าย แต่ละคำสั่ง ให้เขียนอยู่ในแต่ละบรรทัด ควรใช้ย่อหน้าให้เป็นประโยชน์ การแยกคำเฉพาะ (keyword) ให้มีความชัดเจน นอกจากนี้ ควรจัดรูปแบบโครงสร้างควบคุมให้เป็นสัดส่วน เพื่อให้อ่านง่าย เขียนประโยคคำสั่งเรียงลำดับแบบบนลงล่าง มีทางเข้าและทางออกเพียงทางเดียว กลุ่มประโยคคำสั่งต่างๆ อาจนำมาจัดกลุ่มเข้าด้วยกันในรูปแบบของโมดูล และทำการกำหนดชื่อโมดูลขึ้นมา เพื่อให้ส่วนโปรแกรมหลัก หรือโมดูลย่อยอื่นๆเรียกใช้งานได้ 1204102 Problem Solving
การแสดง Algorithm : รหัสเทียม (Pseudo-code) การแสดงขั้นตอนการทำงานของโปรแกรม โดยอาจใช้คำภาษาอังกฤษ หรือเรียบเรียงที่เป็นภาษาที่ผู้อ่านเข้าใจได้ง่าย มีความชัดเจน สั้น กระชับ อาจกำหนดรหัสกลาง มาใช้ในการเขียนขั้นตอนการทำงาน เช่น รหัสเริ่มต้นและจบการทำงาน Start, เริ่มต้น Stop, จบการทำงาน รหัสรับข้อมูลและแสดงผล Read, อ่าน Print, พิมพ์ Write, เขียน รหัสควบคุมการทำงาน If-Then-Else-Endif, ทางเลือก Do-While-Enddo, ทำซ้ำ-ตรวจสอบเงื่อนไขก่อน Do-Until, ทำซ้ำ-ตรวจสอบเงื่อนไขทีหลัง รหัสการคำนวณและกำหนดค่าเริ่มต้น Compute, คำนวณ Set, กำหนดค่าเริ่มต้น 1204102 Problem Solving
รูปแบบการเขียน Pseudo-code รูปแบบการเขียน Start-Stop รูปแบบการเขียนคำสั่งรับและแสดงผล Start คำสั่งที่ 1 คำสั่งที่ 2 … คำสั่งที่ N Stop Read ตัวแปร 1, ตัวแปร 2, …, ตัวแปร N Print ตัวแปร 1, ตัวแปร 2, …, ตัวแปร N Write ตัวแปร 1, ตัวแปร 2, …, ตัวแปร N รูปแบบการเขียนคำสั่งกำหนดค่าเริ่มต้น Set ตัวแปร = ค่าข้อมูล ตัวแปร = ค่าข้อมูล รูปแบบการเขียนคำสั่งคำนวณ Compute ตัวแปรผลลัพธ์ = นิพจน์การคำนวณ ตัวแปรผลลัพธ์ = นิพจน์การคำนวณ 1204102 Problem Solving
โครงสร้างควบคุม (Control Structures) โครงสร้างการทำงานแบบตามลำดับ (Sequence) โครงสร้างการทำงานแบบมีการเลือก (Selection) โครงสร้างการทำงานแบบมีการทำงานซ้ำ (Iteration) รูปแบบการเขียนคำสั่งแบบตามลำดับ (Sequence) รูปแบบการเขียนคำสั่งแบบมีทางเลือก (Selection) แบบที่ 1 คำสั่งที่ 1 คำสั่งที่ 2 … คำสั่งที่ N If เงื่อนไข Then คำสั่งที่ 1 คำสั่งที่ 2 … คำสั่งที่ N End If เข้าทำคำสั่งส่วนนี้เมื่อเงื่อนไขเป็นจริง 1204102 Problem Solving
รูปแบบการเขียน Pseudo-code : คำสั่งควบคุม คำสั่งทางเลือก (Selection) แบบที่ 2 คำสั่งทำซ้ำ (Iteration) Do-While : จะเข้าทำใน Loop เมื่อเงื่อนไขเป็นจริง If เงื่อนไข Then คำสั่งที่ 1 คำสั่งที่ 2 … คำสั่งที่ N Else End If Do While เงื่อนไข คำสั่งที่ 1 … คำสั่งที่ N End Do เข้าทำคำสั่งส่วนนี้เมื่อเงื่อนไขเป็นจริง Do-Until : ทำการวน Loop จนกว่าเงื่อนไขจะเป็นจริง เข้าทำคำสั่งส่วนนี้เมื่อเงื่อนไขเป็นเท็จ Do คำสั่งที่ 1 … คำสั่งที่ N Until เงื่อนไข 1204102 Problem Solving
Example 4.1 จงเขียนอัลกอริทึมโดยใช้ Pseudo-code อัลกอริทึมแบบบรรยาย เริ่มต้น อ่านค่า WIDTH และ LENGTH คำนวณพื้นที่สี่เหลี่ยมผืนผ้า AREA = WIDTH * LENGTH พิมพ์ผลลัพธ์ AREA จบการทำงาน อัลกอริทึมแบบ Pseudo-code แบบ 1 Start Read WIDTH, LENGTH AREA = WIDTH * LENGTH Print AREA Stop อัลกอริทึมแบบ Pseudo-code แบบที่ 2 Start Read WIDTH, LENGTH Compute AREA = WIDTH * LENGTH Print AREA Stop 1204102 Problem Solving
Example 4.2 : จงเขียนรหัสเทียมเพื่อบอกคุณสมบัติของตัวเลข X (1) ถ้า X > 0 ให้พิมพ์คำว่า “POSITIVE NUMBER” ถ้า X < 0 ให้พิมพ์คำว่า “NEGATIVE NUMBER” ถ้า X = 0 ให้พิมพ์คำว่า “ZERO NUMBER” วิธีที่ 1 อัลกอริทึมแบบบรรยาย เริ่มต้น อ่าน ค่า x ถ้า x > 0 แล้ว พิมพ์ “Positive Number” ถ้า x < 0 แล้ว พิมพ์ “Negative Number” ถ้า x = 0 แล้ว พิมพ์ “Zero Number” จบการทำงาน วิธีที่ 2 อัลกอริทึมแบบรหัสเทียม Start Read x If x > 0 Then Print “Positive Number” End If If x < 0 Then Print “Negative Number” If x = 0 Then Print “Zero Number” Stop ข้อสังเกตการเขียนอัลกอริทึม ควรมีย่อหน้าเพื่อแสดงระดับของขั้นตอนที่ชัดเจน 1204102 Problem Solving
Example 4.2 : จงเขียนรหัสเทียมเพื่อบอกคุณสมบัติของตัวเลข X (2) วิธีที่ 3 อัลกอริทึมแบบรหัสเทียม Start Read x If x > 0 Then Print “Positive Number” Else If x < 0 Then Print “Negative Number” Print “Zero Number” End If Stop ข้อสังเกตการเขียนอัลกอริทึม ควรมีย่อหน้าเพื่อแสดงระดับของขั้นตอนที่ชัดเจน 1204102 Problem Solving
Example 4.3 : จงเขียนรหัสจำลองแสดงการเพิ่มข้อมูล J ทีละ 1 จงเขียนรหัสจำลองแสดงการเพิ่มของข้อมูลตัวเลขที่เก็บอยู่ในหน่วยความจำที่แอดเดรส J โดยมีค่าเริ่มต้นจาก 0 ให้ทำการเพิ่มค่าทีละ 1 เรื่อยไปจนกระทั่ง J มีค่าข้อมูลมากกว่า 100 จึงจะหยุดการทำงาน แบบที่ 1 Start Set J=0 Do While J<=100 Compute J=J+1 End Do Stop แบบที่ 2 Start J=0 Do While J<=100 J=J+1 End Do Stop แบบที่ 3 Start Set J=0 Do J=J+1 Until J>100 Stop 1204102 Problem Solving
Example 4.4 : Pseudo-code จงเขียนรหัสเทียมแสดงการหาผลบวกของ 1+2+3+4+…+100 และพิมพ์ผลลัพธ์ออกมาด้วย แบบที่ 1 Start Set J = 0 Do While J<= 100 Compute J = J+1 End Do Stop แบบที่ 2 Start J = 0 Do While J<= 100 J = J+1 End Do Stop 1204102 Problem Solving
Example 4.5 : จงเขียน Pseudo-code หาคะแนนรวม จากคะแนนสอบกลางภาค คะแนนสอบปลายภาค คะแนนการบ้าน แล้วหาคะแนนเฉลี่ยของนักเรียนในชั้นทั้งหมด และพิมพ์ผลลัพธ์คะแนนของนักเรียนแต่ละคน และคะแนนเฉลี่ย ตัวแปร Input/Output จำนวนนักเรียน (NumOfStudent) รหัสนักเรียน (ID) คะแนนสอบกลางภาค (Midterm) คะแนนสอบปลายภาค (Final) คะแนนการบ้าน (Job) คะแนนเฉลี่ย (Average) ตัวแปรที่ใช้ในการคำนวณ คะแนนรวม (Total) ผลรวมคะแนนนักเรียน (Sum) ตัวนับ (Counter) Start Read NumOfStudent Sum = 0 Counter = 0 Do While Counter <= NumOfStudent Read ID, Midterm, Final, Job Total = Midterm + Final + Job Sum = Sum + Total Counter = Counter + 1 Print ID, Midterm, Final, Job, Total End Do Average = Sum / Counter Print Average Stop แบบฝึกหัด ให้ลองทำ Exercise ที่ 2 โดยเขียนเป็น Pseudo-code 1204102 Problem Solving
Example 4.6 : โปรแกรมประมวลผลการเรียน เงื่อนไข คะแนนสอบสูงกว่า 80 คะแนน ได้เกรด A คะแนนสอบ 70-79 คะแนนขึ้นไป ได้เกรด B คะแนนสอบ 60-69 คะแนนขึ้นไป ได้เกรด C คะแนนสอบ 50-59 คะแนนขึ้นไป ได้เกรด D คะแนนสอบต่ำกว่า 50 คะแนน ได้เกรด F BC320 Introduction to Computer Programming
BC320 Introduction to Computer Programming Example 4.6 อัลกอริธึม เริ่มต้นทำงาน รับค่า คะแนนสอบ (Score) เปรียบเทียบ ช่วงคะแนนสอบ 80-100 คะแนน ให้ Grade=‘A’ 70- 79 คะแนน ให้ Grade=‘B’ 60- 69 คะแนน ให้ Grade=‘C’ 50- 59 คะแนน ให้ Grade=‘D’ นอกจากนี้ ให้ Grade=‘Fail’ จบคำสั่งการเปรียบเทียบ แสดงผล เกรด (Grade) จบการทำงาน รหัสเทียม (Pseudo Code) Begin READ Score CASE Score OF 80 – 100 Grade = ‘A’ 70 – 79 Grade = ‘B’ 60 – 69 Grade = ‘C’ 50 – 59 Grade = ‘D’ ELSE Grade = ‘F’ END WRITE Grade End BC320 Introduction to Computer Programming
Example 4.7: จงเขียนPseudo code เพื่อนับจำนวนนักศึกษาที่อายุ มากกว่าหรือเท่ากับ 18 ปี และจำนวนนักศึกษาที่อายุน้อยกว่า 18 ปี Set Adult Counter and Junior Counter to Zero IF student’s age >= 18 THEN Adult Counter = Adult Counter + 1 ELSE Junior Counter = Junior Counter + 1 ENDIF 1204102 Problem Solving
Example 4.8 : จงเขียน Pseudo-code เพื่อนับจำนวนพนักงานหญิง และพนักงานชาย โดยนับจากข้อมูลรหัสเพศ และตรวจสอบด้วยว่าข้อมูลรหัสเพศที่ไม่ถูกต้องมีกี่คน Set FemaleCounter, MaleCounter, ErrorCounter to Zero IF employee’s sex is female THEN FemaleCounter = FemaleCounter + 1 ELSE IF employee’s sex is male THEN MaleCounter = MaleCounter + 1 ELSE ErrorCounter = ErrorCounter + 1 ENDIF ENDIF 1204102 Problem Solving
Compute Area = 3.1415 * radius * radius Display Area End Example 4.9 : จงเขียนรหัสเทียม หาพื้นที่ของวงกลม กำหนดให้ สูตรพื้นที่วงกลม = 3.1415 x รัศมี x รัศมี Area of cycle Read radius Compute Area = 3.1415 * radius * radius Display Area End 1204102 Problem Solving
Example 4.10: ให้นับจำนวนชั่วโมงการทำงานที่เกิน 40 ชั่วโมง IF hour worked > 40 THEN OverTimeCounter = OverTimeCounter + 1 ENDIF 1204102 Problem Solving
Example 4.11: ทำการวนรอบเพื่อพิมพ์รายชื่อลูกค้าจำนวน 5 คน Print Heading Initialize Counter to 1 Repeat Print CustName Increment Counter by 1 Until Counter equals 5 End 1204102 Problem Solving
Repeat While EndOfFile Print CustName , CustAddress Read CustRecord Example 4.12 : ทำการวนรอบเพื่อพิมพ์ชื่อและที่อยู่ของลูกค้าจนหมดแฟ้มข้อมูล Print Heading Read CustRecord Repeat While EndOfFile Print CustName , CustAddress Read CustRecord EndRepeat End 1204102 Problem Solving
อัลกอริธึม Example 4.13 โปรแกรมรับข้อมูลจำนวนสินค้าและราคาสินค้า เริ่มต้นทำงาน กำหนดค่า จำนวนเงินที่ชำระ(Price) เท่ากับศูนย์ รับข้อมูล จำนวนสินค้า (Amt) และ ราคา (Cost) คำนวณจำนวนเงินที่ชำระ จาก Price = Amt x Cost แสดงผล จำนวนที่ต้องชำระ จบการทำงาน รหัสเทียม (Pseudo Code) Begin Price = 0 Read Amt, Cost Price = Amt x Cost Write Price End 1204102 Problem Solving
Example 4.14 : โปรแกรมรับอุณหภูมิสูงสุดและต่ำสุดเพื่อคำนวณค่าเฉลี่ย อัลกอริธึม เริ่มต้นทำงาน กำหนดค่า อุณหภูมิเฉลี่ย (AvgTmp) เท่ากับศูนย์ รับข้อมูล อุณหภูมิสูงสุด(MxTmp) และต่ำสุด(MnTmp) คำนวณ อุณหภูมิเฉลี่ย จาก ผลรวมอุณหภูมิสูงสุดและต่ำสุดหารสอง แสดงผล อุณหภูมิเฉลี่ย จบการทำงาน รหัสเทียม (Pseudo Code) Begin AvgTmp = 0 Read MxTmp, MnTmp AvgTmp=(MxTmp+MnTmp)/2 Write Pay End 1204102 Problem Solving
Thank You See you next time. 1204102 Problem Solving
แบบฝึกหัด 1204102 Problem Solving
การรับข้อมูล : ราคาสินค้า 50 บาท จำนวนสินค้าที่ซื้อ 2 ชิ้น แบบฝึกหัด 4.1 เมื่อต้องการคิดค่าใช้จ่ายภายหลังจากบวกภาษีมูลค่าเพิ่ม 7% ของมูลค่าสินค้าที่ต้องชำระ การรับข้อมูล : ราคาสินค้า 50 บาท จำนวนสินค้าที่ซื้อ 2 ชิ้น การแสดงผล : ภาษีที่ต้องชำระ 7 บาท จำนวนเงินทั้งหมดที่ต้องชำระ 107 บาท จงเขียน Algorithm, และ Pseudo code 1204102 Problem Solving
แบบฝึกหัด 4.2 จงเขียนอัลกอริทึมและรหัสเทียม เพื่อแสดงการหาเศษเหลือ สมมุติว่ามีเงิน N บาท ต้องการทราบว่ามีธนบัตรใบละ 100 ใบละ 50 ใบละ 20 เหรียญ 10เหรียญ และ เหรียญ 1 บาท อย่างละกี่อัน เช่น N = 256 บาท แบงค์ 100 มี 2 ใบ แบงค์ 50 มี 1 ใบ เหรียญ 5 มี 1 เหรียญ เหรียญ 1 บาท มี 1 เหรียญ 1204102 Problem Solving
แบบฝึกหัด 4.3 จงเขียนอัลกอริทึมและรหัสเทียมเพื่อแสดงการคำนวณหา ยอดขายสุทธิ ซึ่งมีหลักเกณฑ์ ในการลดราคาดังนี้ ถ้าซื้อตั้งแต่ 10000 บาทขึ้นไปลดให้ 20 % ถ้าซื้อตั้งแต่ 5000 บาท ไม่เกิน 10000 บาท ลด 10 % ถ้าซื้อตั้งแต่ 1000 ไม่เกิน 5000 บาท ลด 5% นอกนั้นไม่มีส่วนลด 1204102 Problem Solving
แบบฝึกหัด 4.4 จงเขียนอัลกอริทึมและรหัสเทียมเพื่อแสดงว่าโปรแกรมทำรับค่าตัวเลข 2 ค่า (Num1,Num2) และรับค่าChoice ที่จะให้เลือกทำ โดยให้แสดงผลลัพธ์(Result) ดังนี้ ถ้าเลือก Choice ‘A’ ให้นำตัวเลขมาบวกกัน ถ้าเลือก Choice ‘B’ ให้นำตัวเลขมาลบกัน ถ้าเลือก Choice ‘C’ ให้นำตัวเลขมาคูณกัน ถ้าเลือก Choice ‘D’ ให้นำตัวเลขมาหารกัน 1204102 Problem Solving
แบบฝึกหัด 4.5 จงเขียนอัลกอริทึมและรหัสเทียมเพื่อแสดงการคำนวณหายอดเงินที่ต้องชำระ โดยที่ ถ้าซื้อสินค้า 0-100 บาท ได้ส่วนลด 5% ถ้าซื้อสินค้า 101-200 บาท ได้ส่วนลด 7% ถ้าซื้อสินค้าเกิน 200 บาท ได้ส่วนลด 10% โดยแสดงผลลัพธ์เป็นยอดเงินก่อนหักส่วนลด ส่วนลดของลูกค้า และยอดเงินสุทธิ 1204102 Problem Solving
แบบฝึกหัด 4.6 จากโปรแกรม เพื่อคำนวณหาค่าจอดรถ โดยอัตราการจอดรถ มีดังนี้ ถ้าเป็นรถยนต์ ชั่วโมงแรก 20 บาท ชั่วโมงที่สอง 30 บาท ชั่วโมงที่เกินจากสองชั่วโมงแรก คิดรวม 50 บาท ถ้าเป็นรถบรรทุก ชั่วโมงแรก 30 บาท ชั่วโมงที่สอง 40 บาท ชั่วโมงที่เกินจากสองชั่วโมงแรก คิดรวม 60 บาท 1204102 Problem Solving
แบบฝึกหัด 4.7 จงเขียนอัลกอริทึมและรหัสเทียมเพื่อให้โปรแกรมแสดงขนาดของการใช้ยาตามอายุของผู้ใช้ อายุมากกว่า 10 ปี แสดงข้อความรับประทานครั้งละ 3 ช้อนชา อายุ 6-10 ปี แสดงข้อความรับประทานครั้งละ 2 ช้อนชา อายุ 2-5 ปี แสดงข้อความรับประทานครั้งละ 1 ช้อนชา เด็กอายุต่ำกว่า 1 ปี ห้ามรับประทาน 1204102 Problem Solving
แบบฝึกหัด 4.8 จงเขียน Algorithm และ Pseudo code ของโปรแกรมที่กำหนดให้ต่อไปนี้ 4.8.1 ให้รับค่า A,B ถ้า A>B ให้หาค่าผลต่าง แต่ถ้าไม่ใช่ให้หาค่าผลรวม 4.8.2 โปรแกรมคำนวณหาค่า y ของสมการ y = x^2 + 2x +10 4.8.3 โปรแกรมแสดงยอดขายของร้านค้าแห่งหนึ่งมีนโยบาย ลดราคาให้ลูกค้า ถ้าเป็นชายจะลดให้ 50 บาท แต่ถ้าเป็นหญิง จะลดให้ 100 บาท 4.8.4 โปรแกรมรับค่าตัวเลขจำนวนเต็ม และนำมาคำนวณหาค่าแฟคตอเรียล 4.8.5 โปรแกรมรับค่าจำนวนเต็ม และนำมาแสดงผลเป็นสูตรคูณแม่นั้นๆ 1204102 Problem Solving