2301170 computer and programming

193
เอกสารประกอบการสอน 2301170 COMP PROG ฑิตยา หวานวารี กรกฎาคม 2559

Upload: trinhphuc

Post on 02-Feb-2017

272 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: 2301170 Computer and Programming

เอกสารประกอบการสอน2301170 COMP PROG

ฑตยา หวานวาร

กรกฎาคม 2559

Page 2: 2301170 Computer and Programming

หากพบขอผดพลาด กรณาตดตอฑตยา หวานวาร[email protected]

จำนวน 175 หนา

• ปรบปรงครงท 1 เมอ 26 สงหาคม 2559 22:20• รน 1.1 29 สงหาคม 2559 16:00

CC BY-SA 3.0สญญาอนญาตครเอทฟคอมมอนสแบบ แสดงทมา-อนญาตแบบเดยวกน 3.0

Page 3: 2301170 Computer and Programming

กตตกรรมประกาศ• ขอขอบคณ 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

Page 4: 2301170 Computer and Programming
Page 5: 2301170 Computer and Programming

สารบญ

กตตกรรมประกาศ ก

สารบญ ค

สารบญภาพ ช

สารบญตาราง ฎ

สารบญตวอยาง ฐ

สารบญรหสคำสง ฒ

บทนำ 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

Page 6: 2301170 Computer and Programming

ง สารบญ

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

Page 7: 2301170 Computer and Programming

สารบญ จ

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

Page 8: 2301170 Computer and Programming
Page 9: 2301170 Computer and Programming

สารบญภาพ

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

Page 10: 2301170 Computer and Programming

ซ สารบญภาพ

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

Page 11: 2301170 Computer and Programming

สารบญภาพ ฌ

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

Page 12: 2301170 Computer and Programming
Page 13: 2301170 Computer and Programming

สารบญตาราง

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

Page 14: 2301170 Computer and Programming
Page 15: 2301170 Computer and Programming

สารบญตวอยาง

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

Page 16: 2301170 Computer and Programming
Page 17: 2301170 Computer and Programming

สารบญรหสคำสง

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

Page 18: 2301170 Computer and Programming

ณ สารบญรหสคำสง

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

Page 19: 2301170 Computer and Programming

บทนำ

วตถประสงครายวชานประกอบดวย

1. อธบายหลกการทำงานของคอมพวเตอรในระดบฮารดแวร ซอฟตแวร และระบบปฏบตการ2. อธบายหลกการทำงานของอนเทอรเนต3. อธบายแนวคดของการเกบขอมลในภาษาโปรแกรม การแทนขอมลในคอมพวเตอร และความแตก

ตางระหวางขอมลชนดตางๆ4. อธบายการทำงานของโปรแกรมในรปการทำงานแบบลาดบ แบบทางเลอก แบบวนซำ และการใช

ตวแปรแถวลาาดบ5. ระบปจจยเสยงเกยวกบความปลอดภยของคอมพวเตอร จรรยาบรรณการใชคอมพวเตอร และ

อาชญากรรมบนอนเทอรเนต6. อธบายการประยกตใชคอมพวเตอรในศาสตรตางๆ

เนอหาการเรยนในแตละหวขอมทงหวขอระดบพนฐานสำหรบผเรยนทวไป และหวขอขนสงสำหรบผเรยนทสนใจจะศกษาตอทางดานคอมพวเตอร แตละบทจะมมมลองคดใหผเรยนทดสอบความเขาใจของตนเองในการประยกตใชความรในบทเรยนเพอหาคำตอบ และมแบบฝกหดทายบทใหผเรยนทบทวนความเขาใจ ภาคผนวกของเอกสารเปนโจทยแบบฝกหดซงใชเนอหามากกวาหนงหวขอในการแกปญหา

เอกสารฉบบอเลกทรอนกสอยท

http://pioneer.netserv.chula.ac.th/~wdittaya/CompProg/2301170-Dittaya-ebook.pdf

แผนการสอนของรายวชาแบงตามวตถประสงครายวชาไดดงน

Page 20: 2301170 Computer and Programming

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 การประยกตใชคอมพวเตอรในศาสตรตาง ๆ

สอบปลายภาค

Page 21: 2301170 Computer and Programming

บทท 1คอมพวเตอรทำงานไดอยางไร

วตถประสงคการเรยนรอธบายหลกการทำงานของคอมพวเตอรในระดบฮารดแวร ซอฟตแวร และระบบปฏบตการ

1. อธบายววฒนาการและความเปนมาในการพฒนาคอมพวเตอรได2. อธบายโครงสรางคอมพวเตอรสวนฮารดแวร และหนาทของแตละองคประกอบได3. รจกซอฟตแวรชนดตางๆ และฮารดแวรทมกพบในคอมพวเตอร ระบหนาทและความสมพนธกบ

สวนอนๆ ของคอมพวเตอรได4. คาดเดาสาเหตของปญหาการทำงานของคอมพวเตอรซงเกดจากฮารดแวรหรอซอฟตแวรได

ใชเวลารวม 3 คาบคอมพวเตอรมพฒนาการอยางยาวนานจากอดตมาจนปจจบน และยงคงมการพฒนาอยางตอเนอง

จดมงหมายหลกในการพฒนาคอมพวเตอรนน คอการสรางเครองทนแรงมนษยในการคำนวณตางๆคอมพวเตอรในปจจบนเปนอปกรณอเลกทรอนกส ทำงานดวยไฟฟา ภายในประกอบดวยชนสวนตางๆเปนจำนวนมากทำงานประสานกนโดยมชดคำสงควบคม ซงซบซอนมากหากเทยบกบคอมพวเตอรในยคแรก การศกษาววฒนาการของคอมพวเตอรนบแตอดตจนปจจบน จะทำใหเขาใจกลไกการทำงานของคอมพวเตอรมากยงขน รวมถงเหนแนวทางการพฒนาคอมพวเตอรตอไปในอนาคต

1.1 ววฒนาการของคอมพวเตอรววฒนาการของคอมพวเตอรจำแนกอยางคราวๆ ตามเทคโนโลยทใชในการสรางเครองไดเปน ยคของเครองคดเลขรปแบบตางๆ ยคคอมพวเตอรเชงกล ยคคอมพวเตอรกงไฟฟากงเชงกล ยคหลอดสญญากาศ และยคทรานซสเตอร โดยสองยคหลงเปนยคของคอมพวเตอรเชงไฟฟา

Page 22: 2301170 Computer and Programming

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

Page 23: 2301170 Computer and Programming

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

Page 24: 2301170 Computer and Programming

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

Page 25: 2301170 Computer and Programming

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

Page 26: 2301170 Computer and Programming

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

Page 27: 2301170 Computer and Programming

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/

Page 28: 2301170 Computer and Programming

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

Page 29: 2301170 Computer and Programming

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

Page 30: 2301170 Computer and Programming

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

Page 31: 2301170 Computer and Programming

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

Page 32: 2301170 Computer and Programming

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

Page 33: 2301170 Computer and Programming

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 ตำแหนง) เปนตน หากเลขทอยของหนวยความจำมขนาดใหญขน แสดงวาหนวยประมวลผลกลางสามารถเขาถงหนวยความจำหลกโดยตรงไดมากขน หากเปนการประมวลผลขอมลขนาดใหญ เครองทเขาถงทอยจำนวนมากไดจะประมวลผลไดเรวกวาเครองทใชทอยขนาดเลกกวา เนองจากหากทอยม

Page 34: 2301170 Computer and Programming

16 บทท 1. คอมพวเตอรทำงานไดอยางไร

ALU

Register

Control Unit

RAM

CPU

System unit

keyb

oard

print

er

mous

e...

I/Oรปท 1.21: สถาปตยกรรมฟอนนอยมนน

ขนาดเลกแลวจะจำเปนตองมการเกบโปรแกรมหรอขอมลบางสวนในหนวยความจำภายนอก การเขาถงกจะทำไดชาลง

นอกจากการประมวลผลขอมลจำนวนมากแลว การออกแบบหนวยประมวลผลกลางจะออกแบบใหขนาดของจำนวนเตมและทศนยมโดยทวไปหนงจำนวนใชพนทในหนวยความจำเทากบขนาดของเลขทอยเพอประสทธภาพในการคำนวณของหนวยประมวลผล เมอเปรยบเทยบเครอง 32 บตกบเครอง 64 บตจงทำใหเครอง 64 บตซงเกบขอมลทศนยมไดละเอยดกวามนยสำคญหรอความแมนยำในการคำนวณสงกวาเครอง 32 บตดวย

การวดความเรวของคอมพวเตอรผใชมกบอกวาคอมพวเตอรทำงานได “เรว” โดยวดจากความเรวในการตอบสนองตอคำสงตางๆ ทผใชสง คอมพวเตอรอเลกทรอนกสนนทำงานตามสญญาณนาฬกาของหนวยประมวลผลกลาง โดยในหนงรอบของสญญาณนาฬกาอาจจะทำไดหนงคำสง หรอมากนอยกวานนกไดตามแตการออกแบบ การวดความเรวในการทำงานของคอมพวเตอรอยางคราวๆ อาจเทยบไดจากความเรวของสญญาณนาฬกา เชนหนวยประมวลผลกลางมความความถสญญาณนาฬกา 2.8GHz หมายถง ทำงานได 2.8 พนลานรอบตอวนาท กนาจะทำงานไดเรวกวาหนวยประมวลผลกลางซงมความถสญญาณนาฬกานอยกวาน อยางไรกตาม จำนวนคำสงทหนวยประมวลผลกลางทำงานไดในหนงรอบของสญญาณนาฬกานนอาจตางกนไปตามการออกแบบ ในทางทฤษฎ การวดความเรวในการทำงานของคอมพวเตอรจงวดจากจำนวนคำสงทหนวยประมวลผลกลางทำงานในหนงหนวยเวลา หนวยการวดสมรรถนะนเรยกวา MIPS (Million In-structions Per Second) คอการนบจำนวนคำสงทหนวยประมวลผลกลางสามารถทำงานไดในหนง

Page 35: 2301170 Computer and Programming

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/

Page 36: 2301170 Computer and Programming

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

Page 37: 2301170 Computer and Programming

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

Page 38: 2301170 Computer and Programming

20 บทท 1. คอมพวเตอรทำงานไดอยางไร

เหลกคอ การอานขอมลทำไดเรวกวามาก เพราะไมมสวนเชงกลแบบหวอานของฮารดดสก(รปท 1.24) นอกจากนยงสะดวกแกการพกพา เนองจากไมมสวนเปราะบางแบบหวอานของฮารดดสกญฯ แตขอเสยคอยงทำความจขอมลไดไมมากเทาดสกแบบจานแมเหลก และมราคาสง

1.4.4 สวนรบเขา/สวนสงออก (Input/Output Unit - I/O Unit)ขอมลเขาและออกมไดหลากหลายรปแบบ เชน ภาพ เสยง ตวอกขระ สวนรบเขาและสงออกเปนตวกลางการเชอมตอกบผใชหรอระบบอนๆ ตวอยางของอปกรณรบเขา เชน คยบอรด เมาส เมาสปากกา เปนตนตวอยางของอปกรณสงออก เชน จอภาพ เครองพมพ ลำโพง เปนตน การควบคมอปกรณรบเขาและสงออกทำผานระบบปฏบตการและโปรแกรมขบอปกรณซงเปนซอฟตแวร

เนองจากการประมวลผลทงหมดของคอมพวเตอรจะทำในหนวยความจำหลกเทานน เมอตองการรบขอมลจากสวนรบเขา หนวยประมวลผลกลางจะสงใหถายโอนขอมลจากชองทางเชอมตอไปเกบไวในหนวยความจำ ในทำนองเดยวกน เมอตองการสงขอมลออกทสวนสงออก หนวยประมวลผลกลางกจะสงใหนำขอมลจากหนวยความจำออกไปทางชองทางเชอมตอเชนกน รปแบบและวธการรบ/สง/สอสารของแตละอปกรณถกกำหนดโดยผผลต หรอมาตรฐานกลางตางๆ และนำไปใชโดยโปรแกรมขบสำหรบอปกรณนน ๆ

ลองคดหากไมมหนวยความจำภายนอก มเฉพาะหนวยประมวลผลกลาง หนวยความจำภายใน และสวนรบเขา/สวนสงออก คอมพวเตอรจะสามารถทำงานไดหรอไม จงใหเหตผลประกอบ

1.5 ประเภทและการทำงานของซอฟตแวรเนองจากความตองการใหคอมพวเตอรทำงานนนซบซอนขนเรอยๆ การปรบแตงฮารดแวรเฉพาะสำหรบการทำงานแตละอยางนนสนเปลองมาก เมอมการออกแบบคอมพวเตอรใหสามารถโปรแกรมไดแลว การพฒนาคอมพวเตอรใหทำงานไดตามความตองการกเปลยนไปจากการออกแบบฮารดแวรใหม ไปเนนทการเขยนชดคำสงใหคอมพวเตอรทำงานตามทตองการแทน

คำวา โปรแกรม นอกจากจะหมายถงการปรบแตงโดยชดคำสงใหคอมพวเตอรทำงานตามตองการแลว โปรแกรมยงหมายถงตวชดคำสงทสงใหเครองทำงานไดอกดวย ในความหมายหลงน โปรแกรมกบซอฟตแวรคอสงเดยวกน

ซอฟตแวรแบงออกเปนสองระดบ คอ ซอฟตแวรระบบ และซอฟตแวรทวไป โดยทซอฟตแวรระบบคอซอฟตแวรทใชจดการการทำงานของคอมพวเตอร ทำงานใกลชดกบฮารดแวร และซอฟตแวรทวไปคอซอฟตแวรทออกแบบมาเพอตอบสนองความตองการใชงานของผใชโดยผานซอฟตแวรระบบอกตอหนง

ตวอยางของซอฟตแวรทนาสนใจมดงน

Page 39: 2301170 Computer and Programming

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

Page 40: 2301170 Computer and Programming

22 บทท 1. คอมพวเตอรทำงานไดอยางไร

รปท 1.28: การจดสรรทรพยากรและจดลำดบการทำงานโดย Ubuntu

การจดสรรทรพยากรสำหรบโปรแกรมทรพยากรทสำคญในการประมวลผลของคอมพวเตอรคอหนวยประมวลผลกลาง และหนวยความจำระบบปฏบตการบางรปแบบอาจยอมใหโปรแกรมหลายๆ โปรแกรมทำงานพรอมกนได (multitasking)เชน การเปดเพลงฟงในขณะทพมพงานดวยโปรแกรมประมวลคำ ระบบปฏบตการจะแบงสวนการใชงานหนวยประมวลผลกลางและหนวยความจำใหโปรแกรมตางๆ ทกำลงทำงานอย โปรแกรมทกำลงตอบสนองตอผใชจะเรยกวาโปรแกรมแอคทฟ (active program) หรอโปรแกรมพนหนา (foregroundprocess) ในขณะทโปรแกรมซงกำลงทำงานแตไมไดตอบสนองโดยตรงตอผใช เชนโปรแกรมเลนเพลงในตวอยางขางตน เรยกวาโปรแกรมพนหลง (background process) นอกจากน การจดลำดบความสำคญของงานทตองทำเพอใหโปรแกรมตางๆ ทำงานไดลลวง กเปนหนาทของระบบปฏบตการเชนกน

เนองจากคอมพวเตอรเครองหนงอาจมหนวยประมวลผลไดหลายหนวย (multiprocessor) ระบบปฏบตการจงมหนาทแบงงานทตองทำใหกบหนวยประมวลผลแตละหนวย หรอใชหนวยประมวลผลหลายๆ หนวยทำงานรวมกน นอกจากน ระบบปฏบตการทมความสามารถสงยงสามารถจดการกบหนวยประมวลผลกลางชนดทมหลายแกนประมวลผลไดอยางมประสทธภาพ ในระบบคอมพวเตอรทรองรบผใชมากกวาหนงคนในเวลาเดยวกน (multiuser) ระบบปฏบตการกมหนาทแบงทรพยากรรวมถงจดลำดบความสำคญของงานใหกบผใชทกคนดวย

การใชงานหนวยความจำหลกใหมประสทธภาพกขนกบความสามารถของระบบปฏบตการเชนเดยวกน การทำงานของคอมพวเตอรในสถาปตยกรรมฟอนนอยมนนตองมการถายโอนขอมลทตองการใชงานรวมถงโปรแกรมเขาไปอยในหนวยความจำหลกกอนจะใหหนวยประมวลผลกลางทำงาน กรณทโปรแกรมและขอมลมขนาดเลกกวาขนาดของหนวยความจำหลกหรอมหนวยความจำหลกเหลอนนมกจะไมมปญหา แตหากโปรแกรมและขอมลมขนาดใหญเกนกวาทหนวยความจำหลกทงหมดจะเกบได ระบบปฏบตการจะมหนาทจดสรรหนวยความจำเสมอน (virtual memory) เพมเตมให เพอใหโปรแกรมยงสามารถทำงานได หนวยความจำเสมอนคอการใชหนวยความจำภายนอก เชน ดสก เปนเสมอนหนวยความจำหลก แลวใชการสบคา (swap) ในหนวยความจำเสมอนกบหนวยความจำหลกจรงแทน เพอใหหนวยประมวลผลกลางสามารถประมวลผลไดตามปกต แตเนองจากหนวยความจำภายนอกนนทำงาน

Page 41: 2301170 Computer and Programming

1.5. ประเภทและการทำงานของซอฟตแวร 23

ชากวาหนวยความจำภายในมาก และการสบคากตองใชเวลา หากจำเปนตองใชหนวยความจำเสมอนคอมพวเตอรจะทำงานไดชาลงอยางเหนไดชด

นอกจากการใชงานหนวยประมวลผลกลางและหนวยความจำแลว ระบบปฏบตการยงจดลำดบการใชงานอปกรณตอพวงตางๆ ไมวาจะเปนอปกรณอานเขยนขอมล อปกรณเครอขาย หรออปกรณอนๆรวมถงชวยอำนวยความสะดวกใหกบโปรแกรมตางๆ ทเรยกใชงานอปกรณนนๆ ดวย ตวอยางการใชงานอปกรณตอพวงอยางมประสทธภาพโดยระบบปฏบตการ เชน การทำงานกบเครองพมพ โดยปกตแลวความเรวในการประมวลผลของหนวยประมวลผลกลางนนสงกวาความเรวในการพมพมาก หากตองรอจนพมพเสรจจงจะทำงานอนตอไดกจะใชหนวยประมวลผลกลางไดไมเตมประสทธภาพ ระบบปฏบตการจงอาจกนพนทในหนวยความจำเพอเปนทพกขอมลไว เมอสงใหพมพเอกสาร ขอมลทตองการพมพจะถกนำไปเกบไวททพกขอมล เครองพมพจะสามารถอานขอมลจากทพกขอมลน ในขณะเดยวกนหนวยประมวลผลกลางกสามารถไปทำงานอยางอนตอได

การเชอมตอกบระบบเครอขายการเชอมตอกบคอมพวเตอรเครองอนๆ ในระบบเครอขายจำเปนตองมโพรโทคอลซงเปนขอตกลงกลางในการสอสารระหวางกน โพรโทคอลเหลานไดรบการสนบสนนจากระบบปฏบตการ ไมวาเครองในระบบเครอขายจะใชระบบปฏบตการใด หากใชโพรโทคอลเดยวกน เครองเหลานนจะสามารถสอสารกนได

ดแลรกษาความปลอดภยเนองจากระบบปฏบตการเปนซอฟตแวรทบรหารจดการทรพยากรตางๆ ของเครองโดยตรง ระบบปฏบตการจงอาจมความสามารถในการอนญาต (authorize) การเขาถงทรพยากรตางๆ เพอรกษาความปลอดภยโดยรวมของระบบอกดวย การจดการนมกจะผกกบการตรวจสอบและยนยนตวตนของผใชงาน(identification and authentication) วามสทธ (privilege) ในการเขาถงทรพยากรหรอไม

สนบสนนสวนตอประสานผใชสวนตอประสานผใชทำหนาทรบคำสงตางๆ จากผใชมาสงใหสวนประมวลผล และแสดงผลลพธคนใหผใชสวนตอประสานผใชแบงไดเปน 2 รปแบบ ไดแก

1. สวนตอประสานแบบกราฟก (Graphic User Interface – GUI) ผใชสงการผานภาพปมตางๆขอดคอใชงานไดงาย เหมาะสำหรบผใชทวไป แตคอมพวเตอรตองแบงทรพยากรมาใชในการสรางรปภาพตางๆ ดวย แทนทจะใชเพอการคำนวณคาเพยงอยางเดยว

2. สวนตอประสานแบบคำสง (Command Line Interface – CLI) ดงตวอยางในรปท 1.29 ผใชสงการผานแปนพมพ ขอดคอสงการไดรวดเรว ปรบแตงไดละเอยด แตคำสงมกมรายละเอยดเฉพาะตว ทำใหตองใชเวลาในการเรมตนเรยนรมาก

Page 42: 2301170 Computer and Programming

24 บทท 1. คอมพวเตอรทำงานไดอยางไร

รปท 1.29: สวนตอประสานแบบคำสง

รปท 1.30: ตวอยางรนของโปรแกรมขบอปกรณ

1.5.3 โปรแกรมขบอปกรณ (Device driver)

การทำงานกบอปกรณรอบขางตางๆ เชน เครองพมพ นน ระบบปฏบตการจะอาศยโปรแกรมขบอปกรณซงมกจะเรยกทบศพทสนๆ วา ไดรฟเวอร เปนตวกลางในการสอสารกบฮารดแวรของอปกรณรอบขางเหลานน โปรแกรมขบอปกรณกเปนซอฟตแวรระบบชนดนง จะเหนไดวาโปรแกรมขบอปกรณขนอยกบตวอปกรณ และยงขนอยกบระบบปฏบตการอกดวย ดงนนอปกรณตางรนกนจงอาจมโปรแกรมขบทตางกนแมจะผลตโดยผผลตเดยวกน และอปกรณชนเดยวกนแตทำงานกบระบบปฏบตการทตางกนอาจจำเปนจะตองใชโปรแกรมขบทตางกนเชนกน เชนในรปท 1.30 แสดงรนตางๆ ของโปรแกรมขบอปกรณสำหรบเครองพมพ ซงขนอยกบระบบปฏบตการดวย

Page 43: 2301170 Computer and Programming

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) เมอเขยนเสรจและตองการนำไปใชงาน ก

Page 44: 2301170 Computer and Programming

26 บทท 1. คอมพวเตอรทำงานไดอยางไร

รปท 1.31: ภาษาเครองและภาษาแอสเซมบล

ตองแปลงรหสตนฉบบเหลานไปเปนภาษาเครองทเครองรจก การแปลรหสตนฉบบอาศยซอฟตแวรระบบทเรยกวา ซอฟตแวรแปลภาษา ซงกนบเปนเปนซอฟตแวรระบบดวย

ภาษาโปรแกรมแบงออกเปนสองระดบ ไดแก

1. ภาษาระดบตำ เปนภาษาทตดตอกบเครองไดโดยตรงหรอใกลเคยง ไดแก ภาษาเครอง และภาษาแอสเซมบล

2. ภาษาระดบสง เปนภาษาทใชโครงสรางคำสงคลายภาษาองกฤษ มคำสงใหใชมาก สะดวกในการใชเขยนโปรแกรมมากกวาภาษาระดบตำ แตในการใชงานนนจำเปนตองใชคอมไพเลอรหรออนเทอรพรเตอรแปลคำสงเหลานใหกลายเปนภาษาเครองกอนจงจะทำงานได

ภาษาโปรแกรมทนาสนใจ1. ภาษาซและภาษาซพลสพลส (C และ C++)

ภาษาซเปนภาษาโปรแกรมระดบสง พฒนามาตงแตป 1967 โดยเดนนส รทช (Dennis Ritchie)มลกษณะเปนภาษาโปรแกรมเชงโครงสราง ใชกนทวไปตงแตการเขยนซอฟตแวรระบบไปจนถงการเขยนโปรแกรมประยกต คอมไพเลอรสำหรบภาษาซมในแทบทกสถาปตยกรรมและระบบปฏบตการ ภาษาซมคำสงตางๆ ทใชในการจดการทรพยากรตางๆ ของเครองโดยตรง จงมกจะใชในการเขยนซอฟตแวรระบบและซอฟตแวรทตองการปรบแตงการใชทรพยากรตางๆ ของเครองเองภาษาซพลสพลสพฒนาตอจากภาษาซ โดยออกแบบใหเปนภาษาโปรแกรมเชงวตถ เพอใหสะดวกตอการพฒนาซอฟตแวรมากขน และยงคงมประสทธภาพในการจดการทรพยากรของเครองไดสงเชนเดยวกบภาษาซ การใชภาษาซพลสพลสพบมากในงานการประมวลผลภาพ และงานอนๆ ทตองการประสทธภาพในการคำนวณสง

2. ภาษาจาวา (Java)

Page 45: 2301170 Computer and Programming

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) ซงเปนภาษาเครอง หากมขอผดพลาดในรหส

Page 46: 2301170 Computer and Programming

28 บทท 1. คอมพวเตอรทำงานไดอยางไร

รหสตนฉบบ คอมไพเลอร ออบเจกตโคด โปรแกรมเชอมโยง

โปรแกรมททำงานได ผลลพธ

ออบเจกตโคด

ออบเจกตโคด

ขอมล

รปท 1.32: ขนตอนการทำงานของคอมไพเลอร

อนเทอรพรเตอรรหสตนฉบบ:2/ขอมล

รหสตนฉบบ:1/ขอมล

รหสตนฉบบ:3/ขอมล

ผลลพธ:2

ผลลพธ:1

ผลลพธ:3

รปท 1.33: ขนตอนการทำงานของอนเทอรพรเตอร

ตนฉบบ คอมไพเลอรจะแสดงขอผดพลาดและใหผเขยนโปรแกรมแกไขใหถกตองกอนจะนำกลบมาแปลใหม เมอไมมขอผดพลาดแลวคอมไพเลอรจงจะแปลรหสตนฉบบทงหมดจนไดเปนออบเจกตโคด จากนนโปรแกรมเชอมโยง (linker) จะเชอมโยงออบเจกตโคดอนๆ ทเกยวของทอาจแปลไวลวงหนาแลว รวมกนเปนโปรแกรมทสามารถทำงานได (executable program) แลวจงสามารถสงทำงาน (execute) ใหโปรแกรมรบขอมลเขา (ถาม) ประมวลผล แลวแสดงผลลพธ (ถาม) ตอไป

การแปลโดยอนเทอรพรเตอรนนตางกบการแปลโดยคอมไพเลอรคอ อนเทอรพรเตอรจะเปนเสมอนลามแปลภาษาทแปลทละคำสงและใหคอมพวเตอรทำงานทนท และทำไปเรอยๆ จนกวาจะหมดรหสตนฉบบหรอพบขอผดพลาด หากมขอผดพลาดทคำสงใด อนเทอรพรเตอรจะหยดทำงาน ณ ตำแหนงนนพรอมกบแสดงขอผดพลาด หรอใหแกไขคำสง ณ ขณะนนแลวทำงานตอ

1.6.3 เครองมอในการพฒนาซอฟตแวรขนตอนการพฒนาซอฟตแวรเรมตนจากการออกแบบซอฟตแวรกอน ในการออกแบบจะกำหนดวตถหรอสวนตางๆ ทจะทำงานประสานกนในซอฟตแวร จากนนจะออกแบบการทำงานแตละอยางและการทำงานประสานกนระหวางสวนตางๆ ในซอฟตแวรนน ซงอาจะใชผงงานรปแบบตางๆ ชวยได

หลงจากออกแบบสวนตางๆ แลวจะเปลยนการออกแบบใหเปนรหสตนฉบบ ซงมกจะมรปแบบของรหสตนฉบบทสอดคลองกบการออกแบบอยแลว การเขยนรหสตนฉบบอาจใชซอฟตแวรทวไปใดๆ ทสามารถพมพขอความได แตในปจจบนมเครองมอชวยเหลอจำนวนมากทชวยในการเขยนรหสตนฉบบเรยกวา เครองมอชวยในการพฒนา (Integrated Development Environment - IDE) เชน

Page 47: 2301170 Computer and Programming

1.6. การโปรแกรมคอมพวเตอรเบองตน 29

Microsoft Visual Studio, Eclipse เปนตน นอกจาก IDE จะมความสามารถในการพมพขอความแลว ยงมความสามารถในการแสดงความเชอมโยงของสวนตางๆ ในรหสตนฉบบ และยงมกจะรวมคอมไพเลอรหรออนเทอรพรเตอรเขาไปในตว รวมถงตวชวยแสดงคำแนะนำเกยวกบคำสงตางๆ และโปรแกรมในการตรวจสอบจดบกพรองอกดวย

Page 48: 2301170 Computer and Programming
Page 49: 2301170 Computer and Programming

บทท 2ระบบอนเทอรเนต

วตถประสงคการเรยนรอธบายหลกการทำงานของอนเทอรเนต

1. อธบายการทำงานของอนเทอรเนตได2. อธบายวธการเชอมตอกบขายงานอนเทอรเนต3. รจกอปกรณพนฐานตางๆ ทพบไดทวไปตามบานซงใชในการตออนเทอรเนต

ใชเวลารวม 3 คาบการรบสงขอมลระหวางเครองคอมพวเตอรในยคแรกจะทำโดยเขยนขอมลลงหนวยความจำภายนอก

แลวนำไปอานดวยเครองอกเครองหนง แตการรบสงขอมลวธนนนคอนขางชาและไมสะดวก ความเรวในการรบสงขนกบวธการขนสงหนวยความจำภายนอก จงมความพยายามในการสงขอมลโดยตรงระหวางเครองคอมพวเตอร เกดเปนขายงานคอมพวเตอรขน

2.1 ขายงานคอมพวเตอรขายงานคอมพวเตอรเกดจากการนำคอมพวเตอรหลายๆ เครองมาเชอมตอกน ใหสามารถรบสงขอมลระหวางกนได ขายงานคอมพวเตอรแบงไดออกเปนสองระดบ คอ ขายงานบรเวณเฉพาะท (Local AreaNetwork - LAN) และ ขายงานบรเวณกวาง (Wide Area Network - WAN) ดงรปท 2.1

ขายงานบรเวณเฉพาะทมกเปนการเชอมตอคอมพวเตอรทอยใกลกนไวดวยกนเปนขายงาน เครองทอยในขายงานเดยวกนจะสามารถตดตอถงกนไดทงหมด สวนขายงานบรเวณกวางจะเปนการเชอมตอคอมพวเตอรทอยไกลจากกน โดยมกจะเปนการเชอมตอขายงานบรเวณเฉพาะทหลายๆ ขายงานเขาดวยกน

เมอมการเชอมตอคอมพวเตอรและมการรบสงขอมลระหวางกน กจำเปนจะตองมขอตกลงในการรบสงขอมล เพอใหการสอสารระหวางเครองเปนไปไดอยางราบรน ขอตกลงในการรบสงขอมลเรยกวา โพร

Page 50: 2301170 Computer and Programming

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

Page 51: 2301170 Computer and Programming

2.1. ขายงานคอมพวเตอร 33

รปท 2.3: แผนภาพการเชอมตอเครอขายอนเทอรเนตระหวางประเทศ2

ระหวางศนยวจยและมหาวทยาลยตางๆ ซงตงอยหางจากกน ในระยะเรมแรกนน ARPANET เปนการเชอมตอระหวางมหาวทยาลยและหนวยงานทางทหารเทานน หลงจาก ARPANET เรมตน กมขายงานขององคกรตางๆ เขามาเชอมตอเพมขน องคกรเอกชนและบรษทตางๆ เรมมการสรางขายงาน และลากสายสญญาณเชอมตอดวยตนเอง กลายเปนขายงานขนาดใหญขนเรอยๆ ดงรปท 2.2 จนกลายเปนอนเทอรเนตในทสด

รปท 2.3 แสดงการเชอมตออนเทอรเนตระหวางประเทศของไทย วงกลมสนำเงน และสเหลยมสเทาในรปคอเกตเวย หรอชองทางการเชอมตอระหวางเครอขาย วงกลมขนาดใหญสนำเงนตรงกลางคอเกตเวยออกตางประเทศ จะเหนไดวามเสนเชอมจำนวนมากกบเกตเวยของตางประเทศ สวนวงกลมเลกสนำเงนรอบวงกลมใหญคอเกตเวยของผใหบรการอนเทอรเนตในประเทศ ซงจะเชอมตอระหวางเกตเวยออกตางประเทศอกและผใชบรการ

ลองคดหากตองการควบคมอนเทอรเนต เชน สกดกนการไหลของขอมล ตดการเชอมตอระหวางเครองเปาหมายจะตองทำอยางไร

2สำนกงานเทคโนโลยอเลกทรอนกสและคอมพวเตอรแหงชาต, มถนายน 2559.

Page 52: 2301170 Computer and Programming

34 บทท 2. ระบบอนเทอรเนต

2.2 การทำงานของอนเทอรเนตการรบสงขอมลในอดต เชน การสงขอมลเสยงผานสายโทรศพท ใชระบบสลบวงจร (circuit switch-ing) ซงจะจองวงจรสำหรบการสอสารไวตลอดเวลา ไมสามารถแบงปนชองสญญาณกบผสอสารคอนๆได หากมผตองการสอสารเปนจำนวนมากกจะตองใชชองสญญาณเปนจำนวนมากตามไปดวย แมวาระหวางการสอสารนนจะมการรบสงขอมลไมมาก หรออาจจะไมมการรบสงขอมลตลอดเวลากตาม

การรบสงขอมลในขายงานอนเทอรเนตใชระบบการสลบกลมขอมล (packet switching) โดยแบงขอมลทตองการสงออกเปนชนยอยๆ (packet) แลวสงขอมลยอยเหลานไปตามชองทางการสอสารตางๆ ซงไมจำเปนตองเปนชองทางเดยวกน แลวไปรวมเปนขอมลตงตนอกครงทปลายทาง การรบสงขอมลดวยวธนทำใหผใชหลายๆ รายสามารถใชชองทางการสอสารรวมกนได

เมอมการแบงขอมลออกเปนชนยอยๆ และแยกสงไปตามชองทางตางๆ ทำใหตองมการออกแบบวธการสงขอมลใหไปถงปลายทาง และวธการรวมขอมลทปลายทาง วธการเหลานถกกำหนดอยในโพรโทคอลตางๆ ในการสอสาร

การออกโพรโทคอลเดยวควบคมขนตอนการรบสงขอมลทงหมดนนจะทำใหโพรโทคอลซบซอนรวมทงมขอจำกดดานฮารดแวร และรปแบบของขายงานเฉพาะทแตละแหงทอาจแตกตางกน ระบบอนเทอรเนตในปจจบนจงแบงการทำงานออกเปนระดบชน และกำหนดโพรโทคอลสำหรบชนตางๆ เพอใหสามารถปรบใชงานไดกบฮารดแวรและขายงานทหลากหลาย

ในมมมองของซอฟตแวรนน หากตองจดการตดแบงขอมล กำหนดเสนทางขอมล และสงขอมลดวยจะทำใหการออกแบบซอฟตแวรซบซอนมาก นอกจากน คอมพวเตอรหนงเครองนนอาจตองการการเชอมตอมากกวาหนงชองทาง เชน ซอฟตแวรฟงเพลง ตองการเชอมตอกบเครองบรการเพลง ในขณะทเวบเบราวเซอรตองการตดตอกบเครองบรการเวบ แตซอฟตแวรฟงเพลงกบเบราวเซอรนนมวธรบสงขอมลกบเครองบรการทแตกตางกน หากผพฒนาซอฟตแวรทกรายตองเขยนคำสงสำหรบจดการเรองทงหมดเหลานเอง จะมบางสวนทซำซอนกนเปนจำนวนมาก งานการจดการเหลานจงอยกบระบบปฏบตการและซอฟตแวรระบบตางๆ

ชดโพรโทคอลอนเทอรเนต (Internet protocol suite) แบงการทำงานออกเปน 4 ระดบ ไดแกระดบโปรแกรมประยกต ระดบการขนสง ระดบอนเทอรเนต และระดบการเชอมตอ

2.2.1 ระดบโปรแกรมประยกต (Application layer)ในระดบนจะกำหนดรปแบบสวนตอประสานเพอรบสงขอมลระหวางซอฟตแวรตนทางกบปลายทาง จากรปท 2.4 เครองผใชตองการเลนเพลง และเปดเวบไซต โปรแกรมเลนเพลงจะตองสงคำสงไปยงเครองบรการเพลง เพอใหสงเพลงกลบมา ในขณะทเวบเบราวเซอรกตองสงคำสงรองขอหนาเวบไปยงเครองบรการเวบ และนำผลกลบมาแสดงเชนกน วธการสงคำสงและตวคำสงสำหรบโปรแกรมเลนเพลงกบเวบเบราวเซอรนนตางกน แตละโปรแกรมจะมโพรโทคอลของตนเองในการตดตอกบเครองบรการ โพรโทคอลเหลานเปนโพรโทคอลในระดบโปรแกรมประยกต ตวอยางของโพรโทคอลในระดบน เชน

Page 53: 2301170 Computer and Programming

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) ตดขอมลทรบมาจากระดบโปรแกรมประยกตออกเปนกลมขอมลยอยเพอนำสงปลายทาง และในทางกลบกน ทฝง

Page 54: 2301170 Computer and Programming

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

Page 55: 2301170 Computer and Programming

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) แตขนาดของซองจดหมายหรอกลองพสดนนมมาตรฐานอย หากขอมลมขนาดใหญเกนกวาจะบรรจลงซองได ก

Page 56: 2301170 Computer and Programming

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 คน และทกคนตองการคยโทรศพทพรอมๆ กน นสตตองมสายโทรศพทเชอมตอกนทงหมดกค จงจะ

Page 57: 2301170 Computer and Programming

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

นอกจากเลขทอยไอพของผใชแลว เลขทอยไอพของเครองทใหบรการบางอยาง เชน เกตเวย ซงเปนประตเชอมตอขายงานภายในกบขายงานภายนอก ดเอนเอส ซงเปนบรการชอโดเมน กจะอำนวยความสะดวกในการสรางการเชอมตอตางๆ ไดดยงขน จงควรกำหนดคาเหลานกอนเรมใชงานอนเทอรเนต

Page 58: 2301170 Computer and Programming

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 เปนบรการดเอนเอสของกเกล

Page 59: 2301170 Computer and Programming

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

Page 60: 2301170 Computer and Programming

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 ได อนเทอรเนตของนสตมปญหาทสวนใดหรอไม ลองใหเหตผลประกอบ

Page 61: 2301170 Computer and Programming

บทท 3การแทนขอมลในคอมพวเตอร

วตถประสงคการเรยนรอธบายแนวคดของการเกบขอมลในภาษาโปรแกรม การแทนขอมลในคอมพวเตอร และความแตกตางระหวางขอมลชนดตางๆ

1. อธบายเหตผลทตองกำหนดชนดของขอมลเมอทำงานกบคอมพวเตอรได และเลอกใชชนดของขอมลไดเหมาะสมกบขอมลและรปแบบการใชงาน

2. อธบายการใชพนทในหนวยความจำสำหรบการเกบขอมลได เรยกใชใชขอมลโดยผานการอางองถงทอยไดถกตอง

ใชเวลารวม 3 คาบ

3.1 บตและไบตขอมลในคอมพวเตอรเกบอยในรปของเลขฐานสองเนองมาจากเทคโนโลยดจทลทใชสวตชสถานะปดและเปดในการเกบขอมล สวตชหนงตวแทนขอมลได 2 รปแบบ หากตองการแทนขอมลทมรปแบบมากกวานกตองใชสวตชหลายตวประกอบกน การแทนขอมลดวยสถานะเปดปดนเทยบไดกบการแทนขอมลดวยเลขฐานสองหนงหลก เราจงมหนวยเรยกความจขอมลนวาความจขอมลขนาดหนงบต

ขนาดของหนวยความจำทใชในการเกบอกขระ 1 ตวคอ 7 บต แตเรามกกำหนดใหขนาดของขอมลเปนกำลงของสอง จงใชขนาด 8 บต (23) แทนอกขระหนงตว เรยกวา 1 ไบต (byte) เราจงมกนบขนาดของหนวยความจำเปนไบต เพอใหเทยบเคยงกบการนบขนาดของขอความเปนจำนวนตวอกษร เชนขอความ 200 ตวอกษร จะใชพนทในการเกบ 200 ไบต เปนตน

ความจขอมลทใหญขน จะสามารถแทนรปแบบของขอมลไดมากขน ตวอยางจำนวนรปแบบของขอมลทสามารถแทนไดเมอมหนวยความจำขนาดตางๆ ดงตารางท 3.1

Page 62: 2301170 Computer and Programming

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) ใหดวย ความจของชนดขอมลในแตละเครองอาจไม

Page 63: 2301170 Computer and Programming

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 รปแบบ

Page 64: 2301170 Computer and Programming

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

ปญหาถดมาในการจดการกบสายอกขระซงมความยาวไมแนนอนคอ ไมรขอบเขตสนสดของขอมลหากจองพนทไวสบตว แตขอมลมแคสามตว คอมพวเตอรไมสามารถแยกแยะไดวาขอมลจะสนสดทใด จง

Page 65: 2301170 Computer and Programming

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_

๐๑

๒๓

๔๕

๖๗

๘๙

๚๛

Page 66: 2301170 Computer and Programming

48 บทท 3. การแทนขอมลในคอมพวเตอร

จำเปนตองมอกขระวางเปนอกขระพเศษเพอบอกขอบเขตของขอมลดวย ดงนน การจองพนทในการเกบขอมลชนดสายอกขระ จงตองเผอสำหรบเกบอกขระปดทายขอมลดวย อกขระวาง (null character -NUL) มในรหสอกขระหลายรปแบบ ในรหสแอสกและรหสยนโคด คอ 0x0000 และ 0x00000000ตามลำดบ

ตวอยางเชน การเกบขอความ “ภาษาไทย” ดวยรหสอกขระ ISO8859-11 จะใชพนท 7+1=8 ไบตการแทนขอมลประเภทขอความทเปนตวเลขตางกบการแทนขอมลประเภทจำนวน การแทนขอมล

แบบสายอกขระจะใชรหสเลขฐานสองหนงคาตอตวเลขหนงหลก และตองใชอกขระปดทายดวย ในขณะทการแทนขอมลแบบจำนวนจะใชรหสเลขฐานสองหนงคาตอจำนวนนนทงจำนวน

ลองคดแฟมขอมลทเกบขอความภาษาองกฤษและบนทกดวยรหสแอสก จะสามารถเปดอานแบบรหสยนโคด 16บตไดถกตองหรอไม เพราะเหตใด

3.4 ขอมลชนดตรรกะขอมลชนดตรรกะมคาทเปนไปไดเพยงสองคา คอ จรง และ เทจ จงใชพนทเกบขอมลเพยงหนงบตกเพยงพอ แตการใชพนทเพยงหนงบตอาจทำใหการประมวลผลโดยหนวยประมวลผลกลางไมสะดวก โดยมากจงมกใชพนทเทากบจำนวนเตมปกต บางภาษาโปรแกรมจะใชจำนวนเตมแทนขอมลชนดตรรกะ โดยกำหนดให 0 แทนคาเทจ และคาอนๆ นอกจาก 0 แทนคาจรง

ขอมลชนดตรรกะพบมากในการทำงานแบบเงอนไข ซงการตรวจสอบเงอนไขจะไดคาจรงหรอเทจเพอเลอกเสนทางการทำงานตามตรรกะทไดตอไป

นอกจากชนดของขอมลพนฐานขางตนแลว ยงมชนดขอมลทซบซอนอกหลายรปแบบทใชในการเขยนโปรแกรม เชน แถวลำดบ รายการ ระเบยน ออบเจกต ซงอยนอกเหนอขอบเขตของวชาน

3.5 ตวแปร3.5.1 การอางถงขอมลและการจองพนทในหนวยความจำการดำเนนการใดๆ ของคอมพวเตอรจะเรยกใชขอมลจากหนวยความจำเสมอ จงตองมการจองพนทในหนวยความจำเพอเกบขอมล และกำหนดคาใหพนทนนกอนนำไปใชงานเสมอ การอางองถงขอมลนนทำไดดวยอางถงเลขทอย (address) ของหนวยความจำ เพอนำคา (value) ทเกบไว ณ ตำแหนงนนมาใชงาน เมอเรมโปรแกรม ระบบปฏบตการจะจองพนทในหนวยความจำใหสำหรบโปรแกรมใชงาน

ในขนตอนการเขยนโปรแกรมจะมการระบพนททตองการใช การอางองถงพนทเหลานทำโดยประกาศตวแปรขนแทนการเกบขอมลตางๆ ชอตวแปรมกเปนภาษาองกฤษความยาวไมมาก และสอถงขอมลทเกบอยในหนวยความจำนน

Page 67: 2301170 Computer and Programming

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)

Page 68: 2301170 Computer and Programming

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”

Page 69: 2301170 Computer and Programming

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

Page 70: 2301170 Computer and Programming
Page 71: 2301170 Computer and Programming

บทท 4การทำงานแบบลำดบ

วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปการทำงานแบบลาดบ

1. ใชตวดำเนนการตางๆ เพอกำหนดการทำงานตามทตองการได รวมถงใชสญลกษณของผงงานไดถกตอง

2. อานรหสเทยมหรอผงงานทใชการทำงานแบบลำดบได ดดแปลงหรอแกไขผงงานทมอยแลวใหทำงานไดถกตองตามตองการ

3. เขยนขนตอนการแกปญหาทใชการทำงานแบบลำดบได4. เขยนคำสงภาษาซได

ใชเวลา 3 คาบ

4.1 ตวดำเนนการโปรแกรมคอมพวเตอรเปนชดคำสงซงใหคอมพวเตอรทำงานตามทกำหนด การเขยนโปรแกรมเพอแกปญหาตางๆ นน ตองรกอนวาคอมพวเตอรสามารถทำอะไรไดบาง และจะสงการใหคอมพวเตอรทำงานเหลานนไดอยางไร จากนนจงสรางชดคำสงซงมลำดบการทำงานทถกตองเพอการแกปญหาทตองการ

การสงใหคอมพวเตอรทำงานงานพนฐานจำนวนหนงใชการสงผานตวดำเนนการ (operator) โดยใหดำเนนการกบตวถกดำเนนการ (operand) ซงเปนขอมลทเกบอยในหนวยความจำโดยอางถงผานตวแปรกได หรอเปนคาคงทกได เชน x + 3 มตวดำเนนการคอเครองหมาย + และตวถกดำเนนการคอคาในตวแปร x และคาคงท 2 ตามลำดบ

นอกจากตวดำเนนการซงใชสำหรบทำงานพนฐานแลว ยงมฟงกชนซงเปนชดคำสงทรวมขนตอนการทำงานพนฐานเอาไวเพอทำงานบางอยางอกดวย การเรยกใชฟงกชนจะกลาวถงในบทท 8

Page 72: 2301170 Computer and Programming

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 เรมจากการยกกำลง ซงบางภาษาโปรแกรมเชนภาษาซสรางเปนฟงกชนมาใหใชงานจงมลำดบความสำคญของฟงกชนสงจะกวาการคำนวณเบองตนตางๆ อยแลว การคณและหารทกรปแบบ ตามดวยบวกและลบ

หากมตวดำเนนการยกกำลงแยกตางหาก ไมเปนฟงกชน กฎการจดหมของการยกกำลงคอทำทางขวากอน สวนตวดำเนนการบวก ลบ คณ และหาร ทำทางซายกอนเสมอ

Page 73: 2301170 Computer and Programming

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

Page 74: 2301170 Computer and Programming

56 บทท 4. การทำงานแบบลำดบ

4.1.4 การกำหนดคาการกำหนดคาในภาษาโปรแกรมและผงงานสวนมากใชตวดำเนนการ = หรอ := และมตวถกดำเนนการสองตว ซงหมายถง การนำคาของตวถกดำเนนการทางขวา ในรหสคำสงท 4.1 คอ source ไปเกบในทอยของตวดำเนนการทางซาย ในทนคอ target ตวถกดำเนนการทางขวาอาจะเปนตวแปร คาคงทหรอนพจนกได

target = source

รหสคำสงท 4.1: การกำหนดคาการกำหนดคามลำดบความสำคญตำทสดในบรรดาคำสงและตวดำเนนการทงหมดทกลาวมาแลว ซง

ทำใหการกำหนดคาตองทำนพจนทางขวาใหเปนผลลพธกอน แลวจงดำเนนการกำหนดคาใหพนททจองไวซงระบดวยตวแปรทางซายของตวดำเนนการ

4.1.5 การอานเขยนขอมลเบองตนจากทกลาวไปแลวในบทท 1 และ 3 การทำงานกบขอมลของคอมพวเตอรนนจะเกบขอมลในหนวยความจำเสมอ ซงสามารถอางถงหนวยความจำนนไดผานตวแปร การอานหรอรบขอมลเขามาเกบอยในคอมพวเตอร จงเปนการรบขอมลจากอปกรณภายนอกแลวนำมาเกบในหนวยความจำ ณ ตำแหนงทกำหนดดวยชอตวแปร ในขณะทการเขยนขอมล คอการนำคาทเกบอยในหนวยความจำซงอางถงดวยชอตวแปรออกมาแสดงผลผานอปกรณทกำหนด โดยปกตแลว วธการอานเขยนขอมลจะเปนฟงกชนอยในคลงโปรแกรม

การอานขอมลครงหนงสามารถอานคาไดมากกวาหนงคา และตองใชตวแปรจำนวนเทากนในการรบคาทอานเขามาดวย ในทำนองเดยวกน การเขยนขอมลกเขยนไดมากกวาหนงคาในหนงครง และตองระบคาทตองการใหเขยนทกคาลงไป สำหรบการเขยนขอมลนน นอกจากจะเขยนคาทเกบอยในตวแปรโดยตรงไดแลว ยงสามารถเขยนคาคงท และเปนนพจนตางๆ ซงถกทำใหเปนผลสำเรจและกลายเปนคาคงทไดอกดวย

ลองคดจะเหนวาตวดำเนนการตางๆ โดยเฉพาะการคำนวณใชกบขอมลชนดจำนวนเปนหลก เราสามารถใชตวดำเนนการเพอการคำนวณกบขอมลชนดอกขระไดหรอไม จงใหเหตผลประกอบ

4.2 การออกแบบโปรแกรมการแกปญหาโดยคอมพวเตอรคอการเขยนลำดบการทำงานอยางเปนขนเปนตอนเพอใหคอมพวเตอรทำตาม เมอสามารถแทนขอมลเพอใชในการทำงานของคอมพวเตอรไดแลว ลำดบตอไปคอการนำการดำเนนการตางๆ มาเรยงเปนขนตอนเพอแกปญหาทกำหนด

Page 75: 2301170 Computer and Programming

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

Page 76: 2301170 Computer and Programming

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 เปนตน

ไมวาจะใชแผนภาพรปแบบใดกตาม สงสำคญคอตองใชสญลกษณทเปนมาตรฐานเพอใหเขาใจไดตรงกน วางโครงใหสะอาดสะอาน อานงาย ระบชอผเขยนและวนทปรบปรงแกไขไวเสมอเพอการตดตามในอนาคต

Page 77: 2301170 Computer and Programming

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

จดเชอมตอขามหนา ตองเขยนหมายเลขอางองการเชอมตอไวภายในสญลกษณเสมอ ใชแทนการสนสดการทำงานในหนาตนทาง และใชแทนการเรมตนการทำงานในหนาปลายทาง และตองใชหมายเลขอางองเดยวกนทงตนทางและปลายทาง

Page 78: 2301170 Computer and Programming

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

Page 79: 2301170 Computer and Programming

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 การตรวจสอบโปรแกรมจากขอผดพลาดทงสามรปแบบนน ขอผดพลาดทางโครงสรางภาษาเปนขอผดพลาดทตรวจพบไดงายทสด เพราะโปรแกรมแปลภาษาจะแจงใหทราบทนท แตขอผดพลาดทางตรรกะและขอผดพลาดขณะทำงานนนตองอาศยขอมลทดสอบจงจะตรวจสอบได

หากชดทดสอบนนครอบคลมขอมลทกรปแบบทเปนไปได เราจะสามารถยนยนไดวาโปรแกรมทำงานถกตองแนนอน แตสวนใหญขอมลทเปนไปไดจะมไมจำกด การเลอกตวอยางขอมลเพอมาทดสอบจงควร

Page 80: 2301170 Computer and Programming

62 บทท 4. การทำงานแบบลำดบ

ตารางท 4.5: การตรวจสอบคาตวแปร สำหรบตวอยางท 4.1

คำสง num1 num2 outREAD num1, num2out = num1 + num2WRITE out

รปท 4.3: ตวอยางการทำงานของโปรแกรมตรวจแกจดบกพรอง

เลอกใหครอบคลมกรณตางๆ อยางครบถวน เชน ขอบของคาตางๆ กรณทเปน 0 ซงมกมปญหากบการหาร กรณทขอมลเปนลบ กรณทขอมลเตมหรอเกนจำนวนทนาจะเกบได

หลงจากเลอกชดขอมลทดสอบไดแลว จะเปนการทดลองใหโปรแกรมทำงานดวยขอมลทดสอบ หากเปนผงงาน เราอาจจำลองการทำงานไดโดยตารางตรวจสอบคาตวแปร ใหแตละบรรทดในตารางแทนคำสงตางๆ และคอลมนในตารางแทนตวแปร คาในชองของตารางจะเปนคาของตวแปรนนเมอทำคำสงเสรจตารางท 4.5 เปนตารางตรวจสอบคาตวแปรสำหรบตวอยางท 4.1

โปรแกรมตรวจแกจดบกพรอง (debugger) เปนโปรแกรมททำงานแบบเดยวกบตารางตรวจสอบคาตวแปร โดยโปรแกรมจะทำงานไปทละคำสง และแสดงคาในตวแปรแตละตวใหเหน ซอฟตแวรเพอพฒนาโปรแกรมในปจจบนมกจะรวมโปรแกรมตรวจแกจดบกพรองนเขาไปดวย รปท 4.3 เปนซอฟตแวรเพอพฒนาโปรแกรมของภาษาไพธอน ซงกำลงตรวจแกจดบกพรองอย ฝงซายของจอภาพแสดงรหสคำสง และสามารถสงทำงานทละบรรทดได ฝงลางขวาแสดงสวนของรหสคำสงทกำลงทำงาน สวนฝงขวาบนแสดงรายการตวแปรและคาของตวแปรขณะกำลงทำงาน

Page 81: 2301170 Computer and Programming

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โครงสรางคำสงในภาษาซจะปดทายคำสงดวย ; เสมอ

Page 82: 2301170 Computer and Programming

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

Page 83: 2301170 Computer and Programming

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

Page 84: 2301170 Computer and Programming

66 บทท 4. การทำงานแบบลำดบ

8. วชาหนงมคะแนนเตม 100 คะแนน แบงเปนคะแนนเกบ 20 คะแนน คะแนนสอบกลางภาค 40คะแนน และคะแนนสอบปลายภาคอก 40 คะแนน เงอนไขการผานวชานคอตองมคะแนนรวมไมนอยกวา 50 คะแนน โดยตองไดคะแนนสอบกลางภาคไมนอยกวาครงหนง และคะแนนสอบปลายภาคไมนอยกวาครงหนง จงเขยนนพจนทใหคาจรงเมอคะแนนของนสตเขาเงอนไขการผานวชานใหออกแบบการรบขอมลและตวแปรสำหรบเกบขอมลตาง ๆ เองทงหมด

9. เดอนกมภาพนธในปอธกสรทนจะม 29 วน ปอธกสรทนคอปครสตศกราชทหารดวย 4 ลงตวแตหารดวย 100 ไมลงตวหรอเปนปทหารดวย 400 ลงตว หากใหตวแปร year เกบคาปครสตศกราชเปนจำนวนเตมบวก จงเขยนเงอนไขทใหคาจรงเมอ year เปนปอธกสรทน และใหคาเทจเมอ year เปนปทวไป และเขยนชดขอมลทดสอบเพอตรวจสอบวานพจนทเขยนถกตองหรอไม

Page 85: 2301170 Computer and Programming

บทท 5การทำงานแบบทางเลอก

วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปการทำงานแบบทางเลอก

1. แกปญหาทตองใชการทำงานแบบทางเลอกได เขยนอธบายขนตอนดวยผงงานหรอรหสเทยมได2. อานสวนของโปรแกรมภาษาซเพอทำงานแบบทางเลอกเขาใจ และสามารถบอกผลของการทำงาน

ไดถกตอง3. เขยนโปรแกรมภาษาซเพอแกปญหาทตองใชการทำงานแบบทางเลอกได

ใชเวลารวม 6 คาบ

5.1 โครงสรางการทำงานแบบเงอนไขสองทางเลอกการทำงานแบบเงอนไขสองทางเลอก คอการทำงานแบบมทางเลอกสองทาง และใชเงอนไขซงมคาทเปนไปไดสองรปแบบในการเลอกการทำงาน เชน

• หากไดคะแนนอยางนอยรอยละ 90 จะไดเกรด A และจะไมไดเกรด A หากไดคะแนนนอยกวานทางเลอกรปแบบนคอการเลอกกำหนดคาผลลพธโดยขนกบเงอนไขคะแนนทได

• ในระบบสบนำเขาถงเกบนำ ปมจะหยดสบนำเขาโดยอตโนมตหากระดบนำในถงถงขดทกำหนดทางเลอกรปแบบนคอเลอกทจะทำงาน (สบนำ) หรอไมทำงาน ขนกบเงอนไขคาจากตววดระดบนำ

โครงสรางการทำงานแบบเงอนไขจะประกอบดวยเงอนไข และทางเลอกในการทำงาน โครงสรางการทำงานแบบเงอนไขอยางงายจะประกอบดวยเงอนไข 1 เงอนไข ซงเปนนพจนตรรกศาสตร มคาทเปนไปได2 คา คอ จรง หรอ เทจ และทางเลอกในการทำงาน 2 ทาง ทางแรกทำเมอเงอนไขเปนจรง และทางทสองทำเมอเงอนไขเปนเทจ เขยนเปนผงงานไดดงรปท 5.1

Page 86: 2301170 Computer and Programming

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 เปนคาตรรกะจรงหรอเทจ เราสามารถใชการทำงานแบบสองทางเลอกกบผลลพธรปแบบอนทไมใชคาจรงหรอเทจไดหรอไม ใหเหตผลประกอบ

Page 87: 2301170 Computer and Programming

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

Page 88: 2301170 Computer and Programming

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

Page 89: 2301170 Computer and Programming

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)

Page 90: 2301170 Computer and Programming

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 งานทตองทำเปนการทำงานแบบเงอนไข เปนตน □

Page 91: 2301170 Computer and Programming

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

Page 92: 2301170 Computer and Programming

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 จะเปดวงเลบปกกาขางหลงเงอนไข และ

Page 93: 2301170 Computer and Programming

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

Page 94: 2301170 Computer and Programming

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 นนคอเปรยบเทยบคาในตวแปรทละคา เรยงจากทางเลอกแรกไปจนกวาจะไดทางเลอกทตองการ

Page 95: 2301170 Computer and Programming

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 แทนวนอาทตย

Page 96: 2301170 Computer and Programming

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. จงเขยนผงงานเพอสรางเครองคดเลขททำการบวก ลบ คณ หาร ยกกำลง จำนวนไมเปนลบสอง

Page 97: 2301170 Computer and Programming

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 หลก)

Page 98: 2301170 Computer and Programming

80 บทท 5. การทำงานแบบทางเลอก

11. มกลองทรงสเหลยมมมฉากขนาดกวาง a ยาว b และสง c ตองการหอกลองนดวยกระดาษสเหลยมมมฉาก จงเขยนผงงานเพอตดสนใจวาจะตองใชกระดาษขนาดเลกทสดเทาไรจงจะหอกลองนไดพอดโดยไมตองตด

Page 99: 2301170 Computer and Programming

บทท 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: การหาจดสมดลของคาน

Page 100: 2301170 Computer and Programming

82 บทท 6. การทำงานแบบวนซำ

ตารางท 6.1: ตวอยางการทำงานแบบวนซำ

ขอ สงทตองทำซำ เงอนไขในการทำซำ/เลกทำซำ1 การขยบตำแหนงซาย/ขวา ทำตอเมอคานยงไมสมดล ณ จดปจจบน2 การหยดสาร เลกทำเมอเกดปฏกรยาเคม3 การรบขอมลเกรด ทำตอเมอขอมลยงไมครบ 20 รายวชา

การทำงานแบบวนซำจะประกอบดวย สงทตองทำซำ และเงอนไขในการทำซำหรอเลกทำซำ จากสามตวอยางขางตน อาจเขยนสงทตองทำซำ และเงอนไขในการทำซำหรอเลกทำซำไดดงตารางท 6.1

จากองคประกอบน จะเหนวาการทำงานแบบวนซำตองมเงอนไขประกอบเสมอ โดยเงอนไขจะเปนตวกำหนดวาตองทำซำตอหรอเลกทำซำ โครงสรางผงงานสำหรบการทำงานแบบวนซำจงประกอบดวยการทำงานแบบลำดบซงมการทำงานแบบเงอนไขอยางนอยหนงเงอนไขเปนองคประกอบ และเมอทำงานครบทกลำดบแลวจะยอนกลบไปเรมทำทลำดบแรกอกครง ตวอยางเชน ลำดบขนตอนอยางงายของการทำงานในขอแรกของตารางท 6.1 (รปท 5.3) เขยนไดดงน

1. เปรยบเทยบโมเมนตฝงซายและฝงขวา ตรวจสอบความสมดลของคาน หากสมดล จบการทำงานหากไมสมดล ทำขอ 2

2. ขยบตำแหนงรองไปฝงทมโมเมนตมากกวา

ถงแมการเขยนผงงานจะสามารถเขยนเงอนไขไวสวนใดในลำดบกไดกตาม เพอใหผงงานเปนระเบยบเรยบรอย และเชอมโยงกบการเขยนโปรแกรม เรามกตรวจสอบเงอนไขกอนเรมตนการทำซำ และเรยกโครงสรางลกษณะนวา การทำซำแบบทดสอบกอนทำ หรอตรวจสอบเงอนไขเปนงานสดทายกอนกลบไปเรมทำซำรอบใหม และเรยกโครงสรางลกษณะนวา การทำซำแบบทดสอบหลงทำ ดงรายละเอยดในหวขอตอไป

ลองคดการทำงานใดๆ นนจะมจดเรมตนและจดสนสดเสมอ ปญหาหนงทมกพบเมอมโครงสรางแบบวนซำ คอเกดการวนซำไมรจบ สาเหตของการวนซำไมรจบคอผลลพธของเงอนไขคงเดมเสมอในทกรอบของการวนซำ เราจะปองกนปญหานไดอยางไร

6.2 การทำซำแบบทดสอบกอนทำและทดสอบหลงทำโครงสรางการทำซำในภาษาโปรแกรมแบงตามตำแหนงการวางเงอนไขทดสอบไดสองรปแบบ คอทดสอบกอนเรมทำซำ และทดสอบหลงจากทำซำครบรอบ

Page 101: 2301170 Computer and Programming

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(ก)

Page 102: 2301170 Computer and Programming

84 บทท 6. การทำงานแบบวนซำ

ไมพบปฏกรยาเคม

เตมสารT

F

(ก) เมอไมมปฏกรยาเคมใหเตมสาร

พบปฏกรยาเคม

เตมสารF

T

(ข) เมอมปฏกรยาเคมใหหยดเตมสาร

รปท 6.3: สวนของผงงานแสดงการเตมสารเคมจนกวาจะเกดปฏกรยา

งานทตองทำซำ

เงอนไขในการทำซำ F

T(ก) โครงสรางการวนซำโดยใชเงอนไขใหทำซำตอ

งานทตองทำซำ

เงอนไขในการเลกทำซำ T

F(ข) โครงสรางการวนซำโดยใชเงอนไขใหเลกทำซำ

รปท 6.4: โครงสรางการทำซำแบบทดสอบหลงทำ

และ 6.4(ข) ตามลำดบ

6.2.3 เปรยบเทยบการทำซำแบบทดสอบกอนทำและทดสอบหลงทำในการออกแบบการทำงานนน จะเลอกการทำงานแบบทดสอบกอนหรอหลงทำกได ขอสงเกตหนงคอการทำซำแบบทดสอบหลงทำ จะมการทำซำอยางนอย 1 รอบเสมอ ในขณะทการทำซำแบบทดสอบกอนทำจะตรวจสอบเงอนไขกอน จงอาจจะไมเกดการทำซำเลยกได หากตองการทำซำอยางนอย 1 รอบ ไมวาจะเลอกโครงสรางแบบใดกใหผลลพธทเหมอนกน

โครงสรางการทำซำแบบทดสอบกอนทำทมกพบในภาษาโปรแกรมคอโครงสราง while-do ซงหมายถงในขณะทเงอนไขยงคงเปนจรงอย ใหทำซำไปเรอยๆ สวนโครงสรางการทำซำแบบทดสอบหลง

Page 103: 2301170 Computer and Programming

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 ลงตวจงเปนการแจกแจงทกจำนวนในชวงทกำหนด แลวทดสอบการหารลงตว สรปงานทตองทำซำ และเงอนไขในการทำซำไดดงน

Page 104: 2301170 Computer and Programming

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 ซงเมอมองปญหานเปนปญหาการทดสอบจดสมดลและขยบจดหมนของคานไปเรอยๆ จนกวาจะพบจดทสมดล กจะเหนวาปญหานเปนการทำซำรปแบบหนงเชนกน

การออกแบบการทำงานแบบวนซำตองกำหนดสงทตองทำซำและเงอนไขในการทำซำหรอเลกทำซำออกมาใหไดกอน วธตรวจสอบวางานทตองทำซำคออะไร อาจจะลองทำดวยมอไปสกสองสามรอบจนกวาจะเหนรปแบบทเกดซำขน จากนนจงไปดวาเขยนเงอนไขกำกบอยางไร จงจะทำใหรอบของการทำซำเปนไปตามทตองการ

รปแบบการทำซำทพบบอยแบงตามรปแบบของเงอนไขในการทำซำไดดงน

Page 105: 2301170 Computer and Programming

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 (การแสดงรายชอนกเรยนทกคนในลำดบ). กำหนดใหมขอมลแบบลำดบ ซงมตวแจงนบสำหรบแจกแจงขอมลแตละตวในลำดบไดอย การแสดงรายชอนกเรยนทกคนในลำดบจงเปนการสรางตวแจงนบสำหรบลำดบขนมา แลวแสดงขอมลแตละคาทตวแจงนบนนอางถง ไปจนกวาจะครบทกขอมลในลำดบ

Page 106: 2301170 Computer and Programming

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 คน แตละคนสามารถออก คอนหรอ กรรไกร หรอ กระดาษ ได การแพชนะเปนดงน

Page 107: 2301170 Computer and Programming

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

Page 108: 2301170 Computer and Programming

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

Page 109: 2301170 Computer and Programming

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 แบบใชตวแจงนบ

Page 110: 2301170 Computer and Programming

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 แบบใชตวแจงจบ

Page 111: 2301170 Computer and Programming

6.6. โครงสรางการทำซำในภาษาซ 93

ลองคดโครงสรางการทำซำในภาษาซนนเปนแบบทำซำเมอเงอนไขเปนจรงทงหมด หากตองการใชโครงสรางการทำซำเมอเงอนไขเปนเทจ (เลกทำเมอเงอนไขเปนจรง) จะเขยนเปนภาษาซไดอยางไร

แบบฝกหด1. เมอรบจำนวนเขาเปนจำนวนเตมบวกหนงจำนวน จงเขยนผงงานและโปรแกรมภาษาซเพอหาวา

จำนวนทรบเขามานเปนจำนวนเฉพาะหรอไมจำนวนเฉพาะคอจำนวนทมเฉพาะ 1 และตวมนเองเทานนทหารลงตว

2. จงเขยนผงงานและโปรแกรมภาษาซใหผใชปอนจำนวนบรรทดทตองการ แลวพมพอกขระ * ออกมาโดยมลกษณะดงน

6*********************

บรรทดท 1 ม * 1 ตว บรรทดท 2 ม * 2 ตว …(บรรทดท i จะม * i ตว โดยท i เปนจำนวนเตมบวก)

3. เมอใหผใชปอนจำนวนบรรทดเขามา จงเขยนโปรแกรมภาษาซเพอพมพ * ใหเปนรปสามเหลยมหนาจวซงมลกษณะดงน

5*************************

4. ระบบนบถอยหลงจะรบขอมลเปนจำนวนเตมบวกหนงจำนวน แลวนบถอยหลงโดยแสดงคาตงแตจำนวนทรบเขา ลดลงทละหนง จนถง 1 แลวจบการทำงาน จงเขยนผงงานและโปรแกรมภาษาซของระบบนบถอยหลงน

5. ในการแขงขนยมนาสตก จะมกรรมการทงหมด 6 คน แตละคนใหคะแนนไดตงแต 0.0 -10.0 การคดคะแนนของผเขาแขงขนจะตดคะแนนสงสดและตำสดออก แลวหารเฉลยคะแนนของ

Page 112: 2301170 Computer and Programming

94 บทท 6. การทำงานแบบวนซำ

กรรมการทง 4 คนทเหลอ หากมผเขาแขงขนทงหมด 10 คน จงเขยนโปรแกรมเพอหาผชนะเมอผดแลการแขงขนกรอกคะแนนจากกรรมการทง 6 คนของผเขาแขงขนแตละคนใหระบบ

6. เกมทายจำนวนใชผเลนสองคน ผเลนคนแรกจะปอนขอมลตวเลขในใจของตนเองใหกบระบบ จากนนผเลนคนทสองจะทายจำนวนทผเลนคนแรกปอนใหระบบ โดยระบบจะนบจำนวนครงททายจนกวาจะทายถก หากทายไมถก ระบบจะชวยบอกใบดวยการบอกวาคาททายนน มากกวา หรอนอยกวา คาทผคนแรกกำหนดไว หากทายถก ระบบจะแสดงจำนวนครงททายแลวจบการทำงานจงเขยนผงงานและโปรแกรมภาษาซของระบบเกมทายจำนวนน

Page 113: 2301170 Computer and Programming

บทท 7ตวแปรแถวลำดบ

วตถประสงคการเรยนรอธบายการเกบขอมลแบบแถวลำดบ การเกบขอมลสายอกขระ และการใชตวแปรแถวลำดบ

1. กำหนดคาใหตวแปรแถวลำดบ และเรยกใชคาในตวแปรแถวลำดบได2. ประกาศตวแปรแบบแถวลำดบได3. อธบายการเขาถงอกขระตางๆ ในตวแปรแบบสายอกขระได4. อธบายโครงสรางการเกบขอมลแบบแถวลำดบในหนวยความจำ5. ใชแถวลำดบขนาดมากกวาหนงมตได

ใชเวลารวม 6 คาบ

7.1 การเขาถงและการเรยกใชตวแปรแถวลำดบตวแปรโดยปกตทวไปนน จะเกบคาไดหนงคาตอตวแปรหนงตว แตหากขอมลมลกษณะเปนชดซงมหลายคา เราจำเปนตองประกาศตวแปรเทากบจำนวนขอมลทม ซงไมสะดวกในการจดการขอมลซงเปนชดในลกษณะน จงมตวแปรชนดแถวลำดบ (array) ขนมาชวยอำนวยความสะดวกในการจดการตวแปรใหเปนชดๆ

ขอมลแตละตวในตวแปรชนดแถวลำดบจะมลำดบกำกบ เรยกวา ดชน (index) การเขาถงขอมลในแถวลำดบทำไดดวยการอางองชอตวแปรประกอบกบเลขดชนของขอมลนน เขยนไดดงรหสคำสงท 7.1

varname[index]

รหสคำสงท 7.1: การอางถงตวแปรแถวลำดบ

โดยท varname คอชอของตวแปร และ index เปนจำนวนเตมซงเปนเลขดชนของขอมล

Page 114: 2301170 Computer and Programming

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) ซงเขาถงไดตามลำดบจากตนรายการ แตไมสามารถกำหนดดชนเพอเขาถงตำแหนงทตองการไดโดยตรง

Page 115: 2301170 Computer and Programming

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

Page 116: 2301170 Computer and Programming

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]

Page 117: 2301170 Computer and Programming

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 แบบ แยกตามวธกำหนดขนาดของแถวลำดบ ไดแก

แบบกำหนดขนาดลวงหนาดวยคาคงท และแบบระบขนาดเมอทำงาน การประกาศตวแปรแถวลำดบแบบ

Page 118: 2301170 Computer and Programming

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

หากตองการเพมขนาดของแถวลำดบ ตองจองพนทใหมทมขนาดตามตองการ แลวสำเนาคาในแถวลำดบเดมมายงทใหม ระบบปฏบตการอาจไมสามารถใชหนวยความจำในตำแหนงเดมไดเนองจากพนทขางเคยงบรเวณเดมอาจะมขอมลอนอย

Page 119: 2301170 Computer and Programming

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: การแปลงขอความทงหมดใหเปนตวพมพใหญ

Page 120: 2301170 Computer and Programming

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: ฟงกชนตางๆ เกยวกบสายอกขระในภาษาซ

Page 121: 2301170 Computer and Programming

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 เปนจำนวนชวงทตองการแบง จงคำนวณ ∫ �(�) � โดยใชวธการประมาณคาขางตน

Page 122: 2301170 Computer and Programming

104 บทท 7. ตวแปรแถวลำดบ

7. จากการประมาณในสมการ (7.2) นน �( + − 2 ) ⋅ เปนการคำนวณพนทสเหลยมมมฉากทสงเทากบจดกงกลางของแตละชวง เราสามารถประมาณคาใหใกลเคยงขนไดโดยใชพนทของสเหลยมดานขนานทมความสงสองจดเทากบขอบลางและขอบบนของชวงตามลำดบ ลองคำนวณโดยปรบวธการประมาณคาด

Page 123: 2301170 Computer and Programming

บทท 8การเรยกใชฟงกชน

วตถประสงคการเรยนรอธบายการทำงานของโปรแกรมในรปแบบการเรยกใชฟงกชน

1. กำหนดพารามเตอรและรบคาคนจากฟงกชนไดเมอกำหนดตนแบบของฟงกชนมาให2. แยกแยะขอบเขตการใชงานของตวแปรเมอมฟงกชนมาใหได3. เขยนฟงกชนเพอใหทำงานตามทตองการได

8.1 นยามและสญลกษณโปรแกรมยอย (Pre-defined process หรอ subroutine) เปนชดคำสงซงมการกำหนดการทำงานไวลวงหนาแลว โดยมากเรามกแบงโปรแกรมขนาดใหญออกเปนโปรแกรมยอยหลายๆ สวน เพอใหเขาใจไดงาย บำรงรกษาสะดวก นอกจากน สวนของโปรแกรมใดทถกเรยกใชบอย กมกจะถกเขยนแยกออกมาเปนโปรแกรมยอยดวย การใชสญลกษณโปรแกรมยอยแทนขนตอนการทำงานแบบละเอยดทำใหผงงานกระชบ เขาใจงาย ในรหสตนฉบบเองกเชนกน

โปรแกรมยอยกบฟงกชนมลกษณะเปนชดคำสงซงทำงานจบในตวเหมอนกน แตแตกตางกนทฟงกชนนนจะสามารถคนคาไดเชนเดยวกบฟงกชนทางคณตศาสตร แตโปรแกรมยอยจะไมมการคนคา ภาษาโปรแกรมบางภาษา เชน ภาษาซ ใชโครงสรางแบบฟงกชนทงหมด และเพมลกษณะการคนคาชนด voidแทนการไมคนคาเขามา ดงนนบางครงอาจใชคำวาฟงกชนและโปรแกรมยอยแทนกนไดโดยไมผดความหมาย

ผงงานใชสญลกษณสเหลยมมมฉากซงมขอบขางเปนเสนขนานแทนการเรยกใชโปรแกรมยอย และมชอโปรแกรมยอยกำกบในสญลกษณ ซงจะอางองไปถงการทำงานอยางใดอยางหนงซงกำหนดไวในผงงานอนหรอผงงานหนาอน ดงตวอยางในรปท 8.1

Page 124: 2301170 Computer and Programming

106 บทท 8. การเรยกใชฟงกชน

draw(text)

y = f(x)

print()

เกบขอมล

รปท 8.1: สญลกษณการเรยกใชโปรแกรมยอยหรอฟงกชน

เราอาจระบคาตางๆ ทตองการสงใหโปรแกรมยอยหรอฟงกชน และตวแปรสำหรบรบคาคนลงในผงงานดวยกได หรอไมระบกได เพอใหผงงานแสดงขนตอนการทำงานทชดเจน ควรระบคาทรบสง

สญลกษณของโปรแกรมยอยในรหสตนฉบบขนกบภาษาทใช โดยมากจะเปนการประกาศหรอนยามชอกอนใชงาน การอางองถงโปรแกรมยอยหรอฟงกชนทำไดผานชอของโปรแกรมยอยหรอฟงกชนนนในกรณทมการคนคา การเรยกใชฟงกชนนนสามารถมองเสมอนเปนนพจนซงใหผลลพธเปนคาในชนดทกำหนดได

8.2 โครงสรางของฟงกชนและการเรยกใชฟงกชนประกอบดวยองคประกอบหลก 4 สวน ไดแก

1. ชอของฟงกชน มขอกำหนดในการตงเชนเดยวกบตวแปร ในบางภาษาจะยอมใหตงชอฟงกชนซำกนไดหากมพารามเตอรทตางกน เครองจะเลอกฟงกชนทถกตองจากลกษณะของพารามเตอรทปอนเขามาใหเอง บางภาษาเชนไพธอนยอมใหตงชอซำได โดยจะเปนการนยามชอใหมตามการประกาศลาสดทม อยางไรกตาม ควรหลกเลยงการใชชอซำเพอปองกนความสบสนเมอเรยกใช

2. พารามเตอร คอตวแปรสำหรบรบคาทสงเขามาใหใชในฟงกชน จะมหรอไมมกได3. ชนดของคาทสงคนใหตวเรยก หรอไมมหากไมตองการคนคาใดๆ4. ชดคำสงสำหรบขนตอนการทำงานของฟงกชน และคำสงสำหรบคนคา ตวชดคำสงนคอสงทนำไป

เขยนเปนผงงานของฟงกชน

หากเปนโปรแกรมยอย กจะตดสวนการคนคาออกไปได การประกาศฟงกชนโดยทวไปมโครงสรางดงรหสคำสงท 8.1

ชนดของตวแปรคนคา ชอฟงกชน ( ตวแปรรบคา, ตวแปรรบคา, ...)ชดคำสงreturn คาสงคน

รหสคำสงท 8.1: โครงสรางของฟงกชน

การเรยกใชโปรแกรมยอยหรอฟงกชนทำโดยการระบชอโปรแกรมยอยนนในโปรแกรมหลก พรอมทงสงคาตางๆ ทจำเปนไปให ในกรณทเปนฟงกชนและมคาคนกลบมา หากตองการเกบคาไวใชงาน กสามารถตงตวแปรมาแลวกำหนดคาใหเปนผลลพธของฟงกชนได

Page 125: 2301170 Computer and Programming

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

Page 126: 2301170 Computer and Programming

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 ซงไมไดคนคาขอมลทอานผานตวแปรคนคา แตใชการนำขอมลทอานไดไปใสในตำแหนงทระบดวยตวแปรตวชแตละตวแทน

Page 127: 2301170 Computer and Programming

8.4. ขอบเขตของตวแปร 109

จำนวนของตวแปรรบคาขนกบผเขยนโปรแกรมจะกำหนด ชนดของตวแปรแตละตวไมจำเปนตองเหมอนกน การสงคาในตวเรยกจะสงเรยงลำดบตามทกำหนดในฟงกชนหรอโปรแกรมยอย คอ ตวท 1 23 ... ตามลำดบ

8.3.2 การคนคาตวแปรคนคาใชสำหรบสงคาบางอยางคนใหตวเรยกนำกลบไปใชตอ โดยมชนดของตวแปรตามทประกาศไวในฟงกชน นอกจากชนดตวแปรพนฐานแลว สวนของโปรแกรมยอยอาจไมคนคาใดๆเลยกได ในภาษาซกำหนดชนดไมคนคานวา ชนด void

คำสง return ใชสำหรบกำหนดคาใหตวแปรสงคนคา และออกจากการทำงานของฟงกชน หากไมมการคนคา ในกรณทไมตองการคนคา อาจใชคำสง return โดยไมระบคากไดเชนกน

8.4 ขอบเขตของตวแปรตวแปรทใชมสองประเภท แบบแรกคอตวแปรซงใชรวมกนทงโปรแกรม ตวแปรชนดนสามารถเรยกใชจากสวนใดของโปรแกรมกได ไมวาจะเปนโปรแกรมหลกหรอโปรแกรมยอย แบบทสองคอตวแปรเฉพาะท ตวแปรชนดนจะใชไดเฉพาะในสวนทประกาศเทานน ตวแปรทงหมดทประกาศอยในสวนของโปรแกรมยอย หากประกาศใหเปนตวแปรเฉพาะท แมจะเปนชอเดยวกบตวแปรทประกาศทอน คาตางๆจะใชไดในสวนของโปรแกรมยอยนเทานน

หากตองการสงคาจากสวนอนๆของโปรแกรมเขามาใหสวนของโปรแกรมยอย การสงคาทำไดผานตวแปรรบคา ตวแปรรบคานจะใชเฉพาะในสวนของโปรแกรมยอย และไมมการเปลยนแปลงคาของตวแปรนอกสวนของโปรแกรมยอย หากตองการนำคาทคำนวณไดในสวนของโปรแกรมยอยออกไปใชทสวนอนๆ ตองประกาศตวแปรนนใหเปนตวแปรรวม หรอคนคาทคำนวณไดผานตวแปรคนคาไป

8.5 ลำดบการทำงานของฟงกชนการทำงานของโปรแกรมจะเรมทโปรแกรมหลก และมการเรยกใชโปรแกรมยอยตางๆ โปรแกรมยอยเองกสามารถเรยกโปรแกรมยอยอนๆ รวมถงเรยกใชตวโปรแกรมยอยเองไดเชนเดยวกน ในการวเคราะหการเรยกใชโปรแกรมยอย เราแบงโปรแกรมยอยตามลกษณะการทำงานเปน 2 สวน คอ ตวเรยก (caller)และตวถกเรยก (callee) ทงตวเรยกและตวถกเรยกสามารถเปนโปรแกรมยอยใดๆ กได เปนรหสตนฉบบชดเดยวกนกได แตการทำงานจะเปนไปตามลำดบ คอ เรมจากตวเรยกกอน เมอตวเรยกนนเรยกใชตวถกเรยก การทำงานจะขามไปเรมตนทจดเรมตนของตวถกเรยก จนกวาจะเสรจสนการทำงานในสวนของตวถกเรยกแลว จงจะกลบมาทำงานสวนทเหลอของตวเรยกตอ

ตวแปรตางๆ ทประกาศภายในฟงกชนนน จะใชไดในขอบเขตของการทำงานในการเรยกใชครงหนงๆเทานน การเรยกใชโปรแกรมยอยจะเสมอนกบมการสรางชดของตวแปรเฉพาะทสำหรบโปรแกรมยอยนน

Page 128: 2301170 Computer and Programming

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: โปรแกรมแฟกทอเรยล

Page 129: 2301170 Computer and Programming

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) ในหลากหลายภาษา เชน ซ จาวา

Page 130: 2301170 Computer and Programming

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

Page 131: 2301170 Computer and Programming

บทท 9ความปลอดภยและจรยธรรมคอมพวเตอร

วตถประสงคการเรยนรระบปจจยเสยงเกยวกบความปลอดภยของระบบและขอมลคอมพวเตอร จรยธรรมการใชคอมพวเตอรและอาชญากรรมบนอนเทอรเนต

1. อธบายรปแบบการโจมตระบบคอมพวเตอร และขอมลในระบบคอมพวเตอรแบบพนฐาน และวธการปองกนเบองตนได

2. อธบายหลกการแสดงตวและหลกการยนยนตวตนพนฐานในระบบคอมพวเตอรได3. ผเรยนระดบพนฐานควรสามารถอธบายหลกการเขารหสอยางงาย โดยใชกญแจสมมาตร และ

กญแจอสมมาตรได4. เชอมโยงความผดตามพระราชบญญตคอมพวเตอร พ.ศ. 2550 กบวธปองกนตนจากอาชญากรร

รมเหลานได5. อธบายการตดสนใจตามหลกการทางจรยธรรมไดเมอพบกบปญหา

9.1 ความเสยหายตอระบบคอมพวเตอรและขอมลความเสยหายทอาจเกดไดกบระบบคอมพวเตอรมทงความเสยหายในสวนฮารดแวร ซอฟตแวร และความเสยหายโดยตรงกบขอมลทเกบไวในระบบคอมพวเตอร ความเสยหายทเกดขนเปนไดทงในทางตรงเชน ฮารดดสกเสยหายจากการตกกระแทก หรอทางออม เชน ขอมลรวไหลทำใหธรกจเสยหาย เปนตน

ความเสยหายของระบบคอมพวเตอรเกดไดจากหลายสาเหต บางกรณเปนเหตสดวสยไมสามารถปองกนได เชน ภยธรรมชาต หรออปกรณตางๆ เสอมสภาพไปตามอายการใชงาน บางกรณเกดจากความรเทาไมถงการณหรอความประมาทของผใช เชน ไมมการเกบขอมลสำรอง หรอปดระบบคอมพวเตอรไมถกวธแลวทำใหขอมลสญหาย แตบางกรณกเกดจากชองโหวตางๆ ในระบบคอมพวเตอร และมผประสงครายตงใจโจมตทชองโหวเพอสรางความเสยหายใหกบระบบหรอขอมลในระบบ

Page 132: 2301170 Computer and Programming

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) การเผยแพรภาพตดตอ ดดแปลง ซงทำใหผอนเสยหาย

หมวดอนๆ ของพรบ. คอมพวเตอรฯ เปนเรองหนาทของผใหบรการ และอำนาจหนาทของเจาหนาท

Page 133: 2301170 Computer and Programming

9.3. การเขาถงระบบและขอมลคอมพวเตอร 115

9.3 การเขาถงระบบและขอมลคอมพวเตอรความเสยงหนงกบระบบและขอมลคอมพวเตอรคอการเขาถงโดยไมไดรบอนญาตหรอไมสมควร หากผประสงครายสามารถเขาถงระบบคอมพวเตอรได และไดสทธดำเนนการบางอยาง เชน ปดการทำงานบางอยางของระบบ ดดแปลงแกไขขอมล หรอสำเนาขอมลออกไป กอาจสรางความเสยหายใหองคกรได

ในระบบคอมพวเตอรจงมการจำแนกระดบของสทธ (authority) ในการเขาถงขอมลและทรพยากรตางๆ ของระบบ เชน ผใชบรการทวไปควรเขาถงขอมลของตนเองได มสทธใชโปรแกรมได แตไมมสทธเขาดขอมลของผใชอน และไมควรมสทธตดตงโปรแกรมเอง เพอจำกดความเสยหายทอาจเกดขนทงโดยจงใจและไมจงใจ ในขณะทผดแลระบบควรมสทธในการตดตงโปรแกรม ตามพรบ.คอมพวเตอรฯ การเขาถงระบบหรอขอมลเหลานโดยทตนไมมสทธเปนความผดตามมาตรา 5 หรอ 7 แลวแตกรณ

เนองจากจำเปนตองมมาตรการปองกนผใชไมใหเขาถงระบบหรอขอมลโดยทตนไมมสทธ จงตองมการแสดงตวตนของผเขาใชระบบวาเปนใคร (identification) และตรวจสอบวาเปนตวจรงหรอไม(authentication) แตถงแมระบบคอมพวเตอรจะมมาตรการปองกนแลวกตาม มาตรการปองกนเหลานกอาจจะยงมชองโหวอย ผดแลระบบควรตระหนกและหามาตรการเพมเตม สวนผประสงครายทใชชองโหวนในการบกรกเขาสระบบ หรอเขาถงขอมลทตนไมมสทธ กจะมความผดตามพรบ. คอมพวเตอรฯมาตรา 5 หรอ 7 และการเผยแพรมาตรการปองกนทผดแลระบบจดขนไวแกผอน เพอใหผประสงครายรายอนสามารถบกรกเขามาในระบบได เชน การเผยแพรชองโหวของระบบ กมความผดตามพรบ.คอมพวเตอรฯ มาตรา 6 ดวย

ลองคดเมอนสตพบชองโหวของระบบหรอซอฟตแวร นสตควรแจงใหผดแลรบผดชอบระบบหรอซอฟตแวรนนๆดำเนนการแกไข แตชองโหวบางประเภทนนอาจทำใหผใชถกขโมยขอมล หรอสรางความเสยหายกบตวผใชดวย นสตควรเตอนผใชรายอนๆ หรอไม วาซอฟตแวรหรอระบบเหลานมชองโหว หากเตอน ควรใชวธใด และการเตอนจะผดพรบ. คอมพวเตอรฯ วาดวยการเผยแพรชองโหวของระบบหรอไม

9.3.1 การแสดงตวตน (Identification)ในระบบซงมผใชหลายรายนน ผใชแตละรายตองมสงอางองแสดงวาตนเองเปนใคร หากเปนในชวตประจำวน สงระบตวตนของผใชอาจจะเปน ชอ-นามสกล ชอตำแหนง หากเปนในระบบคอมพวเตอรกอาจเปน ชอผใช บตรสมารตการด เปนตน

สงทสามารถระบตวตนของผใชไดนนตองไมซำกบผใชรายอน เพอใหระบบสามารถแยกแยะไดวาผเขาใชระบบนนเปนใคร ตวอยางในชวตประจำวนเชน ชอ-นามสกล นนยงมโอกาสทจะซำกนได ในระบบคอมพวเตอรจงมกสรางชอผใชขนมาใหม เพอใหยนยนไดวาจะไมซำกบชอเดมทมอยแลวแนนอน ในระบบซงมผใชจำนวนมาก การสรางชอผใชจำเปนตองมความยาวทมากพอ เพอใหรบประกนไดวาจะไมซำกบชอเดมทมอย

Page 134: 2301170 Computer and Programming

116 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

การแสดงตวตนเพยงอยางเดยวนนไมเพยงพอในการปองกนการเขาถงระบบและขอมลโดยไมไดรบอนญาต เนองจากสงระบตวตนบางอยางเปนทรบทราบโดยทวไป เชน ชอผใช หรอเลขประจำตว จงตองมระบบยนยนตวตนเพมขน เพอใหแนใจวาผทอางชอนนเปนตวจรงหรอไม

9.3.2 การยนยนตวตน (Authentication)หลกการการยนยนตวตนของผใชแบงออกเปน 3 แบบ ไดแก

1. การสอบถามถงสงทผใชตวจรงเทานนจงจะร เชน รหสผาน2. การขอดสงทผใชตวจรงเทานนทจะม เชน บตรประจำตวประชาชน คยการด3. การตรวจสอบลกษณะของตวผใช เชน ลกษณะเฉพาะบคคลจำพวกลายนวมอ หรอมานตา

วธการบางอยางเปนไดเพยงการระบตวตน แตไมเพยงพอทจะใชยนยนตวตนได เชน การระบชอผใชไดถกตอง แตวธการบางอยางกเปนไดทงการระบและการยนยนตวตน เชน การตรวจสอบลายนวมอ

การแสดงตวตนและยนยนตวตนใชรวมกนเพอยนยนสทธตางๆ ทพงมเมอเขาใชระบบ และเปนการปองกนไมใหผทไมมสทธสามารถเขาสระบบได

9.3.3 ชอผใชและรหสผาน

รปท 9.1: ตวอยาง CAPTCHA

เนองจากชอผใชนนไมไดเปนความลบ ชอผใชและรหสผานมกถกใชคกนในการแสดงตวตนและยนยนตวตน แตหากผประสงครายไดชอผใชไป สงทตองทำในการบกรกเขาสระบบคอพยายามหารหสผานมาใหได วธหนงในการหารหสผานคอทดลองสมไปเรอยๆ (brute force attack) หากรหสผานไมแขงแรงพอ เครองจะสามารถทดลองทละรหสจนครบไดในเวลาอนสน ระบบกจะมความเสยงตอการถกบกรก

ตวอยางของรหสผานทไมแขงแรงหรอไมปลอดภย ไดแก

• คำทวไปทมความหมายในพจนานกรม เพราะเราสามารถใหเครองคอมพวเตอรทดลองคำทละคำในพจนานกรมได

• ขอมลสวนตวของผใช เชน หมายเลขโทรศพท เลขทะเบยนรถยนต เพราะขอมลเหลานไมเปนความลบ

• รหสผานทมความยาวนอยจนเกนไป เนองจากคอมพวเตอรสามารถทดลองไดครบทกรปแบบทเปนไปไดในระยะเวลาอนสน

Page 135: 2301170 Computer and Programming

9.4. การรบกวนระบบและขอมลคอมพวเตอร 117

การปองกนการบกรกเขาสระบบโดยการเดาสมรหสผานนน ผดแลระบบตองมนโยบายบงคบใชรหสผานทแขงแรงพอสมควร ไมอนญาตใหเดาสมรหสผานในจำนวนครงทมากเกนปกต หรออาจใชระบบปองกนการใชคอมพวเตอรกรอกขอมลแทน เชน CAPTCHA (รปท 9.1) เปนตน

ในทางกลบกน การสรางรหสผานทดควรเปนรหสผานทใชคอมพวเตอรเดาสมไดยาก เชน ใชทงตวพมพเลก ตวพมพใหญ ตวเลขผสมกน และมความยาวมากพอ จำนวนรหสทเปนไปไดยอมมากกวาการใชรหสผานเปนตวอกษรพมพเลกเพยงอยางเดยว แตขอเสยของการใชรหสผานทซบซอนคอเจาของรหสผานกอาจจะจำรหสไมไดเชนเดยวกน แนวทางในปจจบนจงมกใชการยนยนตวตนสองชน (two-factorauthentication) เชน ใชรหสผานรวมกบ SMS ผานโทรศพทเคลอนท โดยมสมมตฐานวาผใชตวจรงตองรทงรหสผาน และมโทรศพทเคลอนททลงทะเบยนไวลวงหนาอยในครอบครอง กจะทำใหปองกนการสวมรอยไดดขน

ลองคดรหสเอทเอมในระบบเดมนนเปนเลขจำนวนสหลก หากการเดาสมโดยคอมพวเตอรใชเวลา 0.1 วนาทตอการเดาหนงครง เวลาทมากทสดทคอมพวเตอรตองใชในการเดารหสใหถกเปนเทาใด สมมตวาไมมมาตรการอนๆ ในการปองกนการเดาสมรหส

9.3.4 ประตหลง (Back door)การเขาสระบบโดยปกตจะตองผานการตรวจสอบตวตนของผใชทกครง แตบางระบบอาจจะมทางลบหรอทางลดขนตอนการตรวจสอบเหลานเพอเขาสระบบได เราเรยกชองทางนวาประตหลง

ชองทางนอาจเกดจากผประสงครายใชวธอนๆ เพอเขาสระบบไดแลว และวางประตหลงเอาไวเพออำนวยความสะดวกใหตนเองเมอตองการกลบเขามาในระบบอกครง และหลกเลยงการตรวจจบความผดปกตตางๆ ตามปกตทผดแลระบบอาจจะตงไว แตในบางกรณ ประตหลงกอาจจะเกดจากผพฒนาหรอผดแลระบบจงใจวางเอาไวเอง เพอจะไดไมตองเสยเวลาผานขนตอนตรวจสอบและยนยนตวตนของระบบเมอตองการเขามาทดสอบหรอบำรงรกษาระบบ การประมาทเลนเลอของผพฒนาหรอผดแลระบบเชนนกสรางความเสยหายใหกบองคกรได

9.4 การรบกวนระบบและขอมลคอมพวเตอรตวขอมลทเกบอยในคอมพวเตอรนนมมลคา เชน อาจเปนความลบทางธรกจ หรอขอมลสวนบคคล หากผประสงครายสามารถเขาถงขอมลเหลาน แลวนำไปดดแปลงแกไข หรอลบทงทำลาย กกอใหเกดความเสยหายกบเจาของขอมลได การกระทำเหลานเปนความผดตามพรบ. คอมพวเตอรฯ มาตรา 9

ตวระบบคอมพวเตอรเองนนถกออกแบบมาใหรองรบการใชงานตามปกตของผใช หากมการใชงานทไมปกต หรอการรบกวนระบบ ทำใหการใชงานตามปกตนนเสยไป เจาของระบบรวมถงผใชทวไปยอมเดอดรอน เชน หากระบบธนาคารไมสามารถใหบรการฝากถอนเงนได ทงธนาคารและลกคาของธนาคาร

Page 136: 2301170 Computer and Programming

118 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

ยอมเดอดรอน ผประสงครายจงอาจมงโจมตระบบคอมพวเตอรเพอใหระบบนนไมสามารถทำงานไดตามปกต การรบกวนนมความผดตามพรบ. คอมพวเตอรฯ มาตรา 10

9.4.1 มลแวรมลแวรเปนซอฟตแวรไมพงประสงค ซงทำสงทผใชไมไดตองการ และรบกวนการทำงานโดยปกตของคอมพวเตอร ผประสงครายใชมลแวรเพอวตถประสงคตางๆ กน เชน ลบแฟมขอมลสำคญๆ กอกวนการเชอมตอของขายงาน เพอไมใหระบบทำงานได เขารหสแฟมขอมลของผใช เพอไมใหผใชสามารถใชขอมลได หรอเกบขอมลตางๆ ของผใช เพอนำไปหาประโยชนในรปแบบอนในอนาคต

มลแวรสามารถจำแนกตามลกษณะการแพรกระจายได 3 รปแบบ ไดแก1. ไวรสคอมพวเตอร ไมสามารถแพรกระจายไดดวยตนเอง ผใชจำเปนตองเรยกใชแฟมขอมลทม

ไวรสอย ไวรสจงจะแพรกระจายไปยงบรเวณอนๆ หรอเครองอนๆ ได2. หนอนคอมพวเตอร แพรกระจายไดดวยตวเอง ผใชไมจำเปนตองเรยกใชแฟมขอมลทมไวรสอย3. โทรจน มลกษณะคลายโปรแกรมปกตทวไป หลอกใหผใชตดตง หรอเผยแพรตอ แตภายใน

ซอนชดคำสงหรอโปรแกรมทเปนอนตรายไว การแพรกระจายของโทรจนจงเกดจากการนำเขาหรอสงตอโดยตวผใชเอง

ลกษณะความเสยหายทเกดจากมลแวร หรอลกษณะตองสงสยทคาดวาจะมมลแวรในระบบ เชน• ระบบคอมพวเตอรโดยรวมทำงานไดชาลง มการรบสงขอมลในขายงานมากผดปกต มการเรยกใชอปกรณตอพวงสงมาก หนวยความจำเตมหรอไมเพยงพอตลอดเวลา เพราะทรพยากรตางๆ ของระบบคอมพวเตอรถกแบงไปใหมลแวรใชงาน

• แฟมขอมลหาย มแฟมขอมลแปลกๆ ปรากฏขนมา หรอไมสามารถเขาถงขอมลได เนองจากถกมลแวรไปแกไขขอมลตางๆ ในดสก

ปจจบนพบวามมลแวรเรยกคาไถ (ransomware) มากขน มลแวรเรยกคาไถจะเขารหสขอมลในดสกของเหยอ และเรยกคาไถเปนคาถอดรหส เปาหมายการโจมตของมลแวรเหลานกระจายไปทผใชทวไปมากขน ไมเจาะจงเฉพาะองคกรใหญดงในอดต

การปองกนมลแวรโดยทวไปทำไดโดยหลกเลยงการเปดแฟมขอมลหรอการตดตงซอฟตแวรซงไมทราบแหลงทมาทชดเจน หรอมแหลงทมาไมนาเชอถอ ปดการเรยกใชมาโครโดยอตโนมตในซอฟตแวรตดตงซอฟตแวรปองกนไวรสเพอชวยคดกรองแฟมขอมลทมลกษณะผดปกต รวมถงใชซอฟตแวรปองกนการบกรกจากขายงาน เชน ไฟรวอลล เนองจากมลแวรบางชนดสามารถแพรกระจายผานขายงานไดเองดวย

การรกษาอาการตดมลแวรนนอาศยซอฟตแวรปองกนไวรสชวยดำเนนการให ซอฟตแวรจะพยายามลบไฟลของมลแวรออก หรอแยกไฟลทมปญหาใหไปอยในเขตกกกน (quarantine zone) หากไมสามารถลบได เพอไมใหมลแวรรบกวนการทำงานตามปกตของเครอง แตหากซอฟตแวรปองกนไวรสไมสามารถกำจดมลแวรได กจำเปนจะตองลางระบบปฏการและขอมลทงหมดทงแลวเรมตนตดตงใหม ใน

Page 137: 2301170 Computer and Programming

9.4. การรบกวนระบบและขอมลคอมพวเตอร 119

กรณของมลแวรเรยกคาไถกเชนกน หากไมสามารถถอดรหสได กจำเปนตองลบขอมลทงหมดทง ดงนนจงควรสำรองขอมลไวเปนระยะๆ เพอบรรเทาความเสยหายทอาจจะเกดขนจากมลแวร

9.4.2 การโจมตเพอปฏเสธการใหบรการ (Denial of Service attack -DoS attack)

ระบบคอมพวเตอรนนจะถกออกแบบมาใหรองรบการใชงานตามปกต แตหากมผใชมากจนเกนไป ระบบกอาจไมสามารถตอบสนองกบผใชได ผประสงครายจะใชจดออนในนในการโจมตระบบโดยมวธการตางๆเชน

• การระดมสงขอมลปรมาณมากทไมเปนประโยชนเขาไปรบกวนการจราจรของขอมลบนขายงานทำใหชองการจราจรเตม การสงขอมลตามปกตทำไดชาหรออาจทำไมไดเลย และทำใหผใชงานตามปกตไมสามารถเขาใชระบบได

• การสงแฟมขอมลขนาดใหญหลายๆ แฟมไปวางไวในเนอทสวนกลางจนเนอทเตม ทำใหผใชอนๆไมสามารถเขาไปใชได

• การลบชอและขอมลของผใชออกจากระบบ ทำใหผใชไมสามารถเขาสระบบได

การรบกวนเหลานในบางรปแบบอาจจะไมไดมความพยายามในการบกรกเขาสระบบ หรอการแกไขดดแปลงทำลายขอมลใดๆ ในระบบเลย แตเปนการใชงานแบบไมปกตซงสงผลใหระบบคอมพวเตอรไมสามารถทำงานไดตามทควรจะเปน กนบเปนความผดตามพรบ. คอมพวเตอรฯ เชนกน

รปแบบการโจมตเพอปฏเสธการใหบรการซงเปนทนยมคอการโจมตผานขายงาน โดยใชเครองหลายๆ เครองรวมกนโจมตเปาหมาย (Distributed Denial of Service attack - DDoS attack)ผประสงครายมกจะอาศยเครองคอมพวเตอรอนๆ ซงมการปองกนออน หรอไมมการปองกนเปนเครองมอในการระดมโจมตเปาหมาย เรยกเครองทถกใชเปนเครองมอเหลานวา ซอมบ (zombie) โดยกลมของซอมบทใชในการระดมโจมตเหยอเรยกวา botnet การสรางซอมบทำไดโดยสงมลแวรเขาไปในเครองเปาหมาย ลกษณะทมกพบในเครองทเปนซอมบจงมการใชงานพนทเกบขอมลสงมาก การตดตอกบขายงานทำไดชามาก หรออปกรณตอพวงตางๆ ไมตอบสนองตอการใชงาน

มลแวรทมลกษณะการทำงานเปนการลบหรอดดแปลงแฟมขอมลในระบบ ทำใหระบบไมสามารถใหบรการตามปกตได กนบเปนการโจมตเพอปฏเสธการใหบรการเชนเดยวกน การปองกนในกรณทสาเหตเกดจากมลแวรนน จงเหมอนการปองกนมลแวรตามปกต

แตในกรณทการโจมตเกดผานขายงาน การปองกนสามารถทำไดในระดบขายงานดวย หลกการสำคญคอแยกขายงานภายในออกจากขายงานภายนอก แลวใชซอฟตแวรหรอระบบตางๆ กำกบดแลการรบสงขอมลระหวางขายงานภายในและภายนอก เชน ใชไฟรวอลล (firewall) เพอใชกรองการรบสงขอมล ใชแคช (cache) สำเนาขอมลทมการเรยกใชบอย เพอลดภาระของขายงานในการเรยกใชขอมลเดมจากภายนอกซำๆ

Page 138: 2301170 Computer and Programming

120 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

นอกจากการปองกนตวในกรณทอาจตกเปนเหยอจากการโจมตโดยตรงแลว ผดแลระบบควรปองกนไมใหเครองในระบบของตนถกใชเปนซอมบเพอไปโจมตระบบอนๆ ดวยเชนกน วธปองกนเปนวธเดยวเดยวกบการปองกนมลแวร

การจดการเมอถกโจมตนน กรณทสามารถระบทมาของผประสงครายได เชน ระบชอผใชทสรางปญหา หรอระบเลขทอยไอพททำการโจมตได ผดแลระบบควรตดสทธการใชงาน หรอตดการเชอมตอของผประสงครายออกไปกอน แตในกรณของการโจมตแบบ DDoS นนจำนวนเครองทระดมโจมตอาจมมากเกนกวาจะตดการเชอมตอไดหมด แนวทางทแนะนำใหผดแลระบบใชในการรบมอจงเปนตดเครองทถกโจมตออกไปจากระบบกอน เพอปองกนไมใหเครองอนๆ ในระบบไดรบผลกระทบตามไปดวย อยางไรกตาม วธนกจะทำใหผใชตามปกตใชงานไมไดเชนเดยวกน นอกจากน ผดแลระบบควรเกบบนทกการเชอมตอและบนทกการใชงาน (log) ของผใชไวดวย เพอใชในการตรวจพสจนหาตวผประสงครายตอไป

ลองคดวนแรกของการเปดภาคการศกษาของทกภาคเรยนนนนสตจำนวนมากจะพยายามเขาสระบบลงทะเบยนเพอลงทะเบยนวชาเลอก จงทำใหระบบลงทะเบยนของมหาวทยาลยชา หรอใชการไมได การเขาสระบบลงทะเบยนของนสตพรอมกนจำนวนมากๆ น นบเปนการรวมกนโจมตระบบลงทะเบยนหรอไม เพราะเหตใด

9.5 การดกรบขอมลในระบบคอมพวเตอรทวไปนน ฮารดแวร หรอซอฟตแวร อาจหามาเปลยนทดแทนกรณสญหายหรอเสยหายได แตขอมลนนเปนของเฉพาะองคกร หากสญหายหรอเสยหายกหามาทดแทนไดยาก นอกจากนหากขอมลถกขโมยกอาจสรางความเสยหายทางออมใหกบองคกรได เชน ขอมลผลตภณฑใหมของบรษทถกคแขงขโมยไปทำใหบรษทเสยเปรยบในการแขงขน การลกลอบทำสำเนากนบเปนการขโมยขอมลเชนกน การขโมยขอมลมกเกดรวมกบการบกรกเขาสระบบเขามานำขอมลออกไป และอาจเกดระหวางการรบสงขอมลกบขายงานอนๆ กได

9.5.1 ลกษณะการรบสงขอมลในระบบขายงานการสงขอมลในขายงานอนเทอรเนตนนเปนการแบงปนเสนทางการสอสารรวมกนหลายๆ เครอง โดยเครองทอยระหวางเสนทางจะทำหนาทสงตอขอมลไปใหถงปลายทาง การระบเสนทางหรอเลอกเสนทางในการสงขอมลนนจะทำใหประสทธภาพโดยรวมในการสงขอมลลดลง เนองจากไมไดใชชองทางในการสอสารอยางเตมท ถงแมวาขอมลจะถกสงไปในหลายเสนทางกตาม ขายงานเฉพาะทแตละแหงจะมเกตเวยเปนประตหลกของขอมลตางๆ ทไหลเขาออกขายงาน หากสามารถดกฟงทเครองเหลาน กจะไดขอมลทงหมดทไหลเขาออกระบบ

Page 139: 2301170 Computer and Programming

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) ผใชแตละรายจะมคกญแจเปนของตนเอง โดยกญแจสาธารณะจะแจกจายโดยเปดเผยใหผอนใชได แตกญแจสวนบคคลนนเปนความลบ ในการรบสงขอมล ผรบขอมลตองสง

Page 140: 2301170 Computer and Programming

122 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

กญแจสาธารณะของตนเองมาใหผสงขอมลกอน ผสงขอมลจะใชกญแจสาธารณะของผรบขอมลเขารหสแลวสงขอมลซงเขารหสแลวใหผรบขอมล การถอดรหสจะใชกญแจสวนบคคลของผรบขอมล ดงรปท 9.2ดงนนแมขอมลทเขารหสแลวจะหลดไปยงผประสงคราย กยงไมสามารถถอดรหสไดเพราะไมมกญแจเพอถอดรหส

นอกจากน การเขารหสแบบกญแจอสมมาตรอาจใชเปนวธในการรบสงกญแจสมมาตร เพอใหการรบสงกญแจเปนไปโดยลบ และสามารถใชกญแจสมมาตรในการตดตอครงตอๆ ไปได

ลองคดเมอใชคกญแจสาธารณะและกญแจสวนบคคลในการสงขอมลทเปนความลบ เราสามารถใชคกญแจของผสงขอมลในการเขาและถอดรหสไดหรอไม จงใหเหตผลประกอบ

9.6 การปลอมแปลงตวตน และการสงขอมลรบกวนผอน9.6.1 Spoofing และ phishingSpoofing คอการปลอมแปลงขอมลแสดงตวตนบางอยางเพอหลอกใหผใชเขาใจผดวาการรบสงขอมลนนกระทำกบผอนซงเชอถอได ไมใชตวผประสงคราย ตวอยางของ spoofing เชน

• การปลอมแปลงอเมลวามาจากธนาคาร• การปลอมแปลงหมายเลขไอพเพอหลอกระบบคอมพวเตอรวามาจากแหลงทเชอถอได• การปลอมแปลงตำแหนงทอยในระบบ GPS ของตนเพอหลอกระบบคอมพวเตอรวาอยในพกดทกำหนด

การปลอมแปลงตวตนนบเปนความผดฐานนำเขาขอมลปลอมเขาสระบบคอมพวเตอร ตามมาตรา 9 ในพรบ. คอมพวเตอรฯ

Phishing เปนการปลอมแปลงหนาเวบไซตใหเหมอนกบเวบไซตจรงเพอหลอกใหเหยอเขามากรอกขอมลในเวบไซต ลกษณะเวบไซตทมกเปนเปาหมายของ phishing คอ เวบไซตธนาคาร บรการจดหมายอเลกทรอนกส และบรการขายงานสงคมตางๆ ผประสงครายจะไดขอมลชอผใชและรหสผานของเหยอเพอนำไปใชกบเวบไซตจรงตอไป

ผใชสามารถระมดระวงตนเองไมใหเปนเหยอของ phishing ไดดวยการพมพ URL ของเวบไซตทตองการเขาดวยตนเองทกครง ไมกดลงกเพอเขาสเวบไซต และตรวจสอบความถกตองของ URL กอนจะกรอกขอมลตางๆ เสมอ สวนฝงเจาของเวบไซตสามารถรบรองตนเองไดโดยใชใบรบรองดจทล

9.6.2 ลายมอชอดจทล (Digital signature)การแสดงตวตนและยนยนตวตนนนสามารถใชตรวจสอบผทเขาใชระบบไดดวยวธการตางๆ ของระบบแตการยนยนตวตนบางรปแบบซงตองใชขอมลจำเพาะของตวผใชนน อาจไมเหมาะสมหากตองการสง

Page 141: 2301170 Computer and Programming

9.6. การปลอมแปลงตวตน และการสงขอมลรบกวนผอน 123

รปท 9.3: ตวอยางใบรบรองดจทล

ขอมลไปมาระหวางผใช และผใชตองใชขอมลจำเพาะเหลานในการยนยนตวตนของคสนทนาเมอเรมสนทนา

วธการหนงซงเปนทนยมคอใชการลงลายมอชอดจทล โดยใชคกญแจสวนบคคลและกญแจสาธารณะของผสงขอมล เมอมการสงขอมลตางๆ ผสงขอมลจะลงลายมอชอดวยกญแจสวนตวของตนเอง ผรบขอมลสามารถตรวจสอบตวตนของผสงขอมลไดโดยถอดรหสลายมอชอนนดวยกญแจสาธารณะของผสงหากตรงกนกแสดงวาผสงนนเปนตวจรง

หลกการลงลายมอชอดจทลใชยนยนตวตนไดเพราะเราถอหลกการวาผสงขอมลเทานนทมกญแจสวนบคคลของตนเอง ผอนจะไมมกญแจนอย ทำใหสามารถยนยนไดวาผสงเปนตวจรง

9.6.3 ใบรบรองดจทล (Digital certificate)ปญหาของการใชคกญแจสวนบคคลและกญแจสาธารณะคอไมวาใครกสามารถสรางคกญแจนขนมาไดเรอยๆ และไมสามารถยนยนไดวากญแจสาธารณะทแจกจายอยเปนของหนวยงานหรอบคคลทกลาวอางจรงหรอไม จงเกดหนวยงานเพอรบรองกญแจสาธารณะขน (certificate authority) ในใบรบรองจะระบชอองคกรหรอบคคลผถกรบรอง ชอผรบรอง เวลาหมดอายของใบรบรอง และกญแจสาธารณะทถกรบรอง บรการทสำคญเชน ธนาคาร ลวนใชบรการใบรบรองดจทลในการรบสงขอมลทงสน เชนในรปท 9.3 ฝงซายแสดงชอองคกรทถกรบรองเปน www.scbeasy.com ซงเปนบรการธนาคารอเลกทรอนกสของธนาคารไทยพาณชย ใบรบรองออกโดย Entrust Certification Authority มอายตงแต 29 พฤษภาคม 2012 ถง 9 มถนายน 2013 และฝงขวาแสดงขอมลกญแจสาธารณะทไดรบการ

Page 142: 2301170 Computer and Programming

124 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

รบรอง

9.6.4 สแปม (Spam)สแปม คอ การสงขอความ หรอตวขอความทผรบไมตองการผานทางจดหมายอเลกทรอนกสและจะสงหาผใชพรอมกนคราวละหลายคน ขอความในจดหมายอาจเปนการโฆษณาขายสนคาหรอบรการประชาสมพนธงานหรอโอกาสในการทำธรกจ สแปมจดเปนจดหมายขยะประเภทหนงซงทำใหผรบเกดความไมพอใจและตองเสยเวลาในการลบจดหมายทง นอกจากนนแลวยงเปนการทำใหประสทธภาพในการขนสงขอมลในอนเทอรเนตลดลงดวย การสงสแปมเปนการรบกวนการใชงานของผอน นบเปนความผดตามพรบ. คอมพวเตอรฯ มาตรา 11

ผใชสามารถลดจำนวนของสแปมไดโดยใชโปรแกรมรบสงอเมลทใหผใชกำหนดวาใหลบสแปมทงทนทอยางอตโนมต หรอใชการกรองอเมล (e-mail filtering) ซงคอบรการทชวยกรองอเมลจากแหลงทกำหนดไวหรอจากคำสำคญทผใชกำหนด ตวกรองจะเกบสแปมไวในทเกบสะสมสแปม โดยผใชงานสามารถเปดดขอมลได หรออาจใชโปรแกรมปองกนสแปม (anti-spam) ซงจะพยายามลบสแปมทงกอนทจะสงเขากลองจดหมายเขา (inbox) ของผใช แตขอเสยของการกรองอเมลและโปรแกรมปองกนสแปม คอ บางครงกอาจกรองหรอลบอเมลทไมใชสแปม ดงนนหากใชตวกรองอเมล ผใชควรตรวจดในทเกบสแปมวามอเมลทตองการปนอยในนนหรอไม

ลองคดเราจะเชอมนไดอยางไรวาผออกใบรบรอง (certificate authority) นน นาเชอถอ

9.7 ทรพยสนทางปญญาทรพยสนทางปญญาแบงออกเปน 2 ประเภท ไดแก

1. ทรพยสนทางอตสาหกรรม ซงมประเภทยอยๆ ทสำคญ เชน สทธบตร อนสทธบตร เครองหมายทางการคา ความลบทางการคา

2. ลขสทธ

ซอฟตแวรคอมพวเตอรนนเปนทรพยสนทางปญญาในกลมลขสทธ และไดรบความคมครองตามพระราชบญญตลขสทธ พ.ศ. 2537 โดยจะคมครองในสวนของรหสตนฉบบ (source code) ซงจะทำใหความคมครองทนทโดยไมตองนำไปจดทะเบยนกอน นอกจากน รหสตนฉบบยงไดรบความคมครองในหมวดความลบทางการคาดวย อยางไรกตาม กฎหมายในประเทศไทยยงไมใหความคมครองแนวความคดและขนตอนวธในการทำงาน ซงในบางประเทศ เชน สหรฐอเมรกา จะใหความคมครองขนตอนวธในหมวดสทธบตร สำหรบในประเทศไทยนน หากมผลอกเลยนแนวคดการทำงานแตไปเขยนรหสตนฉบบเอง จะไมผดกฎหมาย

Page 143: 2301170 Computer and Programming

9.8. จรยธรรมคอมพวเตอร 125

พรบ. ลขสทธใหสทธขาดกบผสรางสรรคในการทำซำ ดดแปลง และเผยแพร ซงหากเปนซอฟตแวร ผสรางสรรคคอผเขยนรหสตนฉบบ ผสรางสรรคสามารถขายหรอยกสทธนใหกบผอนได ไมวาจะเปนการยกใหบางสวน หรอใหทงหมด หรอใหแบบจำกดเวลา ขนกบการทำสญญาตกลงกน

ซอฟตแวรและคลงโปรแกรมจำนวนมากในทองตลาดมสญญาอนญาตใหใชงานไดโดยไมมคาใชจายแตผใชพงอานสญญาอนญาตกอนทกครง เนองจากสญญาแตละฉบบมขอจำกดตางกน สญญาอนญาตทนาสนใจ เชน

• GPL (GNU General Public License) อนญาตใหนำซอฟตแวรไปใช จายแจก หรอดดแปลงได โดยมขอกำหนดวายงตองใชสญญาอนญาตแบบเดม

• BSD (Berkeley Software Distribution) อนญาตเชนเดยวกบ GPL แตไมจำเปนตองใชสญญาอนญาตแบบเดม เพยงแคตองแสดงขอความสญญาอนญาตเดมเอาไว

จะเหนวา หากตองการนำซอฟตแวรหรอคลงโปรแกรมไปดดแปลงเพอใชในซอฟตแวรเพอการคาทจำเปนตองปกปดรหสตนฉบบ จะไมสามารถใชซอฟตแวรหรอคลงโปรแกรมทใชสญญาอนญาตแบบ GPL ไดนอกจากน สญญาอนญาตสำหรบคลงโปรแกรมทพฒนาโดยสถานศกษามกจะระบวาใหใชไดโดยไมมคาใชจายเพอการศกษาเทานน หากตองการใชเพอการคา ตองตดตอเพอจายคาลขสทธ เปนตน

ลองคดหากนสตซอซอฟตแวรหนงชด แลวแบงกบเพอนใชหลายๆ คน นสตละเมดลขสทธของผผลตซอฟตแวรหรอไม จงใหเหตผลประกอบ

9.8 จรยธรรมคอมพวเตอรแนวทางในการตดสนใจทำเรองตางๆ นน เราจะเลอกทำในสงทถก จรยธรรม หรอจรยศาสตร เปนแขนงหนงของวชาปรชญา เปนแนวทางทใชในการตดสนถกผด นกปรชญาสำนกตางๆ ไดเสนอแนวทางในการตดสนถกผดนไวหลากหลายแนว และไมมแนวทางไหนทถกตองทสด ดงนน ในทางจรยศาสตรแลว เรองหนงอาจเปนไดทงถกและผดขนกบเกณฑในการตดสนใจ หลกคดทนาสนใจมดงน

• จรยศาสตรเชงคณธรรม นกปรชญากรกโบราณ เชน โสกราตส อรสโตเตล เพลโต เชอวาสงทดนนดในตวมนเอง ไมตองอธบายโดยเชอมโยงหรอเกยวของกบบรบทอนๆ เชน หากการชวยเหลอคนเปนสงทด กไมจำเปนตองใหเหตผลอนๆ เพอใหนำหนกสนบสนนวาการชวยเหลอคนเปนสงทดอก

• แนวทางการพจารณาถกผดจากผลของการกระทำ เชน หลกประโยชนนยม (utilitarianism)ตดสนวาการกระทำนนถกตองหากใหประโยชนสงสด จากตวอยางการชวยเหลอคนนน หากการชวยเหลอคนจะทำใหสงคมโดยรวมสงบสขแลว การชวยเหลอคนยอมเปนสงทถกตองและควรกระทำตามหลกประโยชนนยม

Page 144: 2301170 Computer and Programming

126 บทท 9. ความปลอดภยและจรยธรรมคอมพวเตอร

• แนวทางการพจารณาถกผดจากการกระทำนนโดยไมคำนงถงผล เชน อมมานเอล คานต เสนอวาสงทถกตองนนตองไมขนกบเวลา สถานท และบคคล และการกระทำทดนนเปนจดหมายในตวมนเอง ไมไดเปนทางผานไปสเปาหมายอน เชน หากการชวยเหลอคนเปนสงทด เราตองชวยเหลอทกคนไมวาคนนนจะเปนคนดหรอไมด แตหากการชวยเหลอคนนนตองทำไปเพอใหคนพนจากความเดอดรอน เราไมสามารถบอกไดวาการชวยเหลอคนเปนสงทด

จรยศาสตรเรมเขามาเกยวของกบคอมพวเตอรเมอคอมพวเตอรเรมมบทบาทกบชวตมนษย เครองคอมพวเตอรนนตดสนใจตามกฎทมนษยตงให แตเครองไมสามารถตดสนใจเลอกทำสงทถกผดตามหลกจรยศาสตรได จงตองมหลกจรยธรรมสำหรบผใชและผควบคมคอมพวเตอรขน

ตวอยางเชน ผดแลระบบนนมสทธในการด ดดแปลง ลบ ขอมลของผใช แตผดแลระบบควรใชสทธเหลานหรอไม และใชเมอใดไดบาง ในอดตนนยงไมมกฎหมายเขามาควบคมการใชงานคอมพวเตอร หลกจรยศาสตรจะเขามาชวยในการตดสนใจการกระทำตางๆ ของผใชคอมพวเตอรได

ปจจบนประเทศไทยม พรบ. คอมพวเตอรฯ เขามาควบคมการใชคอมพวเตอรบางแลว แตกยงมกรณทยงไมครอบคลมอย เชน ความเปนสวนตวของผใชระบบคอมพวเตอร การใชคอมพวเตอรเปนเครองมอในการกลนแกลงกน การพฒนาซอฟตแวรทหละหลวมแลวมชองโหวรายแรงสรางความเดอดรอนใหผใชเปนตน

9.9 ความเปนสวนตวของขอมลสารสนเทศปจจบนมบรการในอนเทอรเนตมากมายทไมคดคาใชจาย เชน บรการคนหาเวบไซต บรการรบฝากแฟมขอมล บรการกลองจดหมายอเลกทรอนกส บรการจองรานอาหาร บรการแนะนำเสนทาง ซงผใหบรการจะเกบขอมลสวนบคคลบางประการของผใชไป และนำไปหาประโยชนจากการโฆษณาเปนการตอบแทนขอมลบางประการของผใชนนเปนขอมลทออนไหว เชน ทอย หมายเลขโทรศพท ซงหากหลดไปอยในมอผประสงคราย กอาจนำไปสการปลอมตวเปนผใชได ขอมลตำแหนงทอย การเดนทาง กสามารถทำใหผประสงครายตดตามตวเหยอไดงายเชนเดยวกน

แนวทางปฏบตโดยทวไปในการเกบขอมลของผอนนนตองมการขออนญาตกอนเสมอ และมขอตกลงทชดเจนวาจะนำขอมลไปใชทำอะไรบาง บางครงบรษทผใหบรการอาจไมมเจตนารายในการเกบขอมลของลกคา แตบรษทมภาระหนาทโดยตรงทจะตองเกบขอมลของลกคาไวอยางด ไมใหรวไหล และสรางความเดอดรอนใหลกคาได โดยเฉพาะอยางยงหากเปนธรกรรมการเงนตางๆ

แนวทางการปกปองความเปนสวนตวของตวผใชเองนน ควรระมดระวงการเผยแพรขอมลทออนไหวในอนเทอรเนต โดยเฉพาะอยางยงในกลมสาธารณะ พจารณาสญญาขอตกลงใหถถวนกอนสมครบรการตางๆ และเลอกใชงานเฉพาะบรการทนาไวใจ

Page 145: 2301170 Computer and Programming

9.9. ความเปนสวนตวของขอมลสารสนเทศ 127

แบบฝกหด1. หากนสตเขยนซอฟตแวรชวยในการลงทะเบยน ดวยการใหซอฟตแวรวนซำตรวจสอบทวางในวชา

ทตองการไปเรอยๆ จนกวาจะวาง และลงทะเบยนวชานนใหนสต นสตจะมความผดตามพรบ.คอมพวเตอรฯ ในกรณใดหรอไม จงใหเหตผลประกอบ

2. นสตคดวาการกระทำตอไปนถกตองหรอไม“ลอกขอสอบกไมเปนไร ขอใหไดความรกพอ”

อธบายเหตผลและหลกคดประกอบดวย

Page 146: 2301170 Computer and Programming
Page 147: 2301170 Computer and Programming

ภาคผนวก 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

Page 148: 2301170 Computer and Programming

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 ของเลขประจำตวประชาชน

Page 149: 2301170 Computer and Programming

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

Page 150: 2301170 Computer and Programming

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 ของเลขประจำตวนสต

Page 151: 2301170 Computer and Programming

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 ของเงนเดอน

หากใหเงนไดพงประเมนของพนกงานเปนเงนเดอนเทานน เมอปอนขอมลเขาเปนเงนเดอนของพนกงานและสมมตวาพนกงานไดเงนเดอนเทาเดมทกเดอนตลอดป จงเขยนผงงานและโปรแกรมภาษาซเพอคำนวณเงนไดสทธตอปเบองตนของพนกงานคนนแลวแสดงผล

Page 152: 2301170 Computer and Programming

134 ภาคผนวก A. แบบฝกหด

A.2.3 ภาษ ณ ทจายหนวยงานตางๆ ทจายคาจางมหนาทหกภาษ ณ ทจายเพอนำสงสรรพากร ในกรณของการจายเงนเดอนหนวยงานมกจะคำนวณคาลดหยอนตางๆ และคำนวณภาษใหพนกงาน แลวแบงภาษทตองจายของทงปออกเปน 12 สวน เพอหกรายเดอนแทน จงคำนวณเงนเดอนสทธของพนกงานทจะไดเมอหกเงนประกนสงคม เงนกองทนสำรองเลยงชพ และภาษ ณ ทจายไปแลว

Page 153: 2301170 Computer and Programming

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 จำนวนแถวทพมพ

และเขยนเปนโครงของผงงานไดดงน

Page 154: 2301170 Computer and Programming

136 ภาคผนวก A. แบบฝกหด

START

line = 1

line <= n

1 พมพชองวางนำหนา

2 พมพคาตวเลข

line = line+1

STOPT

F

ตวเลขนนมทงหลกเดยว สองหลก และสามหลก เพอความสะดวกในการนบชองวาง จงมองการพมพตวเลขเปน block และการพมพบรรทดคอการพมพบลอกวางตอๆ กน โดยใหทกบลอกกวางเทากน ไมวาจะเปนบลอกของตวเลขหรอชองวาง

n/2

line/2

จากการสงเกต เมอพมพตวเลขจำนวน 5 บรรทด จะพบวา จำนวนบลอกในแตละบรรทดเปนดงน

Page 155: 2301170 Computer and Programming

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 พมพชองวางนำหนา

จงแยกออกมาเขยนไดเปน

Page 156: 2301170 Computer and Programming

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 ใหมเมอทำงานจบบรรทด เพอนำไปใชในการคำนวณบรรทดถดไป ดงน

Page 157: 2301170 Computer and Programming

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

Page 158: 2301170 Computer and Programming

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

Page 159: 2301170 Computer and Programming

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 จำนวนชองวางภายในบลอกหลงพมพตวเลข

Page 160: 2301170 Computer and Programming

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: ผงงานการพมพสามเหลยมปาสกาล

Page 161: 2301170 Computer and Programming

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++)

Page 162: 2301170 Computer and Programming

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: โปรแกรมการพมพสามเหลยมปาสกาล

Page 163: 2301170 Computer and Programming

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

Page 164: 2301170 Computer and Programming

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 เทากบตวตง ไมตองทำอะไร

เขยนเปนสวนของผงงานไดดงน

Page 165: 2301170 Computer and Programming

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• ปดทงในกรณอนๆ

จงเขยนเปนสวนของผงงานไดดงน

Page 166: 2301170 Computer and Programming

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 จำนวนหลกทศนยมทตองการ

Page 167: 2301170 Computer and Programming

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: ผงงานการหารากทสองดวยวธการหารยาว

Page 168: 2301170 Computer and Programming
Page 169: 2301170 Computer and Programming

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 ตว ดงน

Page 170: 2301170 Computer and Programming

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. มการเดนทางในสวนปกต และอาจมการเดนทางในสวนตอขยายดวย คดราคาทงสองสวนรวมกน

Page 171: 2301170 Computer and Programming

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

กรณทมการเดนทางในสวนปกต ซงอาจมการเดนทางในสวนตอขยายรวมดวย จงแยกคดราคาของสวนตอขยายออกมากอน แลวปรบสถานในการคำนวณใหเปนจดปลายของการเดนทางแบบปกต เพอนำไปคำนวณราคาแบบปกตตอไป การเดนทางในสวนตอขยายจะเกดขนเมอเลขสถานอยในสวนตอขยาย ไมวา

Page 172: 2301170 Computer and Programming

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 บาท เขยนเปนผงงานไดดงน

Page 173: 2301170 Computer and Programming

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

Page 174: 2301170 Computer and Programming

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

นำสวนตางๆของผงงานทงหมดมารวมกน จะไดเปนคำตอบ

Page 175: 2301170 Computer and Programming

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 ราคารวม

Page 176: 2301170 Computer and Programming

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

Page 177: 2301170 Computer and Programming

A.5. การคดคาโดยสารรถไฟฟา 159

รปท A.5: แผนภาพเสนทางและสถานในระบบรถไฟฟา BTS: ภาพจาก www.bts.co.th

Page 178: 2301170 Computer and Programming

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

Page 179: 2301170 Computer and Programming

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

Page 180: 2301170 Computer and Programming

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)

Page 181: 2301170 Computer and Programming

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

Page 182: 2301170 Computer and Programming

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

Page 183: 2301170 Computer and Programming

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• เงอนไขในการทำซำ คอ หากยงพมพวนทไมครบจำนวนวนในหนงเดอน ใหพมพตอไป

Page 184: 2301170 Computer and Programming

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

Page 185: 2301170 Computer and Programming

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

แลวเอาเงอนไขนไปใสในสวนการพมพ กอนจะนบวนทเพม ไดเปน

Page 186: 2301170 Computer and Programming

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

Page 187: 2301170 Computer and Programming

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

Page 188: 2301170 Computer and Programming

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

จากนน เพมสวนการพมพหวตารางวนจนทรถงอาทตย ซงเปนคาคงทสายอกขระธรรมดา

Page 189: 2301170 Computer and Programming

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

Page 190: 2301170 Computer and Programming

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 แลวจะไดคำตอบ

Page 191: 2301170 Computer and Programming

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 จำนวนการเคาะวรรค

Page 192: 2301170 Computer and Programming

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: ผงงานการพมพปฏทน

Page 193: 2301170 Computer and Programming

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: โปรแกรมการพมพปฏทน