2301170 computer and programming
TRANSCRIPT
เอกสารประกอบการสอน2301170 COMP PROG
ฑตยา หวานวาร
กรกฎาคม 2559
หากพบขอผดพลาด กรณาตดตอฑตยา หวานวาร[email protected]
จำนวน 175 หนา
• ปรบปรงครงท 1 เมอ 26 สงหาคม 2559 22:20• รน 1.1 29 สงหาคม 2559 16:00
CC BY-SA 3.0สญญาอนญาตครเอทฟคอมมอนสแบบ แสดงทมา-อนญาตแบบเดยวกน 3.0
กตตกรรมประกาศ• ขอขอบคณ CS@nok ผพฒนาฟอนตซเอสประจาด (CS PraJad) ซงเปนฟอนตหลกสำหรบเอกสารฉบบนhttp://www.f0nt.com/release/cs-prajad/
• รปสญลกษณอปกรณเครอขายตางๆ จาก CISCOhttp://www.cisco.com/c/en/us/about/brand-center/network-topology-icons.html
สารบญ
กตตกรรมประกาศ ก
สารบญ ค
สารบญภาพ ช
สารบญตาราง ฎ
สารบญตวอยาง ฐ
สารบญรหสคำสง ฒ
บทนำ 1
1 คอมพวเตอรทำงานไดอยางไร 31.1 ววฒนาการของคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 เครองคอมพวเตอรทสำคญในประวตศาสตร . . . . . . . . . . . . . . . . . . . . . . 81.3 ประเภทของคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4 องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน . . . . . . . . . . . 131.5 ประเภทและการทำงานของซอฟตแวร . . . . . . . . . . . . . . . . . . . . . . . . . 201.6 การโปรแกรมคอมพวเตอรเบองตน . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2 ระบบอนเทอรเนต 312.1 ขายงานคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.2 การทำงานของอนเทอรเนต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.3 การเชอมตอกบขายงานอนเทอรเนต . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3 การแทนขอมลในคอมพวเตอร 433.1 บตและไบต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.2 ขอมลประเภทจำนวน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
ง สารบญ
3.3 ขอมลประเภทขอความ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.4 ขอมลชนดตรรกะ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.5 ตวแปร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4 การทำงานแบบลำดบ 534.1 ตวดำเนนการ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2 การออกแบบโปรแกรม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.3 การเขยนและตรวจสอบโปรแกรม . . . . . . . . . . . . . . . . . . . . . . . . . . . 604.4 คำสงพนฐานในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5 การทำงานแบบทางเลอก 675.1 โครงสรางการทำงานแบบเงอนไขสองทางเลอก . . . . . . . . . . . . . . . . . . . . 675.2 เงอนไขซอนและการทำงานแบบหลายทางเลอก . . . . . . . . . . . . . . . . . . . . 695.3 โครงสราง if ในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.4 โครงสราง switch ในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6 การทำงานแบบวนซำ 816.1 ลกษณะและองคประกอบของการทำงานแบบวนซำ . . . . . . . . . . . . . . . . . . 816.2 การทำซำแบบทดสอบกอนทำและทดสอบหลงทำ . . . . . . . . . . . . . . . . . . . 826.3 ตวแจงนบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856.4 การออกแบบการทำงานแบบวนซำ . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.5 ภาษาโปรแกรมทใชในการวนซำ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.6 โครงสรางการทำซำในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7 ตวแปรแถวลำดบ 957.1 การเขาถงและการเรยกใชตวแปรแถวลำดบ . . . . . . . . . . . . . . . . . . . . . . 957.2 แถวลำดบกบการวนซำ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.3 แถวลำดบสองมต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977.4 ตวแปรแถวลำดบในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997.5 ตวแปรชนดสายอกขระในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8 การเรยกใชฟงกชน 1058.1 นยามและสญลกษณ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058.2 โครงสรางของฟงกชนและการเรยกใช . . . . . . . . . . . . . . . . . . . . . . . . . 1068.3 การรบสงคา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078.4 ขอบเขตของตวแปร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098.5 ลำดบการทำงานของฟงกชน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
สารบญ จ
8.6 คลงโปรแกรม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9 ความปลอดภยและจรยธรรมคอมพวเตอร 1139.1 ความเสยหายตอระบบคอมพวเตอรและขอมล . . . . . . . . . . . . . . . . . . . . . 1139.2 อาชญากรรมคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149.3 การเขาถงระบบและขอมลคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . 1159.4 การรบกวนระบบและขอมลคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . 1179.5 การดกรบขอมล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209.6 การปลอมแปลงตวตน และการสงขอมลรบกวนผอน . . . . . . . . . . . . . . . . . . 1229.7 ทรพยสนทางปญญา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249.8 จรยธรรมคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259.9 ความเปนสวนตวของขอมลสารสนเทศ . . . . . . . . . . . . . . . . . . . . . . . . . 126
A แบบฝกหด 129A.1 Checksum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129A.2 ภาษและเงนเดอน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133A.3 สามเหลยมปาสกาล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135A.4 การหารากทสองดวยการหารยาว . . . . . . . . . . . . . . . . . . . . . . . . . . . 145A.5 การคดคาโดยสารรถไฟฟา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151A.6 การพมพปฏทน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
สารบญภาพ
1.1 ลกคด . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 เครองคดเลขของชกการด . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 เครองคดเลขของปาสคาล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 ตารางลอกและภาพขยายหนาในหนงสอ . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Difference engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.6 ชารลส แบบเบจ: บดาของคอมพวเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . 61.7 รเลย . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.8 หลอดสญญากาศ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.9 ทรานซสเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.10 วงจรรวม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.11 Z1 ทสรางขนใหม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.12 Enigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.13 เครอง Bombe ของสหรฐอเมรกา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.14 Colossus ทสรางขนใหม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.15 ENIAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.16 เครองบรการ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.17 เมนเฟรม IBM Z9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.18 ซเปอรคอมพวเตอร IBM Blue Gene/P . . . . . . . . . . . . . . . . . . . . . . . . . 131.19 แผงวงจรหลกของคอมพวเตอรตงโตะธรรมดา . . . . . . . . . . . . . . . . . . . . . . . 141.20 หนวยประมวลผลกลางของอนเทลและแอปเปล . . . . . . . . . . . . . . . . . . . . . . 141.21 สถาปตยกรรมฟอนนอยมนน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.22 ลำดบชนของหนวยความจำภายในหนวยระบบ . . . . . . . . . . . . . . . . . . . . . . . 171.23 RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.24 HDD และ SSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.25 แผนซด . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.26 ยเอสบแฟลชไดรฟ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.27 ชปไบออส . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
ซ สารบญภาพ
1.28 การจดสรรทรพยากรและจดลำดบการทำงานโดย Ubuntu . . . . . . . . . . . . . . . . 221.29 สวนตอประสานแบบคำสง . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.30 ตวอยางรนของโปรแกรมขบอปกรณ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.31 ภาษาเครองและภาษาแอสเซมบล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.32 ขนตอนการทำงานของคอมไพเลอร . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.33 ขนตอนการทำงานของอนเทอรพรเตอร . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1 ขายงานเฉพาะทและขายงานบรเวณกวาง . . . . . . . . . . . . . . . . . . . . . . . . . 322.2 ARPANET มนาคม 1977 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.3 แผนภาพการเชอมตอเครอขายอนเทอรเนตระหวางประเทศ . . . . . . . . . . . . . . . . 332.4 ตวอยางการทำงานในชดโพรโทคอลอนเทอรเนต . . . . . . . . . . . . . . . . . . . . . . 352.5 การทำงานของอนเทอรเนตเปรยบเทยบกบระบบไปรษณย . . . . . . . . . . . . . . . . . 382.6 บรการ DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.7 บรการ DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1 ผงงานและขนตอนวธสำหรบตวอยาง 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . 604.2 ผงงานและขนตอนวธสำหรบตวอยาง 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . 604.3 ตวอยางการทำงานของโปรแกรมตรวจแกจดบกพรอง . . . . . . . . . . . . . . . . . . . 62
5.1 โครงสรางการทำงานแบบเงอนไขสองทางเลอก . . . . . . . . . . . . . . . . . . . . . . . 685.2 สวนของผงงานสำหรบตวอยางท 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685.3 โครงสรางการทำงานแบบเงอนไขซอนเงอนไข . . . . . . . . . . . . . . . . . . . . . . . 695.4 ผงงานสำหรบตวอยางท 5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705.5 โครงสรางการทำงานแบบเงอนไขตอเนองเพอตรวจสอบคา (1) . . . . . . . . . . . . . . . 715.6 โครงสรางการทำงานแบบเงอนไขตอเนองเพอตรวจสอบคา (2) . . . . . . . . . . . . . . . 715.7 โครงสรางการทำงานแบบเงอนไขการตรวจสอบทางเลอก . . . . . . . . . . . . . . . . . 725.8 ผงงานแสดงการหาจำนวนวนในหนงเดอน . . . . . . . . . . . . . . . . . . . . . . . . . 725.9 ผงงานแสดงลำดบการทำงานของคำสง switch แบบไมม break . . . . . . . . . . . . 775.10 ผงงานของคำสง switch แบบไมม break . . . . . . . . . . . . . . . . . . . . . . . 78
6.1 การหาจดสมดลของคาน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.2 โครงสรางการทำซำแบบทดสอบกอนทำ . . . . . . . . . . . . . . . . . . . . . . . . . . 836.3 สวนของผงงานแสดงการเตมสารเคมจนกวาจะเกดปฏกรยา . . . . . . . . . . . . . . . . 846.4 โครงสรางการทำซำแบบทดสอบหลงทำ . . . . . . . . . . . . . . . . . . . . . . . . . . 846.5 โครงสรางการทำซำแบบใชตวแจงนบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856.6 สวนของผงงานแสดงการหาจำนวนทหารดวย 3 และ 5 ลงตวในชวง [1,1000] . . . . . . 866.7 การใชตวแจงนบแจกแจงสมาชกในลำดบ . . . . . . . . . . . . . . . . . . . . . . . . . . 87
สารบญภาพ ฌ
6.8 ผงงานแสดงการตงเวลาถายรปทก 1 นาท เปนเวลา 24 ชวโมง . . . . . . . . . . . . . . 886.9 ผงงานการแสดงรายชอนกเรยนทกคนในลำดบ . . . . . . . . . . . . . . . . . . . . . . . 886.10 ผงงานการหาผชนะเกมเปายงฉบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.11 โครงสราง for แบบดงเดม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.12 โครงสราง for แบบใชตวแจงนบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.1 เลขดชนของตวแปรแถวลำดบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.2 สวนของผงงานสำหรบการแปลงขอมลใหอยในชวง [0,1] . . . . . . . . . . . . . . . . . . 987.3 แถวลำดบกบตวแปรชนดตวช . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
8.1 สญลกษณการเรยกใชโปรแกรมยอยหรอฟงกชน . . . . . . . . . . . . . . . . . . . . . . 106
9.1 ตวอยาง CAPTCHA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169.2 การเขารหสดวยกญแจอสมมาตร . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219.3 ตวอยางใบรบรองดจทล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
A.1 ผงงานการพมพสามเหลยมปาสกาล . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142A.2 ตวอยางการหารากทสอง . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145A.3 ผงงานการหารากทสองดวยวธการหารยาว . . . . . . . . . . . . . . . . . . . . . . . . . 149A.4 ผงงานการคดคาโดยสารรถไฟฟา BTS . . . . . . . . . . . . . . . . . . . . . . . . . . 158A.5 แผนภาพเสนทางและสถานในระบบรถไฟฟา BTS: ภาพจาก www.bts.co.th . . . . . . 159A.6 ตารางคาโดยสารรถไฟฟา BTS: ภาพจาก www.bts.co.th . . . . . . . . . . . . . . . . 160A.7 ผงงานการพมพปฏทน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
สารบญตาราง
3.1 จำนวนขอมลทแทนไดเมอมพนทในหนวยความจำขนาดตาง ๆ . . . . . . . . . . . . . . . 443.2 ตารางรหสแอสกแบบขยาย ISO8859-11 . . . . . . . . . . . . . . . . . . . . . . . . . 473.3 ตวอยางการเกบขอมลในหนวยความจำ . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1 ตวดำเนนการพชคณต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.2 ตวดำเนนการเปรยบเทยบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.3 ตวดำเนนการตรรกะ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4 สญลกษณของผงงานและความหมาย . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.5 การตรวจสอบคาตวแปร สำหรบตวอยางท 4.1 . . . . . . . . . . . . . . . . . . . . . . . 624.6 ชนดของขอมลทใชบอยในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.7 รปแบบขอมลเขาและวธระบทอยสำหรบคำสง scanf . . . . . . . . . . . . . . . . . . . 64
6.1 ตวอยางการทำงานแบบวนซำ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.1 รายการตวแปรสำหรบการแปลงคาใหอยในชวง [0,1] . . . . . . . . . . . . . . . . . . . 977.2 การอางถงแถวลำดบสองมต . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
A.1 อตราภาษเงนไดบคคลธรรมดา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133A.2 รายการตวแปรสำหรบการพมพสามเหลยมปาสกาล . . . . . . . . . . . . . . . . . . . . 141A.3 รายการตวแปรสำหรบการหารากทสองดวยการหารยาว . . . . . . . . . . . . . . . . . . 148A.4 รายการตวแปรสำหรบการคดคาโดยสาร BTS . . . . . . . . . . . . . . . . . . . . . . . 157A.5 รายการตวแปรสำหรบการพมพปฏทน . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
สารบญตวอยาง
4.1 ตวอยาง (การบวกเลขสองจำนวน) . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.2 ตวอยาง (การหาคาเฉลยของเลขสามจำนวน) . . . . . . . . . . . . . . . . . . . . . 57
5.1 ตวอยาง (การหาจำนวนวนในหนงป) . . . . . . . . . . . . . . . . . . . . . . . . . . 685.2 ตวอยาง (การแปลงเวลาจากระบบ 24 ชวโมงไปเปนระบบ AM/PM) . . . . . . . . . 695.3 ตวอยาง (การหาจำนวนวนในหนงเดอนของป) . . . . . . . . . . . . . . . . . . . . . 70
6.1 ตวอยาง (การหาจำนวนทงหมดทหารดวย 3 และ 5 ลงตวในชวง 1-1000) . . . . . . 856.2 ตวอยาง (การตงเวลาถายภาพแบบ timelapse ทก 1 นาทเปนเวลา 24 ชวโมง) . . 876.3 ตวอยาง (การแสดงรายชอนกเรยนทกคนในลำดบ) . . . . . . . . . . . . . . . . . . 876.4 ตวอยาง (การหาผชนะเกมเปายงฉบ) . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.1 ตวอยาง (การแปลงคาใหอยใชชวง 0-1 (normalization)) . . . . . . . . . . . . . . 977.2 ตวอยาง (แถวลำดบสองมต) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997.3 ตวอยาง (การแปลงขอความทงหมดใหเปนตวพมพใหญ) . . . . . . . . . . . . . . . 101
8.1 ตวอยาง (การเรยกใชฟงกชนการหารากทสอง) . . . . . . . . . . . . . . . . . . . . 1078.2 ตวอยาง (ฟงกชนแฟกทอเรยลและขนตอนการทำงาน) . . . . . . . . . . . . . . . . . 110
สารบญรหสคำสง
4.1 การกำหนดคา . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.2 การประกาศตวแปรในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.3 การกำหนดคาใหตวแปรในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.4 การประกาศตวแปรพรอมกบกำหนดคาในภาษาซ . . . . . . . . . . . . . . . . . . . 634.5 โครงสรางคำสง scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.6 โครงสรางคำสง printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.7 รหสคำสงสำหรบตวอยางท 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.1 โครงสรางคำสง if (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.2 โครงสรางคำสง if (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.3 โครงสรางคำสง if แบบเงอนไขซอน . . . . . . . . . . . . . . . . . . . . . . . . . 735.4 โครงสราง if แบบเงอนไขตอเนอง (1) . . . . . . . . . . . . . . . . . . . . . . . . 745.5 โครงสราง if แบบเงอนไขตอเนอง (2) . . . . . . . . . . . . . . . . . . . . . . . . 745.6 โครงสราง if แบบใชบลอก (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.7 โครงสราง if แบบใชบลอก (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.8 โครงสรางคำสง switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765.9 โครงสราง switch แบบไมม break . . . . . . . . . . . . . . . . . . . . . . . . 77
6.1 โครงสราง while-do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906.2 โครงสราง do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906.3 โครงสราง repeat-until . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906.4 โครงสราง for แบบดงเดม . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.5 โครงสราง for แบบใชตวแจงนบ . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.6 โครงสราง while-do ในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . 926.7 โครงสราง do-while ในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . 926.8 โครงสราง for ในภาษาซ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.1 การอางถงตวแปรแถวลำดบ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
ณ สารบญรหสคำสง
7.2 ตวอยางการประกาศตวแปรแถวลำดบในภาษาซ . . . . . . . . . . . . . . . . . . . . 997.3 การแปลงขอความทงหมดใหเปนตวพมพใหญ . . . . . . . . . . . . . . . . . . . . . 1017.4 ฟงกชนตางๆ เกยวกบสายอกขระในภาษาซ . . . . . . . . . . . . . . . . . . . . . . 102
8.1 โครงสรางของฟงกชน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068.2 โปรแกรมแฟกทอเรยล . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
A.1 โปรแกรมคำนวณ checksum ของเลขประจำตวประชาชน . . . . . . . . . . . . . . 130A.2 โปรแกรมคำนวณ checksum ของเลขประจำตวนสต . . . . . . . . . . . . . . . . 132A.3 โปรแกรมการพมพสามเหลยมปาสกาล . . . . . . . . . . . . . . . . . . . . . . . . 143A.4 โปรแกรมการคดคาโดยสาร BTS . . . . . . . . . . . . . . . . . . . . . . . . . . . 161A.5 โปรแกรมการพมพปฏทน . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
บทนำ
วตถประสงครายวชานประกอบดวย
1. อธบายหลกการทำงานของคอมพวเตอรในระดบฮารดแวร ซอฟตแวร และระบบปฏบตการ2. อธบายหลกการทำงานของอนเทอรเนต3. อธบายแนวคดของการเกบขอมลในภาษาโปรแกรม การแทนขอมลในคอมพวเตอร และความแตก
ตางระหวางขอมลชนดตางๆ4. อธบายการทำงานของโปรแกรมในรปการทำงานแบบลาดบ แบบทางเลอก แบบวนซำ และการใช
ตวแปรแถวลาาดบ5. ระบปจจยเสยงเกยวกบความปลอดภยของคอมพวเตอร จรรยาบรรณการใชคอมพวเตอร และ
อาชญากรรมบนอนเทอรเนต6. อธบายการประยกตใชคอมพวเตอรในศาสตรตางๆ
เนอหาการเรยนในแตละหวขอมทงหวขอระดบพนฐานสำหรบผเรยนทวไป และหวขอขนสงสำหรบผเรยนทสนใจจะศกษาตอทางดานคอมพวเตอร แตละบทจะมมมลองคดใหผเรยนทดสอบความเขาใจของตนเองในการประยกตใชความรในบทเรยนเพอหาคำตอบ และมแบบฝกหดทายบทใหผเรยนทบทวนความเขาใจ ภาคผนวกของเอกสารเปนโจทยแบบฝกหดซงใชเนอหามากกวาหนงหวขอในการแกปญหา
เอกสารฉบบอเลกทรอนกสอยท
http://pioneer.netserv.chula.ac.th/~wdittaya/CompProg/2301170-Dittaya-ebook.pdf
แผนการสอนของรายวชาแบงตามวตถประสงครายวชาไดดงน
2 บทนำ
สปดาหท วตถประสงคขอ เนอหา1 1 คอมพวเตอรทำงานไดอยางไร2 2 ระบบอนเทอรเนต3 3 การแทนขอมลในคอมพวเตอร4-5 4 พนฐานการเขยนโปรแกรมแบบลำดบ6-7 4 การทำงานแบบทางเลอก
สอบกลางภาค8-10 4 การทำงานแบบวนซำ11-12 4 ตวแปรแถวลำดบ13 5 การรกษาความปลอดภยในระบบคอมพวเตอร14 5 จรรยาบรรณการใชคอมพวเตอร15 6 การประยกตใชคอมพวเตอรในศาสตรตาง ๆ
สอบปลายภาค
บทท 1คอมพวเตอรทำงานไดอยางไร
วตถประสงคการเรยนรอธบายหลกการทำงานของคอมพวเตอรในระดบฮารดแวร ซอฟตแวร และระบบปฏบตการ
1. อธบายววฒนาการและความเปนมาในการพฒนาคอมพวเตอรได2. อธบายโครงสรางคอมพวเตอรสวนฮารดแวร และหนาทของแตละองคประกอบได3. รจกซอฟตแวรชนดตางๆ และฮารดแวรทมกพบในคอมพวเตอร ระบหนาทและความสมพนธกบ
สวนอนๆ ของคอมพวเตอรได4. คาดเดาสาเหตของปญหาการทำงานของคอมพวเตอรซงเกดจากฮารดแวรหรอซอฟตแวรได
ใชเวลารวม 3 คาบคอมพวเตอรมพฒนาการอยางยาวนานจากอดตมาจนปจจบน และยงคงมการพฒนาอยางตอเนอง
จดมงหมายหลกในการพฒนาคอมพวเตอรนน คอการสรางเครองทนแรงมนษยในการคำนวณตางๆคอมพวเตอรในปจจบนเปนอปกรณอเลกทรอนกส ทำงานดวยไฟฟา ภายในประกอบดวยชนสวนตางๆเปนจำนวนมากทำงานประสานกนโดยมชดคำสงควบคม ซงซบซอนมากหากเทยบกบคอมพวเตอรในยคแรก การศกษาววฒนาการของคอมพวเตอรนบแตอดตจนปจจบน จะทำใหเขาใจกลไกการทำงานของคอมพวเตอรมากยงขน รวมถงเหนแนวทางการพฒนาคอมพวเตอรตอไปในอนาคต
1.1 ววฒนาการของคอมพวเตอรววฒนาการของคอมพวเตอรจำแนกอยางคราวๆ ตามเทคโนโลยทใชในการสรางเครองไดเปน ยคของเครองคดเลขรปแบบตางๆ ยคคอมพวเตอรเชงกล ยคคอมพวเตอรกงไฟฟากงเชงกล ยคหลอดสญญากาศ และยคทรานซสเตอร โดยสองยคหลงเปนยคของคอมพวเตอรเชงไฟฟา
4 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.1: ลกคด รปท 1.2: เครองคดเลขของชกการด1
รปท 1.3: เครองคดเลขของปาสคาล2
1.1.1 เครองคดเลขคอมพวเตอร แปลตรงตวหมายถง เครองคำนวณ จดเรมตนในการสรางคอมพวเตอรขนมาจงใชเพอการคำนวณตางๆ เครองคำนวณอยางงายทสดคอ เครองคดเลข ยคแรกๆ นนนบยอนไปไดถงยคของลกคด(รปท 1.1) ซงมใชกนอยางแพรหลายมานานนบพนป และยงคงใชกนอยในปจจบน ลกคดเปนอปกรณเพอชวยในการคำนวณหรอทดเลข ซงยงตองอาศยคนในการดดลกคด แตการคดเลขจำนวนมากๆ นน ถงแมลกคดจะชวยทนแรงในการทด แตกยงตองใชเวลาและแรงคนในการดดลกคดอย
การทดเลขนนมแบบแผนทชดเจนแนนอน เราจงสามารถสรางกลไกเพอทดเลขอตโนมตได เทคโนโลยในยคเรมตนคอกลไกการหมนของเฟอง เครองคดเลขของชกการด (รปท 1.2) เปนเครองคดเลขเชงกลเครองแรกทมการบนทกไวในประวตศาสตร อาศยกลไกการหมนของเฟองในการบวกลบ รวมกบกระดกของนาเปยร (Napier’s Bone) ในการคณหาร ชกการดเสนอเครองคดเลขนเพอชวยในการคำนวณทางดาราศาสตร ตวเครองจรงนนถกทำลายหรอสญหายไปแลว สวนเครองจำลองซงสรางจากการออกแบบโดยชกการดนนตงอยในพพธภณฑหลายแหง และมเครองหนงอยทองคการพพธภณฑวทยาศาสตรแหงชาต จงหวดปทมธาน
ความตองการในการคำนวณทซบซอนนอกจากงานวทยาศาสตรในกลมดาราศาสตรแลว การคด1โดย Herbert Klaeren [CC-BY-SA-3.0], ผาน Wikimedia Commons2โดย © 2005 David Monniaux , [CC BY-SA 3.0], ผาน Wikimedia Commons
1.1. ววฒนาการของคอมพวเตอร 5
รปท 1.4: ตารางลอกและภาพขยายหนาในหนงสอ3
content...
รปท 1.5: Difference engine4
คำนวณดานการเงน ภาษ กจะเปนภาระทหนกเชนเดยวกน แบลร ปาสคาล (Blair Pascal) ออกแบบและสรางเครองคดเลขขนใชในสำนกงานเพอคำนวณภาษ เครองคดเลขของปาสคาล (รปท 1.3) ใชเฟองทดในการบวกลบจำนวน และทำการคณหารโดยอาศยการบวกลบ นอกจากปาสคาลจะผลตเครองคดเลขเพอใชในสำนกงานของตนแลว ปาสคาลยงจดสทธบตรและสรางเครองคดเลขเพอจำหนายเชงพาณชยอกดวย
1.1.2 คอมพวเตอรเชงกล (Mechanical computer)เครองคดเลขในอดตนนสามารถทำการคำนวณพนฐาน ไดแก บวก ลบ คณ หาร ได แตจากความกาวหนาทางวทยาศาสตรและวศวกรรม นอกจากงานดานดาราศาสตรแลว ยงมความตองการตารางเพอใชในการคำนวณคาตางๆ ทางคณตศาสตร ทซบซอน เชน ตารางลอก (รปท 1.4) ตารางฟงกชนโพลโนเมยล และอนๆ
ในอดต ตารางเหลานสรางจากการคำนวณโดยมนษย สงโรงพมพเพอเรยงพมพ และพมพออกมาเปนเลม ซงมโอกาสผดพลาดในขนตอนการเรยงพมพไดมาก เนองจากตารางนนมเฉพาะตวเลข ไมเหมอนกบขอความซงสามารถพสจนอกษรไดงายกวา ชารลส แบบเบจ (Charles Babbage, รปท 1.6) จงเสนอโมเดลของ Difference engine ซงเปนเครองพมพทสามารถพมพตารางคาทางคณตศาสตรไดโดยอตโนมต การทำงานของ Difference engine นนใชหลกการทดรอบของเฟองตางๆ ในการคดเลขเรยกคอมพวเตอรทใชหลกการทำงานของกลไกเชงกลแบบนวา “คอมพวเตอรเชงกล”
3โดย Georg von Vega, 1794 จาก Science Museum4โดย Canticle at en.wikipedia [CC-BY-SA-3.0 or GFDL], จาก Wikimedia Commons
6 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.6: ชารลส แบบเบจ: บดาของคอมพวเตอร5รปท 1.7: รเลย6
Difference engine นนไมเคยถกสรางจนสำเรจใชงานไดจรงในยคของแบบเบจเนองจากขอจำกดทางดานงบประมาณและเทคโนโลย ราวป 1990 จงมการสราง Difference engine ซงทำงานไดจรง โดยอาศยรางแบบของแบบเบจและเปนการยนยนวาแนวคดของแบบเบจนนใชงานไดจรง ปจจบนDifference engine ททำงานไดจรงตงอยทพพธภณฑวทยาศาสตร ณ กรงลอนดอน (รปท 1.5) และพพธภณฑประวตศาสตรคอมพวเตอร ณ เมองเมานเทนวว สหรฐอเมรกา
นอกจากโมเดลของ Difference engine แลว แบบเบจยงเสนอโมเดลของ Analytical engineซงถอเปนโมเดลคอมพวเตอรเครองแรกทสามารถโปรแกรมหรอสงใหทำงานไดตางๆ ไดตามตองการ แตจนปจจบน กยงไมมการสรางเครองคอมพวเตอรททำงานไดจรงจากรางการออกแบบ Analytical en-gine ของแบบเบจ อยางไรกด จากผลงานการออกแบบนทำใหแบบเบจไดรบการยกยองใหเปน “บดาของคอมพวเตอร”
ในอดต เครองคำนวณแตละเครองนนจะถกออกแบบมาเพอการคำนวณเฉพาะอยาง เชน การคำนวณทางพชคณต การคำนวณคาตารางลอก เปนตน ทำใหเครองทสรางขนนนสามารถทำงานไดเพยงอยางเดยว หากคอมพวเตอรสามารถถกปรบแตงใหทำงานไดหลากหลายตามแตผใชตองการได กจะทำใหคอมพวเตอรมความสามารถมากขน ใชงานไดหลายสถานการณขน รวมถงประหยดคาใชจายโดยรวมในการสรางเครองเพอทำงานหลายๆ อยางมากขนดวย
5Public Domain, https://commons.wikimedia.org/w/index.php?curid=153927376ดดแปลงจาก Public Domain, https://commons.wikimedia.org/w/index.php?curid=186888
1.1. ววฒนาการของคอมพวเตอร 7
1.1.3 คอมพวเตอรเชงไฟฟาปญหาของเครองคำนวณเชงกลคอความเรวในการทำงานซงตดขอจำกดทรอบการหมนของกลไก ทำใหทำความเรวไดไมมาก จอรจ สตบตซ (George Stibitz) จากเบลลแลบ (Bell Labs) จงออกแบบและสรางคอมพวเตอรโดยใชหลกการทำงานของรเลย
รเลย (รปท 1.7) เปนสวตชรปแบบหนงซงมสองสถานะคอ ปด และ เปด ทำงานโดยใชหลกการแมเหลกไฟฟา อยางไรกด รเลยกยงมสวนแขนสวตชหนาสมผส (แขน C ในรปท 1.7) ซงเปนการทำงานเชงกลอยดวย คอมพวเตอรทอาศยรเลยในการทำงานจงเปนคอมพวเตอรกงเชงกลกงเชงไฟฟา (electro-mechanical computer) สถานะตด (วงจรปด-กระแสไหล) และดบ (วงจรเปด-กระแสไมไหล) ของสวตชสามารถแทนไดดวยเลขฐานสอง 1 หลก นนคอ 0 แทนสถานะปด และ1 แทนสถานะเปด การออกแบบการคำนวณของคอมพวเตอรซงอาศยรเลยในการทำงานจงองกบเลขฐานสองเปนหลก เรยกจำนวนขอมลทเกบดวยเลขฐานสอง 1 หลกนวา จำนวน 1 บต (BInary digiT – bit)
รเลยเองยงมขอจำกดดานความเรวจากชนสวนเชงกลในอปกรณ ทำใหทำความเรวในการประมวลผลไดไมสง ยคถดมาของคอมพวเตอรจงเปลยนจากการใชสวตชซงทำจากรเลยมาเปนหลอดสญญากาศ(รปท 1.8) แทน หลอดสญญากาศนนไมมสวนเชงกล การทำงานเปนเชงไฟฟาทงหมด จงทำงานไดเรวกวารเลยมาก ตวอยางของหลอดสญญากาศ เชน หลอดไดโอด
รปท 1.8: หลอดสญญากาศ7
ขอเสยของหลอดสญญากาศคอความรอนสง กนไฟ อายการใชงานสน มขนาดใหญ จงมการพฒนาทรานซสเตอรขนมา ทรานซสเตอร (รปท 1.9) มลกษณะการทำงานเปนสวตชสองสถานะเชนเดยวกบรเลยและหลอดสญญากาศ มขนาดเลก กนไฟตำ ทำใหการสรางคอมพวเตอรขนาดใหญทำไดงายขน เทคโนโลยคอมพวเตอรจงพฒนาตอมาอยางรวดเรว
เทคโนโลยในยคถดๆ มาจนถงปจจบนนนเปนการลดขนาดของทรานซสเตอร และการรวมทรานซสเตอรหลายๆตวเขาเปนวงจรรวม (Integrated Circuit: IC) หรอชป(chip) หรอไมโครชป (microchip) ดงรปท 1.10 ซงทำใหคอมพวเตอรมขนาดเลกลง แตมสมรรถนะการคำนวณสงขน
รปท 1.9: ทรานซสเตอร
ปจจบนนกยงคงเปนยคของเทคโนโลยทรานซสเตอรอยแตอยในรปของวงจรรวมขนาดใหญ (Very Large ScaleIntegration: VLSI) เทคโนโลยปจจบน (พ.ศ.2558)ทำวงจรรวมทใชทรานซสเตอรขนาดหลกสบนาโนเมตร ในชปหนงตวประกอบดวยทรานซสเตอรนบพนลานตว ทำใหคอมพวเตอรปจจบนมขนาดเลกกวาในยคแรกในขณะทมประสทธภาพการคำนวณสงกวามาก ทงน ทรานซสเตอร
7โดย Chemical Heritage Foundation [CC-BY-SA-3.0], ผาน Wikimedia Commons
8 บทท 1. คอมพวเตอรทำงานไดอยางไร
ในวงจรรวมกยงคงทำหนาทเปนสวตชปดเปดเชนเดยวกบในรเลยหรอหลอดสญญากาศในยคกอน การทำงานกบคอมพวเตอรจงยงอาศยเลขฐานสองเปนหลกเชนเดม
รปท 1.10: วงจรรวม8
ปจจบนนขนาดของทรานซสเตอรเลกลงเรอยๆ แตกำลงจะถงขดจำกดในไมชา เทคโนโลยการสรางคอมพวเตอรทเรมไดรบความสนใจคอคอมพวเตอรควอนตม โดยอาศยหลกการทางควอนตมฟสกสในการทำงาน ซงแตกตางจากสวตชทใชในคอมพวเตอรเชงไฟฟาในปจจบน จดเดนของคอมพวเตอรควอนตมคอสามารถคำนวณคาตางๆ ไดรวดเรวกวาระบบคอมพวเตอรในปจจบนมาก แตเทคโนโลยควอนตมคอมพวเตอรปจจบนยงอยในหองทดลอง ยงไมพรอมจะนำมาใชงานจรง
ลองคดจากแนวโนมการเปลยนแปลงของเทคโนโลยคอมพวเตอรจากระบบเชงกลมาเปนระบบไฟฟา และอนาคตอาจจะเปนระบบควอนตมนน นสตคดวา หลงจากระบบควอนตมแลว จะมการเปลยนแปลงอกหรอไมเพราะเหตใด
1.2 เครองคอมพวเตอรทสำคญในประวตศาสตรเครองคอมพวเตอรทสำคญในประวตศาสตรมกเปนเครองทแสดงจดเปลยนทางเทคโนโลยทสำคญๆ เชนเทคโนโลยการสรางเครอง จากกลไกเชงกล เปนกลไกเชงไฟฟา หรอมความสามารถในการปรบแตงเพอทำงานไดหลากหลาย เรยกวา สามารถโปรแกรมได
การปรบแตงเครองคอมพวเตอรเพอใหใชงานไดหลากหลายอาจทำไดในหลายรปแบบ เชน ปรบเปลยนชนสวนสำหรบการทำงานเฉพาะอยาง สลบสายการเชอมตออปกรณตางๆ หรอใชชดรหสคำสงบรรจไวในหนวยเกบหรอหนวยความจำ เปนตน
1.2.1 Z1คอนราด ซส (Konrad Zuse) ออกแบบและสราง Z1 ซงเปนคอมพวเตอรเชงกลทสามารถโปรแกรมไดแบบจำกด Z1 เปนคอมพวเตอรซงสรางโดยเงนสนบสนนของครอบครวซส ซงตางจากเครองคอมพวเตอรอนในยคสมยสงครามโลกซงมกไดรบการสนบสนนทางการเงนจากรฐบาลประเทศตางๆ Z1 นนถกทำลายลงไปในระหวางสงครามโลกครงท 2 อยางไรกตาม ซสสราง Z1 ขนใหมอกครงหลงสงครามโลก ปจจบนZ1 ทสรางขนใหมจดแสดงอยทพพธภณฑเทคโนโลยเยอรมน ณ กรงเบอรลน (รปท 1.11)
8โดย Zephyris ท en.wikipedia [GFDL หรอ CC-BY-SA-3.0], จาก Wikimedia Commons
1.2. เครองคอมพวเตอรทสำคญในประวตศาสตร 9
รปท 1.11: Z1 ทสรางขนใหม9
รปท 1.12: Enigma10 รปท 1.13: เครอง Bombe ของสหรฐอเมรกา11
นอกจาก Z1 แลว ซสยงออกแบบและสราง Z2 และ Z3 ตามมาดวย โดยท Z3 เปนคอมพวเตอรกงไฟฟากงเชงกลและเปนคอมพวเตอรเครองแรกทสามารถโปรแกรมไดโดยสมบรณหลงการปรบแตงบางอยาง แต Z3 กถกทำลายลงจากการทงระเบดในระหวางสงครามโลกครงท 2 เชนกน
1.2.2 Bombe กบ Enigma และ Colossus กบ Lorenz SZชวงสงครามโลกนนความตองการทางการทหารเปนแรงผลกดนททำใหเทคโนโลยคอมพวเตอรพฒนาไปอยางรวดเรว ปจจยหนงทสงผลตอการแพชนะในสงครามคอขอมล การรบสงขอมลทางการทหารระหวางฝายเดยวกนนนจำเปนตองเขารหสเพอปองกนความลบรวไหล ในทางกลบกน หากสามารถถอดรหสของฝายตรงขามได กมแนวโนมทจะชนะไดมากขน
ฝายเยอรมนออกแบบวธการเขารหสและสรางเครองเขารหสกงไฟฟากงเชงกลชอ Enigma (รปท1.12) มลกษณะเปนเหมอนพมพดด เมอกดแปนอกขระตามปกตแลว จะไดขอความทเขารหสแลวพมพ
9โดย Stahlkocher [GFDL หรอ CC-BY-SA-3.0], ผาน Wikimedia Commons10โดย Greg Goebel (Web page Image) [Public domain], ผาน Wikimedia Commons11จาก CyrptoMusuem.com ท http://www.cryptomuseum.com/crypto/bombe/
10 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.14: Colossus ทสรางขนใหม12
ออกมา หลกการเขารหสของ Enigma คอการสลบอกขระจรงกบอกขระอน แตรปแบบการสลบนนเปลยนไปเรอยๆ ในแตละครงของการสงขอมล การถอดรหสดวยมอจงเปนเรองยงยากและใชเวลามากอกทงยงมขอความใหมๆ ทตองถอดรหสถกสงมาตลอดเวลา
ฝายสมพนธมตรจงพยายามสรางเครองชวยถอดรหสอตโนมตขน เครอง Bombe เปนเครองถอดรหสกงไฟฟากงเชงกล ออกแบบโดยอลน ทวรง (Alan Turing) เพอใชในการถอดรหส Enigmaหลกการทำงานของเครอง Bombe คอ ทดลองหาวธการสลบอกขระของ Enigma ไปเรอยๆ วาเปนไปไดหรอไม การหาวธการเขารหสนสามารถทำไดดวยมอคนกจรง แตจะใชเวลานานมากเนองจากจำนวนรปแบบทเปนไปไดมจำนวนมาก การใช Bombe มาชวยจำลองการเขารหสเพอทดสอบจะยนเวลาการหารหสทถกตองไดมาก เครอง Bombe ถกสรางขนหลายเครองโดยสมาชกของฝายสมพนธมตร รปท1.13 เปนตวอยางของเครอง Bombe ทสรางโดยสหรฐอเมรกา
นอกจาก Enigma แลวฝายเยอรมนยงมเครองเขารหสชด Lorenz SZ อกดวย ซงเขารหสดวยการนำขอความมา XOR กบกญแจ และถอดรหสดวยวธเดยวกน ฝายสมพนธมตรพฒนาเครอง Colus-sus ขน เพอชวยในการถอดรหสชนดน โดยท Colossus เปนคอมพวเตอรอเลกทรอนกสเตมตว และยงเปนคอมพวเตอรอเลกทรอนกสเครองแรกทสามารถโปรแกรมได แมจะทำไดอยางจำกดกตาม ขอมลของ Colossus ถอเปนความลบทางการทหาร แผนการออกแบบและตวเครอง Colossus สวนมากจงถกแยกชนสวนหรอทำลายหลงจากจบสงคราม Colossus ถกสรางขนใหมภายหลงสงครามสงบ (รปท 1.14) ปจจบนจดแสดงอยทพพธภณฑการคอมพวเตอรแหงชาต ณ บกกงแฮมเชอร สหราชอาณาจกร
1.2.3 ENIACENIAC (รปท 1.15) เปนทรจกในฐานะคอมพวเตอรอเลกทรอนกสทสามารถโปรแกรมไดโดยสมบรณเครองแรกของโลก ENIAC ถกออกแบบมาเพอคำนวณตารางสำหรบการยงขปนาวธในชวงสงครามโลก
12โดย MaltaGC [GFDL, CC-BY-SA-3.0 หรอ FAL], ผาน Wikimedia Commons
1.3. ประเภทของคอมพวเตอร 11
รปท 1.15: ENIAC13
ครงท 2 สวนอเลกทรอนกสของ ENIAC เปนหลอดสญญากาศ จงทำใหทำงานไดเรวกวาคอมพวเตอรรนกอนๆ ซงอาศยเทคโนโลยรเลย
ทง ENIAC และ Colossus เปนคอมพวเตอรอเลกทรอนกสทสามารถโปรแกรมได แต Colossusนนสามารถโปรแกรมไดจำกดกวา ENIAC
ลองคดหากคอมพวเตอรทสำคญคอเครองทเปนจดเปลยนตางๆ ทงดานเทคโนโลยและวธการใชงาน เครองทนาจะเปนคอมพวเตอรทสำคญในชวง 20 ปทผานมานมเครองอะไรบาง จงใหเหตผลประกอบ
1.3 ประเภทของคอมพวเตอรการจำแนกประเภทของคอมพวเตอรทำไดหลายรปแบบ ในประวตศาสตรคอมพวเตอรอาจจะแบงตามเทคโนโลยทใช เชน รเลย หลอดสญญากาศ ทรานซสเตอร สำหรบคอมพวเตอรในยคปจจบน อาจแบงตามลกษณะการใชงาน คอเครองคอมพวเตอรสวนบคคล เชน คอมพวเตอรตงโตะ คอมพวเตอรแบบพกพา และคอมพวเตอรขนาดใหญสำหรบการประมวลผลจำนวนมาก เชน เครองคอมพวเตอรทใชในการพยากรณอากาศ ชอเรยกชนดของคอมพวเตอรตางๆ ทนาสนใจ มดงตอไปน
1. เครองบรการ (server) เปนการเรยกคอมพวเตอรททำหนาทใหบรการผใช หรอคอมพวเตอรอนๆ ทเชอมตอเขามา การใหบรการเปนไดหลากหลายรปแบบ เชน เวบไซต แฟมขอมล จดหมายอเลกทรอนกส เครองบรการหนงเครองสามารถใหบรการไดมากกวาหนงบรการ เครองบรการ
13โดย ชางภาพกองทพสหรฐอเมรกา, Public Domain, https://commons.wikimedia.org/w/index.php?curid=978770
12 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.16: เครองบรการ14
รปท 1.17: เมนเฟรม IBM Z915
สำหรบบางงาน เชน เวบไซตธรรมดา ไมจำเปนตองมประสทธภาพการประมวลผลสงนก โดยทวไปใชคำวา “เครองบรการ” ในสองความหมาย หนงคอเปนเครองทใหบรการ ไมวารปลกษณของเครองนนจะเปนคอมพวเตอรตงโตะ หรอรปแบบอนกตาม อกความหมายหนงของเครองบรการคอตวฮารดแวรทออกแบบมาเฉพาะเพอใชเปนเครองบรการ เชนรปท 1.16
2. เมนเฟรม (mainframe) หมายถงเครองคอมพวเตอรขนาดใหญ รองรบผใชจำนวนมากไดพรอมกน มความแมนยำเชอถอไดสง จงถกใชในการประมวลผลธรกรรมในระบบธนาคารและธรกจขนาดใหญ เชนเครอง IBM Z9 (รปท 1.17) เราอาจมองวาเมนเฟรมเปนเครองบรการขนาดใหญได เพราะเมนเฟรมมหนาทบรการประมวลผลธรกรรมใหผใช แตขนาดของตวเครองเมนเฟรมมกจะใหญกวาเครองบรการโดยทวไปมาก
3. ซเปอรคอมพวเตอร (supercomputer) หมายถงคอมพวเตอรขนาดใหญ สมรรถนะการประมวลผลสงมาก เชน IBM Blue Gene/P (รปท 1.18) ทสถาบนวจยแหงชาตอารกอนน ซเปอรคอมพวเตอรมกถกใชในการประมวลผลทางวทยาศาสตรและวศวกรรมศาสตร เชน การพยากรณอากาศ การสรางแบบจำลองทางวทยาศาสตร ซเปอรคอมพวเตอรเปนเครองคอมพวเตอรขนาดใหญเชนเดยวกบเมนเฟรม แตจดมงหมายในการใชงานตางกน เมนเฟรมตองการรองรบการทำธรกรรมจำนวนมาก จงมการตดตอกบสวนอานเขยนขอมลสง รองรบผใชจำนวนมาก แตอาจไมจำเปนตองมการคำนวณมาก ในขณะทซเปอรคอมพวเตอรอาจไมจำเปนตองอานเขยนมากนก แตตองคำนวณคาไดรวดเรว
4. คอมพวเตอรสวนบคคล (Personal Computer – PC) เปนคอมพวเตอรเพอใชงานทวไปเชน คอมพวเตอรตงโตะ และคอมพวเตอรวางตก มขนาดไมใหญมาก ราคาไมสง เหมาะสำหรบ
14โดย Rodzilla ท en.wikipedia [GFDL, CC-BY-SA-3.0 หรอ CC-BY-2.5], จาก Wikimedia Commons15โดย Ing. Richard Hilber (Self-photographed) [Public domain], ผาน Wikimedia Commons
1.4. องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน 13
รปท 1.18: ซเปอรคอมพวเตอร IBM Blue Gene/P16
การใชงานคนเดยว คอมพวเตอรสวนบคคลแบงออกเปนสองรปแบบ ไดแก แบบไมเคลอนท เชนคอมพวเตอรตงโตะ เนตทอป เปนตน และแบบพกพาได มกมขนาดเลก นำหนกเบา มแบตเตอรในตว เชน คอมพวเตอรวางตก (laptop, notebook) แทบเลตพซ (tablet pc) เปนตน
5. คอมพวเตอรฝงตว (embedded computer) เปนคอมพวเตอรขนาดเลกทถกออกแบบมาเพอทำงานเฉพาะทาง และตดตงอยในอปกรณอน เชน หนวยควบคมเครองยนต (Engine ControlUnit – ECU) ในรถยนต ระบบการทำงานในหมอหงขาว ตเยน เปนตน
ลองคดสมารตโฟน นบเปนคอมพวเตอรหรอไม หากเปนควรจดอยในหมวดใดขางตน หรอควรแยกเปนหมวดใหมเฉพาะ
1.4 องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน
ระบบคอมพวเตอรในปจจบนแบงออกเปนสองสวน ไดแก ฮารดแวร และ ซอฟตแวร โดยฮารดแวรคออปกรณตางๆ ทจบตองได และซอฟตแวรคอรหสคำสงเพอการทำงานตางๆ การแยกฮารดแวรออกจากซอฟตแวรเพอใหการออกแบบคอมพวเตอรสำหรบการทำงานตามความตองการเฉพาะทางตางๆสะดวกขน และใหซอฟตแวรเปนตวคำสงระบขนตอนวธในการทำงาน และใหฮารดแวรมหนาททำตามคำสงตางๆ เหลานนโดยใชสญญาณไฟฟา
16โดย Argonne National Laboratory ท Flickr [CC-BY-SA-2.0], ผาน Wikimedia Commons
14 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.19: แผงวงจรหลกของคอมพวเตอรตงโตะธรรมดา17
รปท 1.20: หนวยประมวลผลกลางของอนเทล (ซายและกลาง18) และแอปเปล (ขวา19)
ฮารดแวรของระบบคอมพวเตอรไมวาจะเปนขนาดใหญหรอเลกมกจะมแผงวงจรหลก (mainboard,motherboard) เชนรปท 1.19 เปนแกนหลก แลวประกอบอปกรณสวนตางๆ หรอเชอมตออปกรณอนๆ กบแผงวงจรหลก อปกรณทสำคญบนแผงวงจรหลก ไดแก หนวยประมวลผลกลาง และ หนวยความจำหลก เรยกอปกรณทงหมดทประกอบเขาดวยกนวา หนวยระบบ (system unit) และเรยกอปกรณอนๆ ทนำมาตอผานพอรตหรอชองทางการเชอมตอวา อปกรณตอพวงหรออปกรณรอบขาง (periph-eral device)
1.4.1 หนวยประมวลผลกลาง (Central Processing Unit – CPU)หนวยประมวลผลกลาง (รปท 1.20) เปนหวใจในการทำงานของคอมพวเตอร มหนาทคดคำนวณตามคำสงและควบคมการทำงานประสานกนของหนวยตางๆ ในระบบคอมพวเตอร หนวยประมวลผลกลางใน
17ดดแปลงจาก Jonathan Zander [GFDL, CC-BY-SA-3.0 หรอ CC-BY-SA-2.5], ผาน Wikimedia Com-mons
18โดย Eric Gaba [CC-BY-SA-3.0], ผาน Wikimedia Commons19โดย Henriok - Own work, Public Domain, https://commons.wikimedia.org/w/index.php?
curid=22310746
1.4. องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน 15
ปจจบนใชเทคโนโลยวงจรรวมขนาดใหญ ในชปหนงตวประกอบดวยทรานซสเตอรจำนวนมากซงทำงานรวมกน
หนวยประมวลผลกลางประกอบดวยหนวยการทำงานสองหนวยยอย ไดแก
1. หนวยควบคม (Control Unit) มหนาทควบคมการทำงานประสานกนของหนวยตางๆ ในเครอง2. หนวยคำนวณและตรรกะ (Arithmetic Logic Unit - ALU) มหนาทคดคำนวณตางๆ เชน การ
บวก ลบ คณ หาร เปรยบเทยบจำนวน มากกวา นอยกวา เทากบ ไมเทากบ เปนตน
สำหรบเครองคอมพวเตอรอยางงายอาจจะมหนวยประมวลผลกลางเพยงหนวยเดยว แตในปจจบนทการคำนวณตางๆ ซบซอนมากขนเรอยๆ ความตองการในการประมวลผลมากขน ในคอมพวเตอรหนงเครองอาจมหนวยประมวลผลกลางไดมากกวาหนงหนวย ในแตละหนวยอาจมแกน (core) ในการประมวลผลมากกวาหนงแกน
สถาปตยกรรมคอมพวเตอร หมายถง รายละเอยดองคประกอบในระบบคอมพวเตอร และลกษณะการทำงานรวมกนของอปกรณเหลานน สถาปตยกรรมคอมพวเตอรของหนวยประมวลผลกลางทใชกนมากในปจจบน เชน
• สถาปตยกรรม x86 ออกแบบโดย Intel ผลตโดยผผลตเชน Intel และ AMD ใชกนทวไปในคอมพวเตอรสวนบคคล
• สถาปตยกรรม ARM ออกแบบโดย ARM ผลตและนำไปดดแปลงกอนผลตโดยผผลตหลากหลายเชน Samsung Qualcomm Apple มกใชในอปกรณพกพา สมารตโฟน
สถาปตยกรรมทตางกนนนมวธการทำงานทตางกน ซอฟตแวรซงทำงานบนเครองซงมสถาปตยกรรมทตางกนนกจะตางกนตามไปดวย
สถาปตยกรรมคอมพวเตอรในปจจบนสวนใหญเปนสถาปตยกรรมฟอนนอยมนน (Von Neumannarchitecture, รปท 1.21) ซงใชหนวยความจำหลกเกบทงขอมลและคำสงทตองการใหคอมพวเตอรประมวลผล
เครอง 32 บตและ 64 บตคออะไรสำหรบคอมพวเตอรในปจจบน การทำงานของหนวยประมวลผลกลางคอการอานคำสงรวมถงคาตางๆทถกเกบไวในหนวยความจำหลก แลวทำงานตามคำสงไปเรอยๆ การเขาถงหนวยความจำหลกทำไดโดยการอางองถงเลขทอย (address) ของขอมลนนๆ ในหนวยความจำ เราจงสามารถจำแนกหนวยประมวลผลกลางตามขนาดของเลขทอยของหนวยความจำหลกของเครองนนๆ ไดดวย เชน เครอง32 บต หมายถง เครองนใชเลขทอยของหนวยความจำหลกขนาด 32 บต (มพนทในหนวยความจำ232 ตำแหนง) เปนตน หากเลขทอยของหนวยความจำมขนาดใหญขน แสดงวาหนวยประมวลผลกลางสามารถเขาถงหนวยความจำหลกโดยตรงไดมากขน หากเปนการประมวลผลขอมลขนาดใหญ เครองทเขาถงทอยจำนวนมากไดจะประมวลผลไดเรวกวาเครองทใชทอยขนาดเลกกวา เนองจากหากทอยม
16 บทท 1. คอมพวเตอรทำงานไดอยางไร
ALU
Register
Control Unit
RAM
CPU
System unit
keyb
oard
er
mous
e...
I/Oรปท 1.21: สถาปตยกรรมฟอนนอยมนน
ขนาดเลกแลวจะจำเปนตองมการเกบโปรแกรมหรอขอมลบางสวนในหนวยความจำภายนอก การเขาถงกจะทำไดชาลง
นอกจากการประมวลผลขอมลจำนวนมากแลว การออกแบบหนวยประมวลผลกลางจะออกแบบใหขนาดของจำนวนเตมและทศนยมโดยทวไปหนงจำนวนใชพนทในหนวยความจำเทากบขนาดของเลขทอยเพอประสทธภาพในการคำนวณของหนวยประมวลผล เมอเปรยบเทยบเครอง 32 บตกบเครอง 64 บตจงทำใหเครอง 64 บตซงเกบขอมลทศนยมไดละเอยดกวามนยสำคญหรอความแมนยำในการคำนวณสงกวาเครอง 32 บตดวย
การวดความเรวของคอมพวเตอรผใชมกบอกวาคอมพวเตอรทำงานได “เรว” โดยวดจากความเรวในการตอบสนองตอคำสงตางๆ ทผใชสง คอมพวเตอรอเลกทรอนกสนนทำงานตามสญญาณนาฬกาของหนวยประมวลผลกลาง โดยในหนงรอบของสญญาณนาฬกาอาจจะทำไดหนงคำสง หรอมากนอยกวานนกไดตามแตการออกแบบ การวดความเรวในการทำงานของคอมพวเตอรอยางคราวๆ อาจเทยบไดจากความเรวของสญญาณนาฬกา เชนหนวยประมวลผลกลางมความความถสญญาณนาฬกา 2.8GHz หมายถง ทำงานได 2.8 พนลานรอบตอวนาท กนาจะทำงานไดเรวกวาหนวยประมวลผลกลางซงมความถสญญาณนาฬกานอยกวาน อยางไรกตาม จำนวนคำสงทหนวยประมวลผลกลางทำงานไดในหนงรอบของสญญาณนาฬกานนอาจตางกนไปตามการออกแบบ ในทางทฤษฎ การวดความเรวในการทำงานของคอมพวเตอรจงวดจากจำนวนคำสงทหนวยประมวลผลกลางทำงานในหนงหนวยเวลา หนวยการวดสมรรถนะนเรยกวา MIPS (Million In-structions Per Second) คอการนบจำนวนคำสงทหนวยประมวลผลกลางสามารถทำงานไดในหนง
1.4. องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน 17
รปท 1.22: ลำดบชนของหนวยความจำภายในหนวยระบบ
วนาท ไมวาจะเปนคำสงการคำนวณ หรอคำสงอานเขยนขอมลในคอมพวเตอรขนาดใหญทมการประมวลผลสงมากนน งานสวนใหญจะเปนการคำนวณเลขทศนยม
การเปรยบเทยบสมรรถนะการคำนวณของคอมพวเตอรขนาดใหญจงมกจะนบเปนจำนวนคำสงคำนวณเลขทศนยมททำไดในหนงวนาท เรยกวา FLOPS (Floating-point Operations Per Second)แทน
หนวยประมวลผลกลางของคอมพวเตอรสวนบคคลทวไปในปจจบน (พ.ศ. 2558) สามารถทำคำสงทศนยมได 4 คำสงใน 1 รอบสญญาณนาฬกา หากมแกนประมวลผล 1 แกน และความถสญญาณนาฬกา2.5GHz คอมพวเตอรเครองนจะมประสทธภาพในทางทฤษฎ 4 × 2.5 × 109=10 GFLOPS เปนตน
ซเปอรคอมพวเตอรทมความเรวสงในปจจบน (มถนายน 2559) คอเครอง Sunway TaihuLightของประเทศจน ประกอบดวยแกนประมวลผลกวาสบลานแกน ทำความเรวสงสดไดถง 93.01 × 1015
FLOPS (93.01 PFLOPS)20
1.4.2 หนวยความจำภายใน (Internal memory)ในการประมวลผลตางๆ จำเปนตองมหนวยความจำเปนเสมอนทเกบขอมลรวมถงเกบคำสงตางๆ ทจะสงใหหนวยประมวลผลและตรรกะใชงาน หนวยความจำในคอมพวเตอรแบงโดยความใกลชดกบหนวยประมวลผลกลางออกเปนลำดบชนดงรปท 1.22
หนวยความจำทเขาถงไดโดยตรงจากหนวยประมวลผลกลางเรยกวา หนวยความจำปฐมภม หรอหนวยความจำภายใน แบงไดเปนสองประเภท คอ
1. หนวยความจำทอยภายในหนวยประมวลผลกลาง ไดแก รจสเตอร (register) และ แคช (CPUcache)
2. หนวยความจำหลก เปนหนวยความจำทอยนอกหนวยประมวลผลกลาง ไดแก แรม (RAM)20https://www.top500.org/lists/2016/06/
18 บทท 1. คอมพวเตอรทำงานไดอยางไร
หนวยความจำทไมสามารถเขาถงไดโดยตรงจากหนวยประมวลผลกลาง แตยงอยในหนวยระบบของคอมพวเตอร เรยกวา หนวยความจำทตยภม นอกจากนยงมหนวยความจำสำรองทไมไดอยในหนวยระบบอกดวย
ในตอนนจะกลาวถงเฉพาะหนวยความจำภายใน การทำงานกบหนวยความจำของคอมพวเตอรทำเปนลำดบชนเรยงตามความเรวในการเขาถง โดยระดบบนสดคอรจสเตอร ซงมความจนอยทสดแตอานเขยนไดเรวทสด แคชมความจมากกวารจสเตอร แตการอานเขยนทำไดชากวา คอมพวเตอรสมยใหมอาจจะมแคชไดหลายระดบ เชน แคช L1 แคช L2 เปนตน โดยทแคช L1 (ระดบ 1) จะเขาถงไดเรวกวาแคชในระดบตำกวา แรมมความจมากทสดในหนวยความจำสามรปแบบน แตกเขาถงไดชาทสดเชนกน หากตองการทำงานใหเรว กควรใชรจสเตอรใหมากทสด แตหากมขอมลมากเกนกวาจะเกบไดหมดในรจสเตอร กจำเปนตองใชหนวยความจำในลำดบรองๆ ลงมาเพมเตม การทำงานทรวดเรวของคอมพวเตอรจงขนอยกบการใชหนวยความจำทกระดบรวมกนใหไดประสทธภาพสงทสด
รปท 1.23: RAM21
เทคโนโลยในการผลตรจสเตอร แคช และ แรมนนตางกน จงสงผลใหมความจและความเรวในการเขาถงตางกน หนวยความจำทงสามรปแบบนเปนหนวยความจำแบบลบเลอนได (Volatile memory) ซงจำเปนตองมกระแสไฟเลยงตลอดเวลาทเกบขอมล เมอตดกระแสไฟเชน ปดเครอง ขอมลทงหมดในหนวยความจำเหลานจะหายไป
แรม (Random Access Memory – RAM) หมายถง หนวยความจำเขาถงแบบสม แรมแบงออกเปน 2 ชนดตามเทคโนโลยทใชใน
การผลตคอ SRAM (Static RAM) และ DRAM (Dynamic RAM) แรมทใชในคอมพวเตอรสวนบคคลทวไปในปจจบนคอ DDR SDRAM (Double Data Rate Synchronous DRAM) ซงเปนDRAM ชนดหนง หนวยวดความเรวในการเขาถงแรมมกจะวดเปนจำนวนครงการถายโอนขอมลในหนงหนวยเวลา เชน DDR3-800E เปน DDR แรมรนท 3 มอตราการถายโอนขอมล 800 ลานครงในหนงวนาท เปนตน
1.4.3 หนวยความจำภายนอก (External memory)หนวยความจำภายนอกหรอหนวยความจำทตยภมนนไมสามารถถกเรยกใชโดยตรงจากหนวยประมวลผลกลาง แตถกเรยกใชผานอปกรณอาน/เขยนขอมลอกตอหนง หนวยความจำภายนอกเปนหนวยความจำชนดไมลบเลอน (Non-volatile memory) ซงไมจำเปนตองมกระแสไฟเลยงเพอเกบขอมล มกมความจขอมลสงกวาหนวยความจำภายในมาก แตกเรยกใชไดชากวามากเชนกน หนวยความจำภายนอกจงมกใชเปนแหลงสำรองขอมล แตไมใชในการประมวลผลหากไมจำเปน ชนดของหนวยความจำภายนอกทนาสนใจ เชน
• หนวยเกบแบบจานแมเหลก เชน ฮารดดสก (Hard Disk Drive - HDD, รปท 1.24 (ซาย))อาศยทศทางขวแมเหลกในการเกบขอมล ในการอานขอมลจะมหวอานขยบเลอนไป ณ ตำแหนงท
21Public Domain, https://commons.wikimedia.org/w/index.php?curid=647267
1.4. องคประกอบและการทำงานของฮารดแวรคอมพวเตอรในปจจบน 19
รปท 1.24: HDD (ซาย) และ SSD(ขวา) 22 รปท 1.25: แผนซด23
รปท 1.26: ยเอสบแฟลชไดรฟ24
เกบขอมลและอานขวแมเหลกทเกบไว ณ ตำแหนงนน หวอานเปนจดเปราะบางของฮารดดสก หากถกกระแทกอาจเสยหายไดงาย
• จานแสง (optical disc) เชน แผนซด รปท 1.25 แผนดวด แผนบลเรย อาศยหลกการสะทอนแสงในการเกบขอมล การบนทกขอมลลงไปในแผนคอการปรบการสะทอนแสงของพนผว ณ บรเวณนน เพอใหแทนคาบตทตองการ
• รอม (Read Only Memory – ROM) มกมลกษณะเปนชปทถกบดกรตดกบแผงวงจรเปนหนวยความจำซงไมสามารถแกไขคาทเกบไวได หรอในบางกรณอาจทำไดแตไมงายนก รอมจงมกใชเปนทเกบคำสงทใชในการเรมตนทำงานเมอเปดเครอง เปนทเกบเฟรมแวรซงเปนคำสงในการจดการฮารดแวรของอปกรณนนๆ เปนตน รอมในยคแรกนนตองกำหนดคาขอมลในรอมขณะผลต และแกไขคาไมได ซงไมสะดวกในการใชงาน จงมการพฒนาใหผใชสามารถบรรจขอมลลงในรอมไดครงเดยว เรยกวา (Programmable ROM – PROM) จากนนพฒนาตอใหสามารถลบคาทเกบไวไดโดยใชอปกรณพเศษ เพออำนวยความสะดวกในการแกไขคาโดยผใช (ErasablePROM - EPROM) และทำใหลบคาทเกบไวไดโดยใชสญญาณไฟฟา (Electrically ErasablePROM – EEPROM) ตามลำดบ สำหรบ EEPROM ถงแมเราจะแกไขคาไดหลายครง เรายงคงเรยก EEPROM วาเปนหนวยความจำแบบไมสามารถแกไขคาได เนองจากวธการแกไขคานนคอนขางซบซอน
• หนวยความจำแบบแฟลช (Flash memory) เปนหนวยความจำทลบและบนทกใหมไดเชนเดยวกบ EEPROM แตใชเทคโนโลยทตางออกไป รปแบบของหนวยความจำแบบแฟลช เชน
– ยเอสบแฟลชไดรฟ (USB flash drive) ดงรปท 1.26 ซงมาทดแทนฟลอปปดสก (floppydisk) ทเปนหนวยเกบขอมลแบบจานแมเหลก เพราะมความจสงกวา และอานเขยนไดเรวกวา
– เอสดการด (SD card) ใชมากในการเกบขอมลสำหรบอปกรณพกพา กลองดจทล– โซลดสเตตไดรฟ (Solid State Drive – SSD) เปนดสกแบบแฟลช ใชเปนดสกทดแทนฮารดดสกแบบจานแมเหลก จดเดนของดสกแบบแฟลชทเหนอกวาดสกแบบจานแม
23โดย husin.sani [CC-BY-SA-2.0], ผาน Flickr24โดย Ubern00b [GFDL หรอ CC-BY-SA-3.0], ผาน Wikimedia Commons25โดย Ravenperch - camera photograph, CC0, https://commons.wikimedia.org/w/index.php?
curid=19319839
20 บทท 1. คอมพวเตอรทำงานไดอยางไร
เหลกคอ การอานขอมลทำไดเรวกวามาก เพราะไมมสวนเชงกลแบบหวอานของฮารดดสก(รปท 1.24) นอกจากนยงสะดวกแกการพกพา เนองจากไมมสวนเปราะบางแบบหวอานของฮารดดสกญฯ แตขอเสยคอยงทำความจขอมลไดไมมากเทาดสกแบบจานแมเหลก และมราคาสง
1.4.4 สวนรบเขา/สวนสงออก (Input/Output Unit - I/O Unit)ขอมลเขาและออกมไดหลากหลายรปแบบ เชน ภาพ เสยง ตวอกขระ สวนรบเขาและสงออกเปนตวกลางการเชอมตอกบผใชหรอระบบอนๆ ตวอยางของอปกรณรบเขา เชน คยบอรด เมาส เมาสปากกา เปนตนตวอยางของอปกรณสงออก เชน จอภาพ เครองพมพ ลำโพง เปนตน การควบคมอปกรณรบเขาและสงออกทำผานระบบปฏบตการและโปรแกรมขบอปกรณซงเปนซอฟตแวร
เนองจากการประมวลผลทงหมดของคอมพวเตอรจะทำในหนวยความจำหลกเทานน เมอตองการรบขอมลจากสวนรบเขา หนวยประมวลผลกลางจะสงใหถายโอนขอมลจากชองทางเชอมตอไปเกบไวในหนวยความจำ ในทำนองเดยวกน เมอตองการสงขอมลออกทสวนสงออก หนวยประมวลผลกลางกจะสงใหนำขอมลจากหนวยความจำออกไปทางชองทางเชอมตอเชนกน รปแบบและวธการรบ/สง/สอสารของแตละอปกรณถกกำหนดโดยผผลต หรอมาตรฐานกลางตางๆ และนำไปใชโดยโปรแกรมขบสำหรบอปกรณนน ๆ
ลองคดหากไมมหนวยความจำภายนอก มเฉพาะหนวยประมวลผลกลาง หนวยความจำภายใน และสวนรบเขา/สวนสงออก คอมพวเตอรจะสามารถทำงานไดหรอไม จงใหเหตผลประกอบ
1.5 ประเภทและการทำงานของซอฟตแวรเนองจากความตองการใหคอมพวเตอรทำงานนนซบซอนขนเรอยๆ การปรบแตงฮารดแวรเฉพาะสำหรบการทำงานแตละอยางนนสนเปลองมาก เมอมการออกแบบคอมพวเตอรใหสามารถโปรแกรมไดแลว การพฒนาคอมพวเตอรใหทำงานไดตามความตองการกเปลยนไปจากการออกแบบฮารดแวรใหม ไปเนนทการเขยนชดคำสงใหคอมพวเตอรทำงานตามทตองการแทน
คำวา โปรแกรม นอกจากจะหมายถงการปรบแตงโดยชดคำสงใหคอมพวเตอรทำงานตามตองการแลว โปรแกรมยงหมายถงตวชดคำสงทสงใหเครองทำงานไดอกดวย ในความหมายหลงน โปรแกรมกบซอฟตแวรคอสงเดยวกน
ซอฟตแวรแบงออกเปนสองระดบ คอ ซอฟตแวรระบบ และซอฟตแวรทวไป โดยทซอฟตแวรระบบคอซอฟตแวรทใชจดการการทำงานของคอมพวเตอร ทำงานใกลชดกบฮารดแวร และซอฟตแวรทวไปคอซอฟตแวรทออกแบบมาเพอตอบสนองความตองการใชงานของผใชโดยผานซอฟตแวรระบบอกตอหนง
ตวอยางของซอฟตแวรทนาสนใจมดงน
1.5. ประเภทและการทำงานของซอฟตแวร 21
1.5.1 ไบออสเมอเปดเครองหรอกดสวตชรเซต เรยกวาการทำโคลดบต (cold boot) ซอฟตแวรตวแรกทเรมทำงานคอไบออส (BIOS) ซงจะเรมจากการทดสอบหนวยความจำ สวนตอประสาน อปกรณตางๆ ของเครองเมอเปดเครองใหม เรยกวา POST (Power-On-Self-Test – POST)
รปท 1.27: ชปไบออส26
หลงจากทดสอบอปกรณตางๆ เรยบรอยไบออสจะหาอปกรณทตดตงระบบปฏบตการ แลวสงใหเครองถายขอมลจากระบบปฏบตการเขาไปในหนวยความจำ จากนนคอมพวเตอรจะเรมทำงานจากระบบปฏบตการ คาตางๆ ของไบออสถกเกบอยในหนวยความจำแบบไมลบเลอนบนแผงวงจรหลก อปกรณทมกใชเกบไบออสในสมยกอนนนใชเทคโนโลย CMOS จงมกมการเรยกหนวยความจำทใชเกบไบออสนวา CMOS ไปดวย
สำหรบการสงเรมตนทำงานใหม (restart)ภายในระบบปฏบตการ เรยกวาการทำวอรมบต (warm boot) เมอเครองเรมตนทำงานใหม ไบออสจะไมมการทำ POST อก ซงจะประหยดเวลาในการเรมตนทำงานใหมจากการทำโคลดบตลงไปไดพอสมควร
1.5.2 ระบบปฏบตการระบบปฏบตการมหนาทตดตอกบหนวยประมวลผลกลางโดยตรงเพอใหคอมพวเตอรทำงานตามตองการระบบปฏบตการแตละตวจงออกแบบมาโดยยดกบสถาปตยกรรมของหนวยประมวลผลกลาง ตวอยางของระบบปฏบตการทเปนทนยม เชน
• จาก Microsoft มทงรนสำหรบเครองบรการ เครองคอมพวเตอรสวนบคคล และอปกรณพกพา
• สำหรบเครองคอมพวเตอรสวนบคคลและ สำหรบอปกรณพกพาของ Apple
• ลนกซ (Linux) มหลากหลายดสโทร เชน , , ,• เปนระบบปฏบตการสำหรบอปกรณพกพาของ Google ซงมฐานมาจาก Linux
หนาทหลกของระบบปฏบตกาารคอการจดสรรทรพยากรสำหรบโปรแกรม หนาทเสรมอนๆ ของระบบปฏบตการ เชน การจดการการเชอมตอเครอขาย การรกษาความปลอดภย การอำนวยความสะดวกในการตอประสานผใช เปนตน
26โดย Tremaster [CC-BY-SA-3.0], ผาน Wikimedia Commons
22 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.28: การจดสรรทรพยากรและจดลำดบการทำงานโดย Ubuntu
การจดสรรทรพยากรสำหรบโปรแกรมทรพยากรทสำคญในการประมวลผลของคอมพวเตอรคอหนวยประมวลผลกลาง และหนวยความจำระบบปฏบตการบางรปแบบอาจยอมใหโปรแกรมหลายๆ โปรแกรมทำงานพรอมกนได (multitasking)เชน การเปดเพลงฟงในขณะทพมพงานดวยโปรแกรมประมวลคำ ระบบปฏบตการจะแบงสวนการใชงานหนวยประมวลผลกลางและหนวยความจำใหโปรแกรมตางๆ ทกำลงทำงานอย โปรแกรมทกำลงตอบสนองตอผใชจะเรยกวาโปรแกรมแอคทฟ (active program) หรอโปรแกรมพนหนา (foregroundprocess) ในขณะทโปรแกรมซงกำลงทำงานแตไมไดตอบสนองโดยตรงตอผใช เชนโปรแกรมเลนเพลงในตวอยางขางตน เรยกวาโปรแกรมพนหลง (background process) นอกจากน การจดลำดบความสำคญของงานทตองทำเพอใหโปรแกรมตางๆ ทำงานไดลลวง กเปนหนาทของระบบปฏบตการเชนกน
เนองจากคอมพวเตอรเครองหนงอาจมหนวยประมวลผลไดหลายหนวย (multiprocessor) ระบบปฏบตการจงมหนาทแบงงานทตองทำใหกบหนวยประมวลผลแตละหนวย หรอใชหนวยประมวลผลหลายๆ หนวยทำงานรวมกน นอกจากน ระบบปฏบตการทมความสามารถสงยงสามารถจดการกบหนวยประมวลผลกลางชนดทมหลายแกนประมวลผลไดอยางมประสทธภาพ ในระบบคอมพวเตอรทรองรบผใชมากกวาหนงคนในเวลาเดยวกน (multiuser) ระบบปฏบตการกมหนาทแบงทรพยากรรวมถงจดลำดบความสำคญของงานใหกบผใชทกคนดวย
การใชงานหนวยความจำหลกใหมประสทธภาพกขนกบความสามารถของระบบปฏบตการเชนเดยวกน การทำงานของคอมพวเตอรในสถาปตยกรรมฟอนนอยมนนตองมการถายโอนขอมลทตองการใชงานรวมถงโปรแกรมเขาไปอยในหนวยความจำหลกกอนจะใหหนวยประมวลผลกลางทำงาน กรณทโปรแกรมและขอมลมขนาดเลกกวาขนาดของหนวยความจำหลกหรอมหนวยความจำหลกเหลอนนมกจะไมมปญหา แตหากโปรแกรมและขอมลมขนาดใหญเกนกวาทหนวยความจำหลกทงหมดจะเกบได ระบบปฏบตการจะมหนาทจดสรรหนวยความจำเสมอน (virtual memory) เพมเตมให เพอใหโปรแกรมยงสามารถทำงานได หนวยความจำเสมอนคอการใชหนวยความจำภายนอก เชน ดสก เปนเสมอนหนวยความจำหลก แลวใชการสบคา (swap) ในหนวยความจำเสมอนกบหนวยความจำหลกจรงแทน เพอใหหนวยประมวลผลกลางสามารถประมวลผลไดตามปกต แตเนองจากหนวยความจำภายนอกนนทำงาน
1.5. ประเภทและการทำงานของซอฟตแวร 23
ชากวาหนวยความจำภายในมาก และการสบคากตองใชเวลา หากจำเปนตองใชหนวยความจำเสมอนคอมพวเตอรจะทำงานไดชาลงอยางเหนไดชด
นอกจากการใชงานหนวยประมวลผลกลางและหนวยความจำแลว ระบบปฏบตการยงจดลำดบการใชงานอปกรณตอพวงตางๆ ไมวาจะเปนอปกรณอานเขยนขอมล อปกรณเครอขาย หรออปกรณอนๆรวมถงชวยอำนวยความสะดวกใหกบโปรแกรมตางๆ ทเรยกใชงานอปกรณนนๆ ดวย ตวอยางการใชงานอปกรณตอพวงอยางมประสทธภาพโดยระบบปฏบตการ เชน การทำงานกบเครองพมพ โดยปกตแลวความเรวในการประมวลผลของหนวยประมวลผลกลางนนสงกวาความเรวในการพมพมาก หากตองรอจนพมพเสรจจงจะทำงานอนตอไดกจะใชหนวยประมวลผลกลางไดไมเตมประสทธภาพ ระบบปฏบตการจงอาจกนพนทในหนวยความจำเพอเปนทพกขอมลไว เมอสงใหพมพเอกสาร ขอมลทตองการพมพจะถกนำไปเกบไวททพกขอมล เครองพมพจะสามารถอานขอมลจากทพกขอมลน ในขณะเดยวกนหนวยประมวลผลกลางกสามารถไปทำงานอยางอนตอได
การเชอมตอกบระบบเครอขายการเชอมตอกบคอมพวเตอรเครองอนๆ ในระบบเครอขายจำเปนตองมโพรโทคอลซงเปนขอตกลงกลางในการสอสารระหวางกน โพรโทคอลเหลานไดรบการสนบสนนจากระบบปฏบตการ ไมวาเครองในระบบเครอขายจะใชระบบปฏบตการใด หากใชโพรโทคอลเดยวกน เครองเหลานนจะสามารถสอสารกนได
ดแลรกษาความปลอดภยเนองจากระบบปฏบตการเปนซอฟตแวรทบรหารจดการทรพยากรตางๆ ของเครองโดยตรง ระบบปฏบตการจงอาจมความสามารถในการอนญาต (authorize) การเขาถงทรพยากรตางๆ เพอรกษาความปลอดภยโดยรวมของระบบอกดวย การจดการนมกจะผกกบการตรวจสอบและยนยนตวตนของผใชงาน(identification and authentication) วามสทธ (privilege) ในการเขาถงทรพยากรหรอไม
สนบสนนสวนตอประสานผใชสวนตอประสานผใชทำหนาทรบคำสงตางๆ จากผใชมาสงใหสวนประมวลผล และแสดงผลลพธคนใหผใชสวนตอประสานผใชแบงไดเปน 2 รปแบบ ไดแก
1. สวนตอประสานแบบกราฟก (Graphic User Interface – GUI) ผใชสงการผานภาพปมตางๆขอดคอใชงานไดงาย เหมาะสำหรบผใชทวไป แตคอมพวเตอรตองแบงทรพยากรมาใชในการสรางรปภาพตางๆ ดวย แทนทจะใชเพอการคำนวณคาเพยงอยางเดยว
2. สวนตอประสานแบบคำสง (Command Line Interface – CLI) ดงตวอยางในรปท 1.29 ผใชสงการผานแปนพมพ ขอดคอสงการไดรวดเรว ปรบแตงไดละเอยด แตคำสงมกมรายละเอยดเฉพาะตว ทำใหตองใชเวลาในการเรมตนเรยนรมาก
24 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.29: สวนตอประสานแบบคำสง
รปท 1.30: ตวอยางรนของโปรแกรมขบอปกรณ
1.5.3 โปรแกรมขบอปกรณ (Device driver)
การทำงานกบอปกรณรอบขางตางๆ เชน เครองพมพ นน ระบบปฏบตการจะอาศยโปรแกรมขบอปกรณซงมกจะเรยกทบศพทสนๆ วา ไดรฟเวอร เปนตวกลางในการสอสารกบฮารดแวรของอปกรณรอบขางเหลานน โปรแกรมขบอปกรณกเปนซอฟตแวรระบบชนดนง จะเหนไดวาโปรแกรมขบอปกรณขนอยกบตวอปกรณ และยงขนอยกบระบบปฏบตการอกดวย ดงนนอปกรณตางรนกนจงอาจมโปรแกรมขบทตางกนแมจะผลตโดยผผลตเดยวกน และอปกรณชนเดยวกนแตทำงานกบระบบปฏบตการทตางกนอาจจำเปนจะตองใชโปรแกรมขบทตางกนเชนกน เชนในรปท 1.30 แสดงรนตางๆ ของโปรแกรมขบอปกรณสำหรบเครองพมพ ซงขนอยกบระบบปฏบตการดวย
1.6. การโปรแกรมคอมพวเตอรเบองตน 25
1.5.4 ซอฟตแวรทวไปหรอโปรแกรมประยกตซอฟตแวรทวไปถกออกแบบมาเพอตอบสนองรปแบบการใชงานของผใช เชน โปรแกรมประมวลคำโปรแกรมตารางทำงาน โปรแกรมการนำเสนอ โปรแกรมเลนเพลงและภาพยนตร เปนตน ซอฟตแวรเหลานสงการใหคอมพวเตอรทำงานโดยผานระบบปฏบตการอกชนหนง การแยกซอฟตแวรทวไปออกมาใหทำงานบนระบบปฏบตการทำใหการออกแบบและเขยนซอฟตแวรทำไดสะดวกขน ผเขยนซอฟตแวรไมจำเปนตองเขาใจรายละเอยดการทำงานของฮารดแวร เพยงอาศยคำสงตางๆ ทระบบปฏบตการมใหสงใหทำงานตามวตถประสงคทตองการกเพยงพอ
จะเหนวาประสทธภาพการทำงานของซอฟตแวรตางๆ นน นอกจากจะขนกบการออกแบบของผสรางซอฟตแวรแลว ยงขนกบประสทธภาพของระบบปฏบตการ รวมถงการทำงานของหนวยประมวลผลกลางอกดวย ในปจจบนมความพยายามเพมประสทธภาพการประมวลผลทใชบอย เชน งานการประมวลผลภาพ ดวยการเพมคำสงเฉพาะทางเหลานลงไปในหนวยประมวลผลกลาง เพอใหการคำนวณทำไดเรวขนกวาการคำนวณปกตทวไป
ลองคดMacbook เครองหนงลงระบบปฏบตการ Windows และ OS X ไว ในระบบปฏบตการทงสองมSteam ซงเปนแพลตฟอรมสำหรบเลนเกมอย นสตซอเกม CIV ซงเลนไดใน Windows แบบไมมปญหาแตเมอเปดเกมเดยวกนใน OS X แลว กลบพบปญหาเกมปดตวเองอตโนมต ภาพกระตกไมลนไหล และอนๆ อกหลายประการ นสตคดวาสาเหตของปญหาเกดจากอะไร
1.6 การโปรแกรมคอมพวเตอรเบองตน1.6.1 ภาษาโปรแกรมการควบคมคอมพวเตอรในยคแรกทำกบหนวยประมวลผลกลางโดยตรง ยคเรมตนนน การปอนคำสงทำโดยภาษาเครองเปนรหสเลขฐานสอง ซงมโอกาสผดพลาดไดงาย รวมถงการแกไขปรบปรงโปรแกรมกทำไดยาก จงมการใชคำสงภาษาแอสเซมบล (assembly) ซงเปนการแทนคำสงภาษาเครองตางๆ ดวยตวอกษรภาษาองกฤษทสอความหมาย ทำใหการสงการงายขน รปท 1.31 แสดงคำสงภาษาเครองของเครอง MIPS32 ในรปของเลขฐานสบหกในกรอบสแดงทางซาย และคำสงภาษาแอสเซมบลทเทยบเทากนทางขวา ในการทำงานจรงนน เครองจำเปนตองแปลงคำสงแอสเซมบลใหกลบไปเปนเลขฐานสองเพอทำงานอกครงอยด โปรแกรมแปลงคำสงนเรยกวา แอสเซมเบลอร (assembler)
ภาษาแอสเซมบลนนไมเหมาะสำหรบการเขยนซอฟตแวรขนาดใหญ เนองจากมคำสงนอย จำเปนตองใชหลายคำสงในการทำงานอยางหนง จงเกดภาษาระดบสงขน โดยคำสงตางๆ จะอยในรปแบบคลายคลงภาษาองกฤษ มชดคำสงตางๆ เตรยมไวให เพอใหสะดวกในการพฒนาและแกไขปรบปรงโปรแกรม ชดของคำสงทเขยนเรยกวา รหสตนฉบบ (source code) เมอเขยนเสรจและตองการนำไปใชงาน ก
26 บทท 1. คอมพวเตอรทำงานไดอยางไร
รปท 1.31: ภาษาเครองและภาษาแอสเซมบล
ตองแปลงรหสตนฉบบเหลานไปเปนภาษาเครองทเครองรจก การแปลรหสตนฉบบอาศยซอฟตแวรระบบทเรยกวา ซอฟตแวรแปลภาษา ซงกนบเปนเปนซอฟตแวรระบบดวย
ภาษาโปรแกรมแบงออกเปนสองระดบ ไดแก
1. ภาษาระดบตำ เปนภาษาทตดตอกบเครองไดโดยตรงหรอใกลเคยง ไดแก ภาษาเครอง และภาษาแอสเซมบล
2. ภาษาระดบสง เปนภาษาทใชโครงสรางคำสงคลายภาษาองกฤษ มคำสงใหใชมาก สะดวกในการใชเขยนโปรแกรมมากกวาภาษาระดบตำ แตในการใชงานนนจำเปนตองใชคอมไพเลอรหรออนเทอรพรเตอรแปลคำสงเหลานใหกลายเปนภาษาเครองกอนจงจะทำงานได
ภาษาโปรแกรมทนาสนใจ1. ภาษาซและภาษาซพลสพลส (C และ C++)
ภาษาซเปนภาษาโปรแกรมระดบสง พฒนามาตงแตป 1967 โดยเดนนส รทช (Dennis Ritchie)มลกษณะเปนภาษาโปรแกรมเชงโครงสราง ใชกนทวไปตงแตการเขยนซอฟตแวรระบบไปจนถงการเขยนโปรแกรมประยกต คอมไพเลอรสำหรบภาษาซมในแทบทกสถาปตยกรรมและระบบปฏบตการ ภาษาซมคำสงตางๆ ทใชในการจดการทรพยากรตางๆ ของเครองโดยตรง จงมกจะใชในการเขยนซอฟตแวรระบบและซอฟตแวรทตองการปรบแตงการใชทรพยากรตางๆ ของเครองเองภาษาซพลสพลสพฒนาตอจากภาษาซ โดยออกแบบใหเปนภาษาโปรแกรมเชงวตถ เพอใหสะดวกตอการพฒนาซอฟตแวรมากขน และยงคงมประสทธภาพในการจดการทรพยากรของเครองไดสงเชนเดยวกบภาษาซ การใชภาษาซพลสพลสพบมากในงานการประมวลผลภาพ และงานอนๆ ทตองการประสทธภาพในการคำนวณสง
2. ภาษาจาวา (Java)
1.6. การโปรแกรมคอมพวเตอรเบองตน 27
ภาษาจาวาพฒนาโดยซนไมโครซสเตมส (Sun Microsystems) ปจจบนอยในความดแลของออราเคล (Oracle) เปนภาษาโปรแกรมเชงวตถ ซงเหมาะกบการออกแบบซอฟตแวรขนาดใหญปรบปรงแกไขเพมเตมไดสะดวก จดเดนของภาษาจาวาคอเมอคอมไพลแลวจะไดไบตโคด (byte-code) แทนทจะเปนคำสงภาษาเครอง ในการทำงาน จะมซอฟตแวรสำหรบทำงาน (runtimeenvironment) ซงจะแปลไบตโคดเปนภาษาเครองซงจำเพาะกบแตละเครองอกทหนง จะเหนวาโปรแกรมซงเขยนโดยภาษาจาวา เมอคอมไพลแลวจะไดไบตโคด ซงสามารถนำไปใชงานในเครองอนไดโดยไมตองคอมไพลใหม โดยไมจำกดทงสถาปตยกรรมและระบบปฏบตการ ถาหากมซอฟตแวรสำหรบทำงานตดตงอย
3. ดอตเนตเฟรมเวรก (.NET)ออกแบบโดยไมโครซอฟตเพอการทำงานบนเครองหลากหลายระบบปฏบตการ ดอตเนตเฟรมเวรกเปนแพลตฟอรมสำหรบพฒนาซอฟตแวรซงสนบสนนภาษาโปรแกรมจำนวนมาก ตวอยางภาษาดอตเนตทออกแบบโดยไมโครซอฟต เชน VB.NET C# เปนตน ผเขยนซอฟตแวรสามารถเขยนรหสตนฉบบดวยภาษาใดกไดทเฟรมเวรกสนบสนน คอมไพเลอรจะแปลรหสตนฉบบเปนภาษากลาง (Common Intermediate Language - CIL) แลวจะมซอฟตแวรสำหรบทำงานซงแปลภาษานไปเปนคำสงสำหรบเครองในการทำงานอกครง ดงนน ดอตเนตเฟรมเวรกจะเหมอนกบจาวาในแงทสามารถคอมไพลรหสตนฉบบแลวนำไปใชทอนไดโดยไมตองคอมไพลซำ แตมขอดกวาทใชภาษาใดกไดทผเขยนถนดในการเขยน
4. ภาษาไพธอน (Python) ภาษาไพธอนเปนภาษาสครปต ซงการทำงานจะอาศยอนเทอรพรเตอรในการแปล ใชไดทงการเขยนโปรแกรมเชงโครงสรางและเชงวตถ จดเดนของไพธอนคอมชดคำสงสำหรบงานตางๆ หลากหลาย ใชคำสงเพยงไมกบรรทดในการสงใหคอมพวเตอรทำงานเมอเทยบกบคำสงทตองใชในภาษาซหรอจาวา เรยนรไดงายสำหรบผเรมตน ปจจบนไพธอนเปนทนยมในงานวทยาศาสตร และงานเวบไซต
5. ภาษาอาร (R) ภาษาอารเปนภาษาสครปตเชนเดยวกบไพธอน และอาศยอนเทอรพรเตอรในการแปลเชนเดยวกน ภาษาอารมกใชในงานสถต จดเดนของภาษาอารคอเรยนรไดงาย มฟงกชนตางๆดานสถต และสรางกราฟตางๆ จากการคำนวณไดงายและสวยงาม
1.6.2 ซอฟตแวรแปลภาษาการแปลรหสตนฉบบมสองรปแบบ แบบแรกคอแปลทงโปรแกรมใหเสรจเปนภาษาเครองทพรอมใชงานเราเรยกการแปลโปรแกรมแบบนวาการคอมไพล (compile) และเรยกซอฟตแวรการแปลรหสตนฉบบแบบนวา คอมไพเลอร (compiler) ตวอยางของภาษาโปรแกรมทใชคอมไพเลอรแปล เชน ซ ปาสคาล เบสก อกรปแบบในการแปลรหสตนฉบบคอการแปลคำสงแลวทำงานเลยทละคำสง ซอฟตแวรทใชในการแปลภาษาแบบนเรยกวา อนเทอรพรเตอร (interpreter) การแปลภาษารปแบบนใชกบภาษาทมลกษณะเปนสครปต เชน ไพธอน matlab R
ขนตอนการแปลรหสตนฉบบโดยคอมไพเลอรสรปไดดงรปท 1.32 โปรแกรมแปลภาษาจะแปลรหสตนฉบบทงหมดไปเปนออบเจกตโคด (object code) ซงเปนภาษาเครอง หากมขอผดพลาดในรหส
28 บทท 1. คอมพวเตอรทำงานไดอยางไร
รหสตนฉบบ คอมไพเลอร ออบเจกตโคด โปรแกรมเชอมโยง
โปรแกรมททำงานได ผลลพธ
ออบเจกตโคด
ออบเจกตโคด
ขอมล
รปท 1.32: ขนตอนการทำงานของคอมไพเลอร
อนเทอรพรเตอรรหสตนฉบบ:2/ขอมล
รหสตนฉบบ:1/ขอมล
รหสตนฉบบ:3/ขอมล
ผลลพธ:2
ผลลพธ:1
ผลลพธ:3
รปท 1.33: ขนตอนการทำงานของอนเทอรพรเตอร
ตนฉบบ คอมไพเลอรจะแสดงขอผดพลาดและใหผเขยนโปรแกรมแกไขใหถกตองกอนจะนำกลบมาแปลใหม เมอไมมขอผดพลาดแลวคอมไพเลอรจงจะแปลรหสตนฉบบทงหมดจนไดเปนออบเจกตโคด จากนนโปรแกรมเชอมโยง (linker) จะเชอมโยงออบเจกตโคดอนๆ ทเกยวของทอาจแปลไวลวงหนาแลว รวมกนเปนโปรแกรมทสามารถทำงานได (executable program) แลวจงสามารถสงทำงาน (execute) ใหโปรแกรมรบขอมลเขา (ถาม) ประมวลผล แลวแสดงผลลพธ (ถาม) ตอไป
การแปลโดยอนเทอรพรเตอรนนตางกบการแปลโดยคอมไพเลอรคอ อนเทอรพรเตอรจะเปนเสมอนลามแปลภาษาทแปลทละคำสงและใหคอมพวเตอรทำงานทนท และทำไปเรอยๆ จนกวาจะหมดรหสตนฉบบหรอพบขอผดพลาด หากมขอผดพลาดทคำสงใด อนเทอรพรเตอรจะหยดทำงาน ณ ตำแหนงนนพรอมกบแสดงขอผดพลาด หรอใหแกไขคำสง ณ ขณะนนแลวทำงานตอ
1.6.3 เครองมอในการพฒนาซอฟตแวรขนตอนการพฒนาซอฟตแวรเรมตนจากการออกแบบซอฟตแวรกอน ในการออกแบบจะกำหนดวตถหรอสวนตางๆ ทจะทำงานประสานกนในซอฟตแวร จากนนจะออกแบบการทำงานแตละอยางและการทำงานประสานกนระหวางสวนตางๆ ในซอฟตแวรนน ซงอาจะใชผงงานรปแบบตางๆ ชวยได
หลงจากออกแบบสวนตางๆ แลวจะเปลยนการออกแบบใหเปนรหสตนฉบบ ซงมกจะมรปแบบของรหสตนฉบบทสอดคลองกบการออกแบบอยแลว การเขยนรหสตนฉบบอาจใชซอฟตแวรทวไปใดๆ ทสามารถพมพขอความได แตในปจจบนมเครองมอชวยเหลอจำนวนมากทชวยในการเขยนรหสตนฉบบเรยกวา เครองมอชวยในการพฒนา (Integrated Development Environment - IDE) เชน
1.6. การโปรแกรมคอมพวเตอรเบองตน 29
Microsoft Visual Studio, Eclipse เปนตน นอกจาก IDE จะมความสามารถในการพมพขอความแลว ยงมความสามารถในการแสดงความเชอมโยงของสวนตางๆ ในรหสตนฉบบ และยงมกจะรวมคอมไพเลอรหรออนเทอรพรเตอรเขาไปในตว รวมถงตวชวยแสดงคำแนะนำเกยวกบคำสงตางๆ และโปรแกรมในการตรวจสอบจดบกพรองอกดวย
บทท 2ระบบอนเทอรเนต
วตถประสงคการเรยนรอธบายหลกการทำงานของอนเทอรเนต
1. อธบายการทำงานของอนเทอรเนตได2. อธบายวธการเชอมตอกบขายงานอนเทอรเนต3. รจกอปกรณพนฐานตางๆ ทพบไดทวไปตามบานซงใชในการตออนเทอรเนต
ใชเวลารวม 3 คาบการรบสงขอมลระหวางเครองคอมพวเตอรในยคแรกจะทำโดยเขยนขอมลลงหนวยความจำภายนอก
แลวนำไปอานดวยเครองอกเครองหนง แตการรบสงขอมลวธนนนคอนขางชาและไมสะดวก ความเรวในการรบสงขนกบวธการขนสงหนวยความจำภายนอก จงมความพยายามในการสงขอมลโดยตรงระหวางเครองคอมพวเตอร เกดเปนขายงานคอมพวเตอรขน
2.1 ขายงานคอมพวเตอรขายงานคอมพวเตอรเกดจากการนำคอมพวเตอรหลายๆ เครองมาเชอมตอกน ใหสามารถรบสงขอมลระหวางกนได ขายงานคอมพวเตอรแบงไดออกเปนสองระดบ คอ ขายงานบรเวณเฉพาะท (Local AreaNetwork - LAN) และ ขายงานบรเวณกวาง (Wide Area Network - WAN) ดงรปท 2.1
ขายงานบรเวณเฉพาะทมกเปนการเชอมตอคอมพวเตอรทอยใกลกนไวดวยกนเปนขายงาน เครองทอยในขายงานเดยวกนจะสามารถตดตอถงกนไดทงหมด สวนขายงานบรเวณกวางจะเปนการเชอมตอคอมพวเตอรทอยไกลจากกน โดยมกจะเปนการเชอมตอขายงานบรเวณเฉพาะทหลายๆ ขายงานเขาดวยกน
เมอมการเชอมตอคอมพวเตอรและมการรบสงขอมลระหวางกน กจำเปนจะตองมขอตกลงในการรบสงขอมล เพอใหการสอสารระหวางเครองเปนไปไดอยางราบรน ขอตกลงในการรบสงขอมลเรยกวา โพร
32 บทท 2. ระบบอนเทอรเนต
LAN
WAN
LAN
LAN
รปท 2.1: ขายงานเฉพาะทและขายงานบรเวณกวาง
รปท 2.2: ARPANET มนาคม 19771
โทคอล (protocol) หรอเกณฑวธ ระบรปแบบของขอมลทใชสง วธระบทอยของเครอง วธการตรวจสอบความผดพลาดในการสง เปนตน
อนเทอรเนต เปนขายงานคอมพวเตอรขนาดใหญ ซงเชอมตอคอมพวเตอรเกอบจะทวโลกเขาดวยกนจดเรมตนในการพฒนาอนเทอรเนตนนมาจาก ARPANET (Advanced Research ProjectsAgency NETwork) รเรมโดยกระทรวงกลาโหมของสหรฐอเมรกา เพอเชอมตอขายงานคอมพวเตอร
1By ARPANET [Public domain], via Wikimedia Commons
2.1. ขายงานคอมพวเตอร 33
รปท 2.3: แผนภาพการเชอมตอเครอขายอนเทอรเนตระหวางประเทศ2
ระหวางศนยวจยและมหาวทยาลยตางๆ ซงตงอยหางจากกน ในระยะเรมแรกนน ARPANET เปนการเชอมตอระหวางมหาวทยาลยและหนวยงานทางทหารเทานน หลงจาก ARPANET เรมตน กมขายงานขององคกรตางๆ เขามาเชอมตอเพมขน องคกรเอกชนและบรษทตางๆ เรมมการสรางขายงาน และลากสายสญญาณเชอมตอดวยตนเอง กลายเปนขายงานขนาดใหญขนเรอยๆ ดงรปท 2.2 จนกลายเปนอนเทอรเนตในทสด
รปท 2.3 แสดงการเชอมตออนเทอรเนตระหวางประเทศของไทย วงกลมสนำเงน และสเหลยมสเทาในรปคอเกตเวย หรอชองทางการเชอมตอระหวางเครอขาย วงกลมขนาดใหญสนำเงนตรงกลางคอเกตเวยออกตางประเทศ จะเหนไดวามเสนเชอมจำนวนมากกบเกตเวยของตางประเทศ สวนวงกลมเลกสนำเงนรอบวงกลมใหญคอเกตเวยของผใหบรการอนเทอรเนตในประเทศ ซงจะเชอมตอระหวางเกตเวยออกตางประเทศอกและผใชบรการ
ลองคดหากตองการควบคมอนเทอรเนต เชน สกดกนการไหลของขอมล ตดการเชอมตอระหวางเครองเปาหมายจะตองทำอยางไร
2สำนกงานเทคโนโลยอเลกทรอนกสและคอมพวเตอรแหงชาต, มถนายน 2559.
34 บทท 2. ระบบอนเทอรเนต
2.2 การทำงานของอนเทอรเนตการรบสงขอมลในอดต เชน การสงขอมลเสยงผานสายโทรศพท ใชระบบสลบวงจร (circuit switch-ing) ซงจะจองวงจรสำหรบการสอสารไวตลอดเวลา ไมสามารถแบงปนชองสญญาณกบผสอสารคอนๆได หากมผตองการสอสารเปนจำนวนมากกจะตองใชชองสญญาณเปนจำนวนมากตามไปดวย แมวาระหวางการสอสารนนจะมการรบสงขอมลไมมาก หรออาจจะไมมการรบสงขอมลตลอดเวลากตาม
การรบสงขอมลในขายงานอนเทอรเนตใชระบบการสลบกลมขอมล (packet switching) โดยแบงขอมลทตองการสงออกเปนชนยอยๆ (packet) แลวสงขอมลยอยเหลานไปตามชองทางการสอสารตางๆ ซงไมจำเปนตองเปนชองทางเดยวกน แลวไปรวมเปนขอมลตงตนอกครงทปลายทาง การรบสงขอมลดวยวธนทำใหผใชหลายๆ รายสามารถใชชองทางการสอสารรวมกนได
เมอมการแบงขอมลออกเปนชนยอยๆ และแยกสงไปตามชองทางตางๆ ทำใหตองมการออกแบบวธการสงขอมลใหไปถงปลายทาง และวธการรวมขอมลทปลายทาง วธการเหลานถกกำหนดอยในโพรโทคอลตางๆ ในการสอสาร
การออกโพรโทคอลเดยวควบคมขนตอนการรบสงขอมลทงหมดนนจะทำใหโพรโทคอลซบซอนรวมทงมขอจำกดดานฮารดแวร และรปแบบของขายงานเฉพาะทแตละแหงทอาจแตกตางกน ระบบอนเทอรเนตในปจจบนจงแบงการทำงานออกเปนระดบชน และกำหนดโพรโทคอลสำหรบชนตางๆ เพอใหสามารถปรบใชงานไดกบฮารดแวรและขายงานทหลากหลาย
ในมมมองของซอฟตแวรนน หากตองจดการตดแบงขอมล กำหนดเสนทางขอมล และสงขอมลดวยจะทำใหการออกแบบซอฟตแวรซบซอนมาก นอกจากน คอมพวเตอรหนงเครองนนอาจตองการการเชอมตอมากกวาหนงชองทาง เชน ซอฟตแวรฟงเพลง ตองการเชอมตอกบเครองบรการเพลง ในขณะทเวบเบราวเซอรตองการตดตอกบเครองบรการเวบ แตซอฟตแวรฟงเพลงกบเบราวเซอรนนมวธรบสงขอมลกบเครองบรการทแตกตางกน หากผพฒนาซอฟตแวรทกรายตองเขยนคำสงสำหรบจดการเรองทงหมดเหลานเอง จะมบางสวนทซำซอนกนเปนจำนวนมาก งานการจดการเหลานจงอยกบระบบปฏบตการและซอฟตแวรระบบตางๆ
ชดโพรโทคอลอนเทอรเนต (Internet protocol suite) แบงการทำงานออกเปน 4 ระดบ ไดแกระดบโปรแกรมประยกต ระดบการขนสง ระดบอนเทอรเนต และระดบการเชอมตอ
2.2.1 ระดบโปรแกรมประยกต (Application layer)ในระดบนจะกำหนดรปแบบสวนตอประสานเพอรบสงขอมลระหวางซอฟตแวรตนทางกบปลายทาง จากรปท 2.4 เครองผใชตองการเลนเพลง และเปดเวบไซต โปรแกรมเลนเพลงจะตองสงคำสงไปยงเครองบรการเพลง เพอใหสงเพลงกลบมา ในขณะทเวบเบราวเซอรกตองสงคำสงรองขอหนาเวบไปยงเครองบรการเวบ และนำผลกลบมาแสดงเชนกน วธการสงคำสงและตวคำสงสำหรบโปรแกรมเลนเพลงกบเวบเบราวเซอรนนตางกน แตละโปรแกรมจะมโพรโทคอลของตนเองในการตดตอกบเครองบรการ โพรโทคอลเหลานเปนโพรโทคอลในระดบโปรแกรมประยกต ตวอยางของโพรโทคอลในระดบน เชน
2.2. การทำงานของอนเทอรเนต 35
204.69.221.33
TCP:554 TCP:80
Client: 161.200.126.120
172.271.4.238
GW: 161.200.126.1
รปท 2.4: ตวอยางการทำงานในชดโพรโทคอลอนเทอรเนต
• HTTP (HyperText Transfer Protocol) เปนโพรโทคอลทใชในการรบสงขอมลกบเครองบรการเวบ
• DHCP (Dynamic Host Configurationl Protocol) เปนโพรโทคอลทใชในการกำหนดพารามเตอรเพอเชอมตอขายงาน
• SSH (Secure SHell) เปนโพรโทคอลการเขารหสชองทางการสอสาร
โพรโทคอลในระดบนไมคำนงถงวธการตดแบงขอมล รวมถงชองทางการสงขอมล แตเรยกใชบรการจากโพรโทคอลอนในระดบการขนสงแทน
2.2.2 ระดบการขนสง (Transport layer)การตดตอระหวางซอฟตแวรตนทางกบปลายทางนนจะอาศยกระบวนการทำงานหลายอยางประกอบกนเรยกแตละกระบวนการวา โพรเซส (process) โพรโทคอลในระดบการขนสงจะสรางการเชอมตอระหวางโพรเซสตนทางกบโพรเซสปลายทาง ใหเสมอนวามชองทางการเชอมตอจองไวตลอดเวลาระหวางโพรเซส เพออำนวยความสะดวกในการรบสงขอมลใหกบซอฟตแวร ถงแมวาการเชอมตอจรงจะเปนแบบสลบกลมขอมล แบงใชชองสญญาณกบโพรเซสอนๆ กตาม
เครองหนงสามารถทำงานหลายโพรเซสพรอมกนได เมอมการรองขอการเชอมตอจากโพรเซส โพรโทคอลในระดบการขนสงจะสรางชองทางการเชอมตอเสมอนใหในรปแบบของพอรต (port) ตดขอมลทรบมาจากระดบโปรแกรมประยกตออกเปนกลมขอมลยอยเพอนำสงปลายทาง และในทางกลบกน ทฝง
36 บทท 2. ระบบอนเทอรเนต
ปลายทางกจะประกอบขอมลกลบใหอยในรปแบบเดยวกบตนทางเพอสงใหโพรเซสตอไป งานของระดบการขนสงรวมถงการตรวจสอบความถกตองของขอมล การควบคมการไหลของขอมล การควบคมความหนาแนนของขอมลอกดวย แตไมรวมถงการนำกลมขอมลยอยสงไปยงปลายทาง ซงจะอาศยโพรโทคอลอนในระดบอนเทอรเนตเพอนำสงขอมลตอไป
โพรโทคอลทสำคญในระดบนสำหรบชดโพรโทคอลอนเทอรเนตคอ TCP (Transmission ControlProtocol) และ UDP (User Datagram Protocol) โดย TCP จะตรวจสอบการเชอมตอกอนเรมรบสงขอมลเสมอ และสงขอมลเรยงตามลำดบ มการตรวจสอบยนยนวาขอมลไปถงปลายทาง ในขณะทUDP จะไมมการตรวจสอบการเชอมตอ สงขอมลแบบไมตองมลำดบ มเพยงการตรวจสอบความถกตองขอมลแตละสวนทปลายทางเทานน การทำงานของ TCP ซงตองตรวจสอบยนยนความถกตองนนทำใหการเชอมตอแบบ TCP นาเชอถอกวา แตใชเวลาในการสงขอมลนานกวา ในงานทความถกตองของขอมลทงหมดไมสำคญ สามารถมความผดพลาดเลกนอยได แตตองการความรวดเรว เชน รายการวทยออนไลนการใช UDP จะเหมาะสมกวา
จากรปท 2.4 โปรแกรมฟงเพลงใชพอรต 554 ของโพรโทคอล TCP ในการรบสงขอมลกบปลายทางแสดงดวยเสนทบสเขยว ดงนนโปรแกรมฟงเพลงจะเหนชองทางการเชอมตอเสมอน ระหวางตวโปรแกรมเองกบเครองใหบรการเพลงซงแสดงดวยเสนประสเขยว แตรบสงขอมลจรงผานพอรต TCP:554 สวนเวบเบราวเซอรกจะเชอมตอกบเครองบรการเวบผานชองทางเสมอนซงแสดงดวยเสนประสนำตาล สวนชองทางการเชอมตอจรงจะผานพอรต 80 ของโพรโทคอล TCP ซงแสดงดวยเสนทบสนำตาล ถงแมวาทงสองโปรแกรมจะทำงานอยในเครองเดยวกน การรบสงขอมลจรงๆ นนผานสายสญญาณเสนเดยวกนทงสองโปรแกรมจะเหนชองทางการเชอมตอเสมอนทแยกจากกน
2.2.3 ระดบอนเทอรเนต (Internet layer)ขอมลทกรปแบบเมอถกตดออกมาเปนกลมขอมลยอยแลวจะสามารถใชวธการทำนองเดยวกนในการนำสงขอมลได เหมอนกบบรการไปรษณย ซงรบสงจดหมายหรอพสดไมวาขอความในจดหมายหรอของในกลองพสดนนจะเปนอยางไรกตาม ในบรการไปรษณยนนใชเลขทอยเพอระบผสงและผรบ ในขายงานอนเทอรเนตกมเลขทอยเพอระบเครองตนทางและปลายทางเชนเดยวกน เลขทอยนกำหนดโดยโพรโทคอล ซงโพรโทคอลในระดบนทสำคญคอ โพรโทคอลอนเทอรเนต (Internet Protocol: IP) จงเรยกเลขทอยวา เลขทอยไอพ (IP Address)
หนาทของระดบอนเทอรเนตคอการระบทอยของผรบและผสง และนำสงขอมลไปยงปลายทาง การเดนทางของกลมขอมลยอยจากตนทางไปยงปลายทางนนตองผานขายงานตางๆ ระหวางทางเปนจำนวนมาก เครองตางๆ ทตงอยทจดเชอมตอระหวางขายงานจงมหนาทสงตอกลมขอมลยอยไปยงทศทางทนาจะไปถงปลายทางได หรอรบกลมขอมลยอยนนเขามาหากปลายทางอยในขายงานภายในของตน
เลขทอยไอพในปจจบนม 2 รน ไดแก รนท 4 (IPv4) และ รนท 6 (IPv6) เลขทอยไอพรนท 4ประกอบดวยตวเลข 32 บต ซงมกจะแยกเปน 4 ชด ชดละ 8 บต (0-255) เครองในขายงานอนเทอรเนตแตละเครองตองมเลขทอยไมซำกน เลขทอยไอพรนท 4 จงสามารถแทนเครองไดทงหมด 232 ≈ 4 ×109
2.2. การทำงานของอนเทอรเนต 37
เครอง ซงไมเพยงพอกบการใชงานในปจจบน จงมการออกเลขทอยไอพรนท 6 ซงประกอบดวยตวเลข128 บต จงแทนเครองไดมากกวามาก ปจจบนมการใชงานทงเลขทอยไอพรนท 4 และ 6 ไปพรอมๆกน
จากรปท 2.4 เครองของผใชมเลขทอยไอพเปน 161.200.126.120 ขอมลทงหมดทสงมาหาเครองนกจะถกสงมาทเลขทอยไอพน ไมวาจะเปนขอมลเพลงหรอขอมลเวบ โพรโทคอลในระดบอนเทอรเนตนจงมหนาทสรางชองทางการเชอมตอเสมอนระหวางเครองถงเครอง ซงในทนคอเครองของผใชกบเครองบรการ แสดงในรปดวยเสนประสนำเงน สวนหนาทในการแยกแยะขอมลวาเปนเพลงหรอเวบ เปนของระดบการขนสง
อยางไรกตาม การรบสงขอมลในระดบอนเทอรเนตนยงไมใชการสงขอมลจรงทางกายภาพ โพรโทคอลตางๆ ในระดบอนเทอรเนตจะอาศยโพรโทคอลในระดบการเชอมตอในการรบสงขอมลจรงอกตอหนง
2.2.4 ระดบการเชอมตอ (Link layer)ระดบลางสดในชดโพรโทคอลอนเทอรเนตนนควบคมการรบสงขอมลระหวางเครองทเชอมตอกนทางกายภาพ เชน อเทอรเนต (Ethernet) มาตรฐาน IEEE 802 ซงควบคมการรบสงขอมลภายในขายงานเฉพาะท สำหรบมาตรฐาน IEEE 802 นน อปกรณเชอมตอแตละชนจะมเลขทของตนเอง เปนเลขทอยของฮารดแวร เพอใชในการรบสงขอมล เรยกวา เลขทอยแมค (Media Access Control address:MAC address) การสงขอมลจรงๆ ระหวางเครองนนจะอาศยเลขทอยน
ตวอยางของโพรโทคอลในระดบการเชอมตอ เชน
• PPP (Point-to-Point control Protocol) เปนโพรโทคอลสำหรบการเชอมตอระหวางเครอง ซงสามารถตรวจสอบยนยนตวตนสำหรบการเชอมตอได โพรโทคอลนมกใชในการเชอมตอระหวางผใหบรการอนเทอรเนตกบลกคา
• ARP (Address Resolution Protocol) เปนโพรโทคอลทใชในการเปลยนเลขทอยไอพใหเปนเลขทอยของฮารดแวร เพอใหสงขอมลถงปลายทางได
ถงแมวาระดบการเชอมตอนจะควบคมการเชอมตอระหวางเครองทเชอมตอกนทางกายภาพ โพรโทคอลในระดบนกยงไมไดระบวธการรบสงขอมลในระดบฮารดแวรไว ชดโพรโทคอลอนเทอรเนตนจงสามารถทำงานไดกบฮารดแวรทกรปแบบหากอปกรณเหลานนรองรบโพรโทคอลในระดบการเชอมตอของชดโพรโทคอลอนเทอรเนต
จากรปท 2.4 การเชอมตอจรงระหวางเครอง Client ทมเลขทอยไอพ 161.200.126.120 กบเครอขาย ทำผานเกตเวยซงมเลขทอยไอพ 161.200.126.1 แสดงดวยเสนทบสชมพ
2.2.5 เปรยบเทยบการรบสงขอมลในอนเทอรเนตกบบรการไปรษณยขอมลทรบสงเปรยบเสมอนเนอความในจดหมาย หรอของในกลองพสด (segment, packet) แตขนาดของซองจดหมายหรอกลองพสดนนมมาตรฐานอย หากขอมลมขนาดใหญเกนกวาจะบรรจลงซองได ก
38 บทท 2. ระบบอนเทอรเนต
data
1/3 TCP:554 2/3 TCP:554 3/3 TCP:554
TCP segment
From204.69.221.33To 161.200.126.120
IP packet1/3 TCP:554 2/3 TCP:554 3/3 TCP:554
From204.69.221.33To 161.200.126.120
รปท 2.5: การทำงานของอนเทอรเนตเปรยบเทยบกบระบบไปรษณย
ตองตดขอมลออกเปนสวนยอยๆ กอนจะใสซอง สวนการตดขอมลนเปนหนาทของโพรโทคอลในระดบการขนสง และยงตองมขอมลกำกบเพมเตม (header) เพอใหนำขอมลกลบมาประกอบกนไดตามลำดบเดม เชนในรปท 2.5 นน ขอมลเพลงทไดมขนาดใหญ ตองตดเปนสวนยอยๆ สำหรบโพรโทคอลการขนสงเสยกอน และมขอมลลำดบของแตละสวนกำกบอย
บานหนงหลงนนมผอยอาศยไดหลายคน เปรยบเสมอนโพรเซสการเชอมตอซงมไดมากกวาหนง การอางถงการเชอมตอของแตละโพรเซสจะใชหมายเลขพอรต เปรยบเสมอนชอผสงและชอผรบ สวนตวเครองนนมเลขทอยไอพ เปรยบเสมอนบานเลขททใชจาหนาซองเพอใหไปรษณยสามารถนำสงจดหมายหรอพสดไดถกท ในรปท 2.5 นน การจาหนาซองจดหมายตนทางและปลายทางเปนดงซองสนำเงน เลขทอยทกำหนดของตนทางและปลายทางคอเลขทอยไอพ สงเกตวาไมมการระบโพรเซสทซองสนำเงน หนาทในการนำสงใหถกโพรเซสนนเปนของโพรโทคอลการขนสง ไมใชหนาทของโพรโทคอลอนเทอรเนต
การทำงานของโพรโทคอลอนเทอรเนต เปรยบเหมอนการขนสงถงไปรษณยจากจดรบไปยงจดคดแยก และสงตอไปยงศนยไปรษณยตางๆ เพอใหนำจายผรบไดถกตอง เชน จดหมายจากกรงเทพฯ ถงเชยงใหม กไมควรจะถกสงไปเสนทางลงใต แตควรจะเลอกเสนทางขนเหนอ ซงมหลายสาย กระจายสงไปสายใดกได เมอไปถงปลายทางแลวจะมผรบจดการอกตอ
วธการสง ไมวาจะเปนทางบกผานรถยนต รถไฟ หรอทางอากาศ เปรยบเสมอนการสงขอมลทางกายภาพจรงๆ ผานตวกลางเชน สายทองแดง สายใยแกวนำแสง ไมวาจะใชวธการขนสงแบบใด ระบบไปรษณยจะนำขอมลไปสงถงปลายทางได
ลองคดหากการคยโทรศพทระหวาง 2 คนตองใชสายโทรศพท 1 เสนเชอมตอกน กลมของนสตอยดวยกนทงหมด10 คน และทกคนตองการคยโทรศพทพรอมๆ กน นสตตองมสายโทรศพทเชอมตอกนทงหมดกค จงจะ
2.3. การเชอมตอกบขายงานอนเทอรเนต 39
รบประกนไดวาทกคนสามารถคยกนไดแนนอน
2.3 การเชอมตอกบขายงานอนเทอรเนตอนเทอรเนตเปนการเชอมตอกนของขายงานยอยหลายๆ ขายงาน เมอคอมพวเตอรเครองหนงตองการเชอมตอกบอนเทอรเนต จงตองเชอมตอเขากบขายงานยอยแหงใดแหงหนงซงมกจะเปนขายงานเฉพาะทเสยกอน
2.3.1 การเชอมตอทางกายภาพการเชอมตอกบขายงานจะเรมจากการเชอมตอทางกายภาพ เชน เชอมตอผานสายโทรศพทแลวหมนโมเดม เชอมตอผานสายอเทอรเนต เชอมตอโดยสญญาณไวไฟ เชอมตอผานขายงานโทรศพทเคลอนท
การเชอมตอทางกายภาพในหลายๆ กรณนนใชการกลำสญญาณ (mudulate) ขอมลไปกบคลนพาหะ (carrier) ตางๆ เชน สญญาณโทรศพท คลนแมเหลกไฟฟาความถตางๆ การกลำสญญาณนนตองอาศยฮารดแวรชวย และเมอตองการถอดสญญาณ (demodulate) ออกจากคลนพาหะ กตองใชฮารดแวรเชนกน ฮารดแวรททำงานทงสองอยางนในตวเดยวกนเรยกวา โมเดม (MOdulator-DEModulator - MODEM) แตหากคอมพวเตอรนนรบสงขอมลดจทลไดโดยตรง เชน ใชอเทอรเนตผานสายเคเบล กไมจำเปนตองใชโมเดมอก
ขายงานเฉพาะททไดรบความนยมในปจจบนมสองรปแบบ คอ อเทอรเนต ซงเปนการเชอมตอแบบใชสาย และ ไวไฟ (WiFi) ซงเปนการเชอมตอแบบไรสาย อปกรณทเปนตวกลางเชอมระหวางขายงานเฉพาะทคอเราตเตอร (router) ในกรณทเชอมตอแบบใชสาย และแอคเซสพอยท (Access Point- AP) ในกรณทเชอมตอแบบไรสาย ในปจจบน โมเดม เราตเตอร และแอคเซสพอยทมกรวมกนอยในอปกรณชนเดยวกนเปน wireless modem router ผใหบรการอนเทอรเนตมกจะใชอปกรณชนดนกบลกคาทสมครใชบรการ และระบชอผใชกบรหสผานในการเชอมตอไวในอปกรณ ลกคาเพยงแตเชอมตอกบอปกรณชนดนดวยสายอเทอรเนต หรอไวไฟ กจะเรมตนใชบรการไดทนท
2.3.2 การกำหนดพารามเตอรตางๆ ทจำเปนในการเรมใชงานคอมพวเตอรตองทตองการเชอมตอกบอนเทอรเนตนนจำเปนตองมเลขทอยไอพ เพอใชในการรบสงขอมล เลขทอยไอพอาจเกดจากการกำหนดเองกได หรอผใหบรการกำหนดใหกได แตเนองจากเลขทอยไอพของแตละเครองในอนเทอรเนตนนตองไมซำกน เพอใหการกำหนดเลขทอยไอพเปนไปอยางมประสทธภาพ โดยทวไปจงใหผบรการอนเทอรเนตเปนผกำหนดให เพอปองกนการใชเลขทอยซำ
นอกจากเลขทอยไอพของผใชแลว เลขทอยไอพของเครองทใหบรการบางอยาง เชน เกตเวย ซงเปนประตเชอมตอขายงานภายในกบขายงานภายนอก ดเอนเอส ซงเปนบรการชอโดเมน กจะอำนวยความสะดวกในการสรางการเชอมตอตางๆ ไดดยงขน จงควรกำหนดคาเหลานกอนเรมใชงานอนเทอรเนต
40 บทท 2. ระบบอนเทอรเนต
DHCP
DNS
GW
LAN
WAN
1 Request config 2 Send config
รปท 2.6: บรการ DHCP
การกำหนดคาตางๆ จำนวนมากนดวยผใชเองนนไมสะดวก โดยเฉพาะอยางยงเมอตองมการปรบหรอเปลยนแปลงการตงคาตางๆ ปจจบนจงม DHCP (Dynamic Host Configuration Protocol -DHCP) เปนโพรโทคอลซงทำหนาทในการสงขอมลเหลานใหกบเครองทรองขอการเชอมตอกบขายงานลำดบขนตอนในการเชอมตอกบขายงานในปจจบนจงมกเปนการเชอมตอทางกายภาพ และรองขอการเชอมตอไปยงเครองทใหบรการ DHCP ดงรปท 2.6 เมอไดขอมลทจำเปนตางๆ มาแลว กจะเขาเปนสวนหนงของขายงานและดำเนนการรบสงขอมลได
2.3.3 บรการชอโดเมนการระบเครองตนทางและปลายทางในขายงานอนเทอรเนตนนใชเลขทอยไอพกเพยงพอ แตการจดจำเลขทอยไอพของเครองตางๆ นนไมสะดวกสำหรบผใชงานทวไป จงเกดระบบโดเมน (Domain NameSystem: DNS) เกดขน เพอใหผใชจดจำไดงาย เชน ชอโดเมน chula.ac.th แทนเลขทอยไอพ 161.200.192.241 และสรางบรการเพอแปลงชอโดเมนไปเปนเลขทอยไอพขน ใหบรการโดยเครองบรการดเอนเอส (DNS server)
เมอผใชตองการตดตอกบเครองอนๆ ผใชจงสามารถระบชอโดเมนของเครองปลายทางแทนทจะเปนเลขทอยไอพของเครองปลายทางได จากนน เครองของผใชจะเชอมตอไปยงเครองบรการดเอนเอสและรองขอการแปลงชอโดเมนเพอใหไดเลขทอยไอพของเครองปลายทางกลบมา และดำเนนการเชอมตอกบเครองปลายทางตอไป ดงรปท 2.7 จะเหนไดวา ถงแมไมมบรการชอโดเมน เครองคอมพวเตอรกยงคงสามารถตดตอกบเครองอนๆ ได หากรเลขทอยไอพ
บรการนอำนวยความสะดวกใหกบผใช แตหากบรการนคนเลขทอยไอพของเครองปลอม ซงอาจเปนของผประสงครายใหผใช ผใชกจะตดตอกบเครองปลอมปลายทาง และมความเสยงทจะสงขอมลตางๆใหกบผประสงคราย ผใชจงควรตรวจสอบเลขทอยไอพของเครองบรการดเอนเอสเสมอ วาเปนเลขทอยไอพทเชอถอได ตวอยางของเลขทอยไอพทเชอถอได เชน 8.8.8.8 เปนบรการดเอนเอสของกเกล
2.3. การเชอมตอกบขายงานอนเทอรเนต 41
DHCP
DNS
GW
LAN
WAN
1 Query IP2 Answer IP
3 Send data
รปท 2.7: บรการ DNS
2.3.4 เทคโนโลยเวบเวบเปนบรการเรยกดขอมลโดยมเครองบรการเวบ (web server) เปนผใหบรการ และผใชบรการจะเรยกดขอมลผานเวบเบราวเซอร ซงใช HTTP เปนโพรโทคอลหลก แต HTTP นนรบสงขอมลแบบไมเขารหส ซงอาจทำใหขอมลบางอยางซงเปนความลบไมปลอดภยได จงมความพยายามในการปรบปรงโพรโทคอลใหมการเขารหสขอมล เปน HTTPS (HTTP Secure) เพอใหมความปลอดภยมากขน
การแสดงเนอหาบนเวบนนกำหนดโดย HTML (HyperText Markup Language) ซงในปจจบนใชรวมกบคำสงสครปตรปแบบตางๆ เชน CGI, JavaScript, PHP เพอใหเวบสามารถตอบสนองการใชงานไดหลากหลายรปแบบ เชน การเลนวดโอ การเนนขอความเมอลากเมาสผาน สครปตบางแบบทำงานทเครองของผใช ดงนนผใชอาจมความเสยงหากเปดเวบไซตทมสครปตมงรายไดเชนกน
การเขาถงขอมลในเวบนนตองระบทอยของขอมล เรยกวา URL (Uniform Resource Locator)ใน URL จะระบ
• โพรโทคอลทใชในการรบสงขอมล หากไมระบ เบราวเซอรมกจะเลอกใหเปน HTTP• เลขทอยไอพของเครองปลายทาง ซงอาจระบเปนชอโดเมนแทนได เวบเบราวเซอรจะเรยกใชบรการดเอนเอสในการแปลงเปนเลขทอยไอพใหเอง
• ทอยของขอมลในเครองปลายทาง หากไมระบ เครองใหบรการเวบอาจจะสงหนาโดยปรยายมาใหเชน index.html
• คำคน
เชน
https://www.youtube.com/watch?v=XHnrw-ANx40
ประกอบดวย
• โพรโทคอล คอ HTTPS
42 บทท 2. ระบบอนเทอรเนต
• เลขทอยไอพของเครอง ระบเปนชอโดเมนของ คอ www.youtube.com• ทอยของขอมลคอ แฟมขอมลชอ watch อย ณ ตำแหนงแรกทเขาถงเครองได• คำคนเปน XHnrw-ANx40 และสงคาใหเครองบรการผานตวแปรชอ v
ตวอยางนคอการรองขอการเชอมตอกบ www.youtube.com และเรยกใชสครปต watch เพอเลนวดโอชอ XHnrw-ANx40
ลองคดนสตไมสามารถเขาเวบ dailymail.co.uk ได แตเขา 195.234.240.212 ซงเปนเลขทอยไอพของ dailymail.co.uk ได อนเทอรเนตของนสตมปญหาทสวนใดหรอไม ลองใหเหตผลประกอบ
บทท 3การแทนขอมลในคอมพวเตอร
วตถประสงคการเรยนรอธบายแนวคดของการเกบขอมลในภาษาโปรแกรม การแทนขอมลในคอมพวเตอร และความแตกตางระหวางขอมลชนดตางๆ
1. อธบายเหตผลทตองกำหนดชนดของขอมลเมอทำงานกบคอมพวเตอรได และเลอกใชชนดของขอมลไดเหมาะสมกบขอมลและรปแบบการใชงาน
2. อธบายการใชพนทในหนวยความจำสำหรบการเกบขอมลได เรยกใชใชขอมลโดยผานการอางองถงทอยไดถกตอง
ใชเวลารวม 3 คาบ
3.1 บตและไบตขอมลในคอมพวเตอรเกบอยในรปของเลขฐานสองเนองมาจากเทคโนโลยดจทลทใชสวตชสถานะปดและเปดในการเกบขอมล สวตชหนงตวแทนขอมลได 2 รปแบบ หากตองการแทนขอมลทมรปแบบมากกวานกตองใชสวตชหลายตวประกอบกน การแทนขอมลดวยสถานะเปดปดนเทยบไดกบการแทนขอมลดวยเลขฐานสองหนงหลก เราจงมหนวยเรยกความจขอมลนวาความจขอมลขนาดหนงบต
ขนาดของหนวยความจำทใชในการเกบอกขระ 1 ตวคอ 7 บต แตเรามกกำหนดใหขนาดของขอมลเปนกำลงของสอง จงใชขนาด 8 บต (23) แทนอกขระหนงตว เรยกวา 1 ไบต (byte) เราจงมกนบขนาดของหนวยความจำเปนไบต เพอใหเทยบเคยงกบการนบขนาดของขอความเปนจำนวนตวอกษร เชนขอความ 200 ตวอกษร จะใชพนทในการเกบ 200 ไบต เปนตน
ความจขอมลทใหญขน จะสามารถแทนรปแบบของขอมลไดมากขน ตวอยางจำนวนรปแบบของขอมลทสามารถแทนไดเมอมหนวยความจำขนาดตางๆ ดงตารางท 3.1
44 บทท 3. การแทนขอมลในคอมพวเตอร
ตารางท 3.1: จำนวนขอมลทแทนไดเมอมพนทในหนวยความจำขนาดตาง ๆ
จำนวนบต จำนวนรปแบบทแทนได1 21 = 22 22 = 43 23 = 84 24 = 168 28 = 25616 216 = 65,53632 232 = 4,294,967,296b 2b = 2b
หากเลขฐานสองมขนาดยาวมาก เชน 000100102 = 18 การเขยนเลขฐานสองดวยสญลกษณ 0(ศนย) และ 1 (หนง) จะทำใหอานยาก ในงานทางคอมพวเตอรจงนยมเขยนเลขฐานสองสหลกรวมกนเปนเลขฐานสบหกหนงหลก (ใชสญลกษณ 0-F - ศนยถงเอฟ) และใชสญลกษณ 0x (ศนยเอกซ) นำหนาจำนวนทเปนเลขฐานสบหก เชน 000100102 = 1216 = 0x12 เปนตน
โดยทวไปเราใชคอมพวเตอรทำงานกบขอมลพนฐานสองประเภท ไดแก จำนวน และ ขอความ โดยจำนวนใชแทนคาซงนำมาคำนวณทางคณตศาสตรได และขอความซงอยในรปของสายอกขระ สวนขอมลลกษณะอนๆ เชน ภาพ เสยง เปนขอมลทซบซอนขน และอยนอกเหนอขอบเขตของวชาน
3.2 ขอมลประเภทจำนวนขอมลประเภทจำนวนยงแบงยอยออกเปน 2 รปแบบ ไดแก จำนวนเตม และ จำนวนจรง ความแตกตางของการเกบขอมลทงสองรปแบบอยทวธการกำหนดรหสเลขฐานสองเพอแทนคาของจำนวนนน
3.2.1 ขอมลชนดจำนวนเตมการแทนขอมลชนดจำนวนจะใชเลขฐานสองหนงคา แทนจำนวนหนงจำนวน การแทนจำนวนเตม หากมพนท 4 ไบต (32 บต) จะแทนขอมลไดราวสลานรปแบบ ซงแบงรปแบบการเกบขอมลไดดงน
• unsigned: เกบคาทมากกวาหรอเทากบศนยเทานน จะเกบคาไดตงแต 0 ถง 232
• signed: ใช 1 บตในการเกบเครองหมาย (บวกหรอลบ) และใชพนททเหลอในการเกบคา หากใหเกบทงคาลบและคาบวกเปนจำนวนเทาๆ กน จะมคาในชวง [-216,-1,],0,[1,216-1]
ในการเขยนโปรแกรม หากให integer เปนชนดขอมลจำนวนเตมปกต จะมชนดของขอมลจำนวนเตมความจตำ (short) และจำนวนเตมความจสง (long) ใหดวย ความจของชนดขอมลในแตละเครองอาจไม
3.3. ขอมลประเภทขอความ 45
เหมอนกน จงควรตรวจสอบความจของขอมลแตละชนดในเครองทใชงานทกครง โดยเฉพาะอยางยงเมอตองการเกบคาทเขาใกลขอบเขตสงสดหรอตำสดของขอมลแตละชนด แตการเรยงลำดบความจจากนอยไปมากจะเปน short ≤ integer ≤ long เสมอ
3.2.2 ขอมลชนดจำนวนจรงการแทนจำนวนจรงกใชเลขฐานสองหนงคาแทนจำนวนหนงจำนวนเชนเดยวกน ในการเกบคาจำนวนจรงจะแบงพนทในการเกบขอมลออกเปนเครองหมาย เลขนยสำคญ และเลขชกำลง ตามลำดบ ถงแมพนทในการเกบเทากน จำนวนขอมลทเกบไดเทากน เนองจากมการใชเลขชกำลงชวย การเกบขอมลแบบจำนวนจรงจะสามารถเกบคาของจำนวนไดชวงกวางกวาจำนวนเตม แตนยสำคญสงสดทเกบไดจะนอยกวาของจำนวนเตม
จำนวนเตมนยสำคญปกตเรยกวาชนด float และจำนวนเตมนยสำคญสงเรยกวาชนด double (นยสำคญสองเทาของปกต - double precision) อยางไรกด ในบางเครอง พนทเกบขอมลและนยสำคญของ float และ double อาจไมตางกน แตพนทและนยสำคญของ float จะไมเกนของ double เสมอกอนการใชงานจงควรตรวจสอบขอบเขตของคาทใชไดเสมอ เชนเดยวกบการใชจำนวนเตมชนดตาง ๆ
ลองคดหากกำหนดพนทในการเกบขอมลเตมและจำนวนจรงท 4 ไบตเทากน มคาทเกบเปนจำนวนเตมได แตเกบเปนจำนวนจรงไมไดหรอไม เพราะเหตใด
3.3 ขอมลประเภทขอความขอความประกอบดวยอกขระตางๆ เรยงตอกน การแทนขอมลประเภทนในคอมพวเตอรจงเปนการเกบอกขระแตละตวเรยงตอๆ กนไป เนองจากคอมพวเตอรรบรขอมลในรปแบบของเลขฐานสองเทานน การแทนขอมลอกขระในคอมพวเตอรกตองแปลงใหอยในรปของเลขฐานสองเชนเดยวกน สมมตวาตองการแทนอกขระภาษาองกฤษไดแก a-z มสญลกษณของอกขระทงหมดทเปนไปได 26 แบบ การเกบขอมลอกขระ 1 ตวจะตองใชพนทอยางนอย 5 บต เพราะความจ 5 บตสามารถแทนขอมลได 32 รปแบบ ซงเพยงพอในการแทนขอมล 26 รปแบบทเราตองการ กำหนดใหเลขฐานสอง 1 คาแทนสญลกษณอกขระ1 รปแบบ เชน 000002=a, 000012=b, 000102=c, 110012=z เปนตน เรยกวธการกำหนดคาฐานสองแทนตวเลขนวา รหสอกขระ (character encoding)
หากขอมลประกอบดวยทงตวพมพใหญและตวพมพเลก และตองการแยกตวอกษรทงสองประเภทออกจากกน กจำเปนจะตองใชรหสเพมเตมจาก 26 รปแบบแรกทมอย หากแจกแจงอกขระทงหมดทใชเพอแทนขอความในภาษาองกฤษ จะไดดงน
• ตวพมพเลก a-z รวม 26 รปแบบ
46 บทท 3. การแทนขอมลในคอมพวเตอร
• ตวพมพใหญ A-Z รวม 26 รปแบบ• ตวเลข 0-9 รวม 10 รปแบบ• สญลกษณวรรคตอนตางๆ เชน เคาะวรรค จลภาค (,) มหพภาค (.) อศเจรย (!) และอน ๆ
ซงรวมแลวมากกวา 64 รปแบบแตไมเกน 128 รปแบบ จงใชพนท 7 บต ในการแทนขอมลไดทงหมดเราสามารถกำหนดรหสแทนขอมลไดโดยอสระ แตหากตองการใชขอมลรวมกบผอน กควรมรหส
กลางทเหมอนกน เพอใหแลกเปลยนขอมลกนได รหสมาตรฐานมหลากหลายรปแบบ ทนยมใชเชนEBCDIC, ASCII
3.3.1 รหสอกขระรหสแอสก (ASCII) ใชพนท 7 บตในการแทนขอมลอกขระภาษาองกฤษ แตการทำงานกบคอมพวเตอรเรามกใชพนทขนาดเปนจำนวนเทาของ 8 เพอความสะดวกในการดำเนนการตางๆ ของหนวยประมวลผลกลาง อกขระในรหสแอสกหนงตวจงใชพนท 8 บต โดยบตแรกเปน 0 เสมอ ดงชวง 128 ตวแรกในตารางท 3.2 โดย 32 ตวแรกเปนอกขระควบคมทใชในการสงขอมล
เนองจากรหสแอสกออกแบบมาสำหรบภาษาองกฤษเทานน เมอตองการใชแทนอกขระในภาษาอนจงตองมการกำหนดรหสอกขระเพมเตม เรยกวา รหสแอสกแบบขยาย (extended ASCII) ซงจะใหบตแรกเปน 1 และจะใชพนทอก 7 บตทเหลอในการกำหนดอกขระสำหรบภาษาอน ตวอยางของรหสแอสกแบบขยายทใชกบภาษาไทย ไดแก Windows-874, TIS-620, ISO-8859-11 (ตาราง 3.2) เปนตน
ขอเสยหลกของรหสแอสกแบบขยายคอ ใชไดทละคภาษาเทานน คอภาษาองกฤษและอกภาษาหนงไมสามารถใชแทนขอความทใชอกขระมากกวาสองชดพรอมกน จงมการกำหนดมาตรฐานรหสอกขระขนมาใหม เรยกวารหสยนโคด (unicode encoding) ใชพนทตงแต 16-32 บตในการแทนขอมล จงทำใหแทนภาษาไดหลากหลายดวยรหสชดเดยวกน
รหสยนโคดขนาด 16 บตสำหรบภาษาไทยม 8 บตแรกเปน 0x0E และเรยงลำดบตงแต ก ท 0x0E01ไปเรอยๆ ตามลำดบของอกขระในรหส ISO8859-11 ทกประการ
การเปดแฟมขอความโดยใชรหสทไมถกตอง อาจทำใหไดขอความทอานไมออก ไดอกขระผดพลาดไปหมด ปจจบนจงนยมใชรหสยนโคดกนมากกวารหสแอสกแบบขยาย เพอลดโอกาสทจะเกดความผดพลาดในการใชแฟมขอมล
3.3.2 สายอกขระสายอกขระคอการนำอกขระมาตอกน ดงนนจงตองใชพนทในการเกบขอมลอยางนอยเทากบจำนวนอกขระทตองการเกบ แตขอมลชนดสายอกขระมกมความยาวทไมแนนอน เชน ชอคน อาจมความยาวตงแตสามตวอกษรไปจนถงมากกวาสบตวอกษร การจองพนทเพอเกบขอมลชนดสายอกขระจงตองเผอไวสำหรบความยาวทมากทสดทเปนไปได
ปญหาถดมาในการจดการกบสายอกขระซงมความยาวไมแนนอนคอ ไมรขอบเขตสนสดของขอมลหากจองพนทไวสบตว แตขอมลมแคสามตว คอมพวเตอรไมสามารถแยกแยะไดวาขอมลจะสนสดทใด จง
3.3. ขอมลประเภทขอความ 47
ตารางท 3.2: ตารางรหสแอสกแบบขยาย ISO8859-11_0
_1_2
_3_4
_5_6
_7_8
_9_A
_B_C
_D_E
_F0_
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BSHT
LFVT
FFCR
SOSI
1_DL
EDC
1DC
2DC
3DC
4NA
KSY
NET
BCA
NEM
SUB
ESC
FSGS
RSUS
2_SP
!”
#$
%&
’(
)*
+,
-.
/3_
01
23
45
67
89
:;
<=
>?
4_@
AB
CD
EF
GH
IJ
KL
MN
O5_
PQ
RS
TU
VW
XY
Z[
/]
^_
6_‘
ab
cd
ef
gh
ij
kl
mn
o7_
pq
rs
tu
vw
xy
z{
|}
~DE
L8_ 9_ A_
NBSP
กข
ฃค
ฅฆ
งจ
ฉช
ซฌ
ญฎ
ฏB_
ฐฑ
ฒณ
ดต
ถท
ธน
บป
ผฝ
พฟ
C_ภ
มย
รฤ
ลฦ
วศ
ษส
หฬ
อฮ
ฯD_
ะ
าำ
฿
E_เ
แโ
ใไ
ๅๆ
๏F_
๐๑
๒๓
๔๕
๖๗
๘๙
๚๛
48 บทท 3. การแทนขอมลในคอมพวเตอร
จำเปนตองมอกขระวางเปนอกขระพเศษเพอบอกขอบเขตของขอมลดวย ดงนน การจองพนทในการเกบขอมลชนดสายอกขระ จงตองเผอสำหรบเกบอกขระปดทายขอมลดวย อกขระวาง (null character -NUL) มในรหสอกขระหลายรปแบบ ในรหสแอสกและรหสยนโคด คอ 0x0000 และ 0x00000000ตามลำดบ
ตวอยางเชน การเกบขอความ “ภาษาไทย” ดวยรหสอกขระ ISO8859-11 จะใชพนท 7+1=8 ไบตการแทนขอมลประเภทขอความทเปนตวเลขตางกบการแทนขอมลประเภทจำนวน การแทนขอมล
แบบสายอกขระจะใชรหสเลขฐานสองหนงคาตอตวเลขหนงหลก และตองใชอกขระปดทายดวย ในขณะทการแทนขอมลแบบจำนวนจะใชรหสเลขฐานสองหนงคาตอจำนวนนนทงจำนวน
ลองคดแฟมขอมลทเกบขอความภาษาองกฤษและบนทกดวยรหสแอสก จะสามารถเปดอานแบบรหสยนโคด 16บตไดถกตองหรอไม เพราะเหตใด
3.4 ขอมลชนดตรรกะขอมลชนดตรรกะมคาทเปนไปไดเพยงสองคา คอ จรง และ เทจ จงใชพนทเกบขอมลเพยงหนงบตกเพยงพอ แตการใชพนทเพยงหนงบตอาจทำใหการประมวลผลโดยหนวยประมวลผลกลางไมสะดวก โดยมากจงมกใชพนทเทากบจำนวนเตมปกต บางภาษาโปรแกรมจะใชจำนวนเตมแทนขอมลชนดตรรกะ โดยกำหนดให 0 แทนคาเทจ และคาอนๆ นอกจาก 0 แทนคาจรง
ขอมลชนดตรรกะพบมากในการทำงานแบบเงอนไข ซงการตรวจสอบเงอนไขจะไดคาจรงหรอเทจเพอเลอกเสนทางการทำงานตามตรรกะทไดตอไป
นอกจากชนดของขอมลพนฐานขางตนแลว ยงมชนดขอมลทซบซอนอกหลายรปแบบทใชในการเขยนโปรแกรม เชน แถวลำดบ รายการ ระเบยน ออบเจกต ซงอยนอกเหนอขอบเขตของวชาน
3.5 ตวแปร3.5.1 การอางถงขอมลและการจองพนทในหนวยความจำการดำเนนการใดๆ ของคอมพวเตอรจะเรยกใชขอมลจากหนวยความจำเสมอ จงตองมการจองพนทในหนวยความจำเพอเกบขอมล และกำหนดคาใหพนทนนกอนนำไปใชงานเสมอ การอางองถงขอมลนนทำไดดวยอางถงเลขทอย (address) ของหนวยความจำ เพอนำคา (value) ทเกบไว ณ ตำแหนงนนมาใชงาน เมอเรมโปรแกรม ระบบปฏบตการจะจองพนทในหนวยความจำใหสำหรบโปรแกรมใชงาน
ในขนตอนการเขยนโปรแกรมจะมการระบพนททตองการใช การอางองถงพนทเหลานทำโดยประกาศตวแปรขนแทนการเกบขอมลตางๆ ชอตวแปรมกเปนภาษาองกฤษความยาวไมมาก และสอถงขอมลทเกบอยในหนวยความจำนน
3.5. ตวแปร 49
เลขทอย 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77คา 0x74 0x75 0x37 0x30 0x00 0x00 0x00 0x64
เลขทอย 0x78 0x79 0x7A 0x7B 0x7C 0x7D 0x7E 0x7Fคา 0x00 0x46 0x00 0x00 0x00 0x30 0x30 0x00
numberintPtr
cตารางท 3.3: ตวอยางการเกบขอมลในหนวยความจำ
ขอกำหนดในการตงชอตวแปรโดยทวไปคอ ไมเปนคำสงวน (reserved word) ในภาษาโปรแกรม มความยาวไมมากเกนกำหนด ไมใชอกขระพเศษซงใชเปนตวดำเนนการ ขนตนดวยตวอกษร เปนตน
การใชตวแปรมสองลกษณะ ไดแก การกำหนดคาใหตวแปร (set) ซงเปนการนำขอมลไปเกบไว ณตำแหนงทตวแปรอางถง และการเรยกใชคาในตวแปร (get) ซงเปนการนำคาทเกบไว ณ ตำแหนงทตวแปรอางถงมาใชงาน
3.5.2 ขอมลชนดตวชการใชตวแปรโดยทวไปนนเราตองการคาทถกเกบไวในหนวยความจำ แตในบางกรณ เราจะเปนตองใชเลขทอยในหนวยความจำ เชน การสงใหคอมพวเตอรอานขอมลไปเกบไวในหนวยความจำ เราตองใหเลขทอยสำหรบการเกบขอมลในคำสงอาน
ในอกทางหนง หากเราเกบเลขทอยไวในหนวยความจำ เรากสามารถดงขอมลทเกบอย ณ เลขทอยนนไดเชนกน การจองพนทเพอเกบเลขทอยนใชผานการประกาศตวแปรชนดตวช โดยตองกำหนดชนดของตวชตามชนดของขอมลปลายทางดวย
จากตารางท 3.3 หากใหขอมลชนดตวชมขนาด 1 ไบต และจำนวนเตมมขนาด 4 ไบต intPtr เปนขอมลชนดตวชของจำนวนเตม และคอมพวเตอรจองพนท ณ ตำแหนง 0x70 ใหสำหรบเกบขอมล เมอกำหนดคาให intPtr เปน 0x74 การอางถงขอมลปลายทางผานตวช intPtr จะไดคาจำนวนเตมขนาด 4ไบตทเกบอย ณ ตำแหนง 0x74 - 0x77 ซงมคาเปน 0x00000064 เปนตน
3.5.3 ตวแปรในภาษาซเมอโปรแกรมเรมทำงานและมการประกาศใชตวแปร ระบบปฏบตการจะจองพนทในหนวยความจำใหเทากบขนาดของตวแปรนน การอางองถงพนทในหนวยความจำในสวนรหสตนฉบบจะทำผานตวแปรโดยไมจำเปนตองรวาไดหนวยความจำทตำแหนงใดมา เชน สมมตใหตวแปรชนดจำนวนเตมมขนาด 4ไบต หากกำหนดตวแปร number เปนชนดจำนวนเตม เครองจะจองพนทวางตดกนขนาด 4 ไบตใหสมมตวาไดเปนตำแหนง 0x74 ถง 0x77 เปนตน
เมอใชคำสงกำหนดคาใหตวแปร ระบบปฏบตการจะกำหนดคา ณ ตำแหนงทอางถง เชน เมอกำหนดให number มคาเปน 100 ระบบปฏบตการจะกำหนดคาใหตำแหนง 0x74 ถง 0x77 เกบคาเลขฐานสองในรปแบบจำนวนเตมขนาด 4 ไบตซงแทนจำนวน 100 (0x00000064)
50 บทท 3. การแทนขอมลในคอมพวเตอร
การเรยกใชคาในตวแปรทำไดโดยเรยกใชชอตวแปรนน และจะหมายถงคาทเกบไว ณ ตำแหนงนนเชน การเรยกใช number จะไดคาเปนจำนวนเตมขนาด 4 ไบตทเกบไว ณ ตำแหนง 0x74-0x77เปนตน
ในทำนองเดยวกน หากกำหนดตวแปร c ใหเปนอกขระในรหสแอสก ซงใชพนท 1 ไบต เครองจะจองพนทในหนวยความจำให สมมตวาไดเปนตำแหนง 0x7D เมอกำหนดคาใหตวแปร c เปน ’0’ จะเปนการใสรหสแอสกของเลขศนย (0x30) ลงในหนวยความจำ ณ ตำแหนง 0x7D และการเรยกใชตวแปร c กจะไดคารหสแอสกขนาด 1 ไบต ณ ตำแหนง 0x7D ออกมาเชนกน
จากทกลาวไปแลววาขอมลทงหมดในคอมพวเตอรถกเกบอยในรปแบบเลขฐาน 2 ในตารางท 3.3หากมองขอมลทตำแหนง 0x77 เปนอกขระในรหส ISO8859-11 จะเหนขอมล ณ ตำแหนงนเปนอกขระd (0X64) ในการจองพนทเพอเกบขอมล จงตองกำหนดชนดของขอมลเพอใหนำไปใชงานตอไดถกตอง
ในการเขยนโปรแกรมนนภาษาซ ตองกำหนดชนดของขอมลทตวแปรนนแทนอยเสมอ และควรตงชอใหสอความถงขอมลทเกบอยดวย เมอจบการทำงานของโปรแกรม โปรแกรมจะคนพนทในหนวยความจำทจองไวสำหรบใชงานใหระบบปฏบตการ เพอนำไปจดสรรใหโปรแกรมอนๆ ใชตอไป
ลองคดหากประกาศตวแปรโดยไมไดกำหนดคาใหตวแปร และเรยกใชตวแปรนน ผลทไดนาจะเปนอยางไร
แบบฝกหดกำหนดชนดของขอมลและพนทในการเกบในภาษาซดงตอไปน
ชนดขอมล พนท (ไบต) ชนดขอมล พนท (ไบต)char 1short 2 int 4unsigned 4 long 8loat 4 double 8
1. จงระบพนทนอยทสดทใชในการเกบขอมลตอไปนa) สายอกขระคา “100”b) จำนวนเตมคา 100c) จำนวนจรงคา 100d) อกขระเลข ‘0’e) สายอกขระเลข “0”
3.5. ตวแปร 51
2. จงระบจำนวนตวแปรทตองใชและชนดของขอมลทเหมาะสมในการเกบขอมลตอไปนa) เกรดประจำรายวชา 2301170 ของนสต 1 คนb) หนวยกตสะสมตลอดหลกสตรสำหรบนสต 1 คนc) ขนาดอะตอมในหนวยนาโนเมตรนยสำคญ 3 ตำแหนงd) คาเฉลยของเลข 10 จำนวนe) เลขปครสตศกราชf) เลขประจำตวประชาชน 13 หลก
3. checksum คอการเกบขอมลเพมหนงคาเพอตรวจสอบความถกตองของขอมลทมความยาวมากในเลขประจำตวนสต 10 หลกนน สองหลกแรกคอปทเขาศกษา หลกทสามคอระดบการศกษา หลกท 4-7 เปนลำดบนสต หลกท 8 คอคา checksum หลกท 9-10 คอรหสคณะ ตองเกบขอมลเลขประจำตวนสตอยางไรจงจะนำมาคำนวณคา checksum ได ใหอธบายตวแปรทใช ระบชนดและวธการใชงานคราว ๆ
4. ตองการคำนวณจำนวนชวโมงการใชงานอนเทอรเนตเพอนำไปคดคาบรการ โดยใหปอนขอมลเขาเปนเวลาเรมใชงาน และเวลาสนสดการใชงาน หากคดคาบรการเปนนาท ควรเกบขอมลอยางไร ใหอธบายตวแปรตางๆ ทจำเปนตองใช ระบชนดของตวแปรดวย
บทท 4การทำงานแบบลำดบ
วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปการทำงานแบบลาดบ
1. ใชตวดำเนนการตางๆ เพอกำหนดการทำงานตามทตองการได รวมถงใชสญลกษณของผงงานไดถกตอง
2. อานรหสเทยมหรอผงงานทใชการทำงานแบบลำดบได ดดแปลงหรอแกไขผงงานทมอยแลวใหทำงานไดถกตองตามตองการ
3. เขยนขนตอนการแกปญหาทใชการทำงานแบบลำดบได4. เขยนคำสงภาษาซได
ใชเวลา 3 คาบ
4.1 ตวดำเนนการโปรแกรมคอมพวเตอรเปนชดคำสงซงใหคอมพวเตอรทำงานตามทกำหนด การเขยนโปรแกรมเพอแกปญหาตางๆ นน ตองรกอนวาคอมพวเตอรสามารถทำอะไรไดบาง และจะสงการใหคอมพวเตอรทำงานเหลานนไดอยางไร จากนนจงสรางชดคำสงซงมลำดบการทำงานทถกตองเพอการแกปญหาทตองการ
การสงใหคอมพวเตอรทำงานงานพนฐานจำนวนหนงใชการสงผานตวดำเนนการ (operator) โดยใหดำเนนการกบตวถกดำเนนการ (operand) ซงเปนขอมลทเกบอยในหนวยความจำโดยอางถงผานตวแปรกได หรอเปนคาคงทกได เชน x + 3 มตวดำเนนการคอเครองหมาย + และตวถกดำเนนการคอคาในตวแปร x และคาคงท 2 ตามลำดบ
นอกจากตวดำเนนการซงใชสำหรบทำงานพนฐานแลว ยงมฟงกชนซงเปนชดคำสงทรวมขนตอนการทำงานพนฐานเอาไวเพอทำงานบางอยางอกดวย การเรยกใชฟงกชนจะกลาวถงในบทท 8
54 บทท 4. การทำงานแบบลำดบ
ตารางท 4.1: ตวดำเนนการพชคณต
ลำดบ สญลกษณ ตวดำเนนการในภาษาซ การใชงาน ความหมาย1 ^ หรอ ** pow(b,e) b ^e การยกกำลง (be)2 * * A * 3 การคณ2 / / A / 3 การหารจำนวนจรง2 DIV / A DIV 3 การหารปดเศษทง2 MOD % A MOD 3 การหารเอาเฉพาะเศษเหลอ3 + + A + 3 การบวก3 - - A - 3 การลบ
นพจน หมายถง การใชสญลกษณตางๆ ไมวาจะเปนคาคงท ตวแปร หรอฟงกชนซงคนคาออกมาประกอบกบตวดำเนนการตางๆ ตามขอกำหนดของตวดำเนนการ และคำนวณผลลพธออกมาเปนคาคาหนงได เมอมฟงกชนและตวดำเนนการหลายๆ ตว โดยทวไปลำดบความสำคญในการทำงานจะเปนดงน
1. ฟงกชน2. ตวดำเนนการซงมตวถกดำเนนการเพยงตวเดยว ทใชบอยไดแก NOT (!), increment (++),
decrement (–), วงเลบ เปนตน3. ตวดำเนนการซงมตวถกดำเนนการสองตว เชน ตวดำเนนการพชคณต ตวดำเนนการเปรยบเทยบ
ตวดำเนนการตรรกะ การกำหนดคา เปนตน
ในแตละหมวดอาจมลำดบความสำคญยอยภายในหมวดดวย หากมตวดำเนนการทมลำดบความสำคญเทากน คอมพวเตอรจะทำงานตามกฎการจดหม (associativity) ของตวดำเนนการเหลานน ซงสวนมาก จะเรมทำจากตวดำเนนการทางซายกอน
4.1.1 ตวดำเนนการพชคณตตวดำเนนการพชคณตคอคำสงการคำนวณทางพชคณตเบองตนตางๆ ลำดบความสำคญในการทำงานเปนดงตารางท 4.1 เรมจากการยกกำลง ซงบางภาษาโปรแกรมเชนภาษาซสรางเปนฟงกชนมาใหใชงานจงมลำดบความสำคญของฟงกชนสงจะกวาการคำนวณเบองตนตางๆ อยแลว การคณและหารทกรปแบบ ตามดวยบวกและลบ
หากมตวดำเนนการยกกำลงแยกตางหาก ไมเปนฟงกชน กฎการจดหมของการยกกำลงคอทำทางขวากอน สวนตวดำเนนการบวก ลบ คณ และหาร ทำทางซายกอนเสมอ
4.1. ตวดำเนนการ 55
ตารางท 4.2: ตวดำเนนการเปรยบเทยบ
ลำดบ สญลกษณ ตวดำเนนการในภาษาซ การใชงาน ความหมาย1 > > A > 2 มากกวา1 ≥ >= A ≥ 2 มากกวาหรอเทากบ1 < < A < 2 นอยกวา1 ≤ <= A ≤ 2 นอยกวาหรอเทากบ2 = == A = 2 เปรยบเทยบการเทากน2 ≠ != A ≠ 2 เปรยบเทยบการไมเทากน
ตารางท 4.3: ตวดำเนนการตรรกะ
ลำดบ สญลกษณ ตวดำเนนการในภาษาซ การใชงาน ความหมาย1 NOT ! NOT(A) ใหคาความจรงตรงกนขามกบคา
เดม2 AND && A AND B ใหคาจรงเมอ A และ B เปนจรง3 OR || A OR B ใหคาจรงเมอ A หรอ B เปนจรง
4.1.2 ตวดำเนนการเปรยบเทยบตวดำเนนการเปรยบเทยบเปนคำสงเปรยบเทยบคาระหวางตวถกดำเนนการทงสองขางของเครองหมายใหผลลพธเปนคาจรงหรอเทจ
ลำดบความสำคญในการทำงานคอ เปรยบเทยบแบบมากกวาหรอนอยกวากอน แลวจงเปรยบเทยบการเทากน ดงตารางท 4.2 แตบางภาษา เชน Python กำหนดลำดบความสำคญของตวดำเนนการเปรยบเทยบทกรปแบบไวเทากน กอนเขยนโปรแกรมจงควรตรวจสอบขอกำหนดของแตละภาษาอกครง
เครองหมาย = นนมสองความหมาย นยหนงหมายถงการเปรยบเทยบการเทากน แตเครองหมาย= กใชเปนตวดำเนนการกำหนดคาในหลายๆ ภาษาโปรแกรมดวย จงนยมเขยน == เหมอนในภาษาโปรแกรมเพอแสดงการเปรยบเทยบมากกวา
4.1.3 ตวดำเนนการตรรกะตวดำเนนการตรรกะเปนคำสงการคำนวณทางตรรกะของตวถกดำเนนการ ใหผลลพธเปนคาจรงหรอเทจ
เนองจาก NOT เปนตวดำเนนการซงมตวถกดำเนนการเพยงตวเดยว จงมลำดบความสำคญสงทสดถดมาเปนคำสง AND และคำสง OR ตามลำดบ ดงตารางท 4.3
56 บทท 4. การทำงานแบบลำดบ
4.1.4 การกำหนดคาการกำหนดคาในภาษาโปรแกรมและผงงานสวนมากใชตวดำเนนการ = หรอ := และมตวถกดำเนนการสองตว ซงหมายถง การนำคาของตวถกดำเนนการทางขวา ในรหสคำสงท 4.1 คอ source ไปเกบในทอยของตวดำเนนการทางซาย ในทนคอ target ตวถกดำเนนการทางขวาอาจะเปนตวแปร คาคงทหรอนพจนกได
target = source
รหสคำสงท 4.1: การกำหนดคาการกำหนดคามลำดบความสำคญตำทสดในบรรดาคำสงและตวดำเนนการทงหมดทกลาวมาแลว ซง
ทำใหการกำหนดคาตองทำนพจนทางขวาใหเปนผลลพธกอน แลวจงดำเนนการกำหนดคาใหพนททจองไวซงระบดวยตวแปรทางซายของตวดำเนนการ
4.1.5 การอานเขยนขอมลเบองตนจากทกลาวไปแลวในบทท 1 และ 3 การทำงานกบขอมลของคอมพวเตอรนนจะเกบขอมลในหนวยความจำเสมอ ซงสามารถอางถงหนวยความจำนนไดผานตวแปร การอานหรอรบขอมลเขามาเกบอยในคอมพวเตอร จงเปนการรบขอมลจากอปกรณภายนอกแลวนำมาเกบในหนวยความจำ ณ ตำแหนงทกำหนดดวยชอตวแปร ในขณะทการเขยนขอมล คอการนำคาทเกบอยในหนวยความจำซงอางถงดวยชอตวแปรออกมาแสดงผลผานอปกรณทกำหนด โดยปกตแลว วธการอานเขยนขอมลจะเปนฟงกชนอยในคลงโปรแกรม
การอานขอมลครงหนงสามารถอานคาไดมากกวาหนงคา และตองใชตวแปรจำนวนเทากนในการรบคาทอานเขามาดวย ในทำนองเดยวกน การเขยนขอมลกเขยนไดมากกวาหนงคาในหนงครง และตองระบคาทตองการใหเขยนทกคาลงไป สำหรบการเขยนขอมลนน นอกจากจะเขยนคาทเกบอยในตวแปรโดยตรงไดแลว ยงสามารถเขยนคาคงท และเปนนพจนตางๆ ซงถกทำใหเปนผลสำเรจและกลายเปนคาคงทไดอกดวย
ลองคดจะเหนวาตวดำเนนการตางๆ โดยเฉพาะการคำนวณใชกบขอมลชนดจำนวนเปนหลก เราสามารถใชตวดำเนนการเพอการคำนวณกบขอมลชนดอกขระไดหรอไม จงใหเหตผลประกอบ
4.2 การออกแบบโปรแกรมการแกปญหาโดยคอมพวเตอรคอการเขยนลำดบการทำงานอยางเปนขนเปนตอนเพอใหคอมพวเตอรทำตาม เมอสามารถแทนขอมลเพอใชในการทำงานของคอมพวเตอรไดแลว ลำดบตอไปคอการนำการดำเนนการตางๆ มาเรยงเปนขนตอนเพอแกปญหาทกำหนด
4.2. การออกแบบโปรแกรม 57
4.2.1 ขนตอนวธการออกแบบโปรแกรมคอการออกแบบขนตอนวธเพอแกปญหาทกำหนด โดยทวไปมกเรมจากกำหนดรปแบบของขอมลเขาและขอมลออกกอน จากนนจงแบงงานทตองทำในการแกปญหาออกเปนสวนยอยๆแลวเขยนลำดบคำสงเพอแกปญหายอยเหลานน วธการออกแบบโปรแกรมแบบนเรยกวา การออกแบบแบบบนลงลาง (top-down approach)ตวอยาง 4.1 (การบวกเลขสองจำนวน). การออกแบบการทำงานของเครองบวกเลข จะเรมจากการกำหนดลกษณะขอมลเขาและขอมลออกกอน ใหเครองบวกเลขรบจำนวนสองจำนวน แลวคนผลลพธเปนผลบวกของสองจำนวนนน ลกษณะของขอมลเขาจะเปนจำนวน 2 คา และขอมลออกจะเปนจำนวน 1 คาจากนนออกแบบขนตอนการทำงาน เขยนเปนลำดบการทำงานไดดงน
1. รบขอมลเขา 2 จำนวน2. หาผลบวก เกบผลลพธเอาไว3. สงผลลพธคนเปนขอมลออก
จากนนจงเปลยนลำดบการทำงานนเปนคำสงสำหรบคอมพวเตอรตอไป □
ตวอยาง 4.2 (การหาคาเฉลยของเลขสามจำนวน). การออกแบบโปรแกรมนกคลายกบตวอยาง 4.1 คอมขอมลเขาเปนจำนวน 3 คา และขอมลออกเปนจำนวน 1 คา และเขยนลำดบการทำงานไดในทำนองเดยวกน ดงน
1. รบขอมลเขา 3 จำนวน2. หาคาเฉลย เกบผลลพธเอาไว3. สงผลลพธคนเปนขอมลออก
และแปลงลำดบการทำงานนเปนคำสงสำหรบคอมพวเตอรหรออกวธหนง เราอาจแยกขนตอนท 2 ออกเปน 2 ขนตอนยอยเพอหาคาเฉลยไดดงน1. รบขอมลเขา 3 จำนวน2. หาคาเฉลย เกบผลลพธเอาไว โดยมขนตอนดงน
a) หาผลบวกของสามจำนวน เกบผลลพธเอาไวb) นำผลลพธขางตนหารดวย 3 เกบไวเปนผลลพธสดทาย
3. สงผลลพธคนเปนขอมลออก□
ขอสงเกตสำคญจากตวอยาง 4.2 คอในขนตอนท 2 ของแบบแรกนน เราใหคอมพวเตอรหาคาเฉลย แสดงวาคอมพวเตอรตองมคำสงสำหรบหาคาเฉลยของจำนวน 3 จำนวนอยแลว หากไมม การเขยนขนตอนการทำงานแบบนจะนำไปแปลงเปนคำสงในคอมพวเตอรไมได ในการออกแบบขนตอนการทำงาน
58 บทท 4. การทำงานแบบลำดบ
ผออกแบบจงจำเปนตองรความสามารถของคอมพวเตอรดวย และการออกแบบโปรแกรมนนจงเปนการแตกการทำงานออกมาเปนขนตอนพนฐานยอยๆ ทคอมพวเตอรสามารถทำงานได
4.2.2 รหสเทยม (pseudocode) และ ผงงาน (flowchart)รหสเทยม คอชดคำสงคอมพวเตอรซงใชแสดงขนตอนการทำงานตางๆ รหสเทยมมลกษณะคลายรหสคำสงภาษาตางๆ แตไมมขอกำหนดเรองไวยากรณมากเทารหสคำสง ขอดของการใชรหสเทยมคอสามารถแปลงไปเปนรหสคำสงตามภาษาทตองการไดสะดวก เนองจากโครงสรางคำสงคลายกนมาก แตหากขนตอนวธนนซบซอน รหสเทยมจะเขาใจไดยากกวาการใชแผนภาพ
แผนภาพหนงทใชในการออกแบบขนตอนการทำงานคอผงงาน ผงงานประกอบดวยสญลกษณกำหนดขนตอนการทำงาน และลกศรแสดงลำดบขนตอนการทำงาน มการกำหนดมาตรฐานความหมายของสญลกษณตางๆ ในผงงานเพอใหเขาใจไดตรงกน มาตรฐานทใชกนมากคอ ISO5807:1985สญลกษณทใชกนทวไป เปนดงตารางท 4.4
ลำดบการทำงานในผงงานกำหนดดวยลกศร การทำงานจะเรมจากสญลกษณเรมตน ทำงานตามลกศรไปทละขนตอน และไปสนสดทสญลกษณสนสดการทำงาน สญลกษณการอานเขยนขอมล การทำงานและการเรยกใชขนตอนการทำงานทกำหนดไวลวงหนานน จะมลกศรเขาหนงทาง และลกศรออกหนงทางเสมอ ในขณะทสญลกษณเรมตนจะไมมลกศรเขา มเฉพาะลกศรออก และสญลกษณจบการทำงานจะมเฉพาะลกศรเขา และไมมลกศรออก สวนสญลกษณจดเชอมตอขามหนาใชลกศรกำหนดทศทางการทำงานเชนเดยวกบสญลกษณเรมตนและสนสด
สญลกษณเงอนไขมลกศรเขาไดทางเดยว แตมลกศรออกไดหลายทาง การเลอกเสนทางขนกบผลของเงอนไขทระบในสญลกษณ ไมวาจะแยกไปทำงานตามทางเลอกใดกตาม เมอทำงานจบแลวกจะกลบมาทำงานตามขนตอนตอไปเสมอ จงใชสญลกษณจดเชอมตอในการรวมเสนทางตางๆ เขาดวยกน แลวกำหนดใหมลกศรออกจากจดเชอมตอเพยงเสนทางเดยว เพอไปทำงานตามขนตอนตอไป
ตวอยาง 4.1 เมอนำมาเขยนเปนผงงาน จะไดผงงานดงรปท 4.1 สวนตวอยาง 4.2 เมอนำมาเขยนเปนผงงาน จะไดผงงานดงรปท 4.2
4.2.3 แผนภาพอนๆ ในการออกแบบผงงานมกใชในการออกแบบขนตอนการทำงาน แตในการออกแบบโปรแกรมขนาดใหญจำเปนตองมการระบองคประกอบตางๆ ในโปรแกรม และแผนภาพอธบายการทำงานรวมกนระหวางสวนตางๆ แผนภาพสำหรบการออกแบบอนๆ ทนยมใชกนเชน UML, Data Flow Diagram เปนตน
ไมวาจะใชแผนภาพรปแบบใดกตาม สงสำคญคอตองใชสญลกษณทเปนมาตรฐานเพอใหเขาใจไดตรงกน วางโครงใหสะอาดสะอาน อานงาย ระบชอผเขยนและวนทปรบปรงแกไขไวเสมอเพอการตดตามในอนาคต
4.2. การออกแบบโปรแกรม 59
ตารางท 4.4: สญลกษณของผงงานและความหมาย
สญลกษณ ความหมายSTART
STOP
การเรมตนหรอสนสดการทำงาน โดยเขยนกำกบภายในสญลกษณดวยขอความระบการเรมตน/สนสด เชน START/STOP หรอ BEGIN/END เสมอ
x=y*3
การทำงานหรอการกำหนดคา โดยเขยนกำกบภายในสญลกษณสำหรบวชานใชกบการคำนวณตางๆ โดยใชตวดำเนนการทกลาวไปแลวขางตน รวมกบการกำหนดคาใหตวแปร
READ x WRITE x
การอาน/เขยนขอมลโดยไมระบสอ โดยเขยนคำสงระบการอานหรอเขยน เชน READ/INPUT พรอมทอยสำหรบเกบคาทรบเขาหรอ WRITE/OUTPUT/PRINT พรอมคาทตองการแสดงผลกำกบในสญลกษณเสมอ
READ x
การรบขอมลผานแปมพมพ โดยเขยนคำสงระบการรบขอมลเชน INPUT/READ พรอมทอยสำหรบเกบคาทรบเขากำกบในสญลกษณเสมอ
PRINT x
การแสดงผลขอมลผานเครองพมพ โดยเขยนคำสงระบการพมพเชน PRINT พรอมคาทตองการแสดงผลกำกบในสญลกษณเสมอ
x>y*3T F
ระบเงอนไขในสญลกษณเพอกำหนดทางเลอกในการทำงานลำดบการทำงานตอไปมไดหลายรปแบบขนกบผลการดำเนนการตามเงอนไข
draw(text) ขนตอนการทำงานทกำหนดไวลวงหนา เชนการเรยกใชฟงกชนหรอโปรแกรมยอยทกำหนดเอง
จดเชอมตอภายในหนา ใชรวมทางแยกการทำงานใหเปนทางเดยว ใชในการทำงานแบบทางเลอกและการวนซำ
AA
จดเชอมตอขามหนา ตองเขยนหมายเลขอางองการเชอมตอไวภายในสญลกษณเสมอ ใชแทนการสนสดการทำงานในหนาตนทาง และใชแทนการเรมตนการทำงานในหนาปลายทาง และตองใชหมายเลขอางองเดยวกนทงตนทางและปลายทาง
60 บทท 4. การทำงานแบบลำดบ
START
READ num1, num2
out = num1+num2
WRITE out
STOP
1. รบขอมลเขา 2 จำนวน2. หาผลบวก เกบผลลพธเอาไว3. สงผลลพธคนเปนขอมลออก
รปท 4.1: ผงงานและขนตอนวธสำหรบตวอยาง 4.1
START
READ num1, num2, num3
sum = num1+num2+num3
avg = sum/3
WRITE out
STOP
1. รบขอมลเขา 3 จำนวน2. หาผลบวก เกบผลลพธเอาไว3. นำผลลพธขางตนหารดวย 3 เกบไวเปน
ผลลพธสดทาย4. สงผลลพธคนเปนขอมลออก
รปท 4.2: ผงงานและขนตอนวธสำหรบตวอยาง 4.2
ลองคดหากกำหนดโจทยให มกรณใดบางหรอไม ทสามารถแกปญหาจรงได แตไมสามารถเขยนขนตอนการแกปญหาออกมาเปนผงงานได ใหอธบายเหตผลประกอบ
4.3 การเขยนและตรวจสอบโปรแกรมเมอออกแบบขนตอนวธเสรจแลว ควรตรวจสอบความถกตองของการออกแบบดวยการสมมตชดขอมลเขาและออก แลวทดลองทำงานตามขนตอนทออกแบบไว หากไดผลลพธตรงตามทตองการ แสดงวาขนตอนวธทออกแบบไวนนถกตอง อยางไรกตาม การตรวจสอบขนตอนวธนเปนเพยงการทดสอบเบองตนเทานน ในการใชงานจรงนนโปรแกรมยงอาจมความผดพลาดเกดขนไดอกหลายรปแบบ หลงจากทดสอบ
4.3. การเขยนและตรวจสอบโปรแกรม 61
เบองตนแลว จงควรเขยนโปรแกรมและทดสอบการทำงานจรงของโปรแกรมดวย
4.3.1 การเขยนโปรแกรมขนตอนวธทออกแบบนนเขยนในรปแบบทเขาใจงาย เปนภาษามนษย แตคอมพวเตอรทำงานโดยใชภาษาโปรแกรม จงตองแปลงขนตอนวธทออกแบบใหเปนภาษาโปรแกรมกอน หากออกแบบไวไดดพอ การแปลงขนตอนวธไปเปนภาษาโปรแกรมจะตรงไปตรงมา ทำไดงาย
ผเขยนโปรแกรมสามารถเลอกภาษาโปรแกรมไดหลากหลายตามความถนดและสภาพแวดลอมทกำหนด ผเขยนตองศกษารปแบบคำสงในภาษาตางๆ แลวจงแปลงการออกแบบใหเปนรหสตนฉบบในภาษานนๆ ปจจบนมอปกรณชวยเหลอในการแปลงการออกแบบใหเปนรหสตนฉบบอยพอสมควร โดยเฉพาะอยางยงการออกแบบสมยใหมอยาง UML ม IDE เชน Eclipse, Microsoft Visual Studioสนบสนนการแปลงการออกแบบเปนรหสตนฉบบโดยอตโนมต
หลงจากไดรหสตนฉบบแลว จะอาศยโปรแกรมแปลภาษาดงทกลาวแลวในบทท 1 เพอแปลรหสตนฉบบในภาษาโปรแกรมใหกลายเปนภาษาเครอง แลวอาศยโปรแกรมเชอมโยงในการเชอมโยงออบเจกตโคดทเกยวของเพอสรางเปนโปรแกรมททำงานไดตอไป
4.3.2 ขอผดพลาดรปแบบตาง ๆโปรแกรมทออกแบบหรอเขยนขนอาจมขอผดพลาดตางๆ ได 3 รปแบบ ดงน
1. ขอผดพลาดทางตรรกะ (logical error) คอการไดผลลพธไมตรงตามทควรจะเปน ขอผดพลาดนอาจเกดจากการออกแบบทไมถกตอง หรอการแปลงการออกแบบเปนรหสตนฉบบทไมถกตอง
2. ขอผดพลาดทางโครงสรางภาษา (syntax error) คอการเขยนรหสตนฉบบไมถกตองตามขอกำหนดของภาษาโปรแกรมนนๆ ทำใหไมสามารถแปลรหสตนฉบบออกมาเปนภาษาเครองได โดยปกตโปรแกรมแปลภาษาจะบอกขอผดพลาดนในการแปล
3. ขอผดพลาดขณะทำงาน (runtime error) แมการออกแบบจะถกตอง เขยนรหสตนฉบบไดถกตอง กอาจมขอผดพลาดทเกดขนจากขอมลเขาทปอน หรอขอจำกดตางๆ ของสภาพแวดลอมทโปรแกรมไมสามารถรลวงหนาได
4.3.3 การตรวจสอบโปรแกรมจากขอผดพลาดทงสามรปแบบนน ขอผดพลาดทางโครงสรางภาษาเปนขอผดพลาดทตรวจพบไดงายทสด เพราะโปรแกรมแปลภาษาจะแจงใหทราบทนท แตขอผดพลาดทางตรรกะและขอผดพลาดขณะทำงานนนตองอาศยขอมลทดสอบจงจะตรวจสอบได
หากชดทดสอบนนครอบคลมขอมลทกรปแบบทเปนไปได เราจะสามารถยนยนไดวาโปรแกรมทำงานถกตองแนนอน แตสวนใหญขอมลทเปนไปไดจะมไมจำกด การเลอกตวอยางขอมลเพอมาทดสอบจงควร
62 บทท 4. การทำงานแบบลำดบ
ตารางท 4.5: การตรวจสอบคาตวแปร สำหรบตวอยางท 4.1
คำสง num1 num2 outREAD num1, num2out = num1 + num2WRITE out
รปท 4.3: ตวอยางการทำงานของโปรแกรมตรวจแกจดบกพรอง
เลอกใหครอบคลมกรณตางๆ อยางครบถวน เชน ขอบของคาตางๆ กรณทเปน 0 ซงมกมปญหากบการหาร กรณทขอมลเปนลบ กรณทขอมลเตมหรอเกนจำนวนทนาจะเกบได
หลงจากเลอกชดขอมลทดสอบไดแลว จะเปนการทดลองใหโปรแกรมทำงานดวยขอมลทดสอบ หากเปนผงงาน เราอาจจำลองการทำงานไดโดยตารางตรวจสอบคาตวแปร ใหแตละบรรทดในตารางแทนคำสงตางๆ และคอลมนในตารางแทนตวแปร คาในชองของตารางจะเปนคาของตวแปรนนเมอทำคำสงเสรจตารางท 4.5 เปนตารางตรวจสอบคาตวแปรสำหรบตวอยางท 4.1
โปรแกรมตรวจแกจดบกพรอง (debugger) เปนโปรแกรมททำงานแบบเดยวกบตารางตรวจสอบคาตวแปร โดยโปรแกรมจะทำงานไปทละคำสง และแสดงคาในตวแปรแตละตวใหเหน ซอฟตแวรเพอพฒนาโปรแกรมในปจจบนมกจะรวมโปรแกรมตรวจแกจดบกพรองนเขาไปดวย รปท 4.3 เปนซอฟตแวรเพอพฒนาโปรแกรมของภาษาไพธอน ซงกำลงตรวจแกจดบกพรองอย ฝงซายของจอภาพแสดงรหสคำสง และสามารถสงทำงานทละบรรทดได ฝงลางขวาแสดงสวนของรหสคำสงทกำลงทำงาน สวนฝงขวาบนแสดงรายการตวแปรและคาของตวแปรขณะกำลงทำงาน
4.4. คำสงพนฐานในภาษาซ 63
ลองคดจากตวอยางท 4.1 จงหาชดขอมลเขาเพอทดสอบโปรแกรมทครอบคลมกรณตางๆ ไดครบถวนเพยงพอ
4.4 คำสงพนฐานในภาษาซคำสงทพบบอยในภาษาซทจะกลาวถงในบทนไดแก การประกาศตวแปร การกำหนดคา และการอานเขยนขอมลเบองตน
4.4.1 การประกาศตวแปรและการกำหนดคาการประกาศตวแปรคอการจองพนทในหนวยความจำสำหรบขอมลชนดทตองการ ในภาษาซ การประกาศตวแปรทำไดดงรหสคำสงท 4.2
<data type> <name>;
รหสคำสงท 4.2: การประกาศตวแปรในภาษาซ
โดยท <type> คอชนดของตวแปร และ <name> คอชอของตวแปร และปดทายดวย ;1วธหนงในการกำหนดคาใหตวแปรคอใชตวดำเนนการ = ซงมตวถกดำเนนการสองตว อยทางซายและ
ขวาของเครองหมาย ดงรหสคำสงท 4.3<var name> = <value>;
รหสคำสงท 4.3: การกำหนดคาใหตวแปรในภาษาซ
หมายถง การนำคา <value> ทอยทางขวา ไปเกบไวในทอย <var> ทางซาย ตว <value> จะเปนตวแปรหรอนพจนกได หากเปนนพจน เครองจะคำนวณใหเปนผลสำเรจกอนจะนำคาผลสำเรจไปใช
การประกาศตวแปรและการกำหนดคาสามารถทำรวมกนในคำสงเดยวกนได ดงรหสคำสงท 4.4<data type> <var name> = <value>;
รหสคำสงท 4.4: การประกาศตวแปรพรอมกบกำหนดคาในภาษาซ
ชนดของตวแปรในภาษาซทใชบอย เปนดงตารางท 4.6 สวนตวแปรชนดสายอกขระในภาษาซกำหนดชนดเปน char* หรอตวชของอกขระ เนองจากภาษาซเกบสายอกขระดวยแถวลำดบของอกขระ การประกาศตวแปรจงใชหลกการเดยวกบการประกาศตวแปรของแถวลำดบ นอกจากน ยงสามารถประกาศตวแปรสายอกขระไปพรอมกบการกำหนดคาเรมตนดวยการใชคาคงทไดอกดวย สวนการกำหนดคาใหตวแปรชนดสายอกขระภายหลงการประกาศตวแปรตองทำผานฟงกชนการจดการสายอกขระเทานน
1โครงสรางคำสงในภาษาซจะปดทายคำสงดวย ; เสมอ
64 บทท 4. การทำงานแบบลำดบ
ตารางท 4.6: ชนดของขอมลทใชบอยในภาษาซ
ชนดตวแปร คาทเกบไดint จำนวนเตมloat จำนวนจรงนยสำคญปกตdouble จำนวนจรงนยสำคญสงchar อกขระ
ตารางท 4.7: รปแบบขอมลเขาและวธระบทอยสำหรบคำสง scanf
รปแบบขอมลเขา การระบทอย%d &intVar
%f &loatVar
%c &charVar
%s strVar
4.4.2 การอานขอมลเขาการรบขอมลเขาอยางงายคอการรบขอมลเขาผานแปนพมพ ในภาษาซ มฟงกชน scanf ไวเพออานขอมลเขาและเกบขอมลเปนชนดทกำหนดได โครงสรางคำสง scanf เปนดงรหสคำสงท 4.5
scanf(”<format>”,<addlist>);
รหสคำสงท 4.5: โครงสรางคำสง scanfโดยท format คอสายอกขระบงบอกรปแบบของขอมลเขา และ addlist คอรายการเลขทอยสำหรบเกบขอมล ซงเปนตวแปรสำหรบเกบขอมล แตละตวคนดวยจลภาค (,)
รปแบบของขอมลเขาทพบบอยเปนดงตารางท 4.7 โดยท intVar, loatVar, charVar และstrVar เปนตวแปรชนดจำนวนเตม จำนวนจรง อกขระ และสายอกขระตามลำดบ
การใส & นำหนาชอตวแปร เปนการอางถงเลขทอยของตวแปรนน ในกรณของสายอกขระ ซงตวแปรเกบเลขทอยตำแหนงแรกของสายอกขระอยแลว จงไมจำเปนตองใส & นำหนาอก
4.4.3 การแสดงผลทางหนาจอการแสดงผลทางหนาจอในภาษาซใชคำสง printf ซงมโครงสรางคลาย scanf ดงรหสคำสงท 4.6
printf(”<format>”,<varlist>);
รหสคำสงท 4.6: โครงสรางคำสง printf
4.4. คำสงพนฐานในภาษาซ 65
โดยท format คอรปแบบของขอมลเขา ใชรปแบบเดยวกบคำสง scanf ในตารางท 4.7 และvarlist คอรายการตวแปรทเกบขอมล หากมมากกวาหนงตวใหคนดวยจลภาค (,) เชนเดยวกน
รหสคำสงท 4.7 คอคำสงสำหรบการทำงานในตวอยางท 4.1 บรรทดท 1 สงใหรบขอมลเขาเปนจำนวนเตม 2 จำนวน และบรรทดท 3 สงใหแสดงคาทอยในตวแปร out ซงเปนจำนวนเตมออกทางหนาจอ
1 scanf(”%d %d”, &num1, &num2);2 out = num1+num2;3 printf(”%d”, out);
รหสคำสงท 4.7: รหสคำสงสำหรบตวอยางท 4.1
แบบฝกหด1. จงเขยนผงงานแสดงการคำนวณจำนวนคนสงสดทลฟทรบนำหนกได เมอใหขอมลเขาเปนนำหนก
ทลฟทรบได และนำหนกเฉลยของคน กำหนดใหนำหนกทงสองคาเปนจำนวนเตม2. ตามตำราการดดวงมกจะใหนำตวเลขมาบวกลบคณหารกน ตำราหนงกลาวไววา ใหนำอายคณกบ
12 แลวหารดวย 7 เหลอเศษเทาใดใหดคำทำนายของเศษนน ใหรบขอมลเขาเปนอาย คำนวณหาเศษเหลอ แลวแสดงผลเศษเหลอใหผใชทางจอภาพ
3. กำหนดใหคาคงท � มคา 3.14 จงเขยนผงงานแสดงการคำนวณหาปรมาตรของทรงกลมซงผใชปอนขอมลรศมเขามาให
4. จงเขยนผงงานแสดงการคำนวณหาพนทของสามเหลยมเมอผใชปอนขอมลความยาวของดานทงสามเขามาให
5. หากใหผใชปอนขอมลเปนขนาดกวาง ยาว สง ของกลองทรงสเหลยมมมฉาก จงเขยนผงงานเพอแสดงการคำนวณหาขนาดกระดาษสเหลยมมมฉากทเลกทสดทจะหอกลองนไดทกดานพอดโดยไมตองตดกระดาษ และแสดงคาขนาดกวางยาวของกระดาษทคำนวณได
6. เขยนผงงานและโปรแกรมภาษาซเพอรบขอมลเขาเปนจำนวนเตม 2 คาเกบในตวแปร a, b ตามลำดบ แลวแสดงคาทเกบอยในตวแปร a, b จากนนสลบคาทเกบอยในตวแปร a ไปเกบไวในตวแปร b และใหคาทอยในตวแปร b มาเกบไวในตวแปร a จากนนแสดงผลคาทอยในตวแปร a,b อกครง
7. มสทธสมครทนรฐบาลญปนระดบปรญญาตรตองมเกรดเฉลยสะสมระดบมธยมปลายไมตำกวา3.8 แตหากผสมครมความรภาษาญปนจะไดรบสทธในการสมครแมเกรดเฉลยจะไมถง 3.8 โดยหากมความรภาษาญปนระดบ N1 หรอ N2 ตองมเกรดเฉลยสะสมไมตำกวา 3.3 หรอหากมความรภาษาญปนระดบ N3 หรอ N4 ตองมเกรดเฉลยสะสมไมตำกวา 3.5 จงจะมสทธสมคร จงเขยนโปรแกรมภาษาซเพอรบขอมลคณสมบตผสมคร แลวเขยนนพจนเพอตรวจสอบวาผสมครรายนมสทธสมครสอบหรอไม ใหออกแบบการรบขอมลและตวแปรเองทงหมด
66 บทท 4. การทำงานแบบลำดบ
8. วชาหนงมคะแนนเตม 100 คะแนน แบงเปนคะแนนเกบ 20 คะแนน คะแนนสอบกลางภาค 40คะแนน และคะแนนสอบปลายภาคอก 40 คะแนน เงอนไขการผานวชานคอตองมคะแนนรวมไมนอยกวา 50 คะแนน โดยตองไดคะแนนสอบกลางภาคไมนอยกวาครงหนง และคะแนนสอบปลายภาคไมนอยกวาครงหนง จงเขยนนพจนทใหคาจรงเมอคะแนนของนสตเขาเงอนไขการผานวชานใหออกแบบการรบขอมลและตวแปรสำหรบเกบขอมลตาง ๆ เองทงหมด
9. เดอนกมภาพนธในปอธกสรทนจะม 29 วน ปอธกสรทนคอปครสตศกราชทหารดวย 4 ลงตวแตหารดวย 100 ไมลงตวหรอเปนปทหารดวย 400 ลงตว หากใหตวแปร year เกบคาปครสตศกราชเปนจำนวนเตมบวก จงเขยนเงอนไขทใหคาจรงเมอ year เปนปอธกสรทน และใหคาเทจเมอ year เปนปทวไป และเขยนชดขอมลทดสอบเพอตรวจสอบวานพจนทเขยนถกตองหรอไม
บทท 5การทำงานแบบทางเลอก
วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปการทำงานแบบทางเลอก
1. แกปญหาทตองใชการทำงานแบบทางเลอกได เขยนอธบายขนตอนดวยผงงานหรอรหสเทยมได2. อานสวนของโปรแกรมภาษาซเพอทำงานแบบทางเลอกเขาใจ และสามารถบอกผลของการทำงาน
ไดถกตอง3. เขยนโปรแกรมภาษาซเพอแกปญหาทตองใชการทำงานแบบทางเลอกได
ใชเวลารวม 6 คาบ
5.1 โครงสรางการทำงานแบบเงอนไขสองทางเลอกการทำงานแบบเงอนไขสองทางเลอก คอการทำงานแบบมทางเลอกสองทาง และใชเงอนไขซงมคาทเปนไปไดสองรปแบบในการเลอกการทำงาน เชน
• หากไดคะแนนอยางนอยรอยละ 90 จะไดเกรด A และจะไมไดเกรด A หากไดคะแนนนอยกวานทางเลอกรปแบบนคอการเลอกกำหนดคาผลลพธโดยขนกบเงอนไขคะแนนทได
• ในระบบสบนำเขาถงเกบนำ ปมจะหยดสบนำเขาโดยอตโนมตหากระดบนำในถงถงขดทกำหนดทางเลอกรปแบบนคอเลอกทจะทำงาน (สบนำ) หรอไมทำงาน ขนกบเงอนไขคาจากตววดระดบนำ
โครงสรางการทำงานแบบเงอนไขจะประกอบดวยเงอนไข และทางเลอกในการทำงาน โครงสรางการทำงานแบบเงอนไขอยางงายจะประกอบดวยเงอนไข 1 เงอนไข ซงเปนนพจนตรรกศาสตร มคาทเปนไปได2 คา คอ จรง หรอ เทจ และทางเลอกในการทำงาน 2 ทาง ทางแรกทำเมอเงอนไขเปนจรง และทางทสองทำเมอเงอนไขเปนเทจ เขยนเปนผงงานไดดงรปท 5.1
68 บทท 5. การทำงานแบบทางเลอก
เงอนไข
งาน 1 งาน 2
T F
รปท 5.1: โครงสรางการทำงานแบบเงอนไขสองทางเลอก
leapyear
ndays = 366 ndays = 365
T F
รปท 5.2: สวนของผงงานสำหรบตวอยางท 5.1
โดย งาน 1 คองานททำเมอเงอนไขเปนจรง และ งาน 2 คองานททำเมอเงอนไขเปนเทจ งาน 1 หรองาน 2 อาจเปนโครงสรางการทำงานแบบลำดบ ซงประกอบดวยการทำงานหลายอยางเรยงกน หรออาจจะไมมการทำงานเลยกได
ตวอยาง 5.1 (การหาจำนวนวนในหนงป). ใหตวแปร leapyear เปนตวแปรเกบคาตรรกะ ซงมคาเปนจรงเมอปนนเปนปอธกสรทน และมคาเปนเทจในกรณอน กำหนดใหตวแปร ndays เปนตวแปรสำหรบเกบคาจำนวนวนในหนงป ปนนจะม 366 วนหากเปนปอธกสรทน และม 365 วนหากเปนปปกต
จงเขยนผงงานเพอกำหนดจำนวนวนในหนงป โดยขนกบวาปนนเปนปอธกสรทนหรอไม ไดผลลพธเปนดงรปท 5.2 มเงอนไขคอคาในตวแปร leapyear และงานทตองทำเปนการกำหนดจำนวนวนใหตวแปร ndays
□
ลองคดผลลพธของเงอนไขในตวอยาง 5.1 เปนคาตรรกะจรงหรอเทจ เราสามารถใชการทำงานแบบสองทางเลอกกบผลลพธรปแบบอนทไมใชคาจรงหรอเทจไดหรอไม ใหเหตผลประกอบ
5.2. เงอนไขซอนและการทำงานแบบหลายทางเลอก 69
เงอนไข 1
เงอนไข 2
งาน 1-1 งาน 1-2
เงอนไข 3
งาน 2-1 งาน 2-2
งาน 1 งาน 2T F
T F T F
รปท 5.3: โครงสรางการทำงานแบบเงอนไขซอนเงอนไข
5.2 เงอนไขซอนและการทำงานแบบหลายทางเลอกจากรปท 5.1 งานททำเมอเงอนไขเปนจรง (งาน 1) หรองานททำเมอเงอนไขเปนเทจ (งาน 2) นอกจากจะเปนคำสงพนฐานหรอโครงสรางการทำงานแบบลำดบไดแลว ยงสามารถเปนโครงสรางการทำงานแบบเงอนไขไดเชนกน เมอซอนเงอนไขเพมเขาไป จะทำใหมทางเลอกทเปนไปไดมากขนอก
5.2.1 เงอนไขซอนการซอนเงอนไขทำไดในทกทางเลอก กรณทเงอนไขหลกเปนเงอนไขแบบสองทางเลอกคาจรง/เทจ การซอนเงอนไขกทำไดทงในฝงทเงอนไขหลกเปนจรงและฝงทเงอนไขหลกเปนเทจ ดงรปท 5.3
ในกรอบงาน 1 เปนโครงสรางแบบเงอนไข ซงจะทำงาน 1-1 เมอเงอนไข 2 เปนจรง และทำงาน 1-2เมอเงอนไข 2 เปนเทจ สวนกรอบงาน 2 กเปนโครงสรางแบบเงอนไข ประกอบดวยเงอนไข 3 งาน 2-1และงาน 2-2 ในทำนองเดยวกน
ตวอยาง 5.2 (การแปลงเวลาจากระบบ 24 ชวโมงไปเปนระบบ AM/PM). เวลาในระบบ 24 ชวโมงจะเรมตนท 0 นาฬกา ไปจนถง 23 นาฬกา แตเวลาในระบบ AM/PM จะแบงครงเชาเปน AM และครงบายเปน PM โดยท 0 นาฬกาจะเปน 12AM และ 12 นาฬกาจะเปน 12PM เวลาอน ๆ เปน 1-11 ตามลำดบ
การแปลงเวลาในระบบ 24 ชวโมงไปเปนระบบ AM/PM อาจทำไดโดยแบงครงเชาและบายกอน(เงอนไข 1) จากนนจงแยกแสดงผล 0 นาฬกา กบ 1-11 นาฬกา (เงอนไข 2) และครงบายกแยกแสดงผล 12 นาฬกา กบ 13-23 นาฬกา (เงอนไข 3) เชนเดยวกน
ให hour24 เปนตวแปรเกบจำนวนเตมเลขชวโมงในระบบ 24 ชวโมง และ hourAMPM เปนผลลพธ เกบจำนวนเตมในระบบ AM/PM จะเขยนสวนของผงงานเพอกำหนดคาให hourAMPM ไดดงรปท 5.4
□
70 บทท 5. การทำงานแบบทางเลอก
hour24 < 12
hour24 == 0
hourAMPM=12
hourAMPM=hour24
hour24 == 12
hourAMPM=12
hourAMPM=hour24-12
T F
T F T F
รปท 5.4: ผงงานสำหรบตวอยางท 5.2
5.2.2 การทำงานแบบหลายทางเลอกการใชเงอนไขทใหคาจรงหรอเทจนน มทางเลอกทเปนไปไดเพยงสองทาง แตในบางกรณ เราอาจตองการเลอกทำงานตามเงอนไขทกำหนดเปนชดของคาคงทตาง ๆ เชน
• คา 1 กำหนดทางเลอกท 1• คา 2 กำหนดทางเลอกท 2• คา 3-1 และ 3-2 กำหนดทางเลอกท 3• คาอนๆ เปนทางเลอกท 4
วธหนงททำไดคอเขยนนพจนเพอตรวจสอบคานทละคา หากเปนคาใด (นพจนใหคาจรง) กไปตามทางเลอกนน ดงรปท 5.5 และรปท 5.6
การทำงานแบบหลายเงอนไขดงรปท 5.5 และรปท 5.6 นนกเปนการทำงานแบบเงอนไขซอนเชนเดยวกน โดยรปท 5.6 เปนการจดรปเพอใหเขาใจงายวาตองการตรวจสอบเงอนไขทางเลอกทละเงอนไขหากเปนคาตามเงอนไขในทางเลอกใด กใหไปทำงานตามทางเลอกนน
การทำงานแบบตรวจสอบคาตามเงอนไขไปทละคานพบเปนประจำ แทนทจะตองเขยนใหอยในรปของนพจนตรรกศาสตรทละเงอนไข เราสามารถเขยนผงงานโดยระบใหคาทเขามาเปนตวเลอกเสนทางแลวกำกบเสนทางดวยคากำหนดเสนทางไดเลย หากทางเลอกใดมคากำหนดเสนทางทมากกวาหนงคาใหใชจลภาค (,) คนระหวางคาเหลานน และหากคาทเปนไปไดเปนลำดบคาทแนนอน เชน 1-10 กใช1...10 แทนได
สวนของผงงานในรปท 5.5 และรปท 5.6 จงสามารถเขยนใหมไดดงรปท 5.7
5.2. เงอนไขซอนและการทำงานแบบหลายทางเลอก 71
ตวแปร == คา1
งาน 1 ตวแปร == คา2
งาน 2 ตวแปร == คา3-1หรอ ตวแปร == คา3-2
งาน 3 งาน 4
T F
T F
T F
รปท 5.5: โครงสรางการทำงานแบบเงอนไขตอเนองเพอตรวจสอบคา (1)
ตวแปร == คา1งาน 1
ตวแปร == คา2งาน 2
ตวแปร == คา3-1หรอ ตวแปร == คา3-2
งาน 3
งาน 4
T
FT
F
T
F
รปท 5.6: โครงสรางการทำงานแบบเงอนไขตอเนองเพอตรวจสอบคา (2)
72 บทท 5. การทำงานแบบทางเลอก
ตวแปร
งาน 1 งาน 2 งาน 3 งาน 4
คา 1 คา 2 คา 3-1, คา 3-2 อนๆ
รปท 5.7: โครงสรางการทำงานแบบเงอนไขการตรวจสอบทางเลอก
month
ndays=31 leapyear
ndays=29 ndays=28
ndays=30
1,3,5,7,8,10,12 2
T F
4,6,9,11
รปท 5.8: ผงงานแสดงการหาจำนวนวนในหนงเดอน
ตวอยาง 5.3 (การหาจำนวนวนในหนงเดอนของป). หากให month เปนตวแปรเกบคาจำนวนเตม มคาไดตงแต 1-12 แทนเลขเดอน และ leapyear เปนตวแปรตรรกะมคาจรงกตอเมอปนนเปนปอธกสรทนจำนวนวนในเดอนจะขนอยกบคาในตวแปร month น ดงน
• month มคาเปน 1,3,5,7,8,10,12 จะมจำนวนวนเปน 31 วน• month มคาเปน 2 จำนวนวนเปน 29 หรอ 28 ขนกบวาปนนเปนปอธกสรทนหรอไม• month มคาเปน 4,6,9,11 จะมจำนวนวนเปน 30 วน
นำมาเขยนเปนสวนของผงงานไดดงรปท 5.8จะเหนไดวา งานทตองทำในทางเลอกนนอาจะเปนการทำงานพนฐาน หรอการทำงานรปแบบอนกได
ดงเชนทางเลอกเมอคา month เปน 2 งานทตองทำเปนการทำงานแบบเงอนไข เปนตน □
5.3. โครงสราง IF ในภาษาซ 73
ลองคดผงงานในรปท 5.3 นน สามารถแปลงมาเขยนเปนผงงานแบบรปท 5.5 หรอ 5.6 ไดหรอไม หากไดใหลองเขยนด หากไมได ลองใหเหตผลประกอบ
5.3 โครงสราง if ในภาษาซโครงสราง if ในภาษาซประกอบดวย เงอนไข และสงทตองทำเมอเงอนไขเปนจรง โดยอาจมสงทตองทำเมอเงอนไขเปนเทจดวยกได
สวนของผงงานในรปท 5.1 เขยนเปนคำสงภาษาซไดรหสคำสงท 5.1 และ 5.21 if (cond)2 job13 else4 job2
รหสคำสงท 5.1: โครงสรางคำสง if (1)
1 if (cond) job12 else job2
รหสคำสงท 5.2: โครงสรางคำสง if (2)
โดย job1 และ job2 เทยบไดกบ งาน 1 และ งาน 2 ตามลำดบ ในภาษาซนน การใชชองวาง ไมวาจะเปนเวนวรรค ยอหนา หรอขนบรรทดใหม ไมวาจะเปนกตวกตามในรหสตนฉบบ จะมผลเทากน เรานยมยอหนาจากคำสงหลกเพมมาหนงยอหนา เพอเนนใหเหนชดวาเปนทางเลอกยอยทแตกออกมาจากลำดบการทำงานหลก และทำใหอานงาย
จากตวอยางขางตน คำสงภาษาซทงในรหสคำสงท 5.1 และ 5.2 ใหผลเหมอนกนทกประการ แบบ5.2 นนนยมใชหากตองการประหยดจำนวนบรรทดในการพมพ เมองานทตองทำเปนคำสงเดยวและไมยาวมาก จงอาจเขยนงานทตองทำหลงเงอนไขไวในบรรทดเดยวกน
โครงสราง if กนบเปนหนงคำสงเชนเดยวกน ดงนน สวนของผงงานในรปท 5.3 จงสามารถเขยนเปนสวนของโปรแกรมภาษาซไดดงรหสคำสงท 5.3
1 if (cond1)2 if (cond2) job1_13 else job1_24 else5 if (cond3) job2_16 else job2-2
รหสคำสงท 5.3: โครงสรางคำสง if แบบเงอนไขซอน
ในกรณทเปนการทดสอบเงอนไขตอเนอง เชนรปท 5.5 นน อาจจดรปแบบคำสงภาษาซไดดงรหสคำสงท 5.4 และ 5.5
74 บทท 5. การทำงานแบบทางเลอก
1 if (cond1)2 {3 job14 }5 else6 {7 if (cond2)8 {9 job210 }11 else12 {13 if (cond3)14 {15 job316 }17 else18 {19 job420 }21 }22 }
รหสคำสงท 5.4: โครงสราง if แบบเงอนไขตอเนอง (1)
1 if (cond1)2 job13 else if (cond2)4 job25 else if (cond3)6 job37 else8 job4
รหสคำสงท 5.5: โครงสราง if แบบเงอนไขตอเนอง (2)
รหสคำสงท 5.4 เปนการจดรปและใชโครงสรางบลอกเพอใหเหนขอบเขตของคำสง if ในแตละระดบ สามารถจดใหมใหประหยดเนอทไดตาม 5.5 ซงตรงกบสวนของผงงานในรปท 5.6 โดยสามารถอานไดทละบรรทดวาเปนการตรวจสอบคาทละคาไลไปตามลำดบ
งานทตองทำนนอาจเปนคำสงเดยวหรอหลายคำสงกได หากเปนกรณทมหลายคำสง ในภาษาซตองรวมคำสงทงหมดใหเปนโครงสรางบลอกดงเชนรหสคำสงท 5.6 และ 5.7
การเขยนคำสงในบลอกนน นยมยอหนาคำสงภายในบลอกเพมหนงยอหนาเชนเดยวกบเมอเขยนคำสง if เพอใหเหนวาคำสงทงหมดอยในบลอกเดยวกน รปแบบการเขยนวงเลบปกกาครอบบลอกกบคำสง if ทนยมกนมสองรปแบบ แบบ 5.6 เนนใหเหนวาวงเลบปกกาเปดและวงเลบปกกาปดทอยคกนนนจะอยตรงกน แตขอเสยคอจะสนเปลองจำนวนบรรทดมาก และหากรหสตนฉบบยาวมากจนปกกาเปดและปดไมอยในหนาเดยวกนกจะทำใหจบคไดลำบากอยด แบบ 5.7 จะเปดวงเลบปกกาขางหลงเงอนไข และ
5.4. โครงสราง SWITCH ในภาษาซ 75
ใหปดวงเลบตรงกบคำสงเงอนไขแทน ซงยงคงเพมยอหนาใหคำสงในบลอกเชนกน1 if (cond1)2 {3 st1_1;4 st1_2;5 }6 else7 {8 st2_1;9 st2_2;10 }
รหสคำสงท 5.6: โครงสราง if แบบใชบลอก (1)
1 if (cond1) {2 st1_1;3 st1_2;4 } else {5 st2_1;6 st2_2;7 }
รหสคำสงท 5.7: โครงสราง if แบบใชบลอก (2)
ถงแมวาการใชบลอกจะจำเปนเฉพาะในกรณทมงานทตองทำมากกวาหนงคำสง กรณทมคำสงเดยวแตเปนคำสงทซบซอน เชนคำสง if ในรหสคำสงท 5.3 การใชบลอกชวยจะทำใหรหสตนฉบบอานงายสะดวกในการปรบปรงแกไขในอนาคต จงควรใชโครงสรางบลอกในกรณเหลานดวยเชนกน
ลองคดโครงสราง if ในภาษาซนน บงคบวาตองมสงททำเมอเงอนไขเปนจรง ในขณะทผงงานไมมขอบงคบนหากตองเขยนเขยนคำสงภาษาซ โดยมสงทตองทำเมอเงอนไขเปนเทจเทานน ตองทำอยางไร
5.4 โครงสราง switch ในภาษาซในภาษาซ การทำงานแบบทางเลอกโดยการตรวจสอบคาในตวแปรใชคำสง switch โครงสรางของคำสง switch ประกอบดวยตวแปรซงเกบคาทางเลอก และทางเลอกตาง ๆ
โครงสรางในรปท 5.7 เขยนเปนคำสง switch ไดดงรหสคำสงท 5.8var เปนตวแปรเกบคาทางเลอก ในรหสคำสงท 5.8 มทางเลอกทงหมด 4 ทาง ไดแก
• เมอ var มคาเปน val1 ทำjob1• เมอ var มคาเปน val2 ทำ job2• เมอ var มคาเปน val3-1 หรอ val3-2 ทำ job3• เมอ var มคาอน ๆ ทำjob4
76 บทท 5. การทำงานแบบทางเลอก
1 switch (var)2 {3 case val1:4 job15 break;6 case val2:7 job28 break;9 case val3-110 case val3-2:11 job312 break;13 default:14 job415 }
รหสคำสงท 5.8: โครงสรางคำสง switchการระบคาประจำทางเลอกจะเขยนไวหลงตวระบ case แลวตามดวยทวภาค (:) เครองจะเปรยบ
เทยบคาในแตละทางเลอกทละทางเลอก เรยงลำดบจากบรรทดบนลงลาง หากคาในตวแปรตรงกบคาในทางเลอก จะทำทกคำสงทอยหลงทวภาค จนกวาจะหมดหรอพบคำสง break ตวระบ default ใชสำหรบกรณทคาในตวแปรไมตรงกบทางเลอกใดเลย ซงอาจจะมหรอไมมตวระบนกได จะเหนวา สำหรบทางเลอก default นน ไมจำเปนตองมคำสง break เนองจากเมอจบการทำงานในทางเลอกน กจะสนสดการทำงานของคำสง switch อยแลว
แนวทางในการการยอหนาเพมสำหรบคำสงในทางเลอกนนเหมอนกบในคำสง if และหากมคำสงเดยวทไมซบซอน บางครงกนยมเขยนทงคำสงทตองทำและคำสง break รวมไวในบรรทดเดยวกบตวระบทางเลอกดวย
งานทตองทำในแตละทางเลอกนนมไดมากกวา 1 คำสง และไมจำเปนตองใชโครงสรางบลอก เพราะใชคำสงเบรกในการตดการทำงานแทนอยแลว
สวนของผงงานในรปท 5.7 นน เสนทางเลอกตางๆ สามารถเขยนสลบตำแหนงกนได และดเหมอนวาเครองจะเลอกเสนทางทถกตองไดเสมอ แตในการทำงานจรงนนเครองทำงานเปนลำดบเสมอ เมอมทางเลอกหลายทาง เครองจะทยอยเปรยบเทยบไปทละทางตามลำดบ แมในผงงานอาจจะดเหมอนไมมลำดบแตหากเขยนเปนคำสงในภาษาโปรแกรมแลว การเปรยบเทยบจะเปนไปตามลำดบเสมอ
เมอเปลยนคำสง switch ในรหสคำสงท 5.8 ใหเปนผงงานทแสดงขนตอนการทำงานจรง จะไดดงรปท 5.5 นนคอเปรยบเทยบคาในตวแปรทละคา เรยงจากทางเลอกแรกไปจนกวาจะไดทางเลอกทตองการ
5.4. โครงสราง SWITCH ในภาษาซ 77
จากโครงสราง switch ทผานมานน จำเปนตองใชคำสง break หลงจบการทำงานตามทางเลอกเสมอ หากไมมคำสง break เลย เชนในรหสคำสงท 5.9 การทำงานโดยคำสง switch จะเปนดงรปท5.9
1 switch (var)2 {3 case val1 : job14 case val1 : job25 case val1 : job36 default : job47 }
รหสคำสงท 5.9: โครงสราง switchแบบไมม break
var == val1
var == val2
job1
job2
var == val3
job3
job4
F
T
F
T
F
T
รปท 5.9: ผงงานแสดงลำดบการทำงานของคำสง switch แบบไมม break
อยางไรกตาม โครงสรางลกษณะเชนนเปนโครงสรางทอาจทำใหสบสนไดงาย ควรใชโครงสรางแบบทางเลอกหลายทางดงรปท 5.7 มากกวา ซงจะเขยนเปนสวนของผงงานใหมไดดงรปท 5.10
ลองคดโครงสราง if และโครงสราง switch ในภาษาซ สามารถเขยนแทนกนไดเสมอหรอไม เพราะเหตใด
แบบฝกหด1. เมอรบขอมลเขาเปนวนแรกของเดอนและเลขเดอน เดอนนนจะมวนจนทร องคาร พธ พฤหสบด
ศกร เสาร และอาทตย อยางละกวน จงเขยนผงงานเพอแสดงวธการคำนวณกำหนดให
• 0 แทนวนอาทตย
78 บทท 5. การทำงานแบบทางเลอก
var
job1
job2
job3
job4
job2
job3
job4
job3
job4
job4
val1 val2 val3 อนๆ
รปท 5.10: ผงงานของคำสง switch แบบไมม break
• 1 แทนวนจนทร• 2 แทนวนองคาร• …
2. ให 1 2 3 4 5 6 7 เปนรหสตวเลขแทนวนจนทรถงวนอาทตย ถง ตามลำดบ จงเขยนผงงานและโปรแกรมภาษาซเพอแปลงรหสตวเลขนใหเปนชอวนแลวแสดงผล เชน Sun Mon
3. ให 1 – 12 เปนตวเลขของเดอน จงแปลงตวเลขนใหเปนชอเดอน เชน Jan Feb4. ในบางประเทศ การอางองถงเวลาชวง 0.00 – 2.00 น. จะใชตวเลข24.00 - 26.00 แทน เพอ
ใหเขาใจตรงกนวาเปนชวงกลางคนทตอเนองจากวนกอนหนา ใหรบขอมลเขาเปนวน (เลข 1 – 7แทนวนจนทรถงวนอาทตย) วนท เดอน และเวลา (0:00 – 23:59) แลวแสดงผลในรป วน วนทเดอน และ เวลา (0:00 – 26:00)
5. หากตองการทำแฟมภาพนสตโดยวางรปถายขนาด 1 x 1.5 นว ในกระดาษ A4 (8.3 x 11.7 นว) ใหไดมากทสดเทาทจะมากได โดยรปทกรปตองวางตงทงหมด ควรวางกระดาษ A4 ในแนวนอนหรอแนวตง จงจะวางรปไดมากทสด จงเขยนผงงานแสดงการคำนวณ
6. จงเขยนผงงานสำหรบโปรแกรมเพอการคำนวณปรมาตรหรอพนทผวของรปทรงตางๆ เมอโปรแกรมเรมทำงานจะใหผใชเลอกหมวดการคำนวณ วาจะคำนวณปรมาตร (กด 1) หรอพนทรอบรป (กด 2) จากนนใหผใชเลอกรหสรปทรงทตองการ และปอนคาทจำเปนในการคำนวณใหโปรแกรม จากนนโปรแกรมจะแสดงผลปรมาตรหรอพนทรอบรปใหแลวแตกรณ กำหนดคา Pi =3.14
7. จงเขยนผงงานเพอสรางเครองคดเลขททำการบวก ลบ คณ หาร ยกกำลง จำนวนไมเปนลบสอง
5.4. โครงสราง SWITCH ในภาษาซ 79
จำนวนได สมมตใหขอมลเขาอยในรปแบบ “ตวเลข” “เครองหมาย” “ตวเลข” เทานน เชน 2 ^ 2หรอ 2 / 4
8. จงเขยนผงงานสำหรบโปรแกรมเพอการคำนวณปรมาตรหรอพนทผวของรปทรงตางๆ เมอโปรแกรมเรมทำงานจะใหผใชเลอกหมวดการคำนวณ วาจะคำนวณปรมาตร (กด 1) หรอพนทรอบรป (กด 2) จากนนใหผใชเลอกรหสรปทรงทตองการ และปอนคาทจำเปนในการคำนวณใหโปรแกรม จากนนโปรแกรมจะแสดงผลปรมาตรหรอพนทรอบรปใหแลวแตกรณกำหนดคา � = 3.14 และคาตางๆ ทจำเปนดงน
ทรงกลม กรวย ทรงกระบอกรหสรปทรง A B Cคาทจำเปนในการคำนวณ 1. รศม R 1. รศม R 1. รศม R
2. ความสง h 2. ความสง h
9. เขยนผงงานเพอรบขอมลเขาเปนเกรดของนสต ไดแก A, B+, B, C+, C, D+, D, F แลวแสดงผลเปนคาประจำเกรดนน ตงแต 4.0 ถง 0.0
10. Zeller’s congruence เปนอลกอรทมเพอหาวนในสปดาหของวนทใดๆ ในปฏทน เมอกำหนดให
• ℎ เปนวนในสปดาห 0 = เสาร, 1 = อาทตย, …• � เปนวนท• เปนเดอน โดย 13 = มกราคมของปกอนหนา, 14 = กมภาพนธของปกอนหนา, 3 =มนาคม, 4 = เมษายน, … , 12 = ธนวาคม
• � คอปในครศตศตววรษ (สองตวหลงของปครสตศกราช)• � คอเลขศตวรรษ (สองตวหนาของปครสตศกราช)
เชน• 1 มกราคม 2016 จะได �=1, =13, �=15, �=20
ในระบบปฏทนเกรกอเรยน (ปฏทนปจจบน) จะคำนวณวนในสปดาหไดดงสมการ (5.1)
ℎ = (� + ⌊(13( + 1))/5⌋ + � + ⌊�/4⌋ + ⌊�/4⌋ + 5�) mod 7 (5.1)จงเขยนผงงานและโปรแกรมภาษาซเพอแสดงผลเปน Saturday, Sunday, … เมอวนในสปดาหเปน เสาร, อาทตย, … ตามลำดบ กำหนดใหขอมลเขาเปน
• วนท (ตวเลข)• เดอน (ตวเลข 1-12) และ• ปครสตศกราช (ตวเลข 4 หลก)
80 บทท 5. การทำงานแบบทางเลอก
11. มกลองทรงสเหลยมมมฉากขนาดกวาง a ยาว b และสง c ตองการหอกลองนดวยกระดาษสเหลยมมมฉาก จงเขยนผงงานเพอตดสนใจวาจะตองใชกระดาษขนาดเลกทสดเทาไรจงจะหอกลองนไดพอดโดยไมตองตด
บทท 6การทำงานแบบวนซำ
วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปการทำงานแบบวนซำ
1. บอกผลของการทำงานแบบวนซำได และประยกตใชการทำงานแบบวนซำเพอแกปญหาตางๆ ทพบได
2. อธบายลำดบการทำงานเมอใชโครงสราง while-do, do-while และ for ในภาษาซได3. ใชโครงสราง while-do, do-while และ for ในภาษาซเพอแทนการทำงานแบบวนซำได
ใชเวลารวม 6 คาบ
6.1 ลกษณะและองคประกอบของการทำงานแบบวนซำการทำงานแบบวนซำคอการทำงานบางอยางซำหลายๆ ครง เชน
1. การหาตำแหนงรองคาน (จดหมนของคาน) ทสมดล ดวยการขยบตำแหนงซายขวาไปเรอยๆ หากคานยงไมสมดล ดงรปท 6.1
2. เครองหยดสารคอยๆ เตมสารเคมลงไปทละ 1 มลลลตรจนกวาจะเกดปฏกรยาเคม3. รบขอมลเกรดของนสต 20 รายวชาเพอคำนวณเกรดเฉลย
ขยบโมเมนตทวน โมเมนตตามรปท 6.1: การหาจดสมดลของคาน
82 บทท 6. การทำงานแบบวนซำ
ตารางท 6.1: ตวอยางการทำงานแบบวนซำ
ขอ สงทตองทำซำ เงอนไขในการทำซำ/เลกทำซำ1 การขยบตำแหนงซาย/ขวา ทำตอเมอคานยงไมสมดล ณ จดปจจบน2 การหยดสาร เลกทำเมอเกดปฏกรยาเคม3 การรบขอมลเกรด ทำตอเมอขอมลยงไมครบ 20 รายวชา
การทำงานแบบวนซำจะประกอบดวย สงทตองทำซำ และเงอนไขในการทำซำหรอเลกทำซำ จากสามตวอยางขางตน อาจเขยนสงทตองทำซำ และเงอนไขในการทำซำหรอเลกทำซำไดดงตารางท 6.1
จากองคประกอบน จะเหนวาการทำงานแบบวนซำตองมเงอนไขประกอบเสมอ โดยเงอนไขจะเปนตวกำหนดวาตองทำซำตอหรอเลกทำซำ โครงสรางผงงานสำหรบการทำงานแบบวนซำจงประกอบดวยการทำงานแบบลำดบซงมการทำงานแบบเงอนไขอยางนอยหนงเงอนไขเปนองคประกอบ และเมอทำงานครบทกลำดบแลวจะยอนกลบไปเรมทำทลำดบแรกอกครง ตวอยางเชน ลำดบขนตอนอยางงายของการทำงานในขอแรกของตารางท 6.1 (รปท 5.3) เขยนไดดงน
1. เปรยบเทยบโมเมนตฝงซายและฝงขวา ตรวจสอบความสมดลของคาน หากสมดล จบการทำงานหากไมสมดล ทำขอ 2
2. ขยบตำแหนงรองไปฝงทมโมเมนตมากกวา
ถงแมการเขยนผงงานจะสามารถเขยนเงอนไขไวสวนใดในลำดบกไดกตาม เพอใหผงงานเปนระเบยบเรยบรอย และเชอมโยงกบการเขยนโปรแกรม เรามกตรวจสอบเงอนไขกอนเรมตนการทำซำ และเรยกโครงสรางลกษณะนวา การทำซำแบบทดสอบกอนทำ หรอตรวจสอบเงอนไขเปนงานสดทายกอนกลบไปเรมทำซำรอบใหม และเรยกโครงสรางลกษณะนวา การทำซำแบบทดสอบหลงทำ ดงรายละเอยดในหวขอตอไป
ลองคดการทำงานใดๆ นนจะมจดเรมตนและจดสนสดเสมอ ปญหาหนงทมกพบเมอมโครงสรางแบบวนซำ คอเกดการวนซำไมรจบ สาเหตของการวนซำไมรจบคอผลลพธของเงอนไขคงเดมเสมอในทกรอบของการวนซำ เราจะปองกนปญหานไดอยางไร
6.2 การทำซำแบบทดสอบกอนทำและทดสอบหลงทำโครงสรางการทำซำในภาษาโปรแกรมแบงตามตำแหนงการวางเงอนไขทดสอบไดสองรปแบบ คอทดสอบกอนเรมทำซำ และทดสอบหลงจากทำซำครบรอบ
6.2. การทำซำแบบทดสอบกอนทำและทดสอบหลงทำ 83
เงอนไขในการทำซำ
งานทตองทำซำT
F
(ก) โครงสรางการวนซำโดยใชเงอนไขใหทำซำตอ
เงอนไขในการเลกทำซำ
งานทตองทำซำF
T
(ข) โครงสรางการวนซำโดยใชเงอนไขใหเลกทำซำ
รปท 6.2: โครงสรางการทำซำแบบทดสอบกอนทำ
6.2.1 การทำซำแบบทดสอบกอนทำโครงสรางการทำงานแบบทดสอบกอนทำจะเรมจากการตรวจสอบเงอนไขกอน แลวจงเรมงานทตองทำซำ แบงเงอนไขออกเปน 2 กรณ ดงน
1. เงอนไขใหทำซำตอ• เมอเปนจรง จะทำงานทตองทำซำ• เมอเปนเทจ จะเลกการทำซำ
2. เงอนไขใหเลกทำซำ• เมอเปนจรง จะเลกการทำซำ• เมอเปนเทจ จะทำงานทตองทำซำตอ
เมอเขยนเปนผงงาน จะไดดงรปท 6.2(ก) และ 6.2(ข) ตามลำดบเงอนไขทงสองกรณเปนนเสธของกนและกน เราสามารถเลอกใชเงอนไขแบบใดกได ในการเขยนผง
งานนน ควรเลอกเงอนไขแบบทเขาใจงาย เชน จากตวอยางการเตมสารจนกวาจะเกดปฏกรยาเคม จะเขยนเงอนไขไดสองรปแบบดงรปท 6.3
เงอนไขคอการตรวจสอบการเกดปฏกรยาเคม แบบ 6.3(ก) นนจะเปนการทำซำเมอเงอนไขเปนเทจสวนแบบ 6.3(ข) เปนการเลกทำซำเมอเงอนไขเปนจรง
6.2.2 การทำซำแบบทดสอบหลงทำอกรปแบบหนงในการทำซำคอ ทำสงทตองทำใหครบกอน แลวจงตรวจสอบเงอนไขวาจะทำตอหรอเลกทำ ซงเขยนเงอนไขไดทงแบบทำตอเมอเงอนไขเปนจรง และเลกทำเมอเงอนไขเปนจรง ดงรปท 6.4(ก)
84 บทท 6. การทำงานแบบวนซำ
ไมพบปฏกรยาเคม
เตมสารT
F
(ก) เมอไมมปฏกรยาเคมใหเตมสาร
พบปฏกรยาเคม
เตมสารF
T
(ข) เมอมปฏกรยาเคมใหหยดเตมสาร
รปท 6.3: สวนของผงงานแสดงการเตมสารเคมจนกวาจะเกดปฏกรยา
งานทตองทำซำ
เงอนไขในการทำซำ F
T(ก) โครงสรางการวนซำโดยใชเงอนไขใหทำซำตอ
งานทตองทำซำ
เงอนไขในการเลกทำซำ T
F(ข) โครงสรางการวนซำโดยใชเงอนไขใหเลกทำซำ
รปท 6.4: โครงสรางการทำซำแบบทดสอบหลงทำ
และ 6.4(ข) ตามลำดบ
6.2.3 เปรยบเทยบการทำซำแบบทดสอบกอนทำและทดสอบหลงทำในการออกแบบการทำงานนน จะเลอกการทำงานแบบทดสอบกอนหรอหลงทำกได ขอสงเกตหนงคอการทำซำแบบทดสอบหลงทำ จะมการทำซำอยางนอย 1 รอบเสมอ ในขณะทการทำซำแบบทดสอบกอนทำจะตรวจสอบเงอนไขกอน จงอาจจะไมเกดการทำซำเลยกได หากตองการทำซำอยางนอย 1 รอบ ไมวาจะเลอกโครงสรางแบบใดกใหผลลพธทเหมอนกน
โครงสรางการทำซำแบบทดสอบกอนทำทมกพบในภาษาโปรแกรมคอโครงสราง while-do ซงหมายถงในขณะทเงอนไขยงคงเปนจรงอย ใหทำซำไปเรอยๆ สวนโครงสรางการทำซำแบบทดสอบหลง
6.3. ตวแจงนบ 85
iter
งานทตองทำซำ
NEXT iter
T
F
รปท 6.5: โครงสรางการทำซำแบบใชตวแจงนบ
ทำมทงแบบ do-while คอทำซำในขณะทเงอนไขยงเปนจรง และ repeat-until ซงเปนการทำซำจนกวาเงอนไขเปนจรงจงเลกทำ
ลองคดเขยนผงงานแบบทดสอบกอนทำททำงานเหมอนกบการทำงานแบบทดสอบหลงทำทกประการ และลองเขยนในทางกลบกนดวย
6.3 ตวแจงนบตวแจงนบ (iterator) เปนวตถหนงในภาษาโปรแกรม ซงสามารถแจกแจงขอมลออกมาตามลำดบได การแจกแจงคาโดยตวแจงนบนนเปนเพยงการสำเนาคาหรอสรางตวชไปยงขอมลในลำดบเทานน โดยตวแจงนบจะคนคาขอมลถดไปในลำดบออกมาให และใหผลลพธเปนเทจเมอไมมขอมลเหลอในตวลำดบอกแลวจงมกจะถกใชรวมกบโครงสรางการทำซำ โดยเปนการแจกแจงคาหรอขอมลทละตวเพอทำซำ และยตการทำซำเมอตวแจงนบไมสามารถเลอนไปทขอมลตวถดไปไดอก
โครงสรางการทำซำแบบใชตวแจงนบสามารถเขยนเปนผงงานไดดงรปท 6.5
ตวอยาง 6.1 (การหาจำนวนทงหมดทหารดวย 3 และ 5 ลงตวในชวง 1-1000). ลกษณะของจำนวนทหารดวย 3 และ 5 ลงตวคอ
• จำนวนทหารดวย 3 แลวเหลอเศษ 0 และ• จำนวนทหารดวย 5 แลวเหลอเศษ 0
จำนวนทงหมดตงแต 1 ถง 1000 นน เราสามารถใชตวแจงนบในการแจกแจงทละตวได การหาจำนวนทงหมดทหารดวย 3 และ 5 ลงตวจงเปนการแจกแจงทกจำนวนในชวงทกำหนด แลวทดสอบการหารลงตว สรปงานทตองทำซำ และเงอนไขในการทำซำไดดงน
86 บทท 6. การทำงานแบบวนซำ
data in [1,1000]
(data MOD 3 == 0)AND
(data MOD 5 == 0)
PRINT data
NEXT data
T
F
T
F
รปท 6.6: สวนของผงงานแสดงการหาจำนวนทหารดวย 3 และ 5 ลงตวในชวง [1,1000]
1. งานทตองทำซำ คอ ทดสอบการหารดวย 3 และ 5 ลงตว2. เงอนไขในการทำซำ คอ ตวแจงนบทมคาเรยงลำดบจาก 1 ถง 1000
เขยนเปนผงงานไดดงรปท 6.6 □
6.4 การออกแบบการทำงานแบบวนซำงานบางชนดนนเหนไดชดตงแตเรมวาการทำซำคออะไร เชน การเตมสารเคมจนกวาจะเกดปฏกรยา แตบางงานกอาจจะไมตรงไปตรงมานก เชน การหาจดสมดลการหมนของคานในรปท 6.1 ซงเมอมองปญหานเปนปญหาการทดสอบจดสมดลและขยบจดหมนของคานไปเรอยๆ จนกวาจะพบจดทสมดล กจะเหนวาปญหานเปนการทำซำรปแบบหนงเชนกน
การออกแบบการทำงานแบบวนซำตองกำหนดสงทตองทำซำและเงอนไขในการทำซำหรอเลกทำซำออกมาใหไดกอน วธตรวจสอบวางานทตองทำซำคออะไร อาจจะลองทำดวยมอไปสกสองสามรอบจนกวาจะเหนรปแบบทเกดซำขน จากนนจงไปดวาเขยนเงอนไขกำกบอยางไร จงจะทำใหรอบของการทำซำเปนไปตามทตองการ
รปแบบการทำซำทพบบอยแบงตามรปแบบของเงอนไขในการทำซำไดดงน
6.4. การออกแบบการทำงานแบบวนซำ 87
ลำดบ
ตวแจงนบ หมด
เลอน ...
รปท 6.7: การใชตวแจงนบแจกแจงสมาชกในลำดบ
1. นบรอบ เงอนไขในการทำซำคอ ทำยงไมครบจำนวนรอบทกำหนด วธการนบรอบจะใชตวแปรหนงตวในการนบ การนบเปนไดทงแบบนบกอนเรมรอบ โดยใชตวนบเรมตนท 1 หรอนบรอบททำไปแลว โดยตวนบรอบจะเรมตนท 0 (ยงไมไดทำ) และทำไปจนกวาจะครบจำนวนรอบ ในแตละรอบเมอทำงานครบรอบแลว จะมการเพมคาตวนบไปทละหนง
2. แจกแจงสมาชกในลำดบ เงอนไขในการทำซำคอ ยงมขอมลเหลออยในลำดบ หากมตวแจงนบใหกสามารถใชคาจากตวแจงนบเปนเงอนไขได เชนในรปท 6.7 แตหากไมใชตวแจงนบ การทำงานแบบแจกแจงสมาชกในลำดบจะเปนการเลอนตวชของขอมลในลำดบไปทละตว เรมจากตวแรกไปจนถงตวสดทาย เงอนไขในการทำซำจงเปนตวชยงไมเกนตวสดทาย
3. แบบอนๆ เงอนไขในการทำซำไมมรปแบบตายตว
ตวอยาง 6.2 (การตงเวลาถายภาพแบบ timelapse ทก 1 นาทเปนเวลา 24 ชวโมง). การถายภาพแบบ timelapse คอการตงเวลาถายภาพทกๆ ชวงทกำหนด แลวนำภาพมาเรยงตอกนเปนภาพเคลอนไหว
งานทตองทำซำคอ การกดชตเตอร หรอสงถายภาพ สวนเงอนไขในการทำซำคอถายรปไปจนครบ 24ชวโมง ซงอาจแปลงเปนจำนวนครงทตองถายภาพ แลวนบครงแทนได
• ตองถายภาพทงหมด 60 × 24 = 1440 ครง
ดงนน จงสามารถเขยนเปนผงงาน โดยกำหนดรอบของการวนซำทงหมด 1440 รอบ และการทำงานแตละรอบคอการสงถายภาพ
ใหตวแปร count เปนตวนบการเรมตนของรอบ จงเรมทำตงแตรอบท 1 ถงรอบท 1440 ในการนบรอบนนนบเพมทละ 1 จงเขยนเปนสวนของผงงานไดดงรปท 6.8
□
ตวอยาง 6.3 (การแสดงรายชอนกเรยนทกคนในลำดบ). กำหนดใหมขอมลแบบลำดบ ซงมตวแจงนบสำหรบแจกแจงขอมลแตละตวในลำดบไดอย การแสดงรายชอนกเรยนทกคนในลำดบจงเปนการสรางตวแจงนบสำหรบลำดบขนมา แลวแสดงขอมลแตละคาทตวแจงนบนนอางถง ไปจนกวาจะครบทกขอมลในลำดบ
88 บทท 6. การทำงานแบบวนซำ
count = 1
count <= 1440
สงถายภาพ
count = count + 1
T
F
รปท 6.8: ผงงานแสดงการตงเวลาถายรปทก 1 นาท เปนเวลา 24 ชวโมง
name in namelist
PRINT name
NEXT name
T
F
รปท 6.9: ผงงานการแสดงรายชอนกเรยนทกคนในลำดบ
เมอแจงนบครบทกตวแลว ตวแจงนบจะชไปยงขอมลนอกลำดบ หรอสถานะขอมลหมด ซงจะทำใหผลลพธของเงอนไขการเปนสมาชกในลำดบเปนเทจและจบการทำซำโดยอตโนมต เขยนงานทตองทำซำและเงอนไขไดดงน
1. งานทตองทำซำ คอ แสดงขอมลชอ2. เงอนไขในการทำซำ คอ ตวแจงนบยงชไปทขอมลในลำดบกำหนดตวแปร name เกบชอทไดจากตวแจงนบ จะเขยนเปนสวนของผงงานไดตามรปท 6.9 □
ตวอยาง 6.4 (การหาผชนะเกมเปายงฉบ). การเลนเปายงฉบมผเลน 2 คน แตละคนสามารถออก คอนหรอ กรรไกร หรอ กระดาษ ได การแพชนะเปนดงน
6.5. ภาษาโปรแกรมทใชในการวนซำ 89
READ player1, player2
player1 == player2
READ player1, player2
หาผชนะ
T
F
รปท 6.10: ผงงานการหาผชนะเกมเปายงฉบ
• คอน ชนะ กรรไกร• กรรไกร ชนะ กระดาษ• กระดาษ ชนะ คอน
หากผเลนทงสองฝายออกเหมอนกนจะถอวาเสมอ และเรมตนเลนไหมการหาผชนะของเกมเปายงฉบจงเปนการเลนวนซำไปเรอยๆ จนกวาจะมฝายใดฝายหนงชนะ สรปได
ดงน
1. งานทตองทำซำ คอ การออกของผเลนทงสองฝาย2. เงอนไขในการทำซำ คอ ผเลนทงสองฝายออกเหมอนกน (เสมอ)
หลงจากการวนซำ จะหาผชนะระหวางผเลนทงสองฝายได กำหนดตวแปร player1 และ player2 เกบขอมลการออกของผเลนแตละฝาย เขยนสวนของผงงานไดดงรปท 6.10
□
ขอสงเกตหนงจากตวอยาง 6.4 คอ ตวแปรทใชในการตรวจสอบคา ตองถกกำหนดคา หรอมคา กอนจะใชในการตรวจสอบ จงตองมการอานขอมลครงแรกนอกการวนซำกอน
6.5 ภาษาโปรแกรมทใชในการวนซำ6.5.1 โครงสราง while-do
โครงสราง while-do มลกษณะเปนการวนซำแบบทดสอบกอนทำ และทำซำเมอเงอนไขเปนจรง เขยนเปนรหสเทยมไดดงรหสคำสงท 6.1
90 บทท 6. การทำงานแบบวนซำ
1 WHILE cond2 DO3 job4 ENDWHILE
รหสคำสงท 6.1: โครงสราง while-do
cond เปนนพจนทใหคาจรงหรอเทจ สวน job แทนงานทตองทำ ซงอาจมมากกวาหนงงานกได รหสคำสงท 6.1 เทยบไดกบผงงานในรปท 6.2(ก)
6.5.2 โครงสราง do-while
โครงสราง do-while มลกษณะเปนการวนซำแบบทดสอบหลงทำ และทำซำเมอเงอนไขเปนจรง เขยนเปนรหสเทยมไดดงรหสคำสงท 6.2
1 DO2 job3 WHILE cond
รหสคำสงท 6.2: โครงสราง do-while
รหสคำสงท 6.2 นเทยบไดกบผงงานในรปท 6.4(ก) สวน cond และ job เปนเงอนไขในการทำซำและงานทตองทำซำ เชนเดยวกบในรหสคำสงท 6.1
6.5.3 โครงสราง repeat-until
โครงสราง repeat-until มลกษณะเปนการวนซำแบบทดสอบหลงทำ และเลกทำซำเมอเงอนไขเปนจรง เขยนเปนคำสงไดดงน
1 REPEAT2 job3 UNTIL cond
รหสคำสงท 6.3: โครงสราง repeat-until
รหสคำสงท 6.3 เทยบไดกบผงงานในรปท 6.4(ข) สวน cond และ job เปนเงอนไขในการทำซำ และงานทตองทำซำ เชนเดยวกบในรหสคำสงท 6.1 และ 6.2
6.5. ภาษาโปรแกรมทใชในการวนซำ 91
6.5.4 โครงสราง for
โครงสราง for มลกษณะเปนการวนซำแบบทดสอบกอนทำ และทำซำเมอเงอนไขเปนจรงเชนเดยวกบโครงสราง while-do แตโครงสราง for แบงออกเปนสองรปแบบ ไดแก
1. โครงสราง for แบบดงเดม ซงมการกำหนดงานทตองทำกอนทำซำ เงอนไข และงานทตองทำกอนครบรอบการทำซำ เขยนเปนรหสเทยมไดดงรหสคำสงท 6.4 และเขยนสวนของผงงานไดดงรปท6.11
2. โครงสราง for แบบใชกบตวแจงนบ มกใชในการทำซำกบขอมลทงหมดในรายการ โดยอาศยตวแจงนบเปนตวแจกแจงขอมล เขยนเปนรหสเทยมไดดงรหสคำสงท 6.5 และเขยนสวนของผงงานไดดงรปท 6.12 ซงเหมอนกบผงงานในรปท 6.5
1 FOR (init; cond; inc)2 job3 ENDFOR
รหสคำสงท 6.4: โครงสราง for แบบดงเดม
init
cond
job
inc
T
F
รปท 6.11: โครงสราง for แบบดงเดม
1 FOR item IN list2 job3 ENDFOR
รหสคำสงท 6.5: โครงสราง for แบบใชตวแจงนบ
item in list
job
NEXT item
T
F
รปท 6.12: โครงสราง for แบบใชตวแจงนบ
92 บทท 6. การทำงานแบบวนซำ
สำหรบแบบดงเดม init คองานทตองทำกอนเรมทำซำ cond คอเงอนไขในการทำซำเมอจรง และinc คองานสดทายทตองทำในรอบของการทำซำ และ job คอคำสงตางๆ ทตองทำซำ
สวนแบบตวแจงนบนน list เปนรายการขอมลซงมตวแจงนบ item เปนตวแปรซงรบคาจากตวแจงนบซงจะชไปทขอมลในรายการทละตว เมอเวยนไปครบทกขอมลแลว กจบการทำซำได
6.6 โครงสรางการทำซำในภาษาซภาษาซมโครงสรางการทำซำ 3 รปแบบ ไดแก
1. โครงสราง while-dowhile (cond)
stmt
รหสคำสงท 6.6: โครงสราง while-do ในภาษาซ
โดยท cond เปนตวแปรหรอนพจนซงมคาเปนจำนวนเตม และทำซำในกรณท cond ไมเปน 0สวน stmt คองานทตองทำซำ ซงอยในรปแบบคำสงโดดหรอบลอก
2. โครงสราง do-whiledo{
stmts} while (cond);
รหสคำสงท 6.7: โครงสราง do-while ในภาษาซโดยท cond เปนตวแปรหรอนพจนซงมคาเปนจำนวนเตมเชนเดยวกบ while-do และยอนกลบไปทำซำในกรณท cond ไมเปน 0 เชนกน และ stmts คอชดของคำสงททำซำ จะมคำสงเดยวหรอมากกวากได
3. โครงสราง for แบบดงเดมfor (init; cond; inc)
stmt
รหสคำสงท 6.8: โครงสราง for ในภาษาซ
โดยท init คอชดของคำสงททำกอนเรมทำซำ หากมมากกวาหนงคำสงใหคนแตละคำสงดวยจลภาค (,) cond คอตวแปรหรอนพจนซงมคาเปนจำนวนเตม และทำซำในกรณท cond ไมเปน0 สวน inc คอชดของคำสงทตองทำกอนจะจบรอบการวนซำ และ stmt คองานทตองทำซำ ซงอยในรปแบบคำสงโดดหรอบลอก ในภาษาซไมมโครงสราง for แบบใชตวแจงจบ
6.6. โครงสรางการทำซำในภาษาซ 93
ลองคดโครงสรางการทำซำในภาษาซนนเปนแบบทำซำเมอเงอนไขเปนจรงทงหมด หากตองการใชโครงสรางการทำซำเมอเงอนไขเปนเทจ (เลกทำเมอเงอนไขเปนจรง) จะเขยนเปนภาษาซไดอยางไร
แบบฝกหด1. เมอรบจำนวนเขาเปนจำนวนเตมบวกหนงจำนวน จงเขยนผงงานและโปรแกรมภาษาซเพอหาวา
จำนวนทรบเขามานเปนจำนวนเฉพาะหรอไมจำนวนเฉพาะคอจำนวนทมเฉพาะ 1 และตวมนเองเทานนทหารลงตว
2. จงเขยนผงงานและโปรแกรมภาษาซใหผใชปอนจำนวนบรรทดทตองการ แลวพมพอกขระ * ออกมาโดยมลกษณะดงน
6*********************
บรรทดท 1 ม * 1 ตว บรรทดท 2 ม * 2 ตว …(บรรทดท i จะม * i ตว โดยท i เปนจำนวนเตมบวก)
3. เมอใหผใชปอนจำนวนบรรทดเขามา จงเขยนโปรแกรมภาษาซเพอพมพ * ใหเปนรปสามเหลยมหนาจวซงมลกษณะดงน
5*************************
4. ระบบนบถอยหลงจะรบขอมลเปนจำนวนเตมบวกหนงจำนวน แลวนบถอยหลงโดยแสดงคาตงแตจำนวนทรบเขา ลดลงทละหนง จนถง 1 แลวจบการทำงาน จงเขยนผงงานและโปรแกรมภาษาซของระบบนบถอยหลงน
5. ในการแขงขนยมนาสตก จะมกรรมการทงหมด 6 คน แตละคนใหคะแนนไดตงแต 0.0 -10.0 การคดคะแนนของผเขาแขงขนจะตดคะแนนสงสดและตำสดออก แลวหารเฉลยคะแนนของ
94 บทท 6. การทำงานแบบวนซำ
กรรมการทง 4 คนทเหลอ หากมผเขาแขงขนทงหมด 10 คน จงเขยนโปรแกรมเพอหาผชนะเมอผดแลการแขงขนกรอกคะแนนจากกรรมการทง 6 คนของผเขาแขงขนแตละคนใหระบบ
6. เกมทายจำนวนใชผเลนสองคน ผเลนคนแรกจะปอนขอมลตวเลขในใจของตนเองใหกบระบบ จากนนผเลนคนทสองจะทายจำนวนทผเลนคนแรกปอนใหระบบ โดยระบบจะนบจำนวนครงททายจนกวาจะทายถก หากทายไมถก ระบบจะชวยบอกใบดวยการบอกวาคาททายนน มากกวา หรอนอยกวา คาทผคนแรกกำหนดไว หากทายถก ระบบจะแสดงจำนวนครงททายแลวจบการทำงานจงเขยนผงงานและโปรแกรมภาษาซของระบบเกมทายจำนวนน
บทท 7ตวแปรแถวลำดบ
วตถประสงคการเรยนรอธบายการเกบขอมลแบบแถวลำดบ การเกบขอมลสายอกขระ และการใชตวแปรแถวลำดบ
1. กำหนดคาใหตวแปรแถวลำดบ และเรยกใชคาในตวแปรแถวลำดบได2. ประกาศตวแปรแบบแถวลำดบได3. อธบายการเขาถงอกขระตางๆ ในตวแปรแบบสายอกขระได4. อธบายโครงสรางการเกบขอมลแบบแถวลำดบในหนวยความจำ5. ใชแถวลำดบขนาดมากกวาหนงมตได
ใชเวลารวม 6 คาบ
7.1 การเขาถงและการเรยกใชตวแปรแถวลำดบตวแปรโดยปกตทวไปนน จะเกบคาไดหนงคาตอตวแปรหนงตว แตหากขอมลมลกษณะเปนชดซงมหลายคา เราจำเปนตองประกาศตวแปรเทากบจำนวนขอมลทม ซงไมสะดวกในการจดการขอมลซงเปนชดในลกษณะน จงมตวแปรชนดแถวลำดบ (array) ขนมาชวยอำนวยความสะดวกในการจดการตวแปรใหเปนชดๆ
ขอมลแตละตวในตวแปรชนดแถวลำดบจะมลำดบกำกบ เรยกวา ดชน (index) การเขาถงขอมลในแถวลำดบทำไดดวยการอางองชอตวแปรประกอบกบเลขดชนของขอมลนน เขยนไดดงรหสคำสงท 7.1
varname[index]
รหสคำสงท 7.1: การอางถงตวแปรแถวลำดบ
โดยท varname คอชอของตวแปร และ index เปนจำนวนเตมซงเปนเลขดชนของขอมล
96 บทท 7. ตวแปรแถวลำดบ
1 10 2 4 3d
d[0] d[1] d[2] d[3] d[4]
0 ชอง1 ชอง 1 ชอง 1 ชอง 1 ชอง
รปท 7.1: เลขดชนของตวแปรแถวลำดบ
ภาษาโปรแกรมสวนมาก เชน ซ จาวา ไพธอน จะมดชนเรมตนท 0 หมายถง ระยะหางศนยชอง จากชองแรกทเกบขอมล แตบางภาษาโปรแกรม เชน Matlab กใหมดชนเรมตนท 1 ซงหมายถงชองทหนง กอนจะอางถงตวแปรแถวลำดบจงควรตรวจสอบขอกำหนดของดชนในแตละภาษาเสยกอน ในเอกสารฉบบนจะใหดชนเรมตนทศนย
จากรปท 7.1 ตวแปร d เปนตวแปรชนดแถวลำดบขนาด 5 ชอง โดยมดชนเรมตนท 0 ขอมลในชองทหนง (ดชนเปน 0) มคา 1 อางองถงโดยชอตวแปรและดชนไดเปน d[0]
การกำหนดคาใหแตละชองในตวแปรแถวลำดบใชการอางองถงชองนนเชนเดยวกบการเขาถงขอมลการกำหนดคาใชหลกการเดยวกบการกำหนดคาใหตวแปรทวไป คาทกำหนดไดเปนไดทงคาคงท นพจนและตวแปร เชน d[0] หมายถงชองทหนง หากกำหนดคาดวยคำสง d[0] = d[1]+d[2] คาในชองทหนงกจะเปลยนเปน 12 ซงเกดจาก 10+2 เปนตน
ชนดของขอมลแตละตวในแถวลำดบขนกบขอกำหนดของภาษาโปรแกรม บางภาษา เชน ภาษาซ จะกำหนดใหขอมลทกตวในแถวลำดบตองเปนชนดเดยวกน แตบางภาษา เชน ไพธอน กไมมขอกำหนดเรองน1
ลองคดเลขดชนของแถวลำดบสามารถเปนจำนวนจรงไดหรอไม
7.2 แถวลำดบกบการวนซำเนองจากการทำงานกบตวแปรแถวลำดบนนมกตองไลเรยงคาตามชองตางๆ ในแถวลำดบ การทำงานกบแถวลำดบจงมกมาคกบการวนซำแบบทดสอบกอนทำแบบโครงสราง for โดยเปลยนคาดชนไปในแตละรอบของการวนซำ หรอการใชตวแจงนบเพอเขาถงขอมลแตละตวในแถวลำดบ
โครงสราง for แบบดงเดมนนออกแบบมาใหมการตงคาเรมตน ซงใชเปนการตงคาเรมตนใหตวแปรซงเกบคาดชน และงานสดทายทตองทำกอนจบรอบการทำซำ ใหเปนการเพมคาในตวแปรดชนเพอใหช
1ขอมลชนดแถวลำดบในไพธอน คอ List แตมลกษณะเปนแถวลำดบ (array) ซงสามารถเขาถงตำแหนงใดในลำดบกไดดวยการกำหนดดชน ขอมลชนด List ของไพธอนไมใชขอมลชนดรายการ (list) ซงเขาถงไดตามลำดบจากตนรายการ แตไมสามารถกำหนดดชนเพอเขาถงตำแหนงทตองการไดโดยตรง
7.3. แถวลำดบสองมต 97
ตารางท 7.1: รายการตวแปรสำหรบการแปลงคาใหอยในชวง [0,1]
ชอตวแปร ชนด คำอธบายx float[100] ขอมลเขาz float[100] ขอมลทแปลงเปนบรรทดฐานแลวmin float คาตำสดmax float คาสงสด
ไปทชองถดไป สวนโครงสราง for แบบใชตวแจงนบนนจะเปนการแจกแจงสมาชกแตละตวในแถวลำดบทละตว
ตวอยาง 7.1 (การแปลงคาใหอยใชชวง 0-1 (normalization)). การนำขอมลตางๆ ไปใชวเคราะหผลนน เราควรปรบคาของขอมลในอยในชวงทเขาใจงาย เชน คาตำสดเปน 0 และคาสงสดเปน 1 วธแปลงขอมลเขาอยางงายคอใชการแปลงเชงเสนดงสมการ (7.1)
� = � − �� − � (7.1)
เมอ � คอขอมลเขาแตละตว � และ � คอคาตำสดและคาสงสดจากขอมลเขาทงหมด จะได � เปนขอมลทปรบใหอยในชวง [0,1] แลว
เมอรบขอมลจำนวนจรงเขามา 100 คา เกบลงในตวแปรแถวลำดบ จะเขยนผงงานเพอแปลงแถวลำดบของขอมลเขานใหเปนแถวลำดบของคาทปรบชวงแลวไดดงรปท 7.2
จากสมการ (7.1) การแปลงคาใหอยในชวง [0,1] นนตองหาคาตำสด ( � ) และคาตำสด ( �) กอนจากนนจงคำนวณคา � สำหรบขอมลแตละตวในแถวลำดบ จงแบงงานออกเปน 2 สวน ดงน
1. หาคาตำสดและคาสงสด ซงใชการวนซำใหครบจำนวนขอมลทงหมด 1 รอบ2. แปลงขอมลใหอยในชวง [0,1] โดยใชสมการ 7.1 และเกบลงแถวลำดบใหม ซงใชการวนซำคำนวณ
คาขอมลทละจำนวนจนครบขอมลทงหมด 1 รอบ
รายการตวแปรทตองใชเปนดงตารางท 7.1 และเขยนผงงานแตละสวนไดดงรปท 7.2(ก) และ 7.2(ข)ตามลำดบ □
7.3 แถวลำดบสองมตตวแปรแถวลำดบนนเปนตวชไปยงขอมล หรออกนยหนงคอเปนตวแปรซงเกบทอยของขอมล โดยทขอมลจะมชนดใดๆ กไดตามแตจะประกาศตวแปรไว สมมตใหมตารางขนาด แถว แถวละ ตว เราสามารถจองพนทสำหรบตวแปรนเปนใหเกบขอมล ชอง แตละชองเปนทสำหรบเกบแถวลำดบขนาด ตวได
98 บทท 7. ตวแปรแถวลำดบ
READ x[0]
min = x[0], max = x[0]
index = 1
index < 100
READ x[index]
x[index] < min
min = x[index]
x[index] > max
max = x[index]
index = index + 1
T
F
T
T
F
F
(ก) การหาคาสงสดและคาตำสด
index = 0
index < 100
z[index] = x[index]- minmax-min
index = index + 1
T
F
(ข) การแปลงขอมลใหอยในชวง [0,1]
รปท 7.2: สวนของผงงานสำหรบการแปลงขอมลใหอยในชวง [0,1]
7.4. ตวแปรแถวลำดบในภาษาซ 99
ตารางท 7.2: การอางถงแถวลำดบสองมต
[0] [1] [2]แถว 0 1 2 3แถว 1 4 5 6
จะเหนวาการจองพนทนเปนการสรางแถวลำดบซอนแถวลำดบ เรยกวา แถวลำดบสองมต การเขาถงขอมลในแถวลำดบสองมตทำไดโดยเลอกแถวลำดบทตองการกอนดวยการระบดชนของแถวลำดบนนจากนนจงระบตำแหนงของขอมลดวยดชนในแถวลำดบนนอกทหนง
ตวอยาง 7.2 (แถวลำดบสองมต). ตาราง ชอ table ขนาด 2 × 3 ซงมขอมลดงตารางท 7.2การเขาถงขอมลตางๆ จะไดผลลพธดงน
• table[1][0] เกบคา 4 (ดชนแถว 1 ดชนขอมล 0)• table[0][1] เกบคา 2 (ดชนแถว 0 ดชนขอมล 1)• table[1] หมายถงเลขทอยของแถวทสอง ซงเกบคา [4,5,6]• table หมายถงเลขทอยของตารางน
□
ลองคดเราสามารถจองพนทสำหรบตวแปรแถวลำดบมากกวาสองมตไดหรอไม หากได วธการอางถงขอมลควรเปนอยางไร
7.4 ตวแปรแถวลำดบในภาษาซภาษาซกำหนดใหขอมลทกตวในแถวลำดบตองเปนชนดเดยวกน การประกาศตวแปรแถวลำดบจงใชการระบชนดของขอมลในแถวลำดบ และขนาดของแถวลำดบ ขนาดของแถวลำดบคอจำนวนขอมลทอยในแถวลำดบ
int data[10];loat score[30];char name[40];
รหสคำสงท 7.2: ตวอยางการประกาศตวแปรแถวลำดบในภาษาซการประการตวแปรแถวลำดบแบงออกเปน 2 แบบ แยกตามวธกำหนดขนาดของแถวลำดบ ไดแก
แบบกำหนดขนาดลวงหนาดวยคาคงท และแบบระบขนาดเมอทำงาน การประกาศตวแปรแถวลำดบแบบ
100 บทท 7. ตวแปรแถวลำดบ
data[0] [1] [2] [3]
data[0]*data
รปท 7.3: แถวลำดบกบตวแปรชนดตวช
กำหนดขนาดลวงหนาจะระบชนดของขอมลในแถวลำดบ และจำนวนชองทตองการเปนคาคงท จากรหสคำสงท 7.2 ตวแปร data เปนแถวลำดบของจำนวนเตมขนาด 10 ชอง ตวแปร score เปนแถวลำดบของจำนวนจรงขนาด 30 ชอง และตวแปร name เปนแถวลำดบของอกขระขนาด 40 ชอง
การประกาศตวแปรในรปแบบนเรยกวาเปนการจองพนทสำหรบตวแปร และกำหนดขนาดคงทตงแตตอนคอมไพล (static allocation) เนองจากจำนวนชองเปนคาคงทในรหสตนฉบบ คอมไพเลอรจะรขนาดของหนวยความจำทตองใช และกำหนดใหระบบปฏบตการจองพนทไดตามขนาดทตองการ เมอใชงานโปรแกรมเสรจ เครองจะสามารถคนพนทในหนวยความจำใหระบบปฏบตการไดโดยอตโนมต
ในบางครงเราอาจไมรขนาดของแถวลำดบในขณะเขยนรหสตนฉบบ การประกาศตวแปรเมอไมรขนาดลวงหนาจงเปนการจองพนทสำหรบตวชของแถวลำดบ แลวใหหนวยความจำจองพนทเพมเตมเมอทำงาน (dynamic allocation) ทำผานคำสง malloc, calloc
การจองพนทในรปแบบนนน ระบบปฏบตการไมสามารถรขนาดพนททตองใชในหนวยความจำไดลวงหนา ทำใหเมอใชงานเสรจแลว ผเขยนโปรแกรมจำเปนตองระบคำสงสำหรบคนพนทในหนวยความจำใหระบบปฏบตการเอง การคนพนทใชคำสง free
ในการเกบขอมลชนดแถวลำดบ เครองจะจองพนทตดกนในหนวยความจำสำหรบแถวลำดบ และอางถงพนททงบรเวณดวยตวแปรชนดตวช โดยขอมลในตวแปรชนดตวชจะเปนทอยของขอมลตำแหนงแรกในแถวลำดบ ขอมลตวทสองจะอยตดกบขอมลตวแรก ซงเปนทอยในตวชบวกกบขนาดของขอมลตวแรกนน
เชน ในรปท 7.3 แถวลำดบของจำนวนเตมขนาด 4 ชอง อางถงดวยตวแปรชอ data และจำนวนเตม1 จำนวนใชพนท 4 ไบต ขอมลทอยในตวแปร data จะเปนทอยของแถวลำดบ และเปนทอยเดยวกบขอมลตวแรก หากใหการอางถงขอมลดวยตวชใชสญลกษณ * การอางถง *data จะหมายถงขอมลตวแรก ซงเทยบเทากบ data[0] สำหรบขอมลตวถดไป จะอย ณ เลขทอย data+4 เนองจากจำนวนเตมหนงตวมขนาด 4 ไบต จงอางถงผานตวแปรชนดตวชไดเปน *(data+4) หรอ data[1] ดงนน การใชเลขดชนชวย จะชวยใหอางถงขอมลในแถวลำดบไดโดยไมจำเปนตองบวกลบเลขทอยเอง ชวยอำนวยความสะดวกใหผเขยนโปรแกรม
หากตองการเพมขนาดของแถวลำดบ ตองจองพนทใหมทมขนาดตามตองการ แลวสำเนาคาในแถวลำดบเดมมายงทใหม ระบบปฏบตการอาจไมสามารถใชหนวยความจำในตำแหนงเดมไดเนองจากพนทขางเคยงบรเวณเดมอาจะมขอมลอนอย
7.5. ตวแปรชนดสายอกขระในภาษาซ 101
ลองคดหากใสดชนเปนลบ หรอมคาเกนกวาจำนวนชองของขอมล จะเกดผลอยางไร
7.5 ตวแปรชนดสายอกขระในภาษาซ7.5.1 การเกบขอมลแบบสายอกขระภาษาซไมมชนดขอมลโดยตรงสำหรบขอความ การแทนขอความจงใชตวแปรแบบแถวลำดบของอกขระแทน และเขาถงขอมลอกขระแตละตวไดในลกษณะเดยวกบตวแปรแถวลำดบอนๆ แตเนองจากขอมลทเปนขอความนนมความยาวไมคงท เชน ชอคน อาจยาว 3-10 ตวอกษร การจองพนทใหพอดกบขอมลเขานนเปนไปไดยาก สวนการแสดงผลขอความนน เครองจะวนซำแสดงผลอกขระทละตำแหนงไปจนหมดขอความ จงจำเปนตองมอกขระพเศษเพอบงบอกขอบเขตของสายอกขระ ในภาษาซใชอกขระวาง (nullcharacter, ‘\0’ หรอคา 0) แทนตวระบจดสนสดของขอความ
การจองพนทสำหรบสายอกขระในภาษาซ จงเปนการจองพนทสำหรบตวแปรชนดแถวลำดบของอกขระ โดยกำหนดจำนวนชองเปนจำนวนอกขระทตองการ บวกหนงชองสำหรบอกขระระบจดสนสด
ตวอยาง 7.3 (การแปลงขอความทงหมดใหเปนตวพมพใหญ). บางครงเราตองการบนทกขอมลเปนตวพมพใหญทงหมด เชน ชอบทความตพมพ แตขอมลทปอนโดยผใชอาจเปนทงตวพมพใหญและตวพมพเลกผสมกน การบงคบใหผใชปอนขอมลเขาเปนตวพมพใหญทงหมดนนอาจสรางความลำบากใหกบผใชผทำระบบรบขอมลจงทำฟงกชนสำหรบแปลงขอความใหเปนตวพมพใหญทงหมดแทน
การเกบขอมลอกขระตางๆ นนเกบเปนรหสอกขระ เชน รหสแอสกในตารางท 3.2 (หนา 47) ซงเสมอนเปนจำนวนเตม หากอกขระนนเปนจำนวนในชวง [97-122] (0x61 - 0x7A) แสดงวาเปนตวพมพเลก และจะเหนไดวาตวอกษร a-z ตวพมพเลกนนอยเรยงกน สวนตวอกษร A-Z ตวพมพใหญกอยเรยงกนเชนกน ระยะหางระหวางอกขระ a-A b-B ... z-Z นนคงทเทากบ 32 การแปลงอกขระตวพมพเลกเปนตวพมพใหญจงทำไดโดยตรวจสอบวาอกขระนนมรหสอยในชวง [97-122] หรอไม หากใชใหนำรหสนนลบดวย 32 แลวเกบลงไปทเดม ทำซำกบทกอกขระในขอความ กจะเปนการแปลงสายอกขระทมตวพมพเลกใหกลายเปนตวพมพใหญทงหมด เขยนเปนสวนของโปรแกรมภาษาซไดดงรหสคำสงท 7.3
1 char input[100];2 scanf(”%s”, input);3 int i;4 for (i = 0; input[i] != ’\0’; i++)5 if (input[i] >= 97 && input[i] <= 122)6 input[i] -= 32;7 printf(”%s\n”, input);
รหสคำสงท 7.3: การแปลงขอความทงหมดใหเปนตวพมพใหญ
102 บทท 7. ตวแปรแถวลำดบ
input เปนตวแปรชนดแถวลำดบของอกขระขนาด 100 ชอง สามารถเกบขอความไดยาว 99อกขระ และเผอทสำหรบอกขระพเศษปดทายสายอกขระ 1 ชอง เงอนไขในการวนซำคออกขระ ณ ดชนนนยงไมเปนอกขระระบจดสนสด สงทตองทำซำประกอบดวยการแปลงอกขระนนใหเปนตวพมพใหญ และการเพมดชนไปอกหนง ซงหากใชโครงสราง for แบบดงเดม การเพมดชนไปอกหนงจะเปนงานสดทายทตองทำซำกอนเรมรอบใหม
□
7.5.2 ฟงกชนตางๆ เกยวกบสายอกขระในภาษาซเนองจากขอมลชนดขอความนนมการใชบอยครง และโดยมากจะเปนการอานเขยนทงสายอกขระ ไมจำเพาะเจาะจงทอกขระใดอกขระหนง การเขยนโปรแกรมดวยการวนซำสำหรบอานเขยนทกครงไปนนจงทำใหรหสตนฉบบหรอผงงานยาวกวาทควรจะเปน จงมการสรางฟงกชนเฉพาะสำหรบการทำงานกบขอความขน เกบอยในคลงโปรแกรม string การเรยกใชฟงกชนตางๆ ในคลงโปรแกรมนทำไดโดยระบ#include <string.h> ในตวชแนะ (directive) ของโปรแกรมตอนตนแฟมรหสตนฉบบ เพอใหคอมไพเลอรเรยกใชฟงกชนเหลานไดถกตอง มฟงกชนทใชงานบอยครง เชน
1. strlen การหาความยาวของขอความในตวแปรสายอกขระ เครองจะหาคาดชนของอกขระระบจดสนสด แลวคนคาดชนนน ซงกจะเปนความยาวของสายอกขระดวย
2. strcpy การคดลอกขอความในตวแปรสายอกขระ ตองจองพนทสำหรบตวแปรปลายทางกอนเรยกใชฟงกชน เมอเรยกใช ฟงกชนนจะสำเนาคาอกขระจากตวแปรตนทางไปยงตวแปรปลายทางทละตำแหนงจากดชนเรมตนไปยงตำแหนงสดทายของขอความ และคนคาเปนตวชไปยงอกขระระบจดสนสดของตวแปรปลายทาง
3. strcat การคดลอกขอความจากสายอกขระตนทางไปตอทายสายอกขระปลายทาง ตองจองพนทสำหรบตวแปรปลายทางไวกอนเชนเดยวกน ฟงกชนจะสำเนาอกขระแรกของตวแปรตนทางไปยงตำแหนงเดมของอกขระปดทายขอความในตวแปรปลายทาง และสำเนาทละตำแหนงไปจนถงตำแหนงสดทายของขอความตนทาง จากนนคนคาเปนตวชไปยงอกขระระบจดสนสดของตวแปรปลายทางหลงสำเนาขอมลทงหมด
4. strcmp การเปรยบเทยบขอความในตวแปรสายอกขระ ฟงกชนจะเปรยบเทยบอกขระทละตวตามคาของรหสอกขระทใช โดยตวเลขมากอนตวอกษร และตวพมพใหญทงหมดจะมากอนตวพมพเลก เชนลำดบในตารางท 3.2 (หนา 47)
size_t strlen(const char *s);char *stpcpy(char *dest, const char *src);char *strcat(char *dest, const char *src);int strcmp(const char *s1, const char *s2);
รหสคำสงท 7.4: ฟงกชนตางๆ เกยวกบสายอกขระในภาษาซ
7.5. ตวแปรชนดสายอกขระในภาษาซ 103
วธการเรยกใชฟงกชนเกยวกบสตรงเปนดงตนแบบในรหสคำสงท 7.4 ฟงกชนเหลานหากมผลลพธเปนสายอกขระ เชน การตอสายอกขระ ฟงกชนจะคนคาผลลพธทเปนสายอกขระผานพารามเตอรตวแรก(dest) สวนคาทรบคนจากฟงกชนจะเปนตวชไปยงตำแหนงสดทายของขอความในผลลพธ
แบบฝกหดจงเขยนผงงานและโปรแกรมภาษาซเพอทำงานดงตอไปน
1. รบขอมลจำนวนเตม 10 จำนวน จากนนแสดงผลขอมลจากลำดบสดทายไปยงลำดบแรก2. ลำดบฟโบนกช (Fibonacci) มนยามความสมพนธคอ จำนวนถดไปเทากบผลบวกของสองจำนวน
กอนหนา เขยนเปนสญลกษณไดดงน
� = � −1 + � −2เมอ � คอเลขในลำดบฟโบนกชตวท โดยท �0 = 0 และ �1 = 1 ใหรบคา ซงเปนจำนวนเตมมคาไมเกน 100 แลวแสดงผลลพธ �
3. ตองการสรางตารางแจกแจงความถของขอมลคะแนนสอบของนสตซงอยในชวง [0,100] จำนวน100 คน โดยแบงขอมลเปน 5 ชวง ตงแต [0,20), [20,40), [40,60), [60,80) และ [80,100]แลวแสดงจำนวนนสตทมคะแนนอยในชวงตางๆ
4. ใหผใชปอนขอมลหมายเลขโทรศพทของไทยเขามาซงเปนตวเลขโดด 9-10 ตว ซงอาจจะม - คนกลางระหวางตวเลขบางตวได เชน 02-2185148 หรอ 022185148 ใหแปลงหมายเลขทไดนใหอยในรปแบบ [เลข2-3 ตว]-[เลข 3 ตว]-[เลข 4 ตว] เชน 02-218-5148
5. รบขอมลเปนสายอกขระความยาวไมเกน 20 ตวอกษร แลวตรวจสอบวาสายอกขระนนเปนpalindrome หรอไม
palindrome คอขอความทอานจากซายไปขวาหรอขวาไปซายไดเปนคำเดยวกนเชน anna, otto, madam กำหนดใหขอความมเฉพาะอกษร a-z เทานน
6. การหาคาพนทปดลอมของฟงกชนไมเปนลบ �(�) กบแกน � ในชวง , ] หาไดจาก ∫ �(�) �ซงสามารถประมาณคาไดโดยแบง [ , ] เปนชวงแคบๆ ชวง แตละชวงกวาง = ( − )/ แลวคำนวณคาจากสมการ (7.2)
∑1 �( + − 2) ⋅ (7.2)
กำหนดฟงกชนไมเปนลบ loat f ( loat x ) มาให เมอรบขอมลขอบลาง a และขอบบนb เปนจำนวนจรง และรบจำนวนเตม n เปนจำนวนชวงทตองการแบง จงคำนวณ ∫ �(�) � โดยใชวธการประมาณคาขางตน
104 บทท 7. ตวแปรแถวลำดบ
7. จากการประมาณในสมการ (7.2) นน �( + − 2 ) ⋅ เปนการคำนวณพนทสเหลยมมมฉากทสงเทากบจดกงกลางของแตละชวง เราสามารถประมาณคาใหใกลเคยงขนไดโดยใชพนทของสเหลยมดานขนานทมความสงสองจดเทากบขอบลางและขอบบนของชวงตามลำดบ ลองคำนวณโดยปรบวธการประมาณคาด
บทท 8การเรยกใชฟงกชน
วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปแบบการเรยกใชฟงกชน
1. กำหนดพารามเตอรและรบคาคนจากฟงกชนไดเมอกำหนดตนแบบของฟงกชนมาให2. แยกแยะขอบเขตการใชงานของตวแปรเมอมฟงกชนมาใหได3. เขยนฟงกชนเพอใหทำงานตามทตองการได
8.1 นยามและสญลกษณโปรแกรมยอย (Pre-defined process หรอ subroutine) เปนชดคำสงซงมการกำหนดการทำงานไวลวงหนาแลว โดยมากเรามกแบงโปรแกรมขนาดใหญออกเปนโปรแกรมยอยหลายๆ สวน เพอใหเขาใจไดงาย บำรงรกษาสะดวก นอกจากน สวนของโปรแกรมใดทถกเรยกใชบอย กมกจะถกเขยนแยกออกมาเปนโปรแกรมยอยดวย การใชสญลกษณโปรแกรมยอยแทนขนตอนการทำงานแบบละเอยดทำใหผงงานกระชบ เขาใจงาย ในรหสตนฉบบเองกเชนกน
โปรแกรมยอยกบฟงกชนมลกษณะเปนชดคำสงซงทำงานจบในตวเหมอนกน แตแตกตางกนทฟงกชนนนจะสามารถคนคาไดเชนเดยวกบฟงกชนทางคณตศาสตร แตโปรแกรมยอยจะไมมการคนคา ภาษาโปรแกรมบางภาษา เชน ภาษาซ ใชโครงสรางแบบฟงกชนทงหมด และเพมลกษณะการคนคาชนด voidแทนการไมคนคาเขามา ดงนนบางครงอาจใชคำวาฟงกชนและโปรแกรมยอยแทนกนไดโดยไมผดความหมาย
ผงงานใชสญลกษณสเหลยมมมฉากซงมขอบขางเปนเสนขนานแทนการเรยกใชโปรแกรมยอย และมชอโปรแกรมยอยกำกบในสญลกษณ ซงจะอางองไปถงการทำงานอยางใดอยางหนงซงกำหนดไวในผงงานอนหรอผงงานหนาอน ดงตวอยางในรปท 8.1
106 บทท 8. การเรยกใชฟงกชน
draw(text)
y = f(x)
print()
เกบขอมล
รปท 8.1: สญลกษณการเรยกใชโปรแกรมยอยหรอฟงกชน
เราอาจระบคาตางๆ ทตองการสงใหโปรแกรมยอยหรอฟงกชน และตวแปรสำหรบรบคาคนลงในผงงานดวยกได หรอไมระบกได เพอใหผงงานแสดงขนตอนการทำงานทชดเจน ควรระบคาทรบสง
สญลกษณของโปรแกรมยอยในรหสตนฉบบขนกบภาษาทใช โดยมากจะเปนการประกาศหรอนยามชอกอนใชงาน การอางองถงโปรแกรมยอยหรอฟงกชนทำไดผานชอของโปรแกรมยอยหรอฟงกชนนนในกรณทมการคนคา การเรยกใชฟงกชนนนสามารถมองเสมอนเปนนพจนซงใหผลลพธเปนคาในชนดทกำหนดได
8.2 โครงสรางของฟงกชนและการเรยกใชฟงกชนประกอบดวยองคประกอบหลก 4 สวน ไดแก
1. ชอของฟงกชน มขอกำหนดในการตงเชนเดยวกบตวแปร ในบางภาษาจะยอมใหตงชอฟงกชนซำกนไดหากมพารามเตอรทตางกน เครองจะเลอกฟงกชนทถกตองจากลกษณะของพารามเตอรทปอนเขามาใหเอง บางภาษาเชนไพธอนยอมใหตงชอซำได โดยจะเปนการนยามชอใหมตามการประกาศลาสดทม อยางไรกตาม ควรหลกเลยงการใชชอซำเพอปองกนความสบสนเมอเรยกใช
2. พารามเตอร คอตวแปรสำหรบรบคาทสงเขามาใหใชในฟงกชน จะมหรอไมมกได3. ชนดของคาทสงคนใหตวเรยก หรอไมมหากไมตองการคนคาใดๆ4. ชดคำสงสำหรบขนตอนการทำงานของฟงกชน และคำสงสำหรบคนคา ตวชดคำสงนคอสงทนำไป
เขยนเปนผงงานของฟงกชน
หากเปนโปรแกรมยอย กจะตดสวนการคนคาออกไปได การประกาศฟงกชนโดยทวไปมโครงสรางดงรหสคำสงท 8.1
ชนดของตวแปรคนคา ชอฟงกชน ( ตวแปรรบคา, ตวแปรรบคา, ...)ชดคำสงreturn คาสงคน
รหสคำสงท 8.1: โครงสรางของฟงกชน
การเรยกใชโปรแกรมยอยหรอฟงกชนทำโดยการระบชอโปรแกรมยอยนนในโปรแกรมหลก พรอมทงสงคาตางๆ ทจำเปนไปให ในกรณทเปนฟงกชนและมคาคนกลบมา หากตองการเกบคาไวใชงาน กสามารถตงตวแปรมาแลวกำหนดคาใหเปนผลลพธของฟงกชนได
8.3. การรบสงคา 107
ตนแบบ (signature, prototype) ของฟงกชน ประกอบดวย ชอฟงกชน ชนดของตวแปรรบคาตางๆ ซงเปนพารามเตอรของฟงกชน และชนดของตวแปรคนคา การเรยกใชฟงกชนนนไมจำเปนตองรขนตอนการทำงานภายในฟงกชน เพยงรตนแบบกจะสามารถเรยกใชฟงกชนเหลานนไดถกตอง
ตวอยาง 8.1 (การเรยกใชฟงกชนการหารากทสอง). ฟงกชนการหารากทสอง มตนแบบดงนdouble sqrt(double x);
แสดงวาฟงกชนหารากทสองชอ sqrt รบคาเปนจำนวนจรงนยสำคญสงหนงคา และคนคาผลลพธเปนจำนวนจรงนยสำคญสงเชนกน เมอเขยนคำสง
double x;x = sqrt(10.5);
จะมการทำงานดงน
1. ประกาศตวแปร x ใหเปนจำนวนจรงนยสำคญสง2. เรยกใชฟงกชน sqrt โดยสงจำนวน 10.5 ให3. ไดผลลพธกลบมา แลวกำหนดคาให x เทากบผลลพธนน
หากสงprintf(”%f”,sqrt(2.5));
จะเปนการเรยกใชฟงกชน sqrt และปอนจำนวน 2.5 ใหฟงกชน และเมอไดผลลพธกลบมาแลว ใชผลลพธนนเปนขอมลเขาสงตอใหฟงกชน printf แตไมเกบผลลพธไวใชงานอก □
การเขยนโปรแกรมยอยหรอฟงกชนนนเหมอนกบการออกแบบโปรแกรมปกต คอ
1. ระบขอมลเขา ซงอาจรบมาจากโปรแกรมหลกผานวธการสงคาแบบตางๆ หรอรบจากผใช2. ระบขอมลออกถาม อยในรปของการคนคาแบบตางๆ3. ออกแบบขนตอนการทำงานของโปรแกรม
ดงนน เราจงสามารถเขยนผงงานยอยสำหรบโปรแกรมยอยหรอฟงกชนไดเชนเดยวกบโปรแกรมทวไป
8.3 การรบสงคาการรบสงคาใหฟงกชนหรอโปรแกรมยอยมสองรปแบบ คอ ผานพารามเตอรของฟงกชน ซงเปนการสำเนาคาจากตวเรยก สงไปใหตวถกเรยก และผานตวแปรรวมทประกาศไวสำหรบทงโปรแกรม
108 บทท 8. การเรยกใชฟงกชน
a , bf ( )
\{
\} ตวถกเรยก
a , bf ( )
ตวเรยก
สำเนา
คา
สำเนา
คา
(ก) การสงคาผานพารามเตอร
สำเนา
คาptr1
ptr2
value
(ข) การสงคาผานตวแปรชนดตวช
8.3.1 พารามเตอรพารามเตอร (formal parameter) เปนตวแปรรบคาของฟงกชนหรอโปรแกรมยอย ซงตวเรยกสงใหในการเรยกใชแตละครง การสงคาผานพารามเตอรเปนการสำเนาคาจรงทอยในตวเรยก (actual pa-rameter) ไปใหตวแปรรบคาในตวถกเรยก ดงรปท 8.2(ก) การสงคาผานพารามเตอรยงแบงออกเปนสองรปแบบ คอการสำเนาคาทวๆไป เชน จำนวนเตม จำนวนจรง และอกขระ กบการสำเนาคาตวชซงเปนตำแหนงทอยในหนวยความจำสงไปยงตวถกเรยก การสำเนาคาทวๆ ไปไมทำใหคาทมอยในตวแปรของตวเรยกเปลยนแปลงไป แตในกรณทเปนตวแปรชนดตวช เชนตวแปร ptr1 ในรปท 8.2(ข) ซงเกบตำแหนงทอยของคาในตวแปร value (ชไปยง value) เมอสำนาเคาไปยงตวแปร ptr2 ถงแมคาในตวชจะถกสำเนาไปเชนเดยวกบการสำเนาคาปกต แตคานนคอตำแหนงทอยของขอมลจรง การเปลยนแปลงคาตางๆ โดยอาศยทอยทกำหนดในตวช เชน
*ptr2 = 10
จะทำใหตวชอนๆ (ในทนคอ ptr1) เหนคาทเปลยนแปลงตามไปดวย จงสามารถใชวธนในการคนคาโดยไมตองผานตวแปรคนคา แตอาศยการกำหนดคาใหมใหตำแหนงขอมลระบโดยตวแปรชนดตวชในพารามเตอรแทน เชนในกรณคำสง scanf ซงไมไดคนคาขอมลทอานผานตวแปรคนคา แตใชการนำขอมลทอานไดไปใสในตำแหนงทระบดวยตวแปรตวชแตละตวแทน
8.4. ขอบเขตของตวแปร 109
จำนวนของตวแปรรบคาขนกบผเขยนโปรแกรมจะกำหนด ชนดของตวแปรแตละตวไมจำเปนตองเหมอนกน การสงคาในตวเรยกจะสงเรยงลำดบตามทกำหนดในฟงกชนหรอโปรแกรมยอย คอ ตวท 1 23 ... ตามลำดบ
8.3.2 การคนคาตวแปรคนคาใชสำหรบสงคาบางอยางคนใหตวเรยกนำกลบไปใชตอ โดยมชนดของตวแปรตามทประกาศไวในฟงกชน นอกจากชนดตวแปรพนฐานแลว สวนของโปรแกรมยอยอาจไมคนคาใดๆเลยกได ในภาษาซกำหนดชนดไมคนคานวา ชนด void
คำสง return ใชสำหรบกำหนดคาใหตวแปรสงคนคา และออกจากการทำงานของฟงกชน หากไมมการคนคา ในกรณทไมตองการคนคา อาจใชคำสง return โดยไมระบคากไดเชนกน
8.4 ขอบเขตของตวแปรตวแปรทใชมสองประเภท แบบแรกคอตวแปรซงใชรวมกนทงโปรแกรม ตวแปรชนดนสามารถเรยกใชจากสวนใดของโปรแกรมกได ไมวาจะเปนโปรแกรมหลกหรอโปรแกรมยอย แบบทสองคอตวแปรเฉพาะท ตวแปรชนดนจะใชไดเฉพาะในสวนทประกาศเทานน ตวแปรทงหมดทประกาศอยในสวนของโปรแกรมยอย หากประกาศใหเปนตวแปรเฉพาะท แมจะเปนชอเดยวกบตวแปรทประกาศทอน คาตางๆจะใชไดในสวนของโปรแกรมยอยนเทานน
หากตองการสงคาจากสวนอนๆของโปรแกรมเขามาใหสวนของโปรแกรมยอย การสงคาทำไดผานตวแปรรบคา ตวแปรรบคานจะใชเฉพาะในสวนของโปรแกรมยอย และไมมการเปลยนแปลงคาของตวแปรนอกสวนของโปรแกรมยอย หากตองการนำคาทคำนวณไดในสวนของโปรแกรมยอยออกไปใชทสวนอนๆ ตองประกาศตวแปรนนใหเปนตวแปรรวม หรอคนคาทคำนวณไดผานตวแปรคนคาไป
8.5 ลำดบการทำงานของฟงกชนการทำงานของโปรแกรมจะเรมทโปรแกรมหลก และมการเรยกใชโปรแกรมยอยตางๆ โปรแกรมยอยเองกสามารถเรยกโปรแกรมยอยอนๆ รวมถงเรยกใชตวโปรแกรมยอยเองไดเชนเดยวกน ในการวเคราะหการเรยกใชโปรแกรมยอย เราแบงโปรแกรมยอยตามลกษณะการทำงานเปน 2 สวน คอ ตวเรยก (caller)และตวถกเรยก (callee) ทงตวเรยกและตวถกเรยกสามารถเปนโปรแกรมยอยใดๆ กได เปนรหสตนฉบบชดเดยวกนกได แตการทำงานจะเปนไปตามลำดบ คอ เรมจากตวเรยกกอน เมอตวเรยกนนเรยกใชตวถกเรยก การทำงานจะขามไปเรมตนทจดเรมตนของตวถกเรยก จนกวาจะเสรจสนการทำงานในสวนของตวถกเรยกแลว จงจะกลบมาทำงานสวนทเหลอของตวเรยกตอ
ตวแปรตางๆ ทประกาศภายในฟงกชนนน จะใชไดในขอบเขตของการทำงานในการเรยกใชครงหนงๆเทานน การเรยกใชโปรแกรมยอยจะเสมอนกบมการสรางชดของตวแปรเฉพาะทสำหรบโปรแกรมยอยนน
110 บทท 8. การเรยกใชฟงกชน
ขนใหม โดยไมเกยวของกบตวแปรเฉพาะทอนๆ ทเคยประกาศมากอนลวงหนา และเมอการทำงานของตวถกเรยกนนสนสด ตวแปรเฉพาะทตางๆ ของตวถกเรยกกจะหมดอายตามไปดวย หากตองการอางถงคาตางๆ ทมอยในตวถกเรยก ตองสงคานนคนใหตวเรยกผานการคนคาในรปแบบตางๆตวอยาง 8.2 (ฟงกชนแฟกทอเรยลและขนตอนการทำงาน). โปรแกรมในรหสตนฉบบท 8.2 ประกอบดวยฟงกชน main และ factorial
1 #include <stdio.h>
2 #include <stdlib.h>
34 int nRound;
56 int factorial(int n)
7 {
8 printf(”round %d, n = %d\n”, nRound, n);
9 nRound++;
1011 if (n < 0)
12 return -1;
13 else if (n <= 2)
14 return n;
15 else
16 return n * factorial(n-1);
17 }
1819 int main()
20 {
21 int n;
22 printf(”Enter n: ”);
23 scanf(”%d”, &n);
2425 nRound = 1;
2627 printf(”%d! = %d\n”, n, factorial(n));
2829 return 0;
30 }
รหสคำสงท 8.2: โปรแกรมแฟกทอเรยล
8.6. คลงโปรแกรม 111
ขอสงเกตทนาสนใจในโปรแกรมนม 4 จด ไดแก
1. ตวแปร nRound เปนตวแปรรวม ประกาศทบรรทดท 4 อยนอกทงสองฟงกชน ทำใหทงสองฟงกชนสามารถใชงานตวแปรนได และการเปลยนแปลงคาใดๆ ในตวแปรนดวยฟงกชนหนง จะสงผลใหฟงกชนอนๆ เหนคาทเปลยนไปตามไปดวยเชน ใน main มการกำหนดคา nRound ใหเปน 1 ในบรรทดท 25 มอเรยกฟงกชนfactorial ครงแรกในบรรทดท 27 ในฟงกชน factorial กจะเหนวา nRound มคา 1ตามไปดวยสวนในฟงกชน factorial นนมการเพมคา nRound ไปทละหนงในแตละครงของการเรยกฟงกชนดวยคำสงในบรรทดท 9 การเรยกฟงกชนในรอบหลงๆ กจะเหนคา nRound ทเปลยนไปแลวเชนกน
2. ตวแปร n ประกาศอยในทง main และ factorial แตทงสองตวแปรเกบแยกจากกนโดยเดดขาด ความเชอมโยงของทงสองตวแปรมเฉพาะตอนท main สำเนาคาใน n ของ main ไปให nของ factorial ผานการเรยกใชในครงแรกเทานน
3. ฟงกชนใดๆ สามารถเรยกใชตวมนเองได เชนในฟงกชน factorial กมการเรยกใชฟงกชนfactorial ดวยเชนกน แตการเกบตวแปรเฉพาะทตางๆ ของตวเรยกและตวถกเรยกนนแยกจากกน ไมวาชอตวแปรหรอฟงกชนจะซำกนหรอไมกตาม
4. ในรหสคำสงท 8.2 เปนโปรแกรมภาษาซ ประกาศฟงกชน factorial และการทำงานไวกอนการเรยกใชในฟงกชน main จงไมจำเปนตองเขยนตนแบบของฟงกชนกอนการเรยกใชอก แตหากสลบตำแหนงของรหสตนฉบบสำหรบฟงกชน factorial และฟงกชน main กอนประกาศฟงกชน main ตองระบตนแบบของฟงกชน factorial เอาไวกอนฟงกชน main ดวย
□
8.6 คลงโปรแกรมโปรแกรมยอยและฟงกชนตางๆ ทใชบอยมกจะถกรวบรวมเกบไวในคลงโปรแกรม (library) เพอจดใหเปนหมวดหมและใหผทตองการใชสามารถดงมาใชไดโดยไมตองเขยนใหมอก การเรยกใชฟงกชนในคลงโปรแกรมทำไดโดยระบชอคลงโปรแกรมทใช เพอใหคอมไพเลอรหรออนเทอรพรเตอรรจกฟงกชนทตองการเรยกใช และใหตวเชอมโยงสามารถไปดงออบเจกตโคดของฟงกชนเหลานนมารวมเปนโปรแกรมททำงานได
คลงโปรแกรมจงขนกบภาษาโปรแกรมทใช รวมถงขนกบระบบปฏบตการทใชดวย คลงโปรแกรมทเปนทนยมนนจะสนบสนนหลายภาษาและระบบปฏบตการ เชน OpenGL (Open Graphic Library)เปนคลงโปรแกรมสำหรบงานกราฟก สนบสนนทง Windows, Linux, OS X และมสวนตอประสานโปรแกรม (API) ในหลากหลายภาษา เชน ซ จาวา
112 บทท 8. การเรยกใชฟงกชน
แบบฝกหด1. กำหนดฟงกชน longdiv เปนฟงกชนการหารยาวทศนยม 1 ตำแหนง กำหนดให dividend
เปนตวตง และ divisor เปนตวหาร มตนแบบดงนloat longdiv(loat dividend, loat divisor);
เชน 10/4 จะไดผลลพธเปน 2.5หากตองการหาผลลพธของ 20/3 จะตองเรยกใชฟงกชน longdiv นอยางไร
2. ตองการเขยนฟงกชน contains เพอตรวจสอบวา อกขระอนพตอยในสายอกขระทปอนเขามาหรอไม โดยใหผลลพธเปนจำนวนเตม 1 หากพบ หรอ 0 หากไมพบ เชน ตรวจสอบวาอกขระ ‘a’อยในสายอกขระ “contains” หรอไม ฟงกชนนควรมตนแบบเปนอยางไร
3. จากแบบฝกหด Fibonacci ในบทท 7 จงเขยนฟงกชนการคำนวณเลขฟโบนกชลำดบท เมอฟงกชนการหาคาในลำดบฟโบนกชคอ
� = � −1 + � −2กำหนด �0 = 0 และ �1 = 1
บทท 9ความปลอดภยและจรยธรรมคอมพวเตอร
วตถประสงคการเรยนรระบปจจยเสยงเกยวกบความปลอดภยของระบบและขอมลคอมพวเตอร จรยธรรมการใชคอมพวเตอรและอาชญากรรมบนอนเทอรเนต
1. อธบายรปแบบการโจมตระบบคอมพวเตอร และขอมลในระบบคอมพวเตอรแบบพนฐาน และวธการปองกนเบองตนได
2. อธบายหลกการแสดงตวและหลกการยนยนตวตนพนฐานในระบบคอมพวเตอรได3. ผเรยนระดบพนฐานควรสามารถอธบายหลกการเขารหสอยางงาย โดยใชกญแจสมมาตร และ
กญแจอสมมาตรได4. เชอมโยงความผดตามพระราชบญญตคอมพวเตอร พ.ศ. 2550 กบวธปองกนตนจากอาชญากรร
รมเหลานได5. อธบายการตดสนใจตามหลกการทางจรยธรรมไดเมอพบกบปญหา
9.1 ความเสยหายตอระบบคอมพวเตอรและขอมลความเสยหายทอาจเกดไดกบระบบคอมพวเตอรมทงความเสยหายในสวนฮารดแวร ซอฟตแวร และความเสยหายโดยตรงกบขอมลทเกบไวในระบบคอมพวเตอร ความเสยหายทเกดขนเปนไดทงในทางตรงเชน ฮารดดสกเสยหายจากการตกกระแทก หรอทางออม เชน ขอมลรวไหลทำใหธรกจเสยหาย เปนตน
ความเสยหายของระบบคอมพวเตอรเกดไดจากหลายสาเหต บางกรณเปนเหตสดวสยไมสามารถปองกนได เชน ภยธรรมชาต หรออปกรณตางๆ เสอมสภาพไปตามอายการใชงาน บางกรณเกดจากความรเทาไมถงการณหรอความประมาทของผใช เชน ไมมการเกบขอมลสำรอง หรอปดระบบคอมพวเตอรไมถกวธแลวทำใหขอมลสญหาย แตบางกรณกเกดจากชองโหวตางๆ ในระบบคอมพวเตอร และมผประสงครายตงใจโจมตทชองโหวเพอสรางความเสยหายใหกบระบบหรอขอมลในระบบ
114 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
การรกษาความปลอดภยจงตองคำนงถงปจจยตางๆ ทอาจสรางความเสยหายเหลาน และหาวธการปองกน
9.2 อาชญากรรมคอมพวเตอรประเทศไทยตราพระราชบญญตวาดวยการกระทำผดเกยวกบคอมพวเตอร พ.ศ. 2550 เพอปองกนและปราบปรามการกระทำผดเกยวกบคอมพวเตอร ในพระราชบญญตฯ กำหนดฐานความผดทางอาญาอำนาจหนาทของเจาหนาทในการปองกนและปราบปราม และหนาทของผใหบรการในการจราจรทางคอมพวเตอร
การกำหนดฐานความผดตางๆ ยดตามหลกการรกษาความลบ (confidentiality) การรกษาความครบถวน (integrity) และการรกษาสภาพพรอมใชงาน (availability) ของระบบและขอมลคอมพวเตอร การกระทำทเปนอาชญากรรมคอมพวเตอรจะอยในหมวด 1 ของพระราชบญญตฯ โดยแบงออกเปนการกระทำโดยตรงกบคอมพวเตอร และการใชคอมพวเตอรเปนเครองมอในการกระทำความผดอน จำแนกฐานความผดตางๆ ไดดงตอไปน
1. (มาตรา 5) การเขาถงระบบคอมพวเตอรทไมไดมไวสำหรบตน2. (มาตรา 6) การรวธการปองกนการเขาถงระบบแลวนำไปเผยแพรตอแกผอนในทางทจะกอใหเกด
ความเสยหาย3. (มาตรา 7) การเขาถงขอมลคอมพวเตอรทไมไดมไวสำหรบตน4. (มาตรา 8) การดกรบขอมลคอมพวเตอรของผอน โดยไมไดเปนไปเพอประโยชนสาธารณะ5. (มาตรา 9) การรบกวนขอมลคอมพวเตอร โดยการทำใหเสยหาย ดดแปลง เพมเตม ขอมลของผ
อนโดยมชอบ6. (มาตรา 10) การรบกวนระบบคอมพวเตอรดวยการใชงานทไมปกต แลวทำใหระบบคอมพวเตอร
ไมสามารถทำงานไดตามปกต7. (มาตรา 11) การสงขอมลใหผอนโดยปกปดแหลงทมา และเปนการรบกวนการใชงานโดยปกตสข
ของผอน8. (มาตรา 13) การเผยแพรหรอจำหนายชดคำสงซงเปนเครองมอในการกระทำผด9. (มาตรา 12) โทษสถานหนกหากความผดตามมาตรา 9 หรอ 10 นน สรางความเสยหายแก
ประชาชน หรอความมนคงของประเทศ10. (มาตรา 14) การนำขอมลปลอม และขอมลทมเนอหาทไมเหมาะสมเขาสระบบคอมพวเตอร11. (มาตรา 15) การเปนผใหบรการทจงใจสนบสนนหรอยนยอมใหมการกระทำผด12. (มาตรา 16) การเผยแพรภาพตดตอ ดดแปลง ซงทำใหผอนเสยหาย
หมวดอนๆ ของพรบ. คอมพวเตอรฯ เปนเรองหนาทของผใหบรการ และอำนาจหนาทของเจาหนาท
9.3. การเขาถงระบบและขอมลคอมพวเตอร 115
9.3 การเขาถงระบบและขอมลคอมพวเตอรความเสยงหนงกบระบบและขอมลคอมพวเตอรคอการเขาถงโดยไมไดรบอนญาตหรอไมสมควร หากผประสงครายสามารถเขาถงระบบคอมพวเตอรได และไดสทธดำเนนการบางอยาง เชน ปดการทำงานบางอยางของระบบ ดดแปลงแกไขขอมล หรอสำเนาขอมลออกไป กอาจสรางความเสยหายใหองคกรได
ในระบบคอมพวเตอรจงมการจำแนกระดบของสทธ (authority) ในการเขาถงขอมลและทรพยากรตางๆ ของระบบ เชน ผใชบรการทวไปควรเขาถงขอมลของตนเองได มสทธใชโปรแกรมได แตไมมสทธเขาดขอมลของผใชอน และไมควรมสทธตดตงโปรแกรมเอง เพอจำกดความเสยหายทอาจเกดขนทงโดยจงใจและไมจงใจ ในขณะทผดแลระบบควรมสทธในการตดตงโปรแกรม ตามพรบ.คอมพวเตอรฯ การเขาถงระบบหรอขอมลเหลานโดยทตนไมมสทธเปนความผดตามมาตรา 5 หรอ 7 แลวแตกรณ
เนองจากจำเปนตองมมาตรการปองกนผใชไมใหเขาถงระบบหรอขอมลโดยทตนไมมสทธ จงตองมการแสดงตวตนของผเขาใชระบบวาเปนใคร (identification) และตรวจสอบวาเปนตวจรงหรอไม(authentication) แตถงแมระบบคอมพวเตอรจะมมาตรการปองกนแลวกตาม มาตรการปองกนเหลานกอาจจะยงมชองโหวอย ผดแลระบบควรตระหนกและหามาตรการเพมเตม สวนผประสงครายทใชชองโหวนในการบกรกเขาสระบบ หรอเขาถงขอมลทตนไมมสทธ กจะมความผดตามพรบ. คอมพวเตอรฯมาตรา 5 หรอ 7 และการเผยแพรมาตรการปองกนทผดแลระบบจดขนไวแกผอน เพอใหผประสงครายรายอนสามารถบกรกเขามาในระบบได เชน การเผยแพรชองโหวของระบบ กมความผดตามพรบ.คอมพวเตอรฯ มาตรา 6 ดวย
ลองคดเมอนสตพบชองโหวของระบบหรอซอฟตแวร นสตควรแจงใหผดแลรบผดชอบระบบหรอซอฟตแวรนนๆดำเนนการแกไข แตชองโหวบางประเภทนนอาจทำใหผใชถกขโมยขอมล หรอสรางความเสยหายกบตวผใชดวย นสตควรเตอนผใชรายอนๆ หรอไม วาซอฟตแวรหรอระบบเหลานมชองโหว หากเตอน ควรใชวธใด และการเตอนจะผดพรบ. คอมพวเตอรฯ วาดวยการเผยแพรชองโหวของระบบหรอไม
9.3.1 การแสดงตวตน (Identification)ในระบบซงมผใชหลายรายนน ผใชแตละรายตองมสงอางองแสดงวาตนเองเปนใคร หากเปนในชวตประจำวน สงระบตวตนของผใชอาจจะเปน ชอ-นามสกล ชอตำแหนง หากเปนในระบบคอมพวเตอรกอาจเปน ชอผใช บตรสมารตการด เปนตน
สงทสามารถระบตวตนของผใชไดนนตองไมซำกบผใชรายอน เพอใหระบบสามารถแยกแยะไดวาผเขาใชระบบนนเปนใคร ตวอยางในชวตประจำวนเชน ชอ-นามสกล นนยงมโอกาสทจะซำกนได ในระบบคอมพวเตอรจงมกสรางชอผใชขนมาใหม เพอใหยนยนไดวาจะไมซำกบชอเดมทมอยแลวแนนอน ในระบบซงมผใชจำนวนมาก การสรางชอผใชจำเปนตองมความยาวทมากพอ เพอใหรบประกนไดวาจะไมซำกบชอเดมทมอย
116 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
การแสดงตวตนเพยงอยางเดยวนนไมเพยงพอในการปองกนการเขาถงระบบและขอมลโดยไมไดรบอนญาต เนองจากสงระบตวตนบางอยางเปนทรบทราบโดยทวไป เชน ชอผใช หรอเลขประจำตว จงตองมระบบยนยนตวตนเพมขน เพอใหแนใจวาผทอางชอนนเปนตวจรงหรอไม
9.3.2 การยนยนตวตน (Authentication)หลกการการยนยนตวตนของผใชแบงออกเปน 3 แบบ ไดแก
1. การสอบถามถงสงทผใชตวจรงเทานนจงจะร เชน รหสผาน2. การขอดสงทผใชตวจรงเทานนทจะม เชน บตรประจำตวประชาชน คยการด3. การตรวจสอบลกษณะของตวผใช เชน ลกษณะเฉพาะบคคลจำพวกลายนวมอ หรอมานตา
วธการบางอยางเปนไดเพยงการระบตวตน แตไมเพยงพอทจะใชยนยนตวตนได เชน การระบชอผใชไดถกตอง แตวธการบางอยางกเปนไดทงการระบและการยนยนตวตน เชน การตรวจสอบลายนวมอ
การแสดงตวตนและยนยนตวตนใชรวมกนเพอยนยนสทธตางๆ ทพงมเมอเขาใชระบบ และเปนการปองกนไมใหผทไมมสทธสามารถเขาสระบบได
9.3.3 ชอผใชและรหสผาน
รปท 9.1: ตวอยาง CAPTCHA
เนองจากชอผใชนนไมไดเปนความลบ ชอผใชและรหสผานมกถกใชคกนในการแสดงตวตนและยนยนตวตน แตหากผประสงครายไดชอผใชไป สงทตองทำในการบกรกเขาสระบบคอพยายามหารหสผานมาใหได วธหนงในการหารหสผานคอทดลองสมไปเรอยๆ (brute force attack) หากรหสผานไมแขงแรงพอ เครองจะสามารถทดลองทละรหสจนครบไดในเวลาอนสน ระบบกจะมความเสยงตอการถกบกรก
ตวอยางของรหสผานทไมแขงแรงหรอไมปลอดภย ไดแก
• คำทวไปทมความหมายในพจนานกรม เพราะเราสามารถใหเครองคอมพวเตอรทดลองคำทละคำในพจนานกรมได
• ขอมลสวนตวของผใช เชน หมายเลขโทรศพท เลขทะเบยนรถยนต เพราะขอมลเหลานไมเปนความลบ
• รหสผานทมความยาวนอยจนเกนไป เนองจากคอมพวเตอรสามารถทดลองไดครบทกรปแบบทเปนไปไดในระยะเวลาอนสน
9.4. การรบกวนระบบและขอมลคอมพวเตอร 117
การปองกนการบกรกเขาสระบบโดยการเดาสมรหสผานนน ผดแลระบบตองมนโยบายบงคบใชรหสผานทแขงแรงพอสมควร ไมอนญาตใหเดาสมรหสผานในจำนวนครงทมากเกนปกต หรออาจใชระบบปองกนการใชคอมพวเตอรกรอกขอมลแทน เชน CAPTCHA (รปท 9.1) เปนตน
ในทางกลบกน การสรางรหสผานทดควรเปนรหสผานทใชคอมพวเตอรเดาสมไดยาก เชน ใชทงตวพมพเลก ตวพมพใหญ ตวเลขผสมกน และมความยาวมากพอ จำนวนรหสทเปนไปไดยอมมากกวาการใชรหสผานเปนตวอกษรพมพเลกเพยงอยางเดยว แตขอเสยของการใชรหสผานทซบซอนคอเจาของรหสผานกอาจจะจำรหสไมไดเชนเดยวกน แนวทางในปจจบนจงมกใชการยนยนตวตนสองชน (two-factorauthentication) เชน ใชรหสผานรวมกบ SMS ผานโทรศพทเคลอนท โดยมสมมตฐานวาผใชตวจรงตองรทงรหสผาน และมโทรศพทเคลอนททลงทะเบยนไวลวงหนาอยในครอบครอง กจะทำใหปองกนการสวมรอยไดดขน
ลองคดรหสเอทเอมในระบบเดมนนเปนเลขจำนวนสหลก หากการเดาสมโดยคอมพวเตอรใชเวลา 0.1 วนาทตอการเดาหนงครง เวลาทมากทสดทคอมพวเตอรตองใชในการเดารหสใหถกเปนเทาใด สมมตวาไมมมาตรการอนๆ ในการปองกนการเดาสมรหส
9.3.4 ประตหลง (Back door)การเขาสระบบโดยปกตจะตองผานการตรวจสอบตวตนของผใชทกครง แตบางระบบอาจจะมทางลบหรอทางลดขนตอนการตรวจสอบเหลานเพอเขาสระบบได เราเรยกชองทางนวาประตหลง
ชองทางนอาจเกดจากผประสงครายใชวธอนๆ เพอเขาสระบบไดแลว และวางประตหลงเอาไวเพออำนวยความสะดวกใหตนเองเมอตองการกลบเขามาในระบบอกครง และหลกเลยงการตรวจจบความผดปกตตางๆ ตามปกตทผดแลระบบอาจจะตงไว แตในบางกรณ ประตหลงกอาจจะเกดจากผพฒนาหรอผดแลระบบจงใจวางเอาไวเอง เพอจะไดไมตองเสยเวลาผานขนตอนตรวจสอบและยนยนตวตนของระบบเมอตองการเขามาทดสอบหรอบำรงรกษาระบบ การประมาทเลนเลอของผพฒนาหรอผดแลระบบเชนนกสรางความเสยหายใหกบองคกรได
9.4 การรบกวนระบบและขอมลคอมพวเตอรตวขอมลทเกบอยในคอมพวเตอรนนมมลคา เชน อาจเปนความลบทางธรกจ หรอขอมลสวนบคคล หากผประสงครายสามารถเขาถงขอมลเหลาน แลวนำไปดดแปลงแกไข หรอลบทงทำลาย กกอใหเกดความเสยหายกบเจาของขอมลได การกระทำเหลานเปนความผดตามพรบ. คอมพวเตอรฯ มาตรา 9
ตวระบบคอมพวเตอรเองนนถกออกแบบมาใหรองรบการใชงานตามปกตของผใช หากมการใชงานทไมปกต หรอการรบกวนระบบ ทำใหการใชงานตามปกตนนเสยไป เจาของระบบรวมถงผใชทวไปยอมเดอดรอน เชน หากระบบธนาคารไมสามารถใหบรการฝากถอนเงนได ทงธนาคารและลกคาของธนาคาร
118 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
ยอมเดอดรอน ผประสงครายจงอาจมงโจมตระบบคอมพวเตอรเพอใหระบบนนไมสามารถทำงานไดตามปกต การรบกวนนมความผดตามพรบ. คอมพวเตอรฯ มาตรา 10
9.4.1 มลแวรมลแวรเปนซอฟตแวรไมพงประสงค ซงทำสงทผใชไมไดตองการ และรบกวนการทำงานโดยปกตของคอมพวเตอร ผประสงครายใชมลแวรเพอวตถประสงคตางๆ กน เชน ลบแฟมขอมลสำคญๆ กอกวนการเชอมตอของขายงาน เพอไมใหระบบทำงานได เขารหสแฟมขอมลของผใช เพอไมใหผใชสามารถใชขอมลได หรอเกบขอมลตางๆ ของผใช เพอนำไปหาประโยชนในรปแบบอนในอนาคต
มลแวรสามารถจำแนกตามลกษณะการแพรกระจายได 3 รปแบบ ไดแก1. ไวรสคอมพวเตอร ไมสามารถแพรกระจายไดดวยตนเอง ผใชจำเปนตองเรยกใชแฟมขอมลทม
ไวรสอย ไวรสจงจะแพรกระจายไปยงบรเวณอนๆ หรอเครองอนๆ ได2. หนอนคอมพวเตอร แพรกระจายไดดวยตวเอง ผใชไมจำเปนตองเรยกใชแฟมขอมลทมไวรสอย3. โทรจน มลกษณะคลายโปรแกรมปกตทวไป หลอกใหผใชตดตง หรอเผยแพรตอ แตภายใน
ซอนชดคำสงหรอโปรแกรมทเปนอนตรายไว การแพรกระจายของโทรจนจงเกดจากการนำเขาหรอสงตอโดยตวผใชเอง
ลกษณะความเสยหายทเกดจากมลแวร หรอลกษณะตองสงสยทคาดวาจะมมลแวรในระบบ เชน• ระบบคอมพวเตอรโดยรวมทำงานไดชาลง มการรบสงขอมลในขายงานมากผดปกต มการเรยกใชอปกรณตอพวงสงมาก หนวยความจำเตมหรอไมเพยงพอตลอดเวลา เพราะทรพยากรตางๆ ของระบบคอมพวเตอรถกแบงไปใหมลแวรใชงาน
• แฟมขอมลหาย มแฟมขอมลแปลกๆ ปรากฏขนมา หรอไมสามารถเขาถงขอมลได เนองจากถกมลแวรไปแกไขขอมลตางๆ ในดสก
ปจจบนพบวามมลแวรเรยกคาไถ (ransomware) มากขน มลแวรเรยกคาไถจะเขารหสขอมลในดสกของเหยอ และเรยกคาไถเปนคาถอดรหส เปาหมายการโจมตของมลแวรเหลานกระจายไปทผใชทวไปมากขน ไมเจาะจงเฉพาะองคกรใหญดงในอดต
การปองกนมลแวรโดยทวไปทำไดโดยหลกเลยงการเปดแฟมขอมลหรอการตดตงซอฟตแวรซงไมทราบแหลงทมาทชดเจน หรอมแหลงทมาไมนาเชอถอ ปดการเรยกใชมาโครโดยอตโนมตในซอฟตแวรตดตงซอฟตแวรปองกนไวรสเพอชวยคดกรองแฟมขอมลทมลกษณะผดปกต รวมถงใชซอฟตแวรปองกนการบกรกจากขายงาน เชน ไฟรวอลล เนองจากมลแวรบางชนดสามารถแพรกระจายผานขายงานไดเองดวย
การรกษาอาการตดมลแวรนนอาศยซอฟตแวรปองกนไวรสชวยดำเนนการให ซอฟตแวรจะพยายามลบไฟลของมลแวรออก หรอแยกไฟลทมปญหาใหไปอยในเขตกกกน (quarantine zone) หากไมสามารถลบได เพอไมใหมลแวรรบกวนการทำงานตามปกตของเครอง แตหากซอฟตแวรปองกนไวรสไมสามารถกำจดมลแวรได กจำเปนจะตองลางระบบปฏการและขอมลทงหมดทงแลวเรมตนตดตงใหม ใน
9.4. การรบกวนระบบและขอมลคอมพวเตอร 119
กรณของมลแวรเรยกคาไถกเชนกน หากไมสามารถถอดรหสได กจำเปนตองลบขอมลทงหมดทง ดงนนจงควรสำรองขอมลไวเปนระยะๆ เพอบรรเทาความเสยหายทอาจจะเกดขนจากมลแวร
9.4.2 การโจมตเพอปฏเสธการใหบรการ (Denial of Service attack -DoS attack)
ระบบคอมพวเตอรนนจะถกออกแบบมาใหรองรบการใชงานตามปกต แตหากมผใชมากจนเกนไป ระบบกอาจไมสามารถตอบสนองกบผใชได ผประสงครายจะใชจดออนในนในการโจมตระบบโดยมวธการตางๆเชน
• การระดมสงขอมลปรมาณมากทไมเปนประโยชนเขาไปรบกวนการจราจรของขอมลบนขายงานทำใหชองการจราจรเตม การสงขอมลตามปกตทำไดชาหรออาจทำไมไดเลย และทำใหผใชงานตามปกตไมสามารถเขาใชระบบได
• การสงแฟมขอมลขนาดใหญหลายๆ แฟมไปวางไวในเนอทสวนกลางจนเนอทเตม ทำใหผใชอนๆไมสามารถเขาไปใชได
• การลบชอและขอมลของผใชออกจากระบบ ทำใหผใชไมสามารถเขาสระบบได
การรบกวนเหลานในบางรปแบบอาจจะไมไดมความพยายามในการบกรกเขาสระบบ หรอการแกไขดดแปลงทำลายขอมลใดๆ ในระบบเลย แตเปนการใชงานแบบไมปกตซงสงผลใหระบบคอมพวเตอรไมสามารถทำงานไดตามทควรจะเปน กนบเปนความผดตามพรบ. คอมพวเตอรฯ เชนกน
รปแบบการโจมตเพอปฏเสธการใหบรการซงเปนทนยมคอการโจมตผานขายงาน โดยใชเครองหลายๆ เครองรวมกนโจมตเปาหมาย (Distributed Denial of Service attack - DDoS attack)ผประสงครายมกจะอาศยเครองคอมพวเตอรอนๆ ซงมการปองกนออน หรอไมมการปองกนเปนเครองมอในการระดมโจมตเปาหมาย เรยกเครองทถกใชเปนเครองมอเหลานวา ซอมบ (zombie) โดยกลมของซอมบทใชในการระดมโจมตเหยอเรยกวา botnet การสรางซอมบทำไดโดยสงมลแวรเขาไปในเครองเปาหมาย ลกษณะทมกพบในเครองทเปนซอมบจงมการใชงานพนทเกบขอมลสงมาก การตดตอกบขายงานทำไดชามาก หรออปกรณตอพวงตางๆ ไมตอบสนองตอการใชงาน
มลแวรทมลกษณะการทำงานเปนการลบหรอดดแปลงแฟมขอมลในระบบ ทำใหระบบไมสามารถใหบรการตามปกตได กนบเปนการโจมตเพอปฏเสธการใหบรการเชนเดยวกน การปองกนในกรณทสาเหตเกดจากมลแวรนน จงเหมอนการปองกนมลแวรตามปกต
แตในกรณทการโจมตเกดผานขายงาน การปองกนสามารถทำไดในระดบขายงานดวย หลกการสำคญคอแยกขายงานภายในออกจากขายงานภายนอก แลวใชซอฟตแวรหรอระบบตางๆ กำกบดแลการรบสงขอมลระหวางขายงานภายในและภายนอก เชน ใชไฟรวอลล (firewall) เพอใชกรองการรบสงขอมล ใชแคช (cache) สำเนาขอมลทมการเรยกใชบอย เพอลดภาระของขายงานในการเรยกใชขอมลเดมจากภายนอกซำๆ
120 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
นอกจากการปองกนตวในกรณทอาจตกเปนเหยอจากการโจมตโดยตรงแลว ผดแลระบบควรปองกนไมใหเครองในระบบของตนถกใชเปนซอมบเพอไปโจมตระบบอนๆ ดวยเชนกน วธปองกนเปนวธเดยวเดยวกบการปองกนมลแวร
การจดการเมอถกโจมตนน กรณทสามารถระบทมาของผประสงครายได เชน ระบชอผใชทสรางปญหา หรอระบเลขทอยไอพททำการโจมตได ผดแลระบบควรตดสทธการใชงาน หรอตดการเชอมตอของผประสงครายออกไปกอน แตในกรณของการโจมตแบบ DDoS นนจำนวนเครองทระดมโจมตอาจมมากเกนกวาจะตดการเชอมตอไดหมด แนวทางทแนะนำใหผดแลระบบใชในการรบมอจงเปนตดเครองทถกโจมตออกไปจากระบบกอน เพอปองกนไมใหเครองอนๆ ในระบบไดรบผลกระทบตามไปดวย อยางไรกตาม วธนกจะทำใหผใชตามปกตใชงานไมไดเชนเดยวกน นอกจากน ผดแลระบบควรเกบบนทกการเชอมตอและบนทกการใชงาน (log) ของผใชไวดวย เพอใชในการตรวจพสจนหาตวผประสงครายตอไป
ลองคดวนแรกของการเปดภาคการศกษาของทกภาคเรยนนนนสตจำนวนมากจะพยายามเขาสระบบลงทะเบยนเพอลงทะเบยนวชาเลอก จงทำใหระบบลงทะเบยนของมหาวทยาลยชา หรอใชการไมได การเขาสระบบลงทะเบยนของนสตพรอมกนจำนวนมากๆ น นบเปนการรวมกนโจมตระบบลงทะเบยนหรอไม เพราะเหตใด
9.5 การดกรบขอมลในระบบคอมพวเตอรทวไปนน ฮารดแวร หรอซอฟตแวร อาจหามาเปลยนทดแทนกรณสญหายหรอเสยหายได แตขอมลนนเปนของเฉพาะองคกร หากสญหายหรอเสยหายกหามาทดแทนไดยาก นอกจากนหากขอมลถกขโมยกอาจสรางความเสยหายทางออมใหกบองคกรได เชน ขอมลผลตภณฑใหมของบรษทถกคแขงขโมยไปทำใหบรษทเสยเปรยบในการแขงขน การลกลอบทำสำเนากนบเปนการขโมยขอมลเชนกน การขโมยขอมลมกเกดรวมกบการบกรกเขาสระบบเขามานำขอมลออกไป และอาจเกดระหวางการรบสงขอมลกบขายงานอนๆ กได
9.5.1 ลกษณะการรบสงขอมลในระบบขายงานการสงขอมลในขายงานอนเทอรเนตนนเปนการแบงปนเสนทางการสอสารรวมกนหลายๆ เครอง โดยเครองทอยระหวางเสนทางจะทำหนาทสงตอขอมลไปใหถงปลายทาง การระบเสนทางหรอเลอกเสนทางในการสงขอมลนนจะทำใหประสทธภาพโดยรวมในการสงขอมลลดลง เนองจากไมไดใชชองทางในการสอสารอยางเตมท ถงแมวาขอมลจะถกสงไปในหลายเสนทางกตาม ขายงานเฉพาะทแตละแหงจะมเกตเวยเปนประตหลกของขอมลตางๆ ทไหลเขาออกขายงาน หากสามารถดกฟงทเครองเหลาน กจะไดขอมลทงหมดทไหลเขาออกระบบ
9.5. การดกรบขอมล 121
A B1 B: Public
+2 B: Public
3B: Public
B: Public+B: Private4
รปท 9.2: การเขารหสดวยกญแจอสมมาตร
เนองจากเราไมสามารถปองกนการไหลของขอมลผานตวกลางได แนวทางปองกนการรวไหลของขอมลจงเปนการเขารหสขอมล เพอไมใหผทดกรบขอมลอยสามารถตความขอมลทดกไปได
9.5.2 การเขารหสดวยกญแจสมมาตรการเขารหสนนจะประกอบดวย ขอมลตงตน (plain text) และกญแจสำหรบเขาและถอดรหส (key)การเขารหสโดยใชกญแจสมมาตรจะมกญแจทใชในการเขาและถอดรหสเปนดอกเดยวกน โดยผสงขอมลจะเขารหสดวยกญแจดอกหนง สงขอมลทเขารหสแลวใหผรบ และสงกญแจดวยชองทางลบใหผรบ จากนนผรบจงถอดรหสขอมลดวยกญแจทไดรบมา
จะเหนไดวาวธนกญแจตองเปนความลบ ถงแมตวขอมลจะเขารหสแลว หากกญแจรวไหลกยงทำใหขอมลรวไหลได การหาวธสงกญแจใหปลอดภยจงเปนปจจยหลกในการใชกญแจแบบสมมาตรเพอการเขารหสขอมล ปจจบนยงมการเขารหสดวยกญแจสมมาตรอยทวไป เชน การเขารหสแบบ WPA2 ในขายงานไวไฟ การเขารหสแบบ 3DES สำหรบเครองจายเงนอเลกทรอนกส โพรโทคอล TLS/SSL ซงเปนการเขารหสสำหรบการรบสงขอมลในเวบไซต เปนตน
9.5.3 การเขารหสดวยกญแจอสมมาตรจากปญหาของการสงกญแจในกรณของกญแจสมมาตร จงมวธพฒนาการเขารหสอกรปแบบหนง ซงแยกกญแจสำหรบเขาและถอดรหสออกจากกน วธนเรยกวา การเขารหสโดยใชกญแจอสมมาตร
การใชกญแจอสมมาตรแตละครงจะมกญแจหนงค เปนกญแจสาธารณะ (public key) และกญแจสวนบคคล (private key) ผใชแตละรายจะมคกญแจเปนของตนเอง โดยกญแจสาธารณะจะแจกจายโดยเปดเผยใหผอนใชได แตกญแจสวนบคคลนนเปนความลบ ในการรบสงขอมล ผรบขอมลตองสง
122 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
กญแจสาธารณะของตนเองมาใหผสงขอมลกอน ผสงขอมลจะใชกญแจสาธารณะของผรบขอมลเขารหสแลวสงขอมลซงเขารหสแลวใหผรบขอมล การถอดรหสจะใชกญแจสวนบคคลของผรบขอมล ดงรปท 9.2ดงนนแมขอมลทเขารหสแลวจะหลดไปยงผประสงคราย กยงไมสามารถถอดรหสไดเพราะไมมกญแจเพอถอดรหส
นอกจากน การเขารหสแบบกญแจอสมมาตรอาจใชเปนวธในการรบสงกญแจสมมาตร เพอใหการรบสงกญแจเปนไปโดยลบ และสามารถใชกญแจสมมาตรในการตดตอครงตอๆ ไปได
ลองคดเมอใชคกญแจสาธารณะและกญแจสวนบคคลในการสงขอมลทเปนความลบ เราสามารถใชคกญแจของผสงขอมลในการเขาและถอดรหสไดหรอไม จงใหเหตผลประกอบ
9.6 การปลอมแปลงตวตน และการสงขอมลรบกวนผอน9.6.1 Spoofing และ phishingSpoofing คอการปลอมแปลงขอมลแสดงตวตนบางอยางเพอหลอกใหผใชเขาใจผดวาการรบสงขอมลนนกระทำกบผอนซงเชอถอได ไมใชตวผประสงคราย ตวอยางของ spoofing เชน
• การปลอมแปลงอเมลวามาจากธนาคาร• การปลอมแปลงหมายเลขไอพเพอหลอกระบบคอมพวเตอรวามาจากแหลงทเชอถอได• การปลอมแปลงตำแหนงทอยในระบบ GPS ของตนเพอหลอกระบบคอมพวเตอรวาอยในพกดทกำหนด
การปลอมแปลงตวตนนบเปนความผดฐานนำเขาขอมลปลอมเขาสระบบคอมพวเตอร ตามมาตรา 9 ในพรบ. คอมพวเตอรฯ
Phishing เปนการปลอมแปลงหนาเวบไซตใหเหมอนกบเวบไซตจรงเพอหลอกใหเหยอเขามากรอกขอมลในเวบไซต ลกษณะเวบไซตทมกเปนเปาหมายของ phishing คอ เวบไซตธนาคาร บรการจดหมายอเลกทรอนกส และบรการขายงานสงคมตางๆ ผประสงครายจะไดขอมลชอผใชและรหสผานของเหยอเพอนำไปใชกบเวบไซตจรงตอไป
ผใชสามารถระมดระวงตนเองไมใหเปนเหยอของ phishing ไดดวยการพมพ URL ของเวบไซตทตองการเขาดวยตนเองทกครง ไมกดลงกเพอเขาสเวบไซต และตรวจสอบความถกตองของ URL กอนจะกรอกขอมลตางๆ เสมอ สวนฝงเจาของเวบไซตสามารถรบรองตนเองไดโดยใชใบรบรองดจทล
9.6.2 ลายมอชอดจทล (Digital signature)การแสดงตวตนและยนยนตวตนนนสามารถใชตรวจสอบผทเขาใชระบบไดดวยวธการตางๆ ของระบบแตการยนยนตวตนบางรปแบบซงตองใชขอมลจำเพาะของตวผใชนน อาจไมเหมาะสมหากตองการสง
9.6. การปลอมแปลงตวตน และการสงขอมลรบกวนผอน 123
รปท 9.3: ตวอยางใบรบรองดจทล
ขอมลไปมาระหวางผใช และผใชตองใชขอมลจำเพาะเหลานในการยนยนตวตนของคสนทนาเมอเรมสนทนา
วธการหนงซงเปนทนยมคอใชการลงลายมอชอดจทล โดยใชคกญแจสวนบคคลและกญแจสาธารณะของผสงขอมล เมอมการสงขอมลตางๆ ผสงขอมลจะลงลายมอชอดวยกญแจสวนตวของตนเอง ผรบขอมลสามารถตรวจสอบตวตนของผสงขอมลไดโดยถอดรหสลายมอชอนนดวยกญแจสาธารณะของผสงหากตรงกนกแสดงวาผสงนนเปนตวจรง
หลกการลงลายมอชอดจทลใชยนยนตวตนไดเพราะเราถอหลกการวาผสงขอมลเทานนทมกญแจสวนบคคลของตนเอง ผอนจะไมมกญแจนอย ทำใหสามารถยนยนไดวาผสงเปนตวจรง
9.6.3 ใบรบรองดจทล (Digital certificate)ปญหาของการใชคกญแจสวนบคคลและกญแจสาธารณะคอไมวาใครกสามารถสรางคกญแจนขนมาไดเรอยๆ และไมสามารถยนยนไดวากญแจสาธารณะทแจกจายอยเปนของหนวยงานหรอบคคลทกลาวอางจรงหรอไม จงเกดหนวยงานเพอรบรองกญแจสาธารณะขน (certificate authority) ในใบรบรองจะระบชอองคกรหรอบคคลผถกรบรอง ชอผรบรอง เวลาหมดอายของใบรบรอง และกญแจสาธารณะทถกรบรอง บรการทสำคญเชน ธนาคาร ลวนใชบรการใบรบรองดจทลในการรบสงขอมลทงสน เชนในรปท 9.3 ฝงซายแสดงชอองคกรทถกรบรองเปน www.scbeasy.com ซงเปนบรการธนาคารอเลกทรอนกสของธนาคารไทยพาณชย ใบรบรองออกโดย Entrust Certification Authority มอายตงแต 29 พฤษภาคม 2012 ถง 9 มถนายน 2013 และฝงขวาแสดงขอมลกญแจสาธารณะทไดรบการ
124 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
รบรอง
9.6.4 สแปม (Spam)สแปม คอ การสงขอความ หรอตวขอความทผรบไมตองการผานทางจดหมายอเลกทรอนกสและจะสงหาผใชพรอมกนคราวละหลายคน ขอความในจดหมายอาจเปนการโฆษณาขายสนคาหรอบรการประชาสมพนธงานหรอโอกาสในการทำธรกจ สแปมจดเปนจดหมายขยะประเภทหนงซงทำใหผรบเกดความไมพอใจและตองเสยเวลาในการลบจดหมายทง นอกจากนนแลวยงเปนการทำใหประสทธภาพในการขนสงขอมลในอนเทอรเนตลดลงดวย การสงสแปมเปนการรบกวนการใชงานของผอน นบเปนความผดตามพรบ. คอมพวเตอรฯ มาตรา 11
ผใชสามารถลดจำนวนของสแปมไดโดยใชโปรแกรมรบสงอเมลทใหผใชกำหนดวาใหลบสแปมทงทนทอยางอตโนมต หรอใชการกรองอเมล (e-mail filtering) ซงคอบรการทชวยกรองอเมลจากแหลงทกำหนดไวหรอจากคำสำคญทผใชกำหนด ตวกรองจะเกบสแปมไวในทเกบสะสมสแปม โดยผใชงานสามารถเปดดขอมลได หรออาจใชโปรแกรมปองกนสแปม (anti-spam) ซงจะพยายามลบสแปมทงกอนทจะสงเขากลองจดหมายเขา (inbox) ของผใช แตขอเสยของการกรองอเมลและโปรแกรมปองกนสแปม คอ บางครงกอาจกรองหรอลบอเมลทไมใชสแปม ดงนนหากใชตวกรองอเมล ผใชควรตรวจดในทเกบสแปมวามอเมลทตองการปนอยในนนหรอไม
ลองคดเราจะเชอมนไดอยางไรวาผออกใบรบรอง (certificate authority) นน นาเชอถอ
9.7 ทรพยสนทางปญญาทรพยสนทางปญญาแบงออกเปน 2 ประเภท ไดแก
1. ทรพยสนทางอตสาหกรรม ซงมประเภทยอยๆ ทสำคญ เชน สทธบตร อนสทธบตร เครองหมายทางการคา ความลบทางการคา
2. ลขสทธ
ซอฟตแวรคอมพวเตอรนนเปนทรพยสนทางปญญาในกลมลขสทธ และไดรบความคมครองตามพระราชบญญตลขสทธ พ.ศ. 2537 โดยจะคมครองในสวนของรหสตนฉบบ (source code) ซงจะทำใหความคมครองทนทโดยไมตองนำไปจดทะเบยนกอน นอกจากน รหสตนฉบบยงไดรบความคมครองในหมวดความลบทางการคาดวย อยางไรกตาม กฎหมายในประเทศไทยยงไมใหความคมครองแนวความคดและขนตอนวธในการทำงาน ซงในบางประเทศ เชน สหรฐอเมรกา จะใหความคมครองขนตอนวธในหมวดสทธบตร สำหรบในประเทศไทยนน หากมผลอกเลยนแนวคดการทำงานแตไปเขยนรหสตนฉบบเอง จะไมผดกฎหมาย
9.8. จรยธรรมคอมพวเตอร 125
พรบ. ลขสทธใหสทธขาดกบผสรางสรรคในการทำซำ ดดแปลง และเผยแพร ซงหากเปนซอฟตแวร ผสรางสรรคคอผเขยนรหสตนฉบบ ผสรางสรรคสามารถขายหรอยกสทธนใหกบผอนได ไมวาจะเปนการยกใหบางสวน หรอใหทงหมด หรอใหแบบจำกดเวลา ขนกบการทำสญญาตกลงกน
ซอฟตแวรและคลงโปรแกรมจำนวนมากในทองตลาดมสญญาอนญาตใหใชงานไดโดยไมมคาใชจายแตผใชพงอานสญญาอนญาตกอนทกครง เนองจากสญญาแตละฉบบมขอจำกดตางกน สญญาอนญาตทนาสนใจ เชน
• GPL (GNU General Public License) อนญาตใหนำซอฟตแวรไปใช จายแจก หรอดดแปลงได โดยมขอกำหนดวายงตองใชสญญาอนญาตแบบเดม
• BSD (Berkeley Software Distribution) อนญาตเชนเดยวกบ GPL แตไมจำเปนตองใชสญญาอนญาตแบบเดม เพยงแคตองแสดงขอความสญญาอนญาตเดมเอาไว
จะเหนวา หากตองการนำซอฟตแวรหรอคลงโปรแกรมไปดดแปลงเพอใชในซอฟตแวรเพอการคาทจำเปนตองปกปดรหสตนฉบบ จะไมสามารถใชซอฟตแวรหรอคลงโปรแกรมทใชสญญาอนญาตแบบ GPL ไดนอกจากน สญญาอนญาตสำหรบคลงโปรแกรมทพฒนาโดยสถานศกษามกจะระบวาใหใชไดโดยไมมคาใชจายเพอการศกษาเทานน หากตองการใชเพอการคา ตองตดตอเพอจายคาลขสทธ เปนตน
ลองคดหากนสตซอซอฟตแวรหนงชด แลวแบงกบเพอนใชหลายๆ คน นสตละเมดลขสทธของผผลตซอฟตแวรหรอไม จงใหเหตผลประกอบ
9.8 จรยธรรมคอมพวเตอรแนวทางในการตดสนใจทำเรองตางๆ นน เราจะเลอกทำในสงทถก จรยธรรม หรอจรยศาสตร เปนแขนงหนงของวชาปรชญา เปนแนวทางทใชในการตดสนถกผด นกปรชญาสำนกตางๆ ไดเสนอแนวทางในการตดสนถกผดนไวหลากหลายแนว และไมมแนวทางไหนทถกตองทสด ดงนน ในทางจรยศาสตรแลว เรองหนงอาจเปนไดทงถกและผดขนกบเกณฑในการตดสนใจ หลกคดทนาสนใจมดงน
• จรยศาสตรเชงคณธรรม นกปรชญากรกโบราณ เชน โสกราตส อรสโตเตล เพลโต เชอวาสงทดนนดในตวมนเอง ไมตองอธบายโดยเชอมโยงหรอเกยวของกบบรบทอนๆ เชน หากการชวยเหลอคนเปนสงทด กไมจำเปนตองใหเหตผลอนๆ เพอใหนำหนกสนบสนนวาการชวยเหลอคนเปนสงทดอก
• แนวทางการพจารณาถกผดจากผลของการกระทำ เชน หลกประโยชนนยม (utilitarianism)ตดสนวาการกระทำนนถกตองหากใหประโยชนสงสด จากตวอยางการชวยเหลอคนนน หากการชวยเหลอคนจะทำใหสงคมโดยรวมสงบสขแลว การชวยเหลอคนยอมเปนสงทถกตองและควรกระทำตามหลกประโยชนนยม
126 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร
• แนวทางการพจารณาถกผดจากการกระทำนนโดยไมคำนงถงผล เชน อมมานเอล คานต เสนอวาสงทถกตองนนตองไมขนกบเวลา สถานท และบคคล และการกระทำทดนนเปนจดหมายในตวมนเอง ไมไดเปนทางผานไปสเปาหมายอน เชน หากการชวยเหลอคนเปนสงทด เราตองชวยเหลอทกคนไมวาคนนนจะเปนคนดหรอไมด แตหากการชวยเหลอคนนนตองทำไปเพอใหคนพนจากความเดอดรอน เราไมสามารถบอกไดวาการชวยเหลอคนเปนสงทด
จรยศาสตรเรมเขามาเกยวของกบคอมพวเตอรเมอคอมพวเตอรเรมมบทบาทกบชวตมนษย เครองคอมพวเตอรนนตดสนใจตามกฎทมนษยตงให แตเครองไมสามารถตดสนใจเลอกทำสงทถกผดตามหลกจรยศาสตรได จงตองมหลกจรยธรรมสำหรบผใชและผควบคมคอมพวเตอรขน
ตวอยางเชน ผดแลระบบนนมสทธในการด ดดแปลง ลบ ขอมลของผใช แตผดแลระบบควรใชสทธเหลานหรอไม และใชเมอใดไดบาง ในอดตนนยงไมมกฎหมายเขามาควบคมการใชงานคอมพวเตอร หลกจรยศาสตรจะเขามาชวยในการตดสนใจการกระทำตางๆ ของผใชคอมพวเตอรได
ปจจบนประเทศไทยม พรบ. คอมพวเตอรฯ เขามาควบคมการใชคอมพวเตอรบางแลว แตกยงมกรณทยงไมครอบคลมอย เชน ความเปนสวนตวของผใชระบบคอมพวเตอร การใชคอมพวเตอรเปนเครองมอในการกลนแกลงกน การพฒนาซอฟตแวรทหละหลวมแลวมชองโหวรายแรงสรางความเดอดรอนใหผใชเปนตน
9.9 ความเปนสวนตวของขอมลสารสนเทศปจจบนมบรการในอนเทอรเนตมากมายทไมคดคาใชจาย เชน บรการคนหาเวบไซต บรการรบฝากแฟมขอมล บรการกลองจดหมายอเลกทรอนกส บรการจองรานอาหาร บรการแนะนำเสนทาง ซงผใหบรการจะเกบขอมลสวนบคคลบางประการของผใชไป และนำไปหาประโยชนจากการโฆษณาเปนการตอบแทนขอมลบางประการของผใชนนเปนขอมลทออนไหว เชน ทอย หมายเลขโทรศพท ซงหากหลดไปอยในมอผประสงคราย กอาจนำไปสการปลอมตวเปนผใชได ขอมลตำแหนงทอย การเดนทาง กสามารถทำใหผประสงครายตดตามตวเหยอไดงายเชนเดยวกน
แนวทางปฏบตโดยทวไปในการเกบขอมลของผอนนนตองมการขออนญาตกอนเสมอ และมขอตกลงทชดเจนวาจะนำขอมลไปใชทำอะไรบาง บางครงบรษทผใหบรการอาจไมมเจตนารายในการเกบขอมลของลกคา แตบรษทมภาระหนาทโดยตรงทจะตองเกบขอมลของลกคาไวอยางด ไมใหรวไหล และสรางความเดอดรอนใหลกคาได โดยเฉพาะอยางยงหากเปนธรกรรมการเงนตางๆ
แนวทางการปกปองความเปนสวนตวของตวผใชเองนน ควรระมดระวงการเผยแพรขอมลทออนไหวในอนเทอรเนต โดยเฉพาะอยางยงในกลมสาธารณะ พจารณาสญญาขอตกลงใหถถวนกอนสมครบรการตางๆ และเลอกใชงานเฉพาะบรการทนาไวใจ
9.9. ความเปนสวนตวของขอมลสารสนเทศ 127
แบบฝกหด1. หากนสตเขยนซอฟตแวรชวยในการลงทะเบยน ดวยการใหซอฟตแวรวนซำตรวจสอบทวางในวชา
ทตองการไปเรอยๆ จนกวาจะวาง และลงทะเบยนวชานนใหนสต นสตจะมความผดตามพรบ.คอมพวเตอรฯ ในกรณใดหรอไม จงใหเหตผลประกอบ
2. นสตคดวาการกระทำตอไปนถกตองหรอไม“ลอกขอสอบกไมเปนไร ขอใหไดความรกพอ”
อธบายเหตผลและหลกคดประกอบดวย
ภาคผนวก Aแบบฝกหด
A.1 Checksumchecksum เปนการคำนวณคาเพอตรวจสอบความถกตองของขอมล โดยมาก checksum จะเปนการเตมเลข 1 หลกตอทายคาทตองการ หากผใชปอนขอมลผดพลาด คา checksum ทคำนวณไดจะเปลยนไป ทำใหตรวจสอบในเบองตนไดวาการปอนขอมลถกตองหรอไม
A.1.1 เลขประจำตวประชาชนการคำนวณ checksum ในเลขประจำตวประชาชน เมอเลขหลกแรกอยซายสด เปนดงน
1. นำเลขแตละหลกมาคณกบเลขประจำหลก (หลกท 13 ถงหลกท 2)2. หาผลบวกของจำนวนในขอ 1 (12 จำนวน)3. นำผลลพธในขอ 2 หารดวย 11 เกบคาเศษเหลอเฉพาะหลกหนวยเอาไว4. หาผลตางของ 11 กบเศษเหลอทไดในขอ 35. นำหลกหนวยของผลลพธในขอ 4 มาเปนเลขหลกสดทาย (หลกท 1) ของเลขประจำตวประชาชน
จงเขยนโปรแกรมภาษาซเพอหาคา checksum เมอผใชปอนเลขประจำตวประชาชน (13 หลก) เขามาใหระบบ เชน 3 7 9 5 3 5 7 2 4 9 0 5 7 จะม checksum เปน 7
130 ภาคผนวก A. แบบฝกหด
คำตอบ
1 #include <stdio.h>2 #include <stdlib.h>34 int main()5 {6 // variable declaraion7 int d13, d12, d11, d10, d9, d8 ,d7, d6, d5, d4, d3,
d2, d1;89 // read input10 scanf(”%d %d %d %d %d %d %d %d %d %d %d %d %d”,11 &d13, &d12, &d11, &d10, &d9, &d8, &d7, &d6, &d5,
&d4, &d3, &d2, &d1);1213 printf(”%d\n”, 11 - (d13 * 13 + d12 * 12 + d11 * 11
+ d10 * 10 + d9 * 9 + d8 * 814 + d7 * 7 + d6 * 6 + d5 * 5 + d4 * 4 + d3 * 3 + d2 *
2) % 11 % 10);1516 return 0;17 }
รหสคำสงท A.1: โปรแกรมคำนวณ checksum ของเลขประจำตวประชาชน
A.1. CHECKSUM 131
A.1.2 เลขประจำตวนสตเลขประจำตวนสต 10 หลกมความหมายดงน
• สองหลกแรกเปนปการศกษาทเขา• หลกท 3เปนระดบการศกษา• หลกท 4 - 7 เปนเลขลำดบ• หลกท 8 เปน checksum• สองหลกสดทายเปนรหสคณะ
การคำนวณ checksum ของเลขประจำตวนสตทำไดดงน
1. หารเลขปการศกษาดวยสบ นำผลหารจำนวนเตมไปคณดวยสาม แลวบวกกบเศษเหลอจากการหาร
2. คณเลขระดบการศกษาดวย 73. คณเลขหลกท 4 ดวย 24. คณเลขหลกท 5 ดวย 15. คณเลขหลกท 6 ดวย 36. คณเลขหลกท 7 ดวย 77. หาผลบวกของขอ 1-6 หารดวย 11 แลวนำเลขหลกหนวยของผลลพธมาเปน checksum
จงเขยนโปรแกรมภาษาซรบเลขประจำตวนสต 10 หลก แลวตรวจสอบวาการปอนขอมลถกตองหรอไมโดยตรวจคา checksum
132 ภาคผนวก A. แบบฝกหด
คำตอบ
1 #include <stdio.h>2 #include <stdlib.h>34 int main()5 {6 // variable declaraion7 int d10, d9, d8 ,d7, d6, d5, d4, d3, d2, d1;8 int year, item1, item2, item3, item4, item5, item6;9 int checksum;1011 // read input12 scanf(”%d %d %d %d %d %d %d %d %d %d”,13 &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &
d10);1415 year = d1 * 10 + d2;16 item1 = year / 10 * 3 + year % 10; // Item 11718 item2 = d3 * 7; // Item 219 item3 = d4 * 2; // Item 320 item4 = d5 * 1; // Item 421 item5 = d6 * 3; // Item 522 item6 = d7 * 7; // Item 62324 checksum = (item1 + item2 + item3 + item4 + item5 +
item6) % 11 % 10;2526 printf(”%d %d\n”, checksum, d8);2728 return 0;29 }
รหสคำสงท A.2: โปรแกรมคำนวณ checksum ของเลขประจำตวนสต
A.2. ภาษและเงนเดอน 133
A.2 ภาษและเงนเดอนA.2.1 ภาษเงนไดอตราภาษเงนไดบคคลธรรมดา เมอไดยอดเงนไดสทธแลว นำไปคำนวณภาษตามอตราภาษ ดงน
ตารางท A.1: อตราภาษเงนไดบคคลธรรมดา
เงนไดสทธ อตราภาษรอยละ1 – 150,000 บาท 0
150,001 – 300,000 บาท 5300,001 – 500,000 บาท 10500,001 – 750,000 บาท 15750,001 – 1,000,000 บาท 201,000,001 – 2,000,000 บาท 252,000,001 – 4,000,000 บาท 30
4,000,001 บาทขนไป 35
จงเขยนผงงานเพอรบคาเงนไดสทธ แลวคำนวณเงนภาษทตองจาย
A.2.2 เงนหกรายเดอนหนวยงานสวนมากจะมการหกภาษ ณ ทจายเมอจะจายเงนเดอนพนกงาน โดยคำนวณเงนไดสทธคราว ๆจากเงนไดพงประเมน ซงคดจากเงนเดอนของพนกงานตลอดป แลวหกคาลดหยอนและคายกเวนเบองตนดงรายการตอไปน
• ลดหยอนสวนบคคล 30,000 บาท• คาใชจายสวนตวรอยละ 40 ของเงนไดพงประเมน แตไมเกน 60,000 บาท• เงนประกนสงคม หกลดหยอนตามจรงแตไมเกน 9,000 บาท อตราจายเขากองทนประกนสงคมคอรอยละ 5 ของเงนเดอน แตไมเกน 750 บาทตอเดอน
• เงนกองทนสำรองเลยงชพ หกลดหยอนตามจรงไดไมเกนรอยละ 15 ของเงนไดพงประเมน หรอไมเกน 500,000 บาท สมมตใหอตราจายเขากองทนสำรองเลยงชพคอรอยละ 3 ของเงนเดอน
หากใหเงนไดพงประเมนของพนกงานเปนเงนเดอนเทานน เมอปอนขอมลเขาเปนเงนเดอนของพนกงานและสมมตวาพนกงานไดเงนเดอนเทาเดมทกเดอนตลอดป จงเขยนผงงานและโปรแกรมภาษาซเพอคำนวณเงนไดสทธตอปเบองตนของพนกงานคนนแลวแสดงผล
134 ภาคผนวก A. แบบฝกหด
A.2.3 ภาษ ณ ทจายหนวยงานตางๆ ทจายคาจางมหนาทหกภาษ ณ ทจายเพอนำสงสรรพากร ในกรณของการจายเงนเดอนหนวยงานมกจะคำนวณคาลดหยอนตางๆ และคำนวณภาษใหพนกงาน แลวแบงภาษทตองจายของทงปออกเปน 12 สวน เพอหกรายเดอนแทน จงคำนวณเงนเดอนสทธของพนกงานทจะไดเมอหกเงนประกนสงคม เงนกองทนสำรองเลยงชพ และภาษ ณ ทจายไปแลว
A.3. สามเหลยมปาสกาล 135
A.3 สามเหลยมปาสกาลจงเขยนโปรแกรมภาษาซเพอพมพตวเลขในสามเหลยมปาสกาล ใหผใชเปนผปอนจำนวนแถวทตองการซงไมเกน 15 และใหผลลพธมลกษณะดงน
1 Input: 52 13 1 14 1 2 15 1 3 3 16 1 4 6 4 17 Input: 88 19 1 110 1 2 111 1 3 3 112 1 4 6 4 113 1 5 10 10 5 114 1 6 15 20 15 6 115 1 7 21 35 35 21 7 1
A.3.1 วเคราะหการทำงานการพมพตวเลขในสามเหลยมปาสกาลเปนการทำซำ โดยงานทตองทำซำแบงยอยออกเปน 2 สวน ไดแก
1. การพมพชองวางนำหนาเพอใหออกมาเปนสามเหลยมหนาจว2. การพมพคาตวเลขในสามเหลยมปาสกาล
สวนเงอนไขในการทำซำ คอจำนวนบรรทดในการพมพ ซงเทากบจำนวนแถวทผใชปอน จงมตวแปร lineเพอเกบจำนวนแถว ดงน
ชอตวแปร ชนด คำอธบายline int เลขแถวทพมพn int จำนวนแถวทพมพ
และเขยนเปนโครงของผงงานไดดงน
136 ภาคผนวก A. แบบฝกหด
START
line = 1
line <= n
1 พมพชองวางนำหนา
2 พมพคาตวเลข
line = line+1
STOPT
F
ตวเลขนนมทงหลกเดยว สองหลก และสามหลก เพอความสะดวกในการนบชองวาง จงมองการพมพตวเลขเปน block และการพมพบรรทดคอการพมพบลอกวางตอๆ กน โดยใหทกบลอกกวางเทากน ไมวาจะเปนบลอกของตวเลขหรอชองวาง
n/2
line/2
จากการสงเกต เมอพมพตวเลขจำนวน 5 บรรทด จะพบวา จำนวนบลอกในแตละบรรทดเปนดงน
A.3. สามเหลยมปาสกาล 137
บรรทดท บลอกชองวาง บลอกตวเลข1 2 12 1.5 23 1 34 0.5 45 0 5n n/2-line/2 line
ดงนน ในงานยอยการพมพชองวางกอนตวเลข จงเปนการวนซำเพอพมพชองวางเปนจำนวนn/2-line/2 บลอก
ปญหาถดมาคอความกวางของบลอก เนองจากบลอกหนงจะบรรจตวเลขเอาไว รวมถงการเคาะวรรคเพอความสวยงามระหวางตวเลขดวย นอกจากน ความกวางของบลอกควรเปนเลขค เนองจากเมอพมพชองวาง บางครงเราตองพมพชองวางขนาดครงบลอก จากการคำนวณ เลขสงสดทเปนไปไดสำหรบสามเหลยมปาสกาลทจำนวนบรรทดไมเกน 15 คอ 4 หลก เมอนบชองวางหนาและหลงอยางละชองแลวจะไดความยาวบลอกรวม 6 อกขระ (␣dddd␣)
จากนน จงคำนวณจำนวนชองวางจรงๆ ทตองพมพจำนวน ชอง ซงหาไดจาก
nc = (n2 − line
2 ) ∗ blockSize
เมอ n เปนจำนวนบรรทด line เปนเลขบรรทด และ blockSize เปนความยาวบลอกซงในทนคอ 6อกขระ
สวนของผงงาน
1 พมพชองวางนำหนา
จงแยกออกมาเขยนไดเปน
138 ภาคผนวก A. แบบฝกหด
nc = (n/2-line/2) * blockSize
c = 0
c < nc
print ‘␣’
c = c+1
T
F
สวนถดมาเปนการพมพตวเลขในสามเหลยมปาสกาล จากการสงเกต เมอกำหนดใหตวเลขในแตละบรรทดเกบในแถวลำดบ จะพบวาคาในแตละชองของสามเหลยมมความสมพนธเปนดงน
1. ชองแรกสดของทกบรรทดเปน 1 เสมอcur[0] = 1
2. ชองสดทายของทกบรรทดเปน 1 เสมอcur[line-1] = 1
3. หาก cur แทนแถวลำดบของจำนวนในบรรทดปจจบน และ prev แทนแถวลำดบของจำนวนในบรรทดกอนหนา ให i แทนดชนของชองปจจบน
cur[i] = prev[i-1] + prev[i]
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
[i-1] [i]
[i]prev
cur
เมอคำนวณและพมพเลขทกตวของแถวปจจบนไดแลว ตองกำหนดคาแถวลำดบ prev ใหมเมอทำงานจบบรรทด เพอนำไปใชในการคำนวณบรรทดถดไป ดงน
A.3. สามเหลยมปาสกาล 139
cur[0] = 1
i = 1
i <= line-2
cur[i] = prev[i-1] + prev[i]
i = i+1
cur[line-1] = 1
print cur
prev = cur
T
F
ในผงงานนนเรากำหนดใหแถวลำดบ prev มคาเทากบแถวลำดบ cur ได แตหากเปนโปรแกรมภาษาซ หากจะใชการกำหนดคาใหแถวลำดบแบบน ตองวนซำสำเนาคาในแถวลำดบ หรอคนพนทของ prevกอนและจองพนทใหมสำหรบ cur ในบรรทดถดไป
การพมพตวเลข นอกจากจะตองพมพคาของตวเลขแลว ยงตองจดตวเลขใหอยกงกลางของบลอกดวย ซงทำไดโดยเคาะวรรคหนาและหลงตวเลขเทาๆ กน อกขระทงหมดในบลอกจะประกอบดวย
1. ระยะเคาะกอนตวเลข (bd) คอความกวางของบลอก (blockSize) ลบดวยจำนวนหลกของตวเลข(d) แลวหารดวย 2 ปดเศษขน จะเปนระยะเคาะหนา ดงน
bd = ⌊(blockSize − d + 1)/2⌋2. ตวเลข นบจำนวนหลกไดจากการหารดวย 10d เมอ d เปนจำนวนหลก ซงทดลองเรมตนจาก 1 และ
เพม d ไปจนกวาตวเลข (cur[i]) จะมคามากกวาหรอเทากบ 10d
140 ภาคผนวก A. แบบฝกหด
3. ระยะเคาะหลงตวเลข (ad) เทากบอกขระทเหลอจนจบบลอก
ad = blockSize − bd − d
เมอรวมกนแลว การพมพตวเลขในแตละบลอกจงเปน
d = 1
cur[i] >= 10d
d = d+1T
bd = (blockSize - d + 1) DIV 2
c = 0
c < bd
print ‘␣’
c = c+1
T
F
print cur[i]
F
ad = blockSize - bd - d
c = 0
c < ad
print ‘␣’
c = c+1
T
F
เมอนำไปแทนสวนการพมพตวเลขของบรรทด แลวรวมกบสวนการพมพชองวางนำหนา กจะไดผงงานทสมบรณ
A.3.2 คำตอบรายการตวแปรทงหมดเปนดงตารางท A.2 ขนตอนแสดงการทำงานเปนดงรปท A.1 และรหสคำสงภาษาซอยในรหสคำสงท A.3
A.3. สามเหลยมปาสกาล 141
ตารางท A.2: รายการตวแปรสำหรบการพมพสามเหลยมปาสกาล
ชอตวแปร ชนด คำอธบายline int เลขแถวทพมพn int จำนวนแถวทพมพblockSize int จำนวนอกขระตอหนงบลอกc int ตวนบจำนวนชองวางทพมพnc int จำนวนชองวางทงหมดกอนเรมบลอกตวเลขcur int[15] แถวลำดบเกบตวเลขทตองพมพในบรรทดปจจบนprev int[15] แถวลำดบเกบตวเลขทตองพมพในบรรทดกอนหนาi int ดชนของตวเลขทกำลงจะพมพbd int จำนวนชองวางภายในบลอกกอนพมพตวเลขd int จำนวนหลกของตวเลขทจะพมพad int จำนวนชองวางภายในบลอกหลงพมพตวเลข
142 ภาคผนวก A. แบบฝกหด
START
line = 1
line <= n
nc = (n/2-line/2) * blockSize c = 0
c < ncprint ‘␣’
c = c+1
T
T cur[0] = 1 i = 1
i <= line-2cur[i] = prev[i-1] + prev[i]
i = i+1
cur[line-1] = 1
F
T
Fi=0
i < line
i = i+1
d = 1
cur[i] >= 10d
d = d+1
print “\n”
T
T
bd = (blockSize - d + 1) DIV 2
c = 0
c < bd
print ‘␣’
c = c+1
TF
print cur[i]
F
ad = blockSize - bd - d
c = 0
c < ad
print ‘␣’
c = c+1
T
F
prev = cur
line = line+1
STOPF
F
รปท A.1: ผงงานการพมพสามเหลยมปาสกาล
A.3. สามเหลยมปาสกาล 143
1 #include <stdio.h>2 #include <stdlib.h>3 #include <math.h>45 int main()6 {7 int line; // line counter8 int n; // number of lines to be printed9 int blockSize; // number of characters in a block10 int c; // space counter11 int nc; // number of spaces to be printed1213 int cur[15]; // int array for numbers in the current line14 int prev[15]; // int array for numbers of the previous line1516 int i; // index in cur and prev1718 int bd; // number of spaces before the number in a block19 int d; // number of digits to be printed20 int ad; // number of spaces after the number in a block2122 // Read input23 printf(”Input: ”);24 scanf(”%d”, &n);2526 blockSize = 6;2728 // main loop for lines29 for (line = 1; line <= n; line++)30 {31 // print space blocks32 nc = (n - line) * blockSize / 2;33 for (c = 0; c < nc; c++)34 printf(” ”);3536 // print number blocks3738 // illing number in each block of the current line39 cur[0] = 1;4041 // loop illing number in a block42 for (i = 1; i <= line-2; i++)
144 ภาคผนวก A. แบบฝกหด
43 {44 cur[i] = prev[i-1] + prev[i];45 }46 cur[line-1] = 1;4748 // loop printing numbers in the line49 for (i = 0; i < line; i ++)50 {51 // ind number of digits52 for (d = 1; cur[i] >= pow(10,d); d++)53 ;5455 // print leading spaces in a block56 bd = (blockSize - d + 1) / 2;57 for (c = 0; c < bd; c++)58 printf(” ”);5960 // print number61 printf(”%d”, cur[i]);6263 // print following spaces in a block64 ad = blockSize - bd - d;65 for (c = 0; c < ad; c++)66 printf(” ”);67 }6869 // Finishing printing a line with the newline character70 printf(”\n”);7172 // set prev to cur73 for (i = 0; i < 15; i++)74 {75 prev[i] = cur[i];76 }77 }7879 return 0;80 }
รหสคำสงท A.3: โปรแกรมการพมพสามเหลยมปาสกาล
A.4. การหารากทสองดวยการหารยาว 145
A.4 การหารากทสองดวยการหารยาวจงหารากทสองของจำนวนจรงทผใชปอนโดยใชวธหารยาว (ทศนยม 4 ตำแหนง)
A.4.1 วเคราะหการทำงานขนตอนการหารากทสองดวยมอเปนดงรปท A.2
ตวตง200
0
0 000 ∗ 2 ∗ 10 + 1
1
( 0 ∗ 2 ∗ 10 + 1) 11 001 ∗ 2 ∗ 10 + 2
2
( 1 ∗ 2 ∗ 10 + 2) 22
⋮
1 = 0 ∗ 10 + 12 = 1 ∗ 10 + 2
รปท A.2: ตวอยางการหารากทสอง
แยกเปนขนตอนการทำงานไดดงน
1. หาจำนวนเตม⏟⏟⏟⏟⏟0
มากทสดทยกกำลงสองแลวไมเกนตวตง เกบเปนผลลพธ ( )
2. หาผลตางของตวตงกบ 20 ไดเปนเศษ⏟0
3. เอาเศษคณ 100 ไดเปนตวตงของรอบตอไป ( )4. หาจำนวนเตม มากทสดททำให
(( ∗ 2 ∗ 10) + ) ∗ < (A.1)5. หาเศษครงใหม ไดเปน − ((20 + ) ∗ )6. กลบไปทำขอ 3. จนกวาจะครบจำนวนหลกของทศนยม⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟⏟
decทตองการ ในทนโจทยกำหนด dec เปน 4
146 ภาคผนวก A. แบบฝกหด
7. ปดเศษทงถา ตวสดทายนอยกวา 5 และปดขนในกรณอนๆ8. ใสตำแหนงทศนยมทคำตอบ
งานทงชนประกอบดวยขนตอนทงหมด 8 ขนตอน โดยขนตอนท 6 เปนตวควบคมการทำซำ มเงอนไขการทำซำคอจำนวนหลกยงไมครบตามตองการ เมอกำหนดให i เปนจำนวนเตมนบตำแหนงของทศนยมทได จะเขยนเปนโครงของผงงานไดดงน
START
หาผลลพธตวแรก: A
B = (ตวตง - A2)i = 1
i <= dec
B = B * 100
หาผลลพธตวตอไป: A, CB = B-(20*A+C)*C
i = i+1
ปดเศษ
A = A / 10dec
STOP
T
F
หาผลลพธตวแรก (A = 0)1. เรมจากให 0 เปน 12. วนซำเพมคา 0 ไปทละ 1 หาก 20 ยงนอยกวาตวตง3. หลงจากการวนซำ ตรวจสอบคา 0 อกครง
a) ถา 20 มากกวาตวตง ใหลด 0 ลง 1b) ถา 20 เทากบตวตง ไมตองทำอะไร
เขยนเปนสวนของผงงานไดดงน
A.4. การหารากทสองดวยการหารยาว 147
A = 1
A2 < ตวตง
A = A+1
A2 > ตวตง A = A-1
T
F T
F
หาผลลพธตวตอไป: CC เปนจำนวนเตมมากทสดตามอสมการ (A.1) การหา C จงใชการวนซำเพม C ไปเรอยๆ จนกวาจะไดคาสงสดทเปนไปได ในทำนองเดยวกบทหา 0 เขยนเปนสวนของผงงานไดดงน
C = 1
(20*A+C)*C < B
C = C+1
(20*A+C)*C > B C = C-1
A = A * 10 + C
T
F T
F
ปดเศษเงอนไขในการปดเศษคอ ผลลพธหลกสดทาย (C) โดยจะ
• ปดขนหาก C >= 5• ปดทงในกรณอนๆ
จงเขยนเปนสวนของผงงานไดดงน
148 ภาคผนวก A. แบบฝกหด
C >= 5
A = A - C + 1 A = A - C
T F
A.4.2 คำตอบรายการตวแปรทงหมดเปนดงตารางท A.3 ขนตอนแสดงการทำงานเปนดงรปท A.3
ตารางท A.3: รายการตวแปรสำหรบการหารากทสองดวยการหารยาว
ชอตวแปร ชนด คำอธบายA int ผลลพธและผลลพธชวคราวตวตง float คาของตวตงC int ผลลพธ ณ ตำแหนงทกำลงคำนวณB int เศษระหวางการคำนวณ และตวตงชวคราวi int ตวนบจำนวนหลกทศนยมdec int จำนวนหลกทศนยมทตองการ
A.4. การหารากทสองดวยการหารยาว 149
START
A = 1
A2 < ตวตง
A = A+1
A2 > ตวตง A = A-1
T
F T
F
B = (ตวตง - A2)i = 1
i <= dec
B = B * 100
C = 1
(20*A+C)*C < B
C = C+1
(20*A+C)*C > BC = C-1
A = A * 10 + C
T
FTF
B = B-(20*A+C)*C
i = i+1 C >= 5
A = A - C + 1 A = A - CT
F
A = A / 10dec
STOP
T
F
รปท A.3: ผงงานการหารากทสองดวยวธการหารยาว
A.5. การคดคาโดยสารรถไฟฟา 151
A.5 การคดคาโดยสารรถไฟฟาเมอผใชปอนขอมลเขาเปนรหสถานตนทางและรหสสถานปลายทาง จงคำนวณหาราคาโดยสารรถไฟฟาทถกทสดในการเดนทางจากจดเรมตนไปยงปลายทาง โดยการคดราคาเปนดงน
การคำนวณราคาโดยใชบตรเตมเงนของบคคลธรรมดา คดตามระยะหางระหวางสถานเปนดงน
• สวนเดม
– 0-1 สถาน 15 บาท– 2-7 สถาน 22-37 บาท โดยเพมขนสถานละ 3 บาท– 8 สถานขนไป 42 บาท– หากเดนทางเฉพาะในชวงสะพานตากสน (S6) ถงวงเวยนใหญ (S8) คดราคา 15 บาท
• สวนตอขยาย
– ออนนช (E9) - แบรง (E14) และ วงเวยนใหญ (S8) - บางหวา (S12) คดราคาเหมาจาย10 บาทตลอดชวง
– หากใชสวนตอขยายทงสองฝงจะเหมาจายในอตรา 10 บาทเชนกน เชน จากแบรง (E14) ถงบางหวา (S12) คดราคา 10+42 = 52 บาท
และกำหนดรหสสถานดงน
• สยาม (C0)• ราชเทว (N1) - หมอชต (N8)• ชดลม (E1) - ออนนช (E9) - แบรง (E14)
• ราชดำร (S1) - วงเวยนใหญ (S8) - บางหวา(S12)
• สนามกฬาแหงชาต (W1)
A.5.1 วเคราะหการทำงานรบขอมลเขาสองคา เปนสถานตนทางและสถานปลายทาง ตองการคำนวณระยะหางเปนจำนวนสถาน
• เมอสถานอยในสายเดยวกน (N,S,E,W,C) ระยะหางระหวางสถานคอเลขสถานลบกน• เมอสถานอยตางสาย ระยะหางระหวางสถานคอเลขสถานบวกกน
ดงนน ควรออกแบบการรบขอมลรหสสถานแยกรหสของสาย (อกขระ N S EW C) และเลขสถาน (0-14)ออกจากกน จงกำหนดใหรบขอมลเขาเปนตวแปร 4 ตว ดงน
152 ภาคผนวก A. แบบฝกหด
ชอตวแปร ชนด คำอธบายc1 char รหสสายสถานตนทางs1 int เลขสถานตนทางc2 char รหสสายสถานปลายทางs2 int เลขสถานปลายทาง
สวนของผงงานสำหรบการรบขอมลเปนดงน
READ c1, s1, c2, s2
การเดนทางไมวาจากเลขสถานนอยไปมาก หรอจากเลขสถานมากไปนอยนน ใหคาระยะทางระหวางสถานเทากน เพอความสะดวกในการคำนวณ จงตงตวแปรใหมขนอก 4 ตว กำหนดใหสถานทมเลขนอยเปนตนทาง และสถานเลขมากเปนปลายทาง ดงน
ชอตวแปร ชนด คำอธบายstartC char รหสสายตนทางสำหรบคำนวณstartS int เลขสถานตนทางสำหรบคำนวณendC char รหสสายปลายทางสำหรบคำนวณendS int เลขสถานปลายทางสำหรบคำนวณ
ซงเขยนเปนสวนของผงงานไดดงน
s1 < s2startS=s1startC=c1
endC=c2 endS=s2
startC=c2 startS=s2
endS=s1endC=c1
T F
ลกษณะการเดนทางแบงออกเปนสองรปแบบ ไดแก1. มเฉพาะการเดนทางในสวนตอขยาย คดราคา 10 บาท2. มการเดนทางในสวนปกต และอาจมการเดนทางในสวนตอขยายดวย คดราคาทงสองสวนรวมกน
A.5. การคดคาโดยสารรถไฟฟา 153
จงใหมตวแปร 2 ตว เกบคาโดยสารแยกสวนกน และตวแปรอกหนงตวเกบคาโดยสารรวม เปนผลลพธ ดงน
ชอตวแปร ชนด คำอธบายnormPrice int ราคาในสวนปกตextPrice int ราคาในสวนตอขยายprice int ราคารวม
เงอนไขทใชในการตดสนใจวามเฉพาะการเดนทางในสวนตอขยายหรอไม เปนอนใดอนหนงดงตอไปน
• การเดนทางชวง ออนนช-แบรง รหสสายเดยวกนและเลขสถานตงแต 9 เปนตนไป– (startC == ‘E’ AND startC == endC) AND (startS >= 9 AND endS > 9)
• การเดนทางชวง วงเวยนใหญ-บางหวา รหสสายเดยวกนและเลขสถานตงแต 8 เปนตนไป– (startC == ‘S’ AND startC == endC) AND (startS >= 8 AND endS > 8)
เขยนเปนเงอนไขในผงงานไดดงน
(startC == ‘E’ AND startC == endC)AND (startS >= 9 AND endS > 9)
OR(startC == ‘S’ AND startC == endC)AND (startS >= 8 AND endS > 8)
price=10 การคดราคาสวนปกตรวมกบสวนตอขยาย
T F
กรณทมการเดนทางในสวนปกต ซงอาจมการเดนทางในสวนตอขยายรวมดวย จงแยกคดราคาของสวนตอขยายออกมากอน แลวปรบสถานในการคำนวณใหเปนจดปลายของการเดนทางแบบปกต เพอนำไปคำนวณราคาแบบปกตตอไป การเดนทางในสวนตอขยายจะเกดขนเมอเลขสถานอยในสวนตอขยาย ไมวา
154 ภาคผนวก A. แบบฝกหด
จะเปนสวนตนทางหรอปลายทางกตาม หากตนทางและปลายทางเปนสวนขยายตางสายกน จะคดราคาเพยงครงเดยว
การคดราคาหากมสวนตอขยายทตนทางเปนดงน
extPrice = 0
startC == ‘E’AND
startS > 9
extPrice = 10
startS = 9
startC == ‘S’AND
startS > 8
extPrice = 10
startS = 8
T
F
T
F
และการคดราคาหากมสวนตอขยายทปลายทางเปนดงน
endC == ‘E’AND
endS > 9
extPrice = 10
endS = 9
endC == ‘S’AND
endS > 8
extPrice = 10
endS = 8
T
F
T
F
จากนนเปนการคดคาโดยสารในสวนปกต ในกรณทการเดนทางอยในชวงของสถานสะพานตากสน (S6)ถงสถานวงเวยนใหญ (S8) เทานน คาโดยสารจะเปน 15 บาท เขยนเปนผงงานไดดงน
A.5. การคดคาโดยสารรถไฟฟา 155
startC==’S’AND
startS>=6AND
endC==’S’AND endS<=8
normPrice = 15การคดราคาชวง S6-S8T
สวนสถานปกตอนๆ คดคาเดนทางจากจำนวนสถานทเดนทาง กำหนดตวแปรเพมสำหรบเกบระยะหางสถานดงน
ชอตวแปร ชนด คำอธบายdiff int ระยะระหวางสถาน
ระยะระหวางสถานแบงออกเปน 2 กรณ ไดแก
• ตนทางและปลายทางมรหสสายเดยวกน ระยะหางระหวางสถานคอเลขปลายทางลบเลขตนทาง– diff = endS - startS
• ตนทางและปลายทางมรหสสายตางกน แสดงวามการเปลยนสายทสถานสยาม ระยะหางระหวางสถานคอระยะระหวางสถานตนทางมาถงสยาม รวมกบระยะระหวางสถานสยามไปถงปลายทาง
– diff = (startS - 0) + (endS - 0) = startS + endS
เขยนเปนผงงานไดดงน
startC == endC
diff = endS - startS diff = startS + endS
T F
156 ภาคผนวก A. แบบฝกหด
จากนนคดราคาในการเดนทางจากจำนวนสถาน โดย
• 0-1 สถาน คดราคา 15 บาท• 2-7 สถาน คดราคา 22-37 บาท โดยเพมขนสถานละ 3 บาท• 8 สถานขนไป คดราคา 42 บาท
จงเขยนเปนผงงงานไดดงน
diff <= 1
normPrice = 15 diff <= 7
normPrice = 16 + 3*diff normPrice = 42
T F
T F
ราคารวมจะเทากบราคาในสวนปกตรวมกบราคาในสวนตอขยาย
• price = normPrice + extPrice
price = normPrice + extPrice
นำสวนตางๆของผงงานทงหมดมารวมกน จะไดเปนคำตอบ
A.5. การคดคาโดยสารรถไฟฟา 157
A.5.2 คำตอบรายการตวแปรทงหมดอยในตารางท A.4 ผงงานการคดคาโดยสารเปนดงรปท A.4 และรหสคำสงภาษาซอยในรหสคำสงท A.4
ตารางท A.4: รายการตวแปรสำหรบการคดคาโดยสาร BTS
ชอตวแปร ชนด คำอธบายc1 char รหสสายสถานตนทางs1 int เลขสถานตนทางc2 char รหสสายสถานปลายทางs2 int เลขสถานปลายทางstartC char รหสสายตนทางสำหรบคำนวณstartS int เลขสถานตนทางสำหรบคำนวณendC char รหสสายปลายทางสำหรบคำนวณendS int เลขสถานปลายทางสำหรบคำนวณdiff int ระยะระหวางสถานnormPrice int ราคาในสวนปกตextPrice int ราคาในสวนตอขยายprice int ราคารวม
158 ภาคผนวก A. แบบฝกหด
START
READ c1, s1, c2, s2
s1 < s2startS=s1startC=c1
endC=c2 endS=s2
startC=c2 startS=s2
endS=s1endC=c1
T F
(startC == ‘E’ AND startC == endC)AND (startS >= 9 AND endS > 9)
OR(startC == ‘S’ AND startC == endC)AND (startS >= 8 AND endS > 8)
price=10
T extPrice = 0
startC == ‘E’AND
startS > 9
extPrice = 10
startS = 9
startC == ‘S’AND
startS > 8extPrice = 10
startS = 8
F
TT
F
F
endC == ‘E’AND
endS > 9
extPrice = 10
endS = 9
endC == ‘S’AND
endS > 8
extPrice = 10
endS = 8
T
F
T
F
startC==’S’AND
startS>=6AND
endC==’S’AND endS<=8
normPrice = 15T
startC == endC
diff = startS + endS
diff = endS - startSF T
F
diff <= 1
normPrice = 15 diff <= 7
normPrice = 16 + 3*diff normPrice = 42
T F
T F
price = normPrice + extPrice
STOP
รปท A.4: ผงงานการคดคาโดยสารรถไฟฟา BTS
A.5. การคดคาโดยสารรถไฟฟา 159
รปท A.5: แผนภาพเสนทางและสถานในระบบรถไฟฟา BTS: ภาพจาก www.bts.co.th
160 ภาคผนวก A. แบบฝกหด
เร�ม 6
ม.ค. 5
7 Eff
ective
from
6th Jan
uary
2014
ตารา
งอตร
าคาโด
ยสาร
ทเรย
กเกบ E
ffecti
ve Fa
reหน
วย: บ
าทUn
it: Ba
ht
ปลาย
ทาง
Desti
natio
nตน
ทาง
From
N8
N7N6N5N4N3
N2N1CENE1E2E3E4E5E6E7E8E9E10E11E12E13E14W1S1S2S3
S4S5S6S7S8
S9S10S11S12
15 1
5 22
25
28 3
1 34
37
42 4
2 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
42
42 4
2 42
42
42 4
2 42
42
52 5
2 52
52
15 1
5 15
22
25 2
8 31
34
37 4
2 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
42
42 4
2 42
42
42 4
2 42
42
52 5
2 52
52
22 1
5 15
15
22 2
5 28
31
34 3
7 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
37
37 4
2 42
42
42 4
2 42
42
52 5
2 52
52
25 2
2 15
15
15 2
2 25
28
31 3
4 37
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
34
34 3
7 42
42
42 4
2 42
42
52 5
2 52
52
28 2
5 22
15
15 1
5 22
25
28 3
1 34
37
42 4
2 42
42
42 4
2 52
52
52 5
2 52
31
31 3
4 37
42
42 4
2 42
42
52 5
2 52
52
31 2
8 25
22
15 1
5 15
22
25 2
8 31
34
37 4
2 42
42
42 4
2 52
52
52 5
2 52
28
28 3
1 34
37
42 4
2 42
42
52 5
2 52
52
34 3
1 28
25
22 1
5 15
15
22 2
5 28
31
34 3
7 42
42
42 4
2 52
52
52 5
2 52
25
25 2
8 31
34
37 4
2 42
42
52 5
2 52
52
37 3
4 31
28
25 2
2 15
15
15 2
2 25
28
31 3
4 37
42
42 4
2 52
52
52 5
2 52
22
22 2
5 28
31
34 3
7 42
42
52 5
2 52
52
42 3
7 34
31
28 2
5 22
15
15 1
5 22
25
28 3
1 34
37
42 4
2 52
52
52 5
2 52
15
15 2
2 25
28
31 3
4 37
42
52 5
2 52
52
42 4
2 37
34
31 2
8 25
22
15 1
5 15
22
25 2
8 31
34
37 4
2 52
52
52 5
2 52
22
22 2
5 28
31
34 3
7 42
42
52 5
2 52
52
42 4
2 42
37
34 3
1 28
25
22 1
5 15
15
22 2
5 28
31
34 3
7 47
47
47 4
7 47
25
25 2
8 31
34
37 4
2 42
42
52 5
2 52
52
42 4
2 42
42
37 3
4 31
28
25 2
2 15
15
15 2
2 25
28
31 3
4 44
44
44 4
4 44
28
28 3
1 34
37
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 3
7 34
31
28 2
5 22
15
15 1
5 22
25
28 3
1 41
41
41 4
1 41
31
31 3
4 37
42
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 4
2 37
34
31 2
8 25
22
15 1
5 15
22
25 2
8 38
38
38 3
8 38
34
34 3
7 42
42
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 4
2 42
37
34 3
1 28
25
22 1
5 15
15
22 2
5 35
35
35 3
5 35
37
37 4
2 42
42
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 4
2 42
42
37 3
4 31
28
25 2
2 15
15
15 2
2 32
32
32 3
2 32
42
42 4
2 42
42
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 4
2 42
42
42 3
7 34
31
28 2
5 22
15
15 1
5 25
25
25 2
5 25
42
42 4
2 42
42
42 4
2 42
42
52 5
2 52
52
42 4
2 42
42
42 4
2 42
42
42 4
2 37
34
31 2
8 25
22
15 1
5 10
10
10 1
0 10
42
42 4
2 42
42
42 4
2 42
42
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 3
8 35
32
25 1
0 10
10
10 1
0 10
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 3
8 35
32
25 1
0 10
10
10 1
0 10
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 3
8 35
32
25 1
0 10
10
10 1
0 10
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 3
8 35
32
25 1
0 10
10
10 1
0 10
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 3
8 35
32
25 1
0 10
10
10 1
0 10
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
42 4
2 37
34
31 2
8 25
22
15 2
2 25
28
31 3
4 37
42
42 4
2 52
52
52 5
2 52
15
22 2
5 28
31
34 3
7 42
42
52 5
2 52
52
42 4
2 37
34
31 2
8 25
22
15 2
2 25
28
31 3
4 37
42
42 4
2 52
52
52 5
2 52
22
15 1
5 22
25
28 3
1 34
37
47 4
7 47
47
42 4
2 42
37
34 3
1 28
25
22 2
5 28
31
34 3
7 42
42
42 4
2 52
52
52 5
2 52
25
15 1
5 15
22
25 2
8 31
34
44 4
4 44
44
42 4
2 42
42
37 3
4 31
28
25 2
8 31
34
37 4
2 42
42
42 4
2 52
52
52 5
2 52
28
22 1
5 15
15
22 2
5 28
31
41 4
1 41
41
42 4
2 42
42
42 3
7 34
31
28 3
1 34
37
42 4
2 42
42
42 4
2 52
52
52 5
2 52
31
25 2
2 15
15
15 2
2 25
28
38 3
8 38
38
42 4
2 42
42
42 4
2 37
34
31 3
4 37
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
34
28 2
5 22
15
15 1
5 22
25
35 3
5 35
35
42 4
2 42
42
42 4
2 42
37
34 3
7 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
37
31 2
8 25
22
15 1
5 15
15
25 2
5 25
25
42 4
2 42
42
42 4
2 42
42
37 4
2 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
42
34 3
1 28
25
22 1
5 15
15
25 2
5 25
25
42 4
2 42
42
42 4
2 42
42
42 4
2 42
42
42 4
2 42
42
42 4
2 52
52
52 5
2 52
42
37 3
4 31
28
25 1
5 15
15
10 1
0 10
10
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
47 4
4 41
38 3
5 25
25
10 1
0 10
10
1052
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 38 3
5 25
25
10 1
0 10
10
1052
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 38 3
5 25
25
10 1
0 10
10
1052
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 52
52
52 5
2 47
44
41 38 3
5 25
25
10 1
0 10
10
10
N8 N7 N6 N5 N4 N3 N2 N1 CEN E1 E2 E3 E4 E5 E6 E7 E8 E9 E10
E11
E12
E13
E14
W1 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
S11
S12
หมอช
ต/Mo C
hitสะ
พานค
วาย/Sa
phan
Khwa
iเสน
ารวม/S
ena R
uam*
อารย
/Ari
สนาม
เปา/Sa
nam
Pao
อนสาวร
ยชยสมร
ภม/Vic
tory Mo
nument
พญาไท
/Phay
a Tha
iรา
ชเทว/R
atcha
thewi
สยาม
/Siam
ชดลม
/Chit
Lom
เพลน
จต/Ph
loen C
hitนา
นา/N
ana
อโศก
/Asok
พรอม
พงษ/P
hrom
Phon
gทอ
งหลอ
/Thon
g Lo
เอกมย
/Ekka
mai
พระโข
นง/Ph
ra Kh
anon
gออ
นนช/O
n Nut
บางจ
าก/Ba
ng C
hak
ปณณว
ถ/Pun
nawit
hiอด
มสข/U
dom
Suk
บางน
า/Ban
g Na
แบร�ง
/Beari
ngสนา
มกฬาแ
หงชาต/
Nation
al Stad
iumรา
ชดำร
/Ratc
hada
mri
ศาลา
แดง/S
ala D
aeng
ชองน
นทร/C
hong
Non
siศก
ษาวท
ยา/Su
ksa W
itthaya
*สร
ศกด/S
urasa
kสะพ
านตา
กสน/S
aphan
Taksin
กรงธ
นบร/K
rung T
honb
uriวงเ
วยนใ
หญ/W
ongw
ian Ya
iโพ
ธนมต
ร/Pho
Nim
itตล
าดพล
/Talat
Phlu
วฒาก
าศ/W
uttha
kat
บางห
วา/Ba
ng W
a*สถ
าน�รถ
ไฟฟา
บทเอส
ในอน
าคต /
Futur
e BTS
SkyT
rain S
tation
Loca
tion
รปท A.6: ตารางคาโดยสารรถไฟฟา BTS: ภาพจาก www.bts.co.th
A.5. การคดคาโดยสารรถไฟฟา 161
1 #include <stdio.h>2 #include <stdlib.h>34 int main()5 {6 char depart[4]; // Departure station7 char dest[4]; // Destination station8 char c1; // Start line code9 int s1; // Start station number10 char c2; // End line code11 int s2; // End station number12 char startC; // Start line code for calculation13 int startS; // Start station number for
calculation14 char endC; // End line code for calculation15 int endS; // End station number of calculation16 int dif; // Distance between stations17 int normPrice; // Price in normal zone18 int extPrice; // Price in extension zone19 int price; // Total price2021 // Read departure and destination station22 printf(”Enter departure station: ”);23 scanf(”%s”, depart);24 printf(”Enter destination station: ”);25 scanf(”%s”, dest);2627 c1 = depart[0];28 s1 = atoi(depart+1);29 c2 = dest[0];30 s2 = atoi(dest+1);3132 // Set the station with smaller number to be the
departure station
162 ภาคผนวก A. แบบฝกหด
33 if (s1 < s2)34 {35 startC = c1;36 startS = s1;37 endC = c2;38 endS = s2;39 }40 else41 {42 startC = c2;43 startS = s2;44 endC = c1;45 endS = s1;46 }4748 // If the route is on the extension zone only49 if ( (startC == ’E’ && startC == endC && startS
>= 9 && endS > 9)50 || (startC == ’S’ && startC == endC &&
startS >= 8 && endS > 8)51 )52 price = 10;53 else54 {55 // Find the extension price56 extPrice = 0;5758 if (startC == ’E’ && startS > 9)59 {60 // Departure station is in the eastern
extension zone61 extPrice = 10;62 startS = 9;63 }64 else if (startC == ’S’ && startS > 8)
A.5. การคดคาโดยสารรถไฟฟา 163
65 {66 // Departure station is in the southern
extension zone67 extPrice = 10;68 startS = 8;69 }7071 if (endC == ’E’ && endS > 9)72 {73 // Destination station is in the eastern
extension zone74 extPrice = 10;75 endS = 9;76 }77 else if (endC == ’S’ && endS > 8)78 {79 // Destination station is in the southern
extension zone80 extPrice = 10;81 endS = 8;82 }8384 // S6-S8 fare85 if (startC == ’S’ && startS >= 6 && endC == ’S’
&& endS <= 8)86 normPrice = 15;87 else88 {89 // Route is in the same line90 if (startC == endC)91 dif = endS - startS;92 // Route includes diferent lines93 else94 dif = startS + endS;95
164 ภาคผนวก A. แบบฝกหด
96 // Calculate the fare based on number oftraveling stations
97 if (dif <= 1)98 normPrice = 15;99 else if (dif <= 7)100 normPrice = 16 + 3 * dif;101 else102 normPrice = 42;103104 }105106 // calculate total price107 price = normPrice + extPrice;108 }109 printf(”Total price = %d\n”, price);110111 return 0;112 }
รหสคำสงท A.4: โปรแกรมการคดคาโดยสาร BTS
A.6. การพมพปฏทน 165
A.6 การพมพปฏทนจงเขยนผงงานแบบทดสอบกอนทำเพอพมพปฏทนสำหรบ 1 เดอนออกทางหนาจอ โดยใหผใชปอนวนของวนท 1 ของเดอนนนๆ ในรปตวเลข 1-7 โดยทวนจนทรแทนดวย 1 และจำนวนวนในเดอนนนๆ เชน
1 3 31
ผใชปอนเลข 3 แสดงวาวนท 1 เปนวนพธ และเลข 31 หมายถงเดอนนนม 31 วน ปฏทนควรจะมลกษณะดงน
1 Mon Tue Wed Thu Fri Sat Sun2 1 2 3 4 53 6 7 8 9 10 11 124 13 14 15 16 17 18 195 20 21 22 23 24 25 266 27 28 29 30 31
A.6.1 วเคราะหการทำงานโจทยกำหนดใหรบขอมล 2 จำนวน เปนวนเรมตนของเดอน และจำนวนวนในหนงเดอน เลอกใชตวแปรและชนดดงน
ชอตวแปร ชนด คำอธบายstartDay int วนแรกของเดอนnDays int จำนวนวนในหนงเดอน
สวนของการรบขอมลเปนดงน
READ startDay, nDays
งานหลกของการพมพปฏทนคอการพมพวนทใหครบตงแตวนท 1 ถงจำนวนวนทกำหนด ซงพบวา
• สงทตองทำกอนการทำซำ คอ การตงวนทเรมตนใหเปน 1• สงทตองทำซำ คอ การพมพวนท และเพมเลขวนทไปทละ 1• เงอนไขในการทำซำ คอ หากยงพมพวนทไมครบจำนวนวนในหนงเดอน ใหพมพตอไป
166 ภาคผนวก A. แบบฝกหด
จงมตวแปรเพมขน 1 ตว สำหรบเกบวนท ดงนชอตวแปร ชนด คำอธบายdate int วนท
จากนน รางผงงานเฉพาะสวนพมพวนท จะไดเปน
READ startDay, nDays
date = 1
date <= nDays
PRINT date
date = date + 1
T
F
หาก nDays มคาเปน 31 จะใหผลลพธเปนเลข 1-31 ตดกนดงน1 12345678910111213141516171819202122232425262728293031
เราตองการใหมชองวางระหวางวนทในการแสดงผล ดงนน ในเบองตน อาจแกไขผงงานโดยบงคบใหพมพชองวาง (อกขระชองวาง ‘␣’) หลงการพมพวนททกครง ไดเปน
READ startDay, nDays
date = 1
date <= nDays
PRINT date ,‘␣’
date = date + 1
T
F
A.6. การพมพปฏทน 167
หลงการแกไข หาก nDays มคาเปน 31 จะใหผลลพธเปนเลข 1-31 โดยมการเคาะวรรค 1 ครงระหวางวนท ดงน
1 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
งานถดมาทตองทำคอ ทำใหปฏทนพมพวนทแถวละ 7 วน ซงทำไดโดยใหขนบรรทดใหมทกๆ 7 วน วธการนบอยางงายคอ ใหดเศษจากการหารดวย 7 ซงจะมคาเปน
วนท 1 2 3 4 5 6 7 8 9 ...เศษ 1 2 3 4 5 6 0 1 2 ...
จะไดวา เศษจากการหารดวย 7 จะนบครบ 7 ตวเมอเศษเปน 0 จงกำหนดเงอนไขของการขนบรรทดใหมเปน เมอวนทนนหารดวย 7 แลวเหลอเศษ 0 ดงน
date MOD 7 == 0
PRINT ‘\n’T
F
แลวเอาเงอนไขนไปใสในสวนการพมพ กอนจะนบวนทเพม ไดเปน
168 ภาคผนวก A. แบบฝกหด
READ startDay, nDays
date = 1
date <= nDays
PRINT date ,‘␣’
date MOD 7 == 0
PRINT ‘\n’
date = date + 1
T
F
T
F
หลงการแกไข หาก nDays มคาเปน 31 จะใหผลลพธดงน1 1␣2␣3␣4␣5␣6␣72 8␣9␣10␣11␣12␣13␣143 15␣16␣17␣18␣19␣20␣214 22␣23␣24␣25␣26␣27␣285 29␣30␣31
ณ ตอนน จะเหนวา เราจะขนบรรทดใหมทกครงทวนทนนหารดวย 7 ลงตว ซงจะถกตองกตอเมอวนแรกของเดอนเปนวนจนทรเทานน จากตวอยางในโจทย วนแรกของเดอนเปนวนพธ ทำใหการขนบรรทดใหมครงแรกตองขยบไปเปนวนท 5 แทน
การเลอนไปเปนวนท 5 นน เสมอนวาเรานบวนจนทรและองคารเปนวนวางไปกอน 2 วน และเรมพมพวนทแรกในวนพธ จากโจทยกำหนดใหผใชปอนวนแรกของเดอน (startDay) มาให และกำหนดใหวนจนทรแทนดวย 1 วนองคารแทนดวย 2 ไปจนถงวนอาทตยแทนดวย 7 จากการพจารณา input ทเปนไปไดแลว พบวา
startDay 1 2 3 4 5 6 7จำนวนวนวาง 0 1 2 3 4 5 6
A.6. การพมพปฏทน 169
ความสมพนธของจำนวนวนวางทตองนบรวมเขาไปคอ startDay-1 จงปรบเงอนไขของการขนบรรทดใหม ใหรวมวนวางเขาไปดวย กอนจะหาเศษหลอจากการหารดวย 7
READ startDay, nDays
date = 1
date <= nDays
PRINT date ,‘␣’
(date+startDay-1)MOD 7 == 0
PRINT ‘\n’
date = date + 1
T
F
T
F
หลงการแกไข หาก startDay มคาเปน 3 และ nDays มคาเปน 31 จะใหผลลพธดงน1 1␣2␣3␣4␣52 6␣7␣8␣9␣10␣11␣123 13␣14␣15␣16␣17␣18␣194 20␣21␣22␣23␣24␣25␣265 27␣28␣29␣30␣31
จากผลลพธทได วนท 1 จะอยในคอลมนแรกซงเปนวนจนทรเสมอ เราจงตองเคาะวรรคกอนจะเรมพมพวนแรกดวย เมอพจารณาจากตวอยางในโจทย จะพบวาจำนวนวรรคทตองเคาะ (space) จะเปลยนไปตามวนแรกของเดอน (startDay) ดงน
startDay 1 2 3 4 5 6 7space 1 5 9 13 17 21 25
170 ภาคผนวก A. แบบฝกหด
การเคาะวรรคนเกดกอนพมพวนทวนแรก และทำครงเดยว จงแทรกการเคาะวรรคนไวหลงจากอานคาทผใชปอน เราสามารถใชการทำงานแบบเงอนไข 7 ทางเลอก (ทง if และ switch) กได หรอหาความสมพนธของจำนวนเคาะวรรคและวนแรกของเดอน ไดเปนสมการ
space = 1+(startDay-1)*4
แลวใชการวนซำนบจำนวนการพมพเคาะวรรคจนกวาจะครบกได ในทนเลอกทำแบบหลง จงกำหนดตวแปรจำนวนเคาะวรรคเพมขนดงน
ชอตวแปร ชนด คำอธบายspace int จำนวนการเคาะวรรค
พจารณาการวนซำเพมพมพอกขระชองวาง จะไดวา
• สงทตองทำกอนทำซำ คอ ตงคาเรมตนของจำนวนอกขระชองวางทพมพไปแลวใหเปน 0 เนองจากยงไมเรมพมพอกขระ
• สงทตองทำซำ คอ การพมพอกขระชองวาง (‘␣’) 1 ตว และเพมคาในตวนบไป 1• เงอนไขในการทำซำคอ จำนวนเคาะวรรคยงไมครบตามจำนวนทตองพมพ (1+(startDay-1)*4ตว)
เขยนผงงานเฉพาะสวนเคาะวรรคกอนการพมพวนท 1 ไดดงน
space = 0
space <1+(startDay-1)*4
PRINT ‘␣’
space = space + 1
T
F
จากนน เพมสวนการพมพหวตารางวนจนทรถงอาทตย ซงเปนคาคงทสายอกขระธรรมดา
A.6. การพมพปฏทน 171
PRINT “Mon␣ Tue␣ Wed␣ Thu␣ Fri␣ Sat␣ Sun␣\n”
การพมพหวตารางทำครงเดยวกอนการพมพชองวางใดๆ จงอาจแทรกไวทนทลงจากรบขอมล กอนทจะเคาะวรรค
เมอแทรกสวนการพมพหวตารางและการเคาะวรรคลงไปในผงงานเดมทไดกอนทจะเรมตน จะไดเปน
READ startDay, nDays
PRINT “Mon␣ Tue␣ Wed␣ Thu␣ Fri␣ Sat␣ Sun␣\n”
space = 0
space <1+(startDay-1)*4PRINT ‘␣’
space = space + 1
date = 1
date <= nDays
PRINT date ,‘␣’
(date+startDay-1)MOD 7 == 0 PRINT ‘\n’date = date + 1
T
F
T
F
T
F
172 ภาคผนวก A. แบบฝกหด
หลงการแกไข หาก startDay มคาเปน 3 และ nDays มคาเปน 31 จะใหผลลพธดงน1 Mon␣Tue␣Wed␣Thu␣Fri␣Sat␣Sun2 ␣␣␣␣␣␣␣␣␣1␣2␣3␣4␣53 6␣7␣8␣9␣10␣11␣124 13␣14␣15␣16␣17␣18␣195 20␣21␣22␣23␣24␣25␣266 27␣28␣29␣30␣31
ตำแหนงของวนท 1 นนอยตรงกบกงกลางคอลมนวนพธตามทตองการแลว แตการเคาะวรรคระหวางวนทตางๆ ยงไมถกตอง และขาดการเคาะวรรคในตอนตนของทกแถวเชนเดยวกน
สำหรบชองวางระหวางวนทนน หากมองใหเลขทกตวเสมอนวามสองหลก เราจะตองเคาะวรรค 1ครงหากเลขวนทนนเปนเลขโดด และจะทำใหชองวางระหวางวนทเปนการเคาะวรรค 2 ครงเสมอทกชวงสำหรบชองของวนจนทรนน ถาวนทเปนเลขหลกเดยว การเคาะวรรคกอน 1 ครงกจะทำใหเลขวนทอยตรงกงกลางพอดไปในตว แตการแกไขนจะไปกระทบกบการพมพวนท 1 ดวย จงปรบเงอนไขของจำนวนการเคาะวรรคกอนวนท 1 ใหลดลงเปน (startDay-1)*4 แทน
การปรบปรงเงอนไขการเคาะวรรคทงกอนและหลงพมพเลขวนทเปนดงน
date<10
PRINT ‘␣’
PRINT date,“␣␣”
T
F
เมอรวมเขาไปในผงงานรวม และแกไขจำนวนการเคาะวรรคกอนวนท 1 แลวจะไดคำตอบ
A.6. การพมพปฏทน 173
A.6.2 คำตอบเมอรวมผงงานเรยบรอยแลว หาก startDay มคาเปน 3 และ nDays มคาเปน 31 จะใหผลลพธดงน
1 Mon␣Tue␣Wed␣Thu␣Fri␣Sat␣Sun2 ␣␣␣␣␣␣␣␣␣1␣␣␣2␣␣␣3␣␣␣4␣␣␣53 ␣6␣␣␣7␣␣␣8␣␣␣9␣␣10␣␣11␣␣124 13␣␣14␣␣15␣␣16␣␣17␣␣18␣␣195 20␣␣21␣␣22␣␣23␣␣24␣␣25␣␣266 27␣␣28␣␣29␣␣30␣␣31
ซงตรงตามทโจทยกำหนดรายการตวแปรทงหมดเปนตารางท A.5 ขนตอนแสดงการทำงานเปนดงรปท A.7 และรหสคำสง
ภาษาซอยในรหสคำสงท A.5
ตารางท A.5: รายการตวแปรสำหรบการพมพปฏทน
ชอตวแปร ชนด คำอธบายstartDay int วนแรกของเดอนnDays int จำนวนวนในหนงเดอนdate int วนทspace int จำนวนการเคาะวรรค
174 ภาคผนวก A. แบบฝกหด
START
READ startDay, nDays
PRINT “Mon␣ Tue␣ Wed␣ Thu␣ Fri␣ Sat␣ Sun␣\n”
space = 0
space <(startDay-1)*4
PRINT ‘␣’
space = space + 1
date = 1
date <= nDays
date<10
print ‘␣’
PRINT date,“␣␣”
(date+startDay-1)MOD 7 == 0
PRINT ‘\n’
date = date + 1
STOP
T
F
T
F
T
F
T
F
รปท A.7: ผงงานการพมพปฏทน
A.6. การพมพปฏทน 175
1 #include <stdio.h>2 #include <stdlib.h>34 int main()5 {6 int startDay, nDays, date, space;78 scanf(”%d %d”, &startDay, &nDays);9 printf(”Mon Tue Wed Thu Fri Sat Sun\n”);1011 space = 0;12 while (space < (startDay-1)*4)13 {14 printf(” ”);15 space = space + 1;16 }17 date = 1;18 while (date <= nDays)19 {20 if (date < 10)21 printf(” ”);22 printf(”%d”, date);23 printf(” ”);24 if ((date+startDay-1) % 7 == 0)25 printf(”\n”);26 date = date + 1;27 }28 printf(”\n”);29 return 0;30 }
รหสคำสงท A.5: โปรแกรมการพมพปฏทน