บทที่ 1 หลักการเขียนโปรแกรมเบือ้ งต้น ซูโดโค้ด (Pseudo Code)
ซูโดโค้ด (Pseudo Code) เป็น ค าสั่ ง ที่ จ าลองความคิด เป็ นลาดับ ขั้นตอนโดยใช้สั ญลั กษณ์ เป็ น ประโยคภาษาอังกฤษ ซึ่งซูโดโค้ดไม่ใช่ภาษาโปรแกรมทางคอมพิวเตอร์จึงไม่ สามารถนาไปประมวลผลได้ คือ ไม่สามารถสั่งให้คอมพิวเตอร์ทางานตามคาสั่ง แต่เป็นการเขียนจาลองคาสั่งจริงแบบย่อๆ ตามอัลกอริทึมของโปรแกรมระบบ เพื่อนาไปพัฒนาเป็นการเขียนโปรแกรมภาษาคอมพิวเตอร์ได้
ประโยชน์ของซูโดโค้ด • เป็น เครื่ อ งมื อในการก าหนดโครงร่ างกระบวนการท างานของการเขีย น โปรแกรมแต่ละโปรแกรม • เป็ น ต้ น แบบในการทบทวน ปรั บ ปรุ ง แก้ ไ ข และพั ฒ นาโปรแกรมของ โปรแกรมเมอร์ และนักวิเคราะห์ระบบ • เป็นตัวกาหนดงานเขียนโปรแกรม เพื่อให้โปรแกรมเมอร์นาไปพัฒนาเป็น โปรแกรมคอมพิวเตอร์ เพื่อสั่งให้คอมพิวเตอร์ทางานตามกระบวนการที่ได้ จาลองกระบวนการจริงไว้ในซูโดโค้ด
วิธกี ารเขียนซูโดโค้ด • ประโยคคาสั่ง (Statement) จะอยู่ในรูปแบบของภาษาอังกฤษอย่างง่าย • ในหนึ่งบรรทัด ให้เขียนประโยคคาสั่งเพียงคาสั่งเดียว • ควรใช้ย่อหน้า เพื่อแยกคาเฉพาะ (Keywords) ได้ชัดเจน รวมถึงจัด โครงสร้างการควบคุมให้เป็นสัดส่วน ซึ่งช่วยให้อ่านโค้ดได้ง่าย • แต่ละประโยคคาสั่งให้เขียนลาดับจากบนลงล่าง โดยมีทางเข้าเพียงทางเดียว และมีทางออกทางเดียวเท่านั้น • กลุ่มของประโยคคาสั่งต่างๆ อาจจัดรวมกลุ่มเข้าด้วยกันในรูปแบบของโมดูล แต่ต้องมีการกาหนดชื่อของโมดูลด้วย เพื่อให้สามารถเรียกใช้งานโมดูลนั้นได้
ตัวอย่างซูโดโค้ด ALGORITHM PROBLEM_1 VARIABLES : mLoop, sum, testScore, average BEGIN INPUT mLoop sum = 0 FOR I = 1 to mLoop INPUT testScore sum = sum + testScore NEXT average = sum / mLoop PRINT average END PROBLEM_1
รูปแบบการเขียนซูโดโค้ด • การกาหนดค่า และการคานวณ name = expression
name คือ ชื่อตัวแปรที่ใช้สาหรับเก็บค่า expression คือ ค่าข้อมูลหรือนิพจน์ ตัวอย่าง กาหนดค่าเริ่มต้นให้กับตัวแปร salary,
overTime และ tax จากนั้นกาหนดให้ income = salary + overTime - tax
salary = 1000 overTime = 2500 tax = 125 income = salary + overTime - tax
รูปแบบการเขียนซูโดโค้ด • การอ่าน/รับข้อมูล การอ่านข้อมูลสามารถใช้คาสั่ง READ, INPUT หรือ GET ได้ โดย READ variable_1, variable_2, variable_n INPUT variable_1, variable_2, variable_n GET variable_1, variable_2, variable_n o READ ใช้สาหรับการอ่านค่าที่มีอยู่แล้ว มาเก็บไว้ในตัวแปร เช่น การอ่านข้อมูล จากไฟล์ โดยจะทางานร่วมกับ OPEN (การเปิดไฟล์) o INPUT และ GET ใช้สาหรับการรับค่าข้อมูลผ่านทางแป้นพิมพ์ o Variable คือ ตัวแปรที่ใช้เก็บข้อมูลที่อ่านหรือรับเข้ามา ซึ่งสามารถกาหนดได้ ตามจานวนตัวแปรที่ต้องการ โดยใช้เครื่องหมาย “,” คั่นระหว่างชื่อตัวแปร
ตัวอย่างซูโดโค้ด : การอ่าน/รับข้อมูล • ตัวอย่างเช่น INPUT a, b, c answer = a + b + c
รับค่าตัวแปร a, b และ c ผ่านทางแป้นพิมพ์ และกาหนดให้ตัวแปร answer เก็บค่าผลรวม ของตัวแปรทั้งสาม
GET current_date expire_date = current_date + 120 OPEN student_file READ id, name, address, sex
รับค่าวันที่ปัจจุบัน แล้วเก็บไว้ในตัวแปร current_date จากนั้นกาหนดตัว แปรวันหมดอายุ ชื่อ expire_date มีค่าเท่ากับ วันที่ปัจจุบัน บวกเพิ่มไปอีก 120 วัน
ให้เปิดไฟล์ชื่อ student_file แล้ว อ่านค่าเรคคอร์ดจากไฟล์ ประกอบด้วยฟิลด์ id, name, address และ sex
รูปแบบการเขียนซูโดโค้ด • การแสดงผลข้อมูล การแสดงผลข้อมูลสามารถใช้คาสั่ง PRINT, PROMPT, WRITE PRINT variable_1, variable_2, variable_n PROMPT variable_1, variable_2, variable_n WRITE variable_1, variable_2, variable_n o PRINT และ PROMPT ใช้สาหรับการพิมพ์ค่าข้อมูล หรือข้อความ o WRITE ใช้สาหรับการบันทึกข้อมูลลงในแฟ้มข้อมูล
ตัวอย่างซูโดโค้ด : การแสดงผลข้อมูล • ตัวอย่างเช่น PROMPT “Enter 3 value ===>” INPUT value1, value2, value3 sum = value1 + value2 + value3 PRINT sum
OPEN student_file INPUT id, name, address, sex WRITE id, name, address, sex
พิมพ์ข้อความรับค่าจานวน 3 ค่า จากนั้นรับค่าจานวนทั้งสาม โดย จัดเก็บไว้ที่ตัวแปรชื่อ value1, value2 และ value3 และ กาหนดให้ sum มีค่าเท่ากับ ผลรวมของตัวแปรทั้งสาม แล้วทา การพิมพ์ค่า sum
ให้เปิดไฟล์ชื่อ student_file จากนั้น รับค่า id, name, address และ sex แล้วบันทึกค่าลงในไฟล์ข้อมูล
รูปแบบการเขียนซูโดโค้ด • การกาหนดเงื่อนไข IF <condition> THEN activity1 ELSE activity2 ENDIF o <condition> คือ เงื่อนไขที่กาหนด ซึ่ง หากเงื่อนไขเป็นจริง จะทากิจกรรมหลัง THEN (activity1) แต่ถ้าเงื่อนไขเป็นเท็จ ก็จะทากิจกรรมหลัง ELSE (activity2)
ตัวอย่างซูโดโค้ด : การกาหนดเงื่อนไข • ตัวอย่างเช่น IF sex = “M” THEN male = male + 1 ELSE female = female + 1 ENDIF
ถ้า sex มีค่าเท่ากับ M ให้ทาการบวกค่าตัวแปร male เพิ่มขึ้นทีละหนึ่ง ถ้า sex มีค่าไม่เท่ากับ M ให้ทาการบวกค่าตัวแปร female เพิ่มขึ้นทีละหนึ่ง
ตัวอย่างซูโดโค้ด : การกาหนดเงื่อนไข • ตัวอย่างเช่น IF score >= 80 grade = “A” ELSEIF score >= 70 grade = “B” ELSEIF score >= 60 grade = “C” ELSEIF score >= 50 grade = “D” ELSE grade = “F” ENDIF
รูปแบบการเขียนซูโดโค้ด • ในกรณีที่มีหลายเงื่อนไข การใช้ IF อาจทาให้ตรวจสอบโปรแกรมได้ยาก สามารถใช้คาสั่ง CASE …. END CASE แทนได้ CASE score OF >= 80 : grade = “A” >= 70 : grade = “B” >= 60 : grade = “C” < 60 : grade = “F” ENDCASE
รูปแบบการเขียนซูโดโค้ด • การทางานเป็นรอบ (Loop) o การทางานเป็นรอบด้วยลูป WHILE … ENDWHILE WHILE <condition> activity1 activity2 activity3 ENDWHILE
การทางานของลูป WHILE จะมีการตรวจสอบเงื่อนไขก่อน โดยหากเงื่อนไข เป็นจริง จะทากิจกรรมภายในลูปซ้าไปเรื่อยๆ จนกระทั่งเงื่อนไขเป็นเท็จ ก็จะออกจาก ลูป แต่หากเงื่อนไขที่ตรวจสอบครั้งแรกเป็นเท็จ ก็จะไม่มีการทากิจกรรมภายในลูปเลย
ตัวอย่างซูโดโค้ด : การทางานเป็นรอบด้วยลูป WHILE • ตัวอย่างเช่น num = 1 WHILE num <= 20 PRINT num num = num + 1 ENDWHILE PRINT “STOP RUN”
กาหนดให้ค่า num มีค่าเริ่มต้นเป็น 1 ทาการวน ซ้าทางานคาสั่งภายในลูป คือ ทาการพิมพ์ค่า num และเพิ่มค่า num ทีละหนึ่งไปเรื่อยๆ จนกระทั่งค่า num มีค่ามากกว่า 20 ก็จะหลุด ออกจากลูป แล้วพิมพ์ข้อความว่า STOP RUN
รูปแบบการเขียนซูโดโค้ด • การทางานเป็นรอบ (Loop) o การทางานเป็นรอบด้วยลูป DO … UNTIL DO activity1 activity2 activity3 UNTIL <condition>
การทางานของลูป DO … UNTIL จะทากิจกรรมภายในลูปก่อนหนึ่งรอบ จากนั้นจะทาการตรวจเงื่อนไข โดยจะวนซ้าไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็นจริง จึงหลุด ออกจากลูป และถึงแม้เงื่อนไขที่ตรวจสอบเป็นจริงตั้งแต่แรก แต่ลูป DO…UNTIL ก็ จะมีการทากิจกรรมภายในลูปอย่างน้อยหนึ่งรอบเสมอ
ตัวอย่างซูโดโค้ด : การทางานเป็นรอบด้วยลูป DO...UNTIL • ตัวอย่างเช่น num = 0 DO PRINT “HELLO…” num = num + 1 UNTIL num > 20
สั่งให้ทาการพิมพ์ข้อความ HELLO… ไปเรื่อยๆ พร้อมกับบวกค่าตัวแปร num ทีละหนึ่งในแต่ละ รอบ จนกระทั่ง num มีค่ามากกว่า 20 ก็จะ หลุดออกจากลูป
รูปแบบการเขียนซูโดโค้ด • การทางานเป็นรอบ (Loop) o การทางานเป็นรอบด้วยลูป FOR … NEXT FOR i=1 to n activity1 activity2 activity3 Next
การทางานของลูป FOR … NEXT จะมีการวนซ้าเพื่อทางานภายในลูปตาม จานวนรอบที่กาหนดไว้แน่นอน เช่น กาหนดให้วน 10 รอบ ก็จะทากิจกรรมภายใน ลูปด้วยการวนซ้า 10 รอบ
ตัวอย่างซูโดโค้ด : การทางานเป็นรอบด้วยลูป FOR...NEXT • ตัวอย่างเช่น FOR I = 1 to 10 PRINT “Good Morning …” NEXT
กาหนดให้วนลูป 10 รอบ โดยในแต่ละรอบให้พิมพ์ ข้อความว่า Good Morning … ทาให้ได้ข้อความทั้งหมด 10 ข้อความ
รูปแบบการเขียนซูโดโค้ด • โปรแกรมย่อย (Procedure) กรณีที่โปรแกรมมีความซับซ้อน และมีขั้นตอนมากมาย อาจมีความ จาเป็นที่ต้องแบ่งโปรแกรมออกเป็นโปรแกรมย่อย หรือ โพรซีเยอร์ โดยแต่ ละโพรซีเยอร์จะต้องมีชื่อกากับ พร้อมชุดคาสั่งภายใน ในการเรียกใช้งาน จะใช้คาสั่ง CALL แล้วตามด้วยชื่อโพรซีเยอร์ โดยหลัง จากที่มีการสั่ง ให้ทางานโพรซีเยอร์ นั้นๆ เสร็จ แล้ว ก็จ ะกลับ มา ทางานที่โปรแกรมหลัก เพื่อทางานชุดคาสั่งในลาดับถัดไป PROCEDURE name
ตัวอย่างซูโดโค้ด โปรแกรมย่อย (Procedure) ALGORITHM quiz_report OPEN score_file DO READ id, name, quiz1, quiz2, quiz3 CALL checkPass PRINT id, name, quiz1, quiz2, quiz3, text UNTIL end of file END quiz_report PROCEDURE checkPass score = quiz1 + quiz2 + quiz3 IF score >= 60 text = “PASS” ELSE text = “FAIL” ENDIF RETURN text
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 1 การป้อนข้อมูลเป็นปี ค.ศ. แล้วต้องการให้โปรแกรมแสดงผลเป็น ปี พ.ศ.
ALGORITHM english_year_to_thai_year INPUT english_year thai_year = english_year + 543 PRINT thai_year END english_year_to_thai_year
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 2 การหาค่าเฉลี่ยของตัวเลขจานวน 3 ตัว โดยให้แสดงผลเป็นจุดทศนิยม 2 ตาแหน่ง
ALGORITHM average3numbers INPUT number1, number2, number3 average = (number1 + number2 + number3)/3 average = setformat (.2, average) PRINT average END average3numbers
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 3 การรับค่าจานวนเต็ม และแสดงผลลัพธ์ว่าเป็นเลขคู่ หรือเลขคี่ ALGORITHM checkNumber INPUT number result = number mod 2 IF result = 0 THEN result = “เลขคู่” ELSE result = “เลขคี”่ ENDIF PRINT result END checkNumber
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 4 การคิดผลการสอบของนักศึกษาจากคะแนน โดยกาหนดให้ ถ้าคะแนนมากกว่าหรือเท่ากับ 50 ถือว่า “ผ่าน” ถ้าคะแนนต่ากว่า 50 ถือว่า “ไม่ผ่าน”
ALGORITHM checkScore INPUT score IF score >= 50 THEN result = “ผ่าน” ELSE result = “ไม่ผา่ น” ENDIF PRINT result END checkScore
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 5 การคิดผลการสอบของนักศึกษาจากคะแนน โดยกาหนดให้ ถ้าคะแนนมากกว่าหรือเท่ากับ 80 ได้เกรด A ถ้าคะแนนมากกว่าหรือเท่ากับ 70 ได้เกรด B ถ้าคะแนนมากกว่าหรือเท่ากับ 60 ได้เกรด C ถ้าคะแนนน้อยกว่า 60 ได้เกรด F
ตัวอย่างซูโดโค้ด ALGORITHM checkGrade INPUT score IF score >= 80 THEN grade = “A” ELSEIF score >= 70 THEN grade = “B” ELSEIF score >= 60 THEN grade = “C” ELSE grade = “F” ENDIF PRINT grade END checkGrade
ตัวอย่างซูโดโค้ด ตัวอย่างที่ 6 เขียนโปรแกรมเพื่อรับค่าตัวเลข และทาการบวกค่าที่รับเข้ามาแบบวนซ้า โดยให้ออกจากโปรแกรม เมื่อผลลัพธ์มีค่ามากกว่า 1,000 และแสดงผลของผลลัพธ์ที่ได้
ALGORITHM loopAddNumber total = 0 WHILE total <= 1000 INPUT number total = total + number ENDWHILE PRINT total END loopAddNumber
ใบงานครัง้ ที่ 5 การออกแบบโปรแกรมด้วยซูโดโค้ด