การเลงอกใชนก้ ารทาท ซ้านีท แบบ Repeat/Until จะใชเ้น มงอื่ ไมทก่ ราบจาท นวนครอ้ีนังทค่งนื าท สือ่ังงจะดทาเนิคนการ และรถน้วู าก่ จะตอ้น งถถูกดทาเนินค การอยา่ก งน้อน ยหนงืข่ง ครอนี้งั หรงอเม่องื ไมทก่ ราบว่าก เง่ืงอนไขสาท หรอบั การททาซทนี้าจนกว่กา จะไดคน้ าท สงง่ือั ทาท ซทีน้าจะมกน ารประมวลผล ตวัอ อยาก่ งการหาคา่ก เฉลงนย่ื อายคขุ องนกัอ เรนยน โดยผูในถ้ ชนป้ ้อป นขอ้น มูถลอายุทค ลน ะคนและนทาไปรวมสะสมไว้นทื่งน ตวอั แปร จะรัอบขน้อมูลถ ไปเรอง่ื ย ๆ จนกวาก่ ผนู้ใถ ชจน้ ะปอป้ นอายุเค ป็ปน 0 จะพบวาก่ ส่กวนตรวจสอบเงือง่ นไขจะอยกูถ่ ทน้ายสดคุ ของการทาท ซทา้ีน แบบ Repeat/Until เมงือ่ ออกจากการทาท งานทาท ซ้ทีนาแบบนก้ีน รจ็ ะประมวลผลคาท สองื่งั อง่นื ต่กอไป ดอังรูถปท่ืงน 7.9 ขัีอน้นตอนวคิธน รหอสั เทนยม Average-age Sum = 0 Counter = 0 enter Age Repeat Sum = Sum + Age Counter = Counter + 1 enter Age Until Age = 0 Average = Sum / Counter print Average End. 128 | ข้ีนัอนตอนวธคิ นแบบทาท ซา้นที
ผงัอ งาน รปถู ทง่นื 7.9 ตวอั อย่าก งการหาคาก่ เฉลยนืง่ อายใุค นชั้นอนี เรยน นด้วน ย Repeat/Until (ท่มนืง า: Sprankle, Maureen, 2012: 158) 4. โครงสรท้ร ำงแบบกทำรเพิวท่ีมลดค่คทำอขตโนมตข วิ (automatic-counter loop) โครงสรน้างการทาท งานแบบททาซีนทา้ แบบทืง่น 3 ทจืงน่ าท เสนอตอไปนน้ีเป็ปนการทาท งานทาท ซทา้ีน แบบนัอบอัตอ โนมตัอ คิ โครงสรนา้ งททาซทนา้ี แบบนน้จี ะททาการเพมิงื่ค คา่ก (increments) หรอง ลดคกา่ (decrement) ของตวอั แปรทกุค ครนี้ัอง ขอ้ันีนตอนวธคิ แน บบทาท ซ้ทนีา | 129
ททืน่ง ทาซี้ทาน ภายในโครงสราน้ งแบบทาท ซี้านท การออกแบบทาท ซท้นีาแบบนบัอ ออัตโนมตัอ คิโปรแกรมเมอร์รใชตน้ อวั แปรเปป็น นอบั (counter) ทงเ่ืน รงิมื่ค นบอั ทงืนจ่ าท นวนทรง่นื ะบคุไว้นและเพิคง่มื ตวัอ แปรในแตกล่ ะครีนัอ้งทท่นงื ทาซทนี้าการประมวลผล จาท นวน ทืง่นจะเพคิงื่มข้นขีนจะถถกู ระบุคโดยคาท สืังง่อ ชดคุ ของคทาสัืง่งอ ทอง่ืน ยใูถ่ก นททาซทาี้น แบบ Repeat/Until ตวอั นอับจะททางาน จนกวา่ก คา่ก ตอัวนอับมคน า่ก มากกวา่ก คก่าสคน้ีนิ สดุค และอาจะเปนป็ ค่กาคงทตืนง่ วัอ แปรหรงอนิคพจนรก์ ร็ได้น สทาหรับอ การทดสอบ วา่ก จะดาท เนนิค การตามคาท สัอื่งง ทาท ซทาีน้ นบอั อตอั โนมอัตคจิ ะพบทน่งจื ุคดเร่งิืมค ตน้นหรงอจดคุ ส้ีนินค สดคุ ของทาท ซนที้าขีขน้นอยูถก่กอับภาษา หรงอรคุกน่ ของภาษาโดยทวืง่ัอ ไปจะใชน้คทาภาษาอองั กฤษวา่ก for แทนการทาท ซนทาี้ แบบออัตโนมตัอ คิ รูปถ แบบของขีั้นนอ ตอนวคธิ แน บบทาท ซี้นทาแบบตอัวนับอ อตัอ โนมตัอ คิ รถูปท่งนื 7.10 ขัอน้นี ตอนวคธิ ทน าท ซนาท้ี แบบตวอั นัอบออตั โนมัตอ คิ (ท่งืมน า: Sprankle, Maureen, 2012: 159) จากรปูถ ทง่ืน 7.10 การใชว้น งเลร็บเช่งือมต่อก จุคดเรมิงืค่ ตนน้ (loop) และสคนีน้ิ สคุด (loop-end) ของขนนอ้ัี ตอนวธคิ น การแบบทาท ซี้าทน และการเยีนง้องของคทาส่งองัื เพง่ือทาท ใหน้การอก่านททาซ้นีาท ไดง้น ่าก ยขนข้นี สัอญลักอ ษณ์รของผงอั งานทใื่นง ชน้ รปูถ ทืงน่ 7.11 สอัญลกัอ ษณ์รของผอังงานทาท ซ้ีทนาแบบนอับออัตโนมตัอ ิค 130 | ขน้ีอนั ตอนวธคิ แน บบททาซา้ีนท
รูปถ ทนงื่ 7.12 ผังอ งานขนีัน้อ ตอนวคธิ น automatic-counter (ทืมงน่ า: Sprankle, Maureen, 2012: 160) ผงัอ งานในรปูถ ทื่งน 7.12 แสดงให้นเห็รนโครงสรา้น งทาท ซ้นาีท แบบตวอั นับอ อตอั โนมัอตคิ ตวัอ นอับเป็นป ตัวอ แปรทืงใ่น ช้น สาท หรับอ การนบอั begin เปนป็ ค่กาจุคดเร่มคืงิ ต้นนและ end เป็นป คก่าทส่ืงน ิค้ีนน สคดุ และ StepValue เป็นป คาก่ ทงนืต่ วอั นอับทงน่ื จะเพ่มคิืง ข้ีขนนถาน้ ไมร่ก ะบจุค ะเพ่คืิงมขีนข้นครัง้อนี ละหนขง่งื เสมอ การลดลงของ StepValue จะต้อน งมนจทานวนลบและ ค่าก begin ตอ้น งมากกว่าก end ขน้ีนัอ ตอนวธคิ แน บบทาท ซนา้ที | 131
รปถู ท่ืนง 7.13 การผัองงานตดัอ สิคนใจเทนยบเท่าก ผอังงานทาท ซน้ทาี แบบการนับอ อัตอ โนมตัอ คิ (ท่มืนง า: Sprankle, Maureen, 2012: 161) รูปถ ท่งืน 7.13 แสดงให้นเหร็นวา่ก เทยน บเท่าก การตดอั สนคิ ใจทน่งจื ะททาซีน้ทานัอบอัอตโนมตอั ิค โครงสราน้ งมนสองทางเลอง ก มนตอีง้ัน แตกก่ ารกาท หนดสถานการณ์สร องอยา่ก งเพื่งอการตดัอ สิคนใจท่ปนืง ระมวลผล ท่จนงื ุดค เรคมิงื่ ต้นน ของททาซนี้ทาหรงอทื่งน สกว่ นทาน้ ยของทาท ซทนีา้ ซงื่งข เทนยบเทก่าการตดัอ สนิค ใจทงนื่จะใชขน้ ี้นขน อยถก่กู อับภาษาหรอง รกุนค่ ของภาษา จะไมพก่ บทง้ีนัอ สอง แบบในภาษาเดยน วกนอั 132 | ข้นีอนั ตอนวธิค นแบบทาท ซีาน้ท
ขนน้ีัอ ตอนวธคิ น รหัสอ เทนยม 10: Counter = Begin 11. While Counter <= End Instruction Instruction Counter = Counter + StepValue While-end 12. Next Instruction ผองั งาน รปถู ทื่นง 7.14 ผอังงาน While/While-end เทนยบเทา่ก ผอังงานการทาท ซีนทา้ แบบนอับอตัอ โนมัตอ ิค (ทนงื่มา: Sprankle, Maureen, 2012: 162) ขนัน้ีอ ตอนวธิค นแบบททาซีน้าท | 133
ขีนัอ้นตอนวธิค น รหสอั เทนยม Counter = Begin Repeat Instruction Instruction Counter = Counter + StepValue Until Counter = End Next instruction ผังอ งาน รูถปทนงื่ 7.15 Repeat/Until เทนยบเท่กาการททาซนทา้ี แบบการนอับออัตโนมตอั ิค (ทมง่นื า: Sprankle, Maureen, 2012: 162) 134 | ขอัน้นี ตอนวธคิ แน บบททาซที้าน
รถปู ท่นงื 7.14 และ รปูถ ทน่ืง 7.15 แสดงให้นเห็นร ถขงขนี้อนั ตอนวธิค แน ละผังอ งานเทยน บเท่าก ของการทาท ซีทนา้ แบบ While/While-end และ Repeat/Until สาท หรับอ ททาซนา้ที การนอบั ออตั โนมอตั ิค โปรดทราบวา่ก ท้ังอนี ทาท ซีาทน้ เหล่าก นน้ี จาท เป็ปนตน้องมคน าท สังือง่ ตวัอ นบัอ (Counter = Counter + StepValue) และการเริคม่ืง ตนน้ ของตอัวนบัอ (Counter = Begin) การตดอั สนิค ใจสทาหรบัอ การทาท ซา้ทีน ที้นังอ สองเกน่ืงยวข้นองกัอบการใชคน้ า่ก สคีนน้ิ สุดค (While Count <= End และ Until Counter > End) การททาซนี้ทาตวัอ นบอั อัอตโนมอตั ิคจะททาคทาสองงืั่ เหล่าก นโ้นี ดยอตอั โนมตัอ ิค คทาสอ่งืัง ททา ซนาที้ While/While-end จะดทาเนคินการทดสอบทงจ่นื ุดค เริ่ืงมค ตน้นของการทาท ซีน้าท และ Repeat/Until จะดาท เนนิค การในตอนทาน้ ยบล็รอก เมงอ่ื คกา่ เร่มืงคิ ตน้น มนค่กามากกวาก่ สนี้ิคนสุดค ทจืนง่ ุดค เรคิื่มง ตนน้ ของการททาซีนท้าคาท สังอื่งทาท ซีน้าท แบบ While/While-end จะไมกด่ ทาเนิคนการใดภายในการทาท ซา้นีท ขณะทงนคื่ ทาส่งองัื การททาซนีทา้ แบบ Repeat/Until จะดทาเนคินการคาท สงงั่อื เพยน งครีอั้งน เดนยว เมองื่ รถู้นวาก่ เรืมงคิ่ ตน้นและสนคิ้ีนสุดค คก่าตวัอ นอับและจทาเป็นป ต้นองมตน ัอวนอบั ทืง่นทาท งาน ผ่าก นกลคุมก่ ของคาท สงัอ่ืง หลายครี้งอัน การใช้งน านของการทาท ซีนท้าแบบนอบั อตัอ โนมตัอ ิจค ะเหมาะทน่งจื ะนทามาใชน้ มอน ย่กกูถ ฎระเบยน บอยก่หถู ลายขน้อ เมงอื่ คอมพวิค เตอรเ์ร ร่ิงมคื ทาท การประมวลผลการททาซีนา้ท ตอวั นบอั ออตั โนมตัอ ิค กฎ ระเบนยบทม่ืงน นความเรนยบงาก่ ย และมนความสทาคญอั ทนืงผ่ นูถใ้ ชจ้น ะตนอ้ งเขน้าใจและต่กอไปนน้ีเปป็นการทดสอบวคิธกน ารแก้น ปปญั หา เมง่ือเพมิคื่ง คา่ก ตวัอ นอับจะต้อน งเขา้น ใจกฏต่อก ไปนีน้ 1. เมอง่ื คอมพวคิ เตอรด์ร าท เนินค การคาท สอง่ัืงการทาท ซนี้าท จะกทาหนดตวอั นอบั เทกา่ กัอบจทานวนจดคุ เริ่มคืง ตน้น (ดใถู น a, a1 และ a2 ในรถปู ทงนื่ 7.14 และ 7.15) 2. เมือ่ง คอมพควิ เตอรด์ร ทาเนิคนการททาซนที้าเสร็จร ส้คนินี ก็เร พงืิมค่ ค่าก ตอวั นบัอ ตอวั นอับจะเพม่ืคงิ ขนขน้ี ตอังนี้ แตเก่ งองื่ นไขปกติค กกอ่ นมกน ารประมวลผลน้นี เอกสารเล่มก นจน้ี ะถงอวา่ก กทาลงอั เพืงม่ิค ขขนีน้ ของตอัวนัอบทงนทื่ าท ซน้าที เสรจ็ร สนิน้คี (ดูถใน b, b1 , และ b2 in ในรปถู ทืง่น 7.14 และ 7.15) 3. เมอ่ืง ตวัอ นอับน้นอยกว่าก หรงอเท่าก กบัอ จาท นวนสีนนิค้ สคุด การประมวลผลยงอั คงอยกทู่ถ คืง่น ทาส่ืงงัอ ทงื่เน ป็นป ไปตามการ ทาท ซทนีา้ เมงอื่ ตวัอ นัอบมากกวา่ก จทานวนสิีน้นค สคดุ การประมวลผลยังอ คงทคื่นง าท ส่ังงือ ทเงื่น ปป็นไปตามคทาสงอ่ัืง ทาท ซ้าทนี สคินีน้ สดุค (ดูถ ใน c, c1 , และ c2 ในรูถปทืนง่ 7.14 และ 7.15) การใชนโ้ ครงสรา้น งการทาท ซา้ีทน แบบตวอั นับอ ออัตโนมอตั ิค เมงือ่ รูถต้น อีนงั้ แตกเ่ รมิ่คืง ต้นนจาท นวนครนัอ้งี ทื่ทงน าท ซทนี้าจะถถกู ดทาเนนิค การ สาท หรัอบตัอวอยาก่ ง เช่นก เมง่ือทราบจาท นวนท่นแงื น่นก อนของคนในกลุ่คกมสทาหรบัอ ปัญป หาทนืงเ่ กดคิ ขนข้ีน ของเฉลนง่ืย อายคุ ไมกค่ วรใชน้การตดัอ สิคนใจท่จนงื ะออกจากทาท ซาทน้ี นนแ้ี ละตัอดสนิค ใจทนื่จง ะไมส่ก ามารถนทามาใชเน้ พองื่ ออกจากการ ททาซีนทา้ เน่งืองจากการกระทาท เชนก่ น้นัีนอ จะตนอ้ งมนคทาส่งงัอื goto คทาสงื่งัอ goto มนแนวโน้มน ทงจื่น ะลดการนาท คาท ส่ังืงอ นนีม้ า ใชน้ หรงอมกน ารใช้นน้อน ยทนส่งื คุดเทา่ก ทนเง่ื ปปน็ ไปได้ใน นการเขยน นโปรแกรมทน่งืมโน ครงสราน้ ง หากคาท สง่ืังอ การตอัดสคนิ ใจเปน็ป ส่งงคิื ทงจ่นื าท เปน็ป แลนว้ พจคิ ารณาโดยใชห้น นืงข่งในประเภทองืน่ ของโครงสร้นางการทาท ซนาีท้ สาท หรับอ การแกนป้ ญัป หา 5. โครงสรท้ร ำงแบบทททำซทขั้ทำแบบซอ้ร น (nested loop) การททาซทา้ีน สามารถซ้อน นกนัอ เช่กนเดยน วกบัอ การตดอั สินค ใจ การทาท ซนที้าแต่กละจะต้นองซนอ้ นอยถกู่ภายในการททา ซนา้ที ดา้น นนอก กฎทงัื่วอ ไปเกืนงย่ วกบอั การททาซท้าีน เชน่ก เงอ่ืง นไขท่ืงนมกน ารประมวลผลและวธิค นการเยอนีง้ งและวงเลบร็ ทืง่นใช้น ขีนอั้นตอนวธคิ นแบบททาซาทน้ี | 135
ถอง เปปน็ ส่กวนสาท หรบัอ การททาซทานี้ ซอ้น นกอันเชน่ก เดนยวกับอ การทาท ซท้านี เดนยว การททาซนาีท้ ภายในไม่กจาท เป็ปนตนอ้ งเปน็ป ประเภทเดยน วกัอน ดงัอ เชน่ก โครงสรา้น งการททาซทนี้าแบบ While/While-end อาจจะอยดกถู่ นา้ นนอก สวก่ น Repeat/Until อาจจะอยดกูถ่ น้านนอกหรอง อยถู่กสลอบั กอนั ไดน้ While/While-end รปถู ทนง่ื 7.16 ผอังงานการทาท ซนีท้าซ้นอนกนัอ While/While-end, Repeat/Until (ทมนงื่ า: Sprankle, Maureen, 2012: 165) 136 | ขีนอั้น ตอนวธิค นแบบททาซนี้ทา
Repeat/Until รปูถ ทื่งน 7.17 ผงอั งานการททาซา้นีท ซนอ้ นกอัน Repeat/Until (ทงืมน่ า: Sprankle, Maureen, 2012: 165) ขี้อันนตอนวธคิ แน บบททาซทนี้า | 137
การททาซทา้นี แบบเพคิงมื่ คกา่ อตอั โนมอตั คิ รปูถ ทงนื่ 7.18 ผัองงานการทาท ซ้นทีาแบบนบัอ อัอตโนมตอั คิซน้อนกนัอ (ทื่มนง า: Sprankle, Maureen, 2012: 166) 138 | ขอันี้นตอนวธคิ นแบบททาซทีน้า
การททาซทนีา้ แบบเพ่ืงิมค คก่าอตัอ โนมอัติค รปูถ ทนงื่ 7.19 ผงัอ งาน Repeat/Until เทนยบเทา่ก การทาท ซท้นีาแบบนอับออัตโนมตอั คซิ น้อนกัอน (ทนื่มง า: Sprankle, Maureen, 2012: 166) ข้ีนนอั ตอนวธิค นแบบทาท ซทนี้า | 139
ตวัอ อยาก่ งของการททาซทาี้น แบบซน้อนกนัอ จะพบในรปถู ท่นงื 7.18 และ รปถู ทน่ืง 7.19 ขอใหสน้ ัองเกตวาก่ การทาท ซน้ีทาทงื่น ซอ้น นกันอ ในแตล่ก ะการททาซี้าทน จะได้ผน ลลัอพธรเ์ ดนยวกัอน เอาทพ์ร คุทสาท หรอับการททาซนา้ีท ซอ้น นกอนั ทีนัง้อ 4 แสดงไดนด้ งัอ รถปู ทงืน่ 7.20 OuterLoop InnerLoop (outer loop counter) (inner loop counter) 11 12 13 21 22 23 รถูปทงนื่ 7.20 ผลการทาท งานของการทาท ซทนี้าแบบซนอ้ นกนัอ (ทนงื่มา: Sprankle, Maureen, 2012: 163) 6. โครงสรท้ร ำงแบบกทำรทททำซทัทข้ ำแบบเวทยนเกวิด (recursion) ประเภทของโครงสราน้ งทาท ซีนทา้ อกน ชนคดิ หนืข่งง คงอ การทาท ซทา้ีน แบบเวนยนเกคิด หรอง การเรนยกซทนี้า เกดิค ข้นีนข เมงอ่ื หนกว่ ยหรอง ฟังป กรช์ ืงัอน่ จะเรนยกใช้งน านตวัอ เอง โดยมนเงอืง่ นไขท่ืงสน คินี้นสคุดการทาท ซท้ีนาต้นองอยใถู่ก นหนก่วย ขอ้ีันนตอนซทา้ีน จะถกูถ แทนทดืงน่ ้วน ยโครงสราน้ งการททาซ้ทานี เดิมค แต่ขก นี้อันตอนการเรยน กซทานี้ มัอกจะเรวร็ ขน้ีขน (Sprankle, Maureen, 2012: 169) การเรยน กซนที้า หมายถขง การสง่ืงัอ โปรแกรมทาท งานซา้ีนท ๆ โดยเรนยกตวัอ เองขนีข้น มาทาท งาน การททางานครงนอัี้ ท่งืน สองจะขีข้นน อยกู่ถกอับการททางานครอี้งนั แรก และผลลัพอ ะการททางานครีัองน้ ทืง่นสามกจ็ร ะข้ีขนน อยก่กูถ อับผลลัพอ ธ์ขร องงาน ครนัี้องทสงื่น อง (ทกัอ ษคณิ า สวนานนท์ร, 2546: 564) การเรนยกซนา้ที หมายถงข การทาท งานซทนา้ี โดยเรยน กตวัอ เองมาททางานซาีน้ท ใหมไ่ก ดอน้ กน คร้อีนงั การททางานของ ฟงัป กช์ร นัอ ทคกุ ครนังีอ้ ท่นงืมนการเรนยกซาี้นท จะตนอ้ งสกง่ คา่ก พารามเิค ตอรร์จากเดิมค ใหนม้ คน ่กาลดลงเร่ืงอย ๆ จนหมดและมนคา่ก เป็ปนศถูนยร์ (0) จงข จะยุตค คิการเรนยกซนาที้ พรอน้ มกบอั ส่งก คกา่ กลบัอ (สมจคติ น์ร ลิคขติค ถาวร, 2547: 29) สรุคป การเรนยกซีนาท้ หมายถงข การใชก้น ระบวนงานหรอง ฟัปงกช์ร ันอ ให้นททางานโดยมนการเรยน กตนเองใหนม้ า 140 | ขนอน้ีั ตอนวธิค นแบบทาท ซีทนา้
ททางานและสามารถเรยน กตนเองททาซทนา้ี คลา้น ยกอับชุคดคทาสงง่ือั แบบทาท ซาน้ีท (ประยงค์ร อป่ถูก ระเสรญคิ วงศร์, 2521: 228) เช่นก การหาคา่ก แฟกทอเรนยลของ 5 จะหาไดนจ้ าก 5! = 5 x 4 x 3 x 2 x 1 มนคกา่ เท่าก กบัอ 120 ขนนัอ้ี ตอนวคิธน รหัอสเทยน ม ผงอั งาน รูถปทงื่น 7.21 ขี้ันนอ ตอนวธิค น ผอังงานและรหัสอ เทยน ม การหาค่าก แฟกทอเรยน ล โดยใช้นหนว่ก ย (ทนง่ืมา: Sprankle, Maureen, 2012: 170) ขัอนน้ี ตอนวธิค แน บบททาซา้ทนี | 141
รปูถ ทง่ืน 7.21 เปป็นตอัวอยาก่ งของฟงัป ก์รชอันเวนยนเกิดค ทน่ืงคาท นวณจาท นวนแฟกทอเรยน ล เชกน่ 5! (5! = 5 * 4 * 3 * 2 * 1) ขอใหส้น งัอ เกตวก่าตวัอ เลขเชคิงตวัอ ประกอบ (N) ยงอั คงเรนยกตวัอ เองจน N = 1 จะตอน้ งมนวธคิ ทน งน่ืจะหยุดค การเรยน กซา้ีนท ดูรถ ปูถ ท่งนื 7.22 สทาหรบอั การดาท เนินค การของปญปั หานนี้ทนง่ื N = 4 ขนี้อันตอนวธิค น รหอัสเทนยม ผอังงาน รปูถ ทงน่ื 7.22 ขัอี้นน ตอนวธคิ น ผงัอ งาน รหอสั เทยน ม การหาคา่ก แฟกทรอเรยน ล โดยใชฟน้ ปงั กชร์ อนั (ทืมงน่ า: Sprankle, Maureen, 2012: 170) 142 | ขอีัน้น ตอนวธคิ แน บบททาซาี้ทน
รปูถ ท่ืนง 7.23 แสดงการดทาเนินค การเรยน กซีานท้ (ทม่ืงน า: Sprankle, Maureen, 2012: 172) 7. สรุปร ขีน้นัอ ตอนวคธิ นการททางานแบบททาซี้านท เป็ปนขีอ้นนั ตอนวธิค ทน ง่มืน นความสาท คัญอ มากในขอันี้นตอนการแกป้น ปัญหาดวน้ ย คอมพวคิ เตอร์ร กระบวนการทาท ซีา้ทน จะชก่วยใหน้การพัอฒนขีนั้นอ ต้อน นวคิธนไดนง้ า่ก ยขน้ีขน การทาท ซทนี้าจะมอน ยถ่กู 3 แบบ ดงัอ นนี้ While/While-end, Repeat/Until และแบบเพ่ืคมิง ลดคา่ก อตอั โนมตัอ ิค ขอนี้ันตอนวคิธทน ทาซทนีา้ แบบ While/While-end และ Repeat/Until สามารถนทาไปใชกน้ ัอบการทาท ซา้ทนี ท่งนืไมร่ก ถจูน้ ทานวนการทาท ซนี้าท ขันนี้อ ตอนวธคิ นแบบททาซีทน้า | 143
หรอง รจถู้น ทานวนททาซีนท้าได้นเชน่ก เดยน วกอนั ขนขนี้ อยถก่กู บัอ ความตน้องการของผูใน้ถ ช้น เงงื่อนไขทนใ่ืง ชน้ตรวจสอบเปนป็ ไดน้ทีนอัง้ คา่ก คงทนงื่ ตวอั แปรหรอง นพิค จน์ร สวก่ นการทาท ซาทนี้ แบบเพงิค่ืมลดคา่ก อตัอ โนมตอั นนี้นอั ตวอั ควบคคมุ การททาซทีา้น สามารถเปป็นได้น ทีอง้นั ตวอั เลขจทานวนเต็รมทนองื่ ย่กูถรปูถ ของตอัวแปรหรงอนิคพนจไ์ร ดแ้น ละยอังสรน้างการทาท ซ้ทนาี ททืงน่ ทางานซ้นอนกัอนไดน้ นอกการททางานแบบทาท ซาทนี้ สามารถแก้ปน ัญป หาไดหน้ ลายรปูถ แบบ ตงนั้ีอ แต่งก านทนงื่ไมมก่ นความซอับซนอ้ นจนถงข แก้นปญปั หาท่คนงื วามซบอั ซอน้ นมากทนง่มื นลอักษณะการเลอง การทาท งานซาีน้ท เรยน กตนเอง เชกน่ การคาก่ แฟกทอเรนยล 8. คททำถทำมทร้ทำยบท 1. ให้นเขนยนชคุดคทาสืงัอ่งการททางานแบบททาซทา้ีน โดยการเพคิงม่ื ค่กาครีนัอง้ ละ 1 2. ใหเ้น ขยน นชุคดคทาสง่ืงัอ หาผลรวมของเลข 1 ถขง 1000 รวมหาผลเฉพาะเลขคกู่ถ 3. ให้นเขนยนชคุดคทาส่งังอื นอับตอวั เลขคนจงื่ ากเลข 1 ถขง 1000 4. ใหเ้น ขยน นชุดค คทาสง่ืงัอ ทาท ซาี้ทน โดยการลดคร้งีนัอ 2 5. ใหน้เขยน นโปรแกรมแสดงเลขยกกาท ลงอั 2 ของตวอั เลขจาก 1 ถงข 50 144 | ขนอัน้ี ตอนวธิค แน บบททาซทน้ีา
เอกสทำรอท้ร ำงองิว ขนิคษฐา นามน. (2548). โครงสร้รทำงขร้อมลมู และขนขั้ ตอนววิธท. กรคงุ เทพฯ: ไอดนซน อินค โฟ ดิคสทรคิบควิ ต์ร เซ็รนเตอรร์. ประยงค์ร อถูกป่ ระเสริญค วงศร์. (2521). กทำรเขยท นภทำษทำ Object pascal. กรคุงเทพฯ. ซอัคเซส มเน ดยน . สมจิคตต์ร ลคขิ ติค ถาวร. (2547). โครงสร้รทำงขร้อมูมลและกทำรวิวเครทำะหห์ขขน้ั ตอนววิธดท ว้ร ยซท (พวิมพห์ครขงั้ ท่ีท 1). กรงุค เทพฯ: บริษค ัอท ธนาเพรส จทากดัอ . โอภาส เอย่ืนง มสิคริควงคร์. (2557). วทวิ ยทำกทำรคอมพิววเตอรแ์ห ละเทคโนโลยสท ทำรสนเทศ (ฉบบข ปรขบปรรุงเพวิ่มที เติวม). กรุคงเทพฯ: ซนเอด็ร ยเถู คชัอง่ืน จาท กดัอ . Dierbach, Charies. (2013). Introduction to Computer Science Using Python: A Computational Problem-Solving Focus. USA: John Wiley & Sons,Inc. Sprankle, Maureen. (2012). Problem solving and programming concepts. USA: Pearson Education Inc. Stalling,William. (2013). Computer Organization and Architecture Designing for Performance Ninth Edition. USA: Prentice Hall. ข้ีนนัอ ตอนวธคิ แน บบทาท ซน้าีท | 145
แผนบริรหารการสอนประจจาบททที่ 8 ขอข้ ผิรดพลาดและการแก้ขไข เวลาเรยท น 3 คาบ หหัวข้ขอเนอนื้ หาประจจาบท 1. การแปลโปรแกรม 2. ชนิดน ของข้ขอผินดพลาด 2.1 ขข้อผดิน พลาดทางไวยากรณณ 2.2 ข้อข ผดิน พลาดเมม่อื ททางาน 2.3 ข้อข ผดิน พลาดทางตรรกะ วัตห ถปุถ ระสงคค์เชริงพฤตรกิ รรม 1. บอกชนินดของขข้อผดิน พลาดได้ข 2. อธบิน ายลักล ษณะขอ้ข ผินดพลาดรรูปแบบต่าต ง ๆ ได้ข 3. บอกขัล้ขนตอนการแปลภาษาคอมพิวน เตอรณได้ข 4. บอกข้ขัลนตอนการตรวจสอบขอข้ ผิดน พลาดของโปรแกรมได้ข วริธทสอนและกิจร กรรมการเรทยนการสอน 1. บรรยายเน้อัขม หาในแต่ตละหลวั ข้ขอ พร้ขอมยกตลวั อยา่ต งประกอบ 2. ศึศกษาจากเอกสารประกอบการสอน 3. ผู้ขรสอนสรปุร เนอมัข้ หา 4. ททาแบบฝึฝกหดัล เพอม่ื ทบทวนบทเรียร น 5. ผ้รูขเรยรี นถามขอ้ข สงสัยล 147
6. ผรสู้ข อนททาการซกัล ถาม สน่ีทอการเรทยนการสอน 1. เอกสารประกอบการสอนประจาท บททีรื่ม 8 2. ภาพเล่ืมอน 3. เคร่มอื งคอมพนิวเตอรณ การวดัห และการประเมรินผล 1. ประเมินนจากการซกลั ถามในช้นลัข เรรียน 2. ประเมินนจากการทาท แบบฝกฝึ หลัดทบทวนท้าข ยบทเรียร น 3. ประเมินนจากความรว่ต มมอม และความรลบั ผนิดชอบตอต่ การเรรยี น 148
บททที่ 8 ขข้อผผิดพลาดและการแกไ้ข ข ภาษาคอมพวิพ เตอรรท์ มที่ ทอยย่หู ลายภาษาในปจปั จจบุ ันบ แตูยล่ ะภาษากก็มทความแตกตู่าย งกบันในหลายลกบั ษณะ ดับงนัน้บนเมี่ทมอเราพบัฒนาขบน้ันตอนวิพธทและโปรแกรมตามโครงสรร้างของภาษาทท่ีเราเลมอกใช้รในการโปรแกรม แล้รว จะตร้องททาการแปลภาษาที่ทเขทยนขันข้นดร้วยตับวแปลภาษาท่ีทเราเลมอกใช้รให้รถยกต้รอง กระบวนการแปล ภาษาก็กจะเรีพท่ิมจากแปลตามโครงสรร้างของภาษานบ้ันน ๆ ท่ีทเรทยกว่ยูารยปแบบของภาษาไวยากรณร์วยู่า โปรแกรมทที่เขทยนขขัน้นนนับ้นถยกต้รองตามหลับกภาษานนับ้นหรมอไมยู่ ถร้าไม่ยูถยกตร้องกก็จะทาท การหยจุดแลร้วใหร้ผยร้เขทยน แก้รไขให้รถยกต้รอง แลร้วเรทิี่พมกระบวนการแปลภาษาใหมู่ย หากผลการแปลภาษาตามหลับกไวยากรณร์ไมู่ยมทขร้อ ผพิดพลาดก็กจะเกก็บผลการแปลนัน้บนไว้รใชร้งานภายหลบัง หรมอ ประมวลผลผลการแปลนบนั้นทับนททขข้ันนอยยู่กบับ ความต้รองการของผย้ใร ชร้ ดบังนบ้ันนการตรวจสอบขร้อผิพดพลาดจขงเป็ปนอทกขบัน้นตอนหนข่ีทงในทที่มทความสาท คบัญในการเขทยนโปรแกรม ภาษาคอมพวพิ เตอร์ร เพราะผลลพับ ธ์จร ะไดห้ร รอม ไม่ยูไดขร้ ขนั้น อย่ยูกบับการตรวจสอบนั้เนท ป็ปนสทาคบัญ 1. การแปลโปรแกรม (program translation) หนูย่วยประมวลผลการกลาง ถยกออกแบบมาเพมท่ีอตทความและดทาเนิพนการเฉพาะชุจดคทาสบัที่งท่ทีแสดงใน รยปแบบของไบนารท (เลขฐานสอง ประกอบดว้ร ยเลข 1 และเลข 0) เรยท กวยู่ารหบัสเคร่ีมทอง รหับสเครท่ีมองใด ๆ จะสามารถประมวลผลไดร้เฉพาะหนู่ยวยประมวลผลกลางเฉพาะรูจุ่ยนนนั้บนเทูย่านนับ้น (Charies Dierbach, 2013: 15) รปย ทีท่ 8.1 การประมวลผลตามรหสบั เครอม่ีท ง (ทมที่ า : Dierbach, Charies, 2013: 15) ขอ้ร ผพดิ พลาดและการแกไ้ร ข | 149
การเขยท นโปรแกรมในระดับบตาท่ี เป็ปนทีท่นยู่าเบมีท่อและผิพดพลาดได้รง่ยาู ย ดับงนั้บนนโปรแกรมสยู่วนใหญู่ยจะเขทยน ในภาษาระดบับ สยง การเขทยนโปรแกรมภาษาเช่ยูน ไพธอน แตยู่การเขทยนคทาสีทั่บงของโปรแกรมดับงกลยู่าวไมู่ยได้ร อยยู่ในรหับสภาษาเคร่ทมีองทีท่หน่ยูวยประมวลผลกลางจะสามารถดาท เนพินการไดร้ จะตร้องใช้รตับวแปลซขีท่งมทอยยู่ 3 ประเภท โดยใช้ตร วบั ใดตบวั หนงทขี่ ในการแปลและนาท โปรแกรมทที่แปลเรยท บรร้อยแล้รวเขร้าสยู่หนู่ยวยประมวลผลก ลางเพทอม่ี ดาท เนนิพ งานตามคาท สีทับ่ง 1. แอสเซมเบลอ (assembler) หมายถขง โปรแกรมที่ททาท หน้ราทที่แปลจากภาษาแอสเซมบลทเปป็น ภาษาเครทมี่อง ซทีข่งทาท ใหร้คอมพวิพ เตอรร์อา่ยู นแลว้ร เขาร้ ใจและปฏิพบัตบ งิพ านได้ร (ทกบั ษณพิ า สวนานนท์ร, 2546: 39) 2. คอมไพเลอร์ร (compiler) จะเป็ปนตวบั แปลภาษาระดับบสยง จะใช้รวิพธทแปลโปรแกรมท้บนังโปรแกรมให้ร เปป็นออบเจคโค้รด (object code) กอยู่ นทที่จะสามารถนาท ไปทาท งานเชูย่นเดทยวกบับแอสแซมเบลอ ออบเจค โคด้ร ท่ีทได้รจากการแปลนั้นบนสามารถจับดเก็กบไว้รเป็นป แฟ้ฟมข้รอมยล เพีทม่อใหร้นาท ไปใชร้ในการททางานเมทมี่อใดกก็ได้รตาม ต้รองการ ซขที่งเป็ปนขร้อดทของคอมไพเลอรร์ทที่จะนาท ผลทท่ีไดร้จากการแปลนบ้นันไปใช้รงานก่ีทครั้นบงก็กไดร้ไมู่ยจาท กับด ไมยู่ ตร้องเสทยเวลาในการแปลใหมู่ยทจุกครั้นบง โดยสามารถแปลและเก็กบไวร้เปป็น ออบเจคโคร้ดหลาย ๆ ไฟล์ร ใน กรณททท่ีเขทยนไว้รเปป็นมอดยลย่ยูอย เมที่มอจะนาท ไปใช้รงานจะตร้องทาท การลพิงก์ร ออบเจคโค้รดเหลยู่านนบั้นเขร้าดร้วยกับน จะไดร้ไฟลร์ทที่คอมพวิพ เตอรร์สามารถประมวลผลได้ทร ับนทท คอมไพเลอรร์ หมายถขง แปลโปรแกรมทท่ีเขทยนด้รวยภาษาแนวมนุจษย์ร ภาษาใดภาษาหนีข่ทง ซ่ทขีงเป็ปน ภาษาท่ีทคอมพิพวเตอร์รไม่ยูเข้ราใจใหร้เป็ปนภาษาเครีท่มองและเป็ปนภาษาท่ทีคอมพิพวเตอรร์เข้ราใจ การแปลนันบ้นจะ อยู่านโปรแกรมทั้บนงหมดแลร้วจะลงมมอแปล เม่มทีอเขร้าใจแล้รวคอมพิพวเตอรร์จะปฏิพบบัตพิตามคทาสี่ทับงในโปรแกรม (ทกบั ษณิพ า สวนานนทร์, 2546: 127) รยปทที่ 8.2 การดาท เนิพนการโปรแกรมตามการใชร้การแปลคอมไพเลอรร์ (ททมี่ า : Dierbach, Charies, 2013: 15) 150 | ขร้อผิดพ พลาดและการแกร้ไข
โดยระหวู่ยางการแปลโปรแกรมจากต้รนฉบับบ (source code) นนันบ้ ตบวั แปลจะตรวจสอบตามหลกบั ไวย์ร กรณ์ร (syntax) เทู่ยานันบ้น หากทาท การลิพงกร์ตบัวลพิงกร์ก็กจะนทาไฟล์ทร ่ีทออบเจคโคร้ดมารวมกับน กก็จะตรวจสอบอทก วา่ยู มคท ทาสังบ หรอม ฟัปงกรภ์ ายในนอกทีท่นพยิ ามไวห้ร รอม ไม่ยู ถรา้ มกท กจ็ ะทาท การลงิพ กแร์ ต่ยูถ้าร ไมก่ยู ็กจะแจ้งร ข้อร ความผิพดพลาด เพีม่ทอใหร้แก้รไขไฟล์รโปรแกรมต้รนฉบบับใหมู่ย และเริพที่มตร้นกระบวนการใหมยู่อทกครัน้บง ดบังรยปทท่ี 8.3 (โอภาส เอทย่ี มสิรพ พิวงคร์, 2557: 442) รปย ทที่ 8.3 ผงบั ลาท ดบับ งานการแปล แบบอิพนเทอรพ์ร รทเตอรร์ (ทม่ีท า: นพิพ ล สับงสทจุ ธิพ, 2558) ขรอ้ ผิพดพลาดและการแกไ้ร ข | 151 |
ขบน้ัน ตอนวธพิ ทการแปลไฟล์รตรน้ ฉบบับ เปนป็ ภาษาเครมทอ่ี งดว้ร ยคอมไพลร์เลอร์ร ขบัน้นตอนท่ีท 1 เขทยนโปรแกรมภาษาคอมพวพิ เตอรร์ ขบัน้นตอนทีท่ 2 แปลด้วร ยตบัวแปลภาษาคอมพิวพ เตอรร์ ขน้ันบ ตอนท่ีท 3 ถา้ร มขท ้รอผิพดพลาดหรอม ไมยู่ 3.1 ถา้ร มทขรอ้ ผดิพ ลาด แกไ้ร ขต้นร ฉบบับโปรแกรมในขับน้นตอนทที่ 1 3.2 ถา้ร ไมูยม่ ขท ร้อผพดิ พลาดใหรท้ ทาขน้นับ ตอนทที่ 4 ขน้ันบ ตอนทที่ 4 สรา้ร งออบเจคไฟลร์ ขั้นบน ตอนทท่ี 5 สนันพิ้ สุจดกระบวนการ 3. อิพนเตอรพ์ร รทเตอรร์ (interpreter) เปปน็ ตวับ แปลภาษาระดับบสยงไปเป็ปนภาษาเคร่มทีองเชู่ยนเดทยวกบับคอม ไพลร์เลอร์ร โดยใช้รหลบักการแปลพร้รอมกบับงานตามคทาสัีท่บงททละบรรทับดตลอดทบน้ังโปรแกรมทาท ให้รการแก้รไข โปรแกรมททาได้รงยู่ายและรวดเรก็วแตยู่ออบเจคโคดที่ทไดร้จากการแปลโดยการใช้รอพินเตอร์รพรทเตอร์รน้บันนไมู่ย สามารถเกก็บไวร้ใชร้ใหมยู่ไดร้จะจะต้รองแปลโปรแกรมใหมยู่ทุจกครับ้นงทที่ตร้องการใชร้งาน (ทับกษิพณา สวนานนท์ร, 2546: 187) การแปลแบบนน้ัจท ะแปลและประมวลผลคาท สัที่งบ บนหนวู่ย ยประมวลผลกลาง ดงบั รปย ทที่ 8.4 รปย ทที่ 8.4 การดาท เนพินการโปรแกรมตามการใชตร้ วับ แปรแบบอพินเทอรพ์ร รเท ตอรร์ (ท่ีทมา : Dierbach, Charies, 2013: 16) 152 | ขร้อผพดิ พลาดและการแกไ้ร ข
รปย ทที่ 8.5 ขบัน้นตอนการแปลภาษาคอมพวพิ เตอร์ร แบบอพนิ เทอรพร์ รทเตอรร์ (ทที่มา: นพพิ ล สับงสทุจ ธิพ, 2558) ขอร้ ผิพดพลาดและการแกร้ไข | 153 |
ข้นับนตอนวธิพ กท ารแปลไฟล์ตร น้ร ฉบับบเปนป็ ภาษาเครท่มอี งด้รวยอนิพ เทอรพ์ร รทเตอรร์ ขันบ้นตอนทท่ี 1 เขทยนโปรแกรมภาษาคอมพพิวเตอร์ร ขนั้บนตอนที่ท 2 แปลดรว้ ยตบวั แปลภาษาคอมพวพิ เตอรร์ ขบั้นนตอนทที่ 3 ถาร้ มทขอ้ร ผิพดพลาดหรอม ไม่ยู 3.1 ถา้ร มทขอ้ร ผดพิ ลาด แกไ้ร ขตนร้ ฉบับบโปรแกรมในขบั้นนตอนท่ที 1 3.2 ถร้าไมมู่ย ทขอร้ ผพิดพลาดใหท้ร ทาขับน้น ตอนทที่ 4 ขน้ันบ ตอนที่ท 4 ปฏบิพ ัตบ ิพการตามคทาสทงบีั่ ที่แท ปลไดร้ ขบัน้นตอนท่ีท 5 สนนิพั้ สุจดกระบวนการ ตารางทท่ี 8.1 ขอร้ เปรยท บเทยท บ ระหวาู่ย งแอสแซมเบลอ อิพนเตอรพร์ รทเตอร์ร และ คอมไพเลอร์ร แอสแซมเบลอ อินพ เตอรพ์ร รทเตอรร์ คอมไพลเลอร์ร แปลคาท สี่บัทงจนหมดโปรแกรมแลว้ร แปลท่ทลี ะคทาสบัทีง่ และ ททางานตาม แปลคทาสงัทบี่ จนหมดโปรแกรมแลรว้ จขงทาท ตามคทาส่บังีท โปรแกรม คาท สบท่งัี น้นนับ ทันบ ทท จขงททาตามคาท สบัที่งโปรแกรม ใชรเ้ นอน้ัม ททหี่ นู่ยวยความจาท นรอ้ ย ใชเร้ น้อัมน ทีท่หน่วยู ยความจทานอร้ ย ใชเร้ นมนัอ้ ทที่หนยู่วยความจทามาก การทาท งานเปน็ป วงรอบจะมท การททางานเป็นป วงรอบจะทาท งาน การทาท งานเปนป็ วงรอบ จะ ความเรว็ก มากเพราะคทาสีบทง่ั ใกล้ร ชา้ร เพราะตอ้ร งแปลคาท ส่ทบีงั ซั้ทนา ๆ ทาท งานไดเร้ รก็ว เพราะนทาเอา เคยท งกบับภาษาเครมที่อง object code ไปใชงร้ านแทน การแปลใหมยู่ การแก้รไขโปรแกรมทาท ได้ยร าก การแกไร้ ขโปรแกรมททาไดรง้ ายู่ ย การแกไ้ร ขโปรแกรมททาไดย้ร าก เพราะเมทีมอ่ แกรไ้ ขเสรกจ็ จะต้รองแปล เพราะเมมอ่ีท แก้รไขเสรจ็ก จะตร้องแปล ใหมทู่ย ง้ับน หมด ใหมยทู่ ง้ันบ หมด มทเฉพาะภาษาแอสแซมบลท ใชร้ได้กร ับบภาษา เบสิพก ไพธอน ใชร้ไดกร้ ับบ ภาษา เทูย่านนั้บน c,c+,java,pascal การเขทยนโปรแกรมดร้วยภาษาระดบับสยงนอกจากจะใหร้ความสะดวกแกูย่ผย้รเขทยนแล้รว ยบังสามารถ นาท โปรแกรมทท่ีเขทยนนนท้ัไปใช้รงานบนเครท่ีมองใดก็กไดร้ เพทยงแตู่ยต้รองททาการแปลโปรแกรมใหมูย่เทู่ยานนับ้น หรมอไม่ยู ตร้องแปลใหมู่ยก็กขขนั้นอยยู่กับบระบบปฏพิบบัตพิการ และในปัปจจุจบบันมทบางภาษาที่ทไมยู่ตร้องแปลคาท ส่บัีทงใหมู่ย แม้รวยู่า ระบบฮารร์ดแวร์ร หรมอ ระบบปฏพิบับติพการทที่แตกตยู่างกับนกก็สามารถใช้รได้ร แตยู่อยูย่างไรกก็ตามภาษาเครทมี่องทที่ได้ร จากการแปลภาษาชับ้นนสยงนนัท้อาจจะไมู่ยมทประสพิทธิพภาพเทยู่ากบับการเขทยนดร้วยภาษาเคร่ทมีองหรมอภาษาแอส แซมบลโท ดยตรง 154 | ขอร้ ผดพิ พลาดและการแกร้ไข
2. ชนผดิ ของขข้อผิผดพลาด (errors type) ข้รอผิพดพลาดไวยากรณ์รกับบขร้อผพิดพลาดทางความหมาย (syntax error or Semantic error) การ หาขร้อผิพดพลาดโปรแกรม (debug) เป็ปนวพิธกท ารหาข้รอผพิดพลาดไวยากรณ์รกับบการแกร้จุจดบกพรูย่องของข้รอ ผิพดของโปรแกรมคอมพพิวเตอรร์ กระบวนการของการคร้นหาและแกร้ไขข้รอผพิดพลาด หรมอขร้อบกพรยู่อง ใน โปรแกรมคอมพพิวเตอร์ร ขร้อผพิดพลาดในการเขทยนโปรแกรมเป็ปนสิีพ่ทงท่ทีหลทกเลที่ยงในระหวยู่างการพับฒนา โปรแกรม ข้รอผพิดพลาดไวยากรณ์ร (syntax errors) ทท่ีเกพิดจากการทท่ีไมู่ยถยกต้รองตามหลบักไวยากรณร์ของ ภาษานับ้นน ๆ (ตับวอยู่ยางเช่ยูน คทาสทีับ่ง prnt แทนท่ทีจะเขทยนคทาสท่ีบังเป็ปน print) แต่ยูตับวแปลภาษาไมยู่สามารถ เขร้าใจคาท สทับ่ีงทท่ีมทขร้อผิพดพลาดไวยากรณร์ การแปลยู่จะยจุตพิเม่ีทมอพบขร้อผิพดพลาดดบังกลยู่าวแสดงใหร้เห็กนใน โปรแกรมท่เีท กดพิ ปญปั หาขันข้น (Dierbach, Charies, 2013: 16) ดทบบ๊ัค (debug) หมายถขง การขจบัดปปัญหาและจุจดบกพรูย่องตู่ยาง ๆ ในโปรแกรมให้รหมดไปกู่ยอนทที่จะ นาท โปรแกรมนบันน้ ไปใช้รงาน (ทกบั ษิพณา สวนานนทร์, 2546 :176) ในทางตรงกบันข้าร มขร้อผพิดพลาดทางความหมาย (semantic errors) โดยทว่บัีท ไปเรทยกวู่ยาขร้อผพิดพลาด ตรรกะ ข้รอผพิดพลาดในโปรแกรมทางตรรกะ ขร้อผิพดพลาดดบังกลู่ยาวไม่ยูสามารถตรวจพบได้รโดยอบัตโนมบัติพ เนที่มองจากไม่ยูสามารถแปลและเขร้าใจเจตนาของการคาท นวณทีทก่ าท หนด ตับวอยยู่างเชูย่นถร้าโปรแกรมคาท นวณ คูยา่ เฉล่ยที ของสามตวบั เลขดงับ ตยู่อไปนทน้ั (num1 + num2 + num3) / d ตวับ แปลจะไมยู่มททางตรวจสอบได้รเลยวู่ยาตบัวหารท่ีทเปป็นตับวแปร d นท้ันจะมทคูา่ย เทยู่ากบับตบัวเลขอะไรจนกวู่ยา โปรแกรมจะได้รถกย นาท ไปดาท เนิพนการ และในระหวู่ยางดทาเนิพนการเลขทท่ีอย่ยูในตับวแปร d มทคา่ยู อะไรก็กได้รท่ทีไม ใชู่ย 0 การดทาเนพินการก็จก ะไมู่มย ทข้รอผพิดพลาดแตู่ยถรา้ ตวับ เลขททอี่ ยใูย่ นตับวแปร d มทคยู่าเปนป็ 0 ตวบั เลขนทั้นจะถมอวยาู่ มท ข้รอผิพดพลาดอยู่ยางรร้ายแรงในหนู่ยวยประมวลผลกลางและอาจจะทาท ให้รการดาท เนิพนการในขณะน้ับนนหยุจด ดาท เนพินการได้รทบันทท งานแกร้จุจดบกพรูย่องไมู่ยได้รถมอวยู่าเป็ปนงานเลร้ก ๆ แตยู่ถมอวยู่าเป็ปนงานทท่ีใหญและใช้รเวลา มากในการพบัฒนาโปรแกรม ข้อร ผพิดพลาดและการแก้รไข | 155 |
รยปทที่ 8.6 ขนันบ้ ตอนข้รอผพิดพลาดพน้นมั ฐานของการแกร้ไขปัญป หาดว้ร ยคอมพวพิ เตอร์ร (ททมี่ า: Franklin, Manoj, 2007: 12) ข้รอผดพิ พลาดท่ทเี กดิพ จากการเขทยนโปรแกรม มท 3 ชนพิด 1. ขร้อผพิดพลาดทางไวยากรณ์ร (syntax error) เกพิดเนท่ีมองจากเขทยนคาท สท่ีับงของภาษาไม่ยูถยกตามหลับก ไวยากรณ์ร ข้รอผพิดพลาดนทัน้โปรแกรมจะหยจุดการทาท งาน พบไดร้ในชู่ยวงแปลโปรแกรม (compile time) โดยภาษาคอมพิพวเตอร์รแตู่ยละชนพิดจะมทโครงสร้รางทางไวยากรณร์ไมู่ยเหมมอนกบัน แตู่ยบางภาษาอาจจะมท ลับกษณะทคี่ท ลา้ร ยกับนมาก เราสามารถศกข ษาได้จร ากคยู่มมอของภาษาทีท่เราเลอม กมาเขทยน ขอ้ร ผิดพ พลาดทางไวยากรณร์ หมายถขง ขร้อความทที่เขทยนใชรภ้ าษาไม่ถยู กย ตอ้ร งตามกฏไวยากรณขร์ องภาษา ทีท่ใชร้ในการเขทยนโปรแกรมแตยู่ละภาษาจะมทกฏเกณฑ์รไวยากรณ์รท่ีทไมยู่เหมมอนกบัน (ทบักษิพณา สวนานนทร์, 2546: 636) 156 | ขอ้ร ผพดิ พลาดและการแกร้ไข
ลกบั ษณะข้รอผิดพ พลาดทางไวยากรณร์ 1. เขยท นคทาสังบที่ ไมย่ถู ยกต้อร ง (command not found) 2. ใชต้ร บัวแปลผพิดประเภท (type mismatch) 3. ไมรยู่ จ้รย ับกชนดิพ ของตวับ แปร (unknown variable หรมอ unknown identifier) ขร้อผพิดพลาดทางไวยากรณ์รทท่ีมบักจะนาท มาใชร้ผิพดอยู่ยเป็ปนประจาท ได้รแกยู่ เครมี่ทองหมายเทยู่ากับบ (=) ทที่ใชร้ สทาหรับบตรวจสอบเงมท่ีอนไข กับบเครีมท่องหมายเทู่ยากับบทที่ใชร้สาท หรับบการให้รค่ยูา โปรแกรมภาษาแต่ยูละภาษาจะ ใช้รงานไมู่เย หมอม นกนบั ทกุจ ภาษา แตโยู่ ดยสู่วย นใหญ่ยูแล้วร จะคล้ราย ๆ กนับ ดับงแสดงในตารางทท่ี 8.2 ตารางทที่ 8.2 เครม่อที งหมายเปรทยบเทยท บในภาษาคอมพพวิ เตอร์ร ภาษา สญับ ลบกั ษณร์ที่ทใชรเ้ ปรยท บเทยท บเงี่อมท นไขเทูยา่ กบับ ตวับ อยา่ยู ง c, c++, java, c#, php == if (a == b) a=b pascal, basic = if (a = b) then a := b จากตารางทท่ี 8.2 จะพบวู่ยามทเครีท่มองเท่ยูากบับอยยู่ 2 ลับกษณะทที่ใช้รงานในโปรแกรมภาษาคอมพพิวเตอร์ร โดยตรวจสอบการเทยู่ากบันจะใช้รเคร่ีทมองหมาย (==) เพ่ีมทอตรวจสอบการเท่ยูากับบของขร้อมยล ภาษา คอมพพิวเตอร์รสยู่วนใหญู่ยจะใช้รเครม่ทีองหมายนันท้ สยู่วนเครีทม่องหมาย (=) ก็กจะททางานเชยู่นเดทยวกับนแตยู่จะใชร้ สทาหรบับภาษาปาสคาล หรมอ เบสพิก เปป็นตร้น เมีทม่อเครมท่ีองหมายตรวจสอบคยู่าทที่มทความหมายแตกตู่ยางกับน และเมอม่ที นาท มาใชร้กกจ็ ะตอ้ร งศขกษาตามคย่มู อม ของภาษานบนัน้ ๆ อกท ครนงับ้ การกทาหนดให้รแกยู่ตับวแปรก็กจะใชร้เคร่มทีองหมายทีท่มทลับกษณะทีท่เหมมอนกับนการเปรทยบเททยบ โดยใช้ร เคร่ีทมองหมายเทู่ยากับบ ภาษาคอมพพิวเตอรร์โดยส่ยูวนใหญูย่จะใช้รเครีมท่องหมายเทยู่ากับบ (=) เพที่มอกทาหนดให้รแกยู่ ตบัวแปรทท่ีตร้องการ จะมทเพทยงภาษาปาสคาลทที่การกาท หนดคยู่าใหร้แกู่ยตับวแปรจะใช้รเคร่มทีอง (:=) เปป็นการ กาท หนดคา่ยู ใหแ้ร กตยู่ วับ แปรทตที่ ้อร งการ ดงับ แสดงตารางทีท่ 8.3 ขร้อผพดิ พลาดและการแก้ไร ข | 157 |
ตารางทีท่ 8.3 เคร่อมีท งหมายการใหรค้ าูย่ แกตูย่ บวั แปรในภาษาคอมพวิพ เตอรร์ ภาษา สบญั ลกับ ษณ์ทร ที่ใชใ้ร หค้ร าู่ย แก่ตยู วับ แปร ตวบั อยยูา่ ง a = 20 c, c++, java, c#, php, basic = a := 20 pascal := (โคคอลและเท่าูย กับบ) 2. ข้รอผิพดพลาดเมมที่อมทการทาท งาน (runtime error) หรมอเรทยกอทกอยยู่าง คมอ ขร้อผพิดลาดทางอิพนพุจต/ เอาต์ร เกิพดจากวิพธทการเขทยนโปรแกรม เช่ยูน การหารด้รวยศยนย์ร ชนิพดข้รอมยลไม่ยูถยกตร้อง พบไดร้ในชยู่วงการ ปฎพิบับติพงานโปรแกรม (execution time) ขร้อผพิดพลาดนทั้นโปรแกรมจะหยจุดการปฏพิบับติพการ บางเป็ปนขร้อ ผพิดพลาดท่ีทเกิพดจากการปฟ้อนขร้อมยลเขร้าของผรย้ใชร้ จขงทาท ใหร้ได้รผลลับพธ์รไม่ยูถยกต้รองกับบความต้รองการ ความ ผิพดพลาดทท่ีเกพิดจากการทาท งานแบ่ยงู เปนป็ หัวบ ขร้อตูย่าง ๆ ดงับ นท้นั 1. การเรยท กใชฟร้ งัป ก์รชับนทที่ไมมูย่ อท ยยจู่ ริงพ 2. การเรทยกใชรไ้ ฟลทร์ ีท่ไมู่มย ทอยจู่ย รพิง 3. การตรวจสอบการรบับขร้อมยลท่ีทผพิดพลาด 4. หนวยู่ ยความจาท ไมยูเ่ พยท งพอ (out of memory) 5. เกดพิ การหารดว้ร ย 0 (divide by zero) 6. ระบบปฏพิบัตบ ิกพ ารไมรู่ย องรบับ หรอม ไมยู่สามารถใช้รไดกร้ ับบระบบปฏพิบัตบ กิพ ารนนัท้ 7. ชนดพิ ของหนยูว่ ยประมวลผลกลางไมรยู่ องรบับ 8. ชนดพิ ของหนวู่ย ยแสดงผลไมรยู่ องรับบ 9. อจุปกรณรต์ ยู่อพวงไมพูย่ ร้รอมทาท งาน ภาษาคอมพพวิ เตอร์รในปัปจจจุบบัน มคท ทาสับ่ทีงททีอ่ าท นวยความสะดวกในการเขทยนโปรแกรมเกท่ียวกับบข้รอ ผิพดพลาดขณะประมวลผลไดร้ให้รใช้รงาน เพที่มอไมูย่ให้รโปรแกรมหยุจดการประมวลผลท่ีทอาจจะสู่ยงผลเสทยใน การททางานไดร้ โดยขร้อผพิดพลาดทที่เกพิดระหวู่าย งประมวลผลอาจจะเป็ปนข้รอผพิดพลาดที่ทคาดการไวร้แลร้ว หรมอ ข้รอผพิดพลาดท่ีทไมู่ยรร้ายแรงท่ีทสูย่งผลแกยู่การทาท งานของระบบทันบ้งหมดได้ร ใหร้สามารถประมวลผลตยู่อไปไดร้ สูย่วนข้รอผพิดพลาดขณะประมวลผลทที่มทผลกระทบตยู่อระบบร้รายแรงหรมอการททางานทับ้นงหมดกก็ใหร้หยุจด กระททางานของโปรแกรมแล้รวรายงานผลผิพดพลาด เพมอ่ที ททจี่ ะนาท ไปแกรไ้ ขขอ้ร ผดิพ พลาดทเ่ที กพิดขขน้ัน ในภายหลบัง 158 | ขอ้ร ผดิพ พลาดและการแก้รไข
ตบัวอยู่ยางของขร้อผิพดพลาดทที่เกพิดข้ันขนและไมู่ยร้รายแรง เชยู่น การสยู่งพพิมพ์รออกทางเคร่ีมทองพิพมพ์ร การ เชมอท่ี มตู่ยอเครมอขยู่าย การบนับ ทกข ขอ้ร มลย ตบัวอยยู่างของขร้อผพิดพลาดทีท่เกิพดขขน้ันและร้รายแรงมทผลกระทบตยู่อระบบ เชู่ยน การหารดร้วย 0 หนวยู่ ยความจทาหลับกไมู่ยเพทยงพอ ททาใหรร้ ะบบหยดุจ การทาท งานทันบ ทท 3. ข้รอผิพดพลาดทางตรรกะ (logical error) - เกิพดเนม่ีทองจากผ้ยรเขทยนเขทยนผิพดขบัน้นตอน ผรย้เขทยนตทความ หมายของปัปญหาผิพด ขร้อผพิดพลาดนนท้โั ปรแกรมจะไมหยู่ ยดุจ การทาท งาน แตู่ยจะให้ไร ด้ผร ลลพบั ธ์รไมยู่ถกย ตร้อง ดบังน้นนับ จขงตรอ้ งมกท ารทดสอบการททางานของโปรแกรม วาู่ย ถกย ต้อร ง เปปน็ ไปตามทเ่ีท ราตอร้ งการหรมอไมยู่ วธพิ กท ารหนทงข่ี ท่ที นพิยมใช้รกบันคมอ การสรร้างข้รอมยลทดสอบ เป็ปนการจาท ลองข้รอมยลขขัน้นมาใหร้คล้รายข้รอมยลจรพิง มทโอกาสเกพิดขร้อ ผดิพ พลาดไดร้ทจุกแงูย่ทกุจ มุจม การเลอม กข้อร มลย ทดสอบตรอ้ งคลอบคลมุจ ทกจุ กรณททที่ขรอ้ มยลมคท วามเปป็นไปไดร้ ความผิพดพลาดทางตรรกะ เป็ปนบกบั๊ ในโปรแกรมทีท่ททาใหร้โปรแกรมทาท งานผิพดพลาด สู่ยงผลใหร้ไดร้ ผลลบัพธร์ทีท่ผิพดพลาด หรมอผลลบัพธ์รอาจจะถยกตร้องแตยู่มทการใชร้ทรับพยากรเกพินความจทาเปป็นหรมออาจเกิพด เหตกุจ ารณ์รท่ีทเลวร้รายกวยู่า เชยู่นโปรแกรมเกิพดขร้อผพิดพลาดจนหยดุจ การททางานอยู่ยางกระทบันหับนและจบการ ทาท งานลงทบนั ทท ความผพิดพลาดทางตรรกะสามารถเกิพดข้ันขนได้รทนับ้งภาษาเชิพงคอมไพลร์และภาษาเชงิพ แปลคาท สทีังบ่ สี่พทิงทีท่ แตกตู่ยางระหวู่ยางความผพิดพลาดทางตรรกะกบับความผพิดพลาดทางวากยสัมบ พนบั ธร์คมอโปรแกรมทที่มทความ ผพิดพลาดทางตรรกะยบังถมอวูย่าเปป็นโปรแกรมทท่ีสมบยรณ์ร เนมที่องจากโปรแกรมน้นัทถยกตร้องในเชิพงวากยสบัมพนับ ธร์ หมด จขงสามารถททางานไดร้ (แต่ยูผิพดพลาด) ในขณะทที่หากเกพิดความผพิดพลาดทางวากยสับมพบันธ์ร ถร้าเป็ปน ภาษาเชพิงคอมไพล์รกก็จะไมูย่สามารถเป็ปนโปรแกรมไดร้เลยเนม่ีทองจากเกพิดความผดพิ พลาดจากการคอมไพลร์ หรมอหากเปป็นภาษาเชงิพ แปลคทาสที่งับ กก็จะพบว่ยูาโปรแกรมจะหยุจดการทาท งานจากการพบขร้อผิพดพลาด ระหวายู่ งการทาท งานอย่ยาู งแนยู่นอน ซ่ขงที ทาท ใหรไ้ มูยไ่ ดรร้ ับบ การพิพจารณาเปน็ป โปรแกรมได้ร สทงี่พิ เดทยวททบ่ี ย่งู ชนัทถ้ งข ความผดพิ พลาดทางตรรกะกคก็ มอโปรแกรมมขท ้อร ผดิพ พลาด ไดรแ้ กู่ย โปรแกรมใหรผ้ ลลพับ ธ์ร ผิพด ใช้รเวลาหรมอหนยู่วยความจทามากกวู่ยาทท่ีคาด ไวร้ และโปรแกรมหยุจดการททางานจากการเกพิดขร้อผพิด พลาด ข้อร ผดพิ พลาดและการแกร้ไข | 159 |
ผบังงาน รหสับ เททยม รปรู ท่ที 8.7 แสดง ผัผงงาน และ รหสผั เททยม ของการหาร จากรยปทีท่ 8.6 แสดงผบงั งานและรหบัสเททยมของการหาร จากผับงงานและรหัสบ เททยม เราจะไมูยส่ ามารถ รยร้ได้รเลยวู่ยาขับน้นตอนวิพธททที่เขทยนขขั้นนมาน้ันบนมทความผิพดพลาด ถขงแมร้วยู่าโปรแกรมท่ีทเขทยนเสร็กจแล้รวและนทาไป ผย่าู นการแปลดร้วยตับวแปรภาษาจนไดร้เป็ปนรหสับ ภาษาเคร่ีมอท งและนาท ไปประมวลผล ซขที่งขัน้บน ตอนระหวูยา่ งการ ประมวลผลนบั้นนถ้ราไมยู่มทขร้อผิพดพลาดใด ๆ เกิพดข้ขนันเลยจนกวยู่า ผย้รใช้รจะปฟ้อนคูย่าใหร้แกู่ยตับวแปร n เป็ปนเลข 0 ซขท่ีงในคอมพิพวเตอรรจ์ ะถมอวู่ยาเกิพดการหารตับวเลขดวร้ ยเลข 0 จะททาให้รเกิดพ ข้รอผพิดพลาดอยู่าย งรรา้ ยแรง ถขงขับ้นน 160 | ข้อร ผิดพ พลาดและการแก้ไร ข
ททาใหร้กระบวนการประมวลผลหยุจดการทาท งานไดร้ ดบังนน้บันจากรยปทีท่ 8.6 จะต้รองปรับบปรจุงผับงงานและข้ันบน ตอนวพธิ ทการประมวลผลใหม่ยูเพม่ีทอมพิใหร้เกพิดขร้อผพิดพลาดดับงกลยู่าวเกพิดข้ันขนได้รดับงรยปทท่ี 8.7 โดยการเพ่ีพิทมการ ตรวจสอบคู่ยาททร่ี ับบใหแ้ร กู่ยตวับ แปร n กอู่ย นนาท ไปหาร ผงับ งาน รหสบั เทยท ม รปรู ที่ท 8.8 แสดง ผงผั งาน และ รหผัสเททยม ของการหารททแ่ี กขไ้ ขแลวข้ ขร้อผดิพ พลาดและการแกร้ไข | 161 |
ขร้อผิพดพลาดนนั้ทเปป็นขร้อผิพดพลาดทท่ีแกร้ไขยากทท่ีสจุด เพราะเราจะไมยู่รย้รไดร้เลยวยู่าจะเกพิดขร้อผพิดพลาดข้ันขน เมี่มทอใดในระหวู่ยางการประมวลผล เพราะถ้ราหากเราจะปฟ้อนข้รอมยลใหร้แก่ยูตบัวแปร n มทคยาู่ ซท่ีขงอาจจะเป็ปน เลขทที่มทคูย่าเป็ปนลบ หรมอ เปป็นบวก จะไมยู่ข้รอผพิดพลาดเกิพดขข้ันน เวร้นเสทยแตู่ยผร้ยใชร้ปฟ้อนเป็ปนเลข 0 เทยู่านนั้บน ดับง น้บนัน ในข้นนับ ตอนวพธิ ท รหับสเททยม และผับงงานควรจะเขทยนวธิพ กท ารแบบน้ันทไวเ้ร สมอ 3. สรปรุ ขร้อผดพิ พลาดในการโปรแกรมภาษาคอมพพิวเตอร์รจะมทอยยู่ 3 ชนิพด คมอ (1) ข้รอผิพดพลาดตามหลับก ไวยากรณร์ (2) ขร้อผพิดพลาดจากการทาท งาน (3) ขร้อผพิดพลาดทางตรรกะ โดยข้รอผิพดลาดแตู่ยละชนิพดก็ก จะไมวยู่ ิพธทการแกร้ไขทที่แตกตยู่างกบัน โดยขร้อผพิดพลาดทีท่แก้รไขได้รงยูา่ ยทีท่สุจดคมอ ข้รอผิพดพลาดตามหลับกไวยากรณ์ร ตยู่อมากก็จะเปป็นขร้อผิพดพลาดทางตรรกะทท่ีมทความยากในการแกร้ไขเชูย่นกบัน และขร้อผิพดพลาดทท่ีแกร้ไขยาก ทที่สจดุ คมอ ขอร้ ผพิดพลาดระหวู่ยางประมวลผล เพราะขรอ้ ผดิพ พลาดชนิพดน้ัเทน ราไมอยู่ าจจะคาดเดาได้เร ลยวาู่ย มับนจะ เป็ปนอยยู่างไร และเกิพดขั้นขนเม่มีทอใด และเม่ีมทอเกิพดข้ขันนแล้รวการแก้รไขจะต้รองแก้รไขหลายองคร์ประกอบเพที่มอ ใหร้การประมวลผลน้นบัน ผ่ายู นไปไดร้ ดงับ น้ับนน การตรวจสอบขรอ้ ผพดิ พลาดตา่ยู ง ๆ ในการเขยท นโปรแกรมจขงเปป็นกระบวนการทส่ีท าท คญับ เป็ปน อยูย่างมาก เพราะถร้าหากมทข้รอผพิดพลาดเกพิดข้ันขนแลร้วปัปญหาที่ทไดร้วางแผนไว้รก็กอาจจะไม่ยูเป็ปนไปตามท่ีท วางแผนไวแร้ ละจะเสทยเวลาในการททางานเพีทพิ่มขัข้นนอทกหลายเทู่ยาตัวบ 4. คาค ถามท้ขายบท 1. ขร้อผิดพ พลาดเปป็นปปัญหาใดด้าร นในการพบัฒนาโปรแกรม 2. ขอ้ร ผดิพ พลาดชนพดิ ใดที่ทสามารถแกไร้ ขไดงร้ ่าูย ยททส่ี ดุจ 3. ขอ้ร ผพดิ พลาดททเี่ กพดิ จากการตรวจสอบข้อร มยลไมยู่ถกย ต้อร งเรทยกวายู่ อะไร 4. การหารเกดิพ จากขรอ้ ผดิพ พลาดใด 5. หนยวู่ ยความจาท ไม่ยูเพทยงพอจะเกิดพ ข้อร ผิพดพลาดใด 162 | ขอ้ร ผดิพ พลาดและการแก้ไร ข
เอกสารอ้ขางองิผ ทบกั ษพิณา สวนานนท์ร. (2546). พจนานรุกรมศผพั ท์ทคอมพิผวเตอร์แท ละอิผนเทอรเ์ท น็ตน (พผิมพค์ท รัร้งผ ทที่ 10). กรจงุ เทพฯ. หจก. ว.ท ทท.ซท. คอมมวิพ นเพิ คชีั่นทบ . Dierbach, Charies. (2013). Introduction to Computer Science Using Python: A Computational Problem-Solving Focus. USA: John Wiley & Sons,Inc. Franklin, Manoj. (2007). Computer Architecture and organization: From Software to hardware. USA: University of maryland, College Park. ขร้อผดิพ พลาดและการแก้ไร ข | 163 |
บรรณานุกน รม ขนินษฐา นามม. (2548). โครงสร้าร งขร้อมูมลและอัอลกอริทร มทึ . กรงรุ เทพฯ: ไอดมซม อนนิ โฟ ดสนิ ทริบน วิน ตต์ เซซ็นเตอร์ต. ทกทั ษนณิ า สวนานนท์ต. (2546). พจนานนกุ รมศอพั ท์ทคอมพริวเตอรแท์ ละอรินเทอรท์เนต็น (พิมร พ์ทครรังอ้ ท่ที 10). กรงุร เทพฯ. หจก. ว.ม ทม.ซม. คอมมวนิ นนิเคชชัท่น. ธรม ะวฒัท น์ต ประกอบผล. (2543). ระบบคอมพิรวเตอรแท์ ละภาษาาแอสเซมบลท. กรรงุ เทพฯ: สมาคมส่สงเสรินมเทคโนโลยม(ไทย-ยชัปม่ ปุรน่ ). ประยงค์ต อป่สอ ระเสริญน วงศ์ต. (2521). การเขยท นภาษา Object pascal. กรงรุ เทพฯ. ซัคท เซส มเม ดยม . พรฤดม เนตินโสภากลรุ . (2549). วศิร วกรรมซอฟตทแ์ วร์ท. กรงรุ เทพฯ: สาส นัทกพนมิ พตท์ ท้อป จาส กดทั . มนตตช์ ทยั เทยม นทอง. (2545). การออกแบบและพัอฒนาคอรส์ท แวรท์สาส หรับอ บทเรทยนคอมพริวเตอรท์ชว่ช ย- สอน. กรงรุ เทพฯ: ภาควชนิ าคอมพวิน เตอร์ศต กึศ ษา คณะครศรุ าสตรต์ สถาบทันเทคโนโลยม พระจอมเกลาท้ พระนครเหนือน . สมจตนิ ตต์ ลินขนิตถาวร. (2547). โครงสราร้ งขอร้ มูมลและการวรเิ คราะหทอ์ อลั กอริทร ่ึทมี ด้วร ยซท (พมริ พค์ท รัอง้ร ที่ท 1). กรงุร เทพฯ: บริษน ทัท ธนาเพรส จสากดัท . โอภาส เอัม่ยช มสนริ วิน งค์ต. (2557). วทิร ยาการคอมพวริ เตอรแท์ ละเทคโนโลยทสารสนเทศ (ฉบบอั ปรอับปรุนงเพทิม่รี เตมริ ). กรุงร เทพฯ: ซมเอซ็ดยอเคชัชน่ท จาส กดัท . โอภาส เอมยชั่ มสิรน วิน งศ์ต. (2549) . โครงสรา้ร งขร้อมลมู (Data Structures) เพพีทอ่ การออกแบบโปรแกรม คอมพริวเตอรท์. กรรุงเทพฯ: บรินษทัท ซมเอ็ดซ ยอเคชัช่นท จาส กดัท . Bart Baesens, Aimee Backiel, Seppe vanden Broucke. (2015). Beginning Java Programming:The Object-Oriented Approach. USA: John Wiley & Sons Inc. Dierbach, Charies. (2013). Introduction to Computer Science Using Python: A Computational Problem-Solving Focus. USA: John Wiley & Sons,Inc. Teti, Daniele. (2014). Delphi Cookbook. USA: Packct Publishing. Myers, Glenford J. (2004). The Art of Software Testing,Second Edition. USA:John Wiley & Sous, Inc. Hanly, Jeri R., Elloit, Koffman B. (2013). Problem solving and program design in C 7th. USA:Pearson Education, Inc. Kerman, C. Mitchell. (2002). Programming and Problem Solving with Delphi. USA: Addison-Wesley Longman. Miller, Brad., Ranum, David., (2013). Problem Solving with Algorithms and Data Structures Release 3.0. USA: Creative commons. บรรณานุรกรม | 175
บรรณานุนกรม(ตอช่ ) Hetland, Magnus Lie. (2010). Mastering Basic Algorithms in the Python Language. USA:Springer Science & Business Media. Sprankle, Maureen. (2012). Problem solving and programming concepts. USA: Pearson Education Inc. Frieder, Ophir. Frieder Gideon and Grossman, David. (2013). Computer Science Programming Basics with Ruby. USA: O'Reilly Media,Inc. Prinz, Peter & Grawford, Tony. (2006). C in a Nutshell. USA: O'Reilly Media Inc. Lishner, Ray. (2003). C++ in a Nushell. USA: O'Reilly Media Inc. Shelly, B. Gary., Vermaat, E. Misty. (2010). Discovering computers 2010: Living in a Digital World,Complete. USA: Course Technology. Brid, Steven. ,Klein, Ewan. and Loper, Edward. (2009). Natural Language Processing with Python. USA: O'Reilly Media Inc. 176 | บรรณานรุกรม
ภาคผนวก 177
ตารางรหหสั American Standard Code for Information Interchange:ASCII) ตารางทีท่ ก-1. อกอั ขระควบคมคุ ASCII ทีพท่ ิพมพไพ์ มไม่ ด้ด เลขฐานสบิพ อกัอ ขระ ฐานสพบิ อกอั ขระ 0 Null 16 DLE (Data link escape) 1 SOH (Start of Heading) 17 DC1 (Device control 2) 2 STX (Start of Text) 18 DC2 (Device control 3) 3 ETX (end of Text) 19 DC3 (Device control 4) 4 EOT (End of Transmission) 20 DC4 (Device control 4) 5 ENQ (Enquiry) 21 NAK (Nagative acknowledge) 6 ACK (Acknowledge) 22 SYN (Synchronous idle) 7 BEL (Bell) 23 ETB (End of Transmission Block) 8 BS (Backspace) 24 CAN (Cancel) 9 TAB (Horizontal tab) 25 EM (End of medium) 10 NF (NL line feed, new line) 26 SUB (Substitute) 11 VT (Vertical tab) 27 ESC (Escape) 12 FF (NP Form feed,new page) 28 FS (File Separator) 13 CR (Carriage return) 29 GS (Group Separator) 14 SO (Shift out) 30 RS (Record Separator) 15 SI (Shift in) 31 US (Unit Separator) ประกอบดว้ด ยตวัอ เลขลลาดับอ 0–31 ในตาราง ASCII ถูกถ กาล หนดใหด้เป็นป อกอั ขระควบคมคุ ใชด้เพอีทพ่ ควบคคมุ อปุค กรณตพ์ ่มอพวม่ ง เชมน่ จอภาพ เครอพีท่ งพิมพ พพ์ ตวอั อยมา่ งเชนม่ 12 หมายถถึงการเลพที่อนกระดาษททละ หนดา้ /ข้ึขนถ หนา้ด ใหม่ม คาล ส่งัอที นึจ้ขท ะบอกให้เด ครทพีอ่ งพมิพ พพ์ขด้ามไปยัองต้นด หนา้ด ถดัอ ไป 178
ตารางทที่ ก-2. อกัอ ขระ ASCII ท่ีทพิพมพพ์ได้ด ฐานสิบพ อกัอ ขระ ฐานสิบพ ออกั ขระ ฐานสิพบ อกัอ ขระ ฐานสบพิ อกัอ ขระ 32 ชอม่ งวาม่ ง 57 9 81 Q 105 i 33 ! 58 : 82 R 106 j 34 \" 59 ; 83 S 107 k 35 # 60 < 84 T 108 l 36 $ 61 = 85 U 109 m 37 % 62 > 86 V 110 n 38 & 63 ? 87 W 111 o 39 ' 64 @ 88 X 112 p 40 ( 65 A 89 Y 113 q 41 ) 66 B 90 Z 114 r 42 * 67 C 91 [ 115 s 43 + 68 D 92 \\ 116 t 44 , 69 E 93 ] 117 u 45 - 70 F 94 ^ 118 v 46 . 71 G 95 _ 119 w 47 / 72 H 96 ' 120 x 48 0 73 I 97 a 121 y 49 1 74 J 98 b 122 z 50 2 75 K 99 c 123 { 51 3 76 L 100 d 124 | 52 4 77 M 101 e 125 } 53 5 78 N 102 f 126 ~ 179
ตารางท่ีท ก-2. อกอั ขระ ASCII ทพที่ ิพมพ์ไพ ดด้ (ตมอ่ ) ฐานสพิบ อกอั ขระ ฐานสบพิ อกัอ ขระ ฐานสพิบ อกอั ขระ ฐานสบิพ อกัอ ขระ 54 6 79 O 103 g 127 DEL 55 7 80 P 104 h 56 8 81 105 (ท่มีท า :Hanly, Jeri R., Elloit, Koffman B., 2013: D-2) ประกอบดว้ด ยตวัอ เลขลลาดบอั ทีท่ 32–126 ถกูถ กาล หนดใหใ้ด ช้ดแทนอัอกขระทจีท่ ะพบบนแป้นป พมิพ พ์พ และ จะปรากฏขึขถ้นเมพทอ่ี ดหูถ รพอส่งอีัท พมิพ พใ์พ นเอกสาร ยกเว้ดนตอัวเลขลลาดับอ ทที่ 127 ใชแด้ ทนแป้ปน DEL 180
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192