ยินดตี ้อนรับสู่ "เรียนรู้การเขียนโปรแกรมด้วย C" แนน่ อนจาก Freescale CodeWarriorU
หลกั สตู รนีป้ ระกอบด้วยคอลเลกชนั ของบทเรียนท่จี ะแนะนาคณุ กบั ปัจจยั พืน้ ฐานของการเขียนโปรแกรมโดยท่ีใช้ภาษาซี
บทที่ Lesson 1: เร่ิมตน้ ที่จุดเริ่มตน้ Start at the Beginning 2
บทท่ี Lesson 2: ข้นั ตอนวธิ ีการและผงั Algorithms and Flowcharts 7
บทท่ี Lesson 3: ตวั แปรและชนิดขอ้ มลู Variables and Data Types 14
บทท่ี Lesson 4: ชนิดขอ้ มลู เพิม่ เติม More Data Types 21
บทท่ี Lesson 5: เลขคณิตคอมพิวเตอร์ Computer Arithmetic 29
บทที่ Lesson 6: การจดั การขอ้ มูลท่ีซบั ซอ้ น Handling Complex Data 35
บทท่ี Lesson 7: โมดูลาร์ Modularity 43
บทที่ Lesson 8: เงื่อนไขและการแตกแขนง Conditionals and Branching 48
บทที่ Lesson 9: การทาเป็นวงกลม Going Loopy 55
บทที่ Lesson 10: ปัญหาโลกแห่งความจริง Real World Problems 61
บทท่ี Lesson 11: Coding ข้ึนพายุ Coding Up A Storm 64
บทท่ี Lesson 12: เทคนิคการแกจ้ ุดบกพร่อง Debugging Technique 69
สาหรับหลกั สตู รเพ่มิ เตมิ กรุณาเย่ียมชมศนู ย์การเรียนรู้แบบฝังบนเว็บไซต์
Freescale Semiconductor
Freescale ™และโลโก้ Freescale เป็นเครื่องหมายการค้าของ Freescale Semiconductor, Inc
© Freescale Semiconductor, Inc 2 may 2016
Learn Programming with C Page 1
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่ี Lesson 1: เร่ิมต้นทจ่ี ุดเร่ิมต้น Start at the Beginning
คำอธิบำยบทเรียน: เป็ นนกั แสดงท่ีมีช่ือเสียงและนกั ร้องต้งั ขอ้ สงั เกตวา่ จุดเริ่มตน้ คือ "สถานที่ที่ดีมากท่ีจะ
เร่ิมตน้ ." จึงเริ่มปรับ "Do Re Mi. " ดงั น้นั ขอเริ่มตน้ ที่จุดเร่ิมตน้ โดยการหาเหตุผลท่ีคุณอยทู่ ี่น่ีและสิ่งที่เป็น
เป้ าหมายของคุณ
ทำไมคุณต้องกำรเรียนรู้กำรเขยี นโปรแกรม ?
ทาไมคุณตอ้ งการที่จะเรียนรู้การเขียนโปรแกรม? คาถามน้ีควรจะอยกู่ บั คุณตลอดหลกั สูตรน้ี โดยพ้นื ฐานแลว้ มีสอง
ชนิดของโปรแกรมเมอร์ บรรดาผทู้ ่ีทาเพอื่ ความรักอนั บริสุทธ์ิของการเขียนโปรแกรมและผทู้ ี่ทามนั เป็ นส่วนหน่ึง
ของงานของพวกเขา
ให้ควำมรักเอำใจใส่สำหรับรหสั For the Love of Code
ชนิดแรกของโปรแกรมเมอร์เขียนซอฟตแ์ วร์สาหรับความรักท่ีแทจ้ ริงและความเพลิดเพลินของการเขา้ รหสั คนเหล่าน้ีเป็นจริง "แฮกเกอร์"
ของโลก - ". แครกเกอร์" ไม่ใช่ผทู้ ี่บกุ เขา้ ไปในระบบที่เป็นจริง
โปรแกรมเมอร์ในหมวดหม่นู ้ีมกั จะเขียนโปรแกรมขนาดเล็กท่ีจะช่วยคนอ่ืน ๆ ท่ีมีปัญหาเฉพาะท่ีพวกเขาตอ้ งการท่ีจะแกป้ ัญหา
โปรแกรมเมอร์เดียวกนั เหล่าน้ีมกั จะแบ่งปันความคิดและแมก้ ระทง่ั รหสั ท่ีมากบั คนอื่น ๆ ฟรีแวร์และแชร์แวร์ผเู้ ขียนทวั่ ไปตกอยใู่ นหมวดหมนู่ ้ี
กำรทำงำนของโปรแกรมเมอร์ Working Programmers
โปรแกรมเมอร์ท่ีทางานเป็นผทู้ ่ีเขียนโปรแกรมเป็นส่วนหน่ึงของงานในชีวิตประจาวนั ของพวกเขา พวกเขาอาจจะให้ผรู้ ับเหมาที่เขียน
ซอฟตแ์ วร์เพื่อตอบสนองความตอ้ งการท่ีเฉพาะเจาะจงสาหรับ บริษทั หรือพวกเขาอาจจะเป็นนกั พฒั นาท่ีรู้จกั กนั ดี (หรืออาจจะไม่ใหร้ ู้จกั กนั
ดี) บริษทั พฒั นาซอฟตแ์ วร์
แน่นอนเพียงเพราะการเขียนโปรแกรมเป็นส่วนหน่ึงของงานไมไ่ ดห้ มายความวา่ โปรแกรมท่ีไม่ไดร้ ักหรือเพลิดเพลินกบั การเขียนโปรแกรม
อยา่ งไรกต็ ามโปรแกรมเมอร์เหล่าน้ีมีงานท่ีเฉพาะเจาะจงในใจซ่ึงมกั จะถูกผลกั ดนั โดยการกาหนดเวลาที่ยากโครงสร้างและเป้ าหมาย
ซ่ึงเป็ นคณุ Which Are You?
ตอนน้ีเรากลบั มาท่ีคาถามแรกของฉนั "ทาไมคุณตอ้ งการที่จะเรียนรู้การเขียนโปรแกรม?" ขณะที่คุณกาลงั เพียงจดุ เริ่มตน้ ที่จะเรียนรู้การ
เขียนโปรแกรมและมีประสบการณ์ไมค่ ุณอาจไมต่ กอยใู่ นประเภทใดอยา่ งหน่ึงเลย แตท่ ี่ไม่ไดบ้ อกวา่ คุณจะไมร่ ักการเขียนโปรแกรมท่ีจดุ
ในอนาคตบาง โอกาสท่ีคุณกาลงั มองหาทิศทางพยายามที่จะดูวา่ คุณจะชอบการเขียนโปรแกรมหรือถา้ คุณควรจะเลือกอาชีพอื่น การเขียน
โปรแกรมไมเ่ คยเป็นงานง่าย บางคร้ังกเ็ ตม็ ไปดว้ ยความยงุ่ ยากพลิกและความเครียด แต่ก็ยงั เตม็ ไปดว้ ยความสุขผลตอบแทนและ
ความรู้สึกของความภาคภมู ิใจจากความสาเร็จ ดงั น้นั คุณตอ้ งให้มนั เป็ นความพยายามท่ีมน่ั คงก่อนท่ีคุณจะตดั สินใจของคุณ
หลกั สูตรน้ีเป็นพ้ืนฐานมาก ผมขอแนะนาให้คุณใชเ้ วลาอยา่ งนอ้ ยหน่ึงหรือสองหลกั สูตรการเขียนโปรแกรม (เพม่ิ ข้ึนในทกั ษะและ
ความรู้) หลงั จากน้ี ผมเช่ือวา่ เท่าน้นั แลว้ คุณจะมีประสบการณ์ที่จาเป็ นและความคิดจะทาใหก้ ารตดั สินใจทีเ่ หมาะสม
ผมเองตกอยใู่ นท้งั สองประเภท ผมเขียนโปรแกรมเป็นส่วนหน่ึงของงานของฉนั แต่ฉนั ยงั รักการเขียนโปรแกรมและพยายามท่ีจะทามากของ
มนั เทา่ ที่จะทาไดใ้ นเวลาวา่ งของฉนั
Learn Programming with C Page 2
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ประวตั โิ ดยย่อของกำรเขียนโปรแกรม A Brief History of Programming
คุณเคยไดย้ นิ คาพดู ที่วา่ "ความจาเป็นเป็นมารดาของประดิษฐ.์ " ความคิดที่ไมแ่ ตกต่างกนั ในการเขียนโปรแกรม พดู อยา่ งเคร่งครดั โปรแกรมมี
การพฒั นาออกจากความจาเป็นในการแกป้ ัญหาหรือเพื่อเติมเตม็ ความตอ้ งการคนมีความปรารถนาท่ีจะแกป้ ัญหาไดเ้ ร็วข้ึนเสมอ ยกตวั อยา่ ง
เช่นลกู คิดเป็น
การพฒั นาในประเทศจีนโบราณในการดาเนินการคานวณทางคณิตศาสตร์ไดอ้ ยา่ งรวดเร็วและอยา่ งง่ายดาย ลกู คิดเป็นเครื่องมือที่มีภาพ ผใู้ ช้
ในท่ีสุดไดร้ ับการพฒั นาทกั ษะท่ีไมเ่ พียง แต่สาหรับการเพม่ิ อยา่ งรวดเร็ว แต่ยงั สาหรับการจบั คแู่ บบเช่นเห็นเจด็ โดยไมต่ อ้ งนบั
ประคา รูปแบบการจบั คเู่ ป็ นทกั ษะที่สาคญั มากในการเขียนโปรแกรมระดบั สูงบางภาษาโดยเฉพาะอยา่ งยงิ่ เชิงวตั ถุภาษาเช่น C ++ และ
Java
เมื่อเวลาผา่ นไปความตอ้ งการท่ีจะไดอ้ ยา่ งรวดเร็วแกส้ มการท่ีซบั ซอ้ นมากข้ึนกลายเป็นสิ่งสาคญั ในการเขตการขยายตวั อยา่ งรวดเร็วของ
ฟิ สิกส์เคมีและวิศวกรรม แต่จุดวาบไฟมาในช่วงสงครามโลกคร้ังที่สองในความพยายามขององั กฤษในการออกแบบเครื่องท่ีสามารถทาลาย
ไดอ้ ยา่ งรวดเร็วรหสั เยอรมนั เคร่ืองเหลา่ น้ีจะตอ้ งดาเนินการในชว่ั โมงการทางานซ้าที่จะใชส้ ปั ดาห์สาหรับกลุ่มคนท่ีจะเสร็จสมบูรณ์ พวกเขา
ยงั เป็ นอยา่ งมากและยากจนลงบอ่ ยๆ คอมพิวเตอร์อิเล็กทรอนิกส์อยา่ งเตม็ ท่ีในท่ีสุดก็พฒั นามาจากแหล่งกาเนิดต่าตอ้ ยเหล่าน้ี ดงั น้นั ท่ีเราไดม้ า
จาก "คอมพวิ เตอร์ที่สามารถใส่เขา้ ไปในห้องเดียว" ไปยงั เครื่องคอมพิวเตอร์ทีส่ ามารถดาเนินการคานวณพนั ลา้ นตอ่ วนิ าทีและเหมาะกบั ความ
สะดวกสบายบนตกั ของคุณน้ีความกา้ วหนา้ ความเร็วสูงตอ้ งเขียนโปรแกรมเพ่ือสร้างอยา่ งตอ่ เนื่องใหม่ คาแนะนาสาหรับคอมพวิ เตอร์ท่ีจะ
ปฏิบตั ิตาม โปรดจาไวว้ า่ เคร่ืองคอมพิวเตอร์ไดอ้ ยา่ งรวดเร็วอยา่ งไมน่ ่าเช่ือ แต่ โง่อยา่ งสมบรู ณ์ พวกเขาเพียง แตง่ านที่คุณบอกพวกเขาจะทา
อยา่ งไร ไมม่ ากไม่ นอ้ ย.
กำรแก้ปัญหำสำหรับทกุ คน Problem-Solving for Everyone
การเขียนโปรแกรมคอมพิวเตอร์จะข้ึนอยกู่ บั การแกป้ ัญหาเช่น "ฉนั สามารถวาดเส้นจากจุด A ไปยงั จดุ B?" หรือ "ฉนั จะเขียนเล่น MP3
ไดอ้ ยา่ งไร?"
ลองมาเป็ นตวั อยา่ งท่ีแสดงใหเ้ ห็นถึงการปฏิบตั ิเพ่อื เพ่มิ เติม สินคา้ คงคลงั จะตอ้ งมีงานมากที่สุดในโลก บริษทั ใด ๆ อยา่ งไรก็ตามสินคา้ ท่ีถกู ตอ้ ง
มีความสาคญั ต่อการขายที่ประสบความสาเร็จ คนที่มีเพอื่ ใหแ้ น่ใจวา่ มีสินคา้ เพยี งพอในสินคา้ คงคลงั ที่จะขายสง่ั ซ้ือมากข้ึนถา้ มีไม่เพยี งพอและ
บนั ทึกขอ้ มลู ท้งั หมดท่ีอยทู่ ่ีไหนสกั แห่ง
ปัญหำ: กำรทำซ้ำ x เวลำ Problem: Repetition x Time
การสินคา้ คงคลงั ท่ีใชห้ มายถึงใครบางคนที่จะไปรอบและร่างกายนบั รายการในสตอ็ กทกุ งานน้ีคนเดียวมกั จะใชเ้ วลาหลายวนั ข้ึนอยกู่ บั
ขนาดของธุรกิจจานวนและประเภทของผลิตภณั ฑก์ ารขายและการท่ีรายการเหล่าน้นั ต้งั อยู่ และนี่ก็ตอ้ งทาในชีวิตประจาวนั รายสปั ดาห์
หรือรายเดือน ที่นี่คุณจะเห็นการทาซ้าท่ีเก่ียวขอ้ งและจานวนของเวลาที่มนั ตอ้ งใชเ้ วลา
Learn Programming with C Page 3
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ถดั ไปสินคา้ คงคลงั จะตอ้ งกระทบกบั ส่ิงท่ีไดร้ ับการขายเพื่อใหแ้ น่ใจวา่ ทกุ อยา่ งท่ีจบั คู่ กระบวนการน้ีอาจเก่ียวขอ้ งกบั การปฏิบตั ิทางบญั ชีท่ี
เลก็ ๆ นอ้ ย ๆ เช่นกนั การรักษาเจา้ หน้ีและลูกหน้ีและการจบั คู่พวกเขาไปยงั สินคา้ คงคลงั
ในที่สุดการวิเคราะหข์ อ้ มลู ท่ีจะตรวจสอบสินคา้ เท่าใดท่ีจะซ้ือ
วธิ ีกำรแก้ปัญหำ: คอมพวิ เตอร์และซอฟแวร์ Solution: Computer and Software
ในโลกปัจจุบนั กระบวนการท้งั หมดน้ีจะถูกกาจดั ออกจริงและถูกแทนท่ีดว้ ยการรวมกนั ของคอมพวิ เตอร์ฮาร์ดแวร์และซอฟตแ์ วร์ท่ีรู้จกั กนั เป็น
จดุ ขาย (POS) ระบบและใชเ้ วลาไม่ก่ีวนิ าทีแทนวนั คอมพิวเตอร์ติดตามสินคา้ คงคลงั วธิ ีการท่ีคุณมีเท่าไหร่ที่คุณขายและเท่าใดเงินท่ีคุณทา
(หรือไมไ่ ดท้ า) นอกจากน้ีบางระบบ POS มีคุณสมบตั ิเช่นเตือนคุณเม่ือมีสินคา้ คงคลงั อยใู่ นระดบั ต่าและการสงั่ ซ้ือมากข้ึนในเวลาที่ระบบ
อิเล็กทรอนิกส์แสดงให้คุณเห็นค่าเฉล่ียรายเดือนของผลิตภณั ฑย์ า้ ยเพื่อให้คุณดีข้ึนสามารถวดั การเจริญเติบโตของธุรกิจของคุณและอ่ืน ๆ อีก
มากมาย ความเป็ นไปไดจ้ ริงๆไม่มีที่สิ้นสุด
เอกลักษณ์ Identity
ตวั อยา่ งขา้ งตน้ แสดงใหเ้ ห็นวา่ หน่ึงในสถานการณ์และการแกป้ ัญหาการประกอบ อยา่ งไรกต็ ามอุตสาหกรรมคอมพิวเตอร์ท้งั หมดเป็นไปตาม
รอบหลกั การและการปฏิบตั ิของการแกป้ ัญหา การแกป้ ัญหาตอ้ งให้คุณระบุปัญหา (เวลามากเกินไปและกาลงั คนสาหรับสินคา้ คงคลงั ) เม่ือ
คุณพบปัญหาคุณตอ้ งวเิ คราะห์ปัญหาเพื่อหาสิ่งที่สามารถประยกุ ตห์ รือโดยอตั โนมตั ิ สุดทา้ ยคุณเขียนโคด้ ในการแกป้ ัญหา
แกป้ ัญหาเป็นกระบวนการซ้าท่ีเราจะพูดถึงต่อไปในคร้ังต่อไป
เจด็ ข้นั ตอนของกำรเขียนโปรแกรมคอมพวิ เตอร์ Seven Steps of Computer
Programming
การเขียนโปรแกรมเป็ นกระบวนการทสี่ ามารถถูกทาลายลงไปดงั ต่อไปน้ีเจด็ ข้นั ตอนน้ี:
1. กาหนดหรือปรับแตง่ ปัญหา
2. ออกแบบโปรแกรม
3. เขียนโคด้
4. รวบรวมรหสั
5. การทดสอบและการแกป้ ัญหา
6. เอกสาร
7. การปรับเปลี่ยนและการบารุงรักษา
ลองมาดูอยา่ งใกลช้ ิดในแตล่ ะข้นั ตอน
1.กำหนดปัญหำDefine the Problem
คุณเคยเห็นตวั อยา่ งหน่ึงของเรื่องน้ีอยแู่ ลว้ การกาหนดปัญหาทีเ่ รียกวา่ โดเมนปัญหา ข้นั ตอนน้ีมกั จะเป็นที่งา่ ยที่สุดของเจด็ คน แต่ไม่ได้
หมายความวา่ คุณสามารถเขา้ ใกลม้ นั ส่งเดช ข้นั ตอนน้ีจะเป็นตวั กาหนดทิศทางของสิ่งดงั ตอ่ ไปน้ี
การกาหนดปัญหาท่ีเกิดข้ึนเป็ นส่ิงจาเป็ นในการทาความเขา้ ใจปัญหาอยา่ งเตม็ ท่ี คาอธิบายเร่ิมตน้ ของปัญหามกั จะคลุมเครือ คุณจาเป็นตอ้ ง
ปรับแตง่ ปัญหาเพ่ือที่จะกลายเป็ นไดอ้ ยา่ งแม่นยา โปรแกรมเมอร์มกั จะทางานกบั ผใู้ ช้ (คนที่ระบปุ ัญหา) เพอื่ ให้แน่ใจวา่ ท้งั สองฝ่ ายเขา้ ใจ
ปัญหา จากการทางานน้ีโปรแกรมเมอร์สร้างรายละเอียดของปัญหารวมถึงความหมายที่ถูกตอ้ งของขอ้ มูลที่ป้ อนขอ้ มูลไดร้ ับและผลลพั ธท์ ่ี
ตอ้ งการ
2.ออกแบบโปรแกรม Design the Program
เมื่อคุณมีภาพความคิดของสิ่งท่ีโปรแกรมตอ้ งการที่จะทาคุณตอ้ งตดั สินใจวา่ โปรแกรมจะไปกบั มนั คาถามท่ีตอ้ งตอบเช่นส่ิงท่ีอินเตอร์เฟซ (ถา้
มี) ควรมลี กั ษณะดงั น้ี วธิ ีควรโปรแกรมจะจดั ? ใครเป็นกลุ่มเป้ าหมายที่เป็นผทู้ จ่ี ะใชซ้ อฟตแ์ วร์หรือไม่ ปัญหาหน่ึงท่ีสาคญั คือส่ิงท่ีภาษาที่จะ
ใชใ้ นการแกป้ ัญหา บางภาษาการเขียนโปรแกรมที่ดีที่งานบางกวา่ คนอื่น ๆ ยกตวั อยา่ งเช่นฐานขอ้ มลู แบก็ เอนดเ์ ครื่องยนตท์ ่ีใชบ้ นหนา้ เวบ็
จานวนมากมกี ารเขียนใน Perl เม่ือเทยี บกบั C หรือแมแ้ ต่ Java บนมืออ่ืน ๆ คุณจะไม่ใช้ Perl เพอื่ สร้างโปรแกรมประยกุ ตท์ ว่ั ไปในเชิง
พาณิชยเ์ ช่น Photoshop หรือ Excel สาหรับประเภทของการใชง้ านเหล่าน้นั ท่ีคุณจะใชภ้ าษาเช่น C หรือ C ++ เป็นส่วนหน่ึงของ
Learn Programming with C Page 4
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
การเขียนโปรแกรมการเรียนรู้คือการเรียนรู้ภาษาที่เหมาะท่ีสุดสาหรับแตล่ ะประเภทของปัญหาที่คุณกาลงั พยายามท่ีจะแกป้ ัญหา
นอกจากน้ีคุณยงั จะตอ้ งตดั สินใจวา่ จะแสดงขอ้ มลู ในโปรแกรมและในแฟ้ ม (ถา้ จาเป็น) และส่ิงที่วิธีการท่ีคุณจะใชใ้ นการประมวลผลขอ้ มลู ท่ี
ข้นั ตอนน้ีจะไม่ไดเ้ ป็ นทีเ่ ฉพาะเจาะจง คุณไม่จาเป็นตอ้ งคิดเกี่ยวกบั เส้นทแ่ี น่นอนของรหสั ข้นั ตอนน้ีเป็นมากข้ึนสาหรับการจดั ระเบียบความคิด
และความคดิ ของคุณ จะช่วยให้คุณในการผลิตข้นั ตอนวธิ ีการและผงั งานเพ่ือใชใ้ นภายหลงั เราจะหารือเกี่ยวกบั ข้นั ตอนวธิ ีการและผงั งานใน
บทเรียนต่อไป
3.เขียนโค้ด Write the Code
ตอนน้ีคุณมีทกุ อยา่ งท่ีคุณตอ้ งการคณุ สามารถเร่ิมตน้ การเขียนโคด้ ที่จาเป็ นในการแกป้ ัญหา ซ่ึงหมายความวา่ คุณแปลการออกแบบความคิดและ
องคก์ รของคุณลงในบรรทดั ของรหสั ทจ่ี ะดาเนินการโดยคอมพวิ เตอร์
4.รวบรวมรหสั คอมไพล์รหสั Compile the Code
เมื่อรหสั ถูกเขียนคุณตอ้ งรวบรวม รวบรวมเป็นกระบวนการพฒั นาซอฟตแ์ วร์ของคุณจะตอ้ งผ่านการแปลของคุณสายรหสั ลงในแบบฟอร์มท่ี
สามารถนามาใชโ้ ดยคอมพวิ เตอร์ท่ีเรียกวา่ รหสั เครื่อง ผลิตภณั ฑส์ ุดทา้ ยที่เรียกวา่ ปฏิบตั ิการโปรแกรมท่ีสามารถทางานโดยใชค้ อมพิวเตอร์
ผา่ นการมีปฏิสมั พนั ธ์ของผใู้ ช้
คอมไพเลอร์การตรวจสอบและรายงานขอ้ ผดิ พลาดท่ีคุณไดท้ าในขณะที่เขียนรหสั ความผิดพลาดตวั แปรท่ีไม่ไดใ้ ชแ้ ละจลุ ภาคลืมหรืออฒั ภาค
เป็ นตวั อยา่ งของขอ้ ผิดพลาดของคอมไพเลอร์หยบิ ข้ึนมาและรายงาน หากมีขอ้ ผดิ พลาดใด ๆ ที่คุณตอ้ งกลบั ไปที่ข้นั ตอนที่ 3 (เขียนโคด้ ) เพ่ือ
แกไ้ ขและพยายามรวบรวมอีกคร้ัง
5.กำรทดสอบและกำรแก้ปัญหำTest and Debug
ข้นั ตอนน้ีสามารถเป็นหน่ึงในส่วนท่ีน่าเบ่ือที่สุดและมีความยาวของการเขียนโปรแกรมคอมพวิ เตอร์ ข้นั ตอนน้ีเกี่ยวขอ้ งกบั การทางานจริง
(รัน) โปรแกรมของคุณและพยายามออก การป้ อนขอ้ มูลและจดั การขอ้ มลู เพอ่ื ดูวา่ ผลลพั ธ์ที่ตรงกบั ขอ้ มูลที่คุณรวบรวมในข้นั ตอนท่ี 1
ข้นั ตอนน้ีจะช่วยให้คุณพบขอ้ บกพร่องใด ๆ (ปัญหา) ในโปรแกรมเพอื่ ใหค้ ุณสามารถกลบั ไปข้นั ตอนที่ 3 และแกไ้ ขปัญหาได้ (อยา่ ลืมว่า
การเขียนโปรแกรมเป็ นกระบวนการ.)
6.เอกสำรDocument
เอกสารเป็ นจริงกระบวนการสองเท่า โปรแกรมเมอร์ท่ีดีตอ้ งจดั ทาเอกสารรหสั ที่เขาหรือเธอเขียนเพ่อื ที่จะสามารถเขา้ ใจไดอ้ ีกหลายปี ต่อเม่ือ
คุณหรือคนอ่ืนพยายามท่ีจะปรับเปลี่ยนซอฟตแ์ วร์ ผมเช่ือมนั่ ในการจดั เกบ็ เอกสารรหสั ของคุณ น้ีมกั จะหมายถึงการใชภ้ าษาของคุณ
คุณลกั ษณะความคิดเห็นเพอ่ื อธิบายส่ิงท่ีเกิดข้ึนในส่วนหน่ึงของรหสั หรืออธิบายการใชง้ านของตวั แปรหรือไมช่ อบ
ส่วนท่ีสองของการจดั เกบ็ เอกสารมาใกลถ้ ึงจดุ สิ้นสุด นี่คือข้นั ตอนที่คุณ (และ / หรือนกั เขียนดา้ นเทคนิค) สร้างคู่มือเกี่ยวกบั วธิ ีการใชโ้ ปรแกรม
ที่คุณเขียนเพียง นกั เขียนทางเทคนิคตอ้ งทางานอยา่ งใกลช้ ิดกบั โปรแกรมเมอร์ (มากกวา่ ปกติท่เี รียกวา่ พฒั นา) เพ่ือใหแ้ น่ใจวา่ ทุกแงม่ ุมของ
โปรแกรมท่ีมีการบนั ทึกไวเ้ ป็นอยา่ งดีและสามารถเขา้ ใจไดง้ ่ายโดยผใู้ ช้
7.กำรปรับเปลย่ี นและกำรบำรุงรักษำModify and Maintain
ข้นั ตอนสุดทา้ ยคือการรักษารหสั ของคุณและการปรับเปลี่ยนมนั สาหรับคุณสมบตั ิใหมแ่ กไ้ ขขอ้ ผิดพลาดหรือการปรับปรุงอ่ืน ๆ
ข้นั ตอนเหล่าน้ีร่วมกนั ในรูปแบบข้นั ตอนการเขียนโปรแกรม
Learn Programming with C Page 5
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่ี Lesson 2: ข้นั ตอนวธิ ีกำรและผงั Algorithms and Flowcharts
คำอธิบำยบทเรียน Lesson Description: ในบทเรียนน้ีจะเร่ิมดาเนินการในการพฒั นาทกั ษะการแกป้ ัญหาของคุณ
Algo อะไร? Algo What?
ถา้ คุณไม่เคยไดย้ นิ คาวา่ ก่อนท่ีคุณอาจไดร้ ับลิ้นแขง็ แค่พยายามท่ีจะบอกวา่
อลั กอริทึม (ออกเสียง Algo-rith-IM)
ใส่เพียงแคข่ ้นั ตอนวธิ ีการเป็นร่างของข้นั ตอนที่โปรแกรมของคุณตอ้ งใชเ้ วลาเพอ่ื ท่ีจะแกป้ ัญหาที่เฉพาะเจาะจง คุณสามารถคิดวา่
อลั กอริทึมเป็นสูตร แตแ่ ทนท่ีจะของการปรุงอาหารที่คุณกาลงั เขียนรหสั ท่ีมา ข้นั ตอนวิธีการเขียนใน pseudocode
ผสมผสานโครงสร้างประโยคภาษาองั กฤษท่ีมีสญั กรณ์รหสั pseudocode เป็นอิสระอยา่ งสมบูรณ์ของภาษาเขียนโปรแกรม
ใด ๆ
ตวั อยา่ งเช่นสมมติว่าคุณจาเป็นตอ้ งสร้างโปรแกรมบญั ชีเงินเดือน ส่วนหน่ึงของโปรแกรมที่จะคานวณเงินเดือนข้นั ตน้ ของการ
ทางานของพนกั งานใน บริษทั แต่ละคานึงถึงการทางานล่วงเวลาบญั ชี (การทางานใด ๆ ดงั กล่าวขา้ งตน้ และเกิน 40 ชวั่ โมงต่อ
สปั ดาห์) เช่นเดียวกบั ชว่ั โมงการทางานปกติ pseudocode สาหรับโปรแกรมท่ีอาจมีลกั ษณะเช่น:
If Hours greater than 40
Set Gross Pay to Rate times 40 plus 1.5 times the
hours above 40.
Else
(%TAB%)Set gross pay to Rate times Hours
ใชอ้ ะไรมากกวา่ ข้นั ตอนวธิ ีน้ีงา่ ยสาหรับการคานวณของพนกั งานจา่ ยข้นั ตน้ เราไดอ้ ยา่ งรวดเร็วสามารถมากบั รหสั ที่มาเพอ่ื จดั การ
กบั ส่วนหน่ึงของปัญหาที่ ตอนน้ีคุณมีข้นั ตอนวิธีข้นั พ้ืนฐานคุณสามารถแทนท่ีงบบางเทียบเท่ากบั คณิตศาสตร์ของพวกเขาให้
คุณ:
If Hours > 40
Set Gross Pay to Rate X 40 + 1.5 X Rate X (Hours-
40).
Else
(%TAB%)Set gross pay to Rate X Hours
ข้นั ตอนวิธีการ (Algorithms)ไมค่ วรที่จะใชใ้ นการแกป้ ัญหาที่มีขนาดใหญ่ แต่พวกเขาสามารถนามาใชเ้ พือ่ แสดงวา่ ปัญหาแบง่
ออกเป็นชิ้นเลก็ ข้นั ตอนวธิ ีการที่แตกตา่ งกนั สามารถนามาใชใ้ นการแกบ้ ิตเหล่าน้นั ในตวั อยา่ งขา้ งตน้ คานวณเงินเดือนข้นั ตน้ เป็นเพียง
ส่วนหน่ึงเลก็ ๆ ของปัญหาโดยรวมของบญั ชีเงินเดือน มีการกล่าวถึงการหกั ภาษีผลประโยชนข์ องพนกั งานไมไ่ ดแ้ ละอื่น ๆ งานเหล่าน้ี
สามารถคานวณไดโ้ ดยใชก้ ลไกอ่ืน ๆ ทแ่ี ตกต่างกนั
Learn Programming with C Page 6
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ข้นั ตอนวธิ ีกำรแก้ปัญหำ Algorithms to Solve Problems
ข้นั ตอนวธิ ีการร่างวิธีในการแกป้ ัญหา อีกคร้ังหน่ึงที่พจิ ารณาเทียบเทา่ อลั กอริทึมสูตรการทาอาหาร หากคุณตอ้ งการเคก้ แครอท, คุณดึงออก
สูตรที่คุณชื่นชอบ ในทานองเดียวกนั ในการเขียนโปรแกรมถา้ คุณตอ้ งการท่ีจะแกส้ มคุณดึงออกจากข้นั ตอนวิธีการทีจ่ ะทางานดว้ ย ข้นั ตอน
วธิ ีการแบง่ ปันสองคลา้ ยคลึงกนั อื่น ๆ ที่มีสูตร ประการแรกคือการที่คุณสามารถหา "กระป๋ อง" อลั กอริทึมทว่ั ทกุ สถานท่ีในหนงั สือบน
อินเทอร์เน็ตในหอจดหมายเหตคุ อมพวิ เตอร์และท่ีอื่น ๆ ประการท่ีสองคอื วา่ อาจจะมีมากกวา่ หน่ึงข้นั ตอนวธิ ีการในการแกป้ ัญหาท่ีกาหนด
อลั กอริทมึ กระป๋ อง Canned Algorithms
หน่ึงในผลประโยชนข์ องหลายปี ของประวตั ิศาสตร์การคานวณคือคนที่มีการแกไ้ ขแลว้ ปัญหาและข้นั ตอนวิธีการเขียนลงไปแบ่งปันกบั
เพอ่ื นร่วมงานและเพื่อน ๆ
โปรแกรมเมอร์เผชิญปัญหาเดียวกนั ในวนั น้ีและข้นั ตอนวิธีการเดียวกบั ที่ทางานก็เช่นกนั ในขณะน้ีเป็นพวกเขาไดเ้ ม่ือคอมพวิ เตอร์ปรากฏ
ตวั คร้ังแรก
มีจานวนมากของหนงั สือท่ีดีอยใู่ นข้นั ตอนวธิ ีการโดยเฉพาะอยา่ งยง่ิ ถา้ คุณมีการเขา้ ถึงที่วทิ ยาลยั หรือมหาวทิ ยาลยั ร้านหนงั สือ คุณสามารถคิด
วา่ หนงั สือเหล่าน้ีเป็ นหนงั สือสูตร; พวกเขาทาให้วสั ดุอา้ งอิงท่ีดี อยา่ คิดวา่ คุณตอ้ งจดจาข้นั ตอนวธิ ีการท้งั หมดท่ีคุณพบ ขณะท่ีอาจมีไมก่ ่ี
"รายการโปรด" คุณจะสามารถที่จะท่องในจดุ ท่ีคุณมกั มองถึงสิ่งท่ีคุณตอ้ งการเม่ือคุณตอ้ งการมนั
มำกมำยเหลอื เฟื อของอลั กอริทมึ Plethora of Algorithms
เช่นเดียวกบั มีหลายสูตรสาหรับเคก้ แครอทแตล่ ะที่แตกตา่ งกนั เลก็ นอ้ ยจากถดั ไปคุณจะไดพ้ บกบั หลายข้นั ตอนวธิ ีที่แกป้ ัญหาเดียวกนั ใน
รูปแบบที่แตกตา่ งกนั ข้นั ตอนวิธีการเรียงลาดบั เป็นตวั อยา่ งท่ีดี การจดั เรียงอยา่ งรวดเร็ว, การเรียงลาดบั การเลือกและจดั เรียงฟองเพ่ือชื่อ
ไม่ก่ี: มีหลายข้นั ตอนวธิ ีการท่ีแตกต่างกนั มีการเรียงลาดบั แต่ละข้นั ตอนวิธีการเหล่าน้ีแนวทางปัญหาเดียวกนั - เรียงลาดบั ขอ้ มลู - ใน
รูปแบบที่แตกตา่ งกนั
การเลือกการเรียงลาดบั ข้นั ตอนวธิ ีการ (ส่ิงที่คุณจะทาอยา่ งไรในโครงการสุดทา้ ยในหลกั สูตรน้ี) คุณตอ้ งดูท่ีจานวนของขอ้ มลู ท่ีจะเรียง
ในขณะท่ีทกุ ข้นั ตอนวธิ ีการจดั เรียงจะทางานโดยไม่คานึงถึงปริมาณของขอ้ มูลท่ีคุณกาลงั เรียงลาดบั บางเร็วกว่าคนอ่ืน ๆ ในขอ้ มลู จานวนมาก
ตรงกนั ขา้ มบางคนที่ดีกวา่ ในการเรียงลาดบั ขนาดเลก็ จานวนมากของขอ้ มลู (เช่นการจดั เรียงอยา่ งรวดเร็ว)
อย่ำงมปี ระสิทธิภำพ Efficiency
มีพ้ืนท่ีท้งั หมดของวิทยาการคอมพิวเตอร์อุทิศเพื่อการศึกษาประสิทธิภาพของอลั กอริทึมที่มีอยู่ ประสิทธิภาพอยนู่ อกเหนือขอบเขตของ
หลกั สูตรน้ี แตถ่ า้ คุณจะไล่ตามทกั ษะการเขียนโปรแกรมของคุณต่อไปคุณสามารถเจาะเขา้ ไปในโลกที่ยอดเยย่ี มของการวิเคราะห์อลั กอริทึม
ผงั งำนและกำรไหลของข้อมูล-ไดอะแกรม Flowcharts and Data-Flow Diagrams
ขณะที่ข้นั ตอนวธิ ีการที่มีโครงร่างคาของโปรแกรมมีผงั โครงร่างภาพ มหี ลายประเภทของ "ภาพ" เครื่องมือที่จะช่วยในการออกแบบของ
โปรแกรมเป็น ผงั งานเป็น
ในหมผู่ ใู้ ชก้ นั มากท่ีสุดเทา่ ท่ีพวกเขาสามารถช่วยในการสร้างอลั กอริทึม พดู ถึงผงั งานหลงั จากที่อลั กอริทึมแลว้ ทาไม? กไ็ ม่จาเป็ นที่จะ
สร้างผงั การสร้างอลั กอริทึม ผมเชื่อวา่ การทาความเขา้ ใจข้นั ตอนวธิ ีการสาคญั กวา่ ผงั การทาความเขา้ ใจ โปรดจาไวว้ า่ หนงั สืออลั กอริทึม?
คุณจะไม่พบหนงั สือผงั ใด ๆ และอลั กอริทึมหนงั สือนอ้ ยมากใชผ้ งั งานท่ีจะอธิบายข้นั ตอนวธิ ี
แผนผงั โปรแกรม Flowcharting a Program
ผงั งานจะตดั สินใจตาม ลองกลบั ไปที่ตวั อยา่ งของการคานวณของพนกั งานจ่ายข้นั ตน้ ของเรา การตดั สินใจอะไรที่เก่ียวขอ้ ง? คนแรกคือส่ิงที่
เป็ นอตั ราค่าจา้ งหรือไม่ ประการท่ีสองไมล่ ูกจา้ งทางานนอ้ ยกว่าหรือมากกวา่ สี่สิบชว่ั โมง? ตอนน้ีคุณสามารถใชข้ อ้ มลู ดงั กล่าวในการสร้าง
ผงั สาหรับปัญหาท่ีเกิดข้ึน ผงั อาจมีลกั ษณะเหมือนรูปที่ 2-1 ดา้ นล่าง
Learn Programming with C Page 7
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
Figure 2-1: Pay flowchart
หากคุณมองกลบั ไปท่ีข้นั ตอนวิธีการที่คุณจะเห็นความสมั พนั ธท์ ี่ยอดเยยี่ มร่วมกนั โดยข้นั ตอนวิธีการและผงั นอกจากน้ีคุณควรจะเห็นวิธีท่ี
งา่ ยก็คือการสร้างอลั กอริทึมถา้ คุณมีผงั ท่ีดี
ข้อมูลแผนผงั - Diagrams Data-Flow Diagrams
แผนภาพขอ้ มลู ที่ไหลเป็นอีกหน่ึงเครื่องมือที่ภาพเพื่อช่วยให้คุณออกแบบซอฟตแ์ วร์ที่ดี แผนภาพขอ้ มูลไหลหรือ DFDS จริงมี
ลกั ษณะคลา้ ยกบั ผงั งาน ความแตกตา่ งคือแผนภาพการไหล DATA- แสดงให้เห็นถึงสิ่งท่ีจะถูกดาเนินการในขณะท่ีผงั แสดงใหเ้ ห็น
ถึงวิธีการที่จะทา DFD ตวั อยา่ งเช่นการจา่ ยเงินของเราอาจมีลกั ษณะเหมือนรูปท่ี 2-2 สมมติวา่ อตั ราค่าจา้ ง 10 ดอลลาร์ตอ่ ชว่ั โมง
Learn Programming with C Page 8
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
Figure 2-2: Pay data-flow diagram
รูปที่ 2-2 แสดงใหเ้ ห็นการไหลของขอ้ มลู จากการป้ อนขอ้ มลู ในการคานวณเพอ่ื ผลลพั ธส์ ุดทา้ ย มนั ไม่ไดค้ านึงถึงวา่ พนกั งานทางาน
ล่วงเวลาหรือไม่ เหตุใดจึงตอ้ งใชแ้ ผนภาพขอ้ มูลไหล? DFDS จะใชใ้ นการทาความเขา้ ใจการเคลื่อนไหวของขอ้ มลู ลองใชต้ วั อยา่ งท่ี
โลกจริงท่ีจะช่วยใหค้ ุณเขา้ ใจดีข้ึนเล็กนอ้ ย
ในสานกั งานรัฐบาลมกั จะมีข้นั ตอนท่ีเฉพาะเจาะจงและกระบวนการในสถานท่ีที่จะตอบการร้องขอสาหรับการระดมทุน แรกท่ีคุณจะตอ้ ง
กรอกแบบฟอร์มท่ีจาเป็น จากน้นั คุณส่งแบบฟอร์มเหล่าน้นั ไปยงั พนกั งานท่ีแผนกตอ้ นรับ เสมียนน้นั จะใชร้ ูปแบบของคุณไปยงั แผนกการ
ประมวลผลที่เหมาะสม แบบฟอร์มของคุณจะถูกประมวลผลแลว้ ส่งใหผ้ จู้ ดั การลงนามสาหรับผมู้ ีอานาจ ในที่สุดก็มกี ารลงนามและคาขอของ
คุณเป็นคาตอบตอ่ ไปน้ีกระบวนการที่คลา้ ยกนั ความเคล่ือนไหวของกระดาษจากพ้ืนท่ีหน่ึงไปยงั แสดงใหเ้ ห็นถึงการไหลของขอ้ มลู ของเรา
คุณมีความคิดของสิ่งท่ีตดั สินใจที่ถูกสร้างข้ึนในแตล่ ะจดุ ไม่เพยี งว่าขอไดร้ ับการประมวลผลและการที่คุณไดร้ ับคาตอบ นี่คือการไหลของ
ขอ้ มลู ทาความเขา้ ใจเกี่ยวกบั ข้นั ตอนน้ีจะไปทางยาวต่อการทาความเขา้ ใจปัญหาโดยรวมของคุณจะตอ้ งแก้
ภำพอน่ื ๆ Other Visuals
การสร้างอลั กอริทึมท่ีดีและโปรแกรมไมเ่ หลือ แตเ่ พียงผเู้ ดียวในผงั งานและ DFDS โปรแกรมเมอร์ที่ดีจะใชป้ ระเภทของภาพใด ๆ ที่
จะช่วยให้เขาหรือเธอเขา้ ใจปัญหา คุณอาจสร้างตารางแสดงขอ้ มูลการเปล่ียนแปลงในการตอบสนองต่อกระบวนการอื่น ๆ หรือคุณอาจ
สร้างแผนภูมิกราฟและคลา้ ยกบั ที่พบไดท้ ว่ั ไปในวชิ าคณิตศาสตร์และฟิ สิกส์ที่จะช่วยแสดงใหเ้ ห็นถึงปัญหาท่ีเกิดข้ึนอยา่ งเตม็ ที่และ
เขา้ ใจขอ้ มลู ท้งั หมดที่เกี่ยวขอ้ ง หากจาเป็ นตอ้ งดึงออกจากที่เก่าคณิตศาสตร์ฟิ สิกส์หรือตาราเรียนและอ่านบทท่ีเก่ียวกบั การสร้างแผนภูมิ
และกราฟ
Learn Programming with C Page 9
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
กำรเช่ือมต่อจดุ Connecting the Dots
การออกแบบข้นั ตอนวธิ ีเป็ นสิ่งสาคญั มากในการเขียนโปรแกรมคอมพิวเตอร์ หากคุณไมไ่ ดใ้ ชเ้ วลาออกแบบและการใชข้ ้นั ตอนวิธีการที่คุณ
จะใชเ้ วลามากเกินกวา่ ท่ีจาเป็นในโครงการและอาจกลายเป็นความผิดหวงั เม่ือบางส่วนของรหสั ของคุณไมท่ างาน
รูปท่ี 2-3 แสดงผงั งานและข้นั ตอนวธิ ีการของเราอยเู่ คียงขา้ งกนั เพ่อื ให้ดูใกลช้ ิด
รูปท่ี 2-3 แผนภูมิการวเิ คราะห์ การไหล
ข้นั ตอนวิธีการขา้ งตน้ ไม่ไดร้ ะบุการป้ อนขอ้ มูลหรือผลสุดทา้ ย (ส่งออก) สิ่งที่มนั ไม่แสดงคือการตดั สินใจท่ีวางอยใู่ นแนวเดียวกนั กบั
พ้ืนที่เดียวกนั ของผงั ชวั่ โมง> 40 บลอ็ กในผงั มีความสมั พนั ธก์ บั "ถา้ " คาสงั่ ในรหสั หลอก สาขาในผงั สอดคลอ้ งกบั การคานวณรอบ
ส่วน "อื่น ๆ " ของข้นั ตอนวธิ ี ลองหนั ตวั อยา่ งเล็ก ๆ น้ีเป็นรหสั จริงเพอ่ื ดูวา่ มนั จะทา มนั อาจจะช่วยให้ข้นั ตอนวิธีในสายตาในขณะท่ีคุณ
ดูตวั อยา่ งรหสั
การเขียนโปรแกรมภาษาแตล่ ะคนมีไวยากรณ์ท่ีเฉพาะเจาะจง: กฎระเบียบที่ตอ้ งปฏิบตั ิตามในการเขียนโปรแกรม รูปแบบการเขียน
โปรแกรม แตไ่ มไ่ ดเ้ ป็นสิ่งที่ทิง้ ไวใ้ นหิน ตวั อยา่ งของรูปแบบการเขียนโปรแกรมจะกาหนดวธิ ีการไกลเพ่ือเย้อื งงบบางส่วน (ถา้ มีแลว้
และอ่ืน ๆ สร้างตวั อยา่ งเช่น) หรือตาแหน่งที่จะวางจดุ เริ่มตน้ และสิ้นสุดลงสาหรับการจดั ฟันเป็นประจา (โปรแกรมเมอร์ C มีแนวโนม้
ท่ีจะใชร้ ูปแบบท่ีแตกตา่ งกนั ท่ีน่ี) ในขณะที่คุณเรียนรู้ท่ีจะอา่ นแหล่งท่ีมา
Learn Programming with C Page 10
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
รหสั คุณไดอ้ ยา่ งรวดเร็วจะตระหนกั ถึงบางส่วนของรูปแบบเหล่าน้ีและสามารถเลือกหน่ึงท่ีเหมาะกบั คุณท่ีดีที่สุดและช่วยใหค้ ุณเขา้ ใจมาก
ข้ึน
ณ จุดน้ีในหลกั สูตรท่ีเรายงั ไมไ่ ดร้ ับการคุม้ ครองตวั แปร แต่ที่ไม่ควรขดั ขวางคุณในการทาความเขา้ ใจสิ่งท่ีเกิดข้ึนในตวั อยา่ งต่อไปน้ี ถา้ คุณ
รู้สึกสบั สนหลงั จากที่ไดอ้ า่ นตวั อยา่ งโคด้ เหล่าน้ีกลบั มาให้กบั พวกเขาหลงั จากท่ีเราครอบคลุมตวั แปรในบทเรียนต่อไป
ข้นั พนื้ ฐำน BASIC
ข้นั พ้นื ฐาน (การเร่ิมตน้ ของอเนกประสงคส์ ญั ลกั ษณ์การเรียนการสอน Code) ไดร้ ับการพฒั นาโดยจอห์น Kemeny ท่ี
Dartmouth College รอบปี 1967 มนั เป็นภาษาโปรแกรมที่งา่ ยออกแบบมาใหง้ ่ายตอ่ การเรียนรู้และการใชง้ าน น่ีคือวิธีการ
ข้นั ตอนวิธีการของเราจะมองในพ้นื ฐาน:
10 REM SIMPLE PAY IN BASIC
20 REM H IS THE NUMBER OF HOURS
30 REM P IS THE GROSS PAY
40 INPUT H
50 IF H > 40 THEN 80
60 LET P = 10 * H
70 GOTO 90
80 LET P = 10 * 40 + 1.5 * (H-40)
90 PRINT "GROSS PAY IS ", P
100 END
พ้นื ฐานตวั เลขท่ีจดุ เริ่มตน้ ของแตล่ ะบรรทดั ที่มีการอา้ งอิงข้นั ตอนสาหรับโปรแกรม REM คาหลกั ที่จะใชเ้ ป็น "คาพดู " ความคิดเห็นท่ีจะ
บอกคุณและคนอ่ืน ๆ ส่ิงท่ีเกิดข้ึนและเพ่อื ช่วยในการทาความเขา้ ใจโปรแกรม การเขียนโปรแกรมภาษาแต่ละคนมีวิธีการท่ีแตกต่างกนั ของ
การทาเครื่องหมายแสดงความคิดเห็น บางรุ่น BASIC จากดั ชื่อของตวั แปรไปยงั ตวั อกั ษรเดียว ที่น่ีเราใช้ H สาหรับชวั่ โมงและ P
สาหรับการจ่าย นอกจากน้ียงั สงั เกตเห็นวา่ ดอกจนั (*) ถูกนามาใชเ้ ป็นสญั ลกั ษณ์แทนการคูณ x จากคณิตศาสตร์
การใชเ้ คร่ืองหมายดอกจนั น้ีเป็ นปกติใหม้ ากท่ีสุดการเขียนโปรแกรมภาษา
ปำสคำล Pascal
ปาสคาล, ที่สร้างข้ึนโดยนิคลสั เวริ ์ ธ ในปี 1970 อยบู่ นพ้ืนฐานของภาษาสากลท่ีเรียกวา่ ALGOL 60 มนั ถูกออกแบบมาเป็น
ภาษาท่ีการเรียนการสอนสาหรับนกั เรียนเร่ิมตน้
ความคิดเห็นในปาสคาลจะถูกปิ ดลอ้ มอยใู่ นวงเลบ็ .
PROGRAM SimplePay( INPUT, OUTPUT);
{ simple pay in pascal }
VAR
hours, pay: INTEGER
Learn Programming with C Page 11
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
BEGIN
Read(hours);
IF hours <= 40 THEN
pay := 10 * hours
ELSE
pay := 10 * 40 + 1.5 * (hours-40)
WRITELN( 'Gross pay is ', pay: 6);
END.
C
C เป็ นภาษาโปรแกรมท่ีสร้างข้ึนในหอ้ งปฏิบตั ิการ Bell ในช่วงตน้ ปี 1970 เมื่อมีการเขา้ ถึงในระดบั ต่าไปยงั เครื่องถือวา่ มีความสาคญั
ความคิดเห็นใน C เร่ิมตน้ ดว้ ย / * และจบดว้ ย * /.
/* Simple pay in C */
#include <stdio.h>
main()
{
int hours, pay;
scanf("%d", &hours);
if (hours <= 40)
pay = 10 * hours;
else
pay = 10 * 40 + 1.5 * (hours-40);
printf("gross pay is %d", pay);
}
อีกคร้ังไม่ตอ้ งกงั วลถา้ คุณไมเ่ ขา้ ใจวา่ ทกุ อยา่ งท่ีเกิดข้ึนในตวั อยา่ งโคด้ เหล่าน้ี จดุ นี่คือการรู้จกั ความคลา้ ยคลึงกนั ระหวา่ งอลั กอริทึมและรหสั ผล
ของเรา คุณจะเร่ิมตน้ การเขียนโคด้ จริงในบทที่ 5
Learn Programming with C Page 12
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่Lี esson 3: ตวั แปรและชนิดข้อมูลVariables and Data Types
คำอธิบำยบทเรียน Lesson Description: ในบทเรียนสุดทา้ ยคุณจบั เหลือบของไมก่ ่ีภาษาโปรแกรมท่ีแตกตา่ งกนั
และวิธีการที่แตล่ ะคนจะแกป้ ัญหาของการคานวณค่าใชจ้ า่ ยข้นั ตน้ ตวั อยา่ งที่ใชใ้ นแตล่ ะตวั แปร ในบทเรียนน้ีคุณจะไดเ้ รียนรู้สิ่งที่
ตวั แปรที่เป็นและไมไ่ ดร้ ับการแนะนาให้รู้จกั กบั ประเภทต่างๆของตวั แปรและดูท่ีค่าคงที่
อะไรคอื ตวั แปร? What Is a Variable?
ตวั แปรเป็น "ถือ" ขอ้ มูลท่ีมีเน้ือหาสามารถนามาใชห้ รือมีการเปล่ียนแปลงโดยโปรแกรม ในการเขียนโปรแกรมตวั แปรมกั จะแทนดว้ ย
ตวั อกั ษรและตวั เลข "ชื่อ" ชอบตวั อกั ษรเดียว (H สาหรับชวั่ โมงในบทที่ 2) หรือช่ือไดอ้ ีกตอ่ ไปที่เป็ นตวั แทนของสิ่งท่ีตวั แปรท่ีใชส้ าหรับ
ยกตวั อยา่ งเช่น "นบั " จะนามาใชส้ าหรับการนบั หากคุณถ่ายคณิตศาสตร์หรือฟิ สิกส์ในโรงเรียนคุณควรจะคุน้ เคยกบั ตวั แปรในสมการเช่น v
= DT (ความเร็วระยะทาง = x เวลา)
ตวั แปรในการเขียนโปรแกรมคอมพวิ เตอร์จะไมแ่ ตกตา่ ง นอกจากน้ีคุณยงั สามารถคิดของตวั แปรในการเขียนโปรแกรมเป็นกล่อง บางทีคุณ
อาจจะไดย้ า้ ยไปเมื่อเร็ว ๆ น้ี ท่ีจะยา้ ยคุณนาสิ่งในกล่องฉลากพวกเขาเพ่ือใหค้ ุณรู้ว่าส่ิงท่ีอยใู่ นพวกเขายา้ ยไปยงั สถานท่ีใหม่และจากน้นั ใชเ้ วลา
สามออกจากบรรจุภณั ฑแ์ ละการจดั เรียงทุกอยา่ งตามท่ีคุณไม่บรรจุ การเขียนโปรแกรมท่ีคลา้ ยกนั ตวั แปรเช่นกล่องที่มีป้ ายชื่อเช่นเดียวกบั ที่
แสดงในรูปที่ 3-1
Figure 3-1: A variable
กำรต้งั ชื่อ Naming Conventions
กล่องของเรามีป้ ายช่ือของ "varName." เมื่อมีการเขียนรหสั ที่คุณอา้ งถึงตวั แปรที่ฉลากหรือชื่อของมนั รูปที่ 3-1 นอกจากน้ียงั แสดง
ให้เห็นถึงหน่ึงในไมก่ ี่ประชุมสาหรับการต้งั ช่ือตวั แปร (อยา่ งนอ้ ยใน C) ตวั แปรคือโดยทวั่ ไปในกรณีท่ีต่ากวา่ ขอ้ ความ ถา้ ช่ือตวั แปร
ประกอบดว้ ยมากกวา่ หน่ึงคาแลว้ ตวั อกั ษรตวั แรกของแต่ละคาตอ่ เนื่องเป็นตวั พิมพใ์ หญ่
ดว้ ยความชื่นชมขอ้ ยกเวน้ ไมก่ ี่ผมจะอธิบายในไมช่ า้ คุณควรใชค้ าพดู ท่ีสมบูรณ์ในการอธิบายตวั แปร ตวั อยา่ งเงินเดือนจากบทเรียนท่ีผา่ นมา
แสดงใหเ้ ห็นวา่ ตวั แปรสาหรับชวั่ โมงและจา่ ยเงินตามที่ท้งั สองตวั เดียว (P และ H) และเป็นช่ือท่ีเหมาะสม (จ่ายและเวลา) มนั ง่ายมากท่ีจะ
เขา้ ใจส่ิงท่ีรหสั ไม่เม่ือตวั แปรมีช่ือท่ีเหมาะสม
คร้ังเดียวที่คุณควรใชต้ วั แปรตวั เดียวเป็ นลูปและนบั ซ่ึงเราครอบคลุมในรายละเอียดในบทท่ี 9 มนั ไมผ่ ิดที่จะใชต้ วั แปรที่เป็นเพยี งเดียว
ช่ือตวั ละคร; แตโ่ ปรแกรมเมอร์ที่ทนั สมยั ใชช้ ื่อตวั แปรท่ีอธิบายฟังกช์ นั่ ของพวกเขา (เช่นชว่ั โมงอตั ราและจา่ ย) ในขณะที่มนั ทาใหร้ หสั
แหล่งที่งา่ ยต่อการเขา้ ใจ
ลองมาตวั อยา่ งอื่น: พ้นื ที่ช้นั ในหอ้ งพกั พ้ืนที่ของรูปสี่เหลี่ยมใด ๆ ที่มีการคานวณเป็นเท่าของความยาวความกวา้ ง ดงั น้นั ถา้ ห้องนง่ั เล่นในบา้ น
ของคุณเป็น 13 ฟตุ ยาว 10 ฟตุ กวา้ งพ้นื ท่ีท้งั หมด 130 ตารางฟตุ (ดูรูปท่ี 3-2) อะไรบางอยา่ งของช่ือตวั แปรคุณสามารถใชใ้ นการเขียน
โปรแกรมในการคานวณพ้ืนที่หรือไม่ คาแนะนา: อ่านประโยคที่สองของยอ่ หนา้ น้ีอีกคร้ัง
Learn Programming with C Page 13
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
Figure 3-2: Area of a rectangle
ข้อยกเว้นกฎExceptions to
the Rule
บางสถานการณ์มีความเหมาะสมสาหรบั ชื่อตวั แปรตวั เดียวท่ีไมไ่ ดใ้ ชเ้ ป็นตวั แปรนบั ยกตวั อยา่ งเช่นสมการทางคณิตศาสตร์จานวนมากไดร้ ับ
การยอมรบั โดยทว่ั ไปฉลากสาหรับตวั แปรบาง หากคุณกาลงั ทางานกบั สมการท่ีรู้จกั กนั มนั เป็นเร่ืองง่ายที่จะเขียนมนั ตรงตามท่ีมนั จะปรากฏข้ึน
ในบริบท โปรแกรมเมอร์อีกคุน้ เคยกบั สมการทนั ทีจะรับรู้ส่ิงที่ตวั แปรหมายถึง
สิ่งทเ่ี ป็ นค่ำคงท?ี่ What Is a Constant?
คงที่และตวั แปรแบ่งปันความคลา้ ยคลึงกนั บาง; แตพ่ วกเขาจะใชท้ ี่แตกตา่ งกนั ใส่เพียงแค่คงเป็ นตวั แปรท่ีมีค่าไมส่ ามารถเปล่ียนแปลง
ไดใ้ นระหวา่ งหลกั สูตรของโปรแกรม คา่ คงที่มกั จะไดร้ ับความคุม้ ค่าในเวลาท่ีพวกเขาจะประกาศ (สร้างข้ึนคร้ังแรก) ตวั อยา่ งท่ีคุน้ เคย
ของคา่ คงที่รวม Pi คณิตศาสตร์คา่ ความเร็วของแสงในสุญญากาศความเร็วของเสียงและแรงโนม้ ถ่วงคง
เช่นเดียวกบั ตวั แปรคา่ คงท่ีมีฉลากและสามารถนามาอา้ งถึงในการคานวณและสมการในโปรแกรมของคุณ ช่ือคงท่ีแทนค่าท่ีแทจ้ ริงของ
ค่าคงที่เมื่อทาคานวณ ลองดูตวั อยา่ ง มลู คา่ คณิตศาสตร์สาหรับ Pi โดยทว่ั ไปถือวา่ จะอยทู่ ่ีประมาณ 3.14 ค่าน้ีจริงจะมีจานวนมากข้ึน
หลงั จุดทศนิยมข้ึนอยกู่ บั วิธีที่ถูกตอ้ งคุณจะตอ้ งอยใู่ นสมการของคุณ ตอนน้ีบอกวา่ คุณตอ้ งคิดออกพ้ืนที่ของวงกลม ในทางคณิตศาสตร์
สมการเป็ นพ้นื ที่ = pi * R2 ดงั แสดงในรูปที่ 3-3
Learn Programming with C Page 14
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
Figure 3-3: Area of a circle
source code สาหรับสมการของเราสามารถดูคลา้ ยกนั มากกบั สมการของตวั เอง น่ีคือตวั อยา่ งท่ีเขียนใน
C:
#define pi 3.14 /* define pi to be 3.14 */
main()
{
float area, r;
printf("Input the radius of the circle: \n");
scanf("%f", r);
area := pi * ( r * r );
printf(" the area of a circle with radius %f is:
%f\n", r,area);
}
อีกคร้ังไม่ตอ้ งกงั วลถา้ คุณยงั ไม่เขา้ ใจไวยากรณ์ท้งั หมดของตวั อยา่ ง อะไรคือสิ่งที่สาคญั ที่นี่คือวธิ ีการท่ีเราสร้างข้ึนมาอยา่ ง
ต่อเน่ืองของปี่ ใน C ค่าคงที่ถูกสร้างข้ึนโดยทวั่ ไปท่ีมีคาสงั่ กาหนด คุณ "กาหนด" คงที่มีค่าบางอยา่ ง แลว้ คุณใชค้ า่ คงที่ใน
สมการของคุณราวกบั ว่ามนั เป็นจานวนที่เกิดข้ึนจริง บรรทดั สุดทา้ ยของโปรแกรมส้นั ๆ ของเราพิมพอ์ อกพ้ืนที่
ภาษาที่แตกตา่ งใชว้ ธิ ีการท่ีแตกต่างกนั สาหรับการกาหนดคา่ คงท่ี ยกตวั อยา่ งเช่น Pascal ใช้ CONST คาหลกั เช่นน้ี
PROGRAM Area( INPUT, OUTPUT);
CONST pi 3.14; /* define pi to be 3.14 */
VAR
area, r : REAL;
Learn Programming with C Page 15
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
BEGIN
Write("Input the radius of the circle: ");
readln(r);
area = pi * ( r * r );
Writeln("The area of a circle with radius 5 is: ",
area);
END.
มีการเขียนโปรแกรมภาษาไม่กี่คนท่ีไม่ไดม้ ีค่าคงท่ีหรือใชช้ ื่อดงั น้ี พ้ืนฐานเดิมเป็นตวั อยา่ งที่ดี อยา่ งไรกต็ ามคุณสามารถหลีกเลี่ยงปัญหาท่ี
โดยการสร้างตวั แปรกาหนดค่าและจากน้นั ไม่เปล่ียนมนั ในโปรแกรมของคุณ
ข้อยกเว้นเพม่ิ เตมิ More Exceptions
เทคนิคการพดู คงไมไ่ ดจ้ ะตอ้ งมีการกาหนดหรือการประกาศให้เป็นค่าคงท่ี ถา้ คุณสร้างตวั แปรในโปรแกรมของคุณและกาหนดตวั แปรที่มี
คา่ ท่ีรู้จกั กนั (ตวั อยา่ งเช่นรัศมี = 5) และไม่เคยเปลี่ยนตวั แปรท่ีสามารถไดร้ ับการพจิ ารณาอยา่ งต่อเน่ือง
แต่ก็ถือวา่ การเขียนโปรแกรมท่ีน่าสงสาร ค่าคงท่ีควรจะต้งั คา่ ไดอ้ ยา่ งชดั เจนข้ึนเพื่อหลีกเล่ียงความสบั สนและใหค้ วามยดื หยนุ่ ในการเขียน
โปรแกรม
ประเภทข้อมูลตวั เลข Numerical Data Types
ในการสง่ั ซ้ือสาหรับตวั แปรที่จะทางานไดอ้ ยา่ งถูกตอ้ งจะตอ้ งมีชนิดของขอ้ มูลที่เก่ียวขอ้ งกบั มนั ชนิดขอ้ มลู คือการจดั หมวดหมสู่ าหรับตวั แปร
ที่แสดงออกถึงส่ิงที่ชนิดของจานวนเป็ น ภาษาโปรแกรมส่วนใหญ่รวมถึงชนิดขอ้ มลู สาหรับท้งั สองรูปแบบตวั เลขพ้ืนฐานตวั เลขท้งั หมด
(เรียกวา่ จานวนเตม็ ) และทศนิยม (เรียกวา่ ตวั เลขจริงหรือทศนิยม)
ประเภทจำนวนเตม็ Integer Types
ประเภทจานวนเตม็ เป็ นตวั เลขท่ีไม่ไดม้ ีจุดทศนิยมและสามารถมีคา่ เป็นบวกหรือลบ -50; 200; -1023; 0; 10; และ 256 เป็น
ตวั อยา่ งของจานวนเตม็ C และ Java มีความหลากหลายของชนิดจานวนเตม็ พวกเขาแตกต่างกนั ในช่วงของคา่ ท่ีพวกเขาสามารถถือและ
ในไม่วา่ จะเป็นตวั เลขที่ติดลบสามารถนามาใช้ ชนิดขอ้ มลู จานวนเตม็ ทวั่ ไป:
int
short
long
ท้งั หมดเหล่าน้ีชนิดขอ้ มลู ท่ีมีการลงนามในชนิดขอ้ มูลหมายถึงพวกเขาสามารถมีคา่ เป็นบวกหรือลบ โดยเฉพาะถา้ คุณตอ้ งการจานวนเพียง
เป็ นบวกให้คุณเพม่ิ คาวา่ "ไมไ่ ดล้ งนาม" กบั ประเภทขอ้ มูล:
unsigned int
unsigned short
Learn Programming with C Page 16
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
unsigned long
นอกจากน้ีคุณยงั สามารถรวมชนิดขอ้ มูลดงั ต่อไปน้ี:
long int
short int
long long
ทาไมประเภทแตกต่างกนั อยา่ งไร แตล่ ะชนิดจานวนเตม็ มีประโยชน์สาหรับบางช่วงของตวั เลข
ชนิดข้อมูลใน C และ Java
Data Range in C Range in Java
Type
-32,767 to -2,147,483,648
Int 32,767 to
(2 byte int) 2,147,483,647(4 byte int)
Short -32,768 -32,768 to 32,678
to
32,768
Long --
2,147,483,647 9,223,372,036,854,775,808
to to
2,147,483,647 9,223,372,036,854,775,807
unsigned 0 to 65,535 n/a
int
unsigned 0 to 65,535 n/a
short n/a
unsigned 0
long to
4,294,967,295
ซ่ึงแตกตา่ งจาก C และ C ++, Java ไม่ไดม้ ี "ไมไ่ ดล้ งนาม" ชนิดขอ้ มลู : คุณไม่สามารถรวมเป็นชนิดขอ้ มลู ใน C และ C ++ เรา
จะดูท่ีชนิดขอ้ มลู เหล่าน้ีในรายละเอียดในบทท่ี 5
Learn Programming with C Page 17
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ลอยประเภทพอยต์ Floating Point Types
เช่นเดียวกบั ประเภทจานวนเตม็ มีเพยี งไมก่ ี่ชนิดท่ีแตกต่างกนั ทศนิยม แตล่ ะประเภทมีจุดม่งุ หมายท่ีแตกต่างกนั และมีความหลากหลาย
แตกตา่ งกนั ท่ีเก่ียวขอ้ งกบั มนั โปรแกรมคณิตศาสตร์มกั จะตอ้ งมีระดบั สูงของความแม่นยาสาหรับการคานวณ ประเภทเหล่าน้ีลอยจุด
แตกต่างกนั ในระดบั ของความแม่นยาท่ีสามารถทาได้ มีสองประเภทหลกั จดุ ลอยตวั อย:ู่
float
double
ลอยมีที่จะเป็นตวั แทนอยา่ งนอ้ ยหกตวั เลขท่ีสาคญั และช่วยใหช้ ่วง 10-37 และ 1037. ค่าเหล่าน้ีมกั จะเป็นตวั แทนในสญั กรณ์ช้ีแจง
เป็ นสญั กรณ์เดียวกบั ที่ใชใ้ นวชิ าคณิตศาสตร์และฟิ สิกส์ ยกตวั อยา่ งเช่นจานวน 1,000,000,000 จะเขียนเป็น 1.0e9 ท่ี "E"
หมายถึง "10 ถึงอานาจของ" และจานวนหลงั จาก "E" เป็นเลขยกกาลงั
ดบั เบิลสาหรับความแม่นยาสองประเภทจุดลอยตวั ประเภทคูจ่ ะคลา้ ยกบั ลอย แตข่ ยายจานวนข้นั ต่าของตวั เลขที่สาคญั ถึงสิบ นอกจากน้ี C
และ C ++ อนุญาตให้มีชนิดท่ีสามจุดลอยตวั : คู่ยาวซ่ึงให้ความแมน่ ยามากยงิ่ ข้ึน
ชนิดข้อมูลทเี่ ป็ นกล่อง Data Types as Boxes
โปรดจาไวต้ วั อยา่ งเช่นกล่องของเราจากส่วนแรก? ลองมาแนวคิดเลก็ ๆ นอ้ ย ๆ ตอ่ ไปและนาไปใชก้ บั ชนิดขอ้ มลู ไมไ่ ดท้ กุ ช่องมขี นาด
เท่ากนั กล่องขนาดเลก็ ที่มีประโยชน์สาหรับการจดั เก็บรายการขนาดเลก็ และกล่องขนาดใหญ่สาหรับรายการท่ีมขี นาดใหญห่ รือหลาย ๆ
ในทานองเดียวกนั คุณอาจคดิ วา่ ของชนิดขอ้ มลู เป็นกล่องที่มีขนาดแตกต่างกนั ดงั น้นั กล่องชนิด "ส้นั " เป็นกล่องเลก็ ๆ กล่องชนิด int
"" เป็ นกล่องขนาดกลางและกล่องชนิด "ยาว" เป็นกล่องท่ีมีขนาดใหญ่ ลอยและกล่องดบั เบิลยงั คงมีขนาดใหญ่
ขนำดของ int Size of an int
หน่ึงในปัญหาในการเขียนรหสั C เพอื่ ทางานบนความหลากหลายของระบบท่ีแตกต่างกนั ท่ีเก่ียวขอ้ งกบั "ขนาดของ Int."
โปรเซสเซอร์บางจริงสามารถใชพ้ ้ืนท่ีหน่วยความจาขนาดใหญ่ (กล่องขนาดใหญ)่ สาหรับ int ชนิดขอ้ มูล โปรแกรมที่ใชม้ ากของชนิด
ขอ้ มลู int อาจทางานไดด้ ีบน
พซี ีIntel® แต่จะทางานไมถ่ ูกตอ้ งบนเวริ ์กสเตชนั แมคอินทอชหรือดวงอาทิตย์ โปรดทราบวา่ อาจจะมีขนาดแตกตา่ งกนั สาหรับ int
ในระบบท่ีคุณเลือกกวา่ เป็ นที่กล่าวถึงนี่ แตห่ ลกั การพ้ืนฐานยงั คงใช้ เอกสารประกอบสาหรับระบบของคุณสาหรับขอ้ มูลเพมิ่ เติม
Learn Programming with C Page 18
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
กำรกำหนดตวั แปร Variable Assignment
บทเรียนน้ีจะไมส่ มบรู ณ์โดยไมม่ ีการอภิปรายของการกาหนดตวั แปร - วิธีการที่คุณใหต้ วั แปรค่า ที่จริงแลว้ คุณไดเ้ ห็นแลว้ ตวั อยา่ งของเร่ืองน้ีใน
ตวั อยา่ งท่ีแสดงแหล่งที่มาก่อนหน้าน้ี เพื่อใหค้ ุม้ ค่าให้กบั ตวั แปรที่คุณบอกวา่ มนั เป็น "เทา่ กบั " ไปยงั หมายเลขที่คุณตอ้ งการกาหนด โปรดจาไว้
วา่ กล่องตวั แปรของเราไดจ้ ากรูปท่ี 3-1? ตอนน้ีขอ "แพค็ " กล่องท่ีมีจานวน
Figure 3-4: Variable assignment
น่ีคือบางตวั อยา่ งเพ่ิมเติมของการกาหนดตวั แปร:
hours = 80
rate = 10
pay = rate * hours
ท่ีนี่เราจะคานวณจ่ายเงินอีกคร้ังและใหค้ ่าจานวนชว่ั โมงทางาน (80) และอตั ราการจา่ ยเงิน (10) ในตวั อยา่ งที่ผ่านมาเรากาหนดให้การ
จ่ายเงินเพอ่ื เป็นคา่ ท่ีคานวณได้
Learn Programming with C Page 19
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่ี Lesson 4: ชนิดข้อมูลเพม่ิ เติมMore Data Types
คำอธิบำยบทเรียน Lesson Description: ตวั เลขไมไ่ ดช้ นิดเดียวของขอ้ มูลท่สี ามารถแสดงโดยตวั แปร การเขียน
โปรแกรมภาษาหลายแห่งมีชนิดของขอ้ มลู ท่ีจะจดั การกบั ตวั อกั ษรท้งั แปลกประหลาด (ตวั เดียว) หรือลาดบั ของตวั อกั ษรท่ี
แตกตา่ งกนั (สตริง)
นอกจากน้ียงั มีหลายภาษาจดั การขอ้ มลู ตรรกะ
พมิ พ์ตวั อกั ษรCharacter Type
ตวั แปรท่ีมีการกาหนดเป็ นพมิ พต์ วั อกั ษรสามารถถือตวั อกั ษรเช่นเดียวกบั ตวั เลขและแมก้ ระทงั่ เครื่องหมายวรรคตอน ในกรณีน้ีตวั เลขยงั
ไม่ไดร้ ับการปฏิบตั ิเช่นจานวนเตม็ และทศนิยมค่า แต่จะถือวา่ เป็นตวั ละครเดียวกบั ตวั อกั ษร A หรือซีใน C และ Java, รูปแบบตวั อกั ษร
ที่กาหนดไวด้ ว้ ยถ่านคาหลกั ตวั แปรประเภทถ่านเท่าน้นั ที่สามารถถือเป็นตวั อกั ษรเดียวหรือหมายเลข อยา่ งไรกต็ ามการดาเนินการของ
Java ชนิดขอ้ มลู ถ่านเป็น 16 บิตในขนาด (กล่องขนาดใหญ)่ ซ่ึงช่วยใหส้ ามารถจดั การกบั ตา่ งประเทศ (ท่ีเรียกวา่ ไบตค์ ู่) ตวั อกั ษร การ
ดาเนินงานของ C ถ่านเป็ นเพียง 8 บิตและ จากดั การจดั การคา่ ASCII (อธิบายดา้ นล่าง) จึง
ท่ีกล่าววา่ ถ่านเป็ นจริงจานวนเตม็ ชนิดขอ้ มูล น้ีจะทาอยา่ งไรกบั วธิ ีการที่เก็บขอ้ มลู คอมพวิ เตอร์ คอมพิวเตอร์ใชร้ หสั ในการจดั เก็บตวั เลข
ตวั อกั ษรท่ีจานวนเตม็ บางอยา่ งแทนตวั อกั ษรบางอยา่ ง รหสั ตวั เลขเรียกวา่ รหสั มาตรฐานอเมริกนั สาหรับการแลกเปลี่ยนขอ้ มูลรหสั หรือ
ASCII (ออกเสียง "ขอคีย"์ )
มีไมก่ ่ีคน ASCII เป็นส่วนใหญแ่ ละเป็นสิ่งที่เราจะใชต้ ลอดหลกั สูตรน้ีมี แต่ ใชร้ หสั ASCII คา่ จานวนเตม็ 65 แสดงใหเ้ ห็นถึงตวั อกั ษร
'A' (พมิ พใ์ หญ่) รหสั ASCII มาตรฐานวิ่งตวั เลขจาก 0 ถึง 127 เม่ือช่วงของค่าที่มีขนาดเล็กพอท่ีจะใส่ลงไปใน 7 บิตและชนิดขอ้ มลู
ถ่านมีขนาด 8 บิต (หรือ 1 ไบต)์ ให้มีพ้ืนที่เพยี งพอท่ีจะจดั การกบั ASCII มาตรฐาน รหสั .
รหัส ASCII มำตรฐำน The Standard ASCII Codes
ตารางท่ี 4-3: รหัส ASCII มาตรฐาน
Decimal Character ASCII Name
Value
0 @ NUL
1 SOH
2
3 B STX
4 ETX
5 EOT
6
7 E ENQ
8 K
G BEL
H BS (backspace)
Learn Programming with C Page 20
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
9 I, tab HT
10 j L (line feed)
11 K VT
12 L (form feed)
13 R (carriage
return)
14 N SO
15 O SI
16 LE
17 Q 1
18 R 2
19 S 3
20 T 4
21 U N K
22 V SYN
23 ETB
24 X N
25 Y E
26 SUB
27 [, esc ES (escape)
28 \ S
29 ] GS
30 RS
31 US
32 space S
33
34 II
35 #
36 $
37 o
38 &
39 (single quote)
40 (
41 )
42 *
43 +
Learn Programming with C Page 21
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
44 , (comma)
45 -
46 (period)
47 /
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9
58
59
60 <
61 =
62 >
63 ?
64 @
65
66 B
67
68
69 E
70
71 G
72 H
73 I
74 J
75 K
76 L
77
78 N
Learn Programming with C Page 22
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
79 O
80
81 Q
82 R
83 S
84 T
85 U
86 V
87
88 X
89 Y
90
91 [
92 \
93 ]
94
95 (caret symbol)
96 (underscore)
97
98 (back tick)
99 a
100 b
101 c
102 d
103 e
104 f
105 g
106 h
107 i
108 j
109 k
110 l
111 m
112 n
113 o
p
q
Learn Programming with C Page 23
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
114 r (tilde)
115 s EL
116 t
117 u
118 v
119 w
120 x
121 y
122 z
123 {
124
125 }
126
del,
127 rubout
31 ตวั แรกจะถือวา่ เป็ นตวั ควบคุมแทนโดย / \ สญั ลกั ษณ์ เหล่าน้ีเรียกวา่ อกั ขระที่ไม่ใช่การพิมพเ์ ช่นที่พวกเขาไม่สามารถท่ีจะพิมพอ์ อกทาง
เครื่องพมิ พ์ บางส่วนของการควบคุมตวั อกั ษรเหล่าน้ี - / \ L เช่น - จะใชใ้ นการส่งคาสงั่ ไปยงั อุปกรณ์เช่นเครื่องพิมพส์ ายหรือโมเด็ม / \ L
หมายถึง FF คาสง่ั หรือฟี ดแบบฟอร์มซ่ึงเป็ นสาเหตขุ องเคร่ืองพมิ พท์ ี่จะกา้ วไปหน่ึงหนา้ ก่อนดาเนินการต่อในการพิมพ์
ตวั อกั ษรทก่ี ำหนดตวั แปร Character Variable Assignment
ลองดูตวั อยา่ ง ในโรงเรียนทดสอบจานวนมากจะตอ้ งมีการดาเนินการโดยเฉพาะอยา่ งยง่ิ ในช่วงปลายปี น้ี การทดสอบส่วนใหญ่จะไดร้ บั เกรด
เป็ นตวั อกั ษรบนพ้นื ฐานของค่าตวั เลขท่ีเกิดข้ึนจริง แต่โดยทว่ั ไปเกรดแบบตวั อกั ษรจะไดร้ บั ข้ึนอยกู่ บั ช่วงตวั เลข ดงั น้นั ถา้ คุณไดค้ ะแนน
ระหวา่ ง 95 และ 100 ที่คุณไดร้ ับ "A" แต่ถา้ คุณ 20 คะแนนที่คุณไดร้ ับ "เอฟ" วา่ เกรดเป็นตวั อกั ษรเป็นตวั อกั ษรพิมพ์
ส่ิงหน่ึงท่ีแยกประเภทตวั อกั ษรจากประเภทตวั เลขเป็นวิธีที่คุณกาหนดคา่ ให้กบั ตวั แปร เมื่อคุณกาหนดคา่ ตวั อกั ษรที่คุณวางคา่ ระหวา่ ง
เคร่ืองหมายคาพดู เดียว ลองดูตวั อยา่ งจดหมายเกรดของเราในระยะส้นั รหสั C ตวั อยา่ งขอ้ มูล:
...
char grade;
short score;
...
if (score >= 95)
Learn Programming with C Page 24
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
grade = 'A';
if (score <= 94) and (score >= 90)
grade = 'B';
...
ต้งั แต่ชนิดขอ้ มูลถ่านเท่าน้นั ท่ีสามารถถือตวั เดียวคุณจะไมส่ ามารถมีผลการเรียนเช่น A + หรือ C-
เงอ่ื นไข Strings
สตริงตวั อกั ษรตามอีกชนิดขอ้ มูล คุณสามารถคิดของสตริงเป็ นชุดของตวั อกั ษร สตริงมกั จะนานกวา่ ตวั เดียว แตไ่ ม่จาเป็นตอ้ งเป็น สตริง
สามารถเป็ นคาเดียวเช่น "ขอ้ ความ" หรือวลีท่ีมีขนาดเล็กเช่น "พิมพต์ วั เลข" หรือแมก้ ระทงั่ การรวมกนั ของตวั อกั ษรและตวั เลขเช่น "# 14-
1519 ไหนเลน"
บางภาษาเช่นภาษาปาสคาลและ Java มีอยา่ งเป็นทางการประเภทสตริงขอ้ มูล C และ C ++ ไมไ่ ดม้ ีประเภทสตริงอยา่ งเป็นทางการ ใน
ภาษาเหล่าน้ีจะแสดงสตริงเป็นอาร์เรยช์ ุดของค่านิยมของประเภทขอ้ มูลเดียวกนั (ในกรณีน้ีถ่าน) คุณจะไดเ้ รียนรู้เพ่ิมเติมเก่ียวกบั อาร์เรยใ์ น
บทท่ี 6
เช่นเดียวกบั ตวั เลขและตวั อกั ษรที่คุณสามารถกาหนดสตริงใหก้ บั ตวั แปร ตวั อยา่ งเช่น:
char fullName[26] = "Joe Programmer";
ม [26] หลงั จากที่ช่ือตวั แปรระบุชื่อเตม็ เป็นอาร์เรย์ ในกรณีน้ีอาร์เรยเ์ ป็นอาร์เรยต์ วั อกั ษร (ประเภทถ่าน) ท่ีเป็นสูงสุดของ 26 ตวั ยาว
พ้นื ที่ในสตริงจะถือว่าเป็นตวั ละครตวั หน่ึง (ASCII 32)
ในขณะท่ีช่ือเตม็ สามารถถือไดส้ ูงสุด 26 ตวั อกั ษร "โจโปรแกรมเมอร์" ไม่นาน 26 ตวั แลว้ ทาไมคอมพิวเตอร์ไมท่ ราบว่าสตริงหยดุ ?
อยา่ งไรกไ็ ม่ทราบจะพิมพอ์ อกมาทกุ อยา่ งที่ผ่านมาตวั อกั ษรตวั สุดทา้ ยในช่ือ? อกั ขระพเิ ศษท่ีเรียกวา่ เทอร์มินลั ถูกเพิม่ โดยอตั โนมตั ิโดย
รวบรวมไปยงั จดุ สิ้นสุดของสตริง เทอร์มิ null เป็นตวั แทนจาก \ 0 สตริงใน C จะถูกเก็บไวเ้ สมอกบั อกั ขระ null
terminating น้ี การปรากฏตวั ของอกั ขระ null หมายความวา่ อาร์เรยจ์ ะตอ้ งมีมือถืออยา่ งนอ้ ยหน่ึงเกินกวา่ จานวนของตวั ละครจะ
ถูกเก็บไว้ ตวั อยา่ งเช่นถา้ โปรแกรมของคุณยอมรับชื่อท่ีมีความยาว 25 ตวั อกั ษรตวั แปรของคุณจะตอ้ งประกาศเป็นอาร์เรยข์ อง 26 ตวั
เพอ่ื ใหค้ นสุดทา้ ยท่ีสามารถนามาใชส้ าหรับเทอร์มิ null Terminator
char fullName[26];
หน่วยความจา terminator.In ตวั แปรมีลกั ษณะเหมือนรูปที่ 4-1.
Figure 4-1: String variable in memory
Learn Programming with C Page 25
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ขอให้สงั เกตวา่ ในขณะท่ีช่ือ "โจโปรแกรมเมอร์" เทา่ น้นั ท่ีครองส่วนหน่ึงของอาร์เรยพ์ ้นื ที่อาร์เรยท์ ้งั หมดจะถูกจดั สรร วา่ "กล่อง" หลงั จากท่ี
เทอร์มิ null จะวา่ งเปล่า
Null terminator
เทอร์มินลั เป็นตวั ละครเดียว; อยา่ งไรก็ตามมนั ก็พมิ พเ์ ป็ นตวั ละครท้งั สอง: / ตามดว้ ย 0 (ศูนย)์ คอมไพเลอร์ C รู้วา่ เม่ือใดกต็ ามที่คุณพบ / 0
ถึงรักษามนั เป็นตวั เดียว
จริงหรือไม่จริง?True or False?
สุดทา้ ยชนิดขอ้ มลู หลกั ท่ีจะมองไปที่เรียกวา่ ตรรกะหรือบลู ีนชนิด ชนิดบลู ีนเท่าน้นั ท่ีสามารถเป็นหน่ึงในสองค่าจริงหรือเทจ็
คา่ ที่มกั จะเป็ นตวั แทนจาก 1 (จริง) หรือ 0 (เทจ็ ) ค่าเหล่าน้ีเป็นจริง carryovers จากวนั คอมพิวเตอร์ตน้ ที่สวทิ ชถ์ ูก
นามาใชเ้ พือ่ เปิ ดบิตหรือปิ ด สวิทช์ในตาแหน่ง "ON" เป็นท่ี 1 และสวิทชใ์ นตาแหน่ง "ปิ ด" มีคา่ เป็ น 0 ดงั น้นั คุณสามารถคิด
แบบบลู เป็นจริงหรือเทจ็ 1 หรือ 0 หรือปิ ด
บางภาษาเช่นภาษาปาสกาลและ Java มีพ้ืนเมืองชนิดขอ้ มูลแบบบูล ใน C อยา่ งไรเช่นประเภทไม่อยู่ ในความเป็ นจริงชนิด
ขอ้ มลู แบบบูลใน C ถูกกาหนดจริงในชุดของคา่ คงที่ A:
#define BOOLEAN int /* define BOOLEAN to be the
same data type as int */
#define TRUE 1
#define FALSE 0
ที่น่ีเราจะเห็นวา่ บูลีนถูกกาหนดใหเ้ ป็ นชนิดจานวนเตม็ int ดงั น้นั ทกุ ที่ท่ีคุณประกาศบลู ีนในรหสั ของคุณกเ็ ช่นเดียวกบั การประกาศเป็น
int ชนิดขอ้ มลู ยกตวั อยา่ งเช่นดมู ากกวา่ ตวั อยา่ งรหสั ตอ่ ไป.
BOOLEAN result;
int anotherResult;
result = FALSE;
anotherResult = result;
เพราะบลู ีนBOOLEANเป็นเช่นเดียวกบั int เราสามารถกาหนดใหค้ า่ เดียวกนั ท้งั สองมีค่าเป็น 0 ในทา้ ยที่สุด
ไม่ใช่ศูนย์รำคำ Non-Zero Value
ในทางเทคนิคใด ๆ คา่ ไมเ่ ป็นศนู ยเ์ ป็นเช่นเดียวกบั TRUE ไม่ก่ีภาษาท่ีทนั สมยั เช่น Java และ C ++ จดั การกบั ชนิดขอ้ มูล
แบบบูลอยา่ งถูกตอ้ ง
Learn Programming with C Page 26
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ขนำดของชนิดข้อมลู Size of Data Types
เราไดค้ รอบคลุมขอ้ มลู จานวนมากในช่วงสองบทเรียนท่ีผา่ นมา อยา่ งไรกต็ ามการทาความเขา้ ใจชนิดขอ้ มลู พ้นื ฐานเป็นส่ิงสาคญั ในการ
ออกแบบโปรแกรมท่ีดี จุดหน่ึงที่สาคญั สุดทา้ ยที่จะตอ้ งพิจารณาคือขนาดของชนิดขอ้ มลู หรือหน่วยความจาเทา่ ใดจะใช้
คุณอาจจะจาไดจ้ ากบทเรียนท่ีผา่ นมาวา่ ชนิดขอ้ มูลท่ีเป็นตวั เลขถกู จากดั ใหค้ ่าในช่วงท่ีเฉพาะเจาะจง การวดั ทเ่ี ลก็ ท่ีสุดของขอ้ มลู บนเคร่ือง
คอมพิวเตอร์ใด ๆ ทีเ่ ป็นบิต คุณจาเป็นตอ้ งมี 8 บิตท่ีจะทาใหห้ น่ึงไบตห์ น่วยตอ่ ไปเพ่มิ ข้ึนจากบติ ขนาดของประเภทขอ้ มลู การคานวณในไบต์
ชนิดขอ้ มลู แตล่ ะเหมาะกบั สมบูรณ์เป็นหน่ึงหรือมากกวา่ ไบตข์ องขอ้ มลู ตารางต่อไปน้ีแสดงใหเ้ ห็นวา่ แตล่ ะประเภทขอ้ มลู และขนาดของมนั
ไบตบ์ นตวั ประมวลผลที่แตกตา่ งกนั และระบบปฏิบตั กิ าร
Motorola IBM PC
68000 Motorola (DOS IBM PC
series PowerPC and (Windows
processor Windows 98/NT)
3.1)
Char 1 11 1
Int 4 2 or 4 2 4
Short 2 2 2 2
Long 4 4 4 4
ตารางที่ 4-2: ชนิดข้อมูลมีขนาดแตกต่างกนั ขึน้ อย่กู ับการประมวลผลและการดาเนินงานระบบ
ในการคานวณตน้ ขนาดของขอ้ มูลเป็ นส่ิงสาคญั อยา่ งยง่ิ หน่วยความจาถูก จากดั และมีราคาแพง ในตารางขา้ งตน้ จะทราบพเิ ศษ int ชนิดขอ้ มลู
ขนาดของ int ข้ึนอยกู่ บั ชนิดของตวั ประมวลผลและระบบปฏิบตั ิการท่ีใช้ ปัญหาขนาดน้ีทาให้เกิดปัญหาเมื่อ porting (หรือแปล)
โปรแกรมจากประเภทหน่ึงของเคร่ืองคอมพวิ เตอร์ที่พบบ่อยท่ีแตกตา่ งกนั อยา่ งใดอยา่ งหน่ึง และนี่กเ็ ป็นเหตผุ ลท่ใี ชโ้ ปรแกรมเมอร์จานวนมาก
ส้นั และระยะยาวแทน int เพราะขนาดของประเภทที่เป็นที่รู้จกั กนั และกาหนดโดยคณะกรรมการมาตรฐานท่ีรู้จกั ในฐานะสถาบนั มาตรฐาน
แห่งชาติของสหรัฐอเมริกา (ANSI)
Learn Programming with C Page 27
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่ี Lesson 5: คณติ ศำสตร์คอมพวิ เตอร์ Computer Arithmetic
คำอธิบำยบทเรียน Lesson Description: ในบทเรียนน้ีคุณจะไดเ้ รียนรู้เกี่ยวกบั ระบบคอมพวิ เตอร์จานวนการใช้
งานต่างๆ, วธิ ีการดาเนินการดาเนินการทางคณิตศาสตร์ที่ใชร้ ะบบเหล่าน้ีและวธิ ีการแปลงระหวา่ งระบบท่ีแตกต่างกนั บทเรียนน้ี
ยงั แนะนาหอ้ งปฏิบตั ิการการเขียนโปรแกรมคร้ังแรกของคุณ
ระบบนบั Counting Systems
คอมพิวเตอร์สนบั สนุนจานวนสี่ระบบหลกั ในการเขียนโปรแกรมเพือ่ ใช:้ ทศนิยมไบนารีเลขฐานสิบหกและแปด (เรียกวา่ ฐาน 8) ใน
ทา้ ยที่สุดอยา่ งไรก็ตามคอมพวิ เตอร์เห็นตวั เลขเป็นชุดของคนและศนู ยร์ ะบบที่เรียกวา่ ไบนารี
ท้งั น้ีข้ึนอยกู่ บั ความตอ้ งการของคุณคุณสามารถเขียนรหสั ที่ใชใ้ ดหรือท้งั หมดของระบบจานวนเหล่าน้ี ตวั อยา่ งเช่นเม่ือพยายามที่จะเขา้ ถึง
พ้นื ที่ที่ระบใุ นหน่วยความจาของคอมพิวเตอร์ก็ง่ายที่สุดที่จะใชร้ ะบบเลขฐานสิบหก ในทานองเดียวกนั เมื่อเขียนมากรหสั ทางคณิตศาสตร์ก็
ง่ายที่สุดในการใชร้ ะบบทศนิยม
ระบบเลขฐานแปดจะไม่ไดใ้ ชม้ าก ๆ มากข้ึนและทาใหจ้ ะไมไ่ ดร้ ับการกล่าวถึงในบทน้ี
ลองมาดูในแตล่ ะระบบตวั เลขในรายละเอียดเพิม่ เติม
ตวั เลขทศนิยม Decimal Numbers
แลว้ คุณควรจะคุน้ เคยกบั ระบบเลขฐานสิบ ตวั เลขทศนิยมหอ้ มลอ้ มจานวนท้งั หมดจากอินฟิ นิต้ีเชิงลบจะไม่มีท่ีสิ้นสุดในเชิงบวก ระบบ
เลขฐานสิบรวม 5, -26, 8.34, และอื่น ๆ นี่คือระบบหมายเลขทค่ี ุณใชบ้ ่อยที่สุดในการคานวณเม่ือเขียนโปรแกรม
ระบบเลขฐานสิบจะเรียกวา่ ฐาน 10 ระบบ ยกตวั อยา่ งเช่น 3421 มี 3 ในสถานที่พนั 4 ในสถานที่ร้อยละ 2 ในสถานที่นบั และ 1 ใน
สถานท่ีที่คน ซ่ึงหมายความว่าคุณสามารถคิด 3,421 เช่นน้ี
3 x 1000 + 4 x 100 + 2 x 10 + 1 x 1
โปรดจาไวว้ า่ ท่ี 1000 จานวนท่ีเป็นจริง 10 cubed 100 คือ 10 ยกกาลงั 10 เป็น 10 ถึงพลงั คร้ังแรกและโดยการประชุม 1
คือ 10 กบั พลงั งานเป็นศนู ย์ จากน้นั เราสามารถเขียนเช่นน้ี 3,421:
3 x 103 + 4 x 102 + 2 x 101 + 1 x 100
เราบอกวา่ 3421 จะถูกเขียนในฐาน 10 เน่ืองจากระบบของตวั เลขเขียนของเราจะข้ึนอยกู่ บั อานาจของสิบ.
เลขฐำนสอง Binary Numbers
ระบบเลขฐานสองเป็ นระบบระดบั ต่าสุดและในที่สุดส่ิงที่ทุกอยา่ งไดร้ ับการแปลง ระบบเลขฐานสองมกั จะเรียกวา่ เป็นฐาน 2
Learn Programming with C Page 28
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
หน่ึงไบตค์ ือชุดของ 8 บิตท่ีมีการประมวลผลเป็ นหน่วยเดียว คุณสามารถคิดเหล่าน้ี 8 บิตท่ีถูกเลข 7-0 จากซา้ ยไปขวา Bit 7 เรียกวา่ บิต
สูงสงั่ ซ้ือและบิต 0 เป็นบิตต่าในการสงั่ ซ้ือไบต์ จานวนบิตแต่ละสอดคลอ้ งกบั อานาจของ 2. ดงั น้นั 128 เป็น 2 ถึงอานาจท่ี 7 และอื่น ๆ
ตามท่ีแสดงในรูปที่ 5-1
Figure 5-1: byte value
คา่ ท่ีมากท่ีสุดท่ีแสดงโดยไบตจ์ ะมีบิตท้งั หมดกาหนดเป็น 1: 11111111 หรือ 255 จานวนท่ีน้อยท่ีสุดคือ 00000000 หรือเพยี ง
แค่ 0. ดงั น้นั ช่วงคา่ สาหรับไบตเ์ ป็น 0-255 รวม 256 ค่า . ถา้ เราอนุญาตให้มีตวั เลขติดลบช่วงเป็น -128 ถึง 127 คร้ังรวมเป็น 256
คา่
ลงนำมค่ำไบนำรี Signed Binary Values
เป็ นตวั แทนของตวั เลขลงนามจะถูกกาหนดโดยฮาร์ดแวร์ไมภ่ าษาการเขียนโปรแกรม ในไบนารีบิตสูงเพ่อื ใชเ้ ป็นบิตเคร่ืองหมายถา้ บิต
เป็น 1 จานวนเป็นลบ ดงั น้นั สาหรับคา่ 1 ไบตท์ ่ีผา่ นมา 7 บิตจานวนท่ีเกิดข้ึนจริง ดงั น้นั -1 10000001 และ 00000001 คือ
1. ช่วงรวมแลว้ เป็ น -127 ถึง 127
ปัญหาดว้ ยวิธีน้ีคือการท่ีคุณสามารถจบลงดว้ ย -0 และ 0 ซ่ึงเป็นความสบั สน วธิ ีท่ีใชก้ นั มากท่ีสุดเพื่อหลีกเล่ียงปัญหาน้ีจะเรียกว่า
สมบูรณ์ two's- ตวั เลขใน two's-สมบูรณ์จะแสดงในลกั ษณะเดียวกบั ที่กล่าวมาขา้ งตน้ อยา่ งไรก็ตามในการกาหนดมูลคา่ ของ
จานวนเชิงลบในส่วนประกอบ two's- คุณลบรูปแบบบิตจากรูปแบบ 9 บิต 100000000 (256 ใน binary) ผลที่ไดค้ ือ
ความสาคญั ของค่า
ลองดูตวั อยา่ ง 128 ในรูปแบบไบนารีคือ 10000000 เป็นคา่ เซ็นสญั ญามนั เป็ นลบ (7 บิตคือ 1) และมีค่าของ 100,000,000-
10,000,000 หรือ 10000000 ซ่ึงเป็น 128. ดงั น้นั จานวนเป็น --128 (มนั จะ --0 ถา้ two's-สมบรู ณ์ไมไ่ ดใ้ ช)้ ดงั น้นั
ตอนน้ีเรามีช่วงไบนารีของเราเตม็ ไปดว้ ย --128 ถึง 127 ตามท่ีระบไุ วข้ า้ งตน้ น่ีเป็นตวั อยา่ งอีกไมก่ ี่ ไดแ้ ก่ :
3 in two's-complement is the same as 3 in normal binary: 00000011
2 in two's-complement is the same as 2 in normal binary: 00000010
1 in two's-complement is the same as 1 in normal binary: 00000001
0 in binary is: 00000000
--1 in two's-complement is: 10000001
--2 in two's-complement is: 10000010
Learn Programming with C Page 29
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
--3 in two's-complement is: 10000011
เลขฐำนสิบหก Hexadecimal Numbers
เลขฐานสิบหก (เรียกง่าย ๆ วา่ Hex) เป็นฐานของระบบ 16 จานวน คุณสามารถคิดออกส่ิงน้ีหมายความวา่ ? ถา้ คุณบอกวา่ "เพราะมนั
ใชอ้ านาจของ 16" คุณถูกตอ้ ง นอกจากน้ีฐานสิบหกใช้ 16 หลกั ต้งั แต่ 0 ถึง 15 ไม่มีเลขหลกั เดียวเพอื่ แสดงตวั เลข 10 ถึง 15
ดงั น้นั ตวั อกั ษร A ถึง F ใชแ้ ทน ดงั น้นั A4D จานวนฐานสิบหก (เขียนเป็น 0xA4D ใน C) แปลงไป:
10 x 162 + 4 x 161 + 13 x 16= = 2637 in base 10
ใน C คุณสามารถใชต้ วั อกั ษรตวั พิมพเ์ ลก็ บนหรือคา่ ฐานสิบหก ดงั น้นั คุณสามารถเขียน 2637 เป็น 0xa4d
แปลงระหว่ำงระบบ Converting Between Systems
แปลงจากระบบจานวนหน่ึงไปยงั อีกเป็นงานที่ค่อนขา้ งง่าย ลองดูท่ีแปลงจากตวั เลขทศนิยมกบั แตล่ ะระบบหมายเลขแรก จากน้นั เราจะหารือ
ถึงวธิ ีการแปลงระหวา่ งไบนารีและเลขฐานสิบหก
ทศนิยมให้เป็ นไบนำรี Decimal to Binary
แปลงตวั เลขทศนิยมไบนารีเป็ นเร่ืองงา่ ยของการแบ่งอยา่ งต่อเนื่อง ลองดูท่ีข้นั ตอนแรก.
Set N to the number to convert
While N > 0
Divide N by 2 yielding Quotient and Remainder
Output Remainder
Set N to Quotient
Reverse the order of outputs
ตอนน้ีเรามาดูตวั อยา่ งการปฏิบตั ิ รูปท่ี 5-2 แสดงใหเ้ ห็นถึงสิ่งท่ีเกิดข้ึนเมื่อเราใชข้ ้นั ตอนวธิ ีน้ีไปยงั หมายเลขเช่น 13
Figure 5-2: Applying binary conversion algorithm
Learn Programming with C Page 30
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ทศนิยมให้เป็ นเลขฐำนสิบหก Decimal to Hexadecimal
การแปลงตวั เลขทศนิยมเขา้ ไปในฐานสิบหกคุณสามารถใชข้ ้นั ตอนวธิ ีการเช่นเดียวกบั การแปลงไบนารี แตแ่ ทนที่จะหารดว้ ย 2 คุณหารดว้ ย
16 จากน้นั คุณแทนแตล่ ะเอาทพ์ ทุ สาหรับค่า hex ที่เหมาะสม ลองใชต้ วั อยา่ งก่อนหนา้ น้ีของเราและแปลง 2637 แม่มด
Figure 5-3: Converting decimal to hex
ไบนำรีเลขฐำนสิบหก Binary to Hexadecimal
หน่ึงของการแปลงท่ีง่ายที่สุดคือการไปจากไบนารีแม่มดและกลบั มาอีกคร้ัง การทางานในไบนารีเป็นเร่ืองยากเป็นเรื่องง่ายที่จะผดิ คนและ
ศนู ย์ มนั งา่ ยมากท่ีจะทางานร่วมกบั ฐานสิบหกเทียบเทา่ ซ่ึงแปลไบนารี (และกลบั มาอีกคร้ัง) ไดง้ ่ายเม่ือคุณจาเป็นตอ้ งตรวจสอบบิตท่ี
เฉพาะเจาะจง
ชุดของตวั เลขสี่หลกั ไบนารีแตล่ ะสอดคลอ้ งกบั ฐานสิบหกหลกั เดียว ชุดที่ใหญท่ ี่สุดของตวั เลขสี่หลกั ไบนารี 1111 หรือ 15 ในทศนิยม
คือ F ในฐานสิบหก มีสองตวั เลขฐานสิบหกในไบต์ (8 บิต) มีดงั น้ี: หลกั แรกหมายถึงบน 4 บิตหลกั สุดทา้ ยหมายถึงต่ากวา่ 4 บิต
ตารางตอ่ ไปน้ีแสดงให้เห็นถึงตวั เลขทศนิยมถึง 15 และรายการเทียบเท่าไบนารีและเลขฐานสิบหกของพวกเขา
Decimal Binary Hexadecimal
Value Value Value
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
Learn Programming with C Page 31
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
9 1001 9
10 1010 B
11 1011
12 1100 E
13 1101
14 1110
15 1111
ตำรำงที่ 5-1: หมำยเลขสิบถึง 15 และรำยกำรเทยี บเท่ำไบนำรีและเลขฐำนสิบหกของพวกเขำ
โดยใช้หมำยเลขระบบ Using Number Systems
โดยไมค่ านึงถึงระบบหมายเลขท่ีคุณเลือกท่ีจะใชส้ าหรับความตอ้ งการเขียนโปรแกรมของคุณตวั เลขท้งั หมดจะถูกเกบ็ ไวใ้ นรูปแบบไบ
นารี ดงั น้นั ท่ีใหญท่ ี่สุดมลู ค่า 16 บิตที่สามารถแสดงเป็น:
0xFFFF = 1111111111111111 = 65,535
โปรดทราบวา่ น้ีเป็นจานวนท่ีไม่ไดล้ งชื่อ
กบั สิ่งเหล่าน้ีในใจขอ้ ความต่อไปน้ีถกู ตอ้ งตามกฎหมายรหสั C:
short base10 = 255;
short base16 = 0xff;
รหสั ขา้ งตน้ เร่ิมตน้ แตล่ ะตวั แปรคา่ เป็ น 255 แน่นอนถา้ คุณจาเป็นตอ้ งมีจานวนมากที่คุณจะใชช้ นิดขอ้ มูลที่สอดคลอ้ งกนั (ยาว
ตวั อยา่ งเช่น) เพื่อให้ห้องเพยี งพอที่จะเกบ็ ขอ้ มลู .
ทำไมจงึ เรียนไบนำรี? Why Learn Binary?
โปรแกรมเมอร์ C ไม่ไดใ้ ชต้ วั แปรไบนารี ในความเป็นจริง, C มีมาตรฐานสาหรับการเขียนตวั แปรไบนารีไมเ่ ป็ นมนั ไม่สาหรับฐานสิบหก
หรือแปด การดาเนินการท้งั หมดจะทาในทศนิยมฐานแปดหรือเลขฐานสิบหกเป็นตวั แทนแทน เรียนรู้ไบนารีแลว้ ทาไม? Binary และการ
แปลงระหวา่ งฐานสิบหกและไบนารีกลายเป็นสิ่งสาคญั สาหรับการดาเนินงานข้นั สูงมากใน C ที่รู้จกั กนั เป็นบิตเล่นซอ บิตเล่นซออยู่
นอกเหนือขอบเขตของหลกั สูตรน้ี
คณิตศำสตร์และกำรแก้ปัญหำ Mathematics and Problem Solving
โดยใชค้ ณิตศาสตร์ในการเขียนโปรแกรมเป็นเช่นเดียวกบั การใชค้ ณิตศาสตร์ตามปกติ คุณเพยี งแคจ่ ะตอ้ งตระหนกั ถึงของชนิดขอ้ มลู ที่
จาเป็ นสาหรับการดาเนินงาน ในขณะท่ีคุณสามารถกาหนดชนิดขอ้ มลู ขนาดเลก็ ที่จะเป็นหน่ึงที่มีขนาดใหญแ่ ละมีมนั เก็บคา่ ของคุณไม่
สามารถทายอ้ นกลบั ตวั อยา่ งเช่นสมมติวา่ คุณอยากจะเขียนสมการท่ีจะ Cube คา่ ใด ๆ ไดร้ ับ คุณสามารถเขียนอะไรเช่นน้ี:
short input, result /* this is shorthand for saying
that both variables are of type short */
Learn Programming with C Page 32
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
scanf("input a number %d", input); /* get a number */
result = input * input * input; /* do the math */
printf("The cube of %d is %d\n", input, result); /*
print result */
ตวั อยา่ งรหสั น้ีจะทางานสาหรับตวั เลขที่ตกอยใู่ นช่วงของชนิดขอ้ มูลส้นั อยา่ งไรก็ตามหากผใู้ ชป้ ัจจยั การผลิตค่าขนาดใหญผ่ ลท่ีอาจจะไม่อยู่
ในช่วงที่หมายเลขเดียวกนั ตวั อยา่ งเช่นหากผใู้ ชป้ ัจจยั การผลิต 255 เป็นจานวนเร่ิมตน้ คาตอบคือ 16582375 ซ่ึงอยนู่ อกช่วงสาหรับ
สองไบตช์ นิดขอ้ มลู เช่นระยะส้นั แตโ่ ปรแกรมที่ควรจะเป็ น
short input;
long result;
scanf("input a number %d", input); /* get a number */
result = input * input * input; /* do the math */
printf("The cube of %d is %ld\n", input, result); /*
long result */
คุณสามารถเปลี่ยนโปรแกรมน้ีให้ดียงิ่ ข้ึนเพ่อื ท่ีจะยอมรับคา่ ยาว (4 bytes) แทนคนส้นั
คุณควรเรียนรู้เก่ียวกบั การดาเนินการทางคณิตศาสตร์ไดร้ ับอนุญาตตามภาษาของคุณเลือก หาวิธีท่ีจะใชป้ ระกอบการต่างๆทาง
คณิตศาสตร์ (+, -, *, / (หาร)) และในสิ่งท่ีพวกเขาสง่ั ซ้ือไดร้ ับการจดั การ แลว้ พบวา่ ส่ิงท่ีผปู้ ระกอบการพเิ ศษและฟังกช์ นั่ ท่ีมีให้
เช่น% (โมดูลสั ) sqrt (ราก) และอ่ืน ๆ เรียนรู้วธิ ีการใชต้ วั อกั ษรการจดั รูปแบบตวั อยา่ งเช่นเพ่อื ท่ีคุณจะไดร้ ับสิ่งสองหลกั หลงั ทศนิยม
ตาแหน่งสาหรับการคานวณเงิน ท้งั หมดเหล่าน้ีเป็นสิ่งสาคญั ท่ีจะรู้และการเรียนรู้.
Learn Programming with C Page 33
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่Lี esson 6: กำรจดั กำรข้อมูลทซ่ี ับซ้อน Handling Complex Data
คำอธิบำยบทเรียน Lesson Description: บทเรียนน้ีจะสอนวิธีการใชช้ นิดขอ้ มลู พ้นื เมืองเพอ่ื สร้างประเภทที่
กาหนดเองของคุณเองและจดั การกบั ขอ้ มลู ท่ีซบั ซอ้ นมากข้ึน.
อำร์เรย์ Arrays
เราไดเ้ ห็นแลว้ ตวั อยา่ งของอาร์เรยใ์ นบทท่ี 4 เป็นชนิดขอ้ มลู สตริง คุณสามารถสร้างอาร์เรยข์ องชนิดขอ้ มลู ใด ๆ รวมท้งั ชนิดของขอ้ มลู ที่
กาหนดเองใด ๆ ที่คุณเลือก น้ีจะทาให้อาร์เรยห์ น่ึงในวิธีการที่มีความยดื หยนุ่ มากที่สุดในการจดั การกบั ขอ้ มลู จานวนมาก มีสองประเภท
หลกั ของอาร์เรยเ์ ชิงเสน้ และมีตาราง.
อำร์เรย์เชิงเส้น Linear Arrays
อาร์เรยเ์ ชิงเส้นประกอบดว้ ยชนิดขอ้ มูลท่ีเขียนในแฟชน่ั ตามลาดบั สตริงเป็นตวั อยา่ งท่ีดีของแถวเส้น ลาดบั ของตวั ละครอยา่ งตอ่ เนื่อง "ตาม
แนวเสน้ " และหยดุ ในตอนทา้ ย คุณสามารถคิดของประเภทของอาร์เรยน์ ้ีมีอีกมิติหน่ึง
อาร์เรยเ์ ชิงเสน้ มีการประกาศดงั ต่อไปน้ี:
dataType variableName[number];
dataType สามารถใด ๆ ของชนิดขอ้ มูลที่เราไดม้ องท่ีข้ึนมาถึงจดุ น้ีหรือขอ้ มลู ใด ๆ ทก่ี าหนดเองพิมพท์ ี่คุณสร้าง (เพ่ิมเติมในภายหลงั
น้ี) ช่ือของจานวนตวั แปรและเป็ นตวั แทนขนาดของอาร์เรยเ์ ป็น variableName ดงั น้นั ถา้ คุณจาเป็นอาร์เรยจ์ ะถือ 100 ตวั เลขคุณ
จะประกาศดงั ต่อไปน้ี:
int numArray[100];
100 เรียกวา่ หอ้ ย ใน C อาร์เรยเ์ ป็น 0-based ซ่ึงหมายความวา่ อาร์เรยจ์ ริงเร่ิมท่ีตาแหน่ง 0 แทนตาแหน่ง 1. ในตวั อยา่ งขา้ งตน้ ของเราเรา
จะมีช่วงของ numArray a [0] เพื่อ numArrray [99]
ตำรำงอำร์เรย์ Tabular Arrays
อาร์เรยต์ ารางมีมากกวา่ หน่ึงห้อย แตย่ งั คงสามารถถือเพียงหน่ึงชนิดของขอ้ มลู อาร์เรยต์ ารางจะเรียกวา่ มากท่ีสุดอาร์เรยห์ ลายมิติ ท่ีง่าย
ที่สุดท่ีจะเห็นภาพเป็นอาร์เรยส์ องมิติซ่ึงมีลกั ษณะเหมือนตาราง (จึงช่ือ) พจิ ารณาตวั อยา่ งต่อไป:
Boolean hotDays[7][52];
ในตวั อยา่ งน้ีการประชุมเป็ นชื่อของอาร์เรยท์ ่ีช่วยให้คุณติดตามวา่ วนั ท่ีอากาศร้อนมากมายที่คุณมีในปี ดว้ ยการจดั เกบ็ "true" หรือ "เทจ็ "
ในสถานท่ีท่ีเหมาะสม 7 เป็นจานวนแถว (วนั ) และ 52 คือจานวนของคอลมั น์ (สปั ดาห์) เดอะแนวคิดอาร์เรยม์ ีลกั ษณะเช่นน้ี:
hot ays hot ays hot ays hot ays
[0][0] [0][1] [0][2] [0][3]
Learn Programming with C Page 34
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
hot ays hot ays hot ays hot ays
[1][0] [1][1] [1][2] [1][3]
hot ays hot ays hot ays hot ays
[2][0] [2][1] [2][2] [2][3]
เป็ นตน้ โดยการเปล่ียนห้อยแรกท่ีคุณยา้ ยจากวนั ตอ่ วนั เปลี่ยนห้อยสองยา้ ยคณุ จากสปั ดาห์ ดงั น้นั สาหรับอณุ หภูมิเฉล่ียรายวนั ของคุณเป็น
วนั ท่ีสองของสปั ดาห์ที่ 8 ของปี ท่ีคุณจะดาเนินการตอ่ ไปที่ไดร้ ับมอบหมาย:
meetings[1][7] = true;
โปรดจาไวว้ า่ อาร์เรยเ์ ป็น 0 ตามใน C ดงั น้นั วนั ที่สองคือ 1 แทน 2 และ 8 สปั ดาห์เป็น 7 แทน 8
ขนำดอน่ื ๆ More Dimensions
คุณยงั ไม่ได้ จากดั อยทู่ ่ีอาร์เรยส์ องมิติ คุณสามารถมีมิติมากท่ีสุดเท่าที่คุณตอ้ งการ คุณจะถูก จากดั ดว้ ยพ้นื ที่หน่วยความจา แต่ (จาขนาด
ของชนิดขอ้ มลู ของคุณ) เพอื่ สร้างอาร์เรยส์ ามมิติตวั อยา่ งขา้ งตน้ สามารถเปล่ียนแปลงไดต้ อ่ ไปรวมถึงเดือนของปี ดงั ต่อไปน้ี:
Boolean hotDays [7][5][12];
คุณสามารถคิดอาร์เรยเ์ จา้ มิติที่มีความกวา้ งความสูงและความลึก ขณะที่มนั เป็นเรื่องยากมากท่ีจะเห็นภาพอาร์เรยท์ ่ีมีมากกวา่ 3 มิติคุณ
แน่นอนสามารถมีหลายมิติเทา่ ที่คุณตอ้ งการ
คุณอาจจะไดส้ งั เกตเห็นวา่ ตวั อยา่ งขา้ งตน้ ไมไ่ ดเ้ ป็นสถานการณ์โลกแห่งความจริงเป็ นวนั และสปั ดาห์ในเดือนแตกต่างกนั ตามเดือนและปี
อาร์เรยท์ ่ีแสดงที่นี่มีสถานท่ีมากเกินไปในน้นั แตค่ ุณยงั สามารถใชน้ ้ีเป็ น array ฐานแลว้ เขียนโคด้ เพ่อื จดั การกบั สถานการณ์ท่ีเฉพาะเจาะจง
นอกจากน้ีคุณอาจเปลี่ยนชนิดของขอ้ มูลท่ีจะเป็นชนิดตวั เลขเช่นในระยะส้นั และเก็บอณุ หภมู ิเฉล่ียท่ีเกิดข้ึนจริง จากน้นั คุณสามารถเก็บคา่ ที่ไม่
สมควรอยใู่ นตาแหน่งหน่ึงอาร์เรย์ (-999 เป็นตน้ ) ที่จะส่งสญั ญาณรหสั ของคุณที่จะเปล่ียนเดือน
ข้อจำกดั อำร์เรย์ Array Limitations
อาร์เรยจ์ ะมีขอ้ จากดั ในการใชง้ านของพวกเขา เม่ือคุณประกาศอาร์เรยโ์ ปรแกรมจดั สรรพ้นื ที่วา่ เพยี งพอสาหรับจานวนของรายการ
ประเภทประกาศ หากคุณตอ้ งการในการจดั เก็บขอ้ มูลไดม้ ากข้ึนกวา่ ที่คุณเริ่มประกาศในอาร์เรยข์ องคุณคุณตอ้ งเปลี่ยนโปรแกรมตาม
ความเหมาะสม คุณไม่สามารถเพยี งแค่เพิ่มสถานที่อ่ืนในอาร์เรยใ์ นขณะท่ีโปรแกรมกาลงั ทางาน
ดงั ที่ไดก้ ล่าวไวก้ ่อนหนา้ น้ีคุณยงั สามารถจดั เกบ็ เพียงหน่ึงในประเภทของขอ้ มลู ในอาร์เรย์ คุณไมส่ ามารถสร้างอาร์เรยท์ ่ีสามารถจดั เก็บ
ท้งั ตวั เลขและตวั อกั ษรเช่นอยา่ งนอ้ ยไมไ่ ดโ้ ดยไมต่ อ้ งสร้างชนิดขอ้ มูลท่ีกาหนดเอง (เพิ่มเติมวา่ ดา้ นล่าง.)
อาร์เรยย์ งั ใชเ้ วลาถึงจานวนมากของหน่วยความจา เม่ือคุณประกาศอาร์เรยจ์ ะถือ 100 คา่ int เช่นหน่วยความจาท้งั หมดท่ีจาเป็นในการ
เก็บคา่ int เหล่าน้นั จะถูกจดั สรรทนั ทีในความทรงจาถึงแมว้ า่ คุณไม่ไดใ้ ชพ้ วกเขายงั นนั่ เทา่ กบั 100 *
Learn Programming with C Page 35
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
2bytes = 200 ไบตข์ องหน่วยความจา ไมม่ ากที่คุณพดู แต่สิ่งที่เกี่ยวกบั ว่าคุณกาลงั ใชช้ นิดขอ้ มลู ขนาดใหญเ่ ช่นคู่หรือลอย? หรือขอ้ มูล
ท่ีกาหนดเองพมิ พท์ ่ีคุณสร้างหรือไม่? ทนั ใดน้นั หน่วยความจากลายเป็ นปัญหาโดยเฉพาะอยา่ งยงิ่ ถา้ คุณไม่ไดจ้ ริงๆตอ้ งท้งั หมดของมนั คุณ
เรียนรู้เพิม่ เติมเกี่ยวกบั การจดั การหน่วยความจาในภายหลงั ในบทเรียนน้ี
เร่ิมต้น array Array Initialization
เช่นเดียวกบั ตวั แปรอื่น ๆ ที่คุณสามารถเริ่มตน้ อาร์เรยเ์ ป็ นค่าท่ีเฉพาะเจาะจงในการสร้างแทนการเติมอาร์เรยท์ ี่มีค่าในภายหลงั ในการเร่ิมตน้
อาร์เรยเ์ ม่ือมนั ประกาศคุณใชว้ งเลบ็ ({และ}) ท่ีมีค่าสาหรับแตล่ ะตาแหน่งอาร์เรยค์ น่ั ดว้ ยเครื่องหมายจุลภาค
น้ีจะคลา้ ยกบั การต้งั ค่าสญั กรณ์ในวชิ าคณิตศาสตร์ ตวั อยา่ งเช่น:
short anArray[3] = {12, 5, 150};
เป็ นเช่นเดียวกบั
Short anArray[3];
anArray[0] = 12;
anArray[1] = 5;
anArray[2] = 150;
เร่ิมตน้ อาร์เรยเ์ ช่นน้ีช่วยใหก้ ารจดชวเลขเลก็ ๆ นอ้ ย ๆ ในรหสั และเป็นที่ดีสาหรับการต้งั ค่าขอ้ มูลตารางท่ีจะถูกอา้ งถึงในส่วน
ของโปรแกรมของคุณอีก
เร่ิมตน้ อาร์เรยจ์ ะไม่ จากดั อาร์เรยเ์ ดียวมิติ ในการเร่ิมตน้ อาร์เรยม์ ิติหลายคุณทางานเดียวกนั แตม่ ีชุดเพิม่ เติมยงั คน่ั ดว้ ย
เครื่องหมายจลุ ภาค พจิ ารณาตวั อยา่ งต่อไป:
short junk[2][4] = {
{2, 4, 6, 7},
{3, 8, 10, 6}
};
นี่ขยะเป็นอาร์เรยป์ ระกอบดว้ ยสองแถวส่ีค่าแตล่ ะ คุณกาหนด "ต้งั " สาหรับแตล่ ะแถวแลว้ ใส่ชุดในการจดั ฟันท่ีเป็ นจุดเร่ิมตน้ และสิ้นสุด
ของขอ้ มลู ขอใหส้ งั เกตวา่ ชุดที่ผา่ นมาไมไ่ ดใ้ ส่เคร่ืองหมายจลุ ภาค (,) หลงั จากท่ีมนั .
โครงสร้ำง Structures
หน่ึงในวิธีท่ีงา่ ยที่สุดในการสร้างชนิดขอ้ มูลท่ีกาหนดเองโดยเฉพาะอยา่ งยง่ิ ขอ้ มูลท่ีซบั ซอ้ นมากข้นึ คือการใชโ้ ครงสร้าง (เรียกวา่
ระเบยี นในปาสคาล) ไมไ่ ดเ้ ขียนโปรแกรมภาษาทกุ คนมีความสามารถในการสร้างโครงสร้าง แต่ส่วนใหญค่ นท่ีทนั สมยั ทา
ใส่เพยี งแคโ่ ครงสร้างประกอบดว้ ยหน่ึงหรือมากกวา่ องคป์ ระกอบของขอ้ มลู (ตวั แปร) ห่อในภาชนะตวั แปรเดียวสาหรับการ
เขา้ ถึงงา่ ยและการดึง องคป์ ระกอบของขอ้ มูลในแตล่ ะโครงสร้างอาจจะเป็นชนิดขอ้ มลู ที่แตกต่างกนั คุณสามารถคิดวา่ เคา้ เป็นมินิ
ฐานขอ้ มลู ลองดูที่ตวั อยา่ งในทางปฏิบตั ิ
หลาย บริษทั ใหช้ ิ้นส่วนตา่ งๆของขอ้ มลู เก่ียวกบั ลกู คา้ ของพวกเขาชื่ออายรุ ายไดเ้ พศ ฯลฯ ท้งั หมดเหล่าน้ีองคป์ ระกอบขอ้ มลู
นามารวมกนั ในรูปแบบขอ้ มลู เพื่อสร้างโครงสร้างน้ีโปรแกรมใหค้ ุณใช้ struct คาหลกั ทีใ่ ชโ้ ดยความหมายของโครงสร้างท่ี
Learn Programming with C Page 36
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
เช่นน้ี:
struct customers
{
char name[40];
short age;
float income;
char gender;
Boolean hasComputer;
}
ลูกคา้ เป็ นชื่อของชนิดขอ้ มลู โปรดทราบวา่ มนั ไม่ไดเ้ ป็นช่ือของตวั แปร; เราจะดูวา่ ในคร้ังที่สอง วงเล็บ {} และกาหนดขอบเขตของ
โครงสร้างท่ี - ทกุ อยา่ งภายในการจดั ฟันท่ีมีอยใู่ นการกาหนดโครงสร้าง ตวั แปรท้งั หมดท่ีกาหนดไวภ้ ายในโครงสร้างท่ีเรียกวา่ เขตขอ้ มลู ใน
ตวั อยา่ งของเราทกุ สาขาเป็นชนิดขอ้ มลู ท่ีแตกต่างกนั
ตอนน้ีที่เราไดก้ าหนดโครงสร้างท่ีอยขู่ องเราเราสามารถสร้างตวั แปรกบั มนั :
struct customers customerBase;
ตอนน้ี customerBase ตวั แปรถกู กาหนดให้เป็นโครงสร้างลกู คา้ (ชนิดที่กาหนดเอง) ตอนน้ีเราสามารถกรอกแต่ละฟิลด์ (กาหนด
แตล่ ะฟิลดค์ า่ ) กบั ขอ้ มลู ทเ่ี หมาะสม คณุ สามารถกาหนดค่าไปยงั ไฟลเ์ ป็นคร้ังแรกโดยการต้งั ช่ือตวั แปร (customerBase) และ
จากน้นั ใชช้ ่ือสนามนาโดยจุด (.) ระยะเวลาที่จะบอกคอมไพเลอร์ที่คุณมกี ารเขา้ ถึงขอ้ มลู ในโครงสร้างเม่ือเทียบกบั โครงสร้างของตวั เอง
ตวั อยา่ งเช่นถา้ สถานะท่ีสาคญั ของเราคือ:
Name: Joe Programmer
Age: 28
Income: $3,000,000
gender: M
Owns Computer: True
เราทาต่อไปน้ี:
customerBase.name = "Joe Programmer";
customerBase.age = 28;
customerBase.income = 3000000;
customerBase.gender = "M"
customerBase.hasComputer = TRUE;
Learn Programming with C Page 37
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
สมมติวา่ คุณกาหนดโครงสร้างท่ีมีอยขู่ องผคู้ น โครงสร้างมีฟิ ลดส์ าหรับชื่อที่อยเู่ มืองรหสั ไปรษณียแ์ ละประเทศ มนั แทบจะดูเหมือนวา่
เหมาะสมในการจดั เก็บเพียงหน่ึงอยู่ คนส่วนใหญต่ อ้ งการที่จะเก็บที่อยหู่ ลายเพื่อน, ครอบครัว, เพื่อนร่วมงานและอ่ืน ๆ ดีที่คุณสามารถ
ประกาศตวั แปรใหมส่ าหรับแต่ละบุคคลเช่นน้ี:
struct address myAddress;
struct address bill;
struct address work;
แตเ่ ป็ นวิธีท่ีมีประสิทธิภาพมากข้ึนจะใส่อยทู่ ุกคนในที่เดียว: อาร์เรยเ์ ช่น ดงั น้นั คุณก็จะทาต่อไปน้ีในการจดั เกบ็ ท่ีอยขู่ องสิบคน:
struct address everybodyIKnow[10];
ในการเขา้ ถึงเพ่ือนจานวน 4 คุณใส่ห้อยอาร์เรยห์ ลงั ช่ืออาร์เรยไ์ ม่ไดห้ ลงั จากขอ้ มูลโครงสร้าง.
everybodyIKnow[3].name
ใช้ typedef Using type def
ในขณะท่ีเราไดส้ ร้างข้ึนน้ีชนิดขอ้ มลู ใหมใ่ นการจดั การท่ีอยขู่ องเราสร้างตวั แปรท่ีใชช้ นิดขอ้ มลู ใหม่เป็นที่ยงุ่ ยากเล็ก ๆ นอ้ ย ๆ คุณตอ้ ง
ประกาศตวั แปรดงั น้ี:
struct address someVar;
ดูเหมือนวา่ มนั จะง่ายถา้ คุณสามารถหลีกเล่ียงการพิมพพ์ ิเศษโดยใชส้ ่ิงท่ีตอ้ งการ:
ADDRESS addressList;
และแน่นอนวา่ มนั จะ ใส่ typedef ฟังกช์ นั่ ของ typedef C ช่วยใหค้ ณุ สามารถต้งั ช่ือชนิดขอ้ มูลของคุณ โดยใชท้ ี่อยเู่ ป็นตวั อยา่ งท่ี
คุณตอ้ งการทาต่อไปน้ี:
typedef struct address
{
char name[40];
char street[100];
char apt[5];
char city[25];
char state[5];
char zip[9];
char country[3];
} address;
Learn Programming with C Page 38
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
น้ีกาหนดที่อยทู่ ี่จะเป็ นเช่นเดียวกบั "อยู่ struct." การใชต้ วั พมิ พเ์ ลก็ ท้งั หมดโดยพลการ คุณสามารถไดอ้ ยา่ งง่ายดายเพยี งใชต้ วั พมิ พ์
ใหญห่ รือการรวมกนั ของตวั พมิ พใ์ หญ่และตวั พมิ พเ์ ล็ก โปรแกรมเมอร์ส่วนใหญม่ กั จะต้งั ชื่อชนิดเดียวกบั struct (รวมถึงกรณี)
ฟังกช์ นั่ typedef สามารถใชส้ าหรับการมากข้ึนกวา่ ท่ีอธิบายไวท้ ี่น่ี แตท่ ี่เหลือการออกกาลงั กายสาหรับคุณ.
ติดกบั วธิ ีการหน่ึง Stick With One Method
เมื่อคุณเลือกวิธีการในการกาหนดประเภทขอ้ มูลของคุณคุณควรติดกบั มนั มนั เป็นความคิดที่ดีที่จะมองวา่ คนอ่ืน ๆ จดั การกบั
สถานการณ์ที่เหมือนกนั และทาตามตวั อยา่ งของพวกเขา แลว้ มนั เป็นเร่ืองง่ายที่จะเขา้ ใจรหสั ของคนอื่น ๆ เม่ือหรือถา้ คุณใชร้ ูปแบบการ
เขียนโปรแกรมเช่นเดียวกบั ท่ีพวกเขาทา.
ตวั แปรชี้ Pointer Variables
อาจเป็ นหน่ึงในคุณลกั ษณะที่มปี ระสิทธิภาพมากท่ีสุดของการที่ทนั สมยั ที่สุดภาษาโปรแกรมคือการใชต้ วั ช้ี ช้ีเป็นคุณลกั ษณะท่ีมี
ประสิทธิภาพมากและช่วยให้คุณสามารถดาเนินการใชร้ หสั นอ้ ยกวา่ มิฉะน้นั จะตอ้ ง ที่ไมเ่ พยี ง แตช่ ้ีให้คุณสามารถสร้างประเภทท่ีกาหนด
เองใหม่บางส่วนที่คุณจะไดเ้ ห็นในไมช่ า้
ใส่เพียงแค่ช้ี "จุด" เพื่อขอ้ มลู โดยเฉพาะสถานท่ีท่ีมีตวั ช้ีหน่วยความจาทเ่ี ก็บท่อี ยู่ เม่ือใดกต็ ามท่ีคุณเห็นคาวา่ "ตวั ช้ี" ใจของคุณทนั ทคี วรพดู
วา่ "การจดั เกบ็ ที่อยขู่ อง." ตวั อยา่ งเช่นถา้ คุณเห็น:
aPtr is a long pointer."
ใจของคุณบอกวา่ อา้ ว! อะไรคือความหมายจริงๆกค็ ือวา่ . . .
aPtr stores the address of a long."
สิ่งหน่ึงที่ตอ้ งจาไวค้ ือตวั ช้ีไม่ไดเ้ ป็ นชนิดขอ้ มูล คุณสามารถเรียกค่าของตวั แปรช้ีถือในลกั ษณะท่ีคลา้ ยคลึงกบั การดึงขอ้ มูลจากชนิดขอ้ มลู
อื่น ๆ แต่ตวั ช้ีตวั เองไม่ไดเ้ ป็ นชนิดขอ้ มลู ความแตกตา่ งท่ีสาคญั ระหวา่ งชนิดของขอ้ มลู และตวั ช้ีมีวตั ถุประสงคข์ องพวกเขา วตั ถุประสงค์
ของตวั แปรท่ีมีชนิดขอ้ มูลถ่านคือการเกบ็ ตวั อกั ษร (หรือสตริง) วตั ถุประสงคข์ องการช้ีตวั ละครตวั น้ีคือการเกบ็ ที่อยขู่ องค่าตวั ช้ี
เช่นเดียวกบั ใหช้ ้ีไปที่ชนิดขอ้ มลู
รูปแบบพ้ืนฐานสาหรับการประกาศตวั ช้ีคือการวางเคร่ืองหมายดอกจนั (*) หนา้ ชื่อตวั แปร ตวั อยา่ งเช่น:
char(%TAB%)*charPtr;
int(%TAB%)*intPtr;
เม่ือกาหนดค่าใหก้ บั ตวั ช้ีกฎทองก็คือคุณจะกาหนดที่อยู่ อยา่ งน้ีตรงกบั ความจริงท่ีวา่ ท่ีอยชู่ ้ีการจดั เกบ็ เพื่อกาหนดที่อยกู่ บั ตวั แปรตวั ช้ี
คุณใชผ้ ปู้ ระกอบการที่ไดร้ ับมอบหมาย (=) ดว้ ยและตวั อกั ษร
Learn Programming with C Page 39
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ในบริบทของตวั ช้ีท่ีตวั อกั ษรและหมายความว่า "ที่อยขู่ อง." หาก "ฟ"ู เป็นช่ือของตวั แปรแลว้ และฟเู ป็นท่ีอยขู่ องตวั แปร เม่ือคุณกาหนดตวั
แปรช้ีคุณเป็นจริงการกาหนดท่ีอยใู่ นความทรงจาท่ีตวั แปรที่จะอยู่
พิจารณาตวั อยา่ งรหสั ตอ่ ไปน้ี:
int myInt;
int *intPtr;
/* assign the value of 10 to myInt */
myInt = 10;
/* Addign myInt's address to intPtr */
intPtr = &myInt;
ไปดูท่ี IntPtr เพื่อหาคา่ ของคุณ "dereference" ตวั ช้ี คุณสามารถทาเช่นน้ีเพ่ือกาหนดตวั แปรอื่นค่าเดียวกนั ที่จุด IntPtr ไปเช่นน้ี:
int yourInt;
/*assign the value of myInt to yourInt by
dereferencing intPtr */
yourInt = *intPtr;
/*Print the results */
printf("myInt is %d. \n", myInt);
printf("yourInt is %d.\n", yourInt);
เม่ือใดกต็ ามที่คุณเห็น * ใส่ในรหสั ควรอ่านมนั เป็น "int ช้ีไปที่ตามที่อยทู่ ่ีมีอยใู่ น IntPtr."
กำรใช้ตวั ชี้ Pointer Uses
ในขณะท่ีตวั ช้ีดูเยน็ คุณอาจจะสงสยั วา่ "ทาไมตอ้ งใชพ้ วกเขา? คือวตั ถุประสงคข์ องพวกเขาคืออะไร" คุณสามารถดาเนินการบางอยา่ ง
โดยใชต้ วั ช้ีท่ีมีความยากมากข้ึนโดยใชว้ ธิ ีการแบบเดิม ตวั อยา่ งเช่นคุณสามารถใชต้ วั ช้ีไปยงั ข้นั ตอนผา่ นอาร์เรยค์ ุณอาจไมท่ ราบขนาดท่ี
แน่นอนของ นอกจากน้ีคุณยงั สามารถออกแบบบางชนิดขอ้ มูลที่ซบั ซอ้ นที่จะเป็นไปไมไ่ ดโ้ ดยไม่ตอ้ งใชต้ วั ช้ี
หน่ึงในการจาแนกประเภทขอ้ มูลที่กาหนดเองที่เรียกวา่ ชนิดขอ้ มลู นามธรรม ชนิดขอ้ มูลเหล่าน้ีไดร้ ับการออกแบบมาเพ่ือเลียนแบบวตั ถุ
โลกแห่งความจริงหรือแนวคิด ยกตวั อยา่ งเช่นสายยาวของคนรอคอยท่ีจะไดร้ ับในภาพยนตร์ที่เรียกวา่ คิวและมนั ทางานบนหลกั การแรก
มาเสิร์ฟก่อน กองอาหารท่ีโรงอาหารในทอ้ งถิ่นที่เรียกวา่ สแตค็ มีอื่น ๆ อีกมากมาย หน่ึงหน่ึงท่ีนิยมดงั กล่าวเรียกว่ารายการที่เชื่อมโยง
รายการท่ีเชื่อมโยงประกอบดว้ ยโครงสร้างของหน่ึงหรือมากกวา่ หน่ึงชนิดขอ้ มลู รวมท้งั ตวั ช้ีไปยงั โครงสร้างท่ีคลา้ ยกนั และมนั ก็มี
ลกั ษณะเช่นน้ี:
struct aList
{
Learn Programming with C Page 40
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
int count;
struct aList *next;
};
ตวั แปรต่อไปคือการช้ีไปยงั โครงสร้าง alist อ่ืน ดงั น้นั ตวั แปรต่อไปการเชื่อมโยงอยา่ งใดอยา่ งหน่ึงไปยงั อีก struct กลายเป็ นห่วง
โซ่หรือรายการ คุณสามารถใชใ้ นรูปแบบฐานขอ้ มลู อยา่ งง่ายของวตั ถุ
รายละเอียดเพ่ิมเติมเก่ียวกบั ตวั ช้ีและชนิดขอ้ มูลนามธรรมอยนู่ อกเหนือขอบเขตของหลกั สูตรน้ี แตค่ ุณจะทางานในสิ่งน้ีเม่ืออ่านรหสั
ของคนอื่นดงั น้นั คุณควรจะรู้ของพวกเขา
Learn Programming with C Page 41
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่ี Lesson 7: โมดูลำร์Modularity
คำอธิบำยบทเรียน Lesson Description: Modularity น่าจะเป็นส่วนที่สาคญั ท่ีสุดของการออกแบบ
โปรแกรมท่ีดี โปรแกรมแบบแยกส่วนเป็ นเรื่องงา่ ยที่จะเขียนงา่ ยต่อการรักษาไดง้ า่ ยข้ึนในการแกไ้ ขปัญหาและงา่ ยตอ่ การเขา้ ใจ ท่ี
จริงแลว้ เป็นโปรแกรมแบบโมดลู าร์ท่ีสามารถทาไดง้ า่ ยมากในการออกแบบไดเ้ ป็นอยา่ งดี
อะไรคอื กำรเขยี นโปรแกรม Modular What Is Modular Programming?
การเขียนโปรแกรม Modular เป็นกระบวนการของการที่จะหมดสภาพปัญหาท่ีมีขนาดใหญ่เป็นขนาดเลก็ ท่ีเรียบง่ายและชิ้นจดั การ
มากข้ึนน้นั จะสามารถเขียนดว้ ยความสะดวกมากข้ึน
มนั ไมไ่ ดว้ า่ นานมาแลว้ วา่ โปรแกรมข้นั พ้ืนฐานจดั เป็น "ปาเกต็ ต้ีพ้นื ฐาน" เพราะธรรมชาติของภาษาและรูปแบบของโคด้ ที่เขียน รหสั ท่ีมา
สาหรับโปรแกรมเหล่าน้ีดูเหมือนจะเครียดกนั เช่นปาเกต็ ต้ีทารหสั ยากที่จะอ่านและทาความเขา้ ใจ หลงั จากน้นั ไมน่ านโปรแกรมเมอร์
BASIC พยายามท่ียากท่ีจะทาให้รหสั ของพวกเขาเลก็ ๆ นอ้ ย ๆ จดั การไดม้ ากข้ึนโดยใช้ "ซบั รูทีน." ซบั รูทีนเป็นส่วนเล็ก ๆ ของรหสั
ท่ีดาเนินงานทเ่ี ฉพาะเจาะจง แมก้ ระทงั่ การใชโ้ ปรแกรมยอ่ ยเหล่าน้ี แตร่ หสั ยงั คงเป็นเรื่องยากมากที่จะจดั การและปฏิบตั ิตาม ฉนั ยงั คงเห็น
รหสั ท่ีเป็ นปาเกต็ ต้ีเหมือนในธรรมชาติแมใ้ นภาษาแบบแยกส่วนเช่น C, C ++ และปาสกาล น้ีในความคิดของฉนั เป็ นท่ียอมรับ
การใชง้ านของโปรแกรมยอ่ ยท่ีไดร้ ับอนุญาตโปรแกรมท่ีจะกลายเป็นโครงสร้างมากข้ึนเอาการใชอ้ ยา่ งชดั เจน (และมกั จะหวน่ั ) คาสงั่
GOTO ใชโ้ ดยโปรแกรมพ้ืนฐานท่ีสุด ยา้ ยไปสู่การเขียนโปรแกรมโครงสร้างกลบั กลายเป็นภาษาใหม่ท่ีเรียกวา่ ปาสกาล ปาสคาลที่
ใช้ "วธิ ีการ" และ "ฟังกช์ น่ั " ท่ีมีลกั ษณะในแนวคิดท่ีจะซบั รูทีน ข้นั ตอนที่ถูกเรียกใหไ้ ปปฏิบตั ิงานท่ีเฉพาะเจาะจง ฟังกช์ น่ั ยงั ดาเนินงาน
ท่ีเฉพาะเจาะจง แต่นอกจากกลบั ผลท่ีช่วยใหก้ ารเขียนโปรแกรมเพ่ือใชง้ านฟังกช์ น่ั การโทรเป็ นส่วนหน่ึงของสมการ โดยทว่ั ไปคุณ
สามารถคิดวิธีการและฟังกช์ นั่ เป็น "การปฏิบตั ิ".
แมว้ า่ C เป็ นรอบในเวลาน้นั มนั กไ็ มไ่ ดอ้ ยใู่ นการใชง้ านทว่ั ไป แตต่ อนน้ี, C, C ++ และ Java ครองวิชาการงานอดิเรกและสาขาการ
เขียนโปรแกรมมืออาชีพ ใน C คุณเขียนทกุ อยา่ งท่ีเป็นฟังกช์ น่ั ฟังกช์ นั่ ท่ีอาจจะหรืออาจจะไมค่ ืนค่า แตก่ ็ยงั คงเขียนตอ่ ไปน้ีไวยากรณ์ของ
ฟังกช์ นั
ความคิดของการเขียนโปรแกรมแบบแยกส่วนแลว้ กลบั กลายเป็นภาษาเชิงวตั ถุเช่น C ++, Java และ SmallTalk เขียนรหสั ที่มา
เป็ นโมดูลกระชบั ช่วยใหโ้ ปรแกรมเมอร์มีความยดื หยนุ่ มาก ตวั อยา่ งเช่นสมมติวา่ คุณไดเ้ ขียนโมดูลแหล่งที่คานวณภาษีของคนในโปรแกรม
เงินเดือน ตอ่ มาคุณจะพบว่าการคานวณภาษีสาหรับผทู้ ี่มีการเปลี่ยนแปลง
คุณสามารถปรับเปลี่ยนโมดูลโดยไมต่ อ้ งเปลี่ยนวิธีการท่ีส่วนที่เหลือของการทางานของโปรแกรม มนั ก็ยงั คงคานวณภาษี แตไ่ ม่ไดแ้ ตกตา่ ง
กนั หรืออาจจะมีประสิทธิภาพมากข้ึน
วธิ ีการและฟังกช์ นั่ สามารถจะคิดวา่ เป็ นโมดูลในภาษาเช่น C และปาสกาล แนวคิดการเปลี่ยนแปลงเลก็ นอ้ ยสาหรับวตั ถุภาษาเช่น C ++,
Java และ objective-
เซลเซียสในภาษาเหล่าน้ีโมดูลอาจจะเป็ นวตั ถุช้นั โดยมีรายละเอียดปลีกยอ่ ยท่ีไมส่ าคญั ในขณะน้ี สิ่งที่สาคญั คือตอ้ งเขา้ ใจว่าโมดูลแทนงาน
ขนาดเลก็ ท่ีสามารถเรียกและดาเนินการในจดุ ใด ๆ ในโปรแกรมของคุณ
Modularity มกั จะเชื่อมโยงกบั เงื่อนไข คุณอาจเรียกข้นั ตอนหรือฟังกช์ น่ั เป็นผลมาจากสภาพท่ีเฉพาะเจาะจงในรหสั ของคุณ คุณจะได้
เรียนรู้เพ่ิมเติมเก่ียวกบั เง่ือนไขในบทเรียนต่อไป สาหรับตอนน้ีขอเนน้ โมดูลตวั เอง
กำรใช้ฟังก์ชั่น Using Functions
ฉนั จะอธิบายฟังกช์ น่ั เป็ นคร้ังแรกขณะที่มนั จะง่ายตอ่ การเขา้ ใจวธิ ีการข้นั ตอนจะถกู เขียนใน C, C ++, Java และถา้ คุณรู้วิธีการทางาน
จะมีการเขียน
Learn Programming with C Page 42
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ฟังกช์ น่ั ที่มีการใชก้ นั มากท่ีสุดเมื่อคุณตอ้ งการที่จะรู้วา่ ผลจากการดาเนินการหรือชุดของการคานวณก่อนท่ีโปรแกรมจะยงั คง บางภาษาสะดุด
ตาปาสคาลให้ใชค้ าวา่ "ฟังกช์ น่ั " เพ่อื กาหนดฟังกช์ น่ั C, C ++, Java และไม่ไดม้ ีคุณสมบตั ิน้ี แต่ทกุ อยา่ งในภาษาเหล่าน้ีเขียนเป็น
ฟังกช์ นั่ ใน C, ฟังกช์ นั่ จะเขียนต่อไปน้ี:
ReturnType FunctionName(parameters)
ReturnType เป็นชนิดขอ้ มูลผลตอบแทนที่ฟังกช์ น่ั ซ่ึงอาจเป็ นชนิดขอ้ มลู พ้นื เมืองเช่นยาวหรือถ่านหรือมนั อาจจะเป็นชนิดขอ้ มูลที่
กาหนดเองเช่นโครงสร้างท่ีอยขู่ องเราจากบทเรียนท่ีผา่ นมา
FunctionName เป็นชื่อที่คุณใหฟ้ ังกช์ นั่ ปฏิบตั ิร่วมกนั คือฟังกช์ น่ั ชื่อในตวั พิมพเ์ ลก็ ท้งั หมดท่ีมีตวั อกั ษรตวั แรกของแตล่ ะคาใน
ตวั พิมพใ์ หญ่ ชื่อฟังกช์ นั ควรต้งั ช่ือตามงานท่ีพวกเขาจะดาเนินการ ตวั อยา่ งเช่น:
IsFinished();
GotAddress();
FinalDeductions();
พารามิเตอร์ท่ีมีรายช่ือของตวั แปรหน่ึงหรือมากกวา่ ฟังกช์ น่ั ความตอ้ งการที่จะให้งานได้ ให้ฟังกช์ น่ั รายการพารามิเตอร์ที่เรียกวา่
"พารามิเตอร์ผ่าน" และช่วยลดการใชต้ วั แปรทวั่ โลก (ตวั แปรที่สามารถเขา้ ถึงไดจ้ ากจุดใด ๆ ในโปรแกรมน) เราจะครอบคลุม
คา่ พารามิเตอร์ในรายละเอียดเลก็ ๆ นอ้ ย ๆ ในภายหลงั ในบทเรียนน้ี
บ่อยคร้ังท่ีฟังกช์ นั่ ที่ใชส้ าหรับการคานวณหรือบูลีนงบ (จริงหรือเทจ็ ) แลว้ คุณสามารถใชฟ้ ังกช์ นั่ การทดสอบในสภาพดงั ตอ่ ไปน้ี:
if (ItIsTimeToLeave())
...
ในตวั อยา่ งน้ีเรากาลงั ทาเรียกร้องใหฟ้ ังกช์ นั่ โดยตรงในการทดสอบดงั น้นั เราจะอาศยั อยกู่ บั ผลของการทางานเพอื่ ดาเนินการตอ่ ถา้ ฟังกช์ นั
ผลตอบแทนจริงเราทาสิ่งหน่ึงและถา้ เราทาเทจ็ อีก ฟังกช์ นั่ ท่ีเรียกวา่ และผลท่ีไดก้ ลบั มาก่อน "ถา้ " เสร็จสิ้นคาสง่ั
นอกจากน้ีเรายงั สามารถกาหนดผลของฟังกช์ นั ตวั แปรดงั ต่อไปน้ี:
float result;
result = CalculateTaxes();
Learn Programming with C Page 43
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
ท่ีนี่เราจะไดเ้ ป็นหลกั บอกวา่ ผลจากการ CalculateTaxes ฟังกช์ นั่ ที่ไดร้ ับมอบหมายใหผ้ ลตวั แปร เพราะผลเป็นตวั แปรของชนิด
ลอย CalculateTaxes ตอ้ งกาหนดที่จะกลบั มาเป็นชนิดลอยหรือประเภทที่เขา้ กนั ไดก้ บั ลอย น่ีคือสิ่งที่นิยามฟังกช์ นั อาจมีลกั ษณะ
เหมือน CalculateTaxes รับเง่ือนไขเหล่าน้ี:
float CalculateTaxes( void )
{
float(%TAB%)taxes;
/* code to calculate taxes goes here */
return taxes;
}
ในตวั อยา่ งน้ีเราประกาศตวั แปรทอ้ งถิ่นท่ีเรียกวา่ ภาษีท่ีจะใชส้ าหรับการคานวณ เมื่อคานวณเสร็จแลว้ เรา "กลบั " ตวั แปรที่ ขอให้สงั เกตวา่
ชนิดขอ้ มูลของตวั แปรภาษีเป็นเช่นเดียวกบั ชนิดขอ้ มูลผลตอบแทนที่ฟังกช์ น่ั
เมื่อคุณเขียนฟังกช์ น่ั ท่ีใชพ้ ารามิเตอร์คุณจะใหช้ ่ือตวั แปรและชนิดขอ้ มลู เม่ือโทรฟังกช์ นั่ ที่ใชพ้ ารามิเตอร์คุณเพียง แต่ผา่ นตวั แปร (s)
ประเภทท่ีเหมาะสมหรือประเภทท่ีเขา้ กนั ได.้
โดยใช้วธิ ีกำร Using Procedures
ข้นั ตอนน้ีจะเรียกวา่ เมื่อคุณตอ้ งการท่ีจะดาเนินการงานหรือชุดของงานที่ไม่ตอ้ งใชผ้ ลท่ีไดเ้ ป็นท่ีรู้จกั ก่อนทโี่ ปรแกรมจะยงั คง บางภาษา
สะดุดตาปาสคาลใหใ้ ชค้ าวา่ "ข้นั ตอน" เพอื่ กาหนดข้นั ตอน C, C ++, Java และไมไ่ ดม้ ีความแตกต่างน้ี ใน C ข้นั ตอนจะเขียน
ดงั น้ี:
ReturnType ProcedureName(parameters)
ไดอ้ ยา่ งรวดเร็วก่อนคุณอาจถาม " แตไ่ มใ่ ช่วา่ ฟังกช์ น่ั หรือไม?่ " ใช่แลว้ . โปรดจาไวว้ า่ คุณเขียนประจาใน C ทกุ ฟังกช์ นั่ ความแตกตา่ ง
ระหวา่ งท้งั สองกลายเป็นทช่ี ดั เจนเม่ือเราใชเ้ ป็นตวั อยา่ งจริง.
void AddDatabaseItem( itemType theItem )
การใชค้ าวา่ "โมฆะ" เป็นประเภทการกลบั มาบอกเราวา่ กิจวตั รประจาวนั น้ีไม่ไดส้ ่งกลบั ค่าดงั น้นั กถ็ ือวา่ เป็นข้นั ตอนท่ีไมไ่ ดฟ้ ังกช์ น่ั
ข้นั ตอนที่ไม่ไดใ้ ชโ้ ดยตรงในการแสดงออกตามเง่ือนไขเช่นถา้ คาสงั่ จากส่วนก่อนหนา้ น้ี พดู โดยทวั่ ไปในข้นั ตอนน้ีจะเรียกวา่ เป็น
เสน้ ตรงเช่นน้ี:
procedure1();
procedure2();
...
และหลงั จากผลมาจากสภาพท่ีจะพบ (เพ่มิ เติมวา่ ในบทเรียนต่อไป) ลองดูที่เป็ นตวั อยา่ งที่แทจ้ ริงของข้นั ตอน:
Learn Programming with C Page 44
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
void DeleteItem( long itemNum )
{
...
}
หมายเหต:ุ ไมม่ ีคาสงั่ กลบั ในตอนทา้ ยของข้นั ตอนที่ ส่ิงที่ตอ้ งการจะประสบความสาเร็จจะทาในข้นั ตอนและท่ีมนั อ่ืน ๆ นอกเหนือจาก
ความแตกต่างอยทู่ ี่น่ีทุกอยา่ งที่คุณรู้เก่ียวกบั ฟังกช์ น่ั น้ียงั นาไปใชใ้ นข้นั ตอนการ.
Using Parameters
เป็ นส่วนสาคญั ของการออกแบบโปรแกรมที่ดีคือการใชพ้ ารามิเตอร์ที่จะใหข้ อ้ มลู ท่เี ป็นกิจวตั รประจาวนั ในการทางานกบั แทนการใชต้ วั
แปรทว่ั โลก คุณควรพยายามท่ีจะลดการใชต้ วั แปรทวั่ โลกมากท่ีสุดเท่าที่เป็นไปได้ คุณสามารถใชพ้ ารามิเตอร์กบั วธิ ีการและฟังกช์ น่ั
ข้นั ตอนหรือฟังกช์ นั่ ที่ไมใ่ ชพ้ ารามเิ ตอร์จะกล่าววา่ เป็น "โมฆะ" ของพารามิเตอร์ ใน C, คาหลกั "เป็นโมฆะ" จะใชเ้ มื่อกาหนดประจา แต่
ไมไ่ ดใ้ ชเ้ มื่อโทรกิจวตั รประจาวนั ยกตวั อยา่ งเช่นจาประจา CalculateTaxes จากขา้ งตน้ :
float CalculateTaxes( void )
{
float taxes;
...
return taxes;
}
มีอะไรผิดปกติกบั ประจาวนั น้ีคือ; มนั ทางานไดอ้ ยา่ งสมบรู ณ์แบบ อยา่ งไรกต็ ามประจาวนั น้ีจะตอ้ งพ่งึ พาการอา่ นขอ้ มูลท่ี
สามารถนามาใชใ้ นการคานวณภาษีท้งั จากตวั แปรทวั่ โลกหรือจากแฟ้ มขอ้ มลู หรือจากวิธีอ่ืน ๆ ที่จะทาใหก้ ิจวตั รประจาวนั
เลก็ ๆ นอ้ ย ๆ มีประสิทธิภาพมากข้ึนกจ็ ะดีที่สุดท่ีจะผา่ นในขอ้ มลู ฟังกช์ นั่ ความตอ้ งการที่เป็นพารามิเตอร์เช่นน้ี
float CalculateTaxes( float income, float taxRange )
{
float taxes;
...
return taxes;
}
จากน้นั คุณจะเรียกฟังกช์ นั่ เช่นน้ี:
float grossIncome, taxPercentage;
...
Learn Programming with C Page 45
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
scanf("Input employee"s gross income %f",
grossIncome);
scanf("Input employee"s tax bracket %f",
taxPercentage);
...
float netTaxes = CalculateTaxes( grossIncome,
taxPercentage);
มีบางสิ่งท่ีจะแจง้ ใหท้ ราบเกี่ยวกบั วธิ ี CalculateTaxes ถูกกาหนดและวิธีการท่ีจะเรียกว่า ท่ีสาคญั ท่ีสุดคือพารามิเตอร์ที่กาหนด
เม่ือกาหนดฟังกช์ นั่ ตวั แปรท่ีไมจ่ าเป็ นตอ้ งเป็ นชื่อเดียวกนั แต่พวกเขาไม่จาเป็ นตอ้ งเป็นชนิดเดียวกนั หรือประเภทท่ีเขา้ กนั ได้ ภายใน
ฟังกช์ น่ั ท่ีชื่อตวั แปรในรายการพารามิเตอร์ท่ีมีการใชใ้ นการดาเนินการคานวณ สิ่งต่อไปท่ีควรทราบก็คือ CalculateTaxes ถูก
เรียกใชค้ าสงั่ ท่ีไดร้ ับมอบหมาย ตวั แปร netTaxes เป็ นชนิดขอ้ มูลเดียวกนั กบั ที่ CalculateTaxes ผลตอบแทน.
ประเภทกำรจบั คู่ Type Matching
เทคนิคการพดู ชนิดขอ้ มลู พารามิเตอร์ don "t มกั จะมีเพอ่ื ให้ตรง แต่พวกเขาไมไ่ ดจ้ ะตอ้ งเขา้ กนั ได.้ ชนิดขอ้ มูลที่ใชเ้ ม่ือเรียกฟังกช์ น่ั
จะตอ้ งสามารถใหพ้ อดีกบั พ้ืนท่ีขอ้ มูลที่ใชใ้ นการกาหนดฟังกช์ นั่ . ยกตวั อยา่ งเช่น ส้นั สามารถใส่ในชนิด int และลอยสามารถใส่ใน
ประเภทคู.่ แตค่ ู่ไมส่ ามารถปรับตวั ใหเ้ ขา้ ประเภทลอยและไม่สามารถ int (ในบางระบบต่อไป) พอดีในประเภทระยะส้นั .
Learn Programming with C Page 46
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
บทท่Lี esson 8: เงื่อนไขและกำรแตกแขนงConditionals and Branching
คำอธิบำยบทเรียน Lesson Description: ในบทน้ีคุณจะเจาะลึกลงไปในประเภทที่แตกต่างกนั ของงบเง่ือนไข
และเรียนรู้สิ่งแขนงจะช่วยใหค้ ุณประสบความสาเร็จ
งบเงอื่ นไข Conditional Statements
คุณอาจจะรู้แลว้ ของบางงบเงื่อนไขที่คุณทาเมื่อการพดู คุยหรือการตดั สินใจ คุณเคยเห็นตวั อยา่ งบางส่วนของเง่ือนไขในบทเรียนก่อนหนา้ น้ีโดย
ใช้ "ถา้ มีคาสง่ั " เพ่อื ดาเนินการทดสอบ อยา่ งไรกต็ าม "ถา้ " ไมส่ ิ้นสุดของสภาพ มีสองประเภทหลกั ของงบเง่ือนไขท่ีใชใ้ น C, C ++ และ
Java เป็ น ที่แรกกค็ ือ "ถา้ ... แลว้ ... อยา่ งอ่ืน" เงื่อนไข ประการท่ีสองคือ "เปล่ียน... กรณี" เง่ือนไข ลองดูที่แตล่ ะคนในรายละเอียดเพิ่มเติม
ถ้ำ . . แล้วก็ . . อน่ื If . . . then . . . else
คาสง่ั เงื่อนไขส่วนใหญ่ท่ีใชใ้ นการเขียนโปรแกรมท่ีเรียกวา่ ถา้ . . แลว้ ก็ . . คาสง่ั อื่น ลกั ษณะเช่นน้ี:
if (some condition is met) then
do something
else
do something else
บรรทดั แรกเป็นเงื่อนไขการทดสอบ ถา้ เง่ือนไขในวงเล็บประเมินเป็นจริงแลว้ บรรทดั ดา้ นล่างจะถูกดาเนินการ ส่วน "อ่ืน ๆ " ของคาสงั่
จดั การในกรณีท่ีสภาพการทดสอบเป็ นเทจ็ สามารถมีไดจ้ านวนบรรทดั ใด ๆ สาหรับแต่ละบรรทดั "ทาอะไร" ใน pseudocode ของ
เรา แตก่ ารปฏิบตั ิทว่ั ไปคือวา่ ถา้ มีมากกวา่ สองหรือสามเสน้ รหสั ที่จะใส่ในชีวติ ประจาแยกตา่ งหากและที่เรียกวา่ อยา่ งชดั เจนในตวั เอง
(กระบวนการที่เรียกวา่ แตกแขนง) ของมนั
บางภาษาเช่น Pascal ใช้ "แลว้ " เป็นคาหลกั และเป็นส่วนหน่ึงของคาสง่ั ภาษาอื่น ๆ เช่น C, C ++ และ Java ถือวา่ "แลว้ "
ดงั น้นั ท่ีคุณไม่เคยเห็นคาในรูปแบบของคาสง่ั เงื่อนไขน้ี ลองใชต้ วั อยา่ งของการคานวณค่าล่วงเวลาจากบทเรียนท่ีก่อนหนา้ น้ี ถา้ ทอม
พนกั งานทางานมากกวา่ 40 ชวั่ โมงในหน่ึงสปั ดาห์, เงินเดือนของเขาเป็น 1.5 เท่าของเงินเดือนประจาของ $ 10 ต่อชวั่ โมงสาหรับ
แต่ละชวั่ โมงกวา่ 40 เขาทางานและ $ 10 สาหรับทุกชว่ั โมงถึง 40 ชว่ั โมง คาสงั่ ที่เขียนใน C อาจมีลกั ษณะเช่นน้ี:
#define kNormalPay 10
#define kNormalWeek 40
float overtimePay;
...
if (hours > 40)
overtimePay = (hours - kNormalWeek) * 1.5;
Learn Programming with C Page 47
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
else
overtimePay = 0.0;
...
เงื่อนไขการทดสอบคือถา้ จานวนชวั่ โมงมากกวา่ 40 ชว่ั โมง ถา้ เง่ือนไขท่ีเป็ นจริงเราจะคานวณอตั ราค่าจา้ งค่าล่วงเวลา แตถ่ า้ เงื่อนไขท่ี
เป็ นเทจ็ โปรแกรมรันส่วน "อื่น ๆ " ของคาสง่ั และกาหนด overtimePay เป็นศูนย์
ลองดูตวั อยา่ งท่ีแตกต่างกนั จะเกิดอะไรข้ึนถา้ ไมม่ ีคาสง่ั "อ่ืน"? คาตอบคือโปรแกรมเพียงแคช่ ่วยให้การทางาน เมื่อคุณไม่ไดใ้ ส่อยา่ ง
ชดั เจน "อ่ืน" คาสง่ั ในสภาพท่ีผลท่ีมีประสิทธิภาพคือวา่ ถา้ สภาพการทดสอบลม้ เหลวทาอะไรพิเศษเพียงดาเนินการเกี่ยวกบั ตวั อยา่ งเช่น:
if (hours <= 40)
grossPay = kNormalPay * hours;
...
DoSomethingElse();
ในตวั อยา่ งขา้ งตน้ มีเพยี งการทดสอบสาหรับชวั่ โมงนอ้ ยกวา่ หรือเทา่ กบั 40 หากการทดสอบลม้ เหลวโปรแกรมไม่ไดค้ านวณ
grossPay แต่ขา้ มบรรทดั น้นั และยงั คง chugging พร้อม น้ีบิตโดยเฉพาะอยา่ งยง่ิ ของโคด้ ตวั อยา่ งเป็นจริงขอ้ ผิดพลาดการ
เขา้ รหสั เราจะพดู คุยเก่ียวกบั ขอ้ บกพร่องในบทท่ี 12
ลองมาเป็นคร้ังที่สองที่จะพดู คุยเลก็ ๆ นอ้ ย ๆ เกี่ยวกบั การเขา้ รหสั สไตล์ "ถา้ " งบ การปฏิบตั ิร่วมกนั คือการใชเ้ ครื่องหมายวงเล็บ ({}
และคิดเป็ นเริ่มตน้ และสิ้นสุด) เม่ือมีมากกวา่ หน่ึงงานที่คุณตอ้ งการดาเนินการท้งั ใน "ถา้ ... แลว้ " ส่วนหน่ึงของเง่ือนไขหรือส่วน "อื่น ๆ
ท่ี" แตถ่ า้ คุณจะใชค้ าสง่ั อยา่ งใดอยา่ งหน่ึงวงเล็บไม่จาเป็น (ดงั แสดงในตวั อยา่ งขา้ งตน้ ) พิจารณาตวั อยา่ งต่อไป:
#define kNormalPay 10
#define kNormalWeek 40
float overtimePay, grossPay;
...
if (hours > 40)
{
overtimePay = (hours - kNormalWeek) * 1.5;
grossPay = (kNormalWeek * kNormalPay) + overtimePay;
}
else
grossPay = hours * kNormalPay;
...
Learn Programming with C Page 48
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
วงเลบ็ ใหท้ ้งั สองเขา้ ดว้ ยกนั การคานวณ การคานวณท้งั สองจะตอ้ งทาก่อนท่ีโปรแกรมจะสามารถดาเนินการต่อ ขอใหส้ งั เกตวา่ เราไม่ได้
ใชส้ าหรับการจดั ฟัน "อ่ืน" เพราะมีเพียงหน่ึงคาสง่ั ที่จะตอ้ งดาเนินการ
อะไรจะเกิดข้ึนถา้ จดั ฟันท่ีถูกลบออกจาก "ถา้ "? เม่ือคุณรวบรวมโปรแกรมคอมไพเลอร์จะกลบั ขอ้ ผิดพลาด ทาไม? คอมไพเลอร์จะได้
เห็นเป็ นคร้ังแรกที่ไดร้ ับมอบหมายในสภาพและถือวา่ ไมม่ ีคาสงั่ "อ่ืน ๆ " การกาหนด grossPay จะถูกดาเนินการแลว้ โดยไมค่ านึงถึง
สภาพการทดสอบ ทนั ใดน้นั คาสง่ั "อ่ืน" ปรากฏ แต่ไมม่ ีท่ีสอดคลอ้ งกนั "ถา้ " คาสง่ั เพ่ือใหค้ อมไพเลอร์กลบั ขอ้ ผดิ พลาดทางไวยากรณ์.
ขยำยกำรทดสอบ Expanding the Tests
คุณสามารถสร้างซบั ซ้อนมากข้ึน "ถา้ " งบกวา่ ผทู้ ่ีแสดงที่น่ี ตวั อยา่ งเช่นสมมติวา่ พนกั งานทางานมากกวา่ 40 ชว่ั โมง แต่นอ้ ย
กวา่ 60 ชวั่ โมง วา่ "ถา้ " คาสงั่ จะมีลกั ษณะเช่นน้ี:
if ((hours > 40) && (hours <= 60))
{
rate = 1.5;
pay = rate * hours;
}
การใชส้ ญั ลกั ษณ์เคร่ืองหมายคู่ "&&" สร้างความสมั พนั ธ์เชิงตรรกะระหวา่ งเง่ือนไขการทดสอบที่ระบุวา่ ถา้ ชวั่ โมงนอ้ ยกว่า 40
ชว่ั โมงมีคา่ นอ้ ยกวา่ หรือเท่ากบั 60
โดยใชเ้ งื่อนไขการทดสอบหลาย ๆ วิธีน้ีจะทาให้มนั ง่ายต่อการทดสอบค่าช่วง
สิ่งที่เก่ียวกบั สถานการณ์ที่ตอ้ งมีสภาพตรรกะหรือ? คุณสามารถทาอะไรที่มากเกินไป ตวั อยา่ งเช่นถา้ คา่ ของชว่ั โมงมากกวา่ 40 หรือมนั
เป็ นวนั หยดุ ที่คุณอาจรหสั มนั เช่นน้ี:
if ((hours > 40) II (holiday == TRUE))
{
rate = 1.5;
pay = rate * hours;
}
ในกรณีน้ีแถบตวั ละครคู่ "คือ" มกั จะเรียกวา่ "ทอ่ " ตวั อกั ษรจะถูกใชเ้ พอื่ ทาให้ตรรกะหรือสภาพ.
"กรณ"ี งบ "Case" Statements
คาสงั่ เง่ือนไขหลกั อ่ืน ๆ ที่เป็ น "กรณี" คาสง่ั "กรณี" งบส่วนใหญม่ กั จะใชเ้ ม่ือมีมากกวา่ สองคาตอบท่ีเป็ นไปไดส้ าหรับเง่ือนไขและ
คาตอบของแต่ละคนตอ้ งมีการดาเนินการแยกจากกนั "กรณี" คาสง่ั ที่ใชใ้ นการร่วมกบั การ "เปลี่ยน" คาสงั่ ที่จะบอกเรียบเรียงสิ่งที่ตวั แปร
ที่คุณตอ้ งการทดสอบ ลองดูตวั อยา่ ง
Learn Programming with C Page 49
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559
สมมติวา่ คุณกาลงั เขียนโปรแกรมที่คานวณค่าคอมมิชชนั่ การขาย คา่ คอมมิชชนั่ จะจ่ายเงินท่ีเหตุการณ์สาคญั โดยเฉพาะอยา่ งยง่ิ สาหรับ
การขายท่ี $ 1,000 รวมคา่ นายหนา้ เป็ นร้อยละ 2 สาหรับ
$ 5,000 ค่านายหนา้ ร้อยละ 3 สาหรับ $ 10,000 คา่ นายหนา้ ร้อยละ 5 สาหรับทกุ อยา่ งมากกวา่ $ 10,000 คณะกรรมการ
เป็นร้อยละ 10 คุณสามารถใชช้ ุดของ "ถา้ ... แลว้ ... อยา่ งอ่ืน" แถลงการณ์ซ่ึงทางานไดด้ ี แตท่ ่ีมีแนวโนม้ ที่จะทาให้การแกป้ ัญหาที่นอ้ ย
สง่างามและยากที่จะอ่าน มนั งา่ ยท่ีจะใชค้ าสง่ั กรณีเช่นน้ี:
/* code to calculate the milestone, not shown */
switch (milestone)
{
case 0:
commission = 0.00;
break;
case 1000:
commission = 0.02;
break;
case 5000:
commission = 0.05;
break;
default:
commission = 0.10;
break;
}
"การเปลี่ยน" คาสง่ั แยกตวั แปรที่คุณตอ้ งการท่ีจะตรวจสอบในกรณีการขายน้ี "กรณี" คาสงั่ จะไม่ทางานกบั ตวั แปรอ่ืน ๆ แต่ละกรณี
ตอ่ เน่ืองทดสอบคา่ ใดค่าหน่ึงท่ีเป็นไปไดแ้ ละใชเ้ วลาดาเนินการท่ีเหมาะสมถา้ เงื่อนไขทดสอบ (กา้ ว HIT) เป็นความจริง "การแบง่ "
คาบอกคอมไพเลอร์จะแยกออกจากงบเปลี่ยน / กรณีและดาเนินการต่อรหสั ต่อไปน้ี "การเร่ิมตน้ " สภาพท่ีสิ้นสุดตอบสนองการทดสอบ
ของยอดขายมากกวา่ 10,000 ทาไม? เพราะโปรแกรมจะไดไ้ ปผา่ นแตล่ ะสภาพและลม้ เหลว สภาพท่ีผา่ นมาจึงไดพ้ บและหมายถึง
"สาหรับส่ิงอ่ืนทาต่อไป."
หากไมม่ ีการ "หยดุ " คาสง่ั จะพบโปรแกรมยงั จะรันโคด้ ในกรณีตอ่ ไป (เรียกวา่ ตกผา่ น) มีบางคร้ังท่ีน้ีจะมีประโยชนม์ ี แต่ในตวั อยา่ ง
ขา้ งตน้ รหสั ผิดจะถูกดาเนินการและคุณจะจบลงดว้ ยขอ้ ผิดพลาดและขอ้ บกพร่อง
นอกจากน้ีคุณยงั สามารถรวมกรณีท่ีจะสร้างฐานะหรือ ยกตวั อยา่ งเช่นบอกวา่ คณะกรรมการร้อยละ 5 เป็นค่าใชจ้ า่ ยเกี่ยวกบั ความ
คืบหนา้ ของ $ 5,000 $ 6,000 และ $ 7,000 รหสั อาจมีลกั ษณะเช่นน้ี
Learn Programming with C Page 50
แปลโดยจำรัส เจริญเขตต์
2 พฤษภำคม 2559