11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf ·...
Transcript of 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf ·...
Programming
1
บทท� 11 การโปรแกรม (Programming)
11.1 โปรแกรมคออะไร เม�อกลาวถงโปรแกรมท�เก�ยวของกบคอมพวเตอร จะมความหมายดงตอไปน% 1. ชดคาส�งท�เหมาะท�จะประมวลผลโดยคอมพวเตอร การประมวลผลในท�น% จะหมายถง การใชตวแปลภาษา (Assembler, Compiler หรอ Interpreter) ในการเตรยมท�จะประมวลผล และการประมวลผล 2. ในภาษาสาหรบเขยนโปรแกรม โปรแกรม หมายถง ส�งท�รวมเอา Module หรอ โปรแกรมยอย (Subprogram) (Subroutine ในภาษา FORTRAN, Function ในภาษา C, Procedure ในภาษา Pascal เปนตน) หลาย ๆ อนเขามารวมเปนอนเดยวกน เพ�อใชงาน 3. (โปรแกรมคอมพวเตอร) สวนท�เขยนตามหลกไวยกรณของภาษาในการเขยนโปรแกรมภาษาใดภาษาหน�ง ประกอบดวยสวนของการประกาศ (ตวแปร ฟงกชน หรออ�น ๆ) และประโยคคาส�ง หรอชดคาส�งท�จาเปนสาหรบการแกปญหาใดปญหาหน�ง เชน การแกสมการทางคณตศาสตร เปนตน การทางานใดงานหน�ง เชน การจดระบบฐานขอมล เปนตน หรอการทาใหมความสามารถตาง ๆ เชน การทาใหคอมพวเตอรมความสามารถเหมอนกบ CD Player เปนตน
11.2 การโปรแกรมคออะไร กลาวโดยสรปแลว การโปรแกรม หมายถง การออกแบบ เขยน และทดสอบโปรแกรมคอมพวเตอร ท%งน% การโปรแกรมมความหมายอ�นแฝงอย อนไดแก - การสรางเคร�องมอท�ใชในการแกปญหา โดยเฉพาะปญหาทางคณตศาสตร และปญหาท�เก�ยวกบการใชขอมลตางๆ - การส�อสารกบคอมพวเตอร หรอเปนการส�งงานคอมพวเตอร - การสรางสรรคงานศลปะ ดงจะเหนไดจากการท�โปรแกรมคอมพวเตอรจดเปนทรพยสนทางปญญาอยางหน�ง เฉกเชนเดยวกบภาพยนตร งานดนตร งานละคร และอ�นๆ
11.3 สวนประกอบของการโปรแกรม การโปรแกรมไมวาจะใชภาษาใดกตาม จะตองมสวนประกอบหลก ๆ ดงตอไปน% 3.1 โปรแกรม Text Editor หรอเรยกส%น ๆ วา Editor เปนโปรแกรมท�ใชในการเรยบเรยงและแกไขโปรแกรม โดยโปรแกรมท�ถกเรยบเรยงข%นน% จะถกจดเกบในรปท�แบบของ Text File กลาวคอ จะประกอบดวยตวอกษรเทาน%น ซ�งเราเรยกไฟลดงกลาวน%วา program source file หรอ source file และเรยกขอมลท�อยในไฟลน%วา source code หรอ source 3.2 ภาษาในการเขยนโปรแกรม หรอพดงายๆ คอ ภาษาท�จะใชส�อสารกบคอมพวเตอร 3.3 ตวแปลภาษา อนไดแก Assembler, Compiler และ Interpreter ในกรณของภาษา C จะใช Compiler ในการแปลภาษา โดยท�วไป โปรแกรม Compiler จะประกอบดวยสวนตางๆ ดงน% 1. Compiler ทาหนาท�แปลง source file (บนทกคาส�งท�มนษยสามารถทาความเขาใจได) ใหเปน object file (บนทกคาส�งท�คอมพวเตอรสามารถทาความเขาใจได ซ�งอยในรปท�เลขฐานสอง) Source Code จะไมข%นกบเคร�องคอมพวเตอรท�ใช เราสามารถนา Source Code ท�เขยนข%นไปใชในเคร�องคอมพวเตอรหลาย ๆ แบบได เชน นา
Programming
2
โปรแกรมท�เขยนข%นสาหรบเคร�อง UNIX workstation ท�ใช UNIX เปนระบบปฏบตการไปใชกบเคร�อง PC ท�ใช Windows หรอ Linux เปนระบบปฏบตการ เปนตน แต Object File จะข%นกบเคร�องคอมพวเตอรและระบบปฏบตการ กลาวคอ จะตางกนไปตามชนดของเคร�องคอมพวเตอร (กลาวใหละเอยดย�งข%นคอ ชนดของโปรเซสเซอรและชดคาส�ง) และระบบปฏบตงานท�ใช และไมสามารถนาไปใชในเคร� องคอมพวเตอรท� มคณสมบตตางกนได โดยสรปแลว Compiler มหนาท�ทาการแปลง source code (High-level code) ใหเปนคาส�งท� CPU สามารถทาได (Low-level code) Object file โดยท�วไปมกม Extension เปน .obj หรอ .o 2. Library เปน Function มาตรฐานของภาษา ยกตวอยาง เชน printf, sin, exit, get ในภาษา C เปนตน ซ� งเปนการอานวยความสะดวกใหกบผเขยนโปรแกรม นอกจาก Function มาตรฐานแลว ซอฟทแวร Compiler ท�วไปในปจจบนยงไดม Function สาหรบอานวยความสะดวกแกผพฒนาโปรแกรมเพ�มเตม อนไดแก ฟงกชนสาหรบใชงาน WINDOWS ฟงกชนทางดานกราฟกส เปนตน 3. Linker มหนาท�นา Object File ท�ไดจาก Compiler มาทาการรวมกบ Library (Function มาตรฐาน) เพ�อสรางเปน Executable File (ไฟลท�สามารถส�งงานได) Linker จะทาการตรวจสอบ Object File เพ�อหา Function มาตรฐานท�จาเปน แลวทาการเช�อมตอ Function มาตรฐานเขากบ Object File Executable File บน Windows จะม Extension เปน .EXE 4. make Utility เปนโปรแกรมท�ชวยเพ�มประสทธภาพในการพฒนาโปรแกรม โดยทาหนาท�ตรวจสอบไฟลท�มการเปล�ยนแปลง แลวทาการ Compile และสราง Executable File ใหม ทาใหไมมความจาเปนตอง Compile ทกไฟล 5. Debugger เปนโปรแกรมสาหรบตรวจสอบตาแหนงของขอผดพลาดในโปรแกรม ซ�งเรยกกนวา bug Debugger ท�ดจะตองม Feature ดงตอไปน% - Break Point สามารถหยดการรนโปรแกรมท�จดไหนกได - Single Step สามารถรนโปรแกรมทละ Step ได - Display สามารถแสดงคาของตวแปรหรอประโยคคาส�งไดทกเวลาท�ตองการ - Browser สามารถแสดงสวนของ source file ท�เก�ยวของได 6. Wrappers and Integrated Development Environment Wrapper เปนโปรแกรมข%นสง (High-level Program) ท�มหนาท�กาหนดส�งท�จาเปนตองทา เชน โปรแกรม cc ใน UNIX จะทาการรนโปรแกรม C Compiler /lib/ccom และ Linker ld เปนตน โดยท�วไป โปรแกรม Compiler บน Windows กมลกษณะเปน wrapper เพราะสามารถทาการรน C compiler และ linker โดยตอเน�องกนได Integrated Development Environment (IDE) เปนส�งท�รวมเอา Editor, Compiler, Linker และ Debugger เขามาใหสามารถใชงานไปควบคกนได ยกตวอยาง เชน IDE ใน Borland C++ เปนตน 3.4 Algorithm เปนข%นตอนของวธการท�จะใชในการเขยนโปรแกรม หรอพดงายๆคอ ข%นตอนการส�งงานคอมพวเตอร เพ�อท�จะแกปญหาใดปญหาหน� ง หรอใหทางานใดงานหน� ง เน�องจากความสามารถท�แตกตางกนระหวางมนษยกบคอมพวเตอร จาเปนท�จะตองมวธท�เหมาะสมกบคอมพวเตอร
11.4 กระบวนการในการโปรแกรม (Programming Process) อาจกลาวไดวา การเขยนโปรแกรม มลกษณะคลายคลงกบการแกปญหาทางดานวทยาศาสตรหรอวศวกรรม ซ�งโดยท�วไป จะมข%นตอนดงน%
Programming
3
1. การทาความเขาใจปญหา 2. การเกบรวบรวมขอเทจจรง หรอขอมลตาง ๆ 3. การรวบรวมทฤษฎ หรอหลกการตาง ๆ ท�เก�ยวของกบปญหา 4. การต%งสมมตฐาน 5. การแกปญหา 6. การตรวจสอบผลท�ได โดยท�วไป กระบวนการในการเขยนโปรแกรม จะมข%นตอนดงน% 1. Problem Definition คอ การกาหนดนยามของปญหา หรอกาหนดคณลกษณะ (Specification) ของโปรแกรม รวมไปถงการศกษาและวเคราะหปญหา 2. Algorithm Preparation คอ การเตรยมวธการท�จะใชในการแกปญหา หรอการคด Algorithm และการแยกแยะปญหา 3. Abstraction คอ การออกแบบโปรแกรม การจาลองรปท�แบบ (Model) ของโปรแกรมและขอมล การกาหนดสวนตาง ๆ ของโปรแกรม เชน โครงสรางของโปรแกรม โครงสรางของขอมล ชนดของตวแปร ฟงกชน เปนตน กลาวโดยสรปแลว Abstraction คอการแปลง Algorithm ใหเปนโปรแกรม ท%งน% Abstraction จะรวมไปถงการเลอกภาษาท�จะใชในการเขยนโปรแกรม และการออกแบบใหสอดคลองกบภาษาท�เลอก 4. Coding คอ การลงรหสโปรแกรมตามท�ไดออกแบบไว ท%งน% จะตองเปนไปตามหลกไวยกรณของภาษาท�เลอก โดยท�วไป รหสโปรแกรมท�วาน% จะมช�อเรยกวา Program Source Code หรอ Source Code 5. Testing and Verification คอ การทดสอบโปรแกรม ซ� งเร�มตนท�การแปลงใหเปนชดคาส�งท�คอมพวเตอรสามารถนาไปประมวลผลได การรนโปรแกรม และการตรวจสอบผลลพธท�ไดจากการรน 6. Documentation คอ การทาเอกสารประกอบการใชงานโปรแกรมท�เขยนข%น ซ�งจะตองประกอบดวย - คาอธบายถงวตถประสงคของโปรแกรม - คาอธบายวธการท�ใชในการเขยนโปรแกรม และ Algorithm - โครงสรางของโปรแกรม, Structure Chart, โครงสรางของขอมล - ข%นตอนการทางานของโปรแกรม, Flowchart - วธการใชโปรแกรม - ตวอยางขอมลท�ใชในการทดสอบ และผลลพธท�ได - ขอจากดของโปรแกรม
11.5 การเขยนโปรแกรมในลกษณะโครงสราง (Structured Programming) วธการท�ใชในการเขยนโปรแกรม มมากมายหลายวธ ไดแก Functional Programming Logic Programming Object-Oriented Programming Structured Programming Top-Down Programming Modular Programming เปนตน ซ�งโดยท�วไป จะใชในลกษณะผสมผสานหลาย ๆ วธเขาดวยกน ในท�น% จะกลาวถง Structured Programming ซ�งถอไดวาเปนพ%นฐานของวธการเขยนโปรแกรมในปจจบน แรงดลใจ การเขยนโปรแกรมในระยะแรก โดยมากจะเขยนโดยภาษา FORTRAN (หรอภาษาอ�น ๆ ซ� งมลกษณะคลาย FORTRAN) อนมจดเดนประการหน�งคอ ประโยคคาส�ง GO TO ซ� งเปนคาส�งสาหรบส�งใหคอมพวเตอรขามไปยงข%นตอนท�เราตองการในโปรแกรมน% นได คาส�งน% มขอดคอ ทาใหเกดความคลองตวในการเขยน
Programming
4
โปรแกรม แตกมขอเสยท�สาคญ คอ มผลทาใหลาดบข%นตอนการทางานของโปรแกรม กบลาดบของ Source Code ไมตรงกน ทาใหยากตอการตรวจสอบและแกไขโปรแกรม แรงดลใจอกประการหน� ง คอ เม�อพจารณาจากคณสมบตของโปรแกรม ซ� งมรากฐานมาจากสมการทางคณตศาสตรแลว จะเหนวา มโครงสรางหลกท�ใชในการควบคมการทางาน อยเพยง 3 ลกษณะคอ การทางานตามลาดบ การเลอกหรอตดสนใจ และการทางานวนซ% าหรอเปนการวนลป หลกการ หลกการเขยนโปรแกรมในลกษณะโครงสราง สามารถสรปได ดงน% 1. ประกอบดวยโครงสรางหลก 3 ลกษณะ คอ การทางานตามลาดบ (Concatenation, Sequence) หมายถง การทางานแตละข%นตอนตามลาดบ การเลอกหรอตดสนใจ (Selection, Decision) หมายถง การต%งเง�อนไขตาง ๆ ในโปรแกรม ถาเปนจรง กจะทางานตามคาส�งหรอกลมคาส�งหน�ง แตถาไมจรง กจะทางานตามคาส�งหรอกลมคาส�งอ�น การทางานวนซHาหรอการวนลป (Iteration, Repetition, Looping) หมายถง การทางานตามคาส�ง หรอกลมของคาส�งซ% า ๆ กน จนกระท�งเปนไปตามเง�อนไขส%นสดการทาซ% า จงจะไปทางานตามคาส�งถดไป รปท� 11.1 เปนรปแสดงตวอยางโครงสรางหลกท%งสามของการเขยนโปรแกรมในลกษณะโครงสราง
get up
wash face
eat
(a) Concatenation (Sequence)
havemoney
restaurant home
Yes
No
(b) Decision (Selection)
full
eat
No
Yes
(c) Iteration (Repetition)
รปท� 11.1 ตวอยางโครงสราง 3 ลกษณะ (a) การทางานตามลาดบ (b) การตดสนใจ (c) การทางานซ% า 2. หลกเล�ยงการใชประโยคคาส�ง GO TO หรอ GO TO-less Programming และเพ�อใหโปรแกรมมโครงสรางท� ด ควรจะนาหลกการของ Top-Down Programming และ Modular Programming มาประกอบในการเขยน กลาวคอ ควรจะทาการแยกงานท�จะทาออกเปนสวนยอยๆ (Module) แลวนามารวมกน ในลกษณะเดยวกบการผลตเคร�องมอตาง ๆ ซ� งจะผลตช%นสวนตาง ๆ ท�จาเปนกอน แลวจงนามาประกอบกน จะมผลทาใหโปรแกรมแตละสวนไมยาวจนเกนไป ทาใหงายตอการตรวจสอบและแกไขโปรแกรม อกท%งยงเปนการใชโปรแกรมท�มอยเดมใหเปนประโยชนสงสดได กลาวคอ สามารถนา Module ท�มอยเดม มาใชในโปรแกรมท�จะเขยนข%นใหมได ประโยชนของการเขยนโปรแกรมในลกษณะโครงสราง กลาวโดยสรปแลว การเขยนโปรแกรมวธน% มขอด ดงน% 1. การทางานของโปรแกรมเปนไปตามลาดบของ Source Code ทาใหงายตอการตรวจสอบ แกไข และปรบปรง 2. สามารถนา Module ท�สรางข%นไปใชกบโปรแกรมอ�น ๆ ตอไปได
Programming
5
3. สามารถแบงงานกนทาและแกไขในระหวางกลมของผเขยนโปรแกรมได
11.6 Top-Down Programming Top-down programming เปนวธการเขยนโปรแกรม โดยทาการแบงโปรแกรมออกเปนโครงสรางลาดบช%น (Hierarchy Structure) ตามการทางาน ซ�งเร�มจากการพจารณา Function หลกของโปรแกรม แลวทาการแบงออกเปน Function ยอยๆท�ประกอบกนแลวสามารถทางานตามท�ตองการได หรอทาโปรแกรมใหอยในรปท�ของ Structure Chart แตละสวน จะประกอบดวยโปรแกรมยอยท�จะทางานของสวนน%น ๆ ซ�งอาจจะเปน 1 โปรแกรมยอยหรอมากกวากได เปรยบเสมอนการออกแบบอปกรณตางๆท�ตองมการแบงเปนสวนประกอบตางๆ อยางเชน สเตอรโอ กจะมการแบงเปนสวน Amplifier, Deck, Tuner, CD Player และอ�น ๆ เปนตน การเขยนโปรแกรมวธน% มขอด ดงน% 1. สามารถทาใหเรารโครงสรางของโปรแกรม หรอภาพรวมของโปรแกรม 2. ทาใหเราสามารถออกแบบโปรแกรมไดอยางสมบรณ 3. งายตอการหาจดบกพรองของโปรแกรม การแกไข หรอการเพ�มเตมสวนตาง ๆ ใหกบโปรแกรม 4. สามารถแบงงานกนทาได 5. สามารถใชโปรแกรมท�มอยใหเกดประโยชนสงสด โดยท�วไป จะมข%นตอนในการเขยน ดงน% 1.วเคราะหปญหา หรอโปรแกรมท�ตองการจะเขยน 2. แจกแจงปญหาออกเปนปญหายอย หรอแบงเปนสวนยอย ๆ 3. ทาการเขยน Structure Chart 4. ทาการเขยน Source Code หรอแปลงเปนโปรแกรมภาษาคอมพวเตอร รปท� 11.2 แสดง structure chart สาหรบโปรแกรมตดเกรด
Grade Evaluation
Perform EvaluationObtain Input Data Display Results
Grade CalculationObtain Student ScoreObtain Student ID
รปท� 11.2 Structure Chart สาหรบโปรแกรมตดเกรด
11.7 Modular Programming Modular Programming เปนวธการเขยนโปรแกรมท�เนนการแบงโปรแกรมออกเปนสวนยอย ๆ ซ� งเรยกวา Module มจดประสงคกเพ�อใหงายตอการเขยน และใหเกดความผดพลาดในการเขยนนอยท�สด โดยเนนท�การทาใหโปรแกรมมความซบซอนนอยท�สด ซ�งเปรยบเสมอนการเขยนบทความหรอหนงสอตางท�ตองมการแบงเปนหวขอตาง ๆ การเขยนวธน% มขอด คอ สามารถแบงงานกนทาในกรณท�พฒนาโปรแกรมเปนกลมได และยงสามารถนา Module มาใชรวมกนได อยางเชน Module ท�เก�ยวกบ INPUT/OUTPUT เปนตน ในการออกแบบ Module ควรจะ
Programming
6
ออกแบบใหเปน Module ขนาดเลกท�สดเทาท�ทาได เพ�อมใหเกดความซ% าซอนของโปรแกรม และเพ�อใหการใช Module รวมกนเปนไปอยางมประสทธภาพสงสด ยกตวอยาง เชน เราควรเขยนเปน Module สาหรบบวก ลบ คณ หาร ใหเปนคนละ Module แทนท�จะเขยนใหรวมอยใน Module เดยวกน เพราะในบางกรณ อาจจะใชเพยงแคการบวกเทาน%น ซ�งทาใหประสทธภาพของโปรแกรมดอยลง เปนตน Top-down Programming & Modular Programming โดยสรปแลว วธการเขยนโปรแกรมท%ง 2 วธน% เปนการเขยนโปรแกรมท�เหมอนกน แตมมมมองท�ตางกน Top-down Programming จะเนนท�ข%นตอนการออกแบบโปรแกรม (Program Design Process) ในขณะท� Modular Programming จะเนนท�ข%นตอนการเขยนโปรแกรม (Program Coding Process) อน�ง หลงออกแบบโปรแกรมแบบ Top-down programming เวลาเขยนรหสโปรแกรม จะมช�อเรยกวา Bottom-up Implementation เพราะจะตองเร�มเขยนจากระดบลางสด
11.8 Structure Chart Structure Chart เปนผงแสดงสวนประกอบของโปรแกรม มลกษณะเหมอนตนไมท�แตกก�งกานสาขา หรอผงขององคกร (รปท� 11.3) การแบงสวนประกอบของโปรแกรมจะแบงตามหนาท�ของสวนประกอบแตละสวน โดยใชหลกการของ Top-Down Programming กสาวคอ จะเร�มตนพจารณาจากสวนประกอบใหญวา สามารถแบงเปนสวนประกอบยอย ๆ ไดก� สวน โดยเรยงตามลาดบความสาคญ แลวจงพจารณาถงสวนประกอบยอยของสวนประกอบยอยอกทหน�ง โดยทาเปนข%น ๆ ไป สวนประกอบแตละสวนจะถกแสดงดวยส�เหล�ยมผนผา สาหรบระบถงหนาท�ใดหนาท�หน�ง และจะเรยงกนตามลาดบช%น (Hierarchy Structure) น�นหมายความวา ส� เหล�ยมผนผาท�อยบนสดจะแสดงถงการทางานหลกของโปรแกรมน%น ส� เหล�ยมผนผาท�เรยงลาดบลงมาแสดงสวนประกอบยอยของการทางานหลกน%น ซ�งอาจจะถกแบงสวนประกอบยอยลงไปไดอก ผงน% จะแสดงถงหนาท�หลกของโปรแกรม หนาท�ยอยของโปรแกรม และความสมพนธระหวางหนาท�ตาง ๆ กลาวคอ จะทาใหเขาใจถงโครงสรางหลกของโปรแกรม รปท� 11.4 เปน structure chart สาหรบแสดงโครงสรางของโปรแกรมท�ใชคานวณเก�ยวกบ Matrix และรปท� 11.5 เปน structure สาหรบโปรแกรมคานวณเก�ยวกบ Matrix ท�เพ�มรายละเอยดของการรบสงขอมลระหวางสวนยอยดวย
University
Economics Law Commerce Engineering Science... ...
EE MECE ChEIE
Commu. ControlElectronicsPower Computer
รปท� 11.3 แสดงโครงสรางของมหาวทยาลย
Programming
7
Matrix
Calculation
Calculation Matrix
Input
Output
Display
Product Quotient Inverse
Matrix Difference Sum
Row Swap Pivot
Selection
Gauss-
Jordan รปท� 11.4 แสดง Structure Chart ของโปรแกรมสาหรบคานวณ Matrix
Matrix
Calculation
CalculationMatrix
Input
Output
Display
Product QuotientInverse
MatrixDifferenceSum
Row SwapPivot
Selection
Gauss-
Jordan
Dimension,2 Matrices
Dimension,2 Matrices
CalculationResult
(Matrices)
Calculation
Result
(Matrices)
Dimension,
2 Matrices
Sum Difference Product Quotient
Dimension,
Matrix
Inverse
Matrix
UnitMatrix
with
InverseMatrix
Matrix,
column
Pivot
(column
number)
MatrixMatrix,
Pivot ProductInverse
Matrix
ProductInverse
Matrix
Matrix,
Inverse
Matrix
Divisor รปท� 11.5 Structure ของโปรแกรมสาหรบคานวณ Matrix แบบละเอยด มการแสดงการรบ-สงขอมล
11.9 Algorithm Algorithm คอ ลาดบข%นตอนท�ใชในการแกปญหา โดยท�วไป จะเจาะจงถงการแกปญหาโดยใชคอมพวเตอร โดยจะเขยนในลกษณะเปนคาส�งของแตละข%นตอน เหมอนๆกบคาอธบายการทาอาหาร การทดลอง หรอการใชเคร�องมอตางๆ โดยท�วไป Algorithm จะตองมคณสมบตดงน% 1. Exactness ใชขอความท�ชดเจน ไมคลมเคลอ 2. Effectiveness ไดผลลพธท�ถกตอง
Programming
8
3. Guaranteed termination ตองมจดส%นสด 4. Generality ตองใชไดกบคาท�วๆไป หรอใชไดกวางขวางมากท�สดเทาท�ทาได คาส�งในแตละข%นตอนจะตองเปนคาส�งท�คอมพวเตอรสามารถทาได และตองส�อความหมายใหผอานสามารถนาไปเขยนเปนโปรแกรมตอไปได นอกจากน% Algorithm ท�ด ควรมคณสมบตดงน%
• มประสทธภาพสง กลาวคอ ใชเวลาส%นในการคานวณ
• ไมซบซอน เพ�อใหงายตอการเขยนโปรแกรม และตรวจสอบขอผดพลาด
• ประหยดทรพยากร โดยเฉพาะหนวยความจา โดยปกตแลว คณสมบต 3 ประการดงกลาวน%คอนขางจะมลกษณะเปน Trade-Off กน ยกตวอยางเชน
• ถาตองการประสทธภาพท�สง มกจะมข%นตอนการคานวณท�ซบซอนข%น
• ถาตองการประหยดทรพยากร มกจะตองเพ�มจานวนข%นตอน สงผลใหประสทธภาพต�าลง
• ถาตองการลดความซบซอน อาจตองใชหนวยความจามากข%น ดงน%น การคดคนหา Algorithm ท�ด จงเปนหวขอวจยสาคญอนหน�งในสาขาวชาวศวกรรมคอมพวเตอร หลกการเขยน Algorithm 1. คาส�งท�ใชในแตละข%นตอนตองเปนคาส�งท�คอมพวเตอรสามารถทางานได เชน การรบขอมล การคานวณบวก ลบ คณ หาร การเปรยบเทยบ เปนตน ในกรณท�เปนการคานวณท�ไมใช Function พ%นฐานของคอมพวเตอร จะตองเขยน Algorithm อธบายการคานวณน%น 2. ตองใชถอยคาท�ชดเจน และงายตอการทาความเขาใจ 3. ตองงายตอการนาไปเขยนเปนโปรแกรม และสามารถตรวจสอบความถกตองได 4. ใชสมการทางคณตศาสตรแสดงการคานวณ เฉพาะกรณท�ยากตอการอธบายดวยคาพดเทาน%น หมายเหต ในกรณท�ทาการเขยนโปรแกรมขนาดใหญ หรอโปรแกรมท�สามารถแบงออกเปนสวนประกอบยอย ๆ ได การเขยน Algorithm มกจะทาในลกษณะเขยนอธบายสวนท�สาคญ หรอสวนท�เปนหวใจหลกของโปรแกรม เชน ในโปรแกรมคานวณหา Inverse Matrix กมกจะเขยน Algorithm ท�แสดงวธการคานวณเทาน%น โดยจะตดสวนท�เปนพ%นฐาน เชน สวน INPUT/OUTPUT เปนตน ออก
11.10 Flowchart Flowchart (ผงงาน) เปนเคร�องมอท�ชวยในการวางแผนข%นตอนตาง ๆ ของโปรแกรม และชวยในการทาความเขาใจข%นตอนการทางานของโปรแกรม หรอ Algorithm ท�ใชในการเขยนโปรแกรมน%น ประกอบดวยสญลกษณตาง ๆ ซ�งแสดงความหมายตาง ๆ กนออกไป สญลกษณท�ใชเปนประจา สญลกษณท�ใชในการเขยน Flowchart โดยมากจะเปนรปท�ทรงทางเรขาคณต เชน ส�เหล�ยม วงกลม ลกศร เปนตน ซ�งมอยประมาณ 30 สญลกษณ โดยแตละสญลกษณจะมความหมายแตกตางกนไป แตสญลกษณท�ใชเปนประจามอยไมมากนก ดงแสดงในตารางตอไปน%
ช�อสญลกษณ สญลกษณ ความหมาย
Process Process
แสดงการประมวลผลขอมล เชน การคานวณ การโยกยายขอมล เปนตน
Programming
9
Decision Decision
แสดงการตดสนใจ หรอการกาหนดเง�อนไขตางๆ
Terminator Terminator
แสดงจดเร�มตน หรอจดส%นสดของโปรแกรม หรอ โปรแกรมยอย (Subprogram)
Data Data
แสดงการปอนขอมล (Data Input) หรอการแสดงผลลพธจากการประมวลผลขอมล (Data Output)
Flowline Yes
No
แสดงทศทางของแตละ Process ใน Flowchart ลกศรท�ม Label ตาง ๆ เชน Yes, No เปนตน จะใชเฉพาะกบสญลกษณ Decision เทาน%น
Predefined Process Predefined
process
แสดงการประมวลผลท�ท�ไมไดเปน Process พ%นฐาน (เชน การบวก ลบ คณ หาร) และไดรบการกาหนดนยามไวแลว กลาวคอ แสดงการเรยกใชโปรแกรมยอย (Subprogram) เชน Function ในภาษา C เปนตน
Connector Connect
แสดงจดเช�อมตอของ Flowchart ในกรณท�มความยาวมาก ๆ ท%งน% เพ�อใหสะดวกในการอาน
Annotation ...
...
...
แสดงขอความตาง ๆ สาหรบอธบายข%นตอนตาง ๆ ท�ปรากฏใน Flowchart ท%งน% เพ�อใหความกระจางแกผอานมากข%น
หลกเกณฑการเขยน Flowchart จดประสงคหลกของ Flowchart กคอ ชวยใหสามารถทาความเขาใจโปรแกรมไดด และชดเจนย�งข%น อนจะเปนประโยชนตอผเขยนโปรแกรม ในการวางแผนการพฒนาโปรแกรม หรอปรบปรงโปรแกรมใหดข%น ในกรณท�เกดขอผดพลาดข%น และเปนประโยชนตอผใช ในการทาความเขาใจการทางาน และขอจากดตาง ๆ ของโปรแกรม ดงน%น Flowchart ท�ดจะตองอยในรปท�แบบท�งายตอการทาความเขาใจ และไมทาใหเกดความสบสนตอผอาน ซ� งมหลกการเขยนท�วไปดงตอไปน% 1. แบง Flowchart ออกเปนกลม ๆ (module) ซ�งเปนหลกพ%นฐานของการเขยนโปรแกรมในลกษณะโครงสราง 2. Flowchart จะตองเขยนในลกษณะจากบนลงลาง หรอจากซายไปขวา เพ�อใหสะดวกในการอาน 3. Flowchart สาหรบโปรแกรมหลก (Main Program) แตละอนจะเร�มตนจาก สญลกษณ TERMINATOR START (หรอ BEGIN) และส%นสดท� TERMINATOR STOP (หรอ END) สวน Flowchart สาหรบโปรแกรมยอยจะเร�มจาก TERMINATOR START เชนกน แตสญลกษณท�ใชแสดงการส%นสดของโปรแกรมยอย จะเปนสญลกษณ TERMINATOR RETURN (หมายถง กลบไปท� Main Program หรอโปรแกรมยอยท�เรยก) 4. สญลกษณแตละอนจะถกเช�อมโยงดวย Flowline (เสนแสดงทศทางการทางาน) หรอเสนตรงท�มหวลกศรตรงปลาย เพ�อแสดงถงลาดบและทศทาง โดยท�วไปทศทางของ Flowline จะทาจากบนลงลาง และจากซายไปขวา
Programming
10
5. สญลกษณแตละอนจะมทางเขา 1 ทาง และทางออก 1 ทาง ยกเวนแตสญลกษณ Decision จะมทางออกไดมากกวา 1 ในกรณท�มข%นตอนท�มาสสญลกษณน%นเกน 1 ใหรวมเปนทางเดยวกน กอนท�จะมาเขาสญลกษณน%น (รปท� 11.6) 6. ใชสญลกษณจดตอเน�อง (Connector) เม�อมความจาเปนเทาน%น เชน ใชจดตอเน�องเม�อข%นหนาใหม หรอเม�อสญลกษณท�แสดงถงลาดบข%นตอนการทางานหางกนจนกระท�งการลากเสนทศทางการทางานอาจทาใหเกดความสบสน
รปท� 11.6 วธการเขยนสญลกษณลกศร กรณท�มหลายทางเขา รปท�ขวาแสดงวธท�ถกตอง
7. เสนทศทางการทางานตองไมลากผานกน และตาแหนงเขา-ออกของเสนทศทางการทางานควรจะอยตรงก�งกลางของสญลกษณ 8. ใชสญลกษณ Annotation ในการเขยนคาอธบายข%นตอนตาง ๆ ท�ไมชดเจน หรอยากตอการเขาไจ เชน ความหมายของ Function หรอคาของตวแปรตาง ๆ 9. ในการเขยนรายละเอยดในสญลกษณ ใหยดหลกดงตอไปน% 9.1ขอความท�ใชในสญลกษณจะตองเปนคาท� งายตอการเขาใจ เปนขอความท�ไมกากวม และไมควรจะเปนสญลกษณเฉพาะของภาษาคอมพวเตอรภาษาใดภาษาหน�ง 9.2 ช�อตวแปรจะตองส�อความหมายของตวแปรน%น และจะตองสอดคลองกนท%ง Flowchart 9.3 การเขยนขอความภายในสญลกษณ Decision จาแนกไดเปนแบบตาง ๆ ดงน% (รปท� 7, 8) (a) การเปรยบเทยบระหวางคาของตวแปร 2 คา เขยนในลกษณะ A : B โดย label ของลกศรท�ออกจากสญลกษณน%
จะเปน >, <, =, ≠, ≥ หรอ ≤ (รปท� 11.7 (a)) (b) การเปรยบเทยบระหวางคาของตวแปรตวหน�งกบอกคาหน�ง เขยนในลกษณะ A>B ในกรณน% label ของลกศรจะเปน Yes, No (รปท� 11.7 (b)) (c) การกาหนดท�ไปโดยใชคาของตวแปร เขยนในลกษณะ A: ? โดย label ของลกศรท�ออกจากสญลกษณจะแสดงคาของตวแปรตวน% เชน 1, 2 etc. (รปท� 11.7 (c)) (d) ในกรณท�มการกาหนดท�ไปโดยใชคาของตวแปร ท�มทางเลอกเปนจานวนมาก อยางในกรณการใชประโยคคาส�ง Switch ในภาษา C ใหเขยนในลกษณะเหมอนขอ (c) แตใหมลกศรออกจากสญลกษณเพยงเสนเดยว แลวนาไปแยกเปนหลาย ๆ เสน โดยกาหนด label ของลกศรท�แตกออกไปใหแสดงคาของตวแปรตวน% (รปท� 11.8)
(a) (b) (c)
Programming
11
รปท� 11.7 แสดงวธการใชสญลกษณ Decision 9.4 การเขยนขอความแสดงการคานวณ โดยท�วไปจะเขยนในลกษณะ A = B+C (C or Fortran Style) หรอ A <- B+C (Pascal Style) จะมความหมายวา ใหคา A เทากบ ผลบวกของ B กบ C (หรอพดตามภาษาคอมพวเตอรวา หาผลบวกของ B กบ C แลวนาไปเกบเปนคาของ A เพราะฉะน%น จะตองมคาของ B และ C ท�จะนามาคานวณกอน)
A : ?
1 32 4 Otherwise
รปท� 11.8 แสดงวธการใชสญลกษณ Decision (Case (d))
9.5 ในการแสดงชดขอมลใน Flowchart ใหเขยนในลกษณะ a1, a2, a3 ... โดยให an แสดงขอมล ตว ท� n ของชดขอมลท�ใชช�อ a
11.11 ตวอยาง Algorithm และ Flowchart ตวอยางท� 1 การคานวณหาผลบวก ลบ คณ หารของเลข 2 จานวน Algorithm
1. รบคาตวเลข 2 จานวน 2. คานวณหาผลรวมของเลข 2 จานวน 3. คานวณหาผลตางของเลข 2 จานวน 4. คานวณหาผลคณของเลข 2 จานวน 5. คานวณหาผลหารของเลข 2 จานวน 6. แสดงผลลพธท�ได รปท� 11.9 แสดง Flowchart สาหรบตวอยางน%
START
ReadA, B
sum = A + B
difference = A -B
product = A * B
quotient = A / B
Print sum,
difference,
product,
quotient
STOP
Input 2 numbers :
A and B
Display results
รปท� 11.9 Flowchart สาหรบตวอยางท� 1
Programming
12
ตวอยางท� 2 การคานวณหาคาเฉล�ย Algorithm 1. กาหนดคาเร�มตนของจานวนคา (count) และผลรวม (sum) เปน 0 (ข%นตอนน% เรยกวา Initialization) 2. รบคาท�จะมาทาการคานวณ 3. ถาคาท�รบเขามาไมเทากบ 0 ใหทาตามข%นตอนตอไปน% 3.1 เพ�มจานวนคาทละ 1 3.2 ใหผลรวมเทากบ ผลรวมเดมรวม กบคาท�รบเขามา 3.3 กลบไปท�ข%นตอนท� 2 4. ถาคาท�รบเขามาเปน 0 ใหทาตามข%นตอนตอไปน% 4.1 คานวณคาเฉล�ย โดยหาผลหารของ ผลรวมกบจานวนคา 4.2 แสดงคาเฉล�ยท�คานวณได 4.3 จบการทางาน รปท� 11.10 แสดง Flowchart สาหรบตวอยางน%
START
count = 0
sum = 0
read data
yes
count = count + 1
sum = sum +
data
Input data
average = sum /
count
average
STOP
Display
output
Initialize count
and sum
0 data ≠
No
รปท� 11.10 Flowchart
Programming
13
ตวอยางท� 3 โปรแกรมสาหรบหาคาสงสด
Algorithm 1. รบชดตวเลขท�ตองการจะหาคาสงสดเขามา โดยมข%นตอนดงน% 1.1 รบคาจานวนตวเลข 1.2 รบจานวนตวเลขจนไดครบตามจานวนท�ตองการ 2. กาหนดคาสงสดใหเทากบตวเลขตวแรก 3. เปรยบเทยบคาสงสดน%กบตวเลขตวถดไป ถาคาสงสดนอยกวา ใหกาหนดคาสงสดเทากบคาตวเลขตวน% 4. ทาซ% าขอ 3 จนกวาจะถงตวเลขตวสดทายในชดตวเลข 5. แสดงคาสงสดท�หาได
รปท� 11.11 แสดง Flowchart สาหรบตวอยางน%
START
Read n
Read n as the
number of the
number series
i = 1
Read a i
i = i + 1
i > n
Yes
max = a 1i = 2
Initialization : i as
the loop index and
max as the variable
for the maximum
value
i is the loop index
max < a i Yes max = a i
No
i = i + 1
i > n
Yes
Print max
STOP
No
No
รปท� 11.11 Flowchart ของโปรแกรมสาหรบหาคาสงสด
Programming
14
ตวอยางท� 4 โปรแกรมสาหรบหาคาตวหารรวมมาก (ห.ร.ม., Greatest Common Divisor) ของเลขจานวนเตม 2 จานวน การหาคา ห.ร.ม. ทาไดโดยใชวธของ Euclid ซ�งมวธการงายๆ คอ นาเลข 2 จานวนท�ตองการหามาหารกน ถาหารลงตว แสดงวาตวหารเปน ห.ร.ม. ถาไมกนาตวหารมาหารดวยเศษท�ไดจากการหาร ทาเชนน% เร�อยไป จนกวาเศษท�ไดจากการหารเปน 0 ซ�งสามารถแสดงเปนสมการคณตศาสตร ไดดงน%
gcd( , )( )
gcd( , mod ) ( )x y
x when y
y x y when y=
=
≠
0
0
ตวอยาง เชน 720 กบ 256 720 mod 256 = 208 256 mod 208 = 48 208 mod 48 = 16 48 mod 16 = 0
∴ ห.ร.ม. ของ 720 กบ 256 เทากบ 16
หมายเหต x mod y หมายถง เศษท�ไดจาก x ÷ y Algorithm 1. รบตวเลข 2 จานวนท�ตองการหา ห.ร.ม. เขามา กาหนดใหเปน x, y 2. ระหวางท�คา y ไมเปน 0 ใหทาตามข%นตอนตอไปน%
2.1 หาเศษท�ไดจากการหาร x ÷ y 2.2 กาหนดให x เทากบ y และ y เทากบเศษท�ไดจากการหาร 3. แสดงคา x รปท� 11.12 แสดง Flowchart สาหรบตวอยางน%
START
Read x, y
y = 0
Yes
z = x mod y
x = y
y = z
Print x
No
STOP
x mod y means
the remainder
when x is divided
by y
รปท� 11.12 Flowchart ของโปรแกรมสาหรบหา ห.ร.ม.
Programming
15
ตวอยางท� 5 โปรแกรมสาหรบหาคา GPA โปรแกรมน% มใชวธการคลายกบการหาคาเฉล�ย (ตวอยางท� 2) จะตางกนกแตเพยงการคานวณหา Grade Point, การคานวณหาจานวนหนวยกต และนามาหารกนเทาน%น อน�ง ในตวอยางน% จะแสดง Flowchart ในกรณท�แบงเปนโปรแกรมยอยหลายอน (รปท� 11.13)
Start
Read Data
GPA
Calculation
Display GPA
Stop
(a) โปรแกรมท%งหมด
Programming
16
Start
Read n
n : number of
subject
i = 1
Read g i, c i
gi means grade of ith
subject
ci means credit of ith
subject
i as index for
controlling the loop
i = i + 1
i > n
No
Yes
Return
(b) โปรแกรมยอยสาหรบรบคาเกรดและหนวยกต
Start
credit_sum = c 1
gp_sum = g 1*c 1i = 2
credit_sum =
credit_sum + c igp_sum = gp_sum +
g i*c i
i = i + 1
i > n
Yes
gpa = gp_sum /
credit_sum
Return
No
(c) โปรแกรมยอยสาหรบหาคา GPA รปท� 11.13 Flowchart ของโปรแกรมสาหรบหาคา GPA
Programming
17
ตวอยางท� 6 โปรแกรมสาหรบเรยงลาดบขอมล (Sorting) การเรยงลาดบมวธการหลายวธ ในตวอยางน% จะใชวธ Bubble Sort ในการเรยงลาดบตวเลขจากนอยไปหามาก มหลกการกลาวโดยสรป คอ จะสลบคาระหวางจานวนท�อยตดกน ซ� งมผลทาใหจานวนนอยท�สดลอยข%นมาในลกษณะเดยวกบฟองอากาศ กรณท�มขอมล n ตว จะตองทาการสลบท�ในลกษณะดงกลาวน% จานวน n-1 รอบ จงจะเสรจ สมมตวา ขอมลท�จะทาการเรยงลาดบ เปน
7 2 4 3 1 6 5 ขอมลจะเปล�ยนในลกษณะดงน%
รอบท� 1 1 7 2 4 3 5 6 รอบท� 2 1 2 7 3 4 5 6 รอบท� 3 1 2 3 7 4 5 6 รอบท� 4 1 2 3 4 7 5 6 รอบท� 5 1 2 3 4 5 7 6 รอบท� 6 1 2 3 4 5 6 7
สวนท�ทาการเรยงลาดบเรยบรอยแลว Algorithm
1. รบชดตวเลขท�ตองการจะเรยงลาดบเขามา โดยมข%นตอนดงน% 1.1 รบคาจานวนตวเลข 1.2 รบจานวนตวเลขจนไดครบตามจานวนท�ตองการ 2. เปรยบเทยบเลข 2 ตวท�อยตดกน โดยเร�มจากตวเลขคท�อยหลงสด 2.1 ถาเลขท�อยหลงมคานอยกวา ใหสลบตาแหนงกน 2.2 ทาซ% าจนกวาจะครบทกคของตวเลข 2.3 ใหตดตวเลขท�อยหนาสดออกจากชดตวเลขท�ตองการเรยงลาดบ 3. ทาซ% าข%นตอนท� 2 จนกวาจานวนชดตวเลขท�ยงไมไดทาการเรยงลาดบเหลอ 1 4 แสดงผลการเรยงลาดบ โดยแสดงทละจานวนจนกวาจะครบตามจานวนของชดตวเลขท�ปอนเขาไป Flowchart ของโปรแกรมน%จะไดตามรปท� 11.14 (a)-(e) หมายเหต ในกรณท�เขยนคาอธบายโปรแกรมท�มขนาดใหญ มกจะเขยนเฉพาะ Algorithm ท�สาคญ ซ� งในท�น% คอ Bubble-Sort Algorithm กเขยนเฉพาะขอ 2 และ 3 สวน ขอ 1 และ 4 น%น เปนสวน Input และสวน Output ซ�งเปนสวนท�คลายคลงกนสาหรบทกโปรแกรม ดงน%น จงไมมความจาเปนตองเขยนอธบาย
Programming
18
Read an array of
number a
Display the
sorted array
START
Read a
Display Output
STOP
BUBBLE
SORT a
Sort array a by
bubble sort method
(a) โปรแกรมท%งหมด
(b) โปรแกรมยอยสวนรบขอมล
Programming
19
Set index i = 1
index i used for
counting loop and
controlling the
next loop
Set index k = n
index k used for
indicating the
element of array
START
i =1
k = n
a k < a k -1
Yes
swap a k with
a k -1
k < i + 1
Yes
k = k - 1
i = i + 1
i > n - 1
Yes
RETURN
NoNo
No
(c) โปรแกรมยอยสวน Bubble sort
START
tmp = a ka k = a k -1a k -1 = tmp
RETURN
(d) โปรแกรมยอยสวนสลบขอมล
START
k =1
k > n
RETURN
Print a k
k = k + 1
Yes
No
(e) โปรแกรมยอยสวนแสดงผล รปท� 11.14 Flowchart ของโปรแกรมสาหรบเรยงลาดบขอมลดวยวธ Bubble Sort
Programming
20
ตวอยางท� 7 การเรยงลาดบโดยวธ Insertion Sort การเรยงลาดบดวยวธน% มหลกการคอ จะแบงเปน 2 สวน คอ สวนท�เรยงลาดบเรยบรอยแลว กบ สวนท�ยงไมไดเรยงลาดบ วธการเรยงกคอ จะนาขอมลท� ย งไมไดรบการเรยงลาดบ มาใสในตาแหนงท�ถกตองในสวนทเรยงลาดบเรยบรอยแลว สมมตมขอมล 5 2 6 3 1 4 9 จะไดผลลพธเปนดงตอไปน% step 1 2 5 6 3 1 4 9 step 2 2 5 6 3 1 4 9 step 3 2 3 5 6 1 4 9 step 4 1 2 3 5 6 4 9 step 5 1 2 3 4 5 6 9 step 6 1 2 3 4 5 6 9 Flowchart ของโปรแกรมน%จะไดตามรปท� 11.15
รปท� 11.15 Flowchart แสดงโปรแกรมยอยวธ Insertion Sort
Programming
21
11.12 Pseudocode Pseudocode (หรอรหสเทยม รหสจาลอง รหสลาลอง) เปนคาอธบายข%นตอนการทางานของโปรแกรม โดยใชคาภาษาองกฤษ และภาษาการเขยนโปรแกรม แบบโครงสราง หรออาจจะใชภาษาไทยกได แตเน�องจากภาษาสาหรบเขยนโปรแกรมท�วไปมรากฐานจากภาษาองกฤษ การใชภาษาองกฤษจงเปนส�งพงประสงค Pseudocode ท�ดตองมความชดเจน ส%น และไดใจความ จดประสงคหลกของ Pseudocode คอ ชวยใหผเขยนโปรแกรมสามารถพฒนาข%นตอนตาง ๆใหเปนโปรแกรมไดงายข%น ทาใหมลกษณะคลายคลงกบโปรแกรมมากกวาอลกอรธม อาจกลาวไดวา Pseudocode เปนก�งกลางระหวางอลกอรธมกบโปรแกรม
ความหมายของ Pseudocode มผใหความหมายไวตางๆ กน เชน 1. หมายถง การเขยนโปรแกรมโดยไมตองคานงถงไวยากรณ แตเปนภาษาท�ผเขยนโปรแกรมเขาใจกนได มลกษณะเปนภาษาองกฤษธรรมดาสวนหน�ง กบภาษาโปรแกรม (programming language) อกสวนหน�ง 2. หมายถง การทางานของโปรแกรมท�นาเสนอเปนภาษาองกฤษท�ขาดๆหายๆ ซ� งเปนสวนผสมระหวางภาษาองกฤษธรรมดากบภาษาโปรแกรม Pseudocode น% มไวใหผเขยนโปรแกรมเหนภาพคราวๆ โดยไมตองลงไปในรายละเอยด 3. เปนท% งวธการออกแบบและการแสดงแบบโปรแกรมสาหรบใชในการเขยนคาส�ง ความหมายของคาวา Pseudoinstruction (คาส�งลาลอง) กคอ คาส�งท�ไมใชคาส�งในภาษาคอมพวเตอรอยางแทจรง แตเปนคาส�งท�เขยนเลยนแบบคาส�งจรงอยางยอ และใชแนวทางของคาส�งควบคมในภาษาน%น น�น คอ เราอาจจะใชคาส�งควบคม เชน Do While, If, Else แทนลอจกของโปรแกรมเพ�อใหเหนแนวทางการทางานในโปรแกรม แตวธการทางานน%นเราสามารถใชภาษาองกฤษระบอยางยอได 4. ใชขอความท�เปนภาษาไทยหรอองกฤษกได ในการแสดงข%นตอนการแกปญหา แตจะมคาเฉพาะท�เปนภาษาในโครงสรางของโปรแกรมมาชวยในการเขยน โครงสรางของ Pseudocode จะมสวนคลายกบการเขยนโปรแกรมมาก 5. Pseudocode เปนเคร�องมอท�นยมใชกนมากในการออกแบบโปรแกรม ชวยใหโปรแกรมเมอร สามารถเขยนโปรแกรมไดงายข%น ภาษาหรอคาท�ใชเขยน Pseudocode เปนการผสมผสานระหวางคาในภาษาองกฤษท�วไป กบภาษาคอมพวเตอร โครงสรางของ Pseudocode จงมสวนท�คลายคลงกนกบการเขยนโปรแกรมมาก กลาวโดยสรปคอ รหสลาลองหรอ pseudocode เปนคาบรรยายท�เขยนแสดงข%นตอนวธ (Algorithm) ของการเขยนโปรแกรม โดยใชภาษาท�กะทดรด ส�อสารกบโปรแกรมเมอรผเขยนโปรแกรม โดยอาจใชภาษาท�ใชท�วไปและอาจมภาษาท�ใชในการเขยนโปรแกรมประกอบ แตไมมมาตรฐานแนนอนในการเขยน pseudocode และไมสามารถนาไปทางานบนคอมพวเตอรโดยตรง (เพราะไมใชคาส�งในภาษาคอมพวเตอร) และไมข%นกบภาษาคอมพวเตอรภาษาใดภาษาหน�ง ในปจจบน นยมใช pseudocode แสดง Algorithm มากกวาใชผงงาน เพราะผงงานอาจไมแสดงรายละเอยดมากนกและใชสญลกษณซ�งทาใหไมสะดวกในการเขยนโปรแกรมใหญ ๆ ขอดของ Pseudocode 1. ลดความซบซอนของการพฒนาโปรแกรม โดยท�วไป ในการพฒนาโปรแกรมขนาดใหญ จาเปนตองแบง
ข%นตอนการพฒนาเปนการเตรยมอลกอรธมเพ�อใชแกปญหา และการเขยนโปรแกรม เพ�อลดความซบซอนของแตละข%นตอน โดยในขณะท�ข%นตอนการเตรยมอลกอรธม จะเนนท�การหาวธแกปญหา การเขยน Pseudocode ชวยในการตรวจสอบความถกตองของอลกอรธม อกท%งยงชวยใหการเขยนโปรแกรมเปนไปอยางมประสทธภาพมากข%น
Programming
22
2. เพ�มความยดหยนในการเขยนโปรแกรม เน�องจาก Pseudocode ไมข%นกบภาษาเขยนโปรแกรมภาษาใดภาษาหน�ง จงสามารถนาไปพฒนาเปนโปรแกรมโดยใชภาษา C, Fortran, Java หรออ�นๆ ทาใหสะดวกตอผเขยนโปรแกรม
3. งายตอการทาความเขาใจ เน�องจาก Pseudocode อยในรปแบบท�เรยบงาย เรยงลาดบเปนข%นตอน และใชสานวนกระทดรด ชดเจน และไดใจความ จงเปนส�งท�ผเขยนโปรแกรมสามารถทาความเขาใจไดโดยงาย
โดยท�วไป Pseudocode มรปแบบดงน%
Algorithm <name>
1. ---------------------------- 2. ---------------------------- : 5. ----------------------------
End.
ตวอยางท� 8 Pseudocode สาหรบการหาคาผลบวกของเลข 3 จานวน ท�รบเขามาทางแปนพมพ
Algorithm Summation of 3 numbers
1. SUM = 0 2. INPUT (value1) 3. INPUT (value2) 4. INPUT (value3) 5. Compute SUM = value1 + value2 + value3 6. OUTPUT (SUM)
End.
ตวอยางท� 9 Pseudocode สาหรบการคานวณหาพ%นท�สามเหล�ยม
Algorithm Triangle area
1. area = 0 2. Read Base 3. Read Height 4. Compute area = 1/2 * Base * Height 5. Print area
End.
ตวอยางท� 10 Pseudocode สาหรบคานวณหาคาเกรดเฉล�ย
Algorithm Grade point average
1. Set total and grade point to zero 2. Set grade counter to one 3. Input the number of subjects 4. While grade counter is less than or equal to the number of subjects 1. Input grade and credits 2. Add credits into total 3. Add product of credits and grade into grade point 4. Add one to grade counter 5. Set grade point average to the grade point divided by total 6. Print grade point average
End.
หลกเกณฑท�วไปของการเขยน Pseudocode มการสรปหลกเกณฑ ในการเขยนไวหลายแบบ ดงตวอยางตอไปน% แบบท�1:
Programming
23
1. สญลกษณท�ใชในการดาเนนการทางคณตศาสตรตางๆจะถกใชงานตามปกต คอ + สาหรบการบวก – สาหรบการลบ * สาหรบการคณ และ / สาหรบการหาร 2. ช�อขอมลใชแทนจานวนท�จะถกดาเนนการตามข%นตอนวธ 3. การใชคาอธบายกากบข%นตอนวธ อาจทาโดยใชสญลกษณ * หรอ ** กากบหวทายขอความคาอธบาย เพ�อแยกออกมาจากข%นตอนการทางาน 4. คาสงวนบางคาท�ใชในภาษาระดบสงท�วไปอาจนามาใช เชน Read หรอ Enter สาหรบการรบขอมลเขา และWrite หรอ Print สาหรบการแสดงขอมล 5. การเพ�มหรอลดระยะเย%องอยางเหมาะสม เพ�อแสดงระดบของข%นตอนการทางานในโครงสรางควบคมการทางานในกลมเดยวกน แบบท� 2: 1. ถอยคาหรอประโยคคาส�ง(statement) ใหเขยนอยในรปท�แบบของภาษาองกฤษอยางงาย 2.ในหน�งบรรทด ใหเขยนประโยคคาส�งเพยงคาส�งเดยว 3.ควรใชยอหนาใหเปนประโยชนเพ�อแยกคาเฉพาะ (Keywords) ไดอยางชดเจน รวมถงจดโครงสรางการควบคมใหเปนสดสวน ซ�งการกระทาดงกลาวจะทาใหงายตอการอาน 4. แตละประโยคคาส�งใหเขยนลาดบจากบนลงลางโดยมเพยงทางเขาทางเดยวและมทางออกทางเดยวเทาน%น 5.กลมของประโยคคาส�งตางๆ อาจจดรวมกลมเขาดวยกนในรปแบบของโมดล แตตองกาหนดช�อโมดลเหลาน%นดวย เพ�อใหสามารถเรยกใชโมดลเหลาน%นได สานวนท�นยมใชในการเขยน Pseudocode 1. การรบขอมลเขา การแสดงผลขอมล และการบนทกขอมล
� การรบขอมลเขา มกจะนยมใชคาวา READ, ENTER หรอ INPUT ตามดวยช�อตวแปรท�ตองการเกบขอมล ถาหากมหลายตวใชสญลกษณ ; (semi-colon) ก%น
� การแสดงผล ใชคาวา OUTPUT หรอ PRINT � การบนทกขอมล ใชคาวา WRITE หรอ SAVE
2. การคานวณ � ใชคาวา Compute ตามดวยช�อตวแปรท�ตองการเกบคาจากการคานวณ ตามดวยเคร�องหมายเทากบ และ
นพจนของการคานวณ เชน Compute area = a × b
� ใชตวดาเนนการ (operator) และฟงกชนทางคณตศาสตรท�เปนท�เขาใจกนท�วไป เชน + - * / sin(x) � การกาหนดคา (assignment) โดยท�วไป นยมใชเคร�องหมาย = โดย a = b หมายถง กาหนดคาของตวแปร
b ใหเปนคาของตวแปร a (ดงน%น ตวแปร b จาเปนตองมคา) 3. การตดสนใจ และทดสอบทางเลอก
� มกจะใชคาวา IF หรอ IF-THEN-ELSE และ ENDIF
IF a>0 THEN
PRINT POSITION
ELSE PRINT NEGATIVE
ENDIF
� สาหรบในกรณท�มมากกวา 2 ทาง จะใชคาวา CASE และ ENDCASE เชน
Programming
24
CASE num OF
1 : PRINT ONE 2 : PRINT TWO 3 : PRINT THREE
ENDCASE
4. การกระทาแบบวนซ% า (Loop) � การทาซ% าจนกวาเง�อนไขท�กาหนดจะเปนจรงจงหยดทา (REPEAT UNTIL) กรณน%คลายกบประโยค
คาส�ง do…while ในภาษา C
REPEAT
Statement 1 Statement 2 ------------------
UNTIL (CONDITION)
� มการตรวจสอบเง�อนไขกอนเขาทา (Precondition) ถาเง�อนไขเปนจรง จงจะเขาทาคาส�งภายใน (WHILE … DO)
WHILE (CONDITION) DO
Statement 1 Statement 2 ------------------
ENDWHILE
� ทาคาส�งภายในตามจานวนคร% งท�กาหนด คลายกบ for loop ในภาษา C
FOR (NUMBER OF TIMES) DO
Statement 1 Statement 2 ------------------
ENDFOR
หรอ
FOR (each data in the set, i = 1 to 10)
DO
Statement 1 Statement 2 ------------------
ENDFOR
5. การกาหนดเง�อนไข ใชคาวา EQUAL AND OR NOT หรอสญลกษณ >, <, >=, <= 6. การเรยกใชโปรแกรมยอย ใชคาวา CALL ควบคกบ with และ returning เชน CALL sqrt with a returning sqrt_a 7. การกาหนดช�อตวแปร ในกรณท�ตองการอธบายคาของตวแปรแตละตวเพ�อใหเกดความชดเจนย�งข%น ควรเขยนคาอธบายในลกษณะดงน% * num = the number to the program * i = index for the looping และควรอยถดจากบรรทดช�อ Algorithm หรอกอนข%นตอนท� 1
Programming
25
ตวอยางท� 11 Pseudocode ในการบวกเลข 1+2+3+...+100 และพมพผลลพธออกมา
Algorithm Sum 1 to 100
1. I = 1 2. SUM = 0 3. WHILE ( I<=100 ) 1. Compute SUM = SUM + I 2. Compute I = I + 1 4. ENDWHILE 5. PRINT SUM
END.
ตวอยาง pseudocode ของโปรแกรมท�กาหนดใหรบคาตวเลขจานวนเตม 3 คา แลวเรยงลาดบคาจากนอยไปมากแลวแสดงผลลพธ อาจเปนดงน%
Algorithm Sorting 3 numbers
1. input nbr1, nbr2, nbr3 2. if nbr3 is less than nbr2 1. swap nbr2 with nbr3 3. endif 4. if nbr2 is less than nbr1 1. swap nbr1 with nbr2 5. endif 6. if nbr3 is less than nbr2 1. swap nbr2 with nbr3 7. endif 8. output nbr1, nbr2, nbr3
END.
ตวอยาง Pseudocode จากสวนของโปรแกรมตอไปน% (ขอสอบโอลมปก วชาคอมพวเตอรป2551 รอบท�1)
Algorithm ???
1. sum = 0 2. for i = 1 to n 1. for j = 1 to i 1. if (j mod i EQUAL 0) 1. for k = 0 to j-1 1. sum = sum + 1 2. k = k + 1 2. endfor 2. endif 3. j = j + 1 2. endfor 3. i = i + 1 3. endfor 4. print sum
END.
ถา n มคาเทากบ 10 หลงจากจบการทางานแลว sum มคาเปนเทาใด