FOR i=1 to n activity1 activity2 activity3 Next ตัวอย่างการเขยี นผังงานและรหัสเทยี ม
บทที่ 4 ข้ันตอนการแกไ้ ขปัญหา ความหมายของอลั กอริทึม อลั กอรทิ มึ (Algorithm) หมายถึง การวเิ คราะหแ์ ยกแยะวธิ ีการทางานใหเ้ ป็นขนั้ เป็น ตอนโดยกาหนดใหเ้ รยี งกนั ไปตามลาดบั การเขียนโปรแกรมในยคุ แรกๆ นน้ั ผเู้ ขียน โปรแกรมจะตอ้ งมองเห็นขนั้ ตอนในการแกป้ ัญหาอยา่ งแจม่ ชดั เสยี ก่อน จึงจะเขยี น โปรแกรมได้ รูปแบบการเขยี นขนั้ ตอนวธิ ีแก้ปัญหา (Algorithm) ในส่วนของการพฒั นาลาดบั ขนั้ ตอนวิธีการแกป้ ัญหา (Algorithm Development) อาจเขยี นลาดบั ขนั้ ตอนการทางานได้ 2 วธิ ี คือ การอธิบายขนั้ ตอนการทางานอย่าง ครา่ ว ๆ และการอธิบายขนั้ ตอนการทางานอยา่ งละเอียด การอธิบายขั้นตอนการทางานอยา่ งครา่ ว ๆหรอื อยา่ งหยาบ (Decomposition) คือการเขียนขนั้ ตอนการทางานทงั้ หมดโดยไมต่ อ้ งละเอยี ดมากนกั และเขียนขนั้ ตอน
การทางานเป็นขอ้ ๆ เรม่ิ ตงั้ แตข่ นั้ ตอนแรกจนถึงขนั้ ตอนสดุ ทา้ ยทจี่ ะส่งใหเ้ ครื่อง คอมพวิ เตอรท์ าการแกป้ ัญหาจะตอ้ งทาลาดบั ขนั้ ตอนใดบา้ งเช่น การคานวณหาอตั รา ผอ่ นชาระรายเดือนของสนิ คา้ รายการหนึง่ สามารถเรยี บเรยี งเป็นการทางานอยา่ ง หยาบไดด้ งั นี้ 1. เริ่มตน้ 2. รบั ค่าของราคาสินคา้ 3. รบั คา่ ของอตั ราดอกเบยี้ รายปี 4. รบั คา่ ของจานวนเดือนทต่ี อ้ งการผอ่ นชาระ 5. คานวณหาคา่ ของจานวนเงินทตี่ อ้ งชาระรายเดือน 6. แสดงค่าของจานวนเงนิ ที่ผอ่ นชาระรายเดือน 7. จบการทางาน ในการเขียนอธิบายลาดบั ขนั้ ตอนการทางานในลกั ษณะของขอ้ ความนนั้ จะเริม่ ตน้ ขอ้ แรกดว้ ยคาวา่ “เร่ิมตน้ ” หรือ “เร่ิมตน้ การทางาน” ถดั จากนน้ั เป็นลาดบั ขนั้ ตอนการ ทางานท่ใี ชใ้ นการแกป้ ัญหาและจบดว้ ยขนั้ ตอนสดุ ทา้ ยจะใชข้ อ้ ความว่า “จบการ ทางาน” 2. การอธิบายขั้นตอนการทางานอย่างละเอียด (Refinement) คือ การนาขนั้ ตอน การทางานอย่างครา่ วๆ มาพจิ ารณาเพิ่มเติมขอ้ มลู บางอยา่ งที่ยงั ไมเ่ รยี บรอ้ ย แตล่ ะ ขนั้ ตอนท่ีอธิบายในสว่ นของการอธิบายขนั้ ตอนการทางานอย่างหยาบนน้ั มีความ ละเอียดพอทจ่ี ะนาไปส่งั งานใหเ้ ครอื่ งคอมพิวเตอรท์ างานแลว้ หรอื ยงั ถา้ ยงั ไมล่ ะเอียด ตอ้ งเขยี นขยายความใหล้ ะเอียดยิ่งขนึ้ และสมบรู ณม์ ากทีส่ ดุ หรือแยกการทางาน
ออกเป็นขอ้ ย่อยเพม่ิ เตมิ เชน่ ในการคานวณหาคา่ ขอ้ มลู ใดบางอยา่ งจะคานวณดว้ ย วธิ ีการใด จากตวั อยา่ งในส่วนของการอธิบายขนั้ ตอนการทางานอย่าง หยาบ (Decomposition) เรือ่ งการหาอตั ราการผอ่ นชาระรายเดือนของสนิ คา้ รายการ หนึง่ เมอ่ื พจิ ารณาการทางานในแต่ละขอ้ จะเหน็ ไดว้ า่ มขี นั้ ตอนการทางานอยขู่ นั้ ตอน หนงึ่ ทีไ่ มล่ ะเอียดก็คือขนั้ ตอนที่ 5 การคานวณหาค่าของจานวนเงนิ ทตี่ อ้ งการชาระ รายเดือนยงั ไม่ไดบ้ อกว่าคานวณดว้ ยวิธีการใด ดงั นน้ั จึงตอ้ งทาการอธิบายเพิม่ เติมใน สว่ นของขนั้ ตอนในการคานวณหาคา่ ของจานวนเงินทีต่ อ้ งชาระรายเดอื น โดยวธิ ีการ คานวณนนั้ ไดท้ าในส่วนของการทดลองแกป้ ัญหาดว้ ยตนเอง (Hand Example) สามารถเขยี นอธิบายขนั้ ตอนการทางานอย่างละเอยี ดของการแกป้ ัญหาได้ ดงั นี้ 1. เริม่ ตน้ 2. รบั คา่ ของราคาสินคา้ 3. รบั คา่ ของอตั ราดอกเบยี้ รายปี 4. รบั คา่ ของจานวนเดือนทต่ี อ้ งการผ่อนชาระ 5. คานวณหาดอกเบยี้ จากสตู ร ดอกเบยี้ ราคาสินคา้ x อตั ราดอกเบีย้ x (จานวนเดอื น/12) 6. คานวณหาจานวนเงินทตี่ อ้ งชาระรายเดอื น จากสตู ร เงินผอ่ นรายเดอื น (ราคาสนิ คา้ + ดอกเบยี้ )/จานวนเดือน 7. แสดงคา่ ของจานวนเงนิ ทผ่ี อ่ นชาระรายเดือน 8. จบการทางาน
จากการอธิบายขนั้ ตอนการทางานในขนั้ ตอนท่ี 5 และ 6 จะเหน็ วา่ ในการคานวณ จะไมใ่ ชเ้ ครอื่ งหมายเท่ากบั (=) จะใชเ้ ครอ่ื งหมายลกู ศรชที้ ิศทาง ( ) แทน ส่วน เคร่ืองหมายเทา่ กบั นน้ั จะใชใ้ นกรณีที่ทาการเปรยี บเทียบค่าเท่านน้ั เช่นเดยี วกบั การ คานวณค่า เชน่ ตอ้ งการกาหนดค่าให้ X มคี า่ เท่ากบั 100 จะเขยี นคาอธิบายได้ วา่ X 100 หลงั จากทาการพฒั นาใหเ้ ป็นการอธิบายขนั้ ตอนการทางานอย่าง ละเอยี ด (Refinement) เสร็จเรียบรอ้ ยจะเห็นว่าลาดบั ขนั้ ตอนการทางานตงั้ แต่ ขนั้ ตอนแรกจนถึงขนั้ ตอนสดุ ทา้ ย ตอ้ งทาขนั้ ตอนใดละเอียดมากยงิ่ ขนึ้ จานวนขอ้ ของ ลาดบั ขนั้ ตอนการทางานไมจ่ าเป็นตอ้ งเทา่ กบั ในส่วนของการอธิบายลาดบั ขนั้ ตอน การทางานอย่างหยาบ ในการแกป้ ัญหาทไี่ มม่ ีความซบั ซอ้ นมากนกั ส่วนของการ อธิบายขนั้ ตอนการทางานอยา่ งหยาบ (Decomposition) อาจสามารถอธิบายลาดบั ขนั้ ตอนการทางานไดล้ ะเอียดพออยแู่ ลว้ ก็สามารถนาในสว่ นของการอธิบายขนั้ ตอน การทางานอยา่ งหยาบมาใชเ้ ป็นส่วนของการอธิบายขนั้ ตอนการทางานอยา่ งละเอยี ด การพฒั นาลาดบั ขนั้ ตอนการทางานจากผงั งาน ใหแ้ บง่ ขนั้ ตอนการทางานทงั้ หมด ออกเป็นขอ้ ๆ ตามลาดบั และตามจานวนของขนั้ ตอนการทางานทงั้ หมด และการเขยี น ตอ้ งไมซ่ บั ซอ้ น เขา้ ใจง่าย และตอ้ งเขยี นใหถ้ กู ตอ้ งเสมอ เพราะถา้ เขียนไมถ่ กู ตอ้ ง แลว้ กการพฒั นาไปเป็นคาส่งั เทียม (Pseudo Code) ก็จะผดิ พลาด และการเขยี น โปรแกรมกจ็ ะผดิ ตามดว้ ย เทคนคิ การเขียนอัลกอริทมึ อลั กอรทิ มึ เป็นขนั้ ตอนการบรรยายลาดบั ขนั้ ตอนการแกป้ ัญหาระบบงานเป็นรายขอ้ เพ่ือแสดงใหเ้ ห็นถงึ ขนึ้ ตอน เพื่อแสดงใหเ้ ห็นถงึ ขนั้ ตอนการทางานที่ชดั เจน และเพ่ือ ใชใ้ นการทดสอบการทางานของอลั กอริทมึ ดว้ ย ก่อนศกึ ษาวธิ ีการเขียนอลั กอริทึม
ควรมีความเขา้ ใจและคานึงถึงคณุ สมบตั พิ นื้ ฐานของระบบคอมพวิ เตอรก์ ่อน เพอื่ นา ไปประยกุ ตใ์ ชใ้ นขนั้ ตอนการเขียนอลั กอริทมึ ไดอ้ ย่างถกู ตอ้ งตอ่ ไป คณุ สมบตั กิ ารทางานระดบั พนื้ ฐานของคอมพวิ เตอร์ มดี งั นี้ 1. คณุ สมบตั ดิ า้ นหน่วยความจา การเขียนโปรแกรมคอมพวิ เตอรต์ อ้ งเก่ยี วขอ้ งกับการใชง้ านพนื้ ทใ่ี นหนว่ ยความจาของ ระบบคอมพิวเตอร์ ในภาษาคอมพวิ เตอรใ์ หแ้ ทนสญั ลกั ษณก์ าหนดพนื้ ท่ี หน่วยความจา ดว้ ยการกาหนดชือ่ เป็นตวั แปรใชง้ าน เพอื่ ใชอ้ า้ งองิ ถงึ ขอ้ มลู ใน หน่วยความจา เช่น N = 1 หมายถงึ กาหนดค่า 1 เก็บไวใ้ นตวั แปร N Ans = X2 + Y2 หมายถงึ เอาค่า X ยกกาลงั 2 บวกกบั ค่า Y ยกกาลงั สอง แลว้ เกบ็ คา่ ผลลพั ธท์ ไี่ ดไ้ วท้ ตี่ วั แปร Ans Total = Total + Salary หมายถงึ การเอาค่าในตวั แปร Salary ไปบวกเขา้ กบั ค่าในตวั แปร Total แลว้ เอาคา่ ผลลพั ธใ์ หม่ทีไ่ ดไ้ ปเก็บทตี่ วั แปร Total ซงึ่ คา่ ใหมท่ ีไ่ ดจ้ ะไปเก็บ ทบั ค่าเดิมท่มี ีอยู่ คาส่งั ลกั ษณะนใี้ ชใ้ นการสะสมค่า หรือเปลี่ยนแปลงคา่ ในตวั แปร เดมิ 2. คณุ สมบตั ดิ า้ นการคานวณ คณุ สมบตั ดิ า้ นการคานวณในระบบคอมพวิ เตอร์ ระดบั พนื้ ฐาน คือ สามารถ ดาเนินการบวก ลบ คณู หาร แต่ลกั ษณะการพจิ ารณาเลือกประมวลผลงานคานวณ ของคอมพวิ เตอรน์ น้ั มคี วามแตกต่างจากระบบการคานวณท่วั ๆ ไป คอื คอมพวิ เตอร์ คานวณโดยพจิ ารณาลาดบั ความสาคญั ของสญั ลกั ษณเ์ ครอ่ื งหมายการคานวณที่
ปรากฏในนิพจนก์ ารคานวณนนั้ ๆ เป็นสาคญั สญั ลกั ษณท์ ่ีใชใ้ นการคานวณและ ลาดบั การทางานของการคานวณ มดี งั นี้ สญั ลกั ษณ์ ความหมาย ลาดบั การ ในการทางาน ทางาน + บวก 4 - ลบ 4 * คณู 3 / หาร 3 ** หรอื ^ ยกกาลงั 2 ( ) วงเลบ็ 1 หากมีวงเลบ็ จะดาเนินการในวงเล็บกอ่ น และกรณีทม่ี ีลาดบั ความสาคญั เท่ากนั จะ คานวณจากดา้ นซา้ ยไปขวา 3. คณุ สมบัตดิ ้านการเปรยี บเทียบเชงิ ตรรกะ ความสามารถท่ีสาคญั ของคอมพิวเตอรค์ ือ ความสามารถในการประมวลผลเชงิ เปรยี บเทียบ เป็นคณุ สมบตั ิพนื้ ฐานอยา่ งหน่งึ ของคอมพิวเตอร์ โดยใชห้ ลกั การทางาน ของพีชคณติ พิจารณาเงอ่ื นไขที่ใชน้ ิพจนแ์ บบบลู ีนประกอบการเขียนคาส่งั เพ่อื กาหนด ทางเลือกการทางาน สาหรบั หาขอ้ สรุปของเง่ือนไขท่ผี เู้ ขียนโปรแกรมกาหนดขนึ้ เพอ่ื ใหเ้ คร่ืองคอมพิวเตอรส์ ามารถประมวลผลตดั สนิ ใจวา่ หากเงื่อนไขเป็นจรงิ ให้ ดาเนนิ การคาส่งั ใดและเงอ่ื นไขเป็นเท็จใหด้ าเนินการคาส่งั ใด การเขียนคาส่งั ทมี่ ี
ลกั ษณะของเงือ่ นไข เพอ่ื ใหเ้ คร่ืองพิจารณาเลือกทิศทางการทางานตามเงือ่ นไขที่ กาหนดนนั้ มสี ิง่ ท่เี ก่ยี วขอ้ งกบั ผพู้ ฒั นาโปรแกรมคอื ตอ้ งศกึ ษาวิธีใชส้ ญั ลกั ษณใ์ นการ เขียนประโยคคาส่งั แบบเง่ือนไขของแต่ละภาษาทกี่ าหนดใหเ้ ลอื กใช้ โดยท่วั ไปมี สญั ลกั ษณข์ องพชี คณิตบลู นี ใชง้ านดงั นี้ การใชส้ ญั ลกั ษณเ์ ขียนประโยคคาส่งั เงื่อนไขแบบ 1 ประโยคมสี ญั ลกั ษณด์ งั นี้ สญั ลกั ษณ์ ความหมายในการ ทางาน = เท่ากบั < นอ้ ยกวา่ > มากกวา่ <= นอ้ ยกว่าหรือเทา่ กบั >= มากกวา่ หรอื เท่ากบั <> ไมเ่ ทา่ กบั ตวั อยา่ ง การเขียนนพิ จนใ์ ชเ้ งือ่ นไขแบบ 1 ประโยค ถา้ Salary > 10000 Tax = Salary * 0.05 มฉิ ะนนั้ แลว้ Tax = Salary * 0.02
การใชส้ ญั ลกั ษณเ์ ชือ่ มประโยคคาส่งั เงื่อนไข การเขยี นคาส่งั งานกาหนดเง่อื นไขการทางาน ในลกั ษณะเชื่อมประโยค เงอื่ นไข 2 ประโยคตอ้ งใชส้ ญั ลกั ษณค์ าส่งั เพ่ิมเตมิ เพอ่ื ใหไ้ ดข้ อ้ สรุปของการทางานว่า เป็นคา่ จริง (True) คอื เป็นค่าเทจ็ (False) ดงั นี้ ใหผ้ ลลพั ธก์ ารเปรยี บเทยี บในประโยคเงือ่ นไขที่ 1 เป็นสญั ลกั ษณ์ X ใหผ้ ลลพั ธก์ ารเปรยี บเทยี บในประโยคเงือ่ นไขที่ 2 เป็นสญั ลกั ษณ์ Y เมอ่ื มกี ารทางานหาขอ้ สรุปตงั้ แต่ 2 เงื่อนไขประกอบกนั โดยใชห้ ลกั การของพชี คณติ แบบบลู ีนจะไดด้ งั นี้ XY X AND Y X OR Y NOT X TT T T F TF F T F FT F T T FF F F T ตัวอยา่ ง การเขยี นนิพจนใ์ ชเ้ งอ่ื นไขแบบ 2 ประโยค ถา้ ( Salary > 10000) AND (Salary <= 50000) Tax = Salary * 0.05 มิฉะนนั้ แลว้ Tax = Salary * 0.02
4. คุณสมบตั ิด้านการแสดงผลค่าขอ้ มลู เป็นการอ่านค่าขอ้ มลู จากพนื้ ท่หี น่วยความจาทเี่ ขยี นคาส่งั นาไปเก็บไว้ หรอื จากการ คานวณทต่ี อ้ งมีการนาค่าไปเกบ็ ไว้ เพื่อนามาแสดงผลลพั ธใ์ นรูปแบบและในตาแหน่ง งานท่ีตอ้ งการ 5. คุณสมบัติการจัดลาดบั การทางาน คอมพวิ เตอรจ์ ะทางานทลี ะคาส่งั ตามลาดบั จากบนลงล่าง หากเปรยี บเทียบ ใน 1 บรรทดั คือ 1 คาส่งั แลว้ คอมพิวเตอรจ์ ะทางานตามคาส่งั ทอี่ ยบู่ รรทดั บนสดุ กอ่ น แลว้ จึงทางานตามคาส่งั ท่ีอยใู่ นลาดบั ตอ่ มาจนถึงคาส่งั ในบรรทดั สดุ ทา้ ย ลกั ษณะการเขียน Algorithm แนวทางการเขียนอลั กอริทมึ เป็นลกั ษณะการทางานขนั้ พนื้ ฐาน มกั ปรากฏใน ระบบงานโปรแกรมคอมพวิ เตอรโ์ ดยท่วั ไป มีแนวทางทใ่ี ชบ้ ่อยๆ ดงั นี้ 1. การทางานลกั ษณะการนบั คา่ สะสมในหนว่ ยความจา 2. การทางานลกั ษณะวนรอบการทางาน 3. การทางานลกั ษณะหาคา่ มากทสี่ ดุ และค่านอ้ ยที่สดุ บทที่ 5 โครงสรา้ งภาษาคอมพิวเตอร์ ประวัติของภาษาซี ภาษาซเี ป็นภาษาทถ่ี ือว่าเป็นทงั้ ภาษาระดบั สงู และระดบั ต่า ถกู พฒั นาโดย เดนนิส รดิ ชี (Dennis Ritche) แหง่ หอ้ งทดลองเบลล์ (Bell Laboratories) ท่ีเมอรร์ ีฮลิ มลรฐั นิวเจอรซ์ ่ี โดยเดนนิสไดใ้ ชห้ ลกั การของภาษา บีซพี ีแอล (BCPL : Basic Combine Programming Language) ซง่ึ พัฒนาขนึ้ โดยเคน ทอมสนั (Ken
Tomson) การออกแบบและพฒั นาภาษาซีของเดนนิส ริดชี มีจดุ ม่งุ หมายใหเ้ ป็น ภาษาสาหรบั ใชเ้ ขียนโปรแกรมปฏิบตั ิการระบบยนู ิกซ์ และไดต้ งั้ ชือ่ ว่า ซี (C) เพราะ เห็นวา่ ซี (C) เป็นตวั อกั ษรตอ่ จากบี (B) ของภาษา BCPL ภาษาซีถือวา่ เป็น ภาษาระดบั สงู และภาษาระดบั ต่า ทงั้ นเี้ พราะ ภาษาซมี วี ธิ ีใชข้ อ้ มลู และมีโครงสรา้ ง การควบคมุ การทางานของโปรแกรมเป็นอยา่ งเดียวกบั ภาษาของโปรแกรมระดบั สงู อน่ื ๆ จึงถอื วา่ เป็นภาษาระดบั สงู ในดา้ นทีถ่ อื วา่ ภาษาซีเป็นภาษาระดบั ต่า เพราะ ภาษาซีมวี ธิ ีการเขา้ ถึงในระดบั ตา่ ทส่ี ดุ ของฮารด์ แวร์ ความสามารถทงั้ สองดา้ นของ ภาษานเี้ ป็นสิ่งที่เกอื้ หนนุ ซงึ่ กนั และกนั ความสามารถระดบั ต่าทาใหภ้ าษาซสี ามารถ ใชเ้ ฉพาะเคร่อื งได้ และความสามารถระดบั สงู ทาใหภ้ าษาซีเป็นอิสระจากฮารด์ แวร์ ภาษาซีสามารถสรา้ งรหสั ภาษาเครอ่ื งซ่งึ ตรงกบั ชนดิ ของขอ้ มลู นนั้ ไดเ้ อง ทาให้ โปรแกรมที่เขียนดว้ ยภาษาซที ่ีเขียนบนเครื่องหนึ่ง สามารถนาไปใชก้ บั อีกเครือ่ งหนง่ึ ได้
ววิ ฒั นาการของภาษาซี - ค.ศ. 1970 มีการพฒั นาภาษา B โดย Ken Thompson ซ่ึงทางานบนเคร่ือง DEC PDP-7 ซึ่ง ทางานบนเครื่องไมโครคอมพวิ เตอรไ์ มไ่ ด้ และยงั มีขอ้ จากดั ในการใช้ งานอยู่ (ภาษา B สืบทอดมาจาก ภาษา BCPL ซ่งึ เขียนโดย Marth Richards) - ค.ศ. 1972 Dennis M. Ritchie และ Ken Thompson ไดส้ รา้ งภาษา C เพื่อ เพมิ่ ประสิทธิภาพ ภาษา B ใหด้ ยี ิง่ ขนึ้ ในระยะแรกภาษา C ไม่เป็นที่นยิ มแกน่ กั โปรแกรมเมอรโ์ ดยท่วั ไปนกั - ค.ศ. 1978 Brian W. Kernighan และ Dennis M. Ritchie ไดเ้ ขียนหนงั สือ เลม่ หนึ่งชือ่ วา่ The C Programming Language และหนงั สือเลม่ นีท้ าใหบ้ คุ คลท่วั ไป รูจ้ กั และนยิ มใชภ้ าษา C ในการเขยี น โปรแกรมมากขนึ้
- แต่เดมิ ภาษา C ใช้ Run บนเคร่อื งคอมพิวเตอร์ 8 bit ภายใต้ ระบบปฏบิ ตั กิ าร CP/M ของ IBM PC ซึ่งในช่วงปี ค. ศ. 1981 เป็นช่วงของการพฒั นา เครือ่ งไมโครคอมพวิ เตอร์ ภาษา C จงึ มี บทบาทสาคญั ในการนามาใชบ้ นเครื่อง PC ตงั้ แตน่ นั้ เป็นตน้ มา และมกี ารพฒั นาต่อมาอกี หลาย ๆ คา่ ย ดงั นนั้ เพ่ือกาหนดทศิ ทางการใชภ้ าษา C ใหเ้ ป็นไปแนวทางเดียวกนั ANSI (American National Standard Institute) ไดก้ าหนดขอ้ ตกลงที่เรยี กว่า 3J11 เพอ่ื สรา้ งภาษา C มาตรฐานขนึ้ มา เรียน ว่า ANSI C - ค.ศ. 1983 Bjarne Stroustrup แห่งหอ้ งปฏิบตั กิ ารเบล (Bell Laboratories) ไดพ้ ฒั นาภาษา C++ ขนึ้ รายละเอียดและความสามารถของ C++ มสี ว่ นขยายเพ่มิ จาก C ท่สี าคญั ๆ ไดแ้ ก่ แนวความคดิ ของการเขยี นโปรแกรมแบบกาหนดวตั ถุ เป้าหมายหรือแบบ OOP (Object Oriented Programming) ซ่ึงเป็นแนวการเขียน โปรแกรมท่ีเหมาะกบั การพฒั นาโปรแกรมขนาดใหญท่ ม่ี คี วามสลบั ซบั ซอ้ นมาก มี ขอ้ มลู ทใี่ ชใ้ นโปรแกรมจานวนมาก จงึ นิยมใชเ้ ทคนิคของการเขยี นโปรแกรมแบบ OOP ในการพฒั นาโปรแกรมขนาดใหญใ่ นปัจจบุ นั นี้ โครงสร้างของโปรแกรม หลกั การเขยี นโปรแกรมแบบมีโครงสรา้ ง หรือโครงสรา้ งควบคมุ (Control structures) คือ การกาหนดขนั้ ตอนใหเ้ ครอื่ งคอมพิวเตอรท์ างาน การเขียนขนั้ ตอนในรายละเอยี ดของแต่ละอลั กอริธมึ อาศยั โครงสรา้ งควบคมุ 3 หลกั การดงั นี้ 1. โครงสรา้ งตามลาดบั (Sequence structure) 2. โครงสรา้ งแบบมที างเลอื กหรือโครงสรา้ งตดั สินใจ (Selection structure)
3. โครงสรา้ งแบบทาซา้ (Repetition structure) 1.โครงสรา้ งตามลาดับ (Sequence Structure) หมายถงึ งานท่ีตอ้ งทาตอ้ งมีลาดบั กอ่ นหลงั ทางานจากบนลงล่าง ยกตวั อย่าง เชน่ อลั กอริทึมกจิ วตั รประจาตอนเชา้ 2.โครงสรา้ งตัดสินใจ (Selection structure) เป็นโครงสรา้ งทม่ี ีเงอื่ นไขใหต้ ดั สนิ ใจว่าจะใชว้ ธิ ีการใด โดยตอ้ งมกี ารตรวจสอบ เงอื่ นไขวา่ จริงหรือไม่ หากเป็นจรงิ ตอ้ งไปทาคาส่งั ชดุ หน่งึ แตถ่ า้ เป็นเท็จตอ้ งไปทา คาส่งั อกี ชดุ หนึง่ ตวั อยา่ ง อลั กอริทมึ แสดงการตดั เกรด
3.โครงสร้างแบบทาซา้ (Repetition structure) เป็นโครงสรา้ งทมี่ ีการวนการทางานซา้ ๆ ตามเง่ือนไข ยกตวั อย่าง อลั กอริทึมการป่ัน จกั รยานออกกาลงั กาย
โปรแกรมภาษาซเี บอื้ งตน้ โครงสร้างของโปรแกรมภาษาซีแบง่ ออกเป็ น 3 ส่วน 1. สว่ นหัวของโปรแกรม สว่ นหวั ของโปรแกรมนีเ้ รียกว่า Preprocessing Directive ใชร้ ะบเุ พอื่ บอกให้ คอมไพเลอรก์ ระทาการ ใด ๆ ก่อนการแปลผลโปรแกรม ในทนี่ ีค่ าส่งั #include <stdio.h> ใชบ้ อกกบั คอมไพเลอรใ์ หน้ าเฮดเดอรไ์ ฟลท์ ่รี ะบุ คอื stdio.h เขา้ รว่ มใน การแปลโปรแกรมดว้ ย โดยการกาหนด preprocessing directives นจี้ ะตอ้ งขนึ้ ตน้
ดว้ ยเครื่องหมาย # เสมอ คาส่งั ท่ีใชร้ ะบใุ หค้ อมไพเลอรน์ าเฮดเดอรไ์ ฟลเ์ ขา้ รว่ มในการแปลโปรแกรม สามารถ เขียนได้ 2 รูปแบบ คือ - #include <ช่อื เฮดเดอรไ์ ฟล>์ คอมไพเลอรจ์ ะทาการคน้ หาเฮดเดอรไ์ ฟลท์ ่ีระบจุ าก ไดเรกทอรที ใ่ี ชส้ าหรบั เก็บเฮดเดอรไ์ ฟลโ์ ดยเฉพาะ (ปกตคิ ือไดเรกทอรชี ือ่ include) - #include “ช่อื เฮดเดอรไ์ ฟล”์ คอมไพเลอรจ์ ะทาการคน้ หาเฮดเดอรไ์ ฟทร่ี ะบุ จาก ไดเรค็ ทอรีเดยี วกนั กบั ไฟล์ source code นน้ั แตถ้ า้ ไมพ่ บก็จะไปคน้ หาไดเรค็ ทอรที ใ่ี ช้ เกบ็ เฮดเดอรไ์ ฟลโ์ ดยเฉพาะ 2. สว่ นของฟังกช์ ่นั หลัก ฟังกช์ ่นั หลกั ของภาษาซี คือ ฟังกช์ ่นั main() ซ่งึ โปรแกรมภาษาซที กุ โปรแกรม จะตอ้ งมฟี ังกช์ ่นั นอี้ ยใู่ นโปรแกรมเสมอ จะเห็นไดจ้ ากช่ือฟังกช์ ่นั คือ main แปลวา่ “หลกั ” ดงั นน้ั การเขยี นโปรแกรมภาษซจี งึ ขาดฟังกช์ ่นั นไี้ ปไม่ได้ โดยขอบเขตของ ฟังกช์ ่นั จะถกู กาหนดดว้ ยเครือ่ งหมาย { และ } กลา่ วคือ การทางานของฟังกช์ ่นั จะ เร่มิ ตน้ ท่ีเคร่ืองหมาย { และจะสนิ้ สดุ ท่เี ครอ่ื งหมาย } ฟังกช์ ่นั main() สามารถเขียนใน รูปแบบของ void main(void) กไ็ ด้ มคี วามหมายเหมือนกนั คอื หมายความวา่ ฟังกช์ ่นั main() จะไมม่ อี ารก์ ิวเมนต์ (argument) คอื ไมม่ ีการรบั คา่ ใด ๆ เขา้ มา ประมวลผลภายในฟังกช์ ่นั และจะไม่มีการคนื คา่ ใด ๆ กลบั ออกไปจากฟังกช์ ่นั ดว้ ย
3. ส่วนรายละเอยี ดของโปรแกรม เป็นสว่ นของการเขยี นคาส่งั เพ่อื ใหโ้ ปรแกรมทางานตามทีไ่ ดอ้ อกแบบไว้ คอมเมนตใ์ นภาษาซี คอมเมนต์ (comment) คือสว่ นที่เป็นหมายเหตขุ องโปรแกรม มีไวเ้ พ่อื ใหผ้ เู้ ขียน โปรแกรมใสข่ อ้ ความอธิบายกากบั ลงไปใน source code ซ่ึงคอมไพเลอรจ์ ะขา้ มาการ แปลผลในสว่ นท่เี ป็นคอมเมนตน์ ี้ คอมเมนตใ์ นภาษาซีมี 2 แบบคือ ¨ คอมเมนตแ์ บบบรรทดั เดยี ว ใชเ้ ครอ่ื งหมาย // ¨ คอมเมนตแ์ บบหลายบรรทดั ใชเ้ คร่ืองหมาย /* และ */ ตวั อย่าง การคอมเมนตใ์ นภาษาซี // Comment only one line #include <stdio.h>
#include <conio.h> main void() { clrscr(); /*comment many line*/
} ขอ้ ควรระวงั ในการใชค้ อมเมนต์ คือ ในกรณีทีใ่ ชค้ อมเมนตแ์ บบหลายบรรทดั จะไม่ สามารถใชค้ อมเมนตซ์ อ้ นคอมเมนตไ์ ด้ ดงั รูป มิฉะนน้ั จะกอ่ ใหเ้ กดิ ขอ้ ผิดพลาดในการ คอมไพล์ / / /*Comment1*/ /*Comment2*/ /*Comment3*/ /*Comment2*/ X /*Comment1 /*Comment3*/ ตวั อย่างที่ 1 โปรแกรมใหน้ กั เรียนศึกษาโครงสรา้ งของโปรแกรมภาษาซี 1: #include <stdio.h>
2: void main() 3: { 4: clrscr(); 5: printf(\"My name is Kwanjit\"); 6: } ผลลพั ธข์ องโปรแกรม
My name is Kwanjit อธิบายโปรแกรม บรรทดั ท่ี 1: เป็นการบอกใหค้ อมไพเลอรน์ าเฮดเดอรไ์ ฟลช์ ื่อ stdio.h เขา้ มารว่ มในการ แปลผลดว้ ย โดย stdio ย่อมาจาก standard input/output และ .h คอื นามสกลุ ของ เฮดเดอรไ์ ฟลใ์ นภาษาซี (h ยอ่ มาจาก header) ซึ่ง stdio.h คอื เฮดเดอรไ์ ฟลท์ ีร่ วมเอา การประกาศ (declaration) ของฟังกช์ ่นั มาตรฐานของภาษาซีที่เก่ยี วกบั การจดั การ ดา้ นอนิ พตุ และเอาตพ์ ตุ เขา้ มาไวด้ ว้ ยกนั โปรแกรมนีม้ กี ารเรียกใชง้ านฟังกช์ ่นั printf() เพื่อแสดงขอ้ มลู ออกทางจอภาพ และเน่ืองจากส่วนของการประกาศฟังกช์ ่นั printf() ถกู บรรจอุ ย่ใู นเฮดเดอรไ์ ฟล์ stdio.h ดงั นนั้ จึงจาเป็นตอ้ งนาเฮดเดอรไ์ ฟล์ stdio.h เขา้ รว่ มในการแปลผลดว้ ย บรรทดั ท่ี 2: คอื ฟังกช์ ่นั void main() ซ่งึ เป็นฟังกช์ ่นั หลกั ของโปรแกรม การทางานของ โปรแกรมภาษาซีจะเรม่ิ ตน้ ท่ฟี ังกช์ ่นั นี้ บรรทดั ที่ 3: เคร่อื งหมาย { ระบจุ ดุ เริ่มตน้ ของฟังกช์ ่นั main() บรรทดั ที่ 4: เป็นคาส่งั ใหเ้ คลียรห์ นา้ จอเวลาแสดงผลลพั ธ์ บรรทดั ท่ี 5: เป็นการเรยี กใชฟ้ ังกช์ ่นั printf() ซึ่งเป็นฟังกช์ ่นั มาตรฐานของภาษาซีทา หนา้ ทีแ่ สดงผลขอ้ มลู ออกทางจอภาพ ในทีน่ จี้ ะแสดงขอ้ ความ My name is Kwanjit ออกทางจอภาพ บรรทดั ที่ 6: เครอ่ื งหมาย } ระบจุ ดุ สนิ้ สดุ ของฟังกช์ ่นั main() การคอมไพลแ์ ละการลิงคโ์ ปรแกรมในภาษาซี การสรา้ งโปรแกรมที่สามารถใชง้ านไดข้ นึ้ มาโปรแกรมหน่ึง ในภาษาซมี ขี นั้ ตอนดงั นี้
1. สรา้ งตัวโปรแกรมทเ่ี ป็ นตวั อกั ษรหรอื เรยี กว่า ซอรส์ ไฟล์ (Source file) โดยมนี ามสกลุ เป็น .c หรือ .cpp ขนึ้ มาก่อน โดยใชโ้ ปรแกรมทีส่ ามารถเขียนไฟล์ ทเ่ี กบ็ อกั ขระ (Editor) ใด ๆ กไ็ ด้ อกั ษรหรอื อกั ขระใด ๆ นนั้ จะตอ้ งอยใู่ นรูปแบบของ การโปรแกรมภาษา (ขนั้ ตอนนคี้ ือการสรา้ งโปรแกรมทเ่ี ป็นภาษามนษุ ยน์ ่นั เอง) 2. คอมไพลเ์ ลอรข์ องภาษาซี (C Compiler) จะทาการแปลงซอรส์ ไฟล์ จากอกั ขระใด ๆ ใหเ้ ป็นรหสั ทีเ่ ครอ่ื งคอมพิวเตอรส์ ามารถเขา้ ใจไดเ้ กบ็ ไวใ้ นอกี ไฟล์ หนง่ึ เรยี กว่า ไฟลว์ ตั ถปุ ระสงค์ (Object file) ท่ีมนี ามสกลุ .obj (ขนั้ ตอนนเี้ รยี กวา่ การ คอมไพล์ เป็นการแปลงภาษามนษุ ยเ์ ป็นภาษาเคร่ืองน่นั เอง) 3. ตวั เชอ่ื ม (Linker) จะทาการตรวจสอบว่าในโปรแกรมท่ีเขยี นขนึ้ นนั้ มกี าร เรียกใชง้ านฟังกช์ นั มาตรฐานใด จากหอ้ งสมดุ ของภาษาซี (C Library) บา้ งหรือไม่ ถา้ มี ตวั เชือ่ มจะทาการรวมเอาฟังกช์ นั เหลา่ นน้ั เขา้ กบั ไฟลว์ ตั ถปุ ระสงค์ แลว้ จะไดไ้ ฟลท์ ่ี สามารถทางานได้ โดยมนี ามสกลุ เป็น .exe (ขัน้ ตอนนเี้ รียกว่า การลงิ ค์ เป็นการรวม ฟังกช์ นั สาเรจ็ รูปเขา้ ไป แลว้ สรา้ งไฟลท์ ่ที างานได)้ ภาษาซีพลัสพลัส ภาษาซพี ลสั พลสั หรอื C++คอื ภาษา C programming language รุน่ ใหม่ เป็น ภาษาในการเขยี นโปรแกรม ถกู พฒั นาโดย Dr.BjarneStroustrupซ่งึ เป็นนกั วิจยั อยทู่ ี ประเทศสหรฐั อเมรกิ าในระหวา่ งปี พ.ศ. 2525-2528 ภาษา C++เกดิ จากแนวคิดใน การเพิ่มประสทิ ธิภาพภาษา C โดยไดน้ าความสามารถของ ภาษา C มาพฒั นา ให้ เป็นโปรแกรมภาษาท่ีมีความเป็น Object Oriented Programming หรือ โปรแกรม เชิงวตั ถแุ ละนเี้ องคือทีม่ าของภาษา C++จากการพฒั นานที้ าใหท้ กุ สงิ่ ทีภ่ าษา C ทา
ได้ ภาษา C++ก็จะสามารถทาไดเ้ หมือนกนั แตส่ ิ่งท่ีภาษา C++ทาได้ ภาษา C อาจจะทาไม่ได้ ภาษา C++ถกู ออกแบบมาสาหรบั การทางานภายใตส้ งิ่ แวดลอ้ ม ระบบปฏบิ ตั ิการ UNIX ดว้ ยภาษา C++ ผเู้ ขียนโปรแกรมสามารถเขยี นโปรแกรมไดอ้ ยา่ งมปี ระสิทธิภาพมากขนึ้ นอกจากนีก้ าร เขียนโปรแกรมเพ่ือใหส้ ามารถนากลบั มาใชไ้ ดใ้ หม่ (reusability) กส็ ามารถทาไดง้ ่าย ขนึ้ ภาษาซีพลสั พลสั เป็นภาษาทที่ างานไดอ้ ย่างกวา้ งขวาง เขา้ ใจงา่ ย เขียนง่าย ตลอดจนมีคาส่งั ที่อานวยความสะดวกใหก้ บั ผเู้ ขียนท่จี ะสามารถเรียกใชไ้ ดต้ ามท่ี ตอ้ งการ เชน่ ใชใ้ นทางคณติ ศาสตร์ 1. รูปแบบของการออกแบบภาษาซีพลสั พลสั ภาษาซพี ลสั พลสั ไดถ้ กู ออกแบบมาเพือ่ เป็นภาษาสาหรบั การเขยี นโปรแกรมท่วั ไป สามารถรองรบั การเขยี นโปรแกรมในระดบั ภาษาเคร่อื งได้ เชน่ เดียวกบั ภาษาซี ภาษาซีพลสั พลสั นนั้ เป็นภาษาท่ีมีความซบั ซอ้ นมากกวา่ ภาษาซีภาษาซีพลสั พลสั ไดร้ บั การออกแบบเพ่อื เขา้ กนั ไดก้ บั ภาษาซีในเกอื บทกุ กรณี มาตรฐานของภาษาซีพลสั พลสั ถกู ออกแบบมาเพ่อื ไมใ่ หม้ กี ารเจาะจงแพลตฟอรม์ คอมพวิ เตอร์ ภาษาซีพลสั พลสั ถกู ออกแบบมาใหร้ องรบั รูปแบบการเขียนโปรแกรมที่หลากหลาย ตวั อย่างโคด้ #include <iostream> Int main ()
{ std::cout<< \"hello, world\\n\"; return 0; } 2. โครงสรา้ งของโปรแกรมทเ่ี ขยี นดว้ ยภาษาซีพลสั พลสั โครงสรา้ งของโปรแกรมท่ขี ยี นดว้ ยภาษาซพี ลสั พลสั แบง่ ย่อยไดเ้ ป็น 3 ส่วนดงั นี้ 1.สว่ นเรยี กใชไ้ ฟลอ์ ่นื ๆ- ส่วนใหญม่ กั จะเป็นไฟลท์ ี่มนี ามสกลุ เป็น .h 2.ส่วนกาหนดช่ือในโปรแกรม- เป็นสว่ นท่ีใชก้ าหนดคา่ คงที่ ตวั แปร และค่าอน่ื ๆ ที่ ตอ้ งการ 3.สว่ นคาส่งั - จะประกอบดว้ ยคาส่งั ต่างๆ หรือฟังกช์ นั อน่ื ๆ ที่ใชใ้ นการทางานของ โปรแกรม ตัวอยา่ ง โครงสรา้ งโปรแกรมทเ่ี ขียนดว้ ยภาษาซีพลสั พลสั #include <iostream.h> ส่วนเรยี กใชไ้ ฟลอ์ ืน่ char ch; ส่วนกาหนดช่ือ int main(void) { ch = 'A'; cout<<²Hello world²; ส่วนคาส่งั
return 0; } รหสั ทใ่ี ช่บอ่ ย Escape Sequence คา่ หน้าที่ \\a 0x07 เสียงดงั ออกลาโพงหน่ึงครง้ั \\b 0x08 เลื่อน cursor ไปลบตวั อกั ษรทางซา้ ยมือหนง่ึ ตวั อกั ษร \\f 0x0c ขนึ้ หนา้ ใหม่ \\n 0x0a ขนึ้ บรรทดั ใหม่ \\r 0x0d เล่อื น cursor ไปทางซา้ ยมอื สดุ ของบรรทดั \\t 0x09 เล่ือนเคอรเ์ ซอร์ ไป 1 tab ในแนวนอน \\\\ 0x5c เครื่องหมาย \\ \\¢ 0x2c เครอ่ื งหมาย ¢ \\² 0x22 เคร่ืองหมาย ² \\? 0x3f เครอ่ื งหมาย ? ขนั้ ตอนการสร้างโปรแกรมซพี ลสั พลสั
การพฒั นาโปรแกรมดว้ ยภาษา C++ มีขนั้ ตอนในการสรา้ งคลา้ ยกบั ภาษาระดบั สงู ท่วั ไป แต่ภาษา C++ ไดจ้ ดั เตรียมเคร่อื งมือในการพฒั นาโปรแกรมในสภาพแวดลอ้ มทีร่ วมไวด้ ว้ ยกนั แบบเบ็ดเสรจ็ ทเ่ี รยี ก วา่ IDE (Integrated Development Environment) คือ ไดน้ าเคร่อื งมือทจ่ี าเป็น ทงั้ หมดในการพฒั นา โปรแกรมมารวมไว้ ดว้ ยกนั ทงั้ Editor, Compiler, Link Library และ Help เพ่ือความ สะดวกของผใู้ ชใ้ น ขณะทาการพัฒนาโปรแกรม การพฒั นาโปรแกรมดว้ ยภาษา C++ มขี นั้ ตอนตามลาดบั ดงั นี้ 1. ขนั้ ตอนการสรา้ ง Source File หรือแฟ้มตน้ ฉบบั เป็น Text File โดยการใชส้ ว่ น Editor ของ IDE (หรือสรา้ งจาก Editor ของโปรแกรมอ่ืน ๆ กไ็ ด)้ เมอ่ื สรา้ งเสร็จ แลว้ จงึ บนั ทึก Source File ไว้ โดย กาหนดส่วนขยายเป็น CPP เชน่ TEST.CPP (C Plus Plus) โดย Source File นี้ จะตอ้ งสรา้ งใหถ้ กู ตอ้ งตาม โครงสรา้ งและไวยากรณข์ องภาษา C++ ทงั้ หมดกอ่ น 2. การคอมไพล์ (Compile) คือการใชต้ วั โปรแกรมหรอื Compiler ของ C++ ในการ แปล Source File ใหเ้ ป็นไฟลภ์ าษาเครื่องทเี่ รียกวา่ Object File หรอื Object Code จะไดไ้ ฟลท์ ีม่ ี ส่วนขยายเป็น OBJ เพม่ิ ขนึ้ มาอีกหน่งึ ไฟล์ เชน่ TEST.OBJ 3. การเชือ่ มโยง (Linking) เป็นขนั้ ตอนการเช่ือมโยงไฟลป์ ระเภท OBJ เขา้ กบั แฟ้ม
จากคลงั (Library) ของภาษา C++ จานวน 1 แฟ้มหรอื มากกว่า ซึง่ ไฟลใ์ น Library นจี้ ดั เตรียม ไวโ้ ดยผสู้ รา้ งภาษา C++ ผลก็คอื จะไดผ้ ลลพั ธเ์ ป็นไฟลท์ ส่ี ามารถนาไปทางาน หรอื Run ไดโ้ ดยอสิ ระ หรอื ที่เรียกว่า Executable File มสี ว่ นขยายเป็น EXE เช่น TEST.EXE เป็นตน้ ขนั้ ตอนของการสรา้ ง Source File , การ Compile และการ Link ทงั้ หมดจะ ดาเนินการไดใ้ น IDE ของ C++ ทีจ่ ดั เตรยี มไวใ้ หแ้ ลว้ อยา่ งอตั โนมตั ิ ทาใหผ้ เู้ ขยี นโปรแกรมสามารถทา สรา้ งโปรแกรมดว้ ย ภาษา C++ สะดวกยงิ่ ขนึ้ ตวั อย่างวิธีการเขียนโปรแกรมและ Compile ดว้ ย C++ /*Program : First.CPP Written by: Mrs.Warayuphat Date : 23/05/2014 */ #include <iostream> using namespace std; int main() { cout << \"My name is Mrs.Warayuphat Panumphan \\n\"; cout << \"I teach at Joseph Upatham School Sampran Nakornprathom \\n\"; return 0;
} ขนั้ ท่ี 1 สรา้ ง Source File ใน Editor โดยการ Click Mouse ในหนา้ ต่าง Editor แลว้ พิมพ์ รหสั คาส่งั ของภาษา C++ ตามตวั อย่างใหถ้ กู ตอ้ ง ขนั้ ท่ี 2 บนั ทึก Source File โดยใชค้ าส่งั เมนู File -> Save เลอื กไดรฟ์ เกบ็ File จากนน้ั พิมพช์ อ่ื ไฟล์ First.CPP แลว้ Click ป่มุ OK (ถา้ ตอ้ งการเขยี นเป็นภาษา C ให้ บนั ทกึ ไฟลเ์ ป็นนามสกลุ C เช่น First.C) ขนั้ ท่ี 3 เปิดโปรแกรม Code Block เลอื กใชค้ าส่งั เปิดไฟลท์ ่ี save เขา้ มาในโปรแกรม Code Block ขนั้ ที่ 4 ใชค้ าส่งั Run, Run หรือ Ctrl+F9 เพอื่ ทาการ Compile และทดลอง Run โปรแกรมท่สี รา้ งขนึ้ เพ่อื ทางาน จากนน้ั กดแป้น Alt+F5 เพือ่ ดผู ลการทางานของ โปรแกรมในหนา้ ตา่ งผลลพั ธ์ (User Screen) ผลการทางานจากโปรแกรม หรือผลการ RUN ไดด้ งั นี้ My name is Mrs.Warayuphat Panumphan I teach at Joseph Upatham School Sampran Nakornprathom ขนั้ ท่ี 5 กรณีมีขอ้ ผดิ พลาด IDE ของ C++ จะไม่สามารถทาการ Compile ได้ จะแจง้ ข่าวสารขอ้ ผิด พลาดไวใ้ นกรอบหนา้ ต่าง Message จะตอ้ งแกไ้ ขใหถ้ กู ตอ้ งกอ่ น แลว้ จึงดาเนนิ การใน ขนั้ ท่ี 4 ใหม่ ตัวประมวลผลกอ่ น
ตวั ประมวลผลก่อน หรือ พรโี พรเซสเซอรไ์ ดเรกทีฟ คือ คาส่งั รูปแบบหนึ่งในภาษาC ทมี่ คี วามพเิ ศษ โดยในขนั้ ตอนการแปลความหมาย โปรแกรม ถา้ ตวั แปลภาษาC ตรวจพบว่ามกี ารใชพ้ รีโพรเซสเซอรไ์ ดเร็คทีฟภายใน โปรแกรม พรโี พรเซสเซอรไ์ ดเร็คทฟี เหลา่ นน้ั จะถกู แปลความหมายเป็นลาดบั แรกก่อน คาส่งั ประเภทอนื่ ๆ รูปแบบของการเขยี นพรีโพรเซสเซอรไ์ ดเร็คทฟี จะตอ้ งขนึ้ ตน้ ดว้ ยเครอื่ งหมาย # แตไ่ ม่ ตอ้ งลงทา้ ยดว้ ยเคร่อื งหมาย ; เหมอื นคาส่งั อืน่ โดยท่วั ไป โดยคาส่งั ท่ีจดั อยใู่ นกลมุ่ พรี โพรเซสเซอรไ์ ดเร็คทีฟ แสดงไดด้ งั นี้ ….1. #include จะใชส้ าหรบั ส่งั ใหต้ วั แปลภาษาC นาไฟลท์ ี่กาหนดชอื่ ไวต้ อ่ จาก #include เขา้ มารวมกบั โปรแกรมก่อนทจ่ี ะทาการแปลโปรแกรม เนอื่ งจากในบางกรณี ทม่ี ีการเรยี นกใชค้ าส่งั จากไฟลอ์ นื่ ๆ ดงั นน้ั เราจงึ ตอ้ งเขยี น #include ไวท้ ่สี ่วนหวั โปรแกรมเสมอ การเขยี นพรโี พรเซสเซอรไ์ ดเรค็ ทีฟ #include สามารถทาได้ 2 รูปแบบดงั นี้
แบบท่ี 1 #include < ชื่อไฟล์ > #include <> #include <> การใชเ้ คร่ืองหมาย <-> ระบชุ ่อื ไฟล์ เพ่อื ใหต้ วั แปลภาษาC เริ่มคน้ หาไฟลจ์ ากไดเรค็ ทอรที ่ีกาหนดไวก้ ่อน(สาหรบั Turbo C++ จะเป็นไดเรค็ ทอรี include) ถา้ ไม่พบจะ กลบั มาคน้ หาตอ่ ทไ่ี ดเรค็ ทอรปี ัจจบุ นั (ซึ่งกค็ อื ไดเร็คทอรีเดยี วกบั ทีบ่ นั ทึกไฟล์ โปรแกรมไว)้ แบบท่ี 2 #include “ช่อื ไฟล”์ #include”stdio.h” #include”math.h” การใชเ้ คร่อื งหมาย “-” ระบชุ ือ่ ไฟล์ ตวั แปลภาษาC จะเร่มิ คน้ หาไฟลจ์ ากไดเรค็ ทอรี ปัจจบุ นั ก่อน ถา้ ไมพ่ บจะไปคน้ หาต่อในไดเรค็ ทอรีทก่ี าหนดไว้
2. #define มาโคร (Macor) เป็นชอ่ื ท่เี ราสรา้ งขนึ้ มาภายในโปรแกรม พรอ้ มกบั ทาการ กาหนดคา่ หรือความหมายใหก้ บั มาโครนน้ั โดยมีขอ้ กาหนดวา่ ชอื่ มาโครตอ้ งเป็น ตวั อกั ษรตวั ใหญ่ และคา่ ที่กาหนดใหก้ บั มาโครสามารถเป็นไดต้ งั้ แตต่ วั เลข ขอ้ ความ หรอื คาส่งั ท่ไี ดผ้ ลลพั ธอ์ อกมาแนน่ อน #define ใชส้ าหรบั สรา้ งมาโครและกาหนดค่าใหก้ บั มาโครนน้ั รูปแบบการเขียนพรี โพรเซสเซอรไ์ ดเร็คทฟี #define แสดงไดด้ งั นี้ #define ชอ่ื ของมาโคร “คา่ ทก่ี าหนดให่มาโคร” #define MESSAGE “Hello” #define FIRST 1000 #define SECOND FIRST + 200หนา้ ท่ขี องพรีโพรเซสเซอรไ์ ดเรค็ ทีฟ #define จาเป็น จะตอ้ งรูจ้ กั กบั คาว่า มาโคร (Micor)ในภาษาC การเขียนคาอธบิ ายโปรแกรม คาอธิบายในโปรแกรม (program comment) คอื ขอ้ ความทแ่ี ทรกอยภู่ ายในโปรแกรม ซ่ึงคอมพิวเตอรจ์ ะไมแ่ ปลขอ้ ความนใี้ หเ้ ป็นส่วนหนึ่งของโปรแกรม กลา่ วคอื จะไม่มผี ล ต่อการทางานของโปรแกรม เขียนไวเ้ พ่ืออธิบายโปรแกรม ซึ่งในบางครงั้ ผเู้ ขยี น โปรแกรม อาจตอ้ งการเขียนคาอธิบาย กากบั ขนั้ ตอนการทางานของโปรแกรมในแต่ ละขนั้ ทาใหเ้ กิดประโยชนก์ บั ผเู้ ขียนและผทู้ ่ีอา่ นโปรแกรมไดเ้ ขา้ ใจงา่ ยขนึ้ และชว่ ยทา ใหก้ ารแกไ้ ขและปรบั ปรุงโปรแกรมเป็นไปไดง้ ่ายย่งิ ขนึ้ โปรแกรมตวั อย่างท่ี 2.2 แสดงการใส่คาอธิบายในโปรแกรมบรรทดั เดยี ว โดยการใช้ เครอื่ งหมาย /* หนา้ ขอ้ ความทอ่ี ธิบาย และใส่เครื่องหมาย */ หลงั สนิ้ สดุ ขอ้ ความท่ี อธิบาย
/* The first program with C */ main() { statement(s); } จากโปรแกรมตวั อย่างขา้ งตน้ มคี าอธิบายโปรแกรมดงั นคี้ อื /* The first program with C */ เป็นการอธิบายโปรแกรมบรรทดั เดียว บอกใหท้ ราบวา่ โปรแกรมนเี้ ป็นโปรแกรม แรกที่เขียนดว้ ยภาษา C โปรแกรมตวั อยา่ งที่ 2.3 แสดงการใส่คาอธิบายในโปรแกรมมากกวา่ 1 บรรทดั โดย การใชเ้ ครอ่ื งหมาย /* หนา้ บรรทดั แรกของขอ้ ความทอ่ี ธิบาย และใสเ่ ครื่องหมาย */ หลงั สนิ้ สดุ ขอ้ ความทอี่ ธิบายของบรรทดั สดุ ทา้ ย /* test.c */ /* This program is to show how to write comments */ main() { statement(s);
} จากตวั อยา่ งขา้ งตน้ มคี าอธิบายโปรแกรมดงั นีค้ ือ /* test.c */ เป็นการอธิบาย โปรแกรมบรรทดั เดียว บอกใหท้ ราบวา่ โปรแกรมช่อื test.c และ /* This program is to show how to write comments */ เป็นการอธิบายโปรแกรม 2 บรรทดั แสดงใหเ้ หน็ ถึงวธิ ีการใส่คาอธิบายในโปรแกรม ขอ้ สงั เกต ในเอกสารเลม่ นจี้ ะปรากฏการใสเ่ ครอื่ งหมาย /* … */ เพอื่ อธิบายโปรแกรม ตลอดทงั้ เลม่ ซงึ่ สว่ นมากจะใชบ้ อกใหท้ ราบชอื่ โปรแกรม และบอกหมายเลขบรรทดั เพือ่ ใชป้ ระกอบการอธิบายโปรแกรม บทท่ี 6 การใช้กระบวนการเขียนโปรแกรมคาส่งั การคานวณ เง่ือนไขกรณีและการทาซ้า การเขียนโปรแกรมแสดงข้อความดว้ ยคาส่ัง cout คาส่งั cout cout เป็นคาส่งั พนื้ ฐานในที่ใชใ้ นการ ส่ังให้แสดงผลข้อความบน หน้าจอ Output ดงั นนั้ ถา้ ตอ้ งการแสดงผลอะไรกต็ ามบนหนา้ จอ ใหน้ กึ ถึงคาสง่ั cout ไดเ้ ลยครบั รูปแบบการใช้ cout << \"ขอ้ ความทีต่ อ้ งการแสดงผล\"; ตัวอยา่ งการใช้ cout << \"Hello World !!\";
เงือ่ นไขการใช้ คาส่งั cout อย่าลมื #include ไวส้ ่วนของการประกาศ Include (ดา้ นบนของ Source file) #include <iostream> using namespace std; int main() { cout << \"Hello World !! \\n\"; cout << \"This My First Program \\n\"; cin.get(); return 0; } การเขียนโปรแกรมรับข้อมูลด้วยคาส่ัง Cin การรบั ขอ้ มลู จากผใู้ ชด้ ว้ ย คาส่งั cin การรับข้อมูล คอื การเขียน Source Code เพอื่ ใหโ้ ปรแกรมหยดุ รอ ใหผ้ ใู้ ชป้ อ้ นค่า ขอ้ มลู ผา่ นทางคียบ์ อรด์ จนกระท่งั เมอื่ รบั ค่าเสรจ็ แลว้ (กดป่มุ Enter) จะนาขอ้ มลู ทีไ่ ด้ เก็บใส่ ตวั แปร เอาไว้ ดงั นน้ั ถา้ ตอ้ งการใหโ้ ปรแกรมรบั ค่าอะไรก็ตามจากผใู้ ช้ ก็ใชว้ ธิ ีนี้ ไดเ้ ลยครบั รูปแบบการรับข้อมลู จากผู้ใชเ้ ก็บในตัวแปร cin >> ชอื่ ตวั แปร;
cin >> variable; ตวั อย่างการใช้ cin >> x; cin >> number เง่อื นไข ใชค้ าส่งั cin อย่าลืม ต้องใชค้ กู่ ับตวั แปร และมี เครอื่ งหมาย >> ค่นั เสมอ #include <iostream> using namespace std; int main() { int num; cout << \"Enter Number : \"; cin >> num; cin.get(); return 0; } การแสดงคา่ จากตวั แปร #include<stdio.h> void main()
{ int age = 20; char sex = ‘f’; float grade = 3.14; char name[10] = “malee”; printf(“You are %s\\n”,name); printf(“You are %c\\n”,sex); printf(“You are %d years old\\n”,age); printf(“You grade is %f\\n”,grade); } ตารางแสดงสญั ลกั ษณแ์ สดงผล
นิพจน์ นิพจน์ คือ กล่มุ ของขอ้ มลู ซ่งึ อาจจะอยใู่ นรูปของคา่ คงท่ีหรอื ตวั แปรมาดาเนินการโดย ใชเ้ ครือ่ งหมายต่าง ๆ ไมว่ า่ จะเป็นเครอื่ งหมายทางคณิตศาสตร์ เครื่องหมายการ เปรียบเทยี บ หรือ เครอ่ื งหมายทางตรรกศาสตร์ ตวั อย่าง นพิ จนท์ างคณติ ศาสตร์ เช่น (b * b – 4 * a + c) / (2 * a) หรอื 3y + 50 = 100 นิพจนท์ างตรรกศาสตร์ เชน่ (c> 100) && (a <= b) เป็นตน้ ดงั นน้ั ในการเขยี นผงั งานหรือการเขยี นโปรแกรมแต่ละระบบ อาจมีการใช้ เคร่ืองหมายหรอื ตวั ดาเนนิ การในการคานวณหลายอยา่ ง และมกี ารใชเ้ ครื่องหมาย หลายประเภท มีการเปรียบเทียบ หลายเงอ่ื นไข หรือมีนพิ จนท์ ีซ่ บั ซอ้ นน่นั เอง ตัวอยา่ งนพิ จนท์ างคณิตศาสตร์ นิพจนท์ าง นิพจนท์ าง กาหนดค่าและ ผลลัพธ์ คณติ ศาสตร์ การแทนค่า
คณิตศาสตร์ ใน ตามปกติ ภาษาคอมพวิ เตอร์ x+y-z x+y-z X=10 , y=20 , 25 z=5 แทนคา่ 10+20-5 2r 2*r r = 130 260 แทนคา่ 2 * 130 b2 – 4a+c b*b–4*a+c a =-30 , b=7 , 174 c=5 แทนคา่ 7 * 7 – 4 * -30 + 5 ( a – b ) % ( c + d ) ( a + b) / (c -d) a =45 , b=10 , 1 c=58 , d = 3 แทนค่า (45 + 10) / (58 - 3)
ตวั อยา่ งนพิ จนท์ างตรรกศาสตร์ โดยกาหนดให้ตัวแปร a = 25 , b = -124 และ c=0 ตวั ดาเนนิ การ ในการเขยี นโปรแกรมตวั ดาเนินการจะเป็นตวั ทาหนา้ ทีร่ วมคา่ ตา่ งๆ และกระทากบั ค่า ต่างๆ ใหเ้ ป็นคา่ เดียวกนั อยา่ งเชน่ โปรแกรมในบทที่ผ่านมามีการนาขอ้ มลู ทีเ่ ป็นตวั แปรมาคณู กบั ค่าคงที่ ซึง่ จะตอ้ งใชต้ วั ดาเนินการทางคณติ ศาสตรเ์ พอื่ ทาการคณู ตวั ดาเนนิ การมีหลายประเภทดงั ต่อไปนี้ ตวั ดาเนนิ การเลขคณิต ตวั ดาเนนิ การเปรียบเทยี บ ตวั ดาเนินการทางตรรกะ ตวั ดาเนนิ การแบบบิต ตวั ดาเนนิ การกาหนดค่าเชงิ ประกอบ ตวั ดาเนนิ การเพิม่ ค่าและลดค่า
1. ตัวดาเนนิ การเลขคณิต ใชส้ าหรบั กระทาการคานวณทางคณติ ศาสตร์ เช่น บวก ลบ คณู หาร โดยจะ นาขอ้ มลู ตวั หนึ่งไปกระทากบั อีกตวั หนึ่ง โดยใชผ้ ลลพั ธเ์ ป็นตวั เลขทางคณิตศาสตร์ ตวั ดาเนนิ การทางคณติ ศาสตร์ แบ่งออกไดด้ งั ต่อไปนี้ วดาเนิน กระบวนการ ขอ้ มลู ที่ถกู ข้อมลู ผลลพั ธ์ การ กระทา + บวก (Addition) จานวนเตม็ จานวนเตม็ , จานวนจริง , จานวนจรงิ - ลบ (Subtraction) จานวนเต็ม จานวนเต็ม , จานวนจรงิ , จานวนจริง * คณู (Multiplication) จานวนเต็ม จานวนเต็ม , จานวนจรงิ , จานวนจริง / หาร (Real Number จานวนเต็ม จานวนจริง Division) , จานวนจรงิ % การหารแบบเอา จานวนเตม็ จานวนเต็ม เศษ (Modulus) 2.ตวั ดาเนินการเพิม่ คา่ และลดคา่ ตัวดาเนินการเพมิ่ ค่า (Increment Operator) ใชเ้ ครอ่ื งหมาย ++ ตัวดาเนนิ การลดค่า (Decrement Operator) ใชเ้ ครื่องหมาย --
โดยการเพิ่มค่า หรอื การลดค่าดว้ ยตวั ดาเนนิ การดงั กลา่ ว จะเพิ่มทลี ะหน่งึ หรอื ลดทีละหน่ึง และจะตอ้ งใชก้ บั ตวั แปรโดดๆ โดยสามารถใชเ้ ครอื่ งหมาย ++ และ - - เขยี นนาหนา้ ตวั แปร (Prefix) หรือหลงั ตวั แปร (Postfix) กไ็ ด้ เชน่ ++i หรอื i++ แต่ ทงั้ สองแบบนจี้ ะมีวธิ ีการจดั การกบั ค่าที่แตกต่างกนั ดงั ตาราง ตวั นพิ จน์ ความหมาย ดาเนนิ การ ++ (Prefix) ++a เพม่ิ คา่ ใหก้ บั a หน่งึ คา่ ก่อน จงึ นาค่าใหม่ของ a ใน นิพจนน์ ไี้ ปใช้ ++ a++ นาค่าปัจจบุ นั ของ a ในนิพจนน์ ไี้ ปใชก้ อ่ น จึงเพิ่มคา่ (Postfix) ใหก้ บั a หนงึ่ คา่ -- (Prefix) --b ลดค่าใหก้ บั b หนงึ่ ค่าก่อน จงึ นาค่าใหมข่ อง b ใน นพิ จนน์ ไี้ ปใช้ -- (Postfix) b-- นาค่าปัจจบุ นั ของ b ในนิพจนน์ ไี้ ปใชก้ ่อน จงึ ลดค่า ใหก้ บั b หนง่ึ ค่า หมายเหตุ ++i , i++ หมายถงึ i = i + 1 --j , j-- หมายถงึ j = j – 1 3.ลาดับความสาคญั ของตวั ดาเนินการ ในการเขียนโปรแกรมเพอ่ื ใชง้ านจาเป็นตอ้ งเก่ยี วขอ้ งกบั นิพจนท์ างคณติ ศาสตร์ และ สตู รคานวณตา่ งๆไม่มากก็นอ้ ย และสง่ิ เหลา่ นตี้ อ้ งใชต้ วั ดาเนนิ การตา่ งๆ เขา้ ไป ประกอบการใชง้ าน และตวั ดาเนนิ การแต่ละตวั ตา่ งก็มลี าดบั ความสาคญั ของการ
ทางานก่อนหลงั แตกต่างกนั ไป ดงั นน้ั จึงมีความจาเป้นตอ้ งเรยี นรูถ้ ึงลาดบั การทางาน ของตวั ดาเนนิ การแตล่ ะตวั ว่าตวั ใดมีความสาคญั สงู ตวั ใดมีความมสาคญั ตา่ เพื่อให้ ไดผ้ ลลพั ธอ์ ยา่ งถกู ตอ้ ง ลาดบั ที่ เครื่องหมาย ลาดับการทางาน 1 () 2 ++ , -- ซา้ ยไปขวา 3 *, / , % ซา้ ยไปขวา 4 +, - ซ้ายไปขวา 5 < , <= , > , >= ซา้ ยไปขวา 6 == , != ซ้ายไปขวา 7 && ซา้ ยไปขวา 8 || ซ้ายไปขวา 9 = , += , - ซ้ายไปขวา = , *= , /= , %= ลาดบั ท่ี 1 คือ สาคญั มากที่สดุ ตอ้ งทากอ่ น ลาดบั ที่ 9 คอื สาคญั นอ้ ยทีส่ ดุ ทาสดุ ทา้ ย ตวั อย่างเช่น 3+2*5=? เครอ่ื งหมาย * คณู อย่ลู าดบั ท่ี 3 สาคญั กวา่ + บวก ซง่ึ อย่ลู าดบั ท่ี 4 ดงั นน้ั
ตอ้ งทาคณู กอ่ น คาตอบทถี่ กู ตอ้ งคอื 13 ในการทางานของตวั ดาเนนิ การทางคณติ ศาสตร์ คอมพิวเตอรจ์ ะมลี าดบั การทางาน ดงั นี้ 1. ( ) คอมพวิ เตอรจ์ ะทาการคานวณในวงเล็บก่อนเสมอ 2. * / % จากนน้ั จะทาการคณู หาร มอดลู สั เรยี งจากซา้ ยไปขวา เจอ เครือ่ งหมายใดกอ่ น ทากอ่ น 3. + - และทาการบวก ลบ เรียงจากซา้ ยไปขวา 4.ตัวดาเนินการเปรยี บเทยี บ ตวั ดาเนินการเปรียบเทียบ (Relation Operators) จะนาขอ้ มลู สองค่ามาเปรียบเทยี บ กนั โดยขอ้ มลู ทงั้ สองคา่ จะตอ้ งเป็นขอ้ มลู ประเภทเดียวกนั ผลลพั ธท์ ่ีไดจ้ ะเป็นค่าทาง ลอจกิ คอื จรงิ หรือเทจ็ ตวั ดาเนินการ การกระทา == เทา่ กับ != ไมเ่ ทา่ กับ <= น้อยกว่าหรือเท่ากบั >= มากกวา่ หรอื เท่ากับ > มากกว่า < น้อยกวา่
5.ตวั ดาเนนิ การทางตรรก (Logical Operator) ตวั ดาเนนิ การทางตรรกะ (Logical Operator) ประกอบดว้ ย AND (และ) , OR (หรือ) และ NOT (นเิ สธ) เมอ่ื กระทากบั คา่ ใด ผลลพั ธท์ อี่ อกมาจะเป็นจรงิ หรือเท็จ ตวั ดาเนนิ การทางตรรกะ แสดงได้ ดงั ตารางตอ่ ไปนี้ ตวั เนนิ การ การกระทา && ดาเนนิ การ AND คา่ สองคา่ ถา้ คา่ ทงั้ สองเป็น จรงิ ผลลพั ธจ์ ะเป็นจรงิ || ดาเนนิ การ OR คา่ สองคา่ ถา้ ค่าทงั้ สองเป็นเทจ็ ผลลพั ธจ์ ะเป็นเทจ็ ! ดาเนนิ การ NOT เปล่ียนคา่ จากจรงิ เป็นเท็จ จากเท็จเป็นจรงิ 6.ตัวดาเนนิ การกาหนดคา่ เชงิ ประกอบ การใชต้ วั ดาเนนิ การบางประเภทสามารถนามารวมกนั เป็น ตวั ดาเนินการ กาหนดค่าเชิงประกอบ (Compound Assisgnment) ได้ มีรูปแบบคอื a op= b มีความหมายเทียบเท่ากบั
a = a op b เมื่อ op เป็นตวั ดาเนนิ การคานวณใดๆ ดงั ตวั อยา่ งตอ่ ไปนี้ ตวั ตวั อย่าง การประมวลผล ดาเนินการ *= a *= 1.25 a = a * 1.25 /= b /= c b=b/c %= d %= 3 d=d%3 += x += 1 x=x+1 -= y -= z y=y-z คาส่ังเงื่อนไข 1.คาส่งั เงอื่ นไข if คาส่งั If เป็นคาส่งั ทเี่ ป็นพืน้ ฐานที่สดุ สาหรบั ควบคมุ การทางานในภาษา C++ คาส่งั If ถกู ใชเ้ พอื่ ควบคมุ โปรแกรมกบั เงือ่ นไขทก่ี าหนด โคด้ ในบล็อคของ คาส่งั If จะทางาน ถา้ เง่ือนไขตรงหรือเป็นจรงิ เรามกั จะใชค้ าส่งั If ในกรณีทโ่ี ปรแกรมนน้ั ตอ้ งทางาน ภายใตเ้ ง่ือนไขบางอยา่ ง นเ่ี ป็นรูปแบบของการใชง้ านคาส่งั If ในภาษา C++
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125