Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore โครงสร้างข้อมูลกับภาษา C

โครงสร้างข้อมูลกับภาษา C

Published by kornkamon, 2021-11-10 05:39:33

Description: โครงสร้างข้อมูลกับภาษา C

Search

Read the Text Version

2  โครงสร้างขอ้ มลู กบั ภาษา C/C++ zz ในกรณที ต่ี องการซอื้ เปนจ�ำ นวนมาก เพอ่ื ใชในการสอน การฝก อบรม การสง เสริมการขาย หรอื เปน ของขวญั พิเศษ เปน ตน กรณุ าตดิ ตอ สอบถามราคาพเิ ศษไดท ่ี ฝา ยขาย บรษิ ทั ซเี อด็ ยเู คชน่ั จ�ำ กดั (มหาชน) เลขท่ี 1858/87-90 ถนนเทพรตั น แขวงบางนาใต้ เขตบางนา กรุงเทพฯ 10260 โทรศัพท 0-2826-8222 โทรสาร 0-2826-8356-9 zz หากมคี ำ�แนะน�ำ หรือตชิ ม สามารถตดิ ตอไดท ี่ comment@se–ed.com โครงสรา้ งขอ้ มลู กับภาษา C/C++ โดย ผศ. อหุ มาด หมัดอาด�้ำ ราคา 295 บาท สงวนลขิ สิทธต์ิ ามกฎหมาย โดย ผศ. อหุ มาด หมดั อาดำ้� © พ.ศ. 2564 หา้ มคดั ลอก ลอกเลยี น ดดั แปลง ท�ำ ซ�ำ้ จัดพมิ พ์ หรือกระท�ำ อื่นใด โดยวธิ กี ารใดๆ ในรปู แบบใดๆ ไม่ว่าสว่ นหน่ึงส่วนใดของหนงั สอื เลม่ น้ี เพอ่ื เผยแพร่ในสือ่ ทุกประเภท หรือเพื่อวัตถปุ ระสงค์ใดๆ   นอกจากจะไดร้ บั อนุญาต 4 1​ 0 - 1 6 8 - 3 5 2 ขอมูลท​ างบ​ รรณานกุ รมข​ องหอสมดุ แ​ หง ช​ าต​ิ อุหมาด หมดั อาดำ้�. โครงสร้างขอ้ มลู กบั ภาษา C/C++. --กรุงเทพฯ : ซเ​ี อด็ ย​ เู​ค​ชัน่ , 2564. 352 หนา. 1. ซี++ (ภาษาคอมพิวเตอร)์ . 2. การเขียนโปรแกรม (คอมพวิ เตอร์) 3. ซี (ภาษาคอมพิวเตอร์). I. ชื่อเรื่อง. 005.133 ISBN : 978-616-08-4296-4 จดั พมิ พ​และ​จดั จ�ำ หนา ย​โดย เลข​ท่ี 1858/87-90 ถนนเ​ทพรตั น แขวง​บางนาใต้ เขต​บางนา กรงุ เทพฯ 10260 โทรศัพท 0-2826-8000 พมิ พท่ี บรษิ ัท ว.ี พรน้ิ ท์ (1991) จำ�กดั เลขที่ 23/71-72 หมู่ 1 ซอยเทียนทะเล 10 ถนนบางขนุ เทยี น-ชายทะเล แขวงแสมดำ� เขตบางขนุ เทยี น กรงุ เทพฯ 10140 โทรศัพท์ 0-2451-3010 นายวชิ ยั กาญจนพัฒนา ผพู้ ิมพ์ผู้โฆษณา พ.ศ. 2564

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

4  โครงสรา้ งขอ้ มลู กบั ภาษา C/C++

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

6  โครงสรา้ งขอ้ มลู กบั ภาษา C/C++

สารบญั   7 สารบญั บทที่ 1 โครงสรา้ งขอ้ มลู กับการพฒั นาโปรแกรม.................... 11 การพฒั นาโปรแกรม........................................................................................................... 11 ขั้นตอนวิธี............................................................................................................................ 21 ขอ้ มูลและการแทนข้อมลู .................................................................................................. 25 สรปุ ....................................................................................................................................... 27 ค�ำถามท้ายบทท่ี 1.............................................................................................................. 29 บทที่ 2 โครงสรา้ งขอ้ มูลแบบกลุ่ม........................................... 33 โครงสร้างขอ้ มลู แบบแถวล�ำดับ........................................................................................ 34 โครงสรา้ งข้อมลู แบบตาราง .. ........................................................................................... 37 โครงสร้างข้อมูลแบบกล่อง ............................................................................................ 45 การประยุกต์........................................................................................................................ 64 สรปุ ....................................................................................................................................... 66 ค�ำถามท้ายบทท่ี 2.............................................................................................................. 67 บทท่ี 3 โครงสรา้ งข้อมลู แบบลสิ ต์........................................... 71 เดนซล์ ิสต์ (Dense List)................................................................................................... 72 ลิสต์เชอ่ื มโยง ................................................................................................................... 76 การประมวลผลกบั ลสิ ตเ์ ชือ่ มโยง...................................................................................... 81 สรุป.....................................................................................................................................101 ค�ำถามท้ายบทท่ี 3............................................................................................................104

8  โครงสรา้ งขอ้ มูลกับภาษา C/C++ บทที่ 4 สแตกและคิว.. ........................................................... 109 การประมวลผลกับสแตก ..............................................................................................112 การประยุกต์ใชส้ แตก.......................................................................................................118 ควิ ......................................................................................................................................129 การเรียกตวั เอง ...............................................................................................................137 สรปุ .....................................................................................................................................140 ค�ำถามท้ายบทที่ 4............................................................................................................142 บทที่ 5 โครงสร้างขอ้ มูลแบบต้นไม้ (Tree)........................... 145 โครงสร้างขอ้ มลู แบบตน้ ไม.้.............................................................................................146 การแทนตน้ ไม้ในคอมพวิ เตอร์........................................................................................150 ต้นไมท้ วิภาค......................................................................................................................151 การประมวลผลกบั ต้นไมท้ วภิ าคแบบมีระเบียบ............................................................160 การแปลงต้นไม้ท่ัวไปให้เปน็ ตน้ ไม้ทวิภาค......................................................................177 ทรที ราเวอร์แซล................................................................................................................180 การประยกุ ต.์ .....................................................................................................................181 สรุป.....................................................................................................................................184 ค�ำถามท้ายบทที่ 5............................................................................................................186 บทท่ี 6 เอวีแอลทรีและเซต.................................................. 191 เอวแี อลทรี .......................................................................................................................192 โครงสรา้ งขอ้ มูลแบบเซต.................................................................................................209 การประยุกต์ของเซต........................................................................................................222 สรุป.....................................................................................................................................223 ค�ำถามท้ายบทท่ี 6............................................................................................................224 บทที่ 7 โครงสรา้ งขอ้ มลู แบบกราฟ (Graph)........................ 227 การแทนกราฟในคอมพิวเตอร.์ .......................................................................................228 การประมวลผลกราฟ.......................................................................................................234 การหาเสน้ ทางทีส่ น้ั ท่สี ุดระหว่างสองโหนด...................................................................255 สรุป.....................................................................................................................................261 ค�ำถามทา้ ยบทท่ี 7............................................................................................................262

สารบัญ  9 บทที่ 8 การเรยี งล�ำดบั ขอ้ มูล................................................. 265 การเรยี งแบบแลกเปล่ียน................................................................................................266 การเรียงล�ำดับแบบเลือกและตน้ ไม้...............................................................................276 การเรียงล�ำดับแบบแทรก................................................................................................291 การเรียงล�ำดับแบบรวมและแบบฐาน............................................................................293 สรุป.....................................................................................................................................298 ค�ำถามทา้ ยบทท่ี 8............................................................................................................299 บทท่ี 9 การค้นหาข้อมูล......................................................... 301 การคน้ หาแบบเชงิ เสน้ .....................................................................................................302 การคน้ หาแบบดชั นีเชงิ เส้น ...........................................................................................303 การคน้ หาแบบทวิภาค......................................................................................................306 การค้นหาแบบตน้ ไมท้ วิภาค............................................................................................310 การค้นหาแบบแฮช...........................................................................................................312 สรปุ .....................................................................................................................................319 ค�ำถามทา้ ยบทท่ี 9............................................................................................................320 เฉลยค�ำถามท้ายบท......................................................................321 บรรณานกุ รม.................................................................................341 ดชั นี...............................................................................................343 อภิธานศัพท์..................................................................................347

10  โครงสรา้ งขอ้ มลู กบั ภาษา C/C++

กับกโคารรพงสฒั รนา้ งาโขป้อรมแลู กรม 1บทที่ 1 โครงสรา้ งข้อมลู กับการพัฒนาโปรแกรม  11 โครงสรา้ งขอ้ มลู ถอื เปน็ ปจั จยั ส�ำคญั อยา่ งยง่ิ ตอ่ โปรแกรมคอมพวิ เตอรแ์ ละการท�ำงาน ของคอมพวิ เตอร์ โปรแกรมที่ใหค้ อมพวิ เตอร์ท�ำงานอยา่ งเดยี วกันแต่ใช้โครงสร้างขอ้ มลู ส�ำหรับเก็บข้อมูลท่ีต่างกัน จะท�ำให้ประสิทธิภาพการท�ำงานของคอมพิวเตอร์แตกต่างกัน เวลาที่ใชท้ �ำงานและขนาดของพนื้ ท่ีในหนว่ ยความจ�ำหลกั ท่ีใชเ้ กบ็ ขอ้ มลู กแ็ ตกตา่ งกนั ดงั นนั้ ถา้ โปรแกรมทพี่ ฒั นาข้ึนมานนั้ ไดร้ บั การวางแผนท่ีดี นัน่ คือมกี ารออกแบบโครงสรา้ งขอ้ มูล ส�ำหรบั เกบ็ ขอ้ มลู ไดด้ ี จะท�ำให้โปรแกรมดงั กลา่ วมจี �ำนวนค�ำสง่ั ไมม่ าก คอมพวิ เตอร์ใชเ้ วลา นอ้ ยส�ำหรบั ท�ำงาน เกบ็ ขอ้ มลู ไมซ่ ำ�้ ซอ้ น เกบ็ ขอ้ มลู ไดอ้ ยา่ งมปี ระสทิ ธภิ าพ ใชพ้ นื้ ที่ในหนว่ ย ความจ�ำน้อยส�ำหรับเก็บค�ำสง่ั และข้อมลู ท่จี ะประมวลผลโปรแกรม การพฒั นาโปรแกรม ในการน�ำคอมพวิ เตอรม์ าช่วยท�ำงานน้ัน สิ่งส�ำคญั ทส่ี ดุ ทีจ่ ะต้องท�ำคอื การพัฒนา โปรแกรมค�ำสงั่ คอมพวิ เตอรท์ เ่ี รยี กวา่ ซอฟตแ์ วร์ (Software) เพอื่ ใหค้ อมพวิ เตอร์ไดท้ �ำงาน ทตี่ อ้ งการ ผทู้ ท่ี �ำการพฒั นาโปรแกรมคอมพวิ เตอรเ์ รยี กวา่ โปรแกรมเมอร์ (Programmer) โดยโปรแกรมเมอรจ์ ะต้องศกึ ษาหลกั ไวยากรณ์ (Syntax) และความหมาย (Semantics) ของค�ำสง่ั ตา่ งๆ ของภาษาคอมพวิ เตอรท์ ่ีใชเ้ ขยี นโปรแกรมและเขยี นล�ำดบั ค�ำสงั่ ในโปรแกรม ให้ถูกต้อง ออกแบบการเก็บข้อมูลในโปรแกรมให้ถูกต้อง และถ้าโปรแกรมท่ีจะเขียนเป็น โปรแกรมส�ำหรับการแก้ปัญหาท่ีซับซ้อนมากๆ ข้อมูลท่ีน�ำมาใช้ในโปรแกรมมีเป็นจ�ำนวน มาก โปรแกรมเมอร์จะต้องใช้เวลาในการออกแบบโปรแกรม ออกแบบการเก็บข้อมูลใน โปรแกรม และจะต้องวิเคราะห์หาวิธีการแก้ปัญหา และเขียนล�ำดับข้ันตอนของค�ำส่ังใน โปรแกรมกอ่ น โดยใหท้ ุกกระบวนการตัง้ แต่การออกแบบโปรแกรม การก�ำหนดโครงสรา้ ง

12  โครงสรา้ งข้อมลู กับภาษา C/C++ การเก็บข้อมูลในโปรแกรม และขัน้ ตอนวธิ ขี องโปรแกรม จะต้องสอดคลอ้ งและไปด้วยกนั ได้ เป็นต้น ดงั นน้ั สามารถสรปุ กระบวนการในการพัฒนาโปรแกรมคอมพวิ เตอร์โดยหลักๆ แลว้ มอี ยู่ดว้ ยกนั 5 ขั้นตอน ดังนี้ 1. การก�ำหนดขอบเขตของปัญหาและความต้องการของผู้ใช้โปรแกรม 2. การออกแบบโปรแกรม ออกแบบขอ้ มลู และการเกบ็ ขอ้ มลู ในโปรแกรม และเขยี น ขัน้ ตอนการท�ำงานของโปรแกรม 3. การเขียนโปรแกรม 4. การทดสอบความถูกต้องของโปรแกรมและจดั ท�ำเอกสารประกอบโปรแกรม 5. การปรับปรุงโปรแกรมใหม้ ีความทันสมยั ขั้นตอนท่ี 1 การก�ำหนดขอบเขตของปญั หาและความต้องการ ของผู้ ใช้ โปรแกรม การก�ำหนดปญั หาและความตอ้ งการของผู้ใช้โปรแกรม เปน็ ขน้ั ตอนทโี่ ปรแกรมเมอร์ จะตอ้ งน�ำโจทยป์ ญั หา (Problem) ส�ำหรบั เขยี นโปรแกรม มาศกึ ษาท�ำความเขา้ ใจกบั ปญั หา เพอ่ื ใหเ้ ขา้ ใจกบั ปญั หา และก�ำหนดขอบเขตของปญั หาโดยท�ำการเกบ็ ความตอ้ งการในการ ใชง้ านโปรแกรมของผู้ใช้ (User Requirement) ถา้ เปน็ โจทยป์ ญั หาทซี่ บั ซอ้ น มผี ู้ใชง้ านเปน็ จ�ำนวนมากและมผี ู้ใชง้ านหลายกลมุ่ โปรแกรมเมอรจ์ ะตอ้ งท�ำการเกบ็ ความตอ้ งการใชง้ าน ของผู้ใชท้ กุ กลมุ่ ก�ำหนดการใช้โปรแกรมของผู้ใชแ้ ต่ละกลมุ่ จากนนั้ จงึ มาก�ำหนดขอบเขต ของโปรแกรม ก�ำหนดการเขา้ ถงึ ขอ้ มลู ทจ่ี ดั เกบ็ ของผู้ใช้ โดยผู้ใชแ้ ตล่ ะกลมุ่ จะเขา้ ถงึ ขอ้ มลู ท่เี กบ็ ไม่เหมอื นกนั และก�ำหนดการใช้โมดูล (Module) การท�ำงานในโปรแกรมไม่เหมือน กนั ด้วย เชน่ ผู้ใช้งานท่ีเป็นผู้จัดการ สามารถเข้าถงึ ขอ้ มูลได้ทั้งหมดในระบบเพราะเปน็ ผู้ที่ มีอ�ำนาจและมีความส�ำคัญมากที่สดุ ในหนว่ ยงาน และสามารถใชง้ านโปรแกรมไดท้ กุ โมดูล ผู้ใชง้ านทเ่ี ปน็ เจา้ หนา้ ทฝ่ี า่ ยขายสามารถเขา้ ถงึ ขอ้ มลู ของลกู คา้ ขอ้ มลู ของสนิ คา้ และขอ้ มลู ท่ี จ�ำเปน็ ส�ำหรบั การขายสนิ คา้ เทา่ นน้ั และสามารถใชง้ านโปรแกรมไดเ้ ฉพาะโมดลู ทเ่ี กย่ี วขอ้ ง กบั สนิ คา้ ลูกคา้ เช่น การเพ่ิมข้อมลู ของลูกคา้ แก้ไขข้อมลู ของลูกคา้ เรยี กดูรายการสนิ คา้ และใช้งานโมดูลที่เก่ียวกับการขายสินค้าเท่าน้ัน ผู้ใช้ท่ีเป็นเจ้าหน้าที่ฝ่ายบุคคล สามารถ เรยี กดขู อ้ มลู พนื้ ฐานของพนกั งานทกุ คนในหนว่ ยงาน สามารถเพมิ่ ขอ้ มลู ของพนกั งานใหมท่ ่ี บรรจเุ ขา้ ท�ำงาน ลบขอ้ มลู ของพนกั งานทลี่ าออกจากหนว่ ยงาน ปรบั ปรงุ เปลย่ี นแปลงขอ้ มลู ของพนักงานให้ถกู ต้องทันสมัยอยูเ่ สมอ จัดการเกยี่ วกบั เงินเดอื น รายได้ และสวสั ดกิ าร

บทท่ี 1 โครงสรา้ งขอ้ มลู กับการพัฒนาโปรแกรม  13 ต่างๆ ของพนักงาน สว่ นการใชง้ านโปรแกรมจะต้องใช้โมดูลของโปรแกรมเฉพาะในส่วน ของการประมวลผลที่เกีย่ วกบั พนกั งานเทา่ น้นั ดงั น้นั ถ้าโปรแกรมเมอร์ไดท้ �ำการวเิ คราะห์ โจทยป์ ญั หาทจ่ี ะเขยี นโปรแกรม เกบ็ รวบรวมการใช้โปรแกรมของผู้ใชง้ าน และก�ำหนดสทิ ธ์ิ ในการเขา้ ถงึ ขอ้ มลู ของพนกั งานในแตล่ ะกลมุ่ ก�ำหนดโมดลู การใชง้ านในโปรแกรมของผู้ใช้ ในแตล่ ะกลมุ่ ไดเ้ ปน็ อยา่ งดี จะได้โปรแกรมทสี่ มบรู ณ์ นา่ เชอื่ ถอื ท�ำงานไดค้ รบทกุ อยา่ งตาม ที่ต้องการ จากนน้ั จึงน�ำผลท่ีไดจ้ ากข้นั ตอนที่ 1 น้ีไปท�ำในข้ันตอนท่ี 2 ตอ่ ไป การทข�ำัน้งาตนอขนอทงี่ โ2ปรกแารกอรอมกแบบโปรแกรมและเขียนขนั้ ตอน การออกแบบโปรแกรมและเขยี นขนั้ ตอนการท�ำงานของโปรแกรม เปน็ ขัน้ ตอนของ การน�ำเอาผลจากข้นั ตอนที่ 1 มาท�ำการออกแบบโปรแกรม การออกแบบการเก็บขอ้ มลู ใน โปรแกรมเรยี กวา่ โครงสรา้ งขอ้ มลู (Data Structure) คดิ คน้ หาวธิ กี ารแกป้ ญั หา (Reasoning) ด�ำเนนิ การหาค�ำตอบ (Solution) ตรวจสอบความถูกต้องของค�ำตอบ (Testing) และเขียน ล�ำดบั ขนั้ ตอนการท�ำงานของโปรแกรมเรียกวา่ ขั้นตอนวิธี (Algorithm) ส�ำหรบั วธิ กี ารออกแบบโปรแกรมวธิ หี นงึ่ ซงึ่ เปน็ วธิ ที นี่ ยิ มใชก้ นั มากคอื วธิ แี บบบน-ลา่ ง (Top Down) การออกแบบโปรแกรมดว้ ยวธิ นี ้ี สามารถท�ำได้โดยท�ำการวิเคราะหป์ ัญหาท่ี จะเขียนโปรแกรมทัง้ หมดแบง่ เป็นปัญหาย่อยๆ แตล่ ะปญั หายอ่ ยเรียกชื่อได้หลายช่อื เชน่ โมดลู หรือฟังก์ชนั (Function) หรือกระบวนค�ำส่ัง (Procedure) หรือกระบวนการ (Pro- cess) และถา้ ปญั หายอ่ ยใด สามารถแบ่งเปน็ ปญั หาย่อยไดอ้ กี ก็ใหแ้ บ่งเปน็ ปญั หาย่อยลง ไปอกี โดยแตล่ ะปญั หายอ่ ยเหลา่ นนั้ จะท�ำงานเปน็ อสิ ระตอ่ กนั อาจจะมกี ารสง่ ขอ้ มลู ระหวา่ ง กนั ก็ได้ จากน้นั ก็ท�ำการเขียนข้นั ตอนวิธี การท�ำงานของแต่ละปัญหาย่อยเขียนเป็นล�ำดับ ตงั้ แตข่ นั้ ตอนแรกถงึ ขนั้ ตอนสดุ ทา้ ย โดยเขยี นเปน็ แบบผงั งาน (Flowchart) หรอื รหสั เทยี ม (Pseudo Code) เป็นขัน้ ตอนวธิ เี ชิงการเขยี นโปรแกรม เพอ่ื ทีจ่ ะน�ำเอาข้นั ตอนนี้ไปเขยี น โปรแกรมค�ำสัง่ ของแต่ละปัญหาย่อย ซง่ึ จะท�ำในข้ันตอนท่ี 3 ต่อไป และโปรแกรมเมอร์ จะต้องออกแบบข้อมลู ทีจ่ ะเก็บในโปรแกรมเรยี กวา่ ขอ้ มลู โครงสรา้ ง (Structured Data) ออกแบบการเกบ็ ขอ้ มลู ในโปรแกรมเรยี กวา่ โครงสร้างข้อมูล ข้นั ตอนที่ 2 นีเ้ ปน็ ข้ันตอนที่ มีความส�ำคัญมาก จะพัฒนาโปรแกรมได้ส�ำเร็จในเวลาอันรวดเร็ว หรือพัฒนาโปรแกรม ไดห้ รอื ไมไ่ ดก้ อ็ ยทู่ ขี่ น้ั ตอนน้ี โปรแกรมเมอรจ์ ะตอ้ งอาศยั ทกั ษะการเขยี นขนั้ ตอนวธิ ี มคี วาม อดทน และเวลาในการท�ำขน้ั ตอนนเี้ ปน็ อย่างมาก หลงั จากท�ำขัน้ ตอนนี้เสร็จแลว้ จะต้องมี การทดสอบการท�ำงานของล�ำดบั ขน้ั ตอนวธิ ี กบั การเกบ็ ขอ้ มลู ที่ไดอ้ อกแบบไวว้ า่ ถกู ตอ้ งหรอื ไมก่ อ่ นทจ่ี ะไปท�ำในขนั้ ตอนที่ 3 ตอ่ ไป

14  โครงสร้างขอ้ มลู กับภาษา C/C++ ขอ้ ดขี องการออกแบบโปรแกรมแบบบน-ลา่ งคือ เมอ่ื จะท�ำการแก้ไขโปรแกรมหรอื ทดสอบการท�ำงานของโปรแกรม กส็ ามารถแก้ไขและทดสอบเฉพาะโปรแกรมยอ่ ยเทา่ นนั้ จะ ไมม่ ผี ลกระทบตอ่ โปรแกรมยอ่ ยอน่ื จงึ ท�ำใหส้ ะดวกตอ่ การตรวจสอบการท�ำงานของโปรแกรม และแก้ไขโปรแกรม สามารถแสดงการออกแบบโปรแกรมแบบบน-ลา่ ง ได้ ดงั รูปที่ 1.1 ระดบั 1 โมดูลหลัก ระดับ 2 โมดูล P1 โมดลู P2 โมดลู P3 ระดบั 3 โมดูล P1.1 โมดูล P2.2 โมดลู P3.1 ระดับ 4 โมดลู P2.2.1 โมดูล P2.2.2 รปู ที่ 1.1 โครงสรา้ งของโปรแกรมทีอ่ อกแบบเปน็ แบบบน-ลา่ ง จากรปู ที่ 1.1 จะไดว้ า่ จากปญั หาทง้ั หมดทจี่ ะเขยี นโปรแกรม ไดท้ �ำการวเิ คราะหแ์ ละ ออกแบบของโปรแกรมให้มโี มดูลทงั้ หมด 9 โมดูล และ 4 ระดบั ดังนี้ ระดบั ที่ 1 ก�ำหนดใหเ้ ปน็ ระดบั ของปญั หาทง้ั หมดซง่ึ เปน็ จดุ เรมิ่ ตน้ ของการวเิ คราะห์ ปัญหา หรอื เรยี กวา่ เป็นส่วนของโมดูลหลกั (Main Module) ระดบั ที่ 2 เปน็ ระดบั ท่ีไดว้ เิ คราะหแ์ ละแบง่ โมดลู ในระดบั ท่ี 1 ออกเปน็ 3 โมดลู ยอ่ ย คอื โมดลู P1 โมดลู P2 และโมดลู P3 ระดบั ท่ี 3 เปน็ ระดบั ท่ีได้แบง่ โมดูลในระดบั ที่ 2 ออกเปน็ โมดูลย่อยอีก จากตัวอยา่ ง จะไดว้ ่าโมดูล P2 ไดถ้ ูกแบง่ ออกเปน็ 2 โมดลู คอื โมดูล P2.2.1 และโมดูล P2.2.2 ส่วน โมดลู P1 และ P3 ถกู แบง่ ออกได้ 1 โมดูลคือโมดูล P1.1 และ P3.1 ตามล�ำดบั ระดับท่ี 4 เป็นโมดูลที่ไดแ้ บ่งโมดลู ในระดบั ที่ 3 ใหเ้ ป็นโมดลู ยอ่ ยได้อกี และจาก ตวั อยา่ งจะไดว้ า่ โมดลู P2.2 ถกู แบง่ ออกเปน็ 2 โมดลู ยอ่ ยคอื โมดลู P2.2.1 และโมดลู P2.2.2

บทท่ี 1 โครงสรา้ งขอ้ มูลกบั การพฒั นาโปรแกรม  15 สว่ นการท�ำงานของโปรแกรมจะไดว้ ่า •• โมดลู P1 โมดูล P2 และโมดลู P3 ถกู เรียกจากโมดลู หลกั •• โมดูล P2.2.1 และโมดูล P2.2.2 ถูกเรยี กจากโมดลู P2.2 •• โมดลู P1.1 ถูกเรยี กจากโมดูล P1 •• โมดูล P3.1 ถูกเรยี กจากโมดูล P3 ตวั อยา่ งท่ี 1.1 ตอ่ ไปนเ้ี ปน็ ตวั อยา่ งของโครงสรา้ งของโปรแกรมจดั การระบบรายช่อื ของผู้ใช้โทรศพั ทข์ องมหาวทิ ยาลยั วลยั ลกั ษณ์ โดยไดว้ เิ คราะหข์ อ้ มลู ของพนกั งานแตล่ ะคน ที่จัดเกบ็ ในโปรแกรม ประกอบไปดว้ ย •• ชอ่ื -นามสกลุ ของพนักงาน •• ต�ำแหนง่ •• หนว่ ยงานที่สงั กดั •• เบอร์โทรศพั ทท์ ท่ี �ำงาน •• เบอร์โทรศัพท์ใกล้เคยี งทีท่ �ำงาน •• เบอร์โทรศัพท์เคลอ่ื นท่ี สามารถแสดงโครงสร้างข้อมูลของพนกั งานที่จะจดั เกบ็ ในโปรแกรมได้ดงั รูปที่ 1.2 ชื่อ-นามสกุล ต�ำแหน่ง หน่วยงาน เบอร์โทรศัพท์ เบอร์โทรศพั ท์ เบอร์โทรศัพท์ ขนาด ขนาด ขนาด ท่ีท�ำงาน ใกล้เคียง เคล่ือนท่ี 20 ตวั อกั ขระ ตัวเลข 4 ตัว 60 ตวั อกั ขระ 50 ตัวอักขระ ตัวเลข 4 ตวั ตวั เลข 10 ตวั รูปท่ี 1.2 ขอ้ มลู โครงสรา้ งพนักงานของมหาวิทยาลัยวลัยลักษณ์ จากขอ้ มูลโครงสร้างดงั กล่าว สามารถพัฒนาโปรแกรมโดยออกแบบโปรแกรมและ การท�ำงานของโปรแกรม ดังนี้ •• ใชช้ ่ือและนามสกลุ ค้นหาเบอร์โทรศัพทข์ องพนักงาน •• ใชห้ นว่ ยงานทส่ี งั กดั หรอื ต�ำแหนง่ หรอื ทง้ั สอง คน้ หาเบอร์โทรศพั ทข์ องพนกั งาน •• ใชเ้ บอร์โทรศพั ทค์ น้ หาชอื่ -นามสกลุ ต�ำแหนง่ และหนว่ ยงานทส่ี งั กดั ของพนกั งาน •• เพ่ิมขอ้ มลู ของพนักงานที่บรรจใุ หม่

16  โครงสร้างข้อมลู กับภาษา C/C++ •• ลบขอ้ มลู ของพนักงานทล่ี าออก เสียชวี ิต หรอื เกษียณอายุราชการ •• เปลี่ยนแปลงขอ้ มูลของพนักงานที่มีการเปล่ียนแปลง เช่น ต�ำแหนง่ หนว่ ยงานที่ สงั กัด และเบอร์โทรศัพท์ เป็นต้น •• พิมพ์ข้อมูลของพนักงานทั้งหมด หรือพิมพ์ข้อมูลของพนักงานเฉพาะหน่วยงาน หรอื พมิ พข์ อ้ มลู ของพนักงานตามต�ำแหนง่ จากทีก่ ล่าวมาท้งั หมดสามารถท�ำการก�ำหนดโมดูลส�ำหรับการท�ำงาน ดังน้ี •• โมดูลส�ำหรับสรา้ งการเก็บข้อมลู •• โมดลู ส�ำหรับท�ำการปรบั ปรุงข้อมลู „„ โมดลู ส�ำหรับการเพ่มิ ขอ้ มูลใหม่ „„ โมดูลส�ำหรบั การลบขอ้ มูลออก „„ โมดลู ส�ำหรบั การเปลี่ยนแปลงข้อมูล •• โมดูลส�ำหรับการค้นหาขอ้ มลู „„ โมดูลการค้นหาโดยใช้ชอื่ และนามสกุล „„ โมดูลการค้นหาโดยใช้ต�ำแหน่งและ/หรอื หน่วยงานทีส่ งั กดั „„ โมดลู การค้นหาโดยใชเ้ บอร์โทรศัพท์ •• โมดลู ส�ำหรบั ท�ำการเรียงขอ้ มลู „„ โมดลู การเรียงล�ำดบั โดยเรียงตามชอ่ื -นามสกลุ „„ โมดูลการเรยี งล�ำดบั โดยเรยี งตามหน่วยงานทีส่ งั กัด „„ โมดูลการเรยี งล�ำดบั โดยเรยี งตามเบอร์โทรศัพท์ •• โมดลู ส�ำหรับพมิ พ์ข้อมลู

บทท่ี 1 โครงสร้างข้อมลู กบั การพัฒนาโปรแกรม  17 และสามารถแสดงโครงสร้างของโปรแกรมดังกลา่ วได้ ดังรปู ที่ 1.3 โปรแกรมจัดการระบบรายชอ่ื ของผู้ใช้ โทรศัพท์ของมหาวิทยาลัยวลัยลักษณ์ สร้างการเก็บ ปรับปรงุ ข้อมลู ค้นหาขอ้ มูล เรียงข้อมูล เพมิ่ ข้อมูล ข้อมลู พมิ พ์ขอ้ มูล ลบขอ้ มลู เปลย่ี นแปลง ข้อมลู ชค่อื ้น-นหาามโสดกยลุ แคลน้ ะห/าหโรดอื ยหตน�ำว่ แยหงนา่งน คน้ หาโดย ทส่ี งั กัด เบอร์โทรศัพท์ เรียงตาม เรยี งตาม เรียงตาม ช่อื -นามสกุล หนว่ ยงานทสี่ งั กดั เบอร์โทรศัพท์ รปู ท่ี 1.3 โครงสรา้ งของโปรแกรมของตัวอยา่ งท่ี 1.1 จากนั้นจึงท�ำการก�ำหนดโครงสร้างข้อมูลที่เหมาะสมส�ำหรับการเก็บข้อมูลของ โปรแกรมดงั กลา่ ว ก�ำหนดความสมั พันธ์ระหว่างหน่วยข้อมูล (Data Element) การปฏิบัติ การกบั ขอ้ มลู ทเี่ กบ็ คดิ หาวธิ กี ารทจี่ ะจดั การกบั ขอ้ มลู เพือ่ ให้ไดค้ �ำตอบ แลว้ จงึ เขยี นขน้ั ตอน วิธีในการท�ำงานของแตล่ ะโมดลู

18  โครงสร้างขอ้ มูลกบั ภาษา C/C++ ขัน้ ตอนท่ี 3 การเขยี นโปรแกรม ขั้นตอนการเขียนโปรแกรมเป็นกระบวนการต้ังแต่การเลือกภาษาคอมพิวเตอร์ท่ี เหมาะสมกับงานที่จะเขียนโปรแกรมแล้วท�ำการเขียนโปรแกรมค�ำสั่งตามขั้นตอนวิธีท่ีได้ เขยี นไว้ในขั้นตอนที่ 2 ดงั น้นั ถา้ ข้ันตอนวิธีที่ได้จากขั้นตอนท่ี 2 เปน็ ข้ันตอนวธิ ที ่ีดจี ะท�ำให้ เขยี นโปรแกรมไดง้ า่ ย คอมพวิ เตอร์ใชเ้ วลานอ้ ยส�ำหรบั ท�ำค�ำสง่ั ในโปรแกรม การปฏบิ ตั กิ าร กับข้อมูลท�ำไดเ้ รว็ และจะส่งผลใหก้ ารปรับปรุงโปรแกรมในข้นั ตอนท่ี 4 และ 5 ท�ำไดง้ า่ ย ดังนั้นจึงจ�ำเป็นอย่างย่ิงส�ำหรับโปรแกรมเมอร์จะต้องท�ำขั้นตอนท่ี 1 ถึง 3 ให้ดีและมี ประสทิ ธภิ าพ เพ่ือชว่ ยใหเ้ ขยี นโปรแกรมไดง้ า่ ย โปรแกรมท่ีได้ใชเ้ วลาท�ำงานนอ้ ย ประหยดั พนื้ ทห่ี นว่ ยความจ�ำส�ำหรบั เกบ็ ขอ้ มลู การอา่ นและบนั ทกึ ขอ้ มลู กบั หนว่ ยความจ�ำท�ำไดส้ ะดวก และรวดเร็ว การคน้ คนื (Retrieve) ท�ำไดร้ วดเร็ว เนอ้ื หาของต�ำราเลม่ นจ้ี ะเนน้ ทางดา้ นโครงสรา้ งขอ้ มลู วธิ กี ารจดั เกบ็ ขอ้ มลู ในโครงสรา้ ง ขอ้ มูลทกี่ �ำหนด และวิธกี ารจดั การกบั ข้อมูลทเ่ี กบ็ ในโครงสร้างข้อมูล ค่มู ือโขปน้ั รตแอกนรมท่ี 4 การทดสอบความถูกตอ้ งของโปรแกรมและจัดท�ำ การทดสอบความถูกต้องของโปรแกรมและจัดท�ำคู่มือโปรแกรมเป็นขั้นตอนของ การทดสอบความถกู ตอ้ งของโปรแกรมทพ่ี ฒั นาขนึ้ จากขน้ั ตอนท่ี 3 เชน่ ทดสอบการท�ำงาน ของแต่ละโมดูล การท�ำงานร่วมกันของโมดูล การรับค่าและส่งค่าระหว่างโมดูล เป็นต้น และถา้ ผลการท�ำงานของโปรแกรมไมถ่ กู ตอ้ ง ใหท้ �ำการแก้ไขใหถ้ กู ตอ้ ง ซง่ึ ความไมถ่ กู ตอ้ ง ของโปรแกรมมีอยดู่ ว้ ยกัน 2 ประเภทคอื 1. ความไมถ่ กู ต้องของรปู แบบค�ำส่งั เรียกว่า ผดิ ไวยากรณ์ (Syntax Error) เป็น ข้อผิดพลาดหรือความไม่ถูกต้องของโปรแกรม ท่ีโปรแกรมเมอร์เขียนค�ำสั่งไม่เป็นไปตาม กฎเกณฑห์ ลกั ไวยากรณข์ องภาษาคอมพวิ เตอร์ เปน็ ขอ้ ผดิ พลาดทแ่ี ก้ไขไดง้ า่ ยเพราะภาษา ทนี่ �ำมาใชเ้ ขยี นโปรแกรมมรี ปู แบบไวยากรณท์ ช่ี ดั เจน เพยี งแตแ่ ก้ไขขอ้ ผดิ พลาดใหถ้ กู ตอ้ ง ตามหลกั ไวยากรณ์ของภาษาคอมพิวเตอร์ท่ีใชเ้ ท่านัน้ 2. ความไมถ่ กู ตอ้ งทเ่ี กดิ จากการท�ำค�ำสงั่ ของคอมพวิ เตอร์ เรยี กวา่ ผดิ ชว่ งด�ำเนนิ งาน (Run-Time Error) เป็นขอ้ ผดิ พลาดที่ไม่ไดข้ ้อมูลออก (Output) ตามทีต่ อ้ งการ อาจ เป็นเพราะล�ำดบั ขั้นตอนของค�ำส่ังในโปรแกรมไม่ถูกต้อง ถา้ เกิดขอ้ ผดิ พลาดชนดิ น้ี แสดง ใหเ้ หน็ วา่ ขนั้ ตอนวธิ ที ี่ไดจ้ ากขนั้ ตอนท่ี 2 ไมถ่ กู ตอ้ ง หรอื ออกแบบโปรแกรมจากขนั้ ตอนท่ี 2 ไม่ถูกต้อง โปรแกรมเมอร์จะต้องกลับไปทบทวนแก้ไขขั้นตอนวิธีและโครงสร้างโปรแกรม

บทท่ี 1 โครงสรา้ งข้อมูลกบั การพฒั นาโปรแกรม  19 ในขั้นตอนท่ี 2 ใหม่อีกครั้งหน่ึง ข้อผิดพลาดที่เกิดจากการท�ำงานผิดน้ีเป็นข้อผิดพลาดท่ี ยากตอ่ การแก้ไข โปรแกรมเมอร์ท่มี ปี ระสบการณ์มากในการพฒั นาโปรแกรม หรือมีทกั ษะ ในการเขียนโปรแกรมมาก สามารถท�ำการแก้ไขหาท่ีผิดได้เร็ว หรือบางคร้ังข้ันตอนวิธีท่ี ไดจ้ ากขั้นตอนที่ 2 ถกู ต้อง แต่โปรแกรมเมอร์เขียนล�ำดบั ค�ำสง่ั ผิดพลาดเองแบบเผอเรอ เป็นข้อผิดพลาดท่ที ราบหลังการท�ำงานของคอมพิวเตอร์ แต่ไม่ผิดในข้อผดิ พลาดแบบผิด ไวยากรณต์ ามข้อ 1 ตวั อยา่ งเช่น ก�ำหนดขัน้ ตอนวิธีส�ำหรบั การหาผลรวมของเลขจ�ำนวน เต็มบวกตั้งแต่ 1 ถึง n ดงั นี้ 1. sum := 0 2. i := 1 3. input n 4. while i ≤ n do begin 4.1 sum := sum + i 4.2 i := i + 1 end 5. output sum 6. stop จากขน้ั ตอนวธิ ดี งั กลา่ วสามารถน�ำมาเขยี นเปน็ โปรแกรมค�ำสง่ั ดว้ ยภาษา C/C++ ดงั น้ี #include<stdio.h> void main(void) { int n,i,sum; scanf(\"%d\",&n); sum = 0; for (i = 1; i <= n; i++); sum = sum + i printf(\"%d\",sum); } และจากข้ันตอนวิธีดังกล่าวเมื่อน�ำมาเขียนเป็นโปรแกรมค�ำสั่งด้วยภาษา C/C++ ใหม่ ดงั นี้ #include<stdio.h> void main(void) { int n,i,sum; scanf(\"%d\",&n); sum = 0; for (i = 1; i <= n; i++); sum = sum + i; printf(\"%d\",sum); }

20  โครงสร้างขอ้ มลู กบั ภาษา C/C++ จากโปรแกรมดังกล่าวไมม่ ขี ้อผดิ พลาดผดิ ไวยากรณข์ องขอ้ 1 และเป็นโปรแกรมท่ี เขยี นตามขนั้ ตอนวธิ ที กี่ �ำหนดทกุ ประการ ทกุ ครงั้ ของการใหค้ อมพวิ เตอรท์ �ำโปรแกรม และ ไมว่ า่ จะปอ้ นขอ้ มลู เขา้ เปน็ จ�ำนวนเทา่ ไรกต็ าม ไมไ่ ดผ้ ลรวมของตวั เลขตง้ั แต่ 1 ถงึ จ�ำนวนนนั้ แตจ่ ะได้ขอ้ มลู ออกเท่ากบั คา่ ทมี่ ากกว่าข้อมูลเข้าอยู่ 1 เสมอ เช่น ข้อมลู เขา้ คือ 5 ข้อมลู ออกคอื 6 แทนท่จี ะเป็น 15 หรือถ้าข้อมูลเข้าคือ 10 จะไดข้ อ้ มูลออกคือ 11 แทนท่จี ะได้ 55 เป็นต้น น่ันก็ไม่ได้หมายความว่าข้ันตอนวิธีท่ีเขียนข้างต้นไม่ถูกต้อง และโปรแกรมที่ เขยี นกเ็ ขยี นตามขน้ั ตอนวธิ ี แตโ่ ปรแกรมเมอรเ์ ผอเรอใสเ่ คร่ืองหมายอฒั ภาค (;) หลงั ค�ำสง่ั for คอื for (i = 1; i <= n; i++); จงึ ท�ำใหล้ �ำดบั ขนั้ ตอนการท�ำงานในโปรแกรมผดิ ทนั ที ซง่ึ ข้อผิดพลาดแบบน้แี ก้ไขไดย้ ากมาก และในการทดสอบความถูกต้องของโปรแกรม ถ้าเป็นโปรแกรมท่ีมีความซับซ้อน มีหลายโมดูล จะต้องทดสอบการท�ำงานทุกโมดูล และทดสอบการเรียกใช้ระหว่างโมดูล และถา้ แตล่ ะโมดลู เขียนด้วยภาษาคอมพิวเตอร์ทีต่ า่ งกนั จะต้องทดสอบความถกู ต้องของ การเขา้ กันของแตล่ ะโมดลู หลงั จากโปรแกรมถกู ตอ้ งแลว้ โปรแกรมเมอรจ์ ะตอ้ งจดั ท�ำคมู่ อื โปรแกรม 2 ชดุ ดงั น้ี ชดุ ท่ี 1 เป็นคูม่ ืออธบิ ายวธิ กี ารใช้โปรแกรมเรียกว่า เอกสารส�ำหรับผู้ใช้โปรแกรม (User Documentation) คู่มอื น้นี �ำมาใช้เปน็ สว่ นประกอบในการใช้งานโปรแกรม เนอ้ื หาในค่มู ือ ชดุ ที่ 1 นอี้ ธบิ ายวธิ กี ารใชง้ านโปรแกรมทกุ ๆ หนา้ จอของโปรแกรม ชดุ ที่ 2 เปน็ คมู่ อื อธบิ าย โปรแกรมเรยี กวา่ เอกสารประกอบโปรแกรม (Program Documentation) เปน็ คมู่ อื ส�ำหรบั โปรแกรมเมอร์ไดน้ �ำมาศกึ ษาทบทวนในรายละเอยี ดของโปรแกรม ส�ำหรบั น�ำมาใช้ในขนั้ ตอน ท่ี 5 ต่อไป ดังน้นั เนอื้ หารายละเอียดของเอกสารประกอบโปรแกรมน้ีจะอธิบายโครงสร้าง ของโปรแกรม โมดูลในโปรแกรม ตัวแปรทีส่ �ำคญั ๆ ขน้ั ตอนวธิ ีของโปรแกรม และขั้นตอน วธิ ขี องโมดลู ตา่ งๆ เป็นต้น ข้ันตอนที่ 5 การปรับปรงุ โปรแกรมใหม้ คี วามทนั สมยั โปรแกรมทกุ โปรแกรมเมอ่ื ถกู น�ำมาใชง้ านในชวี ติ ประจ�ำวนั จรงิ ๆ ไดส้ กั ระยะหนงึ่ จะมี ความลา้ สมยั ดงั นนั้ จะตอ้ งมกี ารปรบั ปรงุ เปลย่ี นแปลงโปรแกรมดงั กลา่ วใหม้ คี วามทนั สมยั เพือ่ ใหก้ ารท�ำงานมปี ระสทิ ธภิ าพและศกั ยภาพมากขน้ึ หรอื บางครงั้ อาจจะมกี ารปรบั ปรงุ เพม่ิ เตมิ ระบบงาน กจ็ ะตอ้ งมาปรบั ปรงุ โปรแกรมดว้ ย โดยโปรแกรมเมอรจ์ ะตอ้ งศกึ ษาโครงสรา้ ง ของโปรแกรมและรายละเอียดต่างๆ ของโปรแกรมที่จะปรับปรุงได้ โดยศึกษาโครงสร้าง ของโปรแกรมจากเอกสารประกอบโปรแกรมท่ีได้จดั ท�ำไว้ในข้นั ตอนที่ 4

บทท่ี 1 โครงสร้างขอ้ มูลกบั การพฒั นาโปรแกรม  21 จะเหน็ ได้วา่ ทุกๆ ขัน้ ตอนของกระบวนการพัฒนาโปรแกรมมคี วามส�ำคญั มาก ขาด ขน้ั ตอนใดขน้ั ตอนหนง่ึ ไมไ่ ด้ และผลท่ีไดจ้ ากแตล่ ะขนั้ ตอนจะน�ำไปใช้ในขนั้ ตอนตอ่ ไปเสมอ และถา้ ผลที่ไดข้ องบางขน้ั ตอนไมถ่ กู ตอ้ ง จะตอ้ งยอ้ นกลบั มาศกึ ษาทบทวนขนั้ ตอนกอ่ นหนา้ ทกุ ครัง้ เป็นตน้ ขัน้ ตอนวธิ ี ข้ันตอนวิธีเป็นล�ำดับข้ันตอนของการแก้ปัญหาหรือเป็นล�ำดับข้ันตอนการท�ำงาน ส�ำหรับแกป้ ัญหา โดยมกี ารปฏิบัติการเป็นล�ำดบั ขั้นตอน ตัง้ แต่เรมิ่ ต้นจนกระทงั่ ไดผ้ ลลพั ธ์ ตามต้องการ ซึ่งเปน็ เรอ่ื งทสี่ �ำคญั เปน็ อย่างยิ่งของการเขียนโปรแกรม โดยเฉพาะอย่างยง่ิ กอ่ นทโ่ี ปรแกรมเมอรจ์ ะเขยี นโปรแกรมคอมพวิ เตอร์ โปรแกรมเมอรจ์ ะตอ้ งเขยี นขนั้ ตอนวธิ ี ของปัญหาที่จะเขียนโปรแกรมกอ่ น แลว้ จงึ มาเขียนโปรแกรมตามข้นั ตอนวิธีท่เี ขยี น การแสดงล�ำดับข้ันตอนวธิ อี าจจะใช้ผงั งาน หรือเขยี นเปน็ ภาษาเขียนเรยี กว่า รหัส เทยี ม การเขยี นล�ำดบั ขน้ั ตอนวธิ สี �ำหรบั แกป้ ญั หากน็ บั วา่ เปน็ เรอ่ื งทส่ี �ำคญั เปน็ อยา่ งยงิ่ ของ การเขียนโปรแกรมคอมพิวเตอร์เพราะถ้าไม่สามารถเขียนข้ันตอนวิธีได้แล้ว ก็ไม่สามารถ เขียนโปรแกรมได้ ต่อไปนี้เป็นตัวอย่างของล�ำดับขั้นตอนวิธีท่ีเป็นรหัสเทียมส�ำหรับแสดงข้ันตอนการ ท�ำงานต่างๆ ดงั น้ี ตัวอย่างที่ 1.2 Algorithm Greatest Greatest เป็นขั้นตอนวิธีของการหาจ�ำนวนท่ีมีค่าที่มากท่ีสุดจากจ�ำนวนท้ังหมด N จ�ำนวน ท่ีเกบ็ อยู่ทีแ่ ถวล�ำดับ V จ�ำนวนท่มี ากทีส่ ดุ ทีห่ ามาได้นีจ้ ะเกบ็ อย่ทู ีต่ วั แปร Max โดย ก�ำหนดตวั แปรในขน้ั ตอนวิธี ดังน้ี V เปน็ ตัวแปรแถวล�ำดับเก็บจ�ำนวนทีจ่ ะหาค่าท่ีมากทสี่ ดุ ที่มีสมาชกิ ทงั้ หมด N จ�ำนวน Max เป็นตัวแปรท่ีเก็บคา่ ท่มี ากที่สุด i เปน็ ตัวแปรท่ีเก็บต�ำแหนง่ ของขอ้ มูลของตัวแปร V 1. if N < 1 then /* ตรวจสอบว่าแถวลำ� ดบั มขี ้อมูลหรือไม่ */ begin 1.1 output \"Empty Vector\" 1.2 go to 5 end

22  โครงสรา้ งข้อมูลกับภาษา C/C++ 2. MAX := V[1] /* ก�ำหนดให้ V[1] เป็นสมาชิกที่มคี ่าทีม่ ากทีส่ ุด */ 3. i := 2 4. while i ≤ N do begin /* เปล่ียนค่า MAX เมื่อ MAX มคี า่ น้อยกว่าสมาชิกตวั ถดั ไปในแถวลำ� ดบั */ 4.1 if MAX < V[i] Then 4.1.1 MAX := V[i] /* เพ่ิมค่าของดชั นีของแถวล�ำดับเพ่อื ชีไ้ ปยังสมาชกิ ตวั ถดั ไป */ 4.2 i := i + 1 end 5. stop /* จบการท�ำงาน */ ตวั อยา่ งที่ 1.3 Algorithm Sum-values Sum-values เป็นข้ันตอนวิธีของการหาผลรวมของเลขจ�ำนวนท้ังหมด โดยก�ำหนด ตัวแปรในขั้นตอนวิธี ดังน้ี N เปน็ ตัวแปรทเี่ กบ็ จ�ำนวนของเลขจ�ำนวนที่เก็บอยู่ในแถวล�ำดับ V หรอื ขนาด ของแถวล�ำดับ V V เป็นตัวแบบแถวล�ำดบั ทีม่ ีเลขจ�ำนวนทง้ั หมด N จ�ำนวน i เป็นตัวแปรที่เก็บต�ำแหน่งของข้อมูลของตัวแปร V sum เป็นตวั แปรทีเ่ กบ็ ผลรวมของเลขจ�ำนวนในแถวล�ำดับ V ทง้ั หมด น่ันคือ sum = V[1] + V[2] + V[3] + . . . + V[N] 1. sum := 0 /* ก�ำหนดค่าตั้งต้นของ sum ให้เทา่ กับ 0 */ 2. i := 1 3. while i ≤ N do begin 3.1 sum := sum + V [i] 3.2 i := i + 1 end 4. stop ตัวอยา่ งท่ี 1.4 Algorithm Counter Counter เป็นข้ันตอนวิธีของการนับจ�ำนวนของเลขจ�ำนวนบวกและจ�ำนวนของ เลขจ�ำนวนลบทเ่ี ก็บอยู่ในแถวล�ำดบั โดยก�ำหนดตวั แปรในข้นั ตอนวธิ ี ดังน้ี AllNumber เป็นตวั แปรแถวล�ำดบั ท่ีเก็บจ�ำนวนทงั้ หมด มขี นาด N จ�ำนวน PositiveNum เป็นตัวแปรท่เี ก็บจ�ำนวนของเลขจ�ำนวนบวกในแถวล�ำดบั AllNumber

บทที่ 1 โครงสร้างข้อมูลกบั การพัฒนาโปรแกรม  23 NegativeNum เปน็ ตวั แปรทเี่ กบ็ จ�ำนวนของเลขจ�ำนวนลบในแถวล�ำดบั AllNumber i เปน็ ตวั แปรท่ีเป็นดชั นี 1. PositiveNum := 0 2. NegativeNum := 0 3. i := 1 4. while i ≤ N do begin 4.1 if AllNumber[i] > 0 then 4.1.1 PositiveNum := PositiveNum + 1 else if AllNumber < 0 then 4.1.2 NegativeNum := NegativeNum + 1 4.2 i := i + 1 end 5. stop ตัวอย่างที่ 1.5 Algorithm Matrix-Multiplication Matrix-Multiplication เปน็ ขนั้ ตอนวธิ ขี องการหาผลคณู ของเมทรกิ ซท์ มี่ ขี นาด N x N โดยก�ำหนดตัวแปรในขนั้ ตอนวธิ ี ดังนี้ A, B เป็นตวั แปรทเี่ ปน็ เมทรกิ ซ์จัตรุ สั ขนาด N x N โดยที่ A เป็นเมทรกิ ซต์ ัวต้ัง B เป็นเมทริกซต์ วั คูณ C เป็นตัวแปรทีเ่ ปน็ เมทริกซจ์ ตั ุรัสเกบ็ ผลคูณของเมทรกิ ซ์ A และ B i, j, k เป็นตวั แปรท่ีเปน็ แถวและสดมภข์ องเมทริกซ์ 1. for i := 1 to N do for j := 1 to N do 1.1 Sum := 0 1.2 for k := 1 to N do Sum := Sum + A [i,k] x B [k,j] 1.3 C[i,j] := Sum 2. Stop ตัวอยา่ งที่ 1.6 Algorithm GCD GCD เปน็ ขนั้ ตอนวธิ ขี องการปอ้ นขอ้ มลู เปน็ เลขจ�ำนวนเตม็ บวก 2 จ�ำนวน แลว้ ใหห้ า ตัวหารรว่ มมาก (ห.ร.ม) ของ 2 จ�ำนวนดังกลา่ ว โดยก�ำหนดตวั แปร ดังนี้ n1 คอื ตวั แปรที่เกบ็ จ�ำนวนท่หี นง่ึ ท่ีจะหาตัวหารรว่ มมาก n2 คือตัวแปรที่เกบ็ จ�ำนวนที่สองทีจ่ ะหาตวั หารร่วมมาก gcd คอื ตัวแปรทีเ่ กบ็ ตวั หารร่วมมากของ n1 กับ n2

24  โครงสรา้ งขอ้ มลู กบั ภาษา C/C++ 1. input n1, n2 2. while n1 ≠ n2 do begin 2.1 if n1 > n2 then 2.1.1 n1 := n1 - n2 else 2.2.2 n2 := n2 – n1 end 3. gcd := n1 4. output gcd 5. stop หรืออาจจะเขียนข้นั ตอนวธิ ีไดอ้ ีกแบบ คอื 1. input n1, n2 2. r := n1 mod n2 3. while r ≠ 0 do begin 3.1 n1 := n2 3.2 n2 := r 3.3 r := n1 mod n2 end 4. gcd := n 5. output gcd 6. stop หมายเหตุ mod คือการหารหาเศษของการหาร ตวั อย่างที่ 1.7 Algorithm Search Search เป็นข้ันตอนวิธีของการค้นหาค่าของ X จากค่าที่เก็บอยใู่ นแถวล�ำดับโดย ก�ำหนดตัวแปร ดงั น้ี V เปน็ ตัวแปรทีเ่ ปน็ แถวล�ำดับมสี มาชกิ ท้ังหมด N ตวั X เป็นตัวแปรท่ีเกบ็ คา่ ทีต่ อ้ งการหาใน V found เป็นตัวแปรแบบตรรกะที่เก็บค่า TRUE หรือ FALSE ถ้าการค้นหาพบ ค่า X ใน V จะก�ำหนดให้ตัวแปร found มีคา่ เปน็ TRUE และถา้ ไม่พบจะ ก�ำหนดให้ตวั แปร found มคี า่ เปน็ FALSE location เปน็ ตวั แปรทเี่ กบ็ ต�ำแหน่งท่ีพบคา่ X ในแถวล�ำดบั V

บทที่ 1 โครงสร้างข้อมลู กับการพัฒนาโปรแกรม  25 1. found := FALSE 2. i := 1 3. while (i ≤ N and Not found) do 3.1 if X = V[i] Then begin 3.1.1 found := TRUE 3.1.2 location := i end else 3.1.3 i := i + 1 4. stop ตวั อยา่ งที่ 1.8 Algorithm Prime-number Prime-number เป็นขนั้ ตอนวิธขี องการปอ้ นขอ้ มูลเข้าเลขจ�ำนวนเต็มบวก N แล้ว ท�ำการทดสอบวา่ เลขจ�ำนวนดังกล่าวเป็นจ�ำนวนเฉพาะหรอื ไมโ่ ดยก�ำหนดตัวแปร ดังนี้ N เปน็ ตวั แปรทเ่ี กบ็ เลขจ�ำนวนทเ่ี ปน็ ขอ้ มลู เขา้ ส�ำหรบั ทดสอบวา่ เปน็ จ�ำนวนเฉพาะ div เป็นการหารท่ปี ดั เศษทง้ิ 1. input N /* N เปน็ จ�ำนวนเตม็ บวก */ 2. M := 2 3. while M ≤ N do begin 3.1 NUM := N div M * M 3.2 if NUM = N then begin 3.2.1 output \"N ไมเ่ ปน็ จำ� นวนเฉพาะ\" 3.2.2 go to 5 end 3.3 M := M + 1 end 4. output \"N เป็นจ�ำนวนเฉพาะ\" 5. stop ขอ้ มลู และการแทนข้อมลู ข้อมูล (Data) หมายถึง ข้อมูลท่ีได้รวบรวมแล้วน�ำมาจัดเตรียมเพ่อื ให้สามารถน�ำ ไปจดั เก็บและประมวลผลในคอมพวิ เตอร์ได้ ส่วนผลท่ีได้จากการประมวลผลแลว้ น�ำมาใช้ ประโยชนต์ า่ งๆ เรยี กวา่ สารสนเทศ (Information) อาจจะแสดงสารสนเทศในรปู ของตาราง แผนภมู หิ รอื กราฟ เพอ่ื ใหบ้ คุ คลทว่ั ไปสามารถอา่ นเขา้ ใจไดง้ า่ ย สามารถแสดงความสมั พนั ธ์ ของข้อมูลกบั สารสนเทศได้ ดังรูปท่ี 1.4

26  โครงสร้างขอ้ มลู กับภาษา C/C++ ข้อมูล ประมวลผลดว้ ยคอมพวิ เตอร์ สารสนเทศ รูปท่ี 1.4 ความสมั พนั ธร์ ะหว่างข้อมลู กบั สารสนเทศ ขอ้ มูลที่ใชป้ ระมวลผลกับคอมพิวเตอร์มี 2 ประเภท คอื 1. ขอ้ มลู มลู ฐาน (Elementary Data) เปน็ ขอ้ มลู ทมี่ ขี นาดทเ่ี ลก็ ทสี่ ดุ ทนี่ �ำมาใชป้ ระมวล ผลในคอมพิวเตอร์ เรยี กข้อมูลมลู ฐานว่า เขตขอ้ มลู (Field) ซึ่งมอี ยดู่ ้วยกัน 2 ชนดิ คอื ก. ข้อมูลมูลฐานที่มีความหมายเชิงปริมาณ (Numeric Data) เป็นข้อมูลท่ีเป็น เลขจ�ำนวนที่สามารถน�ำมาใช้ค�ำนวณทางคณิตศาสตร์ได้ อาจจะเป็นจ�ำนวนเต็มหรือเป็น จ�ำนวนทศนิยม ไดแ้ ก่ ความสงู ของนักศึกษา ราคาสนิ ค้า จ�ำนวนของสนิ ค้า จ�ำนวนของ ลกู ค้า และคะแนนสอบของนักศึกษาทเี่ รียนวชิ าการเขียนโปรแกรมคอมพิวเตอร์ เป็นต้น ข. ขอ้ มลู มลู ฐานท่ีไม่มคี วามหมายเชงิ ปริมาณ (Non-numeric Data) เปน็ ข้อมูลที่ เปน็ ตวั อกั ขระตวั เดยี วหรอื มากกวา่ หนงึ่ ตวั ไมส่ ามารถน�ำมาค�ำนวณทางคณติ ศาสตร์ได้ เชน่ ชือ่ นักศกึ ษา (มขี นาด 60 ตัวอักขระ) ช่ือสนิ คา้ (มขี นาด 50 ตัวอกั ขระ) หรือรหัสสนิ คา้ (มีขนาด 6 ตวั อกั ขระ) เป็นต้น 2. ขอ้ มลู โครงสรา้ ง เปน็ ขอ้ มลู ทปี่ ระกอบดว้ ยขอ้ มลู มลู ฐานตง้ั แตส่ องหนว่ ยขนึ้ ไปที่ มคี วามสมั พนั ธก์ นั ในเชงิ ตรรกะ เรยี กขอ้ มลู ชนดิ นว้ี า่ ระเบยี นขอ้ มลู (Record) หรอื เรยี กวา่ โหนด (Node) เช่น ระเบียนขอ้ มูลของนักศกึ ษา จะประกอบดว้ ยขอ้ มูลมูลฐานดงั นี้ 1. รหัสนักศึกษา 2. ชอ่ื -นามสกุล 3. อายุ 4. เพศ 5. ทีอ่ ยู่

บทที่ 1 โครงสรา้ งขอ้ มลู กับการพฒั นาโปรแกรม  27 สามารถแสดงขอ้ มลู โครงสรา้ งของขอ้ มูลนักศกึ ษาไดร้ ปู ท่ี 1.5 รหสั นกั ศึกษา ชอ่ื -นามสกลุ อายุ เพศ ที่อยู่ ระเบียนข้อมลู หรอื โหนด ข้อมลู มลู ฐานหรือเขตขอ้ มลู รปู ที่ 1.5 โครงสรา้ งการเก็บข้อมูลแบบโครงสรา้ งของนักศกึ ษา จากรปู ที่ 1.5 จะได้ว่าข้อมลู ของนกั ศกึ ษาเปน็ ขอ้ มลู โครงสรา้ งหนง่ึ หนว่ ยข้อมูล ซงึ่ ประกอบด้วยข้อมูลมูลฐาน 5 เขตข้อมูล โดยมีอายุเป็นข้อมูลมูลฐานที่มีความหมายเชิง ปริมาณ ส่วนข้อมูลมูลฐานท่ีไม่มีความหมายเชิงปริมาณคือ รหัสนักศึกษา ช่อื -นามสกุล เพศ และทอ่ี ยู่ และสามารถก�ำหนดขอ้ มลู โครงสรา้ งยอ่ ยในขอ้ มลู โครงสรา้ งไดอ้ กี จากรปู ท่ี 1.5 สามารถก�ำหนดท่ีอยู่เป็นข้อมูลมูลฐานได้อีกดังน้ีคือ บ้านเลขท่ี ถนน ต�ำบล อ�ำเภอ จังหวัด และรหัสไปรษณีย์ สามารถแสดงไดด้ งั รปู ที่ 1.6 รหัส ช่ือ- สกุล อายุ เพศ ทอ่ี ยู่ บา้ นเลขที่ ถนน ต�ำบล อ�ำเภอ จงั หวัด รหสั ไปรษณยี ์ รูปท่ี 1.6 โครงสรา้ งการเก็บขอ้ มูลแบบโครงสร้างซ้อนโครงสร้างของนกั ศึกษา สรุป จากเนอ้ื หาท่ีไดก้ ลา่ วมาแลว้ ตงั้ แตต่ อนตน้ ของบทท่ี 1 สามารถสรปุ ไดว้ า่ ในการพฒั นา โปรแกรมคอมพิวเตอร์ ผู้พัฒนาจะต้องรู้จักวางแผนในการพัฒนาโปรแกรมคอมพิวเตอร์ โดยจะตอ้ งพัฒนาตามข้ันตอนทัง้ 5 ขั้นตอนตามล�ำดบั คอื 1. การก�ำหนดปัญหาและความต้องการของผู้ใช้โปรแกรม 2. การออกแบบโปรแกรม ออกแบบการเก็บข้อมูลในโปรแกรม และเขียนขั้นตอน การท�ำงานของโปรแกรม 3. การเขียนโปรแกรม

28  โครงสรา้ งขอ้ มูลกบั ภาษา C/C++ 4. การทดสอบความถกู ต้องของโปรแกรมและจดั ท�ำเอกสารประกอบโปรแกรม 5. การปรบั ปรงุ โปรแกรมใหม้ ีความทันสมัย โดยเฉพาะในขั้นตอนที่ 2 ผู้พัฒนาจะต้องออกแบบข้อมูลท่ีจะเก็บในคอมพิวเตอร์ เรียกวา่ ออกแบบขอ้ มูลโครงสร้าง จากนัน้ ผพู้ ัฒนาจะต้องเลือกวธิ ีการในการเก็บขอ้ มลู ใน หนว่ ยความจ�ำส�ำหรบั เขยี นโปรแกรมปฏบิ ตั กิ ารได้ เรยี กวา่ โครงสรา้ งขอ้ มลู และนอกจากนี้ ผพู้ ฒั นาจะตอ้ งเขยี นขนั้ ตอนวธิ สี �ำหรบั การจดั การกบั ขอ้ มลู ตง้ั แตน่ �ำขอ้ มลู ไปเกบ็ ในโครงสรา้ ง ข้อมลู ทก่ี �ำหนด เขา้ ถงึ ข้อมูล (Access) ทเ่ี ก็บอยู่ในโครงสรา้ งขอ้ มูลมาประมวลผล แล้วจึง พัฒนาค�ำสั่งของโปรแกรมตามข้ันตอนวิธีและโครงสร้างข้อมูลตามท่ีก�ำหนด ท้ังนี้จะต้อง ค�ำนึงถงึ สง่ิ ตอ่ ไปน้ี 1. ข้อมูลท่ีเก็บในคอมพวิ เตอรม์ ีความซ�ำ้ ซ้อนนอ้ ยที่สุด เข้าถึงขอ้ มูลไดเ้ รว็ 2. ประหยัดพ้นื ท่ีในหนว่ ยความจ�ำมากทีส่ ุด 3. โปรแกรมทีเ่ ขยี นตามขั้นตอนวธิ ีใชเ้ วลานอ้ ยทีส่ ุด ดังน้ันถ้าโปรแกรมเมอร์ออกแบบโปรแกรม ออกแบบข้อมูลที่จะเอาไปประมวลผล ในโปรแกรม ออกแบบการเกบ็ ขอ้ มูลในโปรแกรม และเขยี นข้ันตอนวธิ ขี องโปรแกรม จะ ท�ำใหพ้ ฒั นาโปรแกรมได้งา่ ยและเร็ว ได้โปรแกรมท่ีดี โปรแกรมท�ำงานมีประสิทธภิ าพ ใช้ หน่วยความจ�ำน้อยส�ำหรับการเก็บข้อมูล ข้อมูลท่ีเก็บไม่ซ�้ำซ้อน และสามารถปรับปรุงให้ โปรแกรมทนั สมยั ไดง้ ่ายตอ่ ไป

บทที่ 1 โครงสร้างข้อมลู กับการพัฒนาโปรแกรม  29 ค�ำถามท้ายบทที่ 1 1. จงอธบิ ายกระบวนการในการพฒั นาโปรแกรมคอมพวิ เตอร์ 2. จงอธบิ ายการออกแบบโปรแกรมแบบบน-ล่าง 3. โปรแกรมย่อยกับโมดลู แตกตา่ งกนั หรอื เหมอื นกนั อยา่ งไร 4. ขั้นตอนวธิ คี อื อะไร 5. จงเขียนข้นั ตอนวิธขี องการหาผลบวกของเลขคู่ ตัง้ แต่ 1 ถงึ 100 6. จงเขยี นขน้ั ตอนวธิ ขี องการหาผลบวกของเลขค่ี ระหว่าง 1 ถงึ N เมอื่ N เปน็ เลขค่ี และ 1 ถึง N – 1 เมอ่ื N เป็นเลขคู่ โดยค่า N เป็นขอ้ มูลเข้า 7. จงอธิบายข้อมลู และสารสนเทศ 8. จงอธิบายขอ้ มลู ที่จะน�ำมาประมวลผลด้วยคอมพิวเตอร์ 9. จงอธบิ ายขอ้ มลู มลู ฐาน และยกตวั อยา่ งขอ้ มลู ทเี่ ปน็ ขอ้ มลู มลู ฐานมาอยา่ งนอ้ ย 5 ตวั อยา่ ง 10. จงอธิบายข้อมูลโครงสร้าง และยกตัวอย่างข้อมูลที่เป็นข้อมูลโครงสร้างมาอย่างน้อย 5 ตวั อยา่ ง 11. จงเขยี นขนั้ ตอนวิธขี องการสลับเลขจ�ำนวนเตม็ 2 จ�ำนวน 12. เมื่อท�ำการโยนลกู บอลขน้ึ กลางอากาศ ลกู บอลจะตกลงมากระทบพนื้ แลว้ กระดอนขนึ้ อกี และถา้ ทกุ ครงั้ ทล่ี กู บอลกระดอนขน้ึ จะขนึ้ ตำ�่ กวา่ ต�ำแหนง่ ทก่ี ระดอนขน้ึ กอ่ นหนา้ นี้ 0.15 เมตร จงเขยี นขนั้ ตอนวธิ ี โดยก�ำหนดขอ้ มลู เขา้ คอื คา่ ความสงู ครง้ั แรกทโ่ี ยนลกู บอลจาก พื้น แลว้ จงหาว่า ก. ระยะทางทลี่ กู บอลเคล่อื นที่ทัง้ หมดกีเ่ มตร ข. จ�ำนวนคร้ังท่ีลูกบอลกระดอนขึ้นกี่ครงั้

30  โครงสร้างข้อมูลกับภาษา C/C++ 13. เดก็ ชายสดุ หลอ่ พอ่ รวย เปน็ เดก็ นกั เรยี นชนั้ ป.2 เขาไดต้ งั้ ขอ้ สงั เกตวา่ ถา้ จะหาผลคณู ของเลข 2 จ�ำนวน สามารถหาได้โดยการน�ำเอาตวั ตงั้ มาบวกกนั ซำ้� ๆ เทา่ กบั จ�ำนวนของ ตวั คูณกจ็ ะได้ผลคูณ เช่น ถา้ จะหาผลคณู ของ 2 x 3 นั่นคอื จะต้องเอา 2 มาบวกเขา้ ด้วยกัน 3 คร้งั ผลบวกก็คือผลคูณของเลขทั้งสองจ�ำนวนดงั กลา่ ว จากวธิ กี ารคณู ของ เดก็ ชายสดุ หล่อดงั กล่าว จงเขยี นข้นั ตอนวธิ ีส�ำหรบั อา่ นเลขจ�ำนวนเต็มบวก 2 จ�ำนวน และใหแ้ สดงผลคูณของเลข 2 จ�ำนวนดงั กลา่ ว 14. เด็กหญงิ รกั เรยี น ไม่เรยี นรกั เป็นนกั เรียนชัน้ ป.3 เขาสามารถหาผลหารของเลข 2 จ�ำนวนดว้ ยวธิ เี อาตวั หารไปลบกบั ตวั ตงั้ จนกวา่ ตวั หารจะมคี า่ มากกวา่ ตวั ตง้ั และผลที่ได้ จะไดว้ า่ จ�ำนวนครง้ั ของการลบคอื ผลหารและผลลบครง้ั สดุ ทา้ ยคอื เศษท่ีไดจ้ ากการหาร จากวธิ กี ารหารของเดก็ หญงิ รกั เรยี นดงั กลา่ ว จงเขยี นขนั้ ตอนวธิ สี �ำหรบั อา่ นเลขจ�ำนวน เตม็ บวก 2 จ�ำนวนและใหแ้ สดงผลหารและเศษจากการหารของเลข 2 จ�ำนวนดงั กลา่ ว 15. ถ้าต้องการเชา่ รถยนตห์ น่งึ คันเพ่อื ตอ้ งการขับออกจากเมือง A ไปยังเมอื งต่างๆ โดย รถยนต์แต่ละคันจะมีความจุของถังน้�ำมันและอัตราการสิ้นเปลืองต่างกัน ให้เขียน ขน้ั ตอนวธิ ที อี่ า่ นความจขุ องถงั น้�ำมนั (ลติ ร) และอตั ราการสนิ้ เปลอื งน้�ำมนั (ก.ม./ลติ ร) ของรถยนตท์ เี่ ชา่ มาและหาวา่ รถคนั นวี้ งิ่ ไดถ้ งึ เมอื งใดและใหแ้ สดงช่อื เมอื งทว่ี ง่ิ ถงึ โดย ก�ำหนดระยะทางระหว่างเมืองตา่ งๆ ดงั นี้ ระยะทางระหวา่ งเมอื ง A กับเมือง B หา่ งกัน 100 กม. ระยะทางระหว่างเมือง B กบั เมือง C ห่างกนั 150 กม. ระยะทางระหวา่ งเมอื ง C กบั เมือง D หา่ งกนั 250 กม. เชน่ ถา้ รถยนตท์ เ่ี ชา่ มามคี วามจขุ องถงั นำ�้ มนั 10 ลติ ร และอตั ราการสน้ิ เปลอื งนำ�้ มนั 17 กม./ลิตร แสดงวา่ รถคนั นว้ี งิ่ ได้ถงึ เมือง B 16. จงเขยี นขน้ั ตอนวธิ โี ดยก�ำหนดขอ้ มลู เขา้ คอื เลขจ�ำนวนเตม็ บวกสองจ�ำนวน แลว้ ใหห้ า ตวั หารรว่ มมากของสองจ�ำนวนดงั กลา่ วพร้อมทงั้ แสดงผลบนจอภาพ ดงั น้ี Greatest Commond Division of ... and ... is …

บทท่ี 1 โครงสรา้ งข้อมูลกับการพัฒนาโปรแกรม  31 17. จงเขยี นข้นั ตอนวธิ ีโดยก�ำหนดข้อมูลเขา้ คอื ประโยคภาษาองั กฤษ 1 ประโยค โดย จบประโยคด้วยจุด จากน้ันให้ท�ำการหาจ�ำนวนของตัวอักขระและจ�ำนวนของค�ำของ ประโยค โดยที่ตวั อกั ขระวา่ ง (Space) และจดุ ไม่ถอื ว่าเป็นตวั อักขระของประโยคและ ใหแ้ สดงผล ดงั นี้ Characters and word of “……………..” are ..…. and ….


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook