วันพฤหัสบดีที่ 3 ธันวาคม พ.ศ. 2558

รหัสเทียม


รหัสเทียม

 
  รหัสเทียม หรือ ซูโดโค้ด (Pseudo Code)

เป็นคำสั่งที่จำลองความคิดเป็นลำดับขั้นตอนโดยใช้สัญลักษณ์เป็น ประโยคภาษาอังกฤษ ซึ่งซูโดโค้ดไม่ใช่ภาษาโปรแกรมทางคอมพิวเตอร์จึงไม่ สามารถนำไปประมวลผลได้ คือ ไม่สามารถสั่งให้คอมพิวเตอร์ทำงานตามคำสั่ง แต่เป็นการเขียนจำลองคำสั่งจริงแบบย่อๆ ตามอัลกอริทึมของโปรแกรมระบบ เพื่อนำไปพัฒนาเป็นการเขียนโปรแกรมภาษาคอมพิวเตอร์ได้

   รหัสเทียม (Pseudocode) คือ การเขียนโปรแกรมในรูปแบบภาษาอังกฤษที่มีขั้นตอนและรูปแบบแน่นอนกะทัดรัด และมองดูคล้ายภาษาระดับสูงที่ใช้กับเครื่องคอมพิวเตอร์ซึ่งไม่เจาะจงภาษาใดภาษาหนึ่ง
ประโยชน์ของซูโดโค้ด

       เป็นเครื่องมือในการกำหนดโครงร่างกระบวนการทำงานของการเขียนโปรแกรมแต่ละโปรแกรม
        เป็นต้นแบบในการทบทวน ปรับปรุงแก้ไข และพัฒนาโปรแกรมของโปรแกรมเมอร์ และนักวิเคราะห์ระบบ
        เป็นตัวกำหนดงานเขียนโปรแกรม เพื่อให้โปรแกรมเมอร์นำไปพัฒนาเป็นโปรแกรมคอมพิวเตอร์ เพื่อสั่งให้ คอมพิวเตอร์ทำงานตามกระบวนการที่ได้จำลองกระบวนการจริงไว้ในซูโดโค้ด

วิธีการเขียนซูโดโค้ด

 ประโยคคำสั่ง (Statement) จะอยู่ในรูปแบบของภาษาอังกฤษอย่างง่าย

 ในหนึ่งบรรทัด ให้เขียนประโยคคำสั่งเพียงคำสั่งเดียว

  ควรใช้ย่อหน้า เพื่อแยกคำเฉพาะ (Keywords) ได้ชัดเจน รวมถึงจัดโครงสร้างการควบคุมให้เป็นสัดส่วน ซึ่งช่วยให้อ่านโค้ดได้ง่าย

  แต่ละประโยคคำสั่งให้เขียนลำดับจากบนลงลาง โดยมีทางเข้าเพียงทางเดียว และมีทางออกทางเดียวเท่านั้น
    ตัวอย่างการเขียนรหัสเทียม Pseudo Code
Algorithm Problem_1
Variables : mLoop, Sum, testScore, average
Begin
Input mLoop
For I = 1 to mLoop
Input testScore
Sum = Sum + testScore
Next
average = Sum / mLoop
Print average
End Problem_1
รูปแบบการเขียน Pseudo Code
1. การกำหนดค่า และการคำนวณ
name = expression
name คือ ชื่อตัวแปรที่ใช้สำหรับเก็บค่า
2. การอ่าน/รับข้อมูล
การอ่านข้อมูลสามารถใช้คำสั่ง READ, INPUT หรือ GET ได้ โดย
Read variables_1 ,variables_2, variables_3
Get variables_1 ,variables_2, variables_3
READ ใช้สำหรับการอ่านค่าที่มีอยู่แล้ว มาเก็บไว้ในตัวแปร เช่น การอ่านข้อมูลจากไฟล์ โดยจะทำงานร่วมกับ OPEN (การเปิดไฟล์)
INPUT และ GET ใช้สำหรับการรับค่าข้อมูลผ่านทางแป้นพิมพ์
Variable คือ ตัวแปรที่ใช้เก็บข้อมูลที่อ่านหรือรับเข้ามา ซึ่งสามารถกำหนดได้ ตามจำนวนตัวแปรที่ต้องการ โดยใช้เครื่องหมาย “,” คั่นระหว่างชื่อตัวแปร
3. การแสดงผลข้อมูล
การแสดงผลข้อมูลสามารถใช้คำสั่ง Print , Prompt, Write
print variables_1 ,variables_2, variables_3
prompt variables_1 ,variables_2, variables_3
write variables_1 ,variables_2, variables_3
PRINT และ PROMPT ใช้สำหรับการพิมพ์ค่าข้อมูล หรือข้อความ
WRITE ใช้สำหรับการบันทึกข้อมูลลงในแฟ้มข้อมูล
5. ในกรณีที่มีหลายเงื่อนไข
การใช้ IF อาจทาให้ตรวจสอบโปรแกรมได้ยาก สามารถใช้คาสั่ง CASE …. END CASE แทนได้
ตัวอย่าง
CASE score OF
>= 80 : grade = “A”
>= 70 : grade = “B”
>= 60 : grade = “C”
< 60 : grade = “F”
ENDCASE
6. การทางานเป็นรอบ (Loop)
การทางานเป็นรอบด้วยลูป WHILE … ENDWHILE
WHILE<condition>
activity1
activity2
activity3
ENDWHILE
การทำงานของลูป WHILE จะมีการตรวจสอบเงื่อนไขก่อน โดยหากเงื่อนไขเป็นจริง จะทำกิจกรรมภายในลูปซ้ำไปเรื่อยๆ จนกระทั่งเงื่อนไขเป็นเท็จ ก็จะออกจากลูปแต่หากเงื่อนไขที่ตรวจสอบครั้งแรกเป็นเท็จ ก็จะไม่มีการทากิจกรรมภายในลูปเลย
ตัวอย่าง
num = 1
WHILE num <= 20
PRINT num
num = num + 1
ENDWHILE
PRINT “STOP RUN”
7. การทำงานเป็นรอบ (Loop)
การทำงานเป็นรอบด้วยลูป DO … UNTIL
DO
activity1
activity2
activity3
UNTIL <condition>
การทำงานของลูป DO … UNTIL จะทำกิจกรรมภายในลูปก่อนหนึ่งรอบ จากนั้นจะทาการตรวจเงื่อนไข โดยจะวนซ้าไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็นจริง จึงหลุดออกจากลูป และถึงแม้เงื่อนไขที่ตรวจสอบเป็นจริงตั้งแต่แรก แต่ลูป DO…UNTIL ก็จะมีการทากิจกรรมภายในลูปอย่างน้อยหนึ่งรอบเสมอ
ตัวอย่าง
num = 0
DO
PRINT “HELLO…”
num = num + 1
UNTIL num > 20
8. การทำงานเป็นรอบ (Loop)
การทางานเป็นรอบด้วยลูป FOR … NEXT
FOR i=1 to n
activity1
activity2
activity3
Next
 
 
 
 
 
 
 
 
 
 
 

อัลกอริทึม


อัลกอริทึม
 


                                                อัลกอริทึม

    ขั้นตอนวิธี หรือ อัลกอริทึม (อังกฤษ: algorithm) หมายถึงกระบวนการแก้ปัญหาที่สามารถเข้าใจได้ มีลำดับหรือวิธีการในการแก้ไขปัญหาใดปัญหาหนึ่งอย่างเป็นขั้นเป็นตอนและชัดเจน เมื่อนำเข้าอะไร แล้วจะต้องได้ผลลัพธ์เช่นไร ซึ่งแตกต่างจากการแก้ปัญหาแบบสามัญสำนึก หรือฮิวริสติก (heuristic)

โดยทั่วไป ขั้นตอนวิธี จะประกอบด้วย วิธีการเป็นขั้นๆ และมีส่วนที่ต้องทำแบบวนซ้ำ (iterate) หรือ เวียนเกิด (recursive) โดยใช้ตรรกะ (logic) และ/หรือ ในการเปรียบเทียบ (comparison) ในขั้นตอนต่างๆ จนกระทั่งเสร็จสิ้นการทำงาน

ในการทำงานอย่างเดียวกัน เราอาจจะเลือกขั้นตอนวิธีที่ต่างกันเพื่อแก้ปัญหาได้ โดยที่ผลลัพธ์ที่ได้ในขั้นสุดท้ายจะออกมาเหมือนกันหรือไม่ก็ได้ และจะมีความแตกต่าง ที่จำนวนและชุดคำสั่งที่ใช้ต่างกันซึ่งส่งผลให้ เวลา (time) , และขนาดหน่วยความจำ (space) ที่ต้องการต่างกัน หรือเรียกได้อีกอย่างว่ามีความซับซ้อน (complexity) ต่างกัน

การนำขั้นตอนวิธีไปใช้ ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่น การออกแบบวงจรไฟฟ้า, การทำงานเครื่องจักรกล, หรือแม้กระทั่งปัญหาในธรรมชาติ เช่น วิธีของสมองมนุษย์ในการคิดเลข หรือวิธีการขนอาหารของแมลง

หนึ่งในขั้นตอนวิธีอย่างง่าย คือ ขั้นตอนวิธีที่ใช้หาจำนวนที่มีค่ามากที่สุดในรายการ (ซึ่งไม่ได้เรียงลำดับไว้) ในการแก้ปัญหานี้ เราจะต้องดูจำนวนทุกจำนวนในรายการ
 
ประวัติ
         คำว่า Algorithm มีที่มาจากชื่อของนักคณิตศาสตร์ชาวเปอร์เซียในยุคศตวรรษที่ 9 อะบู อับดิลลาหฺ อิบน มูซา อัลคอวาริซมีย์ (Abu Abdillah Muhammad ibn Musa al-Khawarizmi) คำว่า al-Khawarizmi ได้เพี้ยนเป็น Algoritmi เมื่องานเขียนของเขาได้รับการแปลเป็นภาษาละติน แล้วกลายเป็น Algorithm อัลกอริทึม ซึ่งใช้หมายถึงกฎที่ใช้ในการคิดคำนวณเลขคณิต และได้กลายมาเป็นคำ ขั้นตอนวิธี ในช่วงศตวรรษที่ 18. ในปัจจุบัน คำนี้ได้มีความหมายที่กว้างขึ้น หมายรวมถึง ขั้นตอนวิธีการในการแก้ปัญหาต่างๆ
ขั้นตอนวิธีแรกสำหรับคอมพิวเตอร์นั้น เขียนขึ้นในปี ค.ศ. 1842 โดย เอดา ไบรอน ใน notes on the analytical engine ทำให้ถือกันว่า เอดาเป็นนักพัฒนาโปรแกรมหรือนักเขียนโปรแกรมคนแรกของโลก แต่เนื่องจาก ชาร์ลส แบบเบจ ไม่ได้สร้าง analytical engine จนเสร็จ ขั้นตอนวิธีของเอดานั้นจึงไม่ได้มีการใช้จริง
ถึงแม้ว่าขั้นตอนวิธีนั้นเป็น ขั้นตอนวิธี การแก้ปัญหา ที่ถูกระบุไว้อย่างชัดเจน แต่ก็ขาดรูปแบบการวิเคราะห์ในรูปแบบจำลองทางคณิตศาสตร์ที่ชัดเจน ปัญหาในทางขั้นตอนวิธีนี้โดยส่วนมากจึงมักจะถูกวิเคราะห์โดยใช้ เครื่องจักรทัวริง ซึ่งเป็นแบบจำลองนามธรรมของคอมพิวเตอร์ คิดค้นขึ้นโดย แอลัน ทัวริง ซึ่งเป็นเครื่องจักรที่ใช้ในการจำลองการทำงานของขั้นตอนวิธีใดๆ
ราชบัณฑิตยสถาน ได้บัญญัติคำว่าอัลกอริทึม (Algorithm) เป็นภาษาไทยว่าขั้นตอนวิธี[1] ซึ่งมีความหมายคือ เป็นลำดับของขั้นตอนการคำนวณที่ใช้แก้ปัญหา โดยการเปลี่ยนข้อมูลนำเข้าของปัญหา (input) ออกมาเป็นผลลัพธ์ (output) ขั้นตอนวิธีดังกล่าวนั้นจะสามารถนำมาเขียนเป็นโปรแกรมในคอมพิวเตอร์ได้
 

 
 
 
 



โครงสร้างโปรแกรม


ครงสร้างโปรแกรม
 

                                                   สร้างโปรแกรม

      ก่อนเขียนโปรแกรม ผู้พัฒนาโปรแกรมจะต้องเลือกภาษาคอมพิวเตอร์ ที่จะนำมาช่วยงานโดยพิจารณาจากปัจจัยต่าง ๆ ในการทำงาน เช่น ลักษณะของปัญหา ความถนัดของนักเขียนโปรแกรม สภาพแวดล้อมในการทำงานของระบบคอมพิวเตอร์ เป็นต้น เนื่องจากในปัจจุบันมีภาษาคอมพิวเตอร์ให้เลือกใช้ได้หลายภาษา เช่น ภาษาปาสคาล ภาษาซี ภาษาจาวา และภาษาเดลฟาย ถึงแม้แต่ละภาษาจะมีรูปแบบและหลักการในการสร้างงานที่แตกต่างกันแต่ทุกภาษาจะต้องมีโครงสร้างควบคุมหลักทั้ง 3 แบบ ได้แก่ โครงสร้างแบบลำดับ (sequential structure) โครงสร้างแบบทางเลือก (selection structure) และ โครงสร้างแบบวนซ้ำ (repetition structure)

1) โครงสร้างแบบลำดับ (sequential structure)

โครงสร้างที่ทำงานเป็นขั้นตอนเพื่อแก้ปัญหาจะทำงานตามคำสั่งที่เขียนไว้ตามลำดับ ตั้งแต่คำสั่งแรกไปจนถึงคำสั่งสุดท้าย โดยที่คำสั่งในที่นี้อาจเป็นคำสั่งเดี่ยว ๆ หรือเป็นคำสั่งเชิงซ้อนที่มีหลายคำสั่งย่อยประกอบกันในลักษณะเป็นโครงสร้างแบบทางเลือกหรือแบบวนซ้ำก็ได้

โครงสร้างแบบลำดับเมื่อเขียนเป็นผังงาน มีกระบวนการทำงานพื้นฐานอยู่ 3 ชนิด ได้แก่

การคำนวณ เป็นกระบวนการที่คอมพิวเตอร์ทำการคำนวณ ประมวลผล ซึ่งจะรวมไปถึงการกำหนดค่าให้กับตัวแปร เพื่อให้สามารถนำค่าของตัวแปรนั้นมาใช้ในภายหลังได้

การรับข้อมูลเข้า เป็นกระบวนการรับข้อมูลจากอุปกรณ์ของหน่วยรับเข้า เช่น คีย์บอร์ด เพื่อนำค่าไปกำหนดให้กับตัวแปร และเก็บไว้ในหน่วยความจำ

การส่งข้อมูลออก เป็นกระบวนการนำค่าของข้อมูลไปแสดงผลยังอุปกรณ์ของหน่วยส่งออก เช่น จอภาพหรือเครื่องพิมพ์ ข้อมูลที่จะส่งออกโดยทั่วไปจะเป็นค่าคงที่ หรือค่าของตัวแปร

ในการดำเนินการเพื่อแก้ปัญหาด้วยคอมพิวเตอร์ กระบวนการเหล่านี้ต้องถูกแปลงให้อยู่รูปของคำสั่งหลายคำสั่งประกอบกันเพื่อให้ทำงานตามขั้นตอนที่ได้ออกแบบไว้ เช่น กระบวนการกำหนดค่า 0 ให้กับ sum จะใช้คำสั่ง “sum ← 0” กระบวนการคำนวณในการเพิ่มค่าของตัวแปร n ขึ้นอีกหนึ่ง จะใช้คำสั่ง “n ← n + 1” กระบวนการรับข้อมูลเข้าเพื่อเก็บไว้ในตัวแปร x จะใช้คำสั่ง “input x” และกระบวนการส่งข้อมูลออกไปยังจอภาพเพื่อแสดงผลของตัวแปร sum จะใช้คำสั่ง “print sum” เป็นต้น

2) โครงสร้างแบบทางเลือก (selection structure)

ปัญหาบางอย่างต้องการการตัดสินใจ เพื่อเลือกว่าจะใช้วิธีการใด โดยต้องมีการตรวจสอบว่าเงื่อนไขที่ใช้ในการตัดสินใจว่าเป็นจริงหรือเท็จ ถ้าเป็นจริงจะไปเลือกทำคำสั่งชุดหนึ่ง แต่ถ้าเป็นเท็จจะไปเลือกทำคำสั่งอีกชุดหนึ่ง ซึ่งชุดคำสั่งเหล่านี้จะประกอบด้วยโครงสร้างแบบลำดับนั่นเอง

โครงสร้างการทำงานแบบทางเลือกที่กล่าวมาแล้ว อาจเรียกว่ามีโครงสร้างการทำงานแบบ if…then…else… ซึ่งเป็นการเลือกทำแบบทางใดทางหนึ่ง เนื่องจากต้องมีการเลือกทำชุดคำสั่งใดชุดคำสั่งหนึ่งตามผลของเงื่อนไข แต่ในการเขียนโปรแกรมหรือผังงานเพื่อแก้ปัญหา นักเขียนโปรแกรมอาจไม่ต้องการทำงานใด ๆ เมื่อผลของเงื่อนไขเป็นเท็จก็ได้ ซึ่งเรียกว่ามีโครงสร้างของการทำงานแบบเลือกทำเพียงทางเดียว หรือแบบ if…then…

3) โครงสร้างแบบวนซ้ำ (repetition structure)

ในการแก้ปัญหาบางอย่างอาจต้องมีการทำงานในบางคำสั่งหรือบางชุดของคำสั่งซ้ำกันมากกว่าหนึ่งรอบขึ้นไป โครงสร้างแบบมีการวนซ้ำนี้จะต้องมีการตัดสินใจร่วมกันอยู่ด้วยเสมอ เพื่อเป็นเงื่อนไขที่จะตัดสินใจว่าเมื่อใดจะวนซ้ำ หรือเมื่อใดจะถึงเวลาหยุดการวนซ้ำ การวนซ้ำแบบที่ต้องตรวจสอบเงื่อนไขที่จะให้วนซ้ำก่อนที่จะทำงานตามชุดคำสั่งในโครงสร้างแบบวนซ้ำ เรียกว่า การวนซ้ำแบบ while ซึ่งจะสังเกตได้ว่าถ้าเงื่อนไขไม่เป็นจริงตั้งแต่แรก คำสั่งในโครงสร้างแบบวนซ้ำจะไม่ถูกเรียกให้ทำงานเลย แต่การวนซ้ำแบบที่มีการตรวจสอบเงื่อนไขที่จะให้วนซ้ำหลังจากที่ได้ทำงานตามชุดคำสั่ง ในโครงสร้างแบบวนซ้ำไปรอบหนึ่งแล้ว เรียกว่า การวนซ้ำแบบ until สำหรับตัวอย่างของการวนซ้ำ เช่น การรับค่าตัวเลขเข้ามาหลายค่าเพื่อคำนวณหาผลรวม ในตัวอย่างที่ 4 ถือเป็นการวนซ้ำแบบ until

สิ่งที่ควรระวังในการใช้งานขั้นตอนวิธีแบบมีการวนซ้ำคือ ต้องตรวจสอบว่าได้กำหนดเงื่อนไขอย่างรัดกุมและถูกต้อง มิเช่นนั้นแล้วอาจเกิดกรณีของการวนซ้ำไม่รู้จบ (infinite loop) หรือกรณีที่วนซ้ำไม่ได้ตามจำนวนรอบที่ต้องการ