11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf ·...

25
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 ทีเขียนขึ นไปใช้ในเครืองคอมพิวเตอร์หลาย ๆ แบบได้ เช่น นํา

Transcript of 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf ·...

Page 1: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ท�เขยนข%นไปใชในเคร�องคอมพวเตอรหลาย ๆ แบบได เชน นา

Page 2: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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) อาจกลาวไดวา การเขยนโปรแกรม มลกษณะคลายคลงกบการแกปญหาทางดานวทยาศาสตรหรอวศวกรรม ซ�งโดยท�วไป จะมข%นตอนดงน%

Page 3: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ซ� งเปนคาส�งสาหรบส�งใหคอมพวเตอรขามไปยงข%นตอนท�เราตองการในโปรแกรมน% นได คาส�งน% มขอดคอ ทาใหเกดความคลองตวในการเขยน

Page 4: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ท�สรางข%นไปใชกบโปรแกรมอ�น ๆ ตอไปได

Page 5: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ควรจะ

Page 6: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 แสดงโครงสรางของมหาวทยาลย

Page 7: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ไดผลลพธท�ถกตอง

Page 8: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

แสดงการประมวลผลขอมล เชน การคานวณ การโยกยายขอมล เปนตน

Page 9: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 จะทาจากบนลงลาง และจากซายไปขวา

Page 10: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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)

Page 11: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

Page 12: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

print

average

STOP

Display

output

Initialize count

and sum

0 data ≠

No

รปท� 11.10 Flowchart

Page 13: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ของโปรแกรมสาหรบหาคาสงสด

Page 14: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ของโปรแกรมสาหรบหา ห.ร.ม.

Page 15: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

Programming

15

ตวอยางท� 5 โปรแกรมสาหรบหาคา GPA โปรแกรมน% มใชวธการคลายกบการหาคาเฉล�ย (ตวอยางท� 2) จะตางกนกแตเพยงการคานวณหา Grade Point, การคานวณหาจานวนหนวยกต และนามาหารกนเทาน%น อน�ง ในตวอยางน% จะแสดง Flowchart ในกรณท�แบงเปนโปรแกรมยอยหลายอน (รปท� 11.13)

Start

Read Data

GPA

Calculation

Display GPA

Stop

(a) โปรแกรมท%งหมด

Page 16: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

Page 17: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ซ�งเปนสวนท�คลายคลงกนสาหรบทกโปรแกรม ดงน%น จงไมมความจาเปนตองเขยนอธบาย

Page 18: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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) โปรแกรมยอยสวนรบขอมล

Page 19: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

Page 20: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

Page 21: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 ชวยในการตรวจสอบความถกตองของอลกอรธม อกท%งยงชวยใหการเขยนโปรแกรมเปนไปอยางมประสทธภาพมากข%น

Page 22: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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:

Page 23: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 เชน

Page 24: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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

Page 25: 11 (Programming) - pongsak.ee.engr.tu.ac.thpongsak.ee.engr.tu.ac.th/tu156/classnote/program.pdf · Inverse Matrix Sum Difference Row Swap Pivot Selection Gauss - Jordan W ... + U

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 มคาเปนเทาใด