The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by ttacademic9, 2020-03-06 04:21:49

2301170-Dittaya-ebook

2301170-Dittaya-ebook

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

รปู ท่ี 2.3: แผนภาพการเช่อื มตอ่ เครอื ขา่ ยอนิ เทอร์เนต็ ระหว่างประเทศ2

ระหว่างศนู ย์วิจัยและมหาวทิ ยาลัยต่างๆ ซง่ึ ตง้ั อย่หู ่างจากกัน ในระยะเริ่มแรกน้ัน ARPANET เปน็ การ
เชือ่ มต่อระหว่างมหาวทิ ยาลัยและหนว่ ยงานทางทหารเทา่ น้นั หลังจาก ARPANET เร่ิมต้น ก็มขี า่ ยงาน
ขององค์กรต่างๆ เข้ามาเช่อื มต่อเพ่ิมขนึ้ องค์กรเอกชนและบริษัทต่างๆ เร่ิมมกี ารสร้างขา่ ยงาน และ
ลากสายสญั ญาณเชือ่ มต่อด้วยตนเอง กลายเปน็ ข่ายงานขนาดใหญข่ ึ้นเรอื่ ยๆ ดังรปู ที่ 2.2 จนกลายเปน็
อนิ เทอร์เนต็ ในทสี่ ดุ

รปู ที่ 2.3 แสดงการเชื่อมตอ่ อนิ เทอร์เนต็ ระหวา่ งประเทศของไทย วงกลมสนี ้ำเงนิ และสเ่ี หลย่ี มสี
เทาในรูปคือเกตเวย์ หรือชอ่ งทางการเช่อื มต่อระหวา่ งเครอื ข่าย วงกลมขนาดใหญ่สีนำ้ เงินตรงกลางคอื
เกตเวย์ออกตา่ งประเทศ จะเหน็ ไดว้ ่ามีเส้นเช่ือมจำนวนมากกับเกตเวยข์ องตา่ งประเทศ สว่ นวงกลมเล็ก
สนี ำ้ เงินรอบวงกลมใหญ่คือเกตเวย์ของผใู้ ห้บริการอินเทอรเ์ นต็ ในประเทศ ซงึ่ จะเช่ือมต่อระหว่างเกตเวย์
ออกตา่ งประเทศอีกและผใู้ ชบ้ ริการ

ลองคดิ

หากต้องการควบคุมอินเทอร์เน็ต เช่น สกดั กน้ั การไหลของขอ้ มูล ตดั การเช่อื มต่อระหวา่ งเคร่อื งเป้าหมาย
จะต้องทำอย่างไร

2สำนกั งานเทคโนโลยีอเิ ลก็ ทรอนกิ สแ์ ละคอมพวิ เตอร์แห่งชาติ, มถิ นุ ายน 2559.

34 บทท่ี 2. ระบบอินเทอรเ์ นต็

2.2 การทำงานของอินเทอรเ์ นต็

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

การรับส่งขอ้ มูลในข่ายงานอินเทอรเ์ น็ตใชร้ ะบบการสลับกล่มุ ขอ้ มลู (packet switching) โดย
แบ่งขอ้ มลู ท่ตี อ้ งการส่งออกเป็นชนิ้ ย่อยๆ (packet) แล้วส่งขอ้ มูลยอ่ ยเหลา่ นไ้ี ปตามชอ่ งทางการส่ือสาร
ต่างๆ ซึ่งไมจ่ ำเป็นตอ้ งเป็นชอ่ งทางเดยี วกนั แลว้ ไปรวมเป็นข้อมูลตัง้ ต้นอีกครั้งทป่ี ลายทาง การรับสง่
ข้อมลู ดว้ ยวิธนี ีท้ ำให้ผ้ใู ช้หลายๆ รายสามารถใช้ชอ่ งทางการส่อื สารร่วมกนั ได้

เม่ือมีการแบ่งขอ้ มลู ออกเป็นชนิ้ ย่อยๆ และแยกสง่ ไปตามชอ่ งทางตา่ งๆ ทำใหต้ ้องมีการออกแบบวิธี
การส่งขอ้ มลู ให้ไปถงึ ปลายทาง และวิธกี ารรวมขอ้ มูลทปี่ ลายทาง วิธีการเหลา่ นถ้ี ูกกำหนดอยู่ในโพรโท
คอลตา่ งๆ ในการส่ือสาร

การออกโพรโทคอลเดียวควบคุมข้ันตอนการรับส่งขอ้ มลู ทั้งหมดนน้ั จะทำให้โพรโทคอลซับซ้อน
รวมทัง้ มีขอ้ จำกัดด้านฮารด์ แวร์ และรูปแบบของข่ายงานเฉพาะท่ีแต่ละแห่งทีอ่ าจแตกตา่ งกนั ระบบ
อนิ เทอรเ์ น็ตในปจั จุบนั จึงแบง่ การทำงานออกเป็นระดบั ช้นั และกำหนดโพรโทคอลสำหรับชนั้ ตา่ งๆ เพอ่ื
ใหส้ ามารถปรบั ใช้งานไดก้ ับฮาร์ดแวร์และข่ายงานที่หลากหลาย

ในมมุ มองของซอฟต์แวร์นน้ั หากต้องจัดการตัดแบง่ ข้อมลู กำหนดเสน้ ทางขอ้ มลู และสง่ ข้อมูลด้วย
จะทำให้การออกแบบซอฟต์แวร์ซบั ซอ้ นมาก นอกจากน้ี คอมพิวเตอรห์ นึ่งเครอื่ งน้ันอาจตอ้ งการการเชื่อม
ต่อมากกว่าหนึ่งชอ่ งทาง เชน่ ซอฟต์แวรฟ์ ังเพลง ตอ้ งการเชือ่ มตอ่ กบั เครือ่ งบริการเพลง ในขณะทเี่ วบ็
เบราวเ์ ซอรต์ อ้ งการติดตอ่ กับเครื่องบริการเวบ็ แตซ่ อฟต์แวรฟ์ งั เพลงกับเบราว์เซอร์นั้นมีวธิ ีรับสง่ ข้อมูล
กับเคร่ืองบรกิ ารทแ่ี ตกต่างกนั หากผ้พู ฒั นาซอฟตแ์ วรท์ กุ รายตอ้ งเขยี นคำสงั่ สำหรบั จดั การเร่ืองท้งั หมด
เหล่านเ้ี อง จะมีบางส่วนทซ่ี ้ำซ้อนกนั เปน็ จำนวนมาก งานการจดั การเหล่านีจ้ ึงอยกู่ บั ระบบปฏบิ ัตกิ ารและ
ซอฟต์แวรร์ ะบบตา่ งๆ

ชดุ โพรโทคอลอนิ เทอรเ์ น็ต (Internet protocol suite) แบง่ การทำงานออกเป็น 4 ระดบั ไดแ้ ก่
ระดบั โปรแกรมประยกุ ต์ ระดับการขนส่ง ระดบั อินเทอรเ์ น็ต และระดับการเชอ่ื มต่อ

2.2.1 ระดบั โปรแกรมประยุกต์ (Application layer)

ในระดับน้จี ะกำหนดรูปแบบสว่ นต่อประสานเพอ่ื รับสง่ ขอ้ มลู ระหวา่ งซอฟตแ์ วรต้นทางกบั ปลายทาง จาก
รปู ที่ 2.4 เคร่ืองผูใ้ ชต้ อ้ งการเลน่ เพลง และเปิดเว็บไซต์ โปรแกรมเลน่ เพลงจะต้องส่งคำสัง่ ไปยงั เครอ่ื ง
บรกิ ารเพลง เพ่อื ใหส้ ่งเพลงกลับมา ในขณะท่ีเวบ็ เบราว์เซอร์ก็ต้องสง่ คำสั่งรอ้ งขอหน้าเว็บไปยงั เคร่อื ง
บริการเวบ็ และนำผลกลบั มาแสดงเช่นกัน วธิ กี ารส่งคำส่งั และตวั คำส่ังสำหรับโปรแกรมเลน่ เพลงกับเวบ็
เบราว์เซอรน์ ั้นตา่ งกัน แตล่ ะโปรแกรมจะมีโพรโทคอลของตนเองในการติดตอ่ กับเครือ่ งบรกิ าร โพรโท
คอลเหลา่ นเ้ี ป็นโพรโทคอลในระดบั โปรแกรมประยกุ ต์ ตัวอย่างของโพรโทคอลในระดบั นี้ เช่น

2.2. การทำงานของอนิ เทอร์เน็ต 35
204.69.221.33 172.271.4.238

TCP:554 TCP:80
Client: 161.200.126.120

GW: 161.200.126.1

รปู ที่ 2.4: ตัวอยา่ งการทำงานในชุดโพรโทคอลอินเทอรเ์ นต็

• HTTP (HyperText Transfer Protocol) เป็นโพรโทคอลทีใ่ ชใ้ นการรบั สง่ ข้อมูลกบั เคร่ือง
บริการเว็บ

• DHCP (Dynamic Host Configurationl Protocol) เป็นโพรโทคอลทใ่ี ช้ในการกำหนด
พารามเิ ตอรเ์ พ่อื เชือ่ มต่อขา่ ยงาน

• SSH (Secure SHell) เป็นโพรโทคอลการเขา้ รหัสชอ่ งทางการสือ่ สาร

โพรโทคอลในระดับน้ีไม่คำนึงถึงวิธีการตัดแบง่ ข้อมลู รวมถึงช่องทางการส่งขอ้ มลู แตเ่ รียกใช้บรกิ ารจาก
โพรโทคอลอน่ื ในระดับการขนสง่ แทน

2.2.2 ระดับการขนสง่ (Transport layer)

การติดต่อระหว่างซอฟต์แวรต์ น้ ทางกับปลายทางนัน้ จะอาศัยกระบวนการทำงานหลายอย่างประกอบกนั
เรยี กแตล่ ะกระบวนการว่า โพรเซส (process) โพรโทคอลในระดับการขนสง่ จะสรา้ งการเชอ่ื มต่อระ
หว่างโพรเซสต้นทางกับโพรเซสปลายทาง ใหเ้ สมอื นวา่ มชี ่องทางการเชอ่ื มต่อจองไว้ตลอดเวลาระหวา่ ง
โพรเซส เพอื่ อำนวยความสะดวกในการรบั ส่งข้อมลู ให้กับซอฟตแ์ วร์ ถงึ แม้วา่ การเช่ือมตอ่ จริงจะเป็นแบบ
สลบั กล่มุ ข้อมูล แบ่งใชช้ อ่ งสัญญาณกับโพรเซสอื่นๆ ก็ตาม

เครอื่ งหนงึ่ สามารถทำงานหลายโพรเซสพร้อมกนั ได้ เมือ่ มีการรอ้ งขอการเช่อื มตอ่ จากโพรเซส โพร
โทคอลในระดับการขนสง่ จะสรา้ งช่องทางการเช่อื มต่อเสมอื นใหใ้ นรูปแบบของพอรต์ (port) ตดั ขอ้ มลู ที่
รบั มาจากระดับโปรแกรมประยกุ ต์ออกเป็นกล่มุ ข้อมูลยอ่ ยเพอ่ื นำส่งปลายทาง และในทางกลับกัน ที่ฝ่ัง

36 บทที่ 2. ระบบอนิ เทอรเ์ น็ต

ปลายทางกจ็ ะประกอบขอ้ มูลกลบั ใหอ้ ย่ใู นรูปแบบเดยี วกบั ตน้ ทางเพอื่ ส่งให้โพรเซสตอ่ ไป งานของระดับ
การขนส่งรวมถงึ การตรวจสอบความถูกต้องของข้อมูล การควบคมุ การไหลของข้อมูล การควบคุมความ
หนาแนน่ ของขอ้ มูลอีกด้วย แต่ไมร่ วมถึงการนำกล่มุ ข้อมูลยอ่ ยสง่ ไปยังปลายทาง ซ่ึงจะอาศัยโพรโทคอล
อื่นในระดับอินเทอร์เนต็ เพอื่ นำส่งข้อมลู ตอ่ ไป

โพรโทคอลทสี่ ำคัญในระดบั นส้ี ำหรบั ชดุ โพรโทคอลอินเทอร์เน็ตคือ TCP (Transmission Control
Protocol) และ UDP (User Datagram Protocol) โดย TCP จะตรวจสอบการเชือ่ มตอ่ กอ่ นเร่ิม
รบั ส่งข้อมลู เสมอ และส่งขอ้ มูลเรียงตามลำดับ มกี ารตรวจสอบยืนยันวา่ ข้อมลู ไปถงึ ปลายทาง ในขณะที่
UDP จะไมม่ ีการตรวจสอบการเชือ่ มตอ่ ส่งข้อมลู แบบไมต่ อ้ งมลี ำดบั มีเพยี งการตรวจสอบความถกู ต้อง
ข้อมูลแต่ละส่วนทปี่ ลายทางเท่านน้ั การทำงานของ TCP ซง่ึ ตอ้ งตรวจสอบยนื ยันความถกู ต้องนนั้ ทำให้
การเชอื่ มตอ่ แบบ TCP น่าเช่ือถือกวา่ แตใ่ ช้เวลาในการส่งขอ้ มลู นานกว่า ในงานท่ีความถูกต้องของข้อมลู
ทง้ั หมดไม่สำคญั สามารถมีความผดิ พลาดเลก็ นอ้ ยได้ แต่ตอ้ งการความรวดเร็ว เช่น รายการวทิ ยอุ อนไลน์
การใช้ UDP จะเหมาะสมกว่า

จากรปู ที่ 2.4 โปรแกรมฟงั เพลงใช้พอรต์ 554 ของโพรโทคอล TCP ในการรับส่งขอ้ มลู กบั ปลายทาง
แสดงด้วยเส้นทบึ สเี ขยี ว ดังนั้นโปรแกรมฟงั เพลงจะเห็นชอ่ งทางการเชอ่ื มตอ่ เสมือน ระหวา่ งตัวโปรแกรม
เองกบั เครอ่ื งให้บริการเพลงซึ่งแสดงด้วยเส้นประสเี ขยี ว แตร่ ับสง่ ขอ้ มูลจริงผ่านพอร์ต TCP:554 ส่วน
เวบ็ เบราวเ์ ซอรก์ ็จะเชื่อมตอ่ กบั เครอื่ งบรกิ ารเวบ็ ผ่านช่องทางเสมือนซงึ่ แสดงด้วยเสน้ ประสีนำ้ ตาล ส่วน
ช่องทางการเชือ่ มต่อจริงจะผา่ นพอรต์ 80 ของโพรโทคอล TCP ซง่ึ แสดงดว้ ยเส้นทบึ สีนำ้ ตาล ถึงแมว้ ่า
ทัง้ สองโปรแกรมจะทำงานอยใู่ นเครื่องเดยี วกัน การรบั สง่ ข้อมลู จรงิ ๆ นน้ั ผ่านสายสญั ญาณเส้นเดียวกนั
ทงั้ สองโปรแกรมจะเห็นชอ่ งทางการเชอื่ มตอ่ เสมอื นที่แยกจากกนั

2.2.3 ระดับอินเทอรเ์ น็ต (Internet layer)

ขอ้ มูลทกุ รปู แบบเมื่อถกู ตัดออกมาเป็นกลุ่มขอ้ มลู ยอ่ ยแล้วจะสามารถใชว้ ธิ ีการทำนองเดียวกันในการนำ
สง่ ข้อมูลได้ เหมือนกับบรกิ ารไปรษณยี ์ ซึ่งรับสง่ จดหมายหรือพสั ดไุ มว่ า่ ข้อความในจดหมายหรอื ของใน
กลอ่ งพสั ดุน้ันจะเปน็ อย่างไรก็ตาม ในบรกิ ารไปรษณีย์นัน้ ใชเ้ ลขทอี่ ยเู่ พ่อื ระบผุ สู้ ่งและผรู้ บั ในขา่ ยงาน
อนิ เทอรเ์ นต็ กม็ ีเลขทอ่ี ยเู่ พื่อระบุเครื่องต้นทางและปลายทางเชน่ เดยี วกนั เลขที่อยนู่ ้กี ำหนดโดยโพรโท
คอล ซ่ึงโพรโทคอลในระดบั นที้ ส่ี ำคญั คือ โพรโทคอลอินเทอรเ์ น็ต (Internet Protocol: IP) จึงเรยี ก
เลขท่ีอยู่วา่ เลขทีอ่ ยู่ไอพี (IP Address)

หน้าท่ีของระดบั อนิ เทอร์เนต็ คอื การระบทุ ่อี ยู่ของผูร้ บั และผู้ส่ง และนำส่งขอ้ มลู ไปยังปลายทาง การ
เดินทางของกล่มุ ข้อมลู ย่อยจากตน้ ทางไปยังปลายทางน้นั ตอ้ งผา่ นข่ายงานตา่ งๆ ระหว่างทางเปน็ จำนวน
มาก เคร่อื งตา่ งๆ ทต่ี ั้งอยู่ท่ีจุดเชื่อมต่อระหว่างข่ายงานจึงมหี น้าท่สี ่งต่อกลมุ่ ข้อมลู ยอ่ ยไปยังทศิ ทางทนี่ า่
จะไปถึงปลายทางได้ หรือรบั กลุ่มขอ้ มลู ยอ่ ยน้ันเขา้ มาหากปลายทางอยใู่ นขา่ ยงานภายในของตน

เลขทีอ่ ยู่ไอพีในปจั จุบนั มี 2 รนุ่ ไดแ้ ก่ รนุ่ ที่ 4 (IPv4) และ รุ่นที่ 6 (IPv6) เลขที่อยู่ไอพรี ุน่ ท่ี 4
ประกอบดว้ ยตัวเลข 32 บิต ซึ่งมักจะแยกเป็น 4 ชุด ชุดละ 8 บิต (0-255) เครอื่ งในข่ายงานอินเทอรเ์ นต็
แตล่ ะเคร่อื งต้องมเี ลขทอ่ี ยู่ไม่ซ้ำกนั เลขที่อยู่ไอพีรนุ่ ท่ี 4 จงึ สามารถแทนเครอ่ื งไดท้ ้งั หมด 232 ≈ 4 ×109

2.2. การทำงานของอินเทอร์เนต็ 37

เครอื่ ง ซงึ่ ไมเ่ พียงพอกับการใชง้ านในปจั จุบัน จงึ มกี ารออกเลขทอี่ ยไู่ อพีรนุ่ ท่ี 6 ซงึ่ ประกอบดว้ ยตัวเลข
128 บิต จงึ แทนเครอ่ื งได้มากกวา่ มาก ปจั จุบนั มกี ารใชง้ านทงั้ เลขทอ่ี ยไู่ อพรี ุน่ ท่ี 4 และ 6 ไปพรอ้ มๆกัน

จากรปู ท่ี 2.4 เครอ่ื งของผใู้ ชม้ เี ลขทอ่ี ยไู่ อพีเป็น 161.200.126.120 ขอ้ มลู ทัง้ หมดทส่ี ง่ มาหาเครอ่ื ง
น้กี ็จะถกู ส่งมาทีเ่ ลขทอี่ ยไู่ อพีน้ี ไม่วา่ จะเป็นข้อมลู เพลงหรอื ข้อมูลเวบ็ โพรโทคอลในระดบั อนิ เทอรเ์ นต็ นี้
จงึ มหี นา้ ทส่ี ร้างชอ่ งทางการเช่ือมต่อเสมอื นระหวา่ งเครื่องถงึ เครื่อง ซงึ่ ในทนี่ ี้คอื เครอื่ งของผ้ใู ชก้ ับเคร่ือง
บรกิ าร แสดงในรูปด้วยเสน้ ประสีนำ้ เงนิ ส่วนหน้าทใ่ี นการแยกแยะขอ้ มลู วา่ เป็นเพลงหรอื เว็บ เปน็ ของ
ระดบั การขนสง่

อย่างไรกต็ าม การรับสง่ ข้อมูลในระดับอินเทอร์เน็ตนี้ยงั ไมใ่ ช่การส่งขอ้ มูลจริงทางกายภาพ โพรโท
คอลต่างๆ ในระดบั อนิ เทอรเ์ น็ตจะอาศัยโพรโทคอลในระดับการเชอื่ มตอ่ ในการรบั ส่งข้อมูลจรงิ อกี ต่อ
หนง่ึ

2.2.4 ระดบั การเชือ่ มต่อ (Link layer)

ระดบั ล่างสุดในชุดโพรโทคอลอินเทอรเ์ นต็ น้นั ควบคมุ การรบั ส่งขอ้ มูลระหว่างเคร่อื งทเี่ ช่อื มตอ่ กันทาง
กายภาพ เชน่ อีเทอร์เนต็ (Ethernet) มาตรฐาน IEEE 802 ซ่งึ ควบคมุ การรับสง่ ขอ้ มูลภายในขา่ ยงาน
เฉพาะที่ สำหรบั มาตรฐาน IEEE 802 น้นั อุปกรณ์เชื่อมต่อแตล่ ะชิ้นจะมเี ลขท่ีของตนเอง เปน็ เลขท่อี ยู่
ของฮาร์ดแวร์ เพื่อใช้ในการรับส่งข้อมูล เรยี กวา่ เลขท่อี ย่แู มค็ (Media Access Control address:
MAC address) การสง่ ขอ้ มูลจริงๆ ระหว่างเครอื่ งนั้นจะอาศัยเลขทีอ่ ยู่น้ี

ตวั อย่างของโพรโทคอลในระดบั การเชือ่ มต่อ เช่น

• PPP (Point-to-Point control Protocol) เปน็ โพรโทคอลสำหรบั การเชอื่ มตอ่ ระหว่าง
เคร่อื ง ซ่ึงสามารถตรวจสอบยืนยันตวั ตนสำหรบั การเช่ือมตอ่ ได้ โพรโทคอลนมี้ ักใชใ้ นการเชอ่ื มตอ่
ระหวา่ งผู้ให้บรกิ ารอนิ เทอร์เนต็ กับลกู ค้า

• ARP (Address Resolution Protocol) เปน็ โพรโทคอลที่ใชใ้ นการเปลย่ี นเลขทอ่ี ยไู่ อพใี หเ้ ป็น
เลขทีอ่ ยูข่ องฮาร์ดแวร์ เพอื่ ใหส้ ง่ ข้อมลู ถงึ ปลายทางได้

ถงึ แม้ว่าระดับการเชือ่ มตอ่ น้ีจะควบคุมการเชื่อมตอ่ ระหวา่ งเครือ่ งที่เช่อื มต่อกนั ทางกายภาพ โพร
โทคอลในระดบั นก้ี ย็ งั ไมไ่ ด้ระบวุ ธิ กี ารรับสง่ ข้อมูลในระดบั ฮาร์ดแวรไ์ ว้ ชดุ โพรโทคอลอินเทอรเ์ นต็ นจ้ี ึง
สามารถทำงานไดก้ ับฮาร์ดแวรท์ ุกรูปแบบหากอุปกรณเ์ หลา่ นั้นรองรบั โพรโทคอลในระดับการเชื่อมตอ่
ของชุดโพรโทคอลอนิ เทอร์เนต็

จากรปู ท่ี 2.4 การเช่อื มตอ่ จรงิ ระหวา่ งเคร่ือง Client ทม่ี ีเลขท่ีอยไู่ อพี 161.200.126.120 กับเครอื
ขา่ ย ทำผ่านเกตเวยซ์ ง่ึ มเี ลขทอี่ ยู่ไอพี 161.200.126.1 แสดงด้วยเสน้ ทึบสีชมพู

2.2.5 เปรยี บเทยี บการรับสง่ ขอ้ มูลในอนิ เทอร์เนต็ กับบริการไปรษณยี ์

ขอ้ มลู ที่รับสง่ เปรยี บเสมอื นเนอื้ ความในจดหมาย หรอื ของในกล่องพสั ดุ (segment, packet) แต่ขนาด
ของซองจดหมายหรือกลอ่ งพสั ดนุ ้นั มีมาตรฐานอยู่ หากขอ้ มลู มีขนาดใหญ่เกินกว่าจะบรรจลุ งซองได้ ก็

38 บทที่ 2. ระบบอินเทอรเ์ นต็

data 1/3 TCP:554 2/3 TCP:554 3/3 TCP:554
From
TCP segment 204.69.221.33
To 161.200.126.120
1/3 TCP:554 2/3 TCP:554 3/3 TCP:554

IP packet

From
204.69.221.33
To 161.200.126.120

รูปที่ 2.5: การทำงานของอนิ เทอรเ์ น็ตเปรยี บเทียบกับระบบไปรษณยี ์

ต้องตดั ข้อมลู ออกเป็นส่วนย่อยๆ ก่อนจะใสซ่ อง สว่ นการตัดขอ้ มลู น้ีเป็นหน้าท่ีของโพรโทคอลในระดับ
การขนส่ง และยงั ต้องมีขอ้ มลู กำกับเพิม่ เตมิ (header) เพื่อใหน้ ำข้อมูลกลบั มาประกอบกนั ได้ตามลำดับ
เดมิ เช่นในรปู ที่ 2.5 นนั้ ข้อมูลเพลงทไี่ ด้มขี นาดใหญ่ ตอ้ งตดั เป็นสว่ นยอ่ ยๆ สำหรับโพรโทคอลการขนสง่
เสียก่อน และมขี ้อมลู ลำดับของแตล่ ะสว่ นกำกับอยู่

บา้ นหนงึ่ หลงั น้ันมีผอู้ ยอู่ าศัยได้หลายคน เปรยี บเสมือนโพรเซสการเชือ่ มตอ่ ซ่ึงมีไดม้ ากกวา่ หนง่ึ การ
อ้างถงึ การเชอื่ มต่อของแต่ละโพรเซสจะใช้หมายเลขพอรต์ เปรียบเสมือนชื่อผู้ส่งและช่อื ผูร้ ับ สว่ นตัว
เครอื่ งนน้ั มีเลขทอ่ี ย่ไู อพี เปรยี บเสมือนบา้ นเลขทีท่ ใี่ ชจ้ า่ หนา้ ซองเพือ่ ใหไ้ ปรษณยี ส์ ามารถนำส่งจดหมาย
หรอื พัสดไุ ดถ้ ูกที่ ในรูปท่ี 2.5 น้นั การจา่ หน้าซองจดหมายตน้ ทางและปลายทางเป็นดงั ซองสนี ำ้ เงนิ เลขท่ี
อยทู่ ่ีกำหนดของต้นทางและปลายทางคือเลขที่อยู่ไอพี สงั เกตวา่ ไม่มีการระบุโพรเซสทซี่ องสีน้ำเงิน หนา้ ท่ี
ในการนำส่งใหถ้ กู โพรเซสน้ันเป็นของโพรโทคอลการขนส่ง ไมใ่ ช่หนา้ ที่ของโพรโทคอลอนิ เทอรเ์ น็ต

การทำงานของโพรโทคอลอินเทอรเ์ น็ต เปรียบเหมือนการขนส่งถงุ ไปรษณยี จ์ ากจุดรบั ไปยงั จุดคดั
แยก และส่งต่อไปยงั ศูนยไ์ ปรษณียต์ า่ งๆ เพอ่ื ใหน้ ำจ่ายผูร้ บั ได้ถูกตอ้ ง เชน่ จดหมายจากกรงุ เทพฯ ถงึ
เชียงใหม่ ก็ไม่ควรจะถูกส่งไปเส้นทางลงใต้ แตค่ วรจะเลือกเส้นทางขึ้นเหนือ ซ่งึ มหี ลายสาย กระจายส่ง
ไปสายใดก็ได้ เมอื่ ไปถึงปลายทางแลว้ จะมีผรู้ ับจัดการอกี ต่อ

วธิ กี ารสง่ ไมว่ า่ จะเป็นทางบกผ่านรถยนต์ รถไฟ หรือทางอากาศ เปรยี บเสมอื นการส่งข้อมูลทาง
กายภาพจรงิ ๆ ผ่านตวั กลางเช่น สายทองแดง สายใยแกว้ นำแสง ไมว่ า่ จะใช้วธิ ีการขนส่งแบบใด ระบบ
ไปรษณยี จ์ ะนำขอ้ มูลไปส่งถึงปลายทางได้

ลองคดิ

หากการคยุ โทรศพั ท์ระหวา่ ง 2 คนต้องใชส้ ายโทรศพั ท์ 1 เส้นเช่อื มตอ่ กัน กลมุ่ ของนิสิตอยดู่ ้วยกนั ทง้ั หมด
10 คน และทุกคนตอ้ งการคุยโทรศพั ทพ์ รอ้ มๆ กัน นสิ ิตตอ้ งมสี ายโทรศพั ทเ์ ชอ่ื มต่อกนั ทัง้ หมดกคี่ ู่ จึงจะ

2.3. การเชอื่ มต่อกบั ขา่ ยงานอินเทอรเ์ นต็ 39
รบั ประกันได้ว่าทกุ คนสามารถคยุ กันได้แนน่ อน

2.3 การเช่อื มตอ่ กับข่ายงานอินเทอรเ์ นต็

อินเทอรเ์ นต็ เป็นการเชอ่ื มต่อกนั ของข่ายงานยอ่ ยหลายๆ ข่ายงาน เมื่อคอมพวิ เตอร์เคร่อื งหนงึ่ ต้องการ
เชอื่ มต่อกบั อนิ เทอร์เนต็ จึงตอ้ งเช่อื มต่อเขา้ กับข่ายงานยอ่ ยแหง่ ใดแห่งหน่งึ ซงึ่ มักจะเปน็ ขา่ ยงานเฉพาะท่ี
เสยี กอ่ น

2.3.1 การเช่ือมตอ่ ทางกายภาพ

การเช่ือมต่อกับขา่ ยงานจะเรมิ่ จากการเช่อื มตอ่ ทางกายภาพ เช่น เชอื่ มต่อผ่านสายโทรศพั ทแ์ ล้วหมนุ
โมเด็ม เชอื่ มต่อผา่ นสายอีเทอรเ์ นต็ เชอื่ มตอ่ โดยสญั ญาณไวไฟ เชือ่ มต่อผา่ นขา่ ยงานโทรศพั ท์เคลอื่ นที่

การเชื่อมต่อทางกายภาพในหลายๆ กรณนี ้นั ใชก้ ารกลำ้ สัญญาณ (mudulate) ขอ้ มลู ไปกับคลนื่
พาหะ (carrier) ต่างๆ เช่น สัญญาณโทรศพั ท์ คล่นื แมเ่ หล็กไฟฟา้ ความถีต่ า่ งๆ การกลำ้ สญั ญาณ
นัน้ ต้องอาศัยฮาร์ดแวร์ช่วย และเมื่อตอ้ งการถอดสัญญาณ (demodulate) ออกจากคลน่ื พาหะ ก็
ต้องใชฮ้ าร์ดแวร์เช่นกนั ฮารด์ แวรท์ ี่ทำงานท้ังสองอย่างน้ีในตวั เดียวกันเรยี กว่า โมเดม็ (MOdulator-
DEModulator - MODEM) แตห่ ากคอมพวิ เตอรน์ ั้นรบั ส่งข้อมลู ดิจทิ ลั ไดโ้ ดยตรง เช่น ใช้อเี ทอรเ์ น็ตผ่าน
สายเคเบิล กไ็ มจ่ ำเปน็ ต้องใชโ้ มเดม็ อีก

ข่ายงานเฉพาะที่ทไ่ี ดร้ บั ความนิยมในปจั จบุ ันมสี องรูปแบบ คือ อีเทอร์เน็ต ซึง่ เป็นการเชือ่ มต่อแบบ
ใช้สาย และ ไวไฟ (WiFi) ซึง่ เปน็ การเชอื่ มตอ่ แบบไร้สาย อุปกรณ์ท่เี ป็นตวั กลางเชอ่ื มระหวา่ งข่ายงาน
เฉพาะที่คือเราต์เตอร์ (router) ในกรณทีเ่ ช่อื มตอ่ แบบใช้สาย และแอคเซสพอยท์ (Access Point
- AP) ในกรณที ่เี ชือ่ มต่อแบบไร้สาย ในปัจจบุ ัน โมเด็ม เราตเ์ ตอร์ และแอคเซสพอยท์มกั รวมกันอยใู่ น
อุปกรณช์ ิน้ เดียวกนั เป็น wireless modem router ผใู้ ห้บรกิ ารอินเทอรเ์ นต็ มกั จะใช้อุปกรณช์ นิดน้ีกบั
ลกู คา้ ทส่ี มัครใชบ้ ริการ และระบชุ ่อื ผู้ใชก้ บั รหัสผา่ นในการเชื่อมตอ่ ไวใ้ นอปุ กรณ์ ลูกค้าเพยี งแต่เช่ือมตอ่
กับอปุ กรณช์ นดิ นดี้ ว้ ยสายอีเทอรเ์ นต็ หรือไวไฟ ก็จะเริม่ ตน้ ใช้บรกิ ารได้ทนั ที

2.3.2 การกำหนดพารามเิ ตอรต์ า่ งๆ ที่จำเป็นในการเริ่มใช้งาน

คอมพวิ เตอร์ต้องท่ตี อ้ งการเช่ือมต่อกบั อนิ เทอรเ์ นต็ นน้ั จำเปน็ ต้องมเี ลขท่อี ยู่ไอพี เพอ่ื ใช้ในการรับส่ง
ขอ้ มูล เลขท่อี ยไู่ อพอี าจเกิดจากการกำหนดเองก็ได้ หรอื ผใู้ หบ้ ริการกำหนดใหก้ ไ็ ด้ แตเ่ น่อื งจากเลขที่
อยู่ไอพขี องแต่ละเครอ่ื งในอนิ เทอร์เนต็ น้ันตอ้ งไมซ่ ้ำกนั เพือ่ ใหก้ ารกำหนดเลขทอ่ี ยไู่ อพีเปน็ ไปอยา่ งมี
ประสิทธภิ าพ โดยท่วั ไปจงึ ให้ผบู้ ริการอนิ เทอร์เน็ตเปน็ ผู้กำหนดให้ เพ่ือปอ้ งกนั การใชเ้ ลขทอ่ี ยซู่ ำ้

นอกจากเลขทีอ่ ยู่ไอพขี องผใู้ ช้แลว้ เลขท่อี ยู่ไอพขี องเครอ่ื งที่ให้บรกิ ารบางอย่าง เชน่ เกตเวย์ ซ่ึงเป็น
ประตเู ชอ่ื มต่อข่ายงานภายในกบั ขา่ ยงานภายนอก ดเี อ็นเอส ซ่งึ เปน็ บริการชื่อโดเมน กจ็ ะอำนวยความ
สะดวกในการสร้างการเช่อื มต่อต่างๆ ไดด้ ียงิ่ ข้นึ จงึ ควรกำหนดคา่ เหลา่ น้กี อ่ นเริ่มใช้งานอนิ เทอรเ์ นต็

40 บทท่ี 2. ระบบอินเทอรเ์ นต็

DHCP

1 Request config 2 Send config
LAN

DNS WAN
GW

รูปท่ี 2.6: บริการ DHCP

การกำหนดค่าตา่ งๆ จำนวนมากนด้ี ้วยผู้ใช้เองน้ันไมส่ ะดวก โดยเฉพาะอย่างยิง่ เม่อื ต้องมีการปรบั
หรอื เปล่ยี นแปลงการตั้งคา่ ตา่ งๆ ปจั จุบนั จึงมี DHCP (Dynamic Host Configuration Protocol -
DHCP) เปน็ โพรโทคอลซ่ึงทำหน้าที่ในการสง่ ข้อมลู เหล่านใ้ี ห้กบั เครอ่ื งที่รอ้ งขอการเช่อื มตอ่ กบั ขา่ ยงาน
ลำดับข้ันตอนในการเชอ่ื มต่อกับข่ายงานในปจั จุบนั จึงมกั เป็นการเชื่อมตอ่ ทางกายภาพ และร้องขอการ
เชอ่ื มต่อไปยังเครอื่ งท่ใี หบ้ ริการ DHCP ดังรูปที่ 2.6 เมือ่ ไดข้ อ้ มูลทจี่ ำเป็นตา่ งๆ มาแลว้ ก็จะเข้าเปน็ ส่วน
หน่งึ ของข่ายงานและดำเนินการรบั ส่งขอ้ มูลได้

2.3.3 บริการชือ่ โดเมน

การระบเุ ครือ่ งตน้ ทางและปลายทางในข่ายงานอินเทอร์เน็ตน้ันใช้เลขที่อยไู่ อพีก็เพยี งพอ แต่การจดจำเลข
ทีอ่ ยไู่ อพขี องเครื่องตา่ งๆ น้นั ไม่สะดวกสำหรับผู้ใช้งานทวั่ ไป จงึ เกิดระบบโดเมน (Domain Name
System: DNS) เกิดขนึ้ เพือ่ ให้ผใู้ ช้จดจำได้งา่ ย เช่น ชอื่ โดเมน chula.ac.th แทนเลขทอ่ี ยไู่ อ
พี 161.200.192.241 และสร้างบริการเพื่อแปลงชื่อโดเมนไปเปน็ เลขท่อี ยูไ่ อพขี ึ้น ใหบ้ ริการโดยเครื่อง
บริการดเี อ็นเอส (DNS server)

เมื่อผ้ใู ชต้ ้องการตดิ ต่อกับเครื่องอนื่ ๆ ผู้ใช้จงึ สามารถระบชุ ่ือโดเมนของเครื่องปลายทางแทนทจี่ ะเป็น
เลขทีอ่ ยู่ไอพขี องเครอ่ื งปลายทางได้ จากนนั้ เครื่องของผู้ใชจ้ ะเชื่อมต่อไปยังเคร่ืองบริการดีเอน็ เอสและ
ร้องขอการแปลงชื่อโดเมนเพื่อให้ไดเ้ ลขทอ่ี ยไู่ อพีของเครอ่ื งปลายทางกลบั มา และดำเนนิ การเชือ่ มต่อกบั
เคร่อื งปลายทางตอ่ ไป ดังรปู ท่ี 2.7 จะเหน็ ไดว้ ่า ถงึ แม้ไม่มบี ริการชื่อโดเมน เครอ่ื งคอมพิวเตอร์ก็ยังคง
สามารถตดิ ต่อกับเครอื่ งอืน่ ๆ ได้ หากรู้เลขทอี่ ย่ไู อพี

บริการนอี้ ำนวยความสะดวกให้กบั ผู้ใช้ แตห่ ากบรกิ ารนคี้ ืนเลขทอ่ี ยู่ไอพีของเครอื่ งปลอม ซ่ึงอาจเปน็
ของผปู้ ระสงค์ร้ายใหผ้ ูใ้ ช้ ผ้ใู ชก้ จ็ ะตดิ ต่อกบั เครื่องปลอมปลายทาง และมีความเสย่ี งท่ีจะสง่ ข้อมลู ต่างๆ
ให้กับผู้ประสงค์รา้ ย ผใู้ ช้จึงควรตรวจสอบเลขทอ่ี ย่ไู อพขี องเคร่ืองบรกิ ารดีเอ็นเอสเสมอ วา่ เป็นเลขท่ีอยู่ไอ
พที ่ีเชื่อถอื ได้ ตวั อย่างของเลขทอ่ี ยไู่ อพที ีเ่ ช่ือถือได้ เช่น 8.8.8.8 เป็นบริการดีเอ็นเอสของกเู กิล

2.3. การเชอื่ มตอ่ กบั ข่ายงานอินเทอรเ์ น็ต 41

DHCP

1 Query IP 3 Send data LAN

2 Answer IP

DNS WAN

GW
รูปที่ 2.7: บรกิ าร DNS

2.3.4 เทคโนโลยเี วบ็

เวบ็ เป็นบริการเรียกดขู ้อมลู โดยมเี ครื่องบรกิ ารเว็บ (web server) เปน็ ผใู้ หบ้ รกิ าร และผใู้ ช้บรกิ ารจะ
เรยี กดขู อ้ มลู ผา่ นเว็บเบราวเ์ ซอร์ ซึ่งใช้ HTTP เปน็ โพรโทคอลหลกั แต่ HTTP น้นั รบั ส่งข้อมลู แบบไม่เขา้
รหสั ซึง่ อาจทำใหข้ อ้ มูลบางอยา่ งซงึ่ เปน็ ความลบั ไมป่ ลอดภยั ได้ จึงมีความพยายามในการปรบั ปรุงโพรโท
คอลใหม้ ีการเขา้ รหสั ข้อมูล เปน็ HTTPS (HTTP Secure) เพื่อใหม้ ีความปลอดภยั มากข้ึน

การแสดงเน้อื หาบนเวบ็ น้ันกำหนดโดย HTML (HyperText Markup Language) ซง่ึ ในปัจจบุ นั
ใชร้ ่วมกบั คำส่ังสคริปต์รูปแบบต่างๆ เชน่ CGI, JavaScript, PHP เพอื่ ใหเ้ วบ็ สามารถตอบสนองการใช้
งานได้หลากหลายรูปแบบ เชน่ การเลน่ วิดีโอ การเนน้ ข้อความเมอ่ื ลากเมาส์ผ่าน สครปิ ต์บางแบบทำงาน
ที่เครือ่ งของผ้ใู ช้ ดงั นัน้ ผูใ้ ช้อาจมคี วามเสีย่ งหากเปดิ เวบ็ ไซตท์ มี่ สี คริปตม์ ่งุ ร้ายไดเ้ ชน่ กัน

การเข้าถึงข้อมูลในเวบ็ นัน้ ตอ้ งระบุทีอ่ ยขู่ องขอ้ มูล เรยี กวา่ URL (Uniform Resource Locator)
ใน URL จะระบุ

• โพรโทคอลที่ใชใ้ นการรบั สง่ ขอ้ มลู หากไมร่ ะบุ เบราว์เซอรม์ ักจะเลือกให้เปน็ HTTP
• เลขทอี่ ย่ไู อพีของเคร่ืองปลายทาง ซ่งึ อาจระบุเป็นชอื่ โดเมนแทนได้ เวบ็ เบราวเ์ ซอรจ์ ะเรียกใช้

บริการดเี อ็นเอสในการแปลงเป็นเลขท่ีอยูไ่ อพีใหเ้ อง
• ทอ่ี ยขู่ องขอ้ มลู ในเครื่องปลายทาง หากไม่ระบุ เครอื่ งใหบ้ ริการเวบ็ อาจจะสง่ หน้าโดยปรยิ ายมาให้

เช่น index.html
• คำคน้

เชน่

https://www.youtube.com/watch?v=XHnrw-ANx40

ประกอบด้วย

• โพรโทคอล คือ HTTPS

42 บทที่ 2. ระบบอนิ เทอร์เนต็

• เลขทอ่ี ยไู่ อพีของเคร่อื ง ระบุเป็นช่ือโดเมนของ คอื www.youtube.com
• ทอ่ี ยขู่ องขอ้ มูลคอื แฟม้ ข้อมูลชอ่ื watch อยู่ ณ ตำแหนง่ แรกทีเ่ ขา้ ถงึ เครอื่ งได้
• คำค้นเปน็ XHnrw-ANx40 และสง่ คา่ ให้เคร่ืองบริการผ่านตัวแปรชอื่ v

ตัวอย่างน้คี ือการรอ้ งขอการเชือ่ มต่อกับ www.youtube.com และเรียกใชส้ ครปิ ต์ watch เพื่อเลน่
วดิ โี อชือ่ XHnrw-ANx40

ลองคิด

นิสิตไมส่ ามารถเขา้ เว็บ dailymail.co.uk ได้ แต่เข้า 195.234.240.212 ซงึ่ เป็นเลขทีอ่ ยไู่ อ
พีของ dailymail.co.uk ได้ อินเทอร์เน็ตของนิสิตมปี ญั หาทส่ี ว่ นใดหรือไม่ ลองใหเ้ หตุผลประกอบ

บทที่ 3

การแทนข้อมูลในคอมพิวเตอร์

วตั ถปุ ระสงค์การเรยี นรู้

อธบิ ายแนวคดิ ของการเกบ็ ขอ้ มลู ในภาษาโปรแกรม การแทนขอ้ มลู ในคอมพวิ เตอร์ และความแตกตา่ ง
ระหวา่ งขอ้ มูลชนดิ ตา่ งๆ

1. อธบิ ายเหตุผลทตี่ ้องกำหนดชนดิ ของขอ้ มูลเม่อื ทำงานกับคอมพวิ เตอร์ได้ และเลือกใช้ชนิดของ
ข้อมลู ได้เหมาะสมกับข้อมูลและรปู แบบการใช้งาน

2. อธิบายการใชพ้ ้นื ท่ีในหนว่ ยความจำสำหรับการเก็บขอ้ มูลได้ เรียกใชใ้ ช้ข้อมลู โดยผ่านการอ้างองิ
ถึงที่อยู่ได้ถกู ตอ้ ง

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

3.1 บติ และไบต์

ข้อมลู ในคอมพิวเตอรเ์ กบ็ อยู่ในรปู ของเลขฐานสองเนือ่ งมาจากเทคโนโลยดี จิ ิทลั ท่ีใชส้ วิตชส์ ถานะปดิ และ
เปิดในการเก็บขอ้ มูล สวิตชห์ นงึ่ ตัวแทนขอ้ มลู ได้ 2 รปู แบบ หากต้องการแทนขอ้ มูลทมี่ รี ปู แบบมากกวา่
น้ีก็ตอ้ งใช้สวิตช์หลายตัวประกอบกนั การแทนข้อมลู ด้วยสถานะเปิดปดิ นเี้ ทียบได้กับการแทนข้อมลู ด้วย
เลขฐานสองหนงึ่ หลกั เราจึงมีหนว่ ยเรียกความจุขอ้ มลู นี้ว่าความจุข้อมลู ขนาดหน่งึ บิต

ขนาดของหนว่ ยความจำทีใ่ ช้ในการเกบ็ อกั ขระ 1 ตัวคือ 7 บติ แตเ่ รามักกำหนดใหข้ นาดของข้อมลู
เปน็ กำลังของสอง จงึ ใช้ขนาด 8 บิต (23) แทนอักขระหนึง่ ตัว เรียกว่า 1 ไบต์ (byte) เราจึงมกั นบั
ขนาดของหนว่ ยความจำเป็นไบต์ เพื่อใหเ้ ทียบเคียงกบั การนับขนาดของขอ้ ความเปน็ จำนวนตัวอักษร เช่น
ขอ้ ความ 200 ตัวอักษร จะใชพ้ นื้ ท่ใี นการเกบ็ 200 ไบต์ เป็นต้น

ความจขุ ้อมลู ทใ่ี หญข่ น้ึ จะสามารถแทนรปู แบบของขอ้ มลู ได้มากขึน้ ตวั อยา่ งจำนวนรปู แบบของ
ขอ้ มูลที่สามารถแทนได้เมื่อมหี น่วยความจำขนาดต่างๆ ดงั ตารางท่ี 3.1

44 บทท่ี 3. การแทนข้อมูลในคอมพวิ เตอร์

ตารางที่ 3.1: จำนวนขอ้ มูลทแ่ี ทนได้เมอื่ มพี ื้นที่ในหนว่ ยความจำขนาดต่าง ๆ

จำนวนบิต จำนวนรปู แบบที่แทนได้
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
8 28 = 256
16 216 = 65,536
32 232 = 4,294,967,296
b 2b = 2b

หากเลขฐานสองมขี นาดยาวมาก เช่น 000100102 = 18 การเขียนเลขฐานสองด้วยสญั ลกั ษณ์ 0
(ศนู ย)์ และ 1 (หนึ่ง) จะทำให้อ่านยาก ในงานทางคอมพวิ เตอร์จงึ นิยมเขียนเลขฐานสองสี่หลกั รวมกันเปน็
เลขฐานสบิ หกหน่งึ หลกั (ใช้สัญลักษณ์ 0-F - ศูนย์ถงึ เอฟ) และใช้สัญลักษณ์ 0x (ศูนย์เอก็ ซ์) นำหนา้
จำนวนทเี่ ป็นเลขฐานสบิ หก เช่น 000100102 = 1216 = 0x12 เปน็ ต้น

โดยทวั่ ไปเราใชค้ อมพิวเตอร์ทำงานกับข้อมูลพน้ื ฐานสองประเภท ไดแ้ ก่ จำนวน และ ข้อความ โดย
จำนวนใชแ้ ทนคา่ ซง่ึ นำมาคำนวณทางคณติ ศาสตร์ได้ และขอ้ ความซงึ่ อย่ใู นรปู ของสายอักขระ ส่วนขอ้ มลู
ลักษณะอนื่ ๆ เช่น ภาพ เสียง เปน็ ข้อมลู ที่ซับซอ้ นข้นึ และอยูน่ อกเหนอื ขอบเขตของวิชาน้ี

3.2 ข้อมลู ประเภทจำนวน

ขอ้ มูลประเภทจำนวนยงั แบ่งยอ่ ยออกเปน็ 2 รูปแบบ ไดแ้ ก่ จำนวนเตม็ และ จำนวนจริง ความแตกตา่ ง
ของการเกบ็ ข้อมลู ท้ังสองรูปแบบอยทู่ ่ีวิธีการกำหนดรหัสเลขฐานสองเพ่ือแทนค่าของจำนวนนัน้

3.2.1 ขอ้ มลู ชนิดจำนวนเต็ม

การแทนขอ้ มลู ชนิดจำนวนจะใชเ้ ลขฐานสองหนึ่งค่า แทนจำนวนหนึ่งจำนวน การแทนจำนวนเต็ม หากมี
พืน้ ท่ี 4 ไบต์ (32 บติ ) จะแทนข้อมูลได้ราวส่ลี ้านรูปแบบ ซงึ่ แบ่งรปู แบบการเก็บข้อมูลได้ดงั นี้

• unsigned: เกบ็ คา่ ที่มากกวา่ หรอื เท่ากับศนู ยเ์ ทา่ น้ัน จะเกบ็ ค่าไดต้ ง้ั แต่ 0 ถงึ 232
• signed: ใช้ 1 บติ ในการเก็บเคร่อื งหมาย (บวกหรอื ลบ) และใช้พืน้ ที่ท่ีเหลือในการเก็บคา่ หากให้

เก็บทงั้ ค่าลบและคา่ บวกเปน็ จำนวนเท่าๆ กัน จะมีคา่ ในช่วง [-216,-1,],0,[1,216-1]

ในการเขยี นโปรแกรม หากให้ integer เป็นชนิดข้อมลู จำนวนเตม็ ปกติ จะมชี นิดของขอ้ มลู จำนวนเตม็
ความจตุ ่ำ (short) และจำนวนเตม็ ความจุสูง (long) ใหด้ ้วย ความจุของชนิดข้อมลู ในแตล่ ะเครอื่ งอาจไม่

3.3. ขอ้ มูลประเภทขอ้ ความ 45

เหมอื นกัน จึงควรตรวจสอบความจุของข้อมูลแตล่ ะชนดิ ในเคร่ืองทีใ่ ชง้ านทุกคร้ัง โดยเฉพาะอย่างย่งิ เมือ่

ต้องการเก็บค่าที่เขา้ ใกลข้ อบเขตสูงสุดหรอื ตำ่ สดุ ของขอ้ มูลแตล่ ะชนดิ แตก่ ารเรยี งลำดบั ความจจุ ากนอ้ ย
ไปมากจะเป็น short ≤ integer ≤ long เสมอ

3.2.2 ข้อมูลชนิดจำนวนจรงิ

การแทนจำนวนจริงกใ็ ช้เลขฐานสองหนึ่งคา่ แทนจำนวนหน่งึ จำนวนเชน่ เดยี วกนั ในการเกบ็ คา่ จำนวนจรงิ
จะแบง่ พื้นท่ใี นการเก็บข้อมูลออกเป็นเครือ่ งหมาย เลขนัยสำคญั และเลขชกี้ ำลงั ตามลำดับ ถงึ แม้พ้นื ที่
ในการเก็บเทา่ กัน จำนวนขอ้ มลู ท่ีเกบ็ ได้เทา่ กัน เนอื่ งจากมกี ารใชเ้ ลขช้ีกำลังชว่ ย การเก็บขอ้ มูลแบบ
จำนวนจรงิ จะสามารถเก็บคา่ ของจำนวนไดช้ ว่ งกวา้ งกวา่ จำนวนเตม็ แต่นัยสำคัญสูงสุดทเ่ี ก็บได้จะนอ้ ย
กว่าของจำนวนเตม็

จำนวนเต็มนยั สำคญั ปกตเิ รยี กวา่ ชนดิ float และจำนวนเต็มนัยสำคัญสูงเรยี กวา่ ชนดิ double (นยั
สำคัญสองเทา่ ของปกติ - double precision) อย่างไรกด็ ี ในบางเครื่อง พน้ื ทีเ่ กบ็ ขอ้ มลู และนยั สำคัญ
ของ float และ double อาจไมต่ า่ งกนั แต่พนื้ ทีแ่ ละนยั สำคญั ของ float จะไมเ่ กินของ double เสมอ
กอ่ นการใช้งานจงึ ควรตรวจสอบขอบเขตของคา่ ทใ่ี ชไ้ ด้เสมอ เช่นเดียวกับการใชจ้ ำนวนเต็มชนดิ ตา่ ง ๆ

ลองคดิ

หากกำหนดพ้นื ทีใ่ นการเกบ็ ขอ้ มลู เต็มและจำนวนจรงิ ท่ี 4 ไบต์เทา่ กัน มีค่าท่เี ก็บเปน็ จำนวนเตม็ ได้ แต่เกบ็
เป็นจำนวนจริงไม่ได้หรือไม่ เพราะเหตุใด

3.3 ข้อมูลประเภทข้อความ

ข้อความประกอบด้วยอักขระตา่ งๆ เรียงตอ่ กนั การแทนข้อมูลประเภทนใี้ นคอมพิวเตอรจ์ งึ เปน็ การเก็บ
อักขระแต่ละตวั เรียงตอ่ ๆ กนั ไป เนื่องจากคอมพิวเตอรร์ ับรูข้ อ้ มลู ในรปู แบบของเลขฐานสองเท่านน้ั การ
แทนข้อมูลอกั ขระในคอมพวิ เตอร์กต็ ้องแปลงให้อยู่ในรปู ของเลขฐานสองเช่นเดยี วกัน สมมติว่าต้องการ
แทนอักขระภาษาองั กฤษไดแ้ ก่ a-z มสี ญั ลักษณข์ องอักขระทงั้ หมดทเ่ี ป็นไปได้ 26 แบบ การเกบ็ ข้อมลู
อักขระ 1 ตัวจะตอ้ งใช้พื้นทีอ่ ย่างน้อย 5 บติ เพราะความจุ 5 บติ สามารถแทนข้อมูลได้ 32 รูปแบบ ซ่ึง
เพยี งพอในการแทนข้อมลู 26 รูปแบบที่เราต้องการ กำหนดให้เลขฐานสอง 1 คา่ แทนสญั ลักษณอ์ ักขระ
1 รูปแบบ เชน่ 000002=a, 000012=b, 000102=c, 110012=z เป็นต้น เรยี กวธิ กี ารกำหนดคา่ ฐาน
สองแทนตัวเลขน้วี ่า รหสั อกั ขระ (character encoding)

หากขอ้ มลู ประกอบดว้ ยทั้งตัวพมิ พใ์ หญ่และตวั พิมพ์เลก็ และตอ้ งการแยกตัวอักษรทั้งสองประเภท
ออกจากกนั กจ็ ำเปน็ จะต้องใช้รหสั เพ่ิมเติมจาก 26 รูปแบบแรกท่มี ีอยู่ หากแจกแจงอกั ขระทั้งหมดที่ใช้
เพื่อแทนข้อความในภาษาองั กฤษ จะไดด้ ังน้ี

• ตัวพมิ พเ์ ลก็ a-z รวม 26 รูปแบบ

46 บทท่ี 3. การแทนข้อมลู ในคอมพิวเตอร์

• ตัวพิมพ์ใหญ่ A-Z รวม 26 รปู แบบ
• ตวั เลข 0-9 รวม 10 รูปแบบ
• สัญลักษณ์วรรคตอนตา่ งๆ เชน่ เคาะวรรค จลุ ภาค (,) มหพั ภาค (.) อศั เจรีย์ (!) และอ่นื ๆ

ซึง่ รวมแล้วมากกว่า 64 รปู แบบแตไ่ ม่เกิน 128 รูปแบบ จงึ ใช้พ้ืนที่ 7 บิต ในการแทนข้อมลู ได้ทัง้ หมด
เราสามารถกำหนดรหัสแทนข้อมลู ไดโ้ ดยอสิ ระ แตห่ ากต้องการใช้ขอ้ มลู ร่วมกับผอู้ ื่น ก็ควรมรี หสั

กลางท่เี หมอื นกนั เพ่ือใหแ้ ลกเปลีย่ นข้อมลู กันได้ รหสั มาตรฐานมหี ลากหลายรปู แบบ ท่ีนยิ มใช้เช่น
EBCDIC, ASCII

3.3.1 รหัสอกั ขระ

รหสั แอสกี (ASCII) ใชพ้ ื้นท่ี 7 บิตในการแทนขอ้ มูลอักขระภาษาองั กฤษ แต่การทำงานกบั คอมพวิ เตอร์
เรามักใช้พนื้ ท่ขี นาดเปน็ จำนวนเทา่ ของ 8 เพอ่ื ความสะดวกในการดำเนนิ การตา่ งๆ ของหน่วยประมวล
ผลกลาง อักขระในรหสั แอสกีหนึง่ ตัวจงึ ใช้พ้นื ที่ 8 บิต โดยบติ แรกเป็น 0 เสมอ ดังชว่ ง 128 ตัวแรกใน
ตารางที่ 3.2 โดย 32 ตวั แรกเปน็ อักขระควบคุมท่ใี ช้ในการส่งขอ้ มูล

เนื่องจากรหัสแอสกอี อกแบบมาสำหรับภาษาองั กฤษเทา่ นั้น เมือ่ ตอ้ งการใช้แทนอกั ขระในภาษาอน่ื จึง
ตอ้ งมกี ารกำหนดรหสั อกั ขระเพิ่มเติม เรยี กว่า รหสั แอสกแี บบขยาย (extended ASCII) ซึง่ จะใหบ้ ติ แรก
เปน็ 1 และจะใชพ้ ื้นทอี่ กี 7 บติ ท่ีเหลือในการกำหนดอักขระสำหรับภาษาอ่ืน ตัวอยา่ งของรหสั แอสกแี บบ
ขยายท่ีใชก้ ับภาษาไทย ไดแ้ ก่ Windows-874, TIS-620, ISO-8859-11 (ตาราง 3.2) เป็นตน้

ขอ้ เสยี หลกั ของรหสั แอสกแี บบขยายคอื ใช้ไดท้ ีละคู่ภาษาเทา่ น้ัน คือภาษาอังกฤษและอกี ภาษาหน่งึ
ไมส่ ามารถใช้แทนขอ้ ความท่ีใชอ้ กั ขระมากกว่าสองชดุ พรอ้ มกัน จึงมีการกำหนดมาตรฐานรหัสอกั ขระข้ึน
มาใหม่ เรียกวา่ รหสั ยนู โิ คด้ (unicode encoding) ใช้พ้ืนท่ตี ง้ั แต่ 16-32 บติ ในการแทนขอ้ มลู จงึ ทำให้
แทนภาษาได้หลากหลายด้วยรหสั ชุดเดยี วกนั

รหัสยนู ิโค้ดขนาด 16 บิตสำหรบั ภาษาไทยมี 8 บิตแรกเป็น 0x0E และเรยี งลำดบั ต้ังแต่ ก ท่ี 0x0E01
ไปเรือ่ ยๆ ตามลำดบั ของอักขระในรหัส ISO8859-11 ทุกประการ

การเปิดแฟ้มข้อความโดยใชร้ หัสท่ีไม่ถูกต้อง อาจทำให้ไดข้ อ้ ความทอ่ี ่านไมอ่ อก ได้อกั ขระผิดพลาด
ไปหมด ปัจจุบันจึงนิยมใช้รหัสยูนิโคด้ กันมากกว่ารหัสแอสกแี บบขยาย เพ่อื ลดโอกาสทีจ่ ะเกิดความผิด
พลาดในการใชแ้ ฟ้มขอ้ มูล

3.3.2 สายอักขระ

สายอกั ขระคอื การนำอกั ขระมาต่อกัน ดงั นั้นจงึ ต้องใช้พนื้ ที่ในการเก็บข้อมลู อย่างน้อยเท่ากบั จำนวน
อักขระทตี่ อ้ งการเก็บ แตข่ อ้ มลู ชนิดสายอกั ขระมักมคี วามยาวทีไ่ ม่แน่นอน เช่น ชอื่ คน อาจมคี วามยาว
ต้งั แตส่ ามตัวอกั ษรไปจนถึงมากกวา่ สบิ ตวั อักษร การจองพื้นทเ่ี พอ่ื เก็บข้อมลู ชนดิ สายอกั ขระจงึ ตอ้ งเผอ่ื
ไว้สำหรบั ความยาวท่ีมากทส่ี ุดท่ีเปน็ ไปได้

ปญั หาถัดมาในการจัดการกับสายอกั ขระซึ่งมีความยาวไม่แนน่ อนคือ ไมร่ ขู้ อบเขตส้ินสุดของข้อมลู
หากจองพ้ืนท่ไี ว้สิบตัว แต่ขอ้ มลู มีแค่สามตวั คอมพิวเตอรไ์ ม่สามารถแยกแยะได้วา่ ข้อมลู จะสนิ้ สดุ ท่ีใด จึง

_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F 3.3. ขอ้ มูลประเภทขอ้ ความ
ตารางท่ี 3.2: ตารางรหัสแอสกแี บบขยาย ISO8859-11
0_ NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI

1_ DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

2_ SP ! ” # $ % & ’ ( ) * + , - . /

3_ 0 1 2 3 4 5 6 7 89 : ; <=> ?

4_ @ A B C D E F G H I J K L M N O

5_ P Q R S T U VWXYZ [ /]^ _

6_ ‘ abcde f ghi j k lmn o

7_ p q r s t u vw xyz { | } ~ DEL

8_

9_

A_ NBSP ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ

B_ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผฝพ ฟ

C_ ภ ม ย ร ฤ ล ฦ ว ศ ษ ส ห ฬอ ฮ ฯ

D_ ะ ั า ำ ิ ี ึ ื ุ ู ฺ ฿

E_ เ แ โ ใ ไ ๅๆ ็ ่้๊ ๋ ์ํ๎๏

F_ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘๙๚ ๛

47

48 บทที่ 3. การแทนข้อมูลในคอมพิวเตอร์

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

ตัวอยา่ งเชน่ การเก็บข้อความ “ภาษาไทย” ดว้ ยรหสั อกั ขระ ISO8859-11 จะใชพ้ นื้ ที่ 7+1=8 ไบต์
การแทนข้อมูลประเภทข้อความทเ่ี ป็นตวั เลขตา่ งกับการแทนข้อมูลประเภทจำนวน การแทนขอ้ มลู
แบบสายอกั ขระจะใช้รหัสเลขฐานสองหนึ่งคา่ ต่อตวั เลขหนงึ่ หลกั และต้องใชอ้ กั ขระปดิ ทา้ ยด้วย ในขณะท่ี
การแทนขอ้ มลู แบบจำนวนจะใชร้ หสั เลขฐานสองหนึง่ ค่าตอ่ จำนวนน้นั ท้ังจำนวน

ลองคิด

แฟม้ ขอ้ มูลทเ่ี กบ็ ข้อความภาษาอังกฤษและบนั ทึกดว้ ยรหสั แอสกี จะสามารถเปดิ อ่านแบบรหัสยนู โิ ค้ด 16
บิตไดถ้ กู ตอ้ งหรือไม่ เพราะเหตุใด

3.4 ขอ้ มูลชนิดตรรกะ

ขอ้ มูลชนิดตรรกะมีคา่ ท่เี ป็นไปได้เพียงสองคา่ คือ จรงิ และ เทจ็ จึงใช้พ้ืนท่เี ก็บขอ้ มลู เพียงหนง่ึ บิตก็
เพยี งพอ แต่การใช้พ้ืนทเี่ พยี งหนง่ึ บิตอาจทำใหก้ ารประมวลผลโดยหนว่ ยประมวลผลกลางไม่สะดวก โดย
มากจึงมักใชพ้ นื้ ทเี่ ท่ากบั จำนวนเต็มปกติ บางภาษาโปรแกรมจะใชจ้ ำนวนเตม็ แทนขอ้ มูลชนิดตรรกะ โดย
กำหนดให้ 0 แทนค่าเทจ็ และค่าอื่นๆ นอกจาก 0 แทนค่าจริง

ข้อมูลชนิดตรรกะพบมากในการทำงานแบบเง่อื นไข ซึง่ การตรวจสอบเงื่อนไขจะไดค้ า่ จรงิ หรือเท็จ
เพอ่ื เลอื กเสน้ ทางการทำงานตามตรรกะทไ่ี ด้ตอ่ ไป

นอกจากชนดิ ของข้อมลู พ้ืนฐานข้างต้นแล้ว ยังมีชนดิ ขอ้ มลู ที่ซับซอ้ นอีกหลายรปู แบบท่ใี ช้ในการเขยี น
โปรแกรม เช่น แถวลำดับ รายการ ระเบยี น ออบเจกต์ ซงึ่ อยนู่ อกเหนือขอบเขตของวิชาน้ี

3.5 ตัวแปร

3.5.1 การอ้างถึงข้อมลู และการจองพืน้ ที่ในหนว่ ยความจำ

การดำเนินการใดๆ ของคอมพิวเตอร์จะเรยี กใช้ขอ้ มลู จากหนว่ ยความจำเสมอ จึงต้องมีการจองพื้นทีใ่ น
หน่วยความจำเพ่ือเก็บข้อมูล และกำหนดคา่ ใหพ้ ้ืนที่น้ันก่อนนำไปใช้งานเสมอ การอ้างองิ ถงึ ข้อมูลนน้ั
ทำได้ด้วยอา้ งถงึ เลขที่อยู่ (address) ของหน่วยความจำ เพื่อนำค่า (value) ท่เี กบ็ ไว้ ณ ตำแหน่งนน้ั มา
ใช้งาน เมอ่ื เริม่ โปรแกรม ระบบปฏบิ ัตกิ ารจะจองพืน้ ทใี่ นหนว่ ยความจำให้สำหรบั โปรแกรมใช้งาน

ในขั้นตอนการเขียนโปรแกรมจะมีการระบพุ น้ื ท่ที ี่ตอ้ งการใช้ การอ้างอิงถงึ พ้นื ท่ีเหล่าน้ที ำโดยประกาศ
ตัวแปรขนึ้ แทนการเก็บข้อมลู ต่างๆ ช่อื ตัวแปรมกั เป็นภาษาองั กฤษความยาวไม่มาก และส่อื ถึงขอ้ มูลที่
เก็บอย่ใู นหน่วยความจำน้นั

3.5. ตัวแปร 49

เลขที่อยู่ intPtr number
คา่
0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77
เลขท่ีอยู่ 0x64
ค่า 0x74 0x75 0x37 0x30 0x00 0x00 0x00 0x7F
0x00
0x78 0x79 0x7A 0x7B 0x7C 0x7D 0x7E

0x00 0x46 0x00 0x00 0x00 0x30 0x30
c

ตารางที่ 3.3: ตวั อยา่ งการเก็บขอ้ มูลในหน่วยความจำ

ข้อกำหนดในการตงั้ ชื่อตวั แปรโดยทัว่ ไปคือ ไมเ่ ป็นคำสงวน (reserved word) ในภาษาโปรแกรม มี
ความยาวไม่มากเกินกำหนด ไม่ใช้อักขระพิเศษซงึ่ ใช้เป็นตัวดำเนนิ การ ขึ้นต้นด้วยตวั อกั ษร เป็นต้น

การใชต้ วั แปรมีสองลักษณะ ได้แก่ การกำหนดค่าใหต้ วั แปร (set) ซึ่งเป็นการนำข้อมูลไปเก็บไว้ ณ
ตำแหน่งทต่ี วั แปรอ้างถึง และการเรียกใช้คา่ ในตัวแปร (get) ซง่ึ เป็นการนำคา่ ท่ีเกบ็ ไว้ ณ ตำแหนง่ ท่ี
ตัวแปรอา้ งถึงมาใชง้ าน

3.5.2 ขอ้ มลู ชนิดตวั ช้ี

การใชต้ ัวแปรโดยทวั่ ไปน้ันเราตอ้ งการค่าทีถ่ ูกเกบ็ ไวใ้ นหนว่ ยความจำ แต่ในบางกรณี เราจะเปน็ ต้องใช้
เลขท่ีอยใู่ นหน่วยความจำ เชน่ การสงั่ ใหค้ อมพวิ เตอร์อ่านข้อมลู ไปเกบ็ ไวใ้ นหน่วยความจำ เราตอ้ งใหเ้ ลข
ทอี่ ยสู่ ำหรับการเก็บขอ้ มูลในคำส่งั อ่าน

ในอีกทางหนงึ่ หากเราเกบ็ เลขทีอ่ ยู่ไวใ้ นหนว่ ยความจำ เราก็สามารถดงึ ขอ้ มูลท่เี กบ็ อยู่ ณ เลขท่ี
อยนู่ ัน้ ไดเ้ ช่นกัน การจองพน้ื ทเี่ พือ่ เกบ็ เลขทอี่ ย่นู ้ใี ชผ้ า่ นการประกาศตัวแปรชนดิ ตัวช้ี โดยตอ้ งกำหนดชนดิ
ของตวั ชต้ี ามชนิดของข้อมลู ปลายทางด้วย

จากตารางที่ 3.3 หากให้ข้อมลู ชนิดตัวชม้ี ีขนาด 1 ไบต์ และจำนวนเต็มมีขนาด 4 ไบต์ intPtr เป็น
ข้อมูลชนดิ ตัวชีข้ องจำนวนเต็ม และคอมพวิ เตอร์จองพน้ื ท่ี ณ ตำแหนง่ 0x70 ให้สำหรับเกบ็ ข้อมูล เม่ือ
กำหนดค่าให้ intPtr เปน็ 0x74 การอ้างถงึ ขอ้ มูลปลายทางผา่ นตวั ช้ี intPtr จะได้ค่าจำนวนเต็มขนาด 4
ไบตท์ เี่ กบ็ อยู่ ณ ตำแหนง่ 0x74 - 0x77 ซ่ึงมีค่าเปน็ 0x00000064 เป็นตน้

3.5.3 ตัวแปรในภาษาซี

เมอ่ื โปรแกรมเริม่ ทำงานและมีการประกาศใชต้ วั แปร ระบบปฏบิ ตั กิ ารจะจองพ้ืนทีใ่ นหนว่ ยความจำให้
เท่ากับขนาดของตัวแปรนนั้ การอา้ งอิงถงึ พนื้ ทใ่ี นหนว่ ยความจำในสว่ นรหัสตน้ ฉบบั จะทำผา่ นตวั แปร
โดยไมจ่ ำเป็นต้องรวู้ า่ ไดห้ น่วยความจำที่ตำแหนง่ ใดมา เชน่ สมมตใิ หต้ วั แปรชนดิ จำนวนเต็มมขี นาด 4
ไบต์ หากกำหนดตัวแปร number เป็นชนิดจำนวนเตม็ เครอ่ื งจะจองพ้นื ท่ีวา่ งตดิ กนั ขนาด 4 ไบตใ์ ห้
สมมติวา่ ได้เปน็ ตำแหน่ง 0x74 ถงึ 0x77 เปน็ ตน้

เม่อื ใช้คำสั่งกำหนดค่าให้ตวั แปร ระบบปฏบิ ัตกิ ารจะกำหนดค่า ณ ตำแหนง่ ที่อา้ งถึง เช่น เมอื่ กำหนด
ให้ number มีคา่ เปน็ 100 ระบบปฏิบัตกิ ารจะกำหนดคา่ ใหต้ ำแหน่ง 0x74 ถงึ 0x77 เกบ็ ค่าเลขฐาน
สองในรปู แบบจำนวนเต็มขนาด 4 ไบตซ์ ง่ึ แทนจำนวน 100 (0x00000064)

50 บทที่ 3. การแทนข้อมลู ในคอมพวิ เตอร์

การเรียกใชค้ า่ ในตวั แปรทำไดโ้ ดยเรยี กใช้ชอ่ื ตวั แปรน้ัน และจะหมายถงึ ค่าทเ่ี ก็บไว้ ณ ตำแหน่งนัน้
เช่น การเรยี กใช้ number จะได้ค่าเปน็ จำนวนเตม็ ขนาด 4 ไบตท์ ีเ่ ก็บไว้ ณ ตำแหน่ง 0x74-0x77
เป็นต้น

ในทำนองเดยี วกัน หากกำหนดตวั แปร c ใหเ้ ปน็ อกั ขระในรหัสแอสกี ซึ่งใชพ้ ้นื ที่ 1 ไบต์ เครอื่ งจะ
จองพ้ืนท่ใี นหน่วยความจำให้ สมมติวา่ ได้เป็นตำแหน่ง 0x7D เมื่อกำหนดคา่ ใหต้ วั แปร c เป็น ’0’ จะ
เปน็ การใส่รหัสแอสกีของเลขศูนย์ (0x30) ลงในหนว่ ยความจำ ณ ตำแหนง่ 0x7D และการเรยี กใช้
ตัวแปร c ก็จะไดค้ ่ารหสั แอสกีขนาด 1 ไบต์ ณ ตำแหนง่ 0x7D ออกมาเช่นกัน

จากท่ีกล่าวไปแลว้ วา่ ขอ้ มูลท้งั หมดในคอมพวิ เตอร์ถกู เกบ็ อย่ใู นรปู แบบเลขฐาน 2 ในตารางท่ี 3.3
หากมองขอ้ มูลท่ตี ำแหนง่ 0x77 เป็นอกั ขระในรหัส ISO8859-11 จะเห็นข้อมลู ณ ตำแหนง่ น้ีเป็นอักขระ
d (0X64) ในการจองพืน้ ทเี่ พื่อเก็บข้อมูล จึงต้องกำหนดชนิดของข้อมลู เพ่อื ใหน้ ำไปใช้งานต่อได้ถูกต้อง

ในการเขียนโปรแกรมน้ันภาษาซี ต้องกำหนดชนิดของข้อมลู ทีต่ ัวแปรนัน้ แทนอยู่เสมอ และควรตง้ั ช่อื
ใหส้ ่ือความถงึ ขอ้ มลู ทเ่ี ก็บอยู่ดว้ ย เม่อื จบการทำงานของโปรแกรม โปรแกรมจะคนื พน้ื ทใ่ี นหนว่ ยความจำ
ที่จองไว้สำหรับใช้งานให้ระบบปฏิบตั ิการ เพอ่ื นำไปจดั สรรให้โปรแกรมอนื่ ๆ ใช้ต่อไป

ลองคิด

หากประกาศตัวแปรโดยไม่ได้กำหนดคา่ ให้ตวั แปร และเรยี กใชต้ วั แปรน้นั ผลที่ไดน้ า่ จะเป็นอย่างไร

แบบฝึกหดั

กำหนดชนดิ ของขอ้ มูลและพ้ืนทใี่ นการเกบ็ ในภาษาซีดังตอ่ ไปน้ี

ชนิดขอ้ มูล พ้นื ท่ี (ไบต)์ ชนิดข้อมลู พื้นท่ี (ไบต์)

char 1

short 2 int 4

unsigned 4 long 8

loat 4 double 8

1. จงระบุพื้นท่นี ้อยท่ีสุดที่ใชใ้ นการเกบ็ ข้อมลู ตอ่ ไปนี้

a) สายอกั ขระคา่ “100”
b) จำนวนเตม็ ค่า 100
c) จำนวนจริงคา่ 100
d) อักขระเลข ‘0’
e) สายอักขระเลข “0”

3.5. ตวั แปร 51

2. จงระบุจำนวนตัวแปรท่ีตอ้ งใชแ้ ละชนิดของข้อมลู ท่เี หมาะสมในการเก็บข้อมลู ต่อไปน้ี

a) เกรดประจำรายวิชา 2301170 ของนิสิต 1 คน
b) หน่วยกิตสะสมตลอดหลักสูตรสำหรบั นสิ ติ 1 คน
c) ขนาดอะตอมในหน่วยนาโนเมตรนัยสำคญั 3 ตำแหน่ง
d) ค่าเฉล่ียของเลข 10 จำนวน
e) เลขปีครสิ ตศ์ กั ราช
f) เลขประจำตวั ประชาชน 13 หลกั

3. checksum คอื การเกบ็ ข้อมูลเพม่ิ หนง่ึ ค่าเพื่อตรวจสอบความถกู ตอ้ งของข้อมูลทีม่ คี วามยาวมาก
ในเลขประจำตวั นิสิต 10 หลกั นน้ั สองหลกั แรกคอื ปที เี่ ขา้ ศึกษา หลกั ท่สี ามคอื ระดบั การศกึ ษา หลัก
ที่ 4-7 เป็นลำดบั นสิ ติ หลกั ที่ 8 คอื ค่า checksum หลกั ท่ี 9-10 คอื รหัสคณะ ตอ้ งเกบ็ ขอ้ มูลเลข
ประจำตวั นสิ ติ อย่างไรจงึ จะนำมาคำนวณคา่ checksum ได้ ใหอ้ ธบิ ายตัวแปรท่ใี ช้ ระบชุ นิดและ
วธิ กี ารใช้งานคร่าว ๆ

4. ตอ้ งการคำนวณจำนวนชัว่ โมงการใชง้ านอนิ เทอรเ์ นต็ เพือ่ นำไปคดิ ค่าบริการ โดยให้ป้อนข้อมูลเข้า
เป็นเวลาเร่มิ ใช้งาน และเวลาสิน้ สดุ การใช้งาน หากคดิ ค่าบริการเป็นนาที ควรเกบ็ ข้อมลู อย่างไร ให้
อธบิ ายตวั แปรตา่ งๆ ทจ่ี ำเปน็ ตอ้ งใช้ ระบุชนิดของตัวแปรดว้ ย



บทท่ี 4

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

วัตถปุ ระสงค์การเรียนรู้

อธิบายการทำงานของโปรแกรมในรูปการทำงานแบบลําดบั

1. ใชต้ วั ดำเนินการต่างๆ เพ่อื กำหนดการทำงานตามทต่ี อ้ งการได้ รวมถึงใช้สัญลกั ษณ์ของผงั งานได้
ถูกตอ้ ง

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

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

ใช้เวลา 3 คาบ

4.1 ตวั ดำเนนิ การ

โปรแกรมคอมพวิ เตอร์เปน็ ชดุ คำสงั่ ซง่ึ ให้คอมพวิ เตอรท์ ำงานตามที่กำหนด การเขยี นโปรแกรมเพือ่ แก้
ปัญหาต่างๆ นน้ั ตอ้ งรกู้ อ่ นว่าคอมพิวเตอร์สามารถทำอะไรได้บา้ ง และจะสัง่ การให้คอมพิวเตอร์ทำงาน
เหลา่ นน้ั ไดอ้ ยา่ งไร จากนนั้ จึงสรา้ งชุดคำสัง่ ซงึ่ มลี ำดบั การทำงานทถ่ี ูกต้องเพ่ือการแกป้ ัญหาทต่ี อ้ งการ

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

นอกจากตวั ดำเนนิ การซ่ึงใชส้ ำหรบั ทำงานพนื้ ฐานแลว้ ยงั มฟี งั ก์ชนั ซ่ึงเป็นชุดคำส่ังทร่ี วมขน้ั ตอนการ
ทำงานพ้ืนฐานเอาไว้เพอื่ ทำงานบางอยา่ งอกี ดว้ ย การเรยี กใชฟ้ งั กช์ ันจะกลา่ วถึงในบทที่ 8

54 บทที่ 4. การทำงานแบบลำดับ

ตารางท่ี 4.1: ตวั ดำเนนิ การพชี คณิต

ลำดับ สัญลักษณ์ ตวั ดำเนนิ การในภาษาซี การใชง้ าน ความหมาย
1 ^ หรือ ** pow(b,e) b ^e การยกกำลงั (be)
2 * A*3 การคณู
2 * / A/3 การหารจำนวนจริง
2 / / A DIV 3 การหารปดั เศษทิง้
2 DIV % A MOD 3 การหารเอาเฉพาะเศษเหลือ
3 MOD + A+3 การบวก
3 + - A-3 การลบ
-

นพิ จน์ หมายถึง การใชส้ ญั ลกั ษณ์ตา่ งๆ ไม่วา่ จะเปน็ ค่าคงท่ี ตัวแปร หรอื ฟังก์ชันซ่ึงคืนคา่ ออกมา
ประกอบกบั ตวั ดำเนนิ การตา่ งๆ ตามขอ้ กำหนดของตัวดำเนินการ และคำนวณผลลพั ธอ์ อกมาเปน็ คา่ คา่
หนงึ่ ได้ เมอื่ มีฟงั ก์ชนั และตัวดำเนินการหลายๆ ตัว โดยท่ัวไปลำดบั ความสำคญั ในการทำงานจะเปน็ ดังนี้

1. ฟังกช์ นั
2. ตวั ดำเนนิ การซ่งึ มตี ัวถกู ดำเนนิ การเพียงตัวเดียว ท่ใี ชบ้ ่อยไดแ้ ก่ NOT (!), increment (++),

decrement (–), วงเล็บ เป็นตน้
3. ตวั ดำเนินการซึง่ มตี ัวถกู ดำเนินการสองตัว เช่น ตวั ดำเนนิ การพีชคณิต ตวั ดำเนินการเปรยี บเทยี บ

ตัวดำเนนิ การตรรกะ การกำหนดค่า เปน็ ตน้

ในแตล่ ะหมวดอาจมีลำดับความสำคญั ย่อยภายในหมวดด้วย หากมีตวั ดำเนินการทม่ี ีลำดบั ความสำคญั
เทา่ กัน คอมพวิ เตอรจ์ ะทำงานตามกฎการจัดหมู่ (associativity) ของตวั ดำเนนิ การเหล่าน้ัน ซงึ่ สว่ น
มาก จะเรม่ิ ทำจากตัวดำเนินการทางซ้ายก่อน

4.1.1 ตวั ดำเนินการพีชคณิต

ตวั ดำเนินการพีชคณติ คอื คำส่ังการคำนวณทางพชี คณิตเบอื้ งตน้ ตา่ งๆ ลำดับความสำคญั ในการทำงาน
เป็นดงั ตารางท่ี 4.1 เริ่มจากการยกกำลงั ซึง่ บางภาษาโปรแกรมเช่นภาษาซสี รา้ งเป็นฟงั กช์ ันมาใหใ้ ช้งาน
จึงมีลำดบั ความสำคัญของฟงั กช์ นั สงู จะกวา่ การคำนวณเบือ้ งต้นต่างๆ อยู่แลว้ การคณู และหารทกุ รปู
แบบ ตามดว้ ยบวกและลบ

หากมตี วั ดำเนนิ การยกกำลงั แยกต่างหาก ไม่เปน็ ฟงั กช์ ัน กฎการจัดหมูข่ องการยกกำลงั คอื ทำทางขวา
ก่อน ส่วนตวั ดำเนนิ การบวก ลบ คณู และหาร ทำทางซา้ ยกอ่ นเสมอ

4.1. ตวั ดำเนนิ การ 55

ตารางท่ี 4.2: ตัวดำเนนิ การเปรยี บเทียบ

ลำดับ สญั ลักษณ์ ตวั ดำเนนิ การในภาษาซี การใชง้ าน ความหมาย
1 > > A>2 มากกว่า
1 ≥ >= A≥2 มากกว่าหรอื เท่ากบั
1 < < A<2 นอ้ ยกวา่
1 ≤ <= A≤2 นอ้ ยกว่าหรอื เทา่ กบั
2 = == A=2 เปรียบเทยี บการเท่ากัน
2 ≠ != A≠2 เปรียบเทียบการไม่เท่ากัน

ตารางท่ี 4.3: ตวั ดำเนินการตรรกะ

ลำดับ สัญลักษณ์ ตัวดำเนนิ การในภาษาซี การใช้งาน ความหมาย
1 NOT ! NOT(A)
ใหค้ า่ ความจรงิ ตรงกันข้ามกบั คา่
2 AND && A AND B เดิม
3 OR || A OR B
ให้คา่ จรงิ เมือ่ A และ B เปน็ จรงิ

ใหค้ ่าจรงิ เมอื่ A หรอื B เปน็ จริง

4.1.2 ตัวดำเนนิ การเปรยี บเทยี บ

ตัวดำเนนิ การเปรียบเทียบเป็นคำสง่ั เปรียบเทยี บค่าระหวา่ งตวั ถกู ดำเนินการทัง้ สองขา้ งของเครอ่ื งหมาย
ให้ผลลัพธเ์ ปน็ คา่ จรงิ หรอื เท็จ

ลำดบั ความสำคัญในการทำงานคอื เปรียบเทยี บแบบมากกวา่ หรือน้อยกวา่ กอ่ น แล้วจึงเปรียบเทยี บ
การเท่ากัน ดังตารางท่ี 4.2 แตบ่ างภาษา เช่น Python กำหนดลำดับความสำคญั ของตวั ดำเนินการ
เปรยี บเทยี บทุกรูปแบบไวเ้ ทา่ กัน ก่อนเขียนโปรแกรมจึงควรตรวจสอบข้อกำหนดของแตล่ ะภาษาอีกครง้ั

เคร่อื งหมาย = นน้ั มีสองความหมาย นยั หน่ึงหมายถึงการเปรียบเทียบการเท่ากนั แต่เครื่องหมาย
= กใ็ ช้เปน็ ตัวดำเนนิ การกำหนดค่าในหลายๆ ภาษาโปรแกรมด้วย จึงนยิ มเขียน == เหมอื นในภาษา
โปรแกรมเพือ่ แสดงการเปรยี บเทยี บมากกวา่

4.1.3 ตัวดำเนนิ การตรรกะ

ตวั ดำเนินการตรรกะเปน็ คำสั่งการคำนวณทางตรรกะของตัวถูกดำเนนิ การ ให้ผลลพั ธเ์ ปน็ คา่ จริงหรือเทจ็
เนื่องจาก NOT เป็นตัวดำเนินการซึง่ มตี ัวถกู ดำเนนิ การเพยี งตวั เดยี ว จึงมลี ำดับความสำคญั สงู ที่สุด

ถัดมาเป็นคำสง่ั AND และคำส่ัง OR ตามลำดับ ดงั ตารางท่ี 4.3

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

4.1.4 การกำหนดคา่

การกำหนดคา่ ในภาษาโปรแกรมและผงั งานสว่ นมากใช้ตัวดำเนินการ = หรอื := และมีตวั ถูกดำเนนิ การ
สองตัว ซง่ึ หมายถงึ การนำค่าของตวั ถกู ดำเนินการทางขวา ในรหสั คำสั่งที่ 4.1 คือ source ไปเกบ็
ในท่ีอยู่ของตวั ดำเนนิ การทางซ้าย ในท่นี ค้ี อื target ตวั ถูกดำเนนิ การทางขวาอาจะเป็นตัวแปร ค่าคงที่
หรือนิพจน์ก็ได้

target = source

รหัสคำส่ังท่ี 4.1: การกำหนดคา่

การกำหนดค่ามีลำดบั ความสำคัญตำ่ ท่ีสดุ ในบรรดาคำส่งั และตวั ดำเนนิ การทงั้ หมดที่กลา่ วมาแลว้ ซ่งึ
ทำให้การกำหนดคา่ ตอ้ งทำนิพจนท์ างขวาให้เปน็ ผลลพั ธก์ ่อน แล้วจึงดำเนนิ การกำหนดคา่ ให้พื้นทท่ี ่จี อง
ไว้ซง่ึ ระบดุ ว้ ยตวั แปรทางซ้ายของตวั ดำเนนิ การ

4.1.5 การอา่ นเขยี นขอ้ มูลเบอื้ งตน้

จากทีก่ ลา่ วไปแลว้ ในบทที่ 1 และ 3 การทำงานกับข้อมลู ของคอมพวิ เตอรน์ ้นั จะเก็บขอ้ มลู ในหนว่ ย
ความจำเสมอ ซ่ึงสามารถอ้างถงึ หน่วยความจำนน้ั ได้ผ่านตวั แปร การอ่านหรือรับขอ้ มูลเข้ามาเก็บอยูใ่ น
คอมพิวเตอร์ จงึ เปน็ การรบั ขอ้ มูลจากอุปกรณ์ภายนอกแล้วนำมาเกบ็ ในหน่วยความจำ ณ ตำแหน่งท่ี
กำหนดดว้ ยชอ่ื ตัวแปร ในขณะที่การเขียนข้อมูล คอื การนำคา่ ทเ่ี กบ็ อยใู่ นหน่วยความจำซงึ่ อ้างถึงด้วยชอื่
ตวั แปรออกมาแสดงผลผ่านอปุ กรณ์ทกี่ ำหนด โดยปกติแล้ว วิธกี ารอา่ นเขยี นขอ้ มลู จะเป็นฟงั ก์ชันอยู่ใน
คลงั โปรแกรม

การอา่ นขอ้ มูลครงั้ หนึ่งสามารถอา่ นคา่ ไดม้ ากกว่าหน่งึ ค่า และต้องใชต้ ัวแปรจำนวนเทา่ กนั ในการรับ
คา่ ท่ีอ่านเข้ามาดว้ ย ในทำนองเดยี วกัน การเขยี นขอ้ มูลก็เขียนไดม้ ากกว่าหน่งึ คา่ ในหน่ึงครง้ั และตอ้ ง
ระบคุ ่าท่ีต้องการใหเ้ ขียนทกุ คา่ ลงไป สำหรบั การเขียนข้อมลู นั้น นอกจากจะเขียนคา่ ทเี่ กบ็ อยู่ในตวั แปร
โดยตรงไดแ้ ล้ว ยังสามารถเขียนค่าคงที่ และเปน็ นิพจนต์ ่างๆ ซ่งึ ถูกทำใหเ้ ปน็ ผลสำเร็จและกลายเปน็ คา่
คงทไี่ ดอ้ กี ดว้ ย

ลองคิด

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

4.2 การออกแบบโปรแกรม

การแกป้ ัญหาโดยคอมพวิ เตอร์คอื การเขยี นลำดบั การทำงานอย่างเปน็ ขน้ั เป็นตอนเพ่อื ให้คอมพวิ เตอร์
ทำตาม เมอื่ สามารถแทนข้อมลู เพือ่ ใชใ้ นการทำงานของคอมพวิ เตอรไ์ ดแ้ ล้ว ลำดบั ต่อไปคอื การนำการ
ดำเนนิ การตา่ งๆ มาเรยี งเป็นขัน้ ตอนเพือ่ แก้ปัญหาที่กำหนด

4.2. การออกแบบโปรแกรม 57

4.2.1 ข้นั ตอนวิธี

การออกแบบโปรแกรมคอื การออกแบบขัน้ ตอนวิธเี พือ่ แกป้ ญั หาทีก่ ำหนด โดยทั่วไปมักเริม่ จากกำหนด
รปู แบบของขอ้ มลู เข้าและขอ้ มลู ออกก่อน จากน้ันจึงแบ่งงานท่ตี อ้ งทำในการแกป้ ญั หาออกเปน็ สว่ นย่อยๆ
แลว้ เขยี นลำดบั คำสงั่ เพ่ือแก้ปัญหาย่อยเหล่าน้นั วธิ กี ารออกแบบโปรแกรมแบบน้เี รียกวา่ การออกแบบ
แบบบนลงล่าง (top-down approach)

ตวั อย่าง 4.1 (การบวกเลขสองจำนวน). การออกแบบการทำงานของเครอื่ งบวกเลข จะเริ่มจากการ
กำหนดลกั ษณะข้อมลู เขา้ และข้อมูลออกก่อน ใหเ้ คร่ืองบวกเลขรบั จำนวนสองจำนวน แล้วคนื ผลลพั ธเ์ ป็น
ผลบวกของสองจำนวนนัน้ ลักษณะของข้อมูลเข้าจะเปน็ จำนวน 2 คา่ และขอ้ มูลออกจะเปน็ จำนวน 1 คา่
จากนน้ั ออกแบบขนั้ ตอนการทำงาน เขยี นเป็นลำดบั การทำงานได้ดงั นี้

1. รบั ข้อมูลเขา้ 2 จำนวน
2. หาผลบวก เก็บผลลพั ธ์เอาไว้
3. ส่งผลลัพธค์ ืนเปน็ ข้อมูลออก

จากน้ันจงึ เปล่ยี นลำดับการทำงานน้เี ปน็ คำสง่ั สำหรบั คอมพวิ เตอร์ตอ่ ไป □

ตวั อย่าง 4.2 (การหาคา่ เฉล่ียของเลขสามจำนวน). การออกแบบโปรแกรมน้ีกค็ ล้ายกบั ตัวอยา่ ง 4.1 คอื
มีขอ้ มลู เข้าเปน็ จำนวน 3 ค่า และข้อมลู ออกเปน็ จำนวน 1 คา่ และเขียนลำดบั การทำงานไดใ้ นทำนอง
เดยี วกนั ดังนี้

1. รับข้อมลู เขา้ 3 จำนวน
2. หาค่าเฉลีย่ เก็บผลลัพธ์เอาไว้
3. ส่งผลลัพธค์ นื เปน็ ข้อมูลออก

และแปลงลำดับการทำงานนี้เป็นคำสงั่ สำหรบั คอมพิวเตอร์
หรืออีกวิธีหน่ึง เราอาจแยกขนั้ ตอนท่ี 2 ออกเปน็ 2 ข้นั ตอนย่อยเพอ่ื หาค่าเฉลี่ยได้ดงั น้ี

1. รบั ขอ้ มูลเข้า 3 จำนวน
2. หาคา่ เฉล่ีย เก็บผลลพั ธ์เอาไว้ โดยมขี น้ั ตอนดงั น้ี

a) หาผลบวกของสามจำนวน เก็บผลลัพธเ์ อาไว้
b) นำผลลัพธข์ า้ งตน้ หารดว้ ย 3 เกบ็ ไว้เป็นผลลัพธส์ ดุ ท้าย

3. สง่ ผลลพั ธค์ ืนเปน็ ข้อมลู ออก



ขอ้ สงั เกตสำคัญจากตัวอยา่ ง 4.2 คอื ในข้นั ตอนที่ 2 ของแบบแรกน้ัน เราใหค้ อมพวิ เตอร์หาค่า
เฉลีย่ แสดงว่าคอมพิวเตอรต์ อ้ งมีคำสงั่ สำหรับหาค่าเฉลีย่ ของจำนวน 3 จำนวนอยแู่ ลว้ หากไม่มี การเขยี น
ขั้นตอนการทำงานแบบนี้จะนำไปแปลงเป็นคำส่ังในคอมพิวเตอร์ไม่ได้ ในการออกแบบขนั้ ตอนการทำงาน

58 บทท่ี 4. การทำงานแบบลำดบั

ผู้ออกแบบจึงจำเป็นต้องรู้ความสามารถของคอมพิวเตอร์ดว้ ย และการออกแบบโปรแกรมน้ันจงึ เปน็ การ
แตกการทำงานออกมาเปน็ ข้นั ตอนพ้นื ฐานยอ่ ยๆ ท่ีคอมพิวเตอร์สามารถทำงานได้

4.2.2 รหัสเทียม (pseudocode) และ ผังงาน (flowchart)

รหัสเทียม คอื ชุดคำสง่ั คอมพวิ เตอรซ์ ึง่ ใชแ้ สดงข้นั ตอนการทำงานตา่ งๆ รหัสเทยี มมลี กั ษณะคลา้ ยรหสั คำ

สง่ั ภาษาตา่ งๆ แตไ่ มม่ ขี อ้ กำหนดเรื่องไวยากรณม์ ากเทา่ รหัสคำส่ัง ข้อดีของการใช้รหัสเทียมคือสามารถ

แปลงไปเปน็ รหสั คำสงั่ ตามภาษาทตี่ ้องการได้สะดวก เนอื่ งจากโครงสร้างคำสง่ั คล้ายกันมาก แต่หากขั้น

ตอนวิธนี น้ั ซบั ซอ้ น รหัสเทยี มจะเขา้ ใจได้ยากกวา่ การใช้แผนภาพ

แผนภาพหนงึ่ ท่ใี ช้ในการออกแบบข้ันตอนการทำงานคอื ผงั งาน ผังงานประกอบด้วยสัญลกั ษณ์

กำหนดข้นั ตอนการทำงาน และลูกศรแสดงลำดับขน้ั ตอนการทำงาน มกี ารกำหนดมาตรฐานความหมาย

ของสัญลักษณ์ตา่ งๆ ในผังงานเพ่ือให้เข้าใจไดต้ รงกัน มาตรฐานทใ่ี ชก้ นั มากคือ ISO5807:1985

สญั ลกั ษณท์ ใ่ี ช้กนั ทัว่ ไป เปน็ ดังตารางที่ 4.4

ลำดบั การทำงานในผังงานกำหนดด้วยลูกศร การทำงานจะเรม่ิ จากสญั ลักษณเ์ ริ่มต้น ทำงานตามลูก

ศรไปทลี ะขนั้ ตอน และไปสน้ิ สุดทีส่ ญั ลักษณส์ ้ินสุดการทำงาน สัญลกั ษณก์ ารอ่านเขยี นขอ้ มูล การทำงาน

และการเรยี กใช้ข้นั ตอนการทำงานทก่ี ำหนดไวล้ ่วงหนา้ นนั้ จะมลี กู ศรเขา้ หนงึ่ ทาง และลูกศรออกหนง่ึ

ทางเสมอ ในขณะท่ีสัญลกั ษณ์เรม่ิ ตน้ จะไม่มลี ูกศรเข้า มีเฉพาะลูกศรออก และสัญลกั ษณจ์ บการทำงาน

จะมีเฉพาะลกู ศรเขา้ และไมม่ ลี ูกศรออก ส่วนสัญลักษณ์จุดเชอื่ มตอ่ ขา้ มหนา้ ใชล้ ูกศรกำหนดทิศทางการ

ทำงานเช่นเดยี วกบั สัญลกั ษณ์เรม่ิ ตน้ และส้นิ สดุ

สญั ลักษณเ์ ง่อื นไขมลี ูกศรเขา้ ไดท้ างเดยี ว แต่มีลูกศรออกไดห้ ลายทาง การเลือกเส้นทางขึ้นกับผลของ

เงอ่ื นไขทีร่ ะบุในสัญลกั ษณ์ ไมว่ ่าจะแยกไปทำงานตามทางเลอื กใดก็ตาม เม่ือทำงานจบแล้วกจ็ ะกลบั มา

ทำงานตามขนั้ ตอนต่อไปเสมอ จึงใช้สัญลกั ษณ์จุดเชอ่ื มตอ่ ในการรวมเสน้ ทางต่างๆ เขา้ ด้วยกัน แลว้

กำหนดให้มีลูกศรออกจากจุดเชือ่ มต่อเพียงเส้นทางเดยี ว เพอ่ื ไปทำงานตามขัน้ ตอนตอ่ ไป

ตวั อยา่ ง 4.1 เมือ่ นำมาเขยี นเปน็ ผังงาน จะได้ผังงานดังรูปที่ 4.1 สว่ นตัวอย่าง 4.2 เมอ่ื นำมาเขียน

เป็นผังงาน จะไดผ้ งั งานดงั รูปที่ 4.2

4.2.3 แผนภาพอ่ืนๆ ในการออกแบบ

ผังงานมักใช้ในการออกแบบขนั้ ตอนการทำงาน แต่ในการออกแบบโปรแกรมขนาดใหญจ่ ำเป็นตอ้ งมกี าร
ระบุองค์ประกอบตา่ งๆ ในโปรแกรม และแผนภาพอธบิ ายการทำงานร่วมกนั ระหวา่ งส่วนต่างๆ แผนภาพ
สำหรับการออกแบบอนื่ ๆ ทนี่ ิยมใชก้ นั เช่น UML, Data Flow Diagram เปน็ ต้น

ไม่วา่ จะใชแ้ ผนภาพรูปแบบใดก็ตาม ส่ิงสำคญั คอื ตอ้ งใชส้ ัญลักษณท์ ่ีเปน็ มาตรฐานเพือ่ ใหเ้ ขา้ ใจได้
ตรงกัน วางโครงให้สะอาดสะอ้าน อา่ นง่าย ระบชุ อื่ ผเู้ ขยี นและวันที่ปรับปรุงแกไ้ ขไวเ้ สมอเพื่อการติดตาม
ในอนาคต

4.2. การออกแบบโปรแกรม 59

ตารางท่ี 4.4: สญั ลักษณข์ องผงั งานและความหมาย

สญั ลักษณ์ ความหมาย
START
การเริ่มต้นหรือส้ินสดุ การทำงาน โดยเขยี นกำกบั ภายใน
STOP
สัญลกั ษณ์ดว้ ยข้อความระบุการเริ่มต้น/สิ้นสุด เชน่ START/
STOP หรือ BEGIN/END เสมอ

x=y*3 การทำงานหรอื การกำหนดคา่ โดยเขียนกำกับภายในสญั ลกั ษณ์

สำหรบั วิชาน้ใี ชก้ บั การคำนวณต่างๆ โดยใชต้ วั ดำเนินการที่กลา่ ว
ไปแล้วขา้ งตน้ ร่วมกบั การกำหนดค่าใหต้ วั แปร

READ x WRITE x การอา่ น/เขยี นข้อมลู โดยไมร่ ะบสุ ือ่ โดยเขียนคำส่ังระบุการอ่าน

หรือเขียน เช่น READ/INPUT พร้อมท่ีอยู่สำหรับเก็บคา่ ท่รี บั เข้า

หรอื WRITE/OUTPUT/PRINT พร้อมคา่ ทตี่ ้องการแสดงผล
กำกบั ในสัญลกั ษณ์เสมอ

READ x การรับข้อมูลผา่ นแปม้ พมิ พ์ โดยเขยี นคำสัง่ ระบุการรับขอ้ มลู

เชน่ INPUT/READ พรอ้ มที่อย่สู ำหรบั เกบ็ คา่ ทรี่ บั เข้ากำกับใน
สัญลกั ษณ์เสมอ

PRINT x การแสดงผลข้อมลู ผา่ นเครื่องพมิ พ์ โดยเขียนคำสัง่ ระบกุ ารพิมพ์
เช่น PRINT พร้อมค่าทตี่ อ้ งการแสดงผลกำกบั ในสัญลักษณ์เสมอ

ระบุเงือ่ นไขในสัญลักษณ์เพ่ือกำหนดทางเลอื กในการทำงาน

ลำดบั การทำงานตอ่ ไปมีได้หลายรูปแบบข้นึ กับผลการดำเนินการ
T x>y*3 F ตามเง่ือนไข

draw(text) ข้นั ตอนการทำงานทีก่ ำหนดไว้ลว่ งหนา้ เช่นการเรยี กใช้ฟงั ก์ชัน
หรอื โปรแกรมยอ่ ยท่ีกำหนดเอง
A
A จดุ เชอ่ื มต่อภายในหน้า ใช้รวมทางแยกการทำงานให้เป็นทาง
เดยี ว ใชใ้ นการทำงานแบบทางเลอื กและการวนซ้ำ

จดุ เชอ่ื มต่อข้ามหน้า ตอ้ งเขียนหมายเลขอา้ งองิ การเชือ่ มตอ่
ไวภ้ ายในสญั ลกั ษณ์เสมอ ใชแ้ ทนการสิ้นสดุ การทำงานในหน้า
ต้นทาง และใช้แทนการเรม่ิ ตน้ การทำงานในหน้าปลายทาง และ
ต้องใช้หมายเลขอ้างอิงเดยี วกนั ท้งั ต้นทางและปลายทาง

60 บทที่ 4. การทำงานแบบลำดบั

START

READ num1, num2 1. รับขอ้ มลู เข้า 2 จำนวน
out = num1+num2 2. หาผลบวก เกบ็ ผลลัพธ์เอาไว้
3. ส่งผลลัพธ์คนื เป็นข้อมลู ออก
WRITE out

STOP
รปู ท่ี 4.1: ผังงานและขัน้ ตอนวิธสี ำหรับตัวอย่าง 4.1

START

READ num1, num2, num3 1. รับข้อมลู เขา้ 3 จำนวน
sum = num1+num2+num3 2. หาผลบวก เกบ็ ผลลัพธ์เอาไว้
3. นำผลลัพธข์ ้างตน้ หารดว้ ย 3 เก็บไวเ้ ปน็
avg = sum/3
ผลลัพธ์สุดทา้ ย
4. ส่งผลลัพธค์ ืนเป็นขอ้ มลู ออก

WRITE out
STOP
รูปท่ี 4.2: ผงั งานและข้ันตอนวิธีสำหรับตัวอย่าง 4.2

ลองคิด

หากกำหนดโจทย์ให้ มีกรณใี ดบา้ งหรือไม่ ทสี่ ามารถแก้ปญั หาจรงิ ได้ แต่ไม่สามารถเขียนขัน้ ตอนการแก้
ปญั หาออกมาเป็นผงั งานได้ ให้อธบิ ายเหตุผลประกอบ

4.3 การเขยี นและตรวจสอบโปรแกรม

เม่ือออกแบบขน้ั ตอนวธิ ีเสร็จแลว้ ควรตรวจสอบความถูกตอ้ งของการออกแบบดว้ ยการสมมตชิ ุดข้อมลู
เขา้ และออก แล้วทดลองทำงานตามขน้ั ตอนทอ่ี อกแบบไว้ หากไดผ้ ลลพั ธ์ตรงตามทต่ี ้องการ แสดงว่าข้ัน
ตอนวธิ ที อ่ี อกแบบไวน้ ้ันถกู ต้อง อยา่ งไรก็ตาม การตรวจสอบข้ันตอนวิธีนเ้ี ปน็ เพยี งการทดสอบเบื้องต้น
เท่านัน้ ในการใชง้ านจรงิ น้ันโปรแกรมยังอาจมคี วามผดิ พลาดเกิดขึน้ ไดอ้ ีกหลายรูปแบบ หลงั จากทดสอบ

4.3. การเขียนและตรวจสอบโปรแกรม 61
เบอื้ งต้นแลว้ จงึ ควรเขยี นโปรแกรมและทดสอบการทำงานจรงิ ของโปรแกรมดว้ ย

4.3.1 การเขียนโปรแกรม

ข้นั ตอนวิธีที่ออกแบบนั้นเขยี นในรูปแบบทเี่ ขา้ ใจงา่ ย เปน็ ภาษามนษุ ย์ แตค่ อมพิวเตอรท์ ำงานโดยใช้ภาษา
โปรแกรม จึงต้องแปลงขน้ั ตอนวิธที อ่ี อกแบบใหเ้ ปน็ ภาษาโปรแกรมก่อน หากออกแบบไว้ได้ดีพอ การ
แปลงขัน้ ตอนวิธีไปเปน็ ภาษาโปรแกรมจะตรงไปตรงมา ทำไดง้ า่ ย

ผู้เขยี นโปรแกรมสามารถเลอื กภาษาโปรแกรมไดห้ ลากหลายตามความถนัดและสภาพแวดล้อมที่
กำหนด ผ้เู ขียนต้องศึกษารปู แบบคำสัง่ ในภาษาตา่ งๆ แล้วจึงแปลงการออกแบบใหเ้ ป็นรหัสต้นฉบบั ใน
ภาษาน้นั ๆ ปัจจุบนั มอี ปุ กรณ์ช่วยเหลือในการแปลงการออกแบบใหเ้ ปน็ รหัสตน้ ฉบบั อยพู่ อสมควร โดย
เฉพาะอยา่ งยงิ่ การออกแบบสมยั ใหม่อย่าง UML มี IDE เช่น Eclipse, Microsoft Visual Studio
สนับสนุนการแปลงการออกแบบเป็นรหสั ตน้ ฉบบั โดยอัตโนมัติ

หลงั จากไดร้ หสั ต้นฉบบั แลว้ จะอาศยั โปรแกรมแปลภาษาดังท่กี ล่าวแลว้ ในบทท่ี 1 เพอื่ แปลรหสั
ต้นฉบบั ในภาษาโปรแกรมให้กลายเป็นภาษาเคร่อื ง แล้วอาศัยโปรแกรมเช่อื มโยงในการเชอ่ื มโยงออบเจ
กตโ์ คด้ ทเี่ ก่ยี วข้องเพ่อื สร้างเป็นโปรแกรมท่ที ำงานไดต้ ่อไป

4.3.2 ขอ้ ผดิ พลาดรปู แบบตา่ ง ๆ

โปรแกรมทีอ่ อกแบบหรอื เขียนขน้ึ อาจมขี อ้ ผดิ พลาดต่างๆ ได้ 3 รปู แบบ ดังนี้

1. ขอ้ ผดิ พลาดทางตรรกะ (logical error) คอื การได้ผลลัพธไ์ มต่ รงตามท่ีควรจะเป็น ข้อผดิ พลาดนี้
อาจเกิดจากการออกแบบท่ไี ม่ถูกต้อง หรอื การแปลงการออกแบบเป็นรหัสต้นฉบบั ทไี่ ม่ถูกต้อง

2. ขอ้ ผดิ พลาดทางโครงสร้างภาษา (syntax error) คอื การเขียนรหสั ตน้ ฉบบั ไมถ่ กู ตอ้ งตามข้อ
กำหนดของภาษาโปรแกรมนน้ั ๆ ทำให้ไมส่ ามารถแปลรหัสตน้ ฉบับออกมาเป็นภาษาเครือ่ งได้ โดย
ปกตโิ ปรแกรมแปลภาษาจะบอกข้อผดิ พลาดน้ีในการแปล

3. ข้อผิดพลาดขณะทำงาน (runtime error) แมก้ ารออกแบบจะถูกต้อง เขยี นรหสั ตน้ ฉบับได้ถูก
ต้อง กอ็ าจมขี อ้ ผดิ พลาดท่เี กิดขึ้นจากขอ้ มลู เข้าท่ปี อ้ น หรอื ข้อจำกดั ต่างๆ ของสภาพแวดลอ้ มท่ี
โปรแกรมไม่สามารถรู้ล่วงหน้าได้

4.3.3 การตรวจสอบโปรแกรม

จากข้อผิดพลาดทง้ั สามรูปแบบนั้น ขอ้ ผิดพลาดทางโครงสรา้ งภาษาเปน็ ข้อผิดพลาดที่ตรวจพบไดง้ า่ ย
ทีส่ ดุ เพราะโปรแกรมแปลภาษาจะแจ้งให้ทราบทันที แตข่ ้อผิดพลาดทางตรรกะและขอ้ ผดิ พลาดขณะ
ทำงานนน้ั ต้องอาศยั ขอ้ มูลทดสอบจึงจะตรวจสอบได้

หากชุดทดสอบนนั้ ครอบคลมุ ขอ้ มูลทกุ รูปแบบทเ่ี ป็นไปได้ เราจะสามารถยนื ยนั ไดว้ ่าโปรแกรมทำงาน
ถูกต้องแนน่ อน แตส่ ว่ นใหญข่ อ้ มูลทีเ่ ป็นไปได้จะมไี มจ่ ำกดั การเลือกตวั อยา่ งขอ้ มูลเพื่อมาทดสอบจงึ ควร

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

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

คำส่ัง num1 num2 out
READ num1, num2
out = num1 + num2
WRITE out

รูปท่ี 4.3: ตวั อย่างการทำงานของโปรแกรมตรวจแกจ้ ดุ บกพรอ่ ง

เลอื กให้ครอบคลมุ กรณตี า่ งๆ อย่างครบถ้วน เชน่ ขอบของคา่ ต่างๆ กรณีท่เี ปน็ 0 ซ่งึ มักมปี ญั หากับการ
หาร กรณที ี่ขอ้ มูลเปน็ ลบ กรณีทข่ี อ้ มูลเต็มหรือเกินจำนวนทีน่ ่าจะเกบ็ ได้

หลงั จากเลือกชดุ ข้อมูลทดสอบไดแ้ ลว้ จะเปน็ การทดลองให้โปรแกรมทำงานดว้ ยขอ้ มลู ทดสอบ หาก
เป็นผงั งาน เราอาจจำลองการทำงานไดโ้ ดยตารางตรวจสอบคา่ ตวั แปร ให้แต่ละบรรทดั ในตารางแทนคำ
สัง่ ตา่ งๆ และคอลมั น์ในตารางแทนตัวแปร คา่ ในช่องของตารางจะเป็นค่าของตวั แปรนนั้ เม่อื ทำคำสัง่ เสรจ็
ตารางท่ี 4.5 เป็นตารางตรวจสอบค่าตัวแปรสำหรบั ตัวอยา่ งท่ี 4.1

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

4.4. คำส่งั พน้ื ฐานในภาษาซี 63

ลองคดิ

จากตวั อย่างที่ 4.1 จงหาชุดข้อมลู เข้าเพื่อทดสอบโปรแกรมท่คี รอบคลุมกรณีต่างๆ ไดค้ รบถ้วนเพยี งพอ

4.4 คำสั่งพนื้ ฐานในภาษาซี

คำส่ังทีพ่ บบ่อยในภาษาซีที่จะกลา่ วถึงในบทนี้ไดแ้ ก่ การประกาศตวั แปร การกำหนดค่า และการอา่ นเขยี น
ข้อมลู เบอื้ งต้น

4.4.1 การประกาศตวั แปรและการกำหนดค่า

การประกาศตัวแปรคือการจองพื้นทใี่ นหน่วยความจำสำหรับข้อมูลชนิดท่ตี ้องการ ในภาษาซี การประกาศ
ตัวแปรทำไดด้ งั รหัสคำสงั่ ท่ี 4.2

<data type> <name>;

รหสั คำส่งั ท่ี 4.2: การประกาศตวั แปรในภาษาซี

โดยท่ี <type> คอื ชนดิ ของตวั แปร และ <name> คอื ชอ่ื ของตัวแปร และปดิ ทา้ ยดว้ ย ;1
วธิ ีหนึ่งในการกำหนดคา่ ใหต้ ัวแปรคือใชต้ วั ดำเนินการ = ซงึ่ มตี ัวถูกดำเนนิ การสองตวั อยู่ทางซ้ายและ

ขวาของเครื่องหมาย ดังรหัสคำสั่งท่ี 4.3
<var name> = <value>;

รหัสคำสัง่ ที่ 4.3: การกำหนดคา่ ให้ตวั แปรในภาษาซี

หมายถงึ การนำค่า <value> ทีอ่ ยทู่ างขวา ไปเก็บไวใ้ นทอ่ี ยู่ <var> ทางซ้าย ตัว <value> จะเป็น
ตวั แปรหรือนพิ จน์กไ็ ด้ หากเป็นนพิ จน์ เคร่ืองจะคำนวณให้เปน็ ผลสำเรจ็ กอ่ นจะนำคา่ ผลสำเร็จไปใช้

การประกาศตวั แปรและการกำหนดคา่ สามารถทำรวมกนั ในคำสั่งเดยี วกนั ได้ ดงั รหสั คำสงั่ ท่ี 4.4
<data type> <var name> = <value>;

รหสั คำส่งั ที่ 4.4: การประกาศตวั แปรพร้อมกบั กำหนดค่าในภาษาซี

ชนิดของตัวแปรในภาษาซีทใ่ี ช้บ่อย เปน็ ดงั ตารางที่ 4.6 ส่วนตวั แปรชนิดสายอักขระในภาษาซี
กำหนดชนิดเปน็ char* หรอื ตวั ชี้ของอกั ขระ เนือ่ งจากภาษาซเี กบ็ สายอักขระดว้ ยแถวลำดับของ
อกั ขระ การประกาศตวั แปรจึงใชห้ ลกั การเดียวกับการประกาศตัวแปรของแถวลำดับ นอกจากน้ี ยงั
สามารถประกาศตวั แปรสายอกั ขระไปพรอ้ มกับการกำหนดคา่ เริ่มตน้ ดว้ ยการใชค้ ่าคงท่ไี ด้อีกด้วย สว่ น
การกำหนดค่าใหต้ ัวแปรชนดิ สายอักขระภายหลังการประกาศตวั แปรต้องทำผ่านฟงั ก์ชันการจัดการสาย
อกั ขระเท่านน้ั

1โครงสรา้ งคำสง่ั ในภาษาซีจะปิดทา้ ยคำสัง่ ด้วย ; เสมอ

64 บทท่ี 4. การทำงานแบบลำดับ

ตารางท่ี 4.6: ชนดิ ของข้อมลู ท่ีใช้บ่อยในภาษาซี

ชนิดตวั แปร คา่ ท่ีเก็บได้
int จำนวนเต็ม
loat จำนวนจรงิ นัยสำคญั ปกติ
double จำนวนจริงนยั สำคัญสงู
char
อักขระ

ตารางท่ี 4.7: รูปแบบขอ้ มลู เข้าและวธิ รี ะบุทอี่ ยู่สำหรบั คำสงั่ scanf

รปู แบบขอ้ มูลเข้า การระบุท่ีอยู่
%d &intVar
%f &loatVar
%c &charVar
%s strVar

4.4.2 การอ่านขอ้ มูลเข้า

การรับขอ้ มลู เขา้ อยา่ งงา่ ยคอื การรับขอ้ มลู เขา้ ผ่านแป้นพิมพ์ ในภาษาซี มีฟังกช์ นั scanf ไว้เพอื่ อ่าน
ข้อมลู เขา้ และเก็บขอ้ มลู เปน็ ชนิดท่กี ำหนดได้ โครงสร้างคำสัง่ scanf เปน็ ดงั รหัสคำส่ังที่ 4.5

scanf(”<format>”,<addlist>);

รหสั คำส่ังท่ี 4.5: โครงสร้างคำสัง่ scanf

โดยที่ format คือสายอักขระบ่งบอกรปู แบบของขอ้ มลู เข้า และ addlist คอื รายการเลขทอี่ ยสู่ ำหรบั
เกบ็ ขอ้ มูล ซ่งึ เปน็ ตวั แปรสำหรับเกบ็ ขอ้ มูล แตล่ ะตวั ค่นั ดว้ ยจุลภาค (,)

รูปแบบของขอ้ มูลเขา้ ทพ่ี บบอ่ ยเปน็ ดังตารางที่ 4.7 โดยท่ี intVar, loatVar, charVar และ
strVar เปน็ ตวั แปรชนิดจำนวนเต็ม จำนวนจริง อักขระ และสายอักขระตามลำดบั

การใส่ & นำหนา้ ชอ่ื ตัวแปร เป็นการอ้างถงึ เลขทอ่ี ยขู่ องตัวแปรนน้ั ในกรณขี องสายอักขระ ซึ่งตวั แปร
เก็บเลขทอ่ี ยู่ตำแหน่งแรกของสายอกั ขระอย่แู ล้ว จึงไมจ่ ำเปน็ ตอ้ งใส่ & นำหน้าอีก

4.4.3 การแสดงผลทางหน้าจอ

การแสดงผลทางหน้าจอในภาษาซใี ชค้ ำสง่ั printf ซ่งึ มโี ครงสรา้ งคลา้ ย scanf ดงั รหสั คำสง่ั ที่ 4.6
printf(”<format>”,<varlist>);
รหสั คำสั่งท่ี 4.6: โครงสร้างคำสั่ง printf

4.4. คำสงั่ พื้นฐานในภาษาซี 65

โดยที่ format คือรูปแบบของขอ้ มลู เข้า ใชร้ ูปแบบเดียวกับคำส่งั scanf ในตารางที่ 4.7 และ
varlist คือรายการตัวแปรทเ่ี กบ็ ข้อมลู หากมมี ากกว่าหน่ึงตัวใหค้ นั่ ด้วยจลุ ภาค (,) เช่นเดยี วกนั

รหัสคำส่ังท่ี 4.7 คือคำสัง่ สำหรับการทำงานในตัวอยา่ งท่ี 4.1 บรรทัดท่ี 1 สัง่ ใหร้ บั ขอ้ มลู เขา้ เป็น
จำนวนเตม็ 2 จำนวน และบรรทดั ที่ 3 สั่งให้แสดงค่าทอ่ี ยู่ในตวั แปร out ซึง่ เปน็ จำนวนเต็มออกทางหนา้
จอ

1 scanf(”%d %d”, &num1, &num2);
2 out = num1+num2;
3 printf(”%d”, out);

รหสั คำสงั่ ท่ี 4.7: รหสั คำสง่ั สำหรับตวั อย่างที่ 4.1

แบบฝกึ หัด

1. จงเขียนผังงานแสดงการคำนวณจำนวนคนสงู สดุ ทีล่ ฟิ ทร์ ับน้ำหนกั ได้ เมือ่ ให้ขอ้ มูลเข้าเป็นน้ำหนัก
ท่ลี ฟิ ท์รบั ได้ และนำ้ หนกั เฉลี่ยของคน กำหนดใหน้ ำ้ หนักท้งั สองคา่ เป็นจำนวนเต็ม

2. ตามตำราการดดู วงมักจะใหน้ ำตวั เลขมาบวกลบคูณหารกัน ตำราหน่ึงกลา่ วไวว้ ่า ใหน้ ำอายุคูณกบั
12 แล้วหารดว้ ย 7 เหลอื เศษเท่าใดใหด้ คู ำทำนายของเศษน้นั ใหร้ ับขอ้ มลู เข้าเป็นอายุ คำนวณหา
เศษเหลือ แล้วแสดงผลเศษเหลือให้ผใู้ ช้ทางจอภาพ

3. กำหนดให้ค่าคงท่ี มีคา่ 3.14 จงเขียนผังงานแสดงการคำนวณหาปรมิ าตรของทรงกลมซึง่ ผูใ้ ช้
ปอ้ นข้อมูลรัศมีเข้ามาให้

4. จงเขยี นผงั งานแสดงการคำนวณหาพน้ื ทขี่ องสามเหลีย่ มเมอื่ ผใู้ ช้ป้อนข้อมลู ความยาวของดา้ นท้ัง
สามเขา้ มาให้

5. หากใหผ้ ูใ้ ชป้ ้อนขอ้ มูลเป็นขนาดกวา้ ง ยาว สงู ของกลอ่ งทรงสี่เหลี่ยมมมุ ฉาก จงเขียนผังงานเพอื่
แสดงการคำนวณหาขนาดกระดาษส่เี หลยี่ มมุมฉากท่เี ล็กทส่ี ดุ ทีจ่ ะหอ่ กล่องน้ไี ด้ทกุ ดา้ นพอดโี ดยไม่
ตอ้ งตัดกระดาษ และแสดงคา่ ขนาดกว้างยาวของกระดาษท่คี ำนวณได้

6. เขียนผังงานและโปรแกรมภาษาซีเพื่อรับข้อมูลเขา้ เป็นจำนวนเตม็ 2 คา่ เกบ็ ในตัวแปร a, b ตาม
ลำดบั แลว้ แสดงค่าท่ีเก็บอยใู่ นตวั แปร a, b จากนั้นสลบั ค่าท่ีเกบ็ อยใู่ นตวั แปร a ไปเกบ็ ไว้ใน
ตวั แปร b และใหค้ ่าทอี่ ยใู่ นตัวแปร b มาเกบ็ ไว้ในตวั แปร a จากน้นั แสดงผลค่าทอี่ ย่ใู นตัวแปร a,
b อกี ครั้ง

7. มีสทิ ธิสมคั รทนุ รฐั บาลญ่ปี ุน่ ระดับปรญิ ญาตรตี ้องมีเกรดเฉลี่ยสะสมระดบั มัธยมปลายไม่ต่ำกวา่
3.8 แต่หากผ้สู มัครมคี วามร้ภู าษาญ่ีปุ่นจะได้รับสทิ ธิในการสมัครแม้เกรดเฉล่ียจะไมถ่ งึ 3.8 โดย
หากมคี วามรูภ้ าษาญ่ปี ่นุ ระดับ N1 หรือ N2 ตอ้ งมเี กรดเฉลย่ี สะสมไมต่ ่ำกวา่ 3.3 หรอื หากมีความ
รภู้ าษาญีป่ ุ่นระดบั N3 หรอื N4 ตอ้ งมเี กรดเฉล่ียสะสมไม่ตำ่ กว่า 3.5 จงึ จะมสี ิทธสิ์ มคั ร จงเขยี น
โปรแกรมภาษาซเี พ่อื รบั ขอ้ มูลคณุ สมบัติผู้สมคั ร แลว้ เขยี นนพิ จนเ์ พ่ือตรวจสอบว่าผสู้ มัครรายนี้มี
สทิ ธสิ มคั รสอบหรือไม่ ให้ออกแบบการรบั ข้อมูลและตัวแปรเองทัง้ หมด

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

8. วชิ าหนึ่งมคี ะแนนเตม็ 100 คะแนน แบ่งเป็นคะแนนเกบ็ 20 คะแนน คะแนนสอบกลางภาค 40
คะแนน และคะแนนสอบปลายภาคอีก 40 คะแนน เงอื่ นไขการผา่ นวิชานี้คือตอ้ งมีคะแนนรวมไม่
น้อยกว่า 50 คะแนน โดยตอ้ งได้คะแนนสอบกลางภาคไม่น้อยกว่าครงึ่ หนึง่ และคะแนนสอบปลาย
ภาคไม่นอ้ ยกวา่ ครึง่ หน่ึง จงเขียนนพิ จน์ที่ใหค้ า่ จริงเมื่อคะแนนของนิสติ เขา้ เงือ่ นไขการผา่ นวิชานี้
ใหอ้ อกแบบการรับขอ้ มูลและตวั แปรสำหรับเก็บข้อมลู ต่าง ๆ เองทัง้ หมด

9. เดอื นกุมภาพนั ธใ์ นปอี ธิกสุรทินจะมี 29 วนั ปอี ธิกสรุ ทิ ินคือปคี ริสตศ์ ักราชทีห่ ารด้วย 4 ลงตัวแต่
หารด้วย 100 ไมล่ งตวั หรือเป็นปที ีห่ ารดว้ ย 400 ลงตวั หากใหต้ วั แปร year เก็บคา่ ปคี ริสต์
ศักราชเปน็ จำนวนเต็มบวก จงเขียนเงื่อนไขทีใ่ หค้ า่ จริงเมอื่ year เป็นปอี ธกิ สุรทนิ และใหค้ า่ เทจ็
เมอ่ื year เปน็ ปีทั่วไป และเขยี นชดุ ขอ้ มูลทดสอบเพื่อตรวจสอบว่านพิ จนท์ ่ีเขียนถูกตอ้ งหรอื ไม่

บทท่ี 5

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

วตั ถปุ ระสงค์การเรียนรู้

อธบิ ายการทำงานของโปรแกรมในรูปการทำงานแบบทางเลอื ก

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

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

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

5.1 โครงสรา้ งการทำงานแบบเงือ่ นไขสองทางเลอื ก

การทำงานแบบเงอ่ื นไขสองทางเลอื ก คอื การทำงานแบบมีทางเลือกสองทาง และใชเ้ งื่อนไขซ่ึงมคี ่าทเี่ ป็น
ไปไดส้ องรูปแบบในการเลือกการทำงาน เช่น

• หากไดค้ ะแนนอยา่ งน้อยรอ้ ยละ 90 จะไดเ้ กรด A และจะไม่ได้เกรด A หากไดค้ ะแนนนอ้ ยกว่าน้ี
ทางเลอื กรูปแบบน้ีคือการเลือกกำหนดค่าผลลพั ธโ์ ดยขน้ึ กับเง่อื นไขคะแนนที่ได้

• ในระบบสบู น้ำเข้าถงั เกบ็ น้ำ ปมั๊ จะหยดุ สบู นำ้ เขา้ โดยอตั โนมตั หิ ากระดับนำ้ ในถงึ ถงึ ขีดทกี่ ำหนด
ทางเลือกรูปแบบนี้คือเลอื กที่จะทำงาน (สบู นำ้ ) หรอื ไมท่ ำงาน ขึ้นกับเงื่อนไขค่าจากตัววดั ระดับนำ้

โครงสร้างการทำงานแบบเง่ือนไขจะประกอบด้วยเงอื่ นไข และทางเลอื กในการทำงาน โครงสรา้ งการ
ทำงานแบบเงอ่ื นไขอยา่ งง่ายจะประกอบด้วยเงื่อนไข 1 เงื่อนไข ซ่ึงเปน็ นพิ จนต์ รรกศาสตร์ มคี ่าที่เปน็ ไปได้
2 คา่ คือ จริง หรอื เทจ็ และทางเลอื กในการทำงาน 2 ทาง ทางแรกทำเมื่อเง่อื นไขเปน็ จริง และทางทส่ี อง
ทำเมื่อเงอ่ื นไขเป็นเท็จ เขียนเปน็ ผงั งานไดด้ งั รูปท่ี 5.1

68 บทท่ี 5. การทำงานแบบทางเลอื ก

T เง่ือนไข F
งาน 1 งาน 2

รปู ที่ 5.1: โครงสรา้ งการทำงานแบบเงือ่ นไขสองทางเลือก

T leapyear F

ndays = 366 ndays = 365

รปู ที่ 5.2: ส่วนของผังงานสำหรบั ตัวอย่างที่ 5.1

โดย งาน 1 คืองานทท่ี ำเมอื่ เงือ่ นไขเปน็ จริง และ งาน 2 คอื งานท่ีทำเมื่อเงือ่ นไขเปน็ เทจ็ งาน 1 หรอื
งาน 2 อาจเปน็ โครงสร้างการทำงานแบบลำดับ ซึง่ ประกอบดว้ ยการทำงานหลายอย่างเรียงกัน หรืออาจ
จะไมม่ กี ารทำงานเลยกไ็ ด้

ตวั อย่าง 5.1 (การหาจำนวนวันในหนึง่ ปี). ใหต้ วั แปร leapyear เปน็ ตวั แปรเกบ็ ค่าตรรกะ ซ่ึงมคี า่ เป็น
จริงเมือ่ ปนี ้ันเป็นปีอธกิ สรุ ทิน และมคี า่ เป็นเทจ็ ในกรณอี ่ืน กำหนดให้ตวั แปร ndays เปน็ ตัวแปรสำหรบั
เกบ็ คา่ จำนวนวนั ในหน่งึ ปี ปีนัน้ จะมี 366 วันหากเปน็ ปอี ธกิ สุรทนิ และมี 365 วนั หากเปน็ ปปี กติ

จึงเขียนผังงานเพื่อกำหนดจำนวนวนั ในหนึง่ ปี โดยขึน้ กับวา่ ปนี ั้นเป็นปอี ธิกสุรทนิ หรอื ไม่ ไดผ้ ลลัพธ์
เป็นดังรูปที่ 5.2 มีเงื่อนไขคอื คา่ ในตัวแปร leapyear และงานทีต่ ้องทำเป็นการกำหนดจำนวนวนั ให้
ตัวแปร ndays



ลองคิด

ผลลัพธข์ องเง่ือนไขในตวั อยา่ ง 5.1 เป็นค่าตรรกะจริงหรือเท็จ เราสามารถใชก้ ารทำงานแบบสองทาง
เลอื กกับผลลพั ธร์ ปู แบบอ่ืนทีไ่ มใ่ ชค่ า่ จริงหรอื เท็จไดห้ รอื ไม่ ให้เหตผุ ลประกอบ

5.2. เง่อื นไขซ้อนและการทำงานแบบหลายทางเลือก 69

TF
เงื่อนไข 1

งาน 1 F T งาน 2
T เง่อื นไข 2 เงื่อนไข 3 F

งาน 1-1 งาน 1-2 งาน 2-1 งาน 2-2

รูปที่ 5.3: โครงสรา้ งการทำงานแบบเงอื่ นไขซอ้ นเงื่อนไข

5.2 เง่ือนไขซอ้ นและการทำงานแบบหลายทางเลอื ก

จากรูปที่ 5.1 งานท่ีทำเมื่อเงอ่ื นไขเปน็ จริง (งาน 1) หรอื งานทีท่ ำเมอื่ เง่ือนไขเปน็ เทจ็ (งาน 2) นอกจาก
จะเป็นคำส่ังพื้นฐานหรือโครงสร้างการทำงานแบบลำดบั ได้แลว้ ยงั สามารถเป็นโครงสรา้ งการทำงานแบบ
เงอ่ื นไขไดเ้ ช่นกนั เมอ่ื ซ้อนเงื่อนไขเพม่ิ เขา้ ไป จะทำให้มที างเลอื กท่ีเปน็ ไปได้มากข้นึ อกี

5.2.1 เงื่อนไขซอ้ น

การซอ้ นเง่อื นไขทำได้ในทุกทางเลือก กรณที ่ีเงื่อนไขหลกั เป็นเงอื่ นไขแบบสองทางเลือกคา่ จริง/เท็จ การ
ซอ้ นเงือ่ นไขก็ทำได้ทั้งในฝง่ั ท่เี งอื่ นไขหลกั เป็นจริงและฝง่ั ทีเ่ งอ่ื นไขหลกั เปน็ เทจ็ ดังรปู ที่ 5.3

ในกรอบงาน 1 เปน็ โครงสรา้ งแบบเงือ่ นไข ซ่ึงจะทำงาน 1-1 เมื่อเงือ่ นไข 2 เป็นจรงิ และทำงาน 1-2
เมอ่ื เง่ือนไข 2 เปน็ เท็จ ส่วนกรอบงาน 2 กเ็ ป็นโครงสรา้ งแบบเงือ่ นไข ประกอบด้วยเงื่อนไข 3 งาน 2-1
และงาน 2-2 ในทำนองเดยี วกัน

ตัวอยา่ ง 5.2 (การแปลงเวลาจากระบบ 24 ชวั่ โมงไปเปน็ ระบบ AM/PM). เวลาในระบบ 24 ชั่วโมงจะ
เร่มิ ต้นท่ี 0 นาฬกิ า ไปจนถงึ 23 นาฬิกา แตเ่ วลาในระบบ AM/PM จะแบ่งครง่ึ เชา้ เป็น AM และคร่ึงบ่าย
เปน็ PM โดยท่ี 0 นาฬิกาจะเปน็ 12AM และ 12 นาฬิกาจะเป็น 12PM เวลาอื่น ๆ เป็น 1-11 ตามลำดับ

การแปลงเวลาในระบบ 24 ชว่ั โมงไปเป็นระบบ AM/PM อาจทำได้โดยแบง่ คร่งึ เชา้ และบ่ายกอ่ น
(เงอื่ นไข 1) จากนน้ั จึงแยกแสดงผล 0 นาฬกิ า กบั 1-11 นาฬิกา (เง่อื นไข 2) และครงึ่ บ่ายก็แยกแสดง
ผล 12 นาฬิกา กับ 13-23 นาฬกิ า (เง่อื นไข 3) เชน่ เดียวกนั

ให้ hour24 เป็นตวั แปรเก็บจำนวนเต็มเลขชัว่ โมงในระบบ 24 ชั่วโมง และ hourAMPM เป็น
ผลลัพธ์ เก็บจำนวนเต็มในระบบ AM/PM จะเขยี นสว่ นของผงั งานเพอ่ื กำหนดค่าให้ hourAMPM ได้ดัง
รูปที่ 5.4



70 บทที่ 5. การทำงานแบบทางเลอื ก

TF
hour24 < 12

TF T F
hour24 == 0 hour24 == 12

hourAMPM=12 hourAMPM=12
hourAMPM=hour24
hourAMPM=hour24-12

รปู ท่ี 5.4: ผงั งานสำหรับตัวอย่างท่ี 5.2

5.2.2 การทำงานแบบหลายทางเลอื ก

การใช้เงือ่ นไขทใี่ ห้คา่ จรงิ หรอื เทจ็ นน้ั มที างเลือกท่เี ปน็ ไปไดเ้ พียงสองทาง แตใ่ นบางกรณี เราอาจตอ้ งการ
เลือกทำงานตามเงื่อนไขท่กี ำหนดเป็นชดุ ของคา่ คงทีต่ ่าง ๆ เชน่

• คา่ 1 กำหนดทางเลอื กท่ี 1
• คา่ 2 กำหนดทางเลือกที่ 2
• คา่ 3-1 และ 3-2 กำหนดทางเลอื กที่ 3
• ค่าอืน่ ๆ เปน็ ทางเลอื กที่ 4

วธิ ีหน่งึ ทท่ี ำไดค้ ือเขยี นนพิ จน์เพื่อตรวจสอบค่านท้ี ลี ะคา่ หากเป็นคา่ ใด (นพิ จนใ์ หค้ ่าจริง) ก็ไปตามทาง
เลอื กน้นั ดงั รปู ที่ 5.5 และรูปท่ี 5.6

การทำงานแบบหลายเงอ่ื นไขดงั รปู ที่ 5.5 และรปู ที่ 5.6 นน้ั กเ็ ป็นการทำงานแบบเง่อื นไขซ้อนเชน่
เดยี วกนั โดยรปู ท่ี 5.6 เป็นการจัดรูปเพอ่ื ใหเ้ ข้าใจง่ายว่าตอ้ งการตรวจสอบเงือ่ นไขทางเลือกทีละเงือ่ นไข
หากเปน็ คา่ ตามเง่อื นไขในทางเลอื กใด กใ็ หไ้ ปทำงานตามทางเลอื กนนั้

การทำงานแบบตรวจสอบคา่ ตามเงอื่ นไขไปทีละค่านี้พบเป็นประจำ แทนทจ่ี ะต้องเขยี นให้อยใู่ นรปู
ของนพิ จน์ตรรกศาสตรท์ ลี ะเงอื่ นไข เราสามารถเขยี นผงั งานโดยระบุใหค้ า่ ที่เขา้ มาเปน็ ตัวเลอื กเส้นทาง
แลว้ กำกับเส้นทางดว้ ยคา่ กำหนดเสน้ ทางไดเ้ ลย หากทางเลือกใดมคี ่ากำหนดเส้นทางทีม่ ากกวา่ หน่ึงคา่
ใหใ้ ช้จุลภาค (,) คน่ั ระหวา่ งคา่ เหล่าน้นั และหากค่าที่เป็นไปไดเ้ ป็นลำดบั คา่ ที่แน่นอน เชน่ 1-10 ก็ใช้
1...10 แทนได้

ส่วนของผงั งานในรูปที่ 5.5 และรูปท่ี 5.6 จึงสามารถเขียนใหมไ่ ด้ดังรูปท่ี 5.7

5.2. เง่อื นไขซ้อนและการทำงานแบบหลายทางเลือก 71

T F
ตัวแปร == คา่ 1

งาน 1 T ตัวแปร == ค่า2 F

งาน 2 T ตัวแปร == คา่ 3-1 F
งาน 3 หรอื ตัวแปร == คา่ 3- งาน 4
2

รปู ท่ี 5.5: โครงสร้างการทำงานแบบเงื่อนไขตอ่ เนื่องเพ่อื ตรวจสอบค่า (1)

งาน 1 T ตัวแปร == ค่า1
F
งาน 2 T
ตัวแปร == ค่า2
F

งาน 3 T ตวั แปร == ค่า3-1
หรือ ตัวแปร == คา่ 3-
2

F
งาน 4

รปู ท่ี 5.6: โครงสรา้ งการทำงานแบบเงอ่ื นไขตอ่ เน่ืองเพอื่ ตรวจสอบคา่ (2)

72 บทที่ 5. การทำงานแบบทางเลอื ก

ตวั แปร ค่า 3-1, คา่ 3-2 อนื่ ๆ
ค่า 1 คา่ 2

งาน 1 งาน 2 งาน 3 งาน 4

รปู ที่ 5.7: โครงสรา้ งการทำงานแบบเงอื่ นไขการตรวจสอบทางเลือก

month 2 4,6,9,11
1,3,5,7,8,10,12

ndays=31 T leapyear F ndays=30

ndays=29 ndays=28

รูปท่ี 5.8: ผังงานแสดงการหาจำนวนวันในหนงึ่ เดอื น

ตวั อยา่ ง 5.3 (การหาจำนวนวันในหนึง่ เดือนของปี). หากให้ month เปน็ ตัวแปรเกบ็ ค่าจำนวนเตม็ มคี ่า
ได้ตั้งแต่ 1-12 แทนเลขเดือน และ leapyear เป็นตัวแปรตรรกะมีคา่ จริงก็ตอ่ เม่ือปีน้ันเปน็ ปีอธิกสุรทิน
จำนวนวันในเดือนจะขึ้นอยู่กบั คา่ ในตัวแปร month นี้ ดังน้ี

• month มคี า่ เปน็ 1,3,5,7,8,10,12 จะมจี ำนวนวนั เป็น 31 วนั
• month มีค่าเป็น 2 จำนวนวนั เป็น 29 หรอื 28 ขึ้นกบั ว่าปนี น้ั เปน็ ปีอธกิ สุรทนิ หรือไม่
• month มีคา่ เปน็ 4,6,9,11 จะมจี ำนวนวันเปน็ 30 วนั

นำมาเขียนเป็นสว่ นของผังงานไดด้ ังรูปที่ 5.8

จะเหน็ ไดว้ า่ งานทตี่ อ้ งทำในทางเลอื กน้ันอาจะเป็นการทำงานพ้ืนฐาน หรอื การทำงานรปู แบบอน่ื ก็ได้

ดงั เช่นทางเลอื กเมอื่ ค่า month เป็น 2 งานท่ตี อ้ งทำเป็นการทำงานแบบเง่อื นไข เปน็ ต้น □

5.3. โครงสร้าง IF ในภาษาซี 73

ลองคิด

ผังงานในรูปท่ี 5.3 นัน้ สามารถแปลงมาเขยี นเปน็ ผงั งานแบบรปู ท่ี 5.5 หรอื 5.6 ไดห้ รอื ไม่ หากไดใ้ ห้ลอง
เขียนดู หากไมไ่ ด้ ลองให้เหตผุ ลประกอบ

5.3 โครงสร้าง if ในภาษาซี

โครงสร้าง if ในภาษาซีประกอบดว้ ย เงื่อนไข และสง่ิ ทีต่ อ้ งทำเมื่อเง่ือนไขเปน็ จริง โดยอาจมสี ่งิ ทีต่ ้องทำ
เมื่อเง่อื นไขเปน็ เทจ็ ด้วยกไ็ ด้

ส่วนของผังงานในรปู ที่ 5.1 เขียนเปน็ คำสัง่ ภาษาซไี ด้รหสั คำสง่ั ท่ี 5.1 และ 5.2

1 if (cond) 1 if (cond) job1
2 job1 2 else job2
3 else
4 job2 รหัสคำสัง่ ที่ 5.2: โครงสร้างคำส่งั if (2)

รหัสคำสง่ั ท่ี 5.1: โครงสรา้ งคำสัง่ if (1)

โดย job1 และ job2 เทยี บได้กบั งาน 1 และ งาน 2 ตามลำดับ ในภาษาซนี ัน้ การใช้ชอ่ ง
วา่ ง ไม่วา่ จะเปน็ เวน้ วรรค ยอ่ หน้า หรอื ขน้ึ บรรทดั ใหม่ ไม่ว่าจะเปน็ กต่ี วั กต็ ามในรหัสตน้ ฉบับ จะมผี ลเทา่
กนั เรานิยมย่อหนา้ จากคำส่งั หลักเพิ่มมาหนึ่งย่อหน้า เพือ่ เนน้ ให้เห็นชดั ว่าเปน็ ทางเลอื กยอ่ ยท่แี ตกออก
มาจากลำดบั การทำงานหลัก และทำให้อา่ นง่าย

จากตวั อยา่ งขา้ งต้น คำส่ังภาษาซีทัง้ ในรหัสคำส่งั ที่ 5.1 และ 5.2 ให้ผลเหมือนกันทกุ ประการ แบบ
5.2 นัน้ นิยมใช้หากตอ้ งการประหยดั จำนวนบรรทัดในการพิมพ์ เมือ่ งานท่ตี ้องทำเป็นคำส่งั เดยี วและไม่
ยาวมาก จึงอาจเขียนงานท่ีต้องทำหลังเง่ือนไขไวใ้ นบรรทัดเดียวกัน

โครงสรา้ ง if กน็ ับเป็นหนึ่งคำสั่งเช่นเดยี วกัน ดงั นัน้ ส่วนของผังงานในรูปที่ 5.3 จงึ สามารถเขยี นเปน็
สว่ นของโปรแกรมภาษาซีไดด้ ังรหสั คำสง่ั ที่ 5.3

1 if (cond1)
2 if (cond2) job1_1
3 else job1_2
4 else
5 if (cond3) job2_1
6 else job2-2

รหัสคำส่งั ที่ 5.3: โครงสร้างคำสั่ง if แบบเงอ่ื นไขซอ้ น

ในกรณที ่ีเป็นการทดสอบเงื่อนไขต่อเนอ่ื ง เชน่ รปู ที่ 5.5 น้นั อาจจดั รูปแบบคำสัง่ ภาษาซไี ดด้ ังรหัสคำ
สั่งที่ 5.4 และ 5.5

74 บทท่ี 5. การทำงานแบบทางเลอื ก

1 if (cond1) 1 if (cond1)
2{ 2 job1
3 job1 3 else if (cond2)
4} 4 job2
5 else 5 else if (cond3)
6{ 6 job3
7 if (cond2) 7 else
8{ 8 job4
9 job2
10 } รหสั คำส่งั ท่ี 5.5: โครงสรา้ ง if แบบ
11 else
12 { เงอื่ นไขตอ่ เนือ่ ง (2)
13 if (cond3)
14 {
15 job3
16 }
17 else
18 {
19 job4
20 }
21 }
22 }

รหสั คำส่ังที่ 5.4: โครงสรา้ ง if แบบ

เงื่อนไขต่อเน่ือง (1)

รหัสคำส่งั ท่ี 5.4 เป็นการจัดรูปและใชโ้ ครงสร้างบลอ็ กเพ่อื ให้เหน็ ขอบเขตของคำสงั่ if ในแต่ละ
ระดบั สามารถจัดใหมใ่ หป้ ระหยัดเน้ือที่ไดต้ าม 5.5 ซงึ่ ตรงกับสว่ นของผังงานในรูปท่ี 5.6 โดยสามารถ
อ่านไดท้ ลี ะบรรทัดวา่ เป็นการตรวจสอบค่าทลี ะค่าไลไ่ ปตามลำดบั

งานทีต่ ้องทำนัน้ อาจเป็นคำสัง่ เดยี วหรอื หลายคำส่ังก็ได้ หากเป็นกรณที ม่ี ีหลายคำสัง่ ในภาษาซีตอ้ ง
รวมคำส่ังท้งั หมดให้เป็นโครงสรา้ งบล็อกดังเชน่ รหสั คำส่ังท่ี 5.6 และ 5.7

การเขียนคำส่ังในบล็อกนั้น นิยมย่อหน้าคำส่ังภายในบล็อกเพม่ิ หนึ่งยอ่ หน้าเชน่ เดียวกับเม่อื เขยี นคำ
สง่ั if เพ่อื ใหเ้ หน็ วา่ คำสัง่ ทงั้ หมดอยู่ในบลอ็ กเดยี วกนั รูปแบบการเขียนวงเล็บปีกกาครอบบลอ็ กกบั คำ
สัง่ if ท่ีนิยมกนั มีสองรูปแบบ แบบ 5.6 เน้นใหเ้ หน็ วา่ วงเล็บปีกกาเปิดและวงเลบ็ ปีกกาปิดท่ีอยู่คู่กนั นนั้
จะอยูต่ รงกัน แต่ขอ้ เสยี คือจะสน้ิ เปลืองจำนวนบรรทัดมาก และหากรหสั ตน้ ฉบับยาวมากจนปีกกาเปดิ และ
ปดิ ไมอ่ ยู่ในหน้าเดยี วกนั ก็จะทำใหจ้ บั ค่ไู ด้ลำบากอยูด่ ี แบบ 5.7 จะเปดิ วงเล็บปีกกาขา้ งหลงั เงอ่ื นไข และ

5.4. โครงสรา้ ง SWITCH ในภาษาซี 75

ใหป้ ดิ วงเลบ็ ตรงกับคำสัง่ เงื่อนไขแทน ซึ่งยงั คงเพิ่มยอ่ หน้าใหค้ ำส่ังในบลอ็ กเช่นกนั

1 if (cond1) 1 if (cond1) {
2{ 2 st1_1;
3 st1_1; 3 st1_2;
4 st1_2; 4 } else {
5} 5 st2_1;
6 else 6 st2_2;
7{ 7}
8 st2_1;
9 st2_2; รหัสคำส่งั ที่ 5.7: โครงสรา้ ง if แบบ
10 } ใช้บลอ็ ก (2)

รหัสคำสัง่ ท่ี 5.6: โครงสร้าง if แบบ
ใช้บล็อก (1)

ถึงแมว้ า่ การใชบ้ ล็อกจะจำเปน็ เฉพาะในกรณที ่มี ีงานทต่ี ้องทำมากกว่าหน่ึงคำสง่ั กรณีท่มี ีคำสง่ั เดยี ว
แตเ่ ป็นคำสงั่ ทซ่ี ับซอ้ น เชน่ คำส่งั if ในรหัสคำส่งั ที่ 5.3 การใชบ้ ล็อกชว่ ยจะทำให้รหสั ตน้ ฉบับอ่านงา่ ย

สะดวกในการปรบั ปรงุ แกไ้ ขในอนาคต จึงควรใชโ้ ครงสรา้ งบล็อกในกรณเี หล่านี้ดว้ ยเชน่ กนั

ลองคิด

โครงสร้าง if ในภาษาซีน้ัน บังคบั ว่าต้องมีสง่ิ ทท่ี ำเม่ือเง่อื นไขเปน็ จรงิ ในขณะท่ผี ังงานไมม่ ีขอ้ บงั คบั นี้
หากตอ้ งเขยี นเขยี นคำสง่ั ภาษาซี โดยมสี งิ่ ทตี่ ้องทำเมอ่ื เงอ่ื นไขเป็นเท็จเทา่ น้นั ต้องทำอยา่ งไร

5.4 โครงสร้าง switch ในภาษาซี

ในภาษาซี การทำงานแบบทางเลือกโดยการตรวจสอบคา่ ในตัวแปรใชค้ ำสั่ง switch โครงสร้างของคำ
สง่ั switch ประกอบดว้ ยตัวแปรซง่ึ เก็บค่าทางเลอื ก และทางเลอื กต่าง ๆ

โครงสรา้ งในรูปที่ 5.7 เขยี นเปน็ คำสั่ง switch ไดด้ งั รหสั คำส่ังท่ี 5.8
var เปน็ ตัวแปรเก็บคา่ ทางเลือก ในรหสั คำส่ังที่ 5.8 มที างเลือกทัง้ หมด 4 ทาง ไดแ้ ก่

• เมอ่ื var มคี า่ เปน็ val1 ทำjob1
• เมือ่ var มคี ่าเปน็ val2 ทำ job2
• เมอื่ var มคี า่ เปน็ val3-1 หรือ val3-2 ทำ job3
• เมอื่ var มคี ่าอนื่ ๆ ทำjob4

76 บทที่ 5. การทำงานแบบทางเลือก

1 switch (var)
2{
3 case val1:
4 job1
5 break;
6 case val2:
7 job2
8 break;
9 case val3-1
10 case val3-2:
11 job3
12 break;
13 default:
14 job4
15 }

รหสั คำสัง่ ที่ 5.8: โครงสรา้ งคำสั่ง switch

การระบคุ า่ ประจำทางเลือกจะเขียนไวห้ ลงั ตัวระบุ case แลว้ ตามดว้ ยทวภิ าค (:) เครอ่ื งจะเปรยี บ
เทียบคา่ ในแตล่ ะทางเลือกทีละทางเลอื ก เรียงลำดบั จากบรรทัดบนลงล่าง หากค่าในตวั แปรตรงกับคา่ ใน
ทางเลือก จะทำทกุ คำสั่งที่อยู่หลังทวิภาค จนกว่าจะหมดหรอื พบคำสั่ง break ตัวระบุ default ใช้
สำหรับกรณีทค่ี ่าในตวั แปรไม่ตรงกับทางเลอื กใดเลย ซ่ึงอาจจะมีหรอื ไมม่ ตี วั ระบนุ ก้ี ็ได้ จะเหน็ ว่า สำหรบั
ทางเลือก default นั้น ไมจ่ ำเป็นตอ้ งมีคำสั่ง break เนอ่ื งจากเมอื่ จบการทำงานในทางเลือกน้ี ก็จะ
สิ้นสุดการทำงานของคำสั่ง switch อยูแ่ ล้ว

แนวทางในการการยอ่ หน้าเพิ่มสำหรับคำสัง่ ในทางเลอื กนนั้ เหมอื นกบั ในคำสั่ง if และหากมีคำสัง่
เดยี วที่ไมซ่ บั ซอ้ น บางครง้ั กน็ ิยมเขยี นท้ังคำสง่ั ทต่ี ้องทำและคำส่ัง break รวมไวใ้ นบรรทัดเดียวกบั ตวั
ระบทุ างเลอื กดว้ ย

งานท่ีต้องทำในแต่ละทางเลือกนน้ั มีได้มากกว่า 1 คำส่ัง และไมจ่ ำเป็นตอ้ งใชโ้ ครงสร้างบลอ็ ก เพราะ
ใช้คำสัง่ เบรกในการตัดการทำงานแทนอยแู่ ลว้

ส่วนของผังงานในรปู ท่ี 5.7 นน้ั เส้นทางเลอื กตา่ งๆ สามารถเขยี นสลบั ตำแหนง่ กนั ได้ และดูเหมือนวา่
เครอื่ งจะเลอื กเสน้ ทางท่ถี ูกต้องไดเ้ สมอ แต่ในการทำงานจริงนนั้ เคร่ืองทำงานเปน็ ลำดบั เสมอ เม่ือมีทาง
เลือกหลายทาง เครื่องจะทยอยเปรยี บเทียบไปทีละทางตามลำดับ แม้ในผงั งานอาจจะดูเหมอื นไม่มลี ำดับ
แต่หากเขียนเป็นคำส่งั ในภาษาโปรแกรมแลว้ การเปรยี บเทยี บจะเป็นไปตามลำดบั เสมอ

เมอ่ื เปลยี่ นคำส่ัง switch ในรหสั คำสง่ั ที่ 5.8 ใหเ้ ป็นผงั งานที่แสดงขัน้ ตอนการทำงานจริง จะ
ได้ดงั รูปที่ 5.5 น่นั คือเปรยี บเทียบคา่ ในตวั แปรทลี ะคา่ เรียงจากทางเลอื กแรกไปจนกวา่ จะไดท้ างเลือกที่
ต้องการ

5.4. โครงสรา้ ง SWITCH ในภาษาซี 77

จากโครงสร้าง switch ทผ่ี ่านมาน้ัน จำเป็นตอ้ งใช้คำส่ัง break หลงั จบการทำงานตามทางเลอื ก
เสมอ หากไม่มีคำสัง่ break เลย เชน่ ในรหสั คำส่ังท่ี 5.9 การทำงานโดยคำส่ัง switch จะเป็นดังรปู ที่

5.9

var == val1 T

1 switch (var) F job1
2{ var == val2 T
3 case val1 : job1
4 case val1 : job2 F job2
5 case val1 : job3 var == val3
6 default : job4 T
7} F job3

รหสั คำส่งั ที่ 5.9: โครงสรา้ ง switch
แบบไม่มี break

job4

รูปที่ 5.9: ผงั งานแสดงลำดับการทำงานของคำ
ส่งั switch แบบไม่มี break
อย่างไรก็ตาม โครงสร้างลกั ษณะเชน่ นีเ้ ป็นโครงสร้างทีอ่ าจทำใหส้ ับสนไดง้ า่ ย ควรใช้โครงสร้างแบบ
ทางเลอื กหลายทางดังรูปท่ี 5.7 มากกว่า ซึ่งจะเขยี นเปน็ สว่ นของผังงานใหมไ่ ดด้ ังรูปที่ 5.10

ลองคิด

โครงสร้าง if และโครงสรา้ ง switch ในภาษาซี สามารถเขยี นแทนกนั ได้เสมอหรือไม่ เพราะเหตใุ ด

แบบฝกึ หดั

1. เมื่อรับข้อมูลเข้าเปน็ วันแรกของเดอื นและเลขเดอื น เดือนนน้ั จะมวี นั จันทร์ องั คาร พุธ พฤหสั บดี
ศุกร์ เสาร์ และอาทติ ย์ อยา่ งละกว่ี ัน จงเขยี นผงั งานเพอ่ื แสดงวธิ ีการคำนวณ
กำหนดให้
• 0 แทนวนั อาทิตย์

78 บทที่ 5. การทำงานแบบทางเลอื ก

var val3 อนื่ ๆ
val1 val2 job3 job4
job4
job1 job2

job2 job3

job3 job4

job4

รูปท่ี 5.10: ผังงานของคำสั่ง switch แบบไม่มี break

• 1 แทนวนั จนั ทร์

• 2 แทนวนั องั คาร
•…

2. ให้ 1 2 3 4 5 6 7 เปน็ รหัสตวั เลขแทนวนั จันทรถ์ งึ วนั อาทติ ย์ ถงึ ตามลำดบั จงเขียนผงั งานและ

โปรแกรมภาษาซีเพอ่ื แปลงรหสั ตวั เลขน้ใี หเ้ ปน็ ช่ือวนั แลว้ แสดงผล เช่น Sun Mon

3. ให้ 1 – 12 เป็นตวั เลขของเดือน จงแปลงตัวเลขนี้ให้เปน็ ชอ่ื เดอื น เชน่ Jan Feb

4. ในบางประเทศ การอา้ งอิงถึงเวลาชว่ ง 0.00 – 2.00 น. จะใชต้ วั เลข24.00 - 26.00 แทน เพอ่ื

ให้เข้าใจตรงกนั ว่าเป็นช่วงกลางคนื ที่ตอ่ เนอ่ื งจากวันกอ่ นหน้า ให้รับขอ้ มูลเขา้ เป็นวนั (เลข 1 – 7

แทนวนั จันทร์ถึงวนั อาทติ ย์) วนั ที่ เดอื น และเวลา (0:00 – 23:59) แลว้ แสดงผลในรปู วัน วันท่ี

เดือน และ เวลา (0:00 – 26:00)

5. หากตอ้ งการทำแฟม้ ภาพนสิ ติ โดยวางรูปถา่ ยขนาด 1 x 1.5 นิ้ว ในกระดาษ A4 (8.3 x 11.7 นวิ้ ) ให้

ไดม้ ากท่ีสดุ เท่าทีจ่ ะมากได้ โดยรปู ทุกรูปต้องวางตง้ั ท้ังหมด ควรวางกระดาษ A4 ในแนวนอนหรอื

แนวตัง้ จงึ จะวางรปู ได้มากท่สี ดุ จงเขียนผังงานแสดงการคำนวณ

6. จงเขียนผงั งานสำหรับโปรแกรมเพื่อการคำนวณปรมิ าตรหรอื พนื้ ทผ่ี ิวของรูปทรงต่างๆ เมอ่ื

โปรแกรมเร่ิมทำงานจะให้ผใู้ ช้เลือกหมวดการคำนวณ ว่าจะคำนวณปริมาตร (กด 1) หรอื พ้ืนที่

รอบรูป (กด 2) จากนั้นใหผ้ ูใ้ ชเ้ ลอื กรหสั รปู ทรงที่ตอ้ งการ และปอ้ นคา่ ทจ่ี ำเป็นในการคำนวณให้

โปรแกรม จากนั้นโปรแกรมจะแสดงผลปรมิ าตรหรอื พ้ืนทีร่ อบรปู ใหแ้ ลว้ แต่กรณี กำหนดค่า Pi =

3.14

7. จงเขยี นผงั งานเพอ่ื สร้างเคร่ืองคิดเลขท่ีทำการบวก ลบ คูณ หาร ยกกำลงั จำนวนไม่เปน็ ลบสอง

5.4. โครงสรา้ ง SWITCH ในภาษาซี 79

จำนวนได้ สมมตใิ ห้ขอ้ มลู เข้าอยใู่ นรูปแบบ “ตวั เลข” “เคร่ืองหมาย” “ตัวเลข” เท่านน้ั เช่น 2 ^ 2

หรือ 2 / 4

8. จงเขียนผังงานสำหรบั โปรแกรมเพอื่ การคำนวณปรมิ าตรหรือพื้นทผ่ี ิวของรปู ทรงต่างๆ เมือ่

โปรแกรมเริ่มทำงานจะให้ผใู้ ชเ้ ลอื กหมวดการคำนวณ วา่ จะคำนวณปริมาตร (กด 1) หรือพ้ืนที่

รอบรูป (กด 2) จากน้ันใหผ้ ใู้ ชเ้ ลือกรหสั รูปทรงท่ตี ้องการ และป้อนค่าทจ่ี ำเป็นในการคำนวณให้

โปรแกรม จากนนั้ โปรแกรมจะแสดงผลปรมิ าตรหรอื พน้ื ทร่ี อบรปู ให้แลว้ แต่กรณี

กำหนดคา่ = 3.14 และคา่ ตา่ งๆ ทจ่ี ำเป็นดังน้ี

ทรงกลม กรวย ทรงกระบอก

รหสั รปู ทรง AB C

ค่าทีจ่ ำเป็นในการคำนวณ 1. รัศมี R 1. รัศมี R 1. รัศมี R

2. ความสูง h 2. ความสงู h

9. เขียนผังงานเพื่อรบั ข้อมูลเขา้ เปน็ เกรดของนสิ ติ ไดแ้ ก่ A, B+, B, C+, C, D+, D, F แล้วแสดงผล
เปน็ ค่าประจำเกรดนัน้ ตง้ั แต่ 4.0 ถงึ 0.0

10. Zeller’s congruence เป็นอัลกอริทมึ เพื่อหาวันในสัปดาหข์ องวนั ที่ใดๆ ในปฏิทนิ เมอ่ื กำหนด
ให้

• ℎ เป็นวนั ในสัปดาห์ 0 = เสาร์, 1 = อาทิตย,์ …
• เปน็ วันท่ี
• เปน็ เดือน โดย 13 = มกราคมของปีก่อนหนา้ , 14 = กมุ ภาพนั ธข์ องปีกอ่ นหน้า, 3 =

มนี าคม, 4 = เมษายน, … , 12 = ธันวาคม
• คอื ปีในครศิ ต์ศตววรษ (สองตัวหลังของปคี รสิ ตศ์ ักราช)
• คอื เลขศตวรรษ (สองตวั หนา้ ของปคี รสิ ต์ศกั ราช)

เช่น

• 1 มกราคม 2016 จะได้ =1, =13, =15, =20

ในระบบปฏิทนิ เกรกอเรยี น (ปฏทิ นิ ปัจจบุ นั ) จะคำนวณวนั ในสัปดาหไ์ ด้ดงั สมการ (5.1)

ℎ = ( + ⌊(13( + 1))/5⌋ + + ⌊ /4⌋ + ⌊ /4⌋ + 5 ) mod 7 (5.1)

จงเขยี นผงั งานและโปรแกรมภาษาซีเพอ่ื แสดงผลเปน็ Saturday, Sunday, … เมื่อวนั ใน
สัปดาห์เป็น เสาร์, อาทติ ย์, … ตามลำดับ กำหนดใหข้ ้อมลู เข้าเป็น

• วันท่ี (ตวั เลข)
• เดือน (ตวั เลข 1-12) และ
• ปีครสิ ตศ์ กั ราช (ตัวเลข 4 หลัก)

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

11. มกี ล่องทรงสเ่ี หลย่ี มมุมฉากขนาดกว้าง a ยาว b และสูง c ตอ้ งการห่อกล่องน้ดี ว้ ยกระดาษ
สเ่ี หลีย่ มมมุ ฉาก จงเขยี นผงั งานเพ่อื ตดั สนิ ใจวา่ จะต้องใช้กระดาษขนาดเล็กที่สดุ เทา่ ไรจึงจะห่อ
กล่องนไี้ ด้พอดีโดยไม่ตอ้ งตดั

บทท่ี 6

การทำงานแบบวนซ้ำ

วตั ถุประสงค์การเรยี นรู้

อธบิ ายการทำงานของโปรแกรมในรูปการทำงานแบบวนซำ้
1. บอกผลของการทำงานแบบวนซ้ำได้ และประยุกต์ใชก้ ารทำงานแบบวนซ้ำเพือ่ แกป้ ญั หาตา่ งๆ ที่
พบได้
2. อธบิ ายลำดบั การทำงานเมือ่ ใช้โครงสรา้ ง while-do, do-while และ for ในภาษาซไี ด้
3. ใช้โครงสร้าง while-do, do-while และ for ในภาษาซีเพ่ือแทนการทำงานแบบวนซำ้ ได้
ใชเ้ วลารวม 6 คาบ

6.1 ลกั ษณะและองคป์ ระกอบของการทำงานแบบวนซำ้

การทำงานแบบวนซ้ำคือการทำงานบางอย่างซ้ำหลายๆ คร้ัง เช่น
1. การหาตำแหน่งรองคาน (จดุ หมนุ ของคาน) ที่สมดุล ดว้ ยการขยับตำแหน่งซา้ ยขวาไปเรอ่ื ยๆ หาก
คานยังไม่สมดลุ ดงั รปู ท่ี 6.1
2. เครอื่ งหยดสารค่อยๆ เติมสารเคมีลงไปทลี ะ 1 มิลลลิ ิตรจนกวา่ จะเกิดปฏกิ ิริยาเคมี
3. รับข้อมลู เกรดของนิสติ 20 รายวิชาเพอื่ คำนวณเกรดเฉลี่ย

โมเมนต์ทวน ขยับ โมเมนต์ตาม

รปู ท่ี 6.1: การหาจุดสมดุลของคาน

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

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

ขอ้ สง่ิ ท่ีต้องทำซ้ำ เงื่อนไขในการทำซำ้ /เลกิ ทำซำ้

1 การขยับตำแหนง่ ซา้ ย/ขวา ทำต่อเมือ่ คานยังไม่สมดลุ ณ จดุ ปจั จบุ ัน

2 การหยดสาร เลกิ ทำเมือ่ เกิดปฏิกิรยิ าเคมี

3 การรบั ข้อมูลเกรด ทำตอ่ เมอ่ื ขอ้ มลู ยังไมค่ รบ 20 รายวชิ า

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

จากองคป์ ระกอบนี้ จะเหน็ ว่าการทำงานแบบวนซ้ำต้องมเี งอ่ื นไขประกอบเสมอ โดยเง่อื นไขจะเปน็
ตัวกำหนดวา่ ต้องทำซำ้ ตอ่ หรอื เลกิ ทำซ้ำ โครงสร้างผงั งานสำหรบั การทำงานแบบวนซำ้ จึงประกอบดว้ ย
การทำงานแบบลำดบั ซง่ึ มีการทำงานแบบเง่อื นไขอย่างน้อยหนง่ึ เงอ่ื นไขเปน็ องคป์ ระกอบ และเม่อื ทำงาน
ครบทุกลำดับแล้วจะยอ้ นกลบั ไปเรม่ิ ทำท่ลี ำดับแรกอีกครั้ง ตวั อย่างเชน่ ลำดับข้ันตอนอยา่ งงา่ ยของการ
ทำงานในขอ้ แรกของตารางท่ี 6.1 (รปู ที่ 5.3) เขียนไดด้ งั นี้

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

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

ถงึ แม้การเขยี นผังงานจะสามารถเขยี นเงื่อนไขไวส้ ว่ นใดในลำดับก็ได้กต็ าม เพ่อื ให้ผงั งานเป็นระเบียบ
เรยี บร้อย และเชอื่ มโยงกบั การเขยี นโปรแกรม เรามกั ตรวจสอบเงื่อนไขกอ่ นเรมิ่ ต้นการทำซ้ำ และเรียก
โครงสร้างลักษณะนวี้ า่ การทำซำ้ แบบทดสอบกอ่ นทำ หรอื ตรวจสอบเง่อื นไขเปน็ งานสุดทา้ ยก่อนกลบั ไป
เรมิ่ ทำซ้ำรอบใหม่ และเรยี กโครงสร้างลักษณะนวี้ า่ การทำซำ้ แบบทดสอบหลังทำ ดังรายละเอียดใน
หวั ข้อต่อไป

ลองคิด

การทำงานใดๆ น้นั จะมจี ดุ เริ่มต้นและจุดสนิ้ สดุ เสมอ ปัญหาหน่ึงทม่ี กั พบเมือ่ มีโครงสรา้ งแบบวนซำ้ คอื
เกิดการวนซำ้ ไม่รูจ้ บ สาเหตุของการวนซ้ำไมร่ ้จู บคือผลลัพธข์ องเง่อื นไขคงเดมิ เสมอในทกุ รอบของการวน
ซำ้ เราจะปอ้ งกนั ปัญหานไ้ี ดอ้ ย่างไร

6.2 การทำซำ้ แบบทดสอบกอ่ นทำและทดสอบหลังทำ

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


Click to View FlipBook Version