ขั้นตอนวิธี Algorithms
สัญญลักษณ์ที่ใช้แทนขั้นตอนวิธี ภาษาธรรมชาติ (Natural languge) เป็นภาษาที่มนุษย์ใช้พูดและเขียนในชีวิตประจำวัน ข้อเสีย ไม่ชัดเจน ตีความหมายแตกต่างกัน รหัสเทียม (Pseudocode) เป็นการเขียนคำสั่งคล้ายในภาษาโปรแกรมแต่ไม่ต้องมีไวยากรณ์ หรือวิธีการสร้างประโยคที่เข้มงวด ผู้เขียนแต่ละคนอาจมีวิธีการเขียนที่แตกต่างกัน ผังงาน (Flowchart) เป็นสัญลักษณ์ที่มีรูปแบบชัดเจน
เริ่มต้น ผังงาน (Flowchart) จ่าหน้าซอง พับจดหมาย พัฒนาโดย American National Standards Institute (ANSI) แสดงการแก้ปัญหาด้วยภาพ ใช้สัญลักษณ์แทนการกระทำ ใช้ลูกศรเพื่อแสดงลำดับของการกระทำ สัญลักษณ์ที่ใช้มีหลายรูปแบบเพื่อแสดงถึงการกระทำที่แตกต่างกัน นำจดหมายใส่ซอง มีแสตมป์? ยังไม่มี ซื้อแสตมป์ มีแล้ว ติดแสตมป์ นำจดหมายใส่ซอง จบ
รหัสเทียม (Pseudocode) คล้ายภาษาอังกฤษ บางทีเรียกว่า ภาษาอังกฤษแบบโครงสร้าง ใช้เพื่อเขียนขั้นตอนวิธีให้เป็นระบบระเบียบดีกว่าภาษาอังกฤษที่ใช้กันทั่วไป แต่มีกฎเกณฑ์น้อยกว่าภาษาโปรแกรมคอมพิวเตอร์ ช่วยทำให้สามารถมุ่งความสนใจไปที่ตรรกของขั้นตอนวิธีได้เต็มที่ โดยไม่ต้องกังวลในกฎเกณฑ์ของภาษา สามารถแปลงเป็นภาษาโปรแกรมได้ง่าย ไม่สามารถกระทำการด้วยคอมพิวเตอร์
ขั้นตอนวิธี ประกอบด้วยการดำเนินการ 2 ชนิด การดำเนินการลำดับ (Sequential operations) การดำเนินการควบคุม (Control Operation 2.1 การดำเนินการเงื่อนไข (Conditional operations) 2.2 การดำเนินการซ้ำ (Iterative operations)
Sequential Operation ขั้นตอนวิธีการโทรศัพท์ 1. ค้นหาหมายเลข Start Sequential Operation Find phone number ขั้นตอนวิธีการโทรศัพท์ 1. ค้นหาหมายเลข 2. กดหมายเลข และปุ่มโทร 3. ฟังเสียงสัญญาณ 4. กล่าวคำทักทาย 5. สนทนา 6 กล่าวลา 7. วางหูโทรศัพท์ Enter phone number and Press the call button Algorithm 1. Find phone number 2. Enter phone number and press call button 3. Listen to phone signal 4. Say “hello” 5. Make conversation 6. Say “Good bye” 7. Hang up a call Listen to signal Say ‘hello’ Make conversation Say “good bye” Hang up a call Stop
การคำนวณ (Computation) Set “variable” to “arithmetic expression” ประมวลผลนิพจน์เลขคณิต (arithmetic expression) แล้วนำผลที่ได้เก็บไว้ในตัวแปร (variable) Set a to 100 Set b to 200 Set Result to a+b 100 200 300 a b Result
คำนวณราคาสินค้า กำหนดให้ราคาสินค้าต่อชิ้น 27.75 บาท กำหนดให้จำนวนสินค้ามี 15 ชิ้น ราคาสินค้า = ราคาสินค้าต่อชิ้น x จำนวนสินค้า แสดง ราคาสินค้า คำนวณราคาสินค้า Start priceperitem = 27.75 quantity = 15 Set priceperitem to 27.75 Set quantity to 15 Set price to priceperitem x quantity Print price price = priceperitem x quantity Print price Stop 27.75 15 price priceperitem quantity
Print priceincludetax คำนวณราคาสินค้า Set vat to 0.07 Set priceperitem to 27.75 Set quantity to 15 Set price to priceperitem x quantity Set tax to price x vat Set priceincludetax to price + tax Print priceincludetax Start vat = 0.07 priceperitem = 27.75 quantity = 15 price = priceperitem x quantity tax = price x vat priceincludetax = price + tax 0.07 27.75 15 vat priceperitem quantity Print priceincludetax Stop price tax priceincludetax
รหัสเทียมสำหรับการนำเข้าและส่งออก Input : Get “variable1”, variable2, … Get the radius of the circle Get radius Output Print “variable1”, variable2, … Print area
priceperitem, quantity รับราคาสินค้าต่อชิ้นจากแป้นพิมพ์ รับจำนวนสินค้าจากแป้นพิมพ์ คำนวณราคาสินค้า = ราคาสินค้าต่อชิ้น x จำนวนสินค้า แสดง ราคาสินค้า คำนวณราคาสินค้า Start input priceperitem, quantity Get priceperitem Get quantity Set price to priceperitem x quantity Print price price = priceperitem x quantity Print price Stop priceperitem quantity price
คำนวณราคาสินค้า กำหนดให้อัตราภาษี 7 % รับราคาสินค้าต่อชิ้น รับจำนวนสินค้า ราคาสินค้า = ราคาสินค้าต่อชิ้น x จำนวนสินค้า ภาษี = ราคาสินค้า x อัตราภาษี ราคาสินค้ารวมภาษี = ราคาสินค้า + ภาษี แสดงราคาสินค้ารวมภาษี Start vat = 0.07 input priceperitem, quantity Set vat to 0.07 Get priceperitem Get quantity Set price to priceperitem x quantity Set tax to price x vat Set priceincludetax to price + tax Print priceincludetax price = priceperitem x quantity tax = price x vat priceincludetax = price + tax Print priceincludetax Stop
อ่านจำนวนเต็ม 2 จำนวน เก็บไว้ในตัวแปร a และ b แล้วให้สลับค่ากัน
Control Operation เป็นการดำเนินการที่เปลี่ยนการทำงานแบบตามลำดับ ให้ไปทำงานที่จุดอื่น ประกอบด้วยการดำเนินการ 2 ชนิด Conditional Operation เป็นการดำเนินการแบบ ถามคำถาม เพื่อเลือกการดำเนินการถัดไปที่จะกระทำ Iterative Operation เป็นการดำเนินการแบบวนซ้ำ หรือ กระทำคำสั่งเดิมหลายครั้ง
Conditional statement If “condition” then set of operation ประมวลผล “condition” ถ้าเป็นจริง ให้ทำ set of operation เงื่อนไข false true T1 T2
ค้นหาบัตรเอทีเอ็ม ถ้าพบบัตร สอดบัตร กดถอนเงิน กลับบ้าน กดเอทีเอ็ม Start ค้นหาบัตรเอทีเอ็ม ถ้าพบบัตร สอดบัตร กดถอนเงิน กลับบ้าน ค้นหาบัตรเอทีเอ็ม พบ? false true สอดบัตร Search for the ATM card If find the ATM card insert the ATM card press withdrawal button Return home กดถอนเงิน กลับบ้าน Stop
Get score Set grade to ‘U’ If (score >= 50) then Set grade to ‘S’ Start get score Get score Set grade to ‘U’ If (score >= 50) then Set grade to ‘S’ Print grade Grade = ‘U’ Score >= 50 false true Grade = ‘S’ Print Grade Stop
Conditional statement If “condition” is true then first set of operations Else second set of operations ประมวลผล “condition” ถ้าเป็นจริง ให้ทำ first set of operations ถ้าเป็นเท็จ ให้ทำ second set of operations ดำเนินการ operation ถัดจาก conditional statement
if/then/else statement เงื่อนไข true false S1 T1 S2 T2 S3 T3 V
อ่านจำนวนเต็ม 3 จำนวน แล้วหาค่าที่มากที่สุด อ่านจำนวนเต็ม 3 จำนวน แล้วหาค่าที่มากที่สุด Start read a,b,c false a > b false true b > c false a > c true true big = a big = c big = b big = c print big Stop
Start Get score If (score >= 50) then Set grade to ‘s’ Else Set grade to ‘u’ Print grade get score Score >= 50 false true Grade = ‘S’ Grade = ‘U’ Print Grade Stop
Start score >= 80 score >= 50 grade = ‘G’ grade = ‘P’ Get score if (score >= 80) set grade to ‘G’ Else if (score >= 50) set grade to ‘P’ else set grade to ‘F’ print grade get score score >= 80 false score >= 50 false true true grade = ‘G’ grade = ‘P’ grade = ‘F’ print grade Stop
Start WorkHour > MaxHour Stop Get WorkHour,MaxHour, OTRate IF WorkHour > MaxHour THEN OverHour = MaxHour - WorkHour ELSE OverHour = 0 ENDIF OverTime = OverHour * OTRate Print OverTime Start Receive WorkHour, MaxHour, OTRate WorkHour > MaxHour false true OverHour = MaxHour - WorkHour OverHour = 0 OverTime = OverHour * OTRate Print OverTime Stop
ค้นหาบัตรเอทีเอ็ม ค้นหาบัตรเอทีเอ็ม ถ้าพบบัตร สอดบัตรและใส่รหัส กดเอทีเอ็ม Start ค้นหาบัตรเอทีเอ็ม ค้นหาบัตรเอทีเอ็ม ถ้าพบบัตร สอดบัตรและใส่รหัส ถ้ารหัสถูกต้อง กดถอนเงิน มิฉะนั้น กดยกเลิกการถอนเงิน กลับบ้าน พบ? false true สอดบัตรและใส่รหัส รหัสถูกต้อง? true กดถอนเงิน กดยกเลิกการถอนเงิน กลับบ้าน Stop
Loop the repetition of a block of instructions ความสามารถที่แท้จริงของคอมพิวเตอร์อยู่ที่การทำงานซ้ำหลายๆครั้ง ถ้าต้องการทำงานนี้เพียงครั้งเดียว คงไม่จำเป็นต้องเขียนโปรแกรม แต่ถ้าต้องทำเป็นหมื่นครั้ง แสนครั้ง ก็คุ้มที่จะเขียนโปรแกรม ถ้าเครื่องคิดเลขใช้เวลา 5 วินาที หนึ่งล้านครั้งใช้เวลา 5000000/(60x60x24)= 58 วัน ใช้คอมพิวเตอร์ ใช้เวลาไม่ถึง 1 วินาที
Looping : while statement While (‘condition’) do operation …. เมื่อเงื่อนไข(a true/false condition)เป็นจริง loop body จะถูกกระทำ แล้วกลับไปตรวจสอบเงื่อนไขอีกครั้ง ถ้าเงื่อนไขเป็นเท็จจะข้ามไปกระทำการ operation ที่อยู่ถัดจาก loop
แบบจำลองการกระทำการ while loop เงื่อนไข false true S1 S2 แบบจำลองการกระทำการ while loop S3 Sn
count = 1 Start count = 1 while count <= 100 do print count add 1 to count count = 1 count <= 100 false true Print count Add 1 to count Stop
count = 1 Start count = 1 while count <= 100 do print count add 2 to count count = 1 count <= 100 false true Print count Add 2 to count Stop
Start count = 1 while count <= 100 do total = 0, count = 1, add 1 to count add count to total print count total = 0, count = 1, count <= 100 false true add 1 to count add count to total Print count Stop
ให้หาพื้นที่สี่เหลี่ยมจัตุรัส และแสดงผลดังนี้ Start ให้หาพื้นที่สี่เหลี่ยมจัตุรัส และแสดงผลดังนี้ 1 1 2 4 3 9 4 16 5 25 6 36 … 100 10000 count = 1 count <= 100 false true square =count x count print count, square count = 1 while count <= 100 do set square to count x count print count, square add 1 to count add 1 to count Stop
Stop Start vat = 0.07 Input priceperitem priceperitem <> 0 Set vat to 0.07 get priceperitem while priceperitem <> 0 do get quantity set price to priceperitem x quantity set tax to price x vat set priceincludetax to price + tax print priceincludetax vat = 0.07 Input priceperitem priceperitem <> 0 false true input quantity price = priceperitem x quantity tax = price x vat priceincludetax = price + tax print priceincludetax Input priceperitem Stop