วันอังคารที่ 27 สิงหาคม พ.ศ. 2556

การพัฒนาโครงงานคอมพิวเตอร์


-ประเภทของโครงงานคอมพิวเตอร์           
1. โครงงานพัฒนาสื่อเพื่อการศึกษา (Educational Media)

รูปบทเรียนคอมพิวเตอร์ช่วยสอนวิชาภาษาอังกฤษ 
รูปภาพจาก : kpc.ac.th
เป็นโครงงานทีใช้คอมพิวเตอร์ในการผลิตสื่อเพื่อการศึกษา โดยการสร้างโปรแกรมบทเรียน หรือหน่วยการเรียน ซึ่งอาจจะต้องมีภาคแบบฝึกหัด บททบทวนและคำถามคำตอบไว้พร้อม ผู้เรียนสามารถเรียนแบบรายบุคคลหรือรายกลุ่ม การสอนโดยใช้คอมพิวเตอร์ช่วยนี้ ถือว่าเครื่องคอมพิวเตอร์เป็นอุปกรณ์การสอน ไม่ใช่เป็นครูผู้สอน ซึ่งอาจเป็นการพัฒนาบทเรียนแบบ Online ให้นักเรียนเข้ามาศึกษาด้วยตนเองก็ได้
โครงงานประเภทนี้สามารถพัฒนาขึ้นเพื่อใช้ประกอบการสอนในวิชาต่าง ๆ ไม่ว่าจะเป็นสาขาคอมพิวเตอร์ วิชาคณิตศาสตร์ วิชาวิทยาศาสตร์ วิชาสังคม วิชาชีพอื่น ๆ ฯลฯ โดยนักเรียนอาจคัดเลือกหัวข้อที่นักเรียนทั่วไปที่ทำความเข้าใจยาก มาเป็นหัวข้อในการพัฒนาโปรแกรมบทเรียน ตัวอย่าง เช่น โปรแกรมสอนวิธีการใช้งาน ระบบสุริยะจักรวาล โปรแกรมแบบทดสอบวิชาต่าง ๆ
 2. โครงงานพัฒนาเครื่องมือ (Tools Development)
    เป็นโครงงานเพื่อพัฒนาเครื่องมือมาใช้ช่วยสร้างงานประยุกต์ต่าง ๆ ซึ่งโดยส่วนใหญ่จะเป็นในรูปซอฟต์แวร์ ตัวอย่างของเครื่องมือช่วยงาน เช่น ซอฟต์แวร์วาดรูป ซอฟต์แวร์พิมพ์งาน ซอฟต์แวร์ช่วยการมองวัตถุในมุมต่าง ๆ เป็นต้น สำหรับซอฟต์แวร์เพื่อการพิมพ์งานนั้นสร้างขึ้นเป็นโปรแกรมประมวลผลภาษา ซึ่งจะเป็นเครื่องมือให้เราใช้งานในงานพิมพ์ต่าง ๆ บนเครื่องคอมพิวเตอร์เป็นไปได้โดยง่าย ซึ่งรูปที่ได้สามารถนำไปใช้งานต่าง ๆ ได้มากมาย สำหรับซอฟต์แวร์ช่วยในการมองวัตถุในมุมต่าง ๆ ใช้สำหรับช่วยในการออกแบบสิ่งของต่าง ๆ  อาทิเช่น ผู้ใช้วาดแจกันด้านหน้า และต้องการจะดูว่าด้านบนและด้านข้างเป็นอย่างไร ก็ให้ซอฟต์แวร์คำนวณค่าและภาพที่ควรจะเป็นมาให้ เพื่อพิจารณาและแก้ไขภาพแจกันที่ออกแบบไว้ได้อย่างสะดวก เช่น โปรแกรมประเภท 3D
3. โครงงานประเภทการทดลองทฤษฎี (Theory Experiment) 

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

เป็นโครงงานที่ใช้คอมพิวเตอร์ในการสร้างผลงานเพื่อประยุกต์ใช้งานจริงในชีวิตประจำวัน เช่น ซอฟต์แวร์สำหรับการออกแบบและตกแต่งอาคาร ซอฟต์แวร์สำหรับการผสมสี ซอฟต์แวร์สำหรับการระบุคนร้าย เป็นต้น โครงงานงานประเภทนี้จะมีการประดิษฐ์ฮาร์ดแวร์ ซอฟต์แวร์ หรืออุปกรณ์ใช้สอยต่าง ๆ ซึ่งอาจจะสร้างใหม่หรือปรับปรุงดัดแปลงของเดิมที่มีอยู่แล้วให้มีประสิทธิภาพสูงขึ้นก็ได้ โครงงานลักษณะนี้จะต้องศึกษาและวิเคราะห์ความต้องการของผู้ใช้ก่อนแล้วนำข้อมูลที่ได้มาใช้ในการออกแบบ และพัฒนาสิ่งของนั้น ๆ ต่อจากนั้นต้องมีการทดสอบการทำงานหรือทดสอบคุณภาพของสิ่งประดิษฐ์แล้วปรับปรุงแก้ไขให้มีความสมบูรณ์ โครงงานประเภทนี้นักเรียนต้องใช้ความรู้เกี่ยวกับเครื่องคอมพิวเตอร์ ภาษาโปรแกรม และเครื่องมือต่าง ๆ ที่เกี่ยวข้อง รวมทั้งอาจใช้วิธีทางวิศวกรรมฮาร์ดแวร์และซอฟต์แวร์ในการพัฒนาด้วย เป็นโครงงานที่ใช้คอมพิวเตอร์ในการสร้างผลงานเพื่อประยุกต์ใช้งานจริงในชีวิตประจำวัน เช่น ซอฟต์แวร์สำหรับการออกแบบและตกแต่งอาคาร ซอฟต์แวร์สำหรับการผสมสี ซอฟต์แวร์สำหรับการระบุคนร้าย เป็นต้น โครงงานงานประเภทนี้จะมีการประดิษฐ์ฮาร์ดแวร์ ซอฟต์แวร์ หรืออุปกรณ์ใช้สอยต่าง ๆ ซึ่งอาจจะสร้างใหม่หรือปรับปรุงดัดแปลงของเดิมที่มีอยู่แล้วให้มีประสิทธิภาพสูงขึ้นก็ได้ โครงงานลักษณะนี้จะต้องศึกษาและวิเคราะห์ความต้องการของผู้ใช้ก่อนแล้วนำข้อมูลที่ได้มาใช้ในการออกแบบ และพัฒนาสิ่งของนั้น ๆ ต่อจากนั้นต้องมีการทดสอบการทำงานหรือทดสอบคุณภาพของสิ่งประดิษฐ์แล้วปรับปรุงแก้ไขให้มีความสมบูรณ์ โครงงานประเภทนี้นักเรียนต้องใช้ความรู้เกี่ยวกับเครื่องคอมพิวเตอร์ ภาษาโปรแกรม และเครื่องมือต่าง ๆ ที่เกี่ยวข้อง รวมทั้งอาจใช้วิธีทางวิศวกรรมฮาร์ดแวร์และซอฟต์แวร์ในการพัฒนาด้วย
5. โครงงานพัฒนาเกม (Game Development) 






เป็นโครงงานพัฒนาซอฟต์แวร์เกมเพื่อความรู้ และ/หรือ ความเพลิดเพลิน เช่น เกมหมากรุก เกมหมากฮอส เกมการคำนวณเลข ซึ่งเกมที่พัฒนาขึ้นนี้น่าจะเน้นให้เป็นเกมที่ไม่รุนแรง เน้นการใช้สมองเพื่อฝึกคิดอย่างมีหลักการ โครงงานประเภทนี้จะมีการออกแบบลักษณะและกฎเกณฑ์การเล่น เพื่อให้น่าสนใจแก่ผู้เล่น พร้อมทั้งให้ความรู้สอดแทรกไปด้วย ผู้พัฒนาควรจะได้ทำการสำรวจและรวบรวมข้อมูลเกี่ยวกับเกมต่าง ๆ ที่มีอยู่ทั่วไปและนำมาปรับปรุงหรือพัฒนาขึ้นใหม่เพื่อให้ป็นเกมที่แปลกใหม่และน่าสนใจแก่ผู้เล่นกล่มต่าง ๆ
การจัดทำโครงงานคอมพิวเตอร์นั้น ผู้เรียนควรมีความรู้พื้นฐานเกี่ยวกับการทำงานของเครื่องคอมพิวเตอร์ หลักการที่ใช้ในการแก้ปัญหา กระบวนการแก้ปัญหา หลักการเขียนโปรแกรม และการแทนข้อมูลในคอมพิวเตอร์ ก่อนที่จะเริ่มทำโครงงาน และใช้ความรู้ดังกล่าวเป็นพื้นฐานในการสร้างความรู้ใหม่ในโครงงานคอมพิวเตอร์ โดยในการทำโครงงานผู้เรียนอาจจะมีโอกาสได้ทำความรู้จักกับความรู้ใหม่เพิ่มเติมอีกด้วย เช่น ปัญญาประดิษฐ์ (Artificial Intelligence) การออกแบบฐานข้อมูล (Database Design) และการสืบค้นข้อมูล (Information Retrieval) เป็นต้น ซึ่งจะขึ้นอยู่กับหัวข้อที่ผู้เรียนเลือกทำโครงงาน

-ขั้นตอนการทำโครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์เป็นกิจกรรมที่ต้องทำอย่างต่อเนื่องหลายขั้นตอน และแต่ละขั้นตอนจะมีความสำคัญต่อโครงงานนั้น ๆ การแบ่งขั้นตอนของการทำโครงงานอาจแตกต่างกัน ทั้งนี้ขึ้นอยู่กับลักษณะของโครงงานและการวางแผนการทำโครงงานในที่นี้จะบ่งการทำงานออกเป็น 6 ขั้นตอนดังนี้
1. การคัดเลือกหัวข้อโครงงานที่สนใจทำ
โดยทั่วไปเรื่องที่จะนำมาพัฒนาเป็นโครงงานคอมพิวเตอร์ มักจะได้มาจากปัญหา คำถาม หรือความสนใจในเรื่องต่าง ๆ จากการสังเกตสิ่งต่าง ๆ รอบตัว นักเรียนสามารถจะศึกษาการได้มาของเรื่องที่จะทำโครงงาน การอ่านค้นคว้า การไปเยี่ยมชมสถานที่ต่าง ๆ การฟังบรรยาย รายการวิทยุโทรทัศน์ สนทนาอภิปราย กิจกรรมการเรียนการสอน งานอดิเรก การเข้าชมงานนิทรรศการหรืองานประกวดโครงงานคอมพิวเตอร์ ในการตัดสินใจเลือกหัวข้อที่จะนำมาพัฒนาโครงงานคอมพิวเตอร์ ควรพิจารณาองค์ประกอบสำคัญดังนี้http://ipattapong.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif?m=1207340914g
- จะต้องมีความรู้และทักษะพื้นฐานอย่างเพียงพอในหัวข้อเรื่องที่จะศึกษา
- สามารถจัดหาเครื่องคอมพิวเตอร์และซอฟต์แวร์ที่เกี่ยวข้องได้
- มีแหล่งความรู้เพียงพอที่จะค้นคว้าหรือขอคำปรึกษา
- มีเวลาเพียงพอ
- มีงบประมาณเพียงพอ
- มีความปลอดภัย
2. ศึกษาค้นคว้าจากเอกสารและแหล่งข้อมูล
รวมถึงการขอคำปรึกษาจากผู้ทรงคุณวุฒิช่วยจะช่วยให้นักเรียนได้แนวคิดที่ใช้ในการกำหนดของเขตของเรื่องที่จะศึกษาได้เฉพาะเจาะจงมากยิ่งขึ้น รวมทั้งความรู้เพิ่มเติมในเรื่งที่จะศึกษาจนสามารถใช้ออกแบบและวางแผนดำเนินการทำโครงงานนั้นได้อย่างเหมาะสมในการศึกษาค้นคว้าดังกล่าว นักเรียนจะต้องบันทึกสรุปสาระสำคัญไว้ด้วย
จะต้องพิจารณาดังนี้ มูลเหตุจูงใจและเป้าหมายในการทำ วัสดุอุปกรณ์ ความต้องการของผู้ใช้งานและคุณลักษณะของผลงาน (Requirement and Specification) วิธีการประเมินผล วิธีการพัฒนา ข้อสรุปของโครงงาน ความแปลกใหม่ ความคิดสร้างสรรค์ แนวทางในการปรับปรุงหรือขยายการทดลองจากงานเดิม
3. การจัดทำเค้าโครงของโครงงานที่จะทำ จำเป็นต้องกำหนดกรอบแนวคิดและวงแผนการพัฒนาล่วงหน้าเพื่อคาดการณ์ความเป็นไปได้ของโครงงาน ขั้นตอนที่สำคัญคือ ศึกษาค้นคว้าเอกสาร วิเคราะห์ข้อมูล ออกแบบการพัฒนา เสนอเค้าโครงของโครงงานต่ออาจารย์ที่ปรึกษา เพื่อขอคำแนะนำและปรับปรุงแก้ไข
4. การลงมือทำโครงงาน เมื่อเค้าโครงได้รับความเห็นชอบจากอาจารย์ที่ปรึกษาแล้ว ขั้นตอนต่อไปจะเป็นการพัฒนาตามขั้นตอนที่ได้วางแผนไว้ดังนี้ เตรียมการ ลงมือพัฒนา ตรวจสอบผลงานและแกไข อภิปรายผลและข้อเสนอแนะ แนวทางในการพัฒนาโครงงานในอนาคต
5. การเขียนรายงาน เป็นสื่อความหมายเพื่อให้ผู้อื่นได้เข้าใจแนวความคิด วิธีดำเนินการศึกษาค้นคว้า ข้อมูลที่ได้ ตลอดจนข้อสรุปและข้อเสนอแนะต่าง ๆ เกี่ยวกับโครงงานนั้น ในการเขียนควรใช้ภาษาที่อ่านเข้าใจได้ง่าย ชัดเจน กระชับ และตรงไปตรงมาให้ครอบคลุมหัวข้อต่าง ๆ
6. การนำเสนอและการแสดงผลงานของโครงงาน เป็นการนำเสนอเพื่อแสดงออกถึงผลิตผลของความคิด ความพยายามในการทำงานที่ผู้ทำโครงงานได้ทุ่มเท และเป็นวิธีที่ให้ผู้อื่นได้รับรู้และเข้าใจในโครงงานนั้น ในการเสนออาจทำได้หลายรูปแบบ เช่น ติดโปสเตอร์ การรายงานตัวในที่ประชุม การแสดงผลงานด้วยสื่อต่าง การจัดนิทรรศการ การอธิบายด้วยคำพูด

วันอาทิตย์ที่ 11 สิงหาคม พ.ศ. 2556


7.1 โปรแกรมภาษาซี


             การพัฒนาโปรแกรมคอมพิวเตอร์ บางคนก็ว่ายาก บางคนก็ว่าเป็นเรื่องสนุก หลายคนบอกว่า ขอเป็นแค่ผู้ใช้สนุกที่สุด แต่จะมีซักกี่คนที่จะมีใจรักที่จะก้าวไปบนถนนแห่งการพัฒนาฝีมือและฝึกฝนการ เขียนโปรแกรมด้วยตัวเอง เพื่อให้มีผู้ที่สนใจนำไปใช้งาน และเพิ่มประสิทธิ์ภาพในการทำงาน และ ความสะดวกสบายๆ ต่างๆมากขึ้น ว่าไปแล้วนักโปรแกรมเมอร์เหล่านี้ ก็ไม่แตกต่างจากผู้ที่ปิดทองหลังพระมากนัก เพราะหลายๆ โปรแกรมที่มีให้ใช้งานกันในปัจจุบัน จะมีใครทราบบ้างไหมว่า ผู้เขียนโปรแกรมเหล่านั้นมีใครกันบ้าง ดังนั้น ผู้ที่คิดจะก้าวมาเป็นนักพัฒนาโปรแกรมมืออาชีพ คงต้องอาศัยใจรักที่จะอยากจะพัฒนา และฝึกฝนฝืมือในการเป็นโปรแกมเมอร์มืออาชีพมาเป็นอันดับหนึ่ง สำหรับบทความนี้จะเริ่มต้นด้วยการสอนให้เข้าใจในหลักการพื้นฐานของการการ พัฒนาโปรแกรมในภาษาความรู้และความเข้าใจที่จำเป็นต่อการเป็นโปรแกรมเมอร์มืออาชีพในอนาคต เราลองเริ่มมาเรียนรู้กันอย่างคร่าวๆ กันเลยล่ะกัน โดยผู้เขียนจะอธิบายเป็นตอนๆ ทั้งหมด 8 ตอนด้วยกันได้แก่
1. พื้นฐานโปรแกรมภาษา C (Introduction to C Programming)
2. การเขียนโปรแกรมทางเลือก (Selection Structures)
3. การเขียนโปรแกรมแบบ วนซ้ำ (Repetition & Loop)
4. ฟังก์ชัน และการเขียนโปรแกรมแยกเป็นโมดูล (Functions & Modular Programming)
5. ตารางอาเรย์ (Arrays)
6. ตัวแปรพอยเตอร์ (Pointers)
7. ตัวแปรสตริง (String)
8. โครงสร้างสตักเจอร์ (Structure)
1. พื้นฐานโปรแกรมภาษา C (Introduction to C Programming)
ก่อนอื่นของแนะนำพื้นฐานเกี่ยวกับคอมพิวเตอร์กันซักนิด ก่อนที่จะเริ่มเรียนรู้ภาษา C กัน หน่วยสำคัญที่สุดของคอมพิวเตอร์ก็คือ หน่วยประมวลผลหรือที่เรียกกันว่า CPU โดยปกติ CPU จะมีภาษาของตัวเองที่เรียกว่า ภาษาเครื่อง (Machine Language) ซึ่งจะเป็นภาษาที่ประกอบไปด้วยเลขฐานสองมากมาย ดังนั้นการที่จะเขียนโปรแกรมควบคุมการทำงานของคอมพิวเตอร์ โดยใช้ภาษาเครื่องโดยตรงนั้นจึงทำได้ยาก จึงได้มีการพัฒนาตัวแปรภาษาเครื่องที่เรียกว่า โปรแกรมภาษาระดับสูงขึ้นมา หรือที่เรียกว่า High Level Languagesโดยภาษาในระดับสูงเหล่านี้ จะมีลักษณะรูปแบบการเขียน (Syntax) ที่ทำให้เข้าใจได้ง่ายต่อการสื่อสารกับผู้พัฒนา และถูกออกแบบมาให้ง่ายต่อการใช้งาน และจะเปลี่ยนคำสั่งจากผู้ใช้งาน ไปเป็นเป็นภาษาเครื่อง เพื่อที่จะควบคุมการทำงานของคอมพิวเตอร์ต่อไป ตัวอย่างของโปรแกรมภาษาระดับสูง ได้แก่ COBOL ใช้กันมากสำหรับโปรแกรมทางด้านธุรกิจ, Fortran ใช้กันมากสำหรับการพัฒนาโปรแกรมด้านวิทยาศาสตร์และวิศวกรรมศาสตร์ เพราะง่ายต่อการคำนวณ, Pascal มีใช้กันทั่วไป แต่เน้นสำหรับการพัฒนาเครื่องมือสำหรับการเรียนการสอน, C & C++ ใช้ทั่วไป ปัจจุบันมีผู้เลือกที่จะใช้กันอย่างแพร่หลาย, PROLOG เน้นหนักไปทางด้านงานประเภท AI และ JAVA ใช้ได้ทั่วไป ปัจจุบันเริ่มมีผู้หันมาสนใจกันมากและเพิ่มขึ้นอย่างรวดเร็ว
คราวนี้เราลองมาเตรียมตัวกันซักนิก ก่อนที่จะลงมือพัฒนาโปรแกรมคอมพิวเตอร์ ขั้นแรก เราต้องศึกษารูปแบบความต้องการของโปรแกรมที่จะพัฒนา จากนั้นก็วิเคราะห์ถึงปัญหาตลอดจนวิธีการแก้ปัญหา จากนั้นจึงนำเอาความคิดในการแก้ปัญหาอย่างเป็นขั้นตอน ไปเขียนในรูปแบบของโปรแกรมภาษาในระดับสูง ซึ่งจะอยู่ในรูปแบบของ Source Program หรือ Source Codeจากนั้นเราก็จะใช้ Complier ของภาษาที่เราเลือก มาทำการ Compile Source code หรือกล่าวง่ายๆ คือแปลงSource code ของเราให้เป็นภาษาเครื่องนั่นเอง ซึ่งในขั้นตอนนี้ ผลที่ได้ เราจะเรียกว่า Object code จากนั้นComplier ก็จะทำการ Link หรือเชื่อม Object code เข้ากับฟังก์ชันการทำงานใน Libraries ต่างๆ ที่จำเป็นต่อการใช้งาน แล้วนำไปไว้ในหน่วยความจำ แล้วเราก็จะสามารถ Run เพื่อดูผลของการทำงานโปรแกรมได้ หากโปรแกรมมีข้อผิดพลาด เราก็จะทำการแก้ หรือที่เรียกกันในภาษาคอมพิวเตอร์ว่า การ Debug นั่นเอง
ภาษา C เป็นโปรแกรมภาษาระดับสูง ถูกพัฒนาขึ้นในปี 1972 ที่ AT&T Bell Lab เราสามารถใช้ภาษา C มาเขียนเป็นคำสั่งต่างๆ ที่คอมพิวเตอร์สามารถเข้าใจได้ และกลุ่มของคำสั่งเหล่านี้ เราก็เรียกกันว่า อัลกอริธึม ได้มีผู้ให้คำจำกัดความของคำว่า อัลกอริธึม ว่าเป็น “A precise description of a step-by-step process that is guaranteed to terminate after a finite number of steps with a correct answer for every particular instance of an algorithmic problem that may occur.” สำหรับCompiler ภาษา C ที่มีในปัจจุบัน มี 2 ค่ายใหญ่ๆ ที่มีผู้คนสนใจใช้กันมากได้แก่ Microsoft และ Borlandการใช้งาน Compiler ทั้งสองตัวนี้ สามารถเรียนรู้ได้ไม่ยากนัก เราจึงจะมาเริ่มต้นที่การเขียนโปรแกรมในภาษากันเลย เราลองมาเริ่มจากตัวอย่างการเขียน ภาษา Cแบบ ง่ายๆ กันก่อนกับโปรแกรม Hello World

#include
main()
{
printf("Hello World  !! ");
}
บรรทัดแรก #include เป็นการบอกว่าให้ทำการรวมHeader file ที่ชื่อว่า stdio.h (.h = header) ซึ่งเป็น headerที่เกี่ยวข้องกับการรับและให้ข้อมูล (Standard Input Output) นอกจาก stdio.h แล้ว ก็ยังมี Header อื่นๆ ที่ผู้พัฒนาสามารถที่จะเรียกใช้งาน Function ที่จำเป็นจากHeader นั้นๆ ได้ อาทิเช่น5519
รู้จัก Header File กันไปล่ะ คราวนี้ เราลองมาดูบรรทัดถัดไปกัน ก็คือ ฟังก์ชัน main() จะเป็นจุดเริ่มต้นของโปรแกรม และโปรแกรมทุกโปรแกรมในภาษา C จะต้องมี Function main() นี้ โดยส่วนมาก เราจะใช้Function main() ในการกำหนดค่าเริ่มต้นต่างๆ ของโปรแกรม จากนั้นจึงเข้าสู่ Function ต่างๆ ที่ผู้พัฒนา ได้กำหนดขึ้นไว้

บรรทัดถัดมาจะเป็นเครื่องหมาย { ซึ่งเป็นเครื่องหมายบ่งบอกขอบเขตของ Function โดยขอบเขตของฟังก์ชัน จะเปิดและปิดโดยใช้เครื่องหมายเปิด { และเครื่องหมายปิด } ตามลำดับ ภายใน Function main()จะมีคำสั่ง (Statement) printf("Hello World !! "); ซึ่งprintf เป็น Function ในภาษา C ทำหน้าที่ให้โปรแกรม ทำการแสดงผลออกทางหน้าจอว่า Hello World  !! และทุกครั้ง ผู้พัฒนาจะต้องทำการจบคำสั่งหรือ Statementด้วยเครื่องหมาย semi-colon ;
ดังนั้นรูปแบบของการเขียนโปรแกรม จึงเขียนออกมาในรูปแบบดังนี้
// ข้อความที่อยู่ข้างหลังเครื่องหมาย // จะเป็นคำอธิบายโปรแกรม
#include
void main()
{
constant declarations; // การกำหนดค่าคงที่ต่างๆ
variable declarations; // การกำหนดตัวแปรต่างๆ
executable statements; // คำสั่งการทำงานของโปรแกรม
}
การอ่านข้อมูลและการแสดงผล (Input & Output)
รูปแบบการใช้งานฟังก์ชัน printf จะทำการพิมพ์ในรูปแบบที่ เริ่มต้นด้วย Format ที่ต้องการจะพิมพ์ และตามด้วยตัวแปรที่ต้องการพิมพ์ ดังนี้
printf( const char *format [, argument]... );
สำหรับการนำข้อมูลเข้าก็เช่นกัน จะใช้ฟังก์ชัน scanfซึ่งจะเป็นฟังก์ชันสำหรับอ่านข้อมูลจากคีย์บอร์ด และจะนำข้อมูลที่ User ทำการพิมพ์ไปเก็บไว้ใน argumentโดยแต่ละ argument จะต้องเป็นตัวแปรที่เรียกว่าpointer (รายละเอียดจะได้กล่าวต่อไป) และมีชนิดที่ตัวแปรที่สัมพันธ์กับที่ได้กำหนดไว้ใน Format รูปแบบการใช้งานของฟังก์ชัน scanf สามารถเขียนได้ดังนี้
scanf( const char *format [,argument]... );



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

7.2.3 การเตรียมข้อมูลสำหรับทดสอบโปรแกรม
ในระหว่างขั้นตอนการออกแบบวิธีการแก้ปัญหาให้อยู่ในรูปของรหัสลำลองหรือผังงานนั้นนักเขียนโปรแกรมควรพิจารณาถึงข้อมูลที่จะนำมาใช้ในการทดสอบโปรแกรมที่จะเขียนขึ้นด้วยความสมบูรณ์ของข้อมูลที่ใช้ในการทดสอบโปรแกรมมีความสำคัญมาก เนื่องจากจะเป็นสิ่งบ่งบอกถึงความถูกต้องของโปรแกรมที่พัฒนาขึ้น ว่ามีความถูกต้องครอบคลุมข้อมูลนำเข้าทุกรูปแบบ โดยตรวจสอบว่ามีข้อมูลนำเข้ารูปแบบใดที่โปรแกรมไม่สามารถรองรับได้ เช่น ข้อมูลไม่อยู่ในช่วงที่ถูกต้อง และข้อมูลที่รับเข้าเป็นตัวเลขแต่ผู้ใช้ป้อนค่าเป็นตัวอักษร
7.2.4 การทดสอบโปรแกรม
หลังจากได้เขียนโปรแกรมและเตรียมข้อมูลสำหรับทดสอบอย่างครบถ้วนแล้ว ขั้นตอนทดสอบโปรแกรมก็จะสามารถดำเนินการได้ ถ้าหากว่าโปรแกรมที่พัฒนาขึ้นมีความซับซ้อนไม่มากนัก นักเขียนโปรแกรมสามารถทำการทดสอบโดยรับโปรแกรม ป้อนข้อมูลทีละชุด และตรวจสอบความถูกต้องของผลลัพธ์ที่ได้ ซึ่งเป็นวิธีที่ง่านและเหมาะสำหรับผู้เริ่มต้นฝึกหัดการเขียนโปรแกรม เนื่องจากสามารถทดสอบโปรแกรมได้อย่างรวดเร็ว ในบางครั้งนักเขียนโปรแกรมอาจต้องใช้โปรแกรมเฉพาะเพื่อทำการรันโปรแกรมที่พัฒนาขึ้น และทดสอบกับชุดข้อมูลทดสอบอย่างอัตโนมัติ
7.2.5 การจัดทำเอกสารประกอบโปรแกรม
ขั้นตอนสุดท้ายหลังจากที่ได้ทดสอบจนแน่ใจว่าโปรแกรมทำงานได้ถูกต้องกับชุดข้อมูลทดสอบทั้งหมดแล้ว คือการจัดทำเอกสารประกอบ ในขั้นตอนนี้นักเขียนโปรแกรมจะต้องรวบรวมรายละเอียดทั้งหมดในระหว่างการพัฒนาโปรแกรม เช่น รายละเอียดของปัญหาที่ได้ทำการวิเคราะห์ไว้ ข้อมูลออกที่ต้องการ ข้อมูลเข้าที่เป็นไปได้ทั้งหมด วิธีการประมวลผลเพื่อแก้ปัญหารหัสลำลองหรือผังงานที่ได้รับการปรับปรุงแล้ว และสอดคล้องกับโปรแกรมที่ได้พัฒนาขึ้น ภาษาที่ใช้คุณลักษณะของเครื่องคอมพิวเตอร์ และรุ่นของระบบปฏิบัติการที่โปรแกรมทำงานด้วย ชุดข้อมูลทดสอบ และผลการทดสอบโปรแกรม โดยนำรายละเอียดทั้งหมดนี้ มาจัดทำเป็นรายงานหรือเอกสาร เพื่อจัดเก็บควบคู่กับตัวโปรแกรมต้นฉบับที่พัฒนาขึ้น สำหรับใช้อ้างอิงในอนาคตเมื่อต้องการแก้ไข หรือพัฒนาโปรแกรมต่อไป นอกจากนี้ควรมีการจัดทำคู่มือสำหรับผู้ใช้ ซึ่งอธิบายขั้นตอนในการใช้งานโปรแกรม เพื่อให้ผู้ใช้เข้าใจวิธีใช้งานอย่างถูกต้องและรวดเร็ว
    ในบทนี้จะได้อธิบายถึงรายละเอียดในขั้นตอนการเขียนโปรแกรม จากรหัสลำลองหรือผังงาน และภาษาโปรแกรมคอมพิวเตอร์ต่างๆต่อไป
   -ภาษาโปรแกรมคอมพิวเตอร์
การแก้ปัญหาด้วยคอมพิวเตอร์นั้น หลังจากที่ได้วิเคราะห์ปัญหาจนได้ขั้นตอนวิธีในการแก้ปัญหา ซึ่งอาจจะอยู่ในรูปแบบรหัสลำลอง หรือผังงาน ขั้นตอนต่อไปคือการเขียนโปรแกรมคอมพิวเตอร์ขึ้นเพื่อแก้ปัญหาตามขั้นตอนที่ได้วางแผนไว้ แต่เนื่องจากคอมพิวเตอร์จะรับรู้คำสั่งที่เป็นภาษาเครื่องเท่านั้นและมนุษย์ไม่สามารถเขียนโปรแกรมภาษาเครื่องได้โดยตรง เนื่องจากไม่สะดวก ยากต่อการทำความเข้า จึงได้มีการสร้างภาษาคอมพิวเตอร์ระดับสูงขึ้นมาเพื่อให้ง่ายต่อการเขียนโปรแกรม ผู้เขียนโปรแกรมไม่จำเป็นต้องเรียนรู้การทำงาน และโครงสร้างภายในของเครื่องคอมพิวเตอร์ ก็สามารถเขียนโปรแกรมได้โดยต้องผ่านการแปลให้เป็นภาษาเครื่องก่อนที่จะใช้สั่งงานคอมพิวเตอร์ได้
  

วันศุกร์ที่ 2 สิงหาคม พ.ศ. 2556

หลักการแก้ปัญหาด้วยคอมพิวเตอร์


6.1 หลักการแก้ปัญหา
       ในชีวิตประจำวันทุกคนต้องเคยพบกับปัญหาต่างๆ ไม่ว่าจะเป็นปัญหาด้านการเรียน การงาน การเงิน หรือแม้แต่ในการเล่นเกม จนอาจกล่าวได้ว่าการแก้ปัญหาเป็นกิจกรรมพื้นฐานอย่างหนึ่งของมนุษย์ เอพบกับปัญหาแต่ละคนมีวิธีที่จะจัดการหรือแก้ปัญหาเหล่านั้นแตกต่างกันไปซึ่งแต่ละวิธีการอาจเหมือนหรือแตกต่างกัน ทั้งนี้ขึ้นอยู่กับความรู้ ความสามารถ และประสบการณ์ของแต่ละบุคคลอย่างไรก็ตาม เมื่อได้มีการนำวิธีการแก้ปัญหาต่างๆมาวิเคราะห์ จะพบว่าวิธีการเหล่านี้สามารถสรุปเป็นทฤษฎีซึ่งมีรูปแบบที่แน่นอนได้ และปัญหาบางลักษณะอาจต้องอาศัยความรู้ในระดับสูงเพื่อแก้ไขได้อย่างสมบูรณ์แบบ ในบทนี้ผู้เรียนจะได้ศึกษาเกี่ยวกับหลักและวิธีการแก้ปัญหาด้วยคอมพิวเตอร์ และการนำภาษาโปรแกรมคอมพิวเตอร์และเครื่องมือต่างๆมาช่วยในการแก้ปัญหา
 โดยทั่วไป การแก้ปัญหาใดปัญหาหนึ่งอาจทำได้หลายวิธี ตัวอย่างเช่น ปัญหาจากการเล่นเกมทายใจในตัวอย่างที่ 6.1 ต่อไปนี้ ก็สามารถแก้ได้หลายวิธีเช่นกัน เพียงแต่ว่าแต่ละวิธีที่แตกต่างกันจะทำให้ผู้เล่นเกมแก้ปัญหาได้ช้าเร็วไม่เท่ากัน
ตัวอย่างที่ 6.1 เกมทายใจ (Master mind)
 เกมทายใจ คือ เกมที่จะให้ผู้เล่นทายตัวเลข 3 ตัว โดยต้องทายถูกทั้งตัวเลขและตำแหน่งซึ่งต้องใช้ผู้เล่น 2 คน ผู้เล่นคนที่หนึ่งกำหนดตัวเลข 3 ตัวที่ไม่ซ้ำกัน โดยเลือกจากตัวเลข 1-9 และผู้เล่นคนที่สองจะทายคำตอบ การทายตัวเลขแต่ละครั้ง ผู้เล่นคนที่หนึ่งต้องแจ้งผลการทายว่าตัวเลขที่ทายนั้นถูกต้องกี่ตัว และถูกต้องกี่ตำแหน่ง ตัวอย่างเช่น ถ้าตัวเลขที่กำหนดไว้เป็น 8 1 5 และผู้เล่นคนที่สองทายว่า 1 2 3 ผู้เล่นคนทีหนึ่งต้องแจ้งว่าตัวเลขที่ทายนั้นถูกเพียงตัวเดียว และไม่มีตัวใดถูกตำแหน่ง
ตัวอย่างที่ 6.1 ตัวอย่างการเล่นเกมทายใจ
เลขที่ทาย
จำนวนตัวเลขที่ถูก
จำนวนตำแหน่งที่ถูก
                     123                                                       1                                                          -
                     415                                                       2                                                          2
                     416                                                       1                                                          1
                     715                                                       2                                                          2
                     815                                                       3                                                          3
    จะเห็นได้ว่าในครั้งแรกๆของการทาย ผู้ทายจะใช้วิธีลองผิดลองถูกโดยการสุ่มตัวเลข 1-9 สำหรับเลขทั้ง 3 ตัว โดยไม่ให้มีตัวเลขซ้ำกัน ซึ่งเมื่อผู้กำหนดให้รายละเอียดเกี่ยวกับจำนวนตัวเลขและจำนวนตำแหน่งที่ถูกต้องแล้ว ผู้ทายก็สามารถแยกตัวแยกตัวเลขที่ไม่ถูกต้องทั้งค่าของตัวเลขและตำแหน่ง ออกจากการทายคำตอบของปัญหาในครั้งถัดๆไป การใช้เหตุผลเพื่อแยกตัวเลขที่ไม่ต้องการในการทายแต่ละครั้งนี้ จะช่วยให้ผู้ทายสามารถค้นพบคำตอบของปัญหาได้ในที่สุด                                                                                               
  การแก้ปัญหาโดยใช้รูปแบบของการใช้เหตุผลประกอบกับการแยกคำตอบที่ไม่ต้องการ จะขึ้นอยู่กับเงื่อนไขของปัญหา ในบางปัญหาวิธีการนี้อาจไม่สามารถหาคำตอบสุดท้ายได้ แต่อาจช่วยจำกัดจำนวนคำตอบที่เป็นไปได้ให้เหลือน้อยลง นอกจากวิธีการแก้ปัญหาที่ยกตัวอย่างมาซึ่งได้แก่ การลองผิดลองถูก การใช้เหตุผลและการใช้วิธีแยกคำตอบที่ไม่ต้องการ ยังมีวิธีการแก้ปัญหาอีกมากมายที่สามารถเลือกใช้ให้เหมาะสมกับตัวปัญหาและประสบการณ์ของผู้แก้ปัญหาเอง อย่างไรก็ตาม เมื่อพิจารณาในภาพรวมจะพบว่า 
วิธีการเหล่านี้ล้วนมีขั้นตอนหลักที่คล้ายคลึงกัน ซึ่งประกอบด้วย 4 ขั้นตอน
[1] การวิเคราะห์และกำหนดรายละเอียดของปัญหา
[2] การเลือกเครื่องมือและการออกแบบขั้นตอนวิธีในการแก้ปัญหา
[3] การดำเนินการแก้ไขปัญหา
[4] การตรวจสอบและปรับปรุงวิธีการ
(1) การวิเคราะห์และกำหนดรายละเอียดของปัญหา
 ขั้นตอนแรกของการแก้ปัญหาใดๆก็ตาม จะต้องเริ่มต้นด้วยการทำความเข้าใจกับปัญหาให้ถ่องแท้ เพื่อวิเคราะห์เงื่อนไขของปัญหาให้ชัดเจน รวมไปถึงข้อมูลที่จำเป็นในการแก้ปัญหาและรูปแบบหรือลักษณะของผลลัพธ์หรือคำตอบที่ต้องการโดยสิ่งเหล่านี้จะเป็นประโยชน์ในการเลือกวิธีการแก้ปัญหาต่อไป กล่าวโดยสรุป การวิเคราะห์และกำหนดรายละเอียดของปัญหามีองค์ประกอบดังนี้
1.1      การระบุข้อมูลออก
1.2      การระบุข้อมูลเข้า
1.3      ราบละเอียดของปัญหา
 ข้อมูลออกหรือคำตอบคือสิ่งที่โจทย์ต้องการในการแก้ปัญหาด้วยคอมพิวเตอร์ จำเป็นต้องระบุให้ชัดเจนว่าสิ่งที่ต้องการให้เป็นผลลัพธ์ของปัญหาคืออะไร และต้องการให้แสดงออกในรูปแบบใด เช่น การประมวล ผลข้อมูลการเบิกถอนเงินจากเครื่องเอทีเอ็ม ต้องมีการแสดงข้อมูลออกเป็นจำนวนเงินที่ถอนไป และจำนวนเงินคงเหลือในบัญชี อีกทั้งยังต้องออกแบบการจัดวางข้อมูลเหล่านี้เพื่อพิมพ์ลงในใบบันทึกรายการด้วย
1.2 การระบุข้อมูลเข้า
 ข้อมูลเข้า คือ ข้อมูลเริ่มต้นหรือเงื่อนไขที่โจทย์กำหนดมาให้ตั้งแต่แรก ในการแก้ปัญหา ผู้แก้ปัญหาจะต้องใช้ข้อมูลเหล่านี้ในการประมวลผลเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ ตัวอย่างเช่น การเบิกถอนเงินด้วยบัตรเอทีเอ็มข้างต้น ผู้ถอนเงินต้องมีข้อมูลระบุตัวตนว่าเป็นเจ้าของบัญชีตัวจริง ได้แก่ บัตรเอทีเอ็ม และรหัสประจำตัว 4 หลัก และยังต้องระบุข้อมูลให้ครบถ้วนว่าต้องการเบิกถอนจากบัญชีใดเป็นจำนวนเงินเท่าใด เป็นต้น
1.3 รายละเอียดของปัญหา
 รายละเอียดของปัญหา คือ การพิจารณาความต้องการของปัญหา ตัวอย่างที่ 6.2 และ 6.3 ต่อไปนี้ แสดงรายละเอียดแต่ละขั้นตอนของตัวอย่างปัญหา
ตัวอย่างที่ 6.2
   องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดขอปัญหาสามารถแสดงได้ดังนี้
ข้อมูลออก
ข้อมูลเข้า
รายละเอียดของปัญหา
                    ค่าเฉลี่ย                                                     จำนวนเต็ม 5 จำนวน                                        คำนวณหาค่าเฉลี่ย
       ของจำนวนเต็ม 5 จำนวน                                       คือ 0 3 4 8 และ 12                                  ของจำนวนเต็ม 5 จำนวน
ตัวอย่างที่ 6.3
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดราบละเอียดของปัญหาสามารถแสดงได้ดังนี้
ข้อมูลออก
ข้อมูลเข้า
รายละเอียดของปัญหา
                      ค่า x                                                    - จำนวนเต็ม 4 จำนวน คือ 3 4 8           คำนวณหาค่า x ที่ทำให้ค่าเฉลี่ย
                                                                                                  และ 12                                         ของ 3 4 8 12 และ x เท่ากับ 10
                                                                                                - ค่าเฉลี่ย

 (2) การเลือกเครื่องมือและออกแบบขั้นตอนวิธีในการแก้ปัญหา
 เมื่อได้รายละเอียดเบื้องต้นของปัญหา รวมทั้งวิธีการประมวลผลแล้ว ขั้นตอนต่อไปเป็นการตัดสินใจว่าจะใช้เครื่องมือใดในการแก้ปัญหา ถ้าหากเป็นปัญหาทั่วไปในชีวิตประจำวันหรือปัญหาทางคณิตศาสตร์ง่ายๆ ในตัวอย่าง 6.2 และ 6.3 อาจไม่ต้องใช้เครื่องมือพิเศษในการแก้ปัญหา แต่ใช้เพียงการคำนวณด้วยกระดาษทด หรือเครื่องคิดเลขก็สามารถหาคำตอบได้แล้ว ตัวอย่างเครื่องมือในการแก้ปัญหา
   สำหรับปัญหาที่มีขั้นตอนในการแก้ปัญหาอย่างซับซ้อน หรือต้องมีการแก้ปัญหาในลักษณะเดิมซ้ำอีกหลายครั้ง จำเป็นต้องใช้คอมพิวเตอร์เป็นอุปกรณ์ในการแก้ปัญหา โดยเขียนโปรแกรมเพื่อรับข้อมูลไปประมวลผล และยังต้องเลือกว่าจะใช้โปรแกรมคอมพิวเตอร์ภาษาใด ซึ่งขึ้นอยู่กับความคุ้นเคยในการใช้งานของผู้เขียนโปรแกรม และลักษณะเฉพาะของแต่ละภาษาที่เหมาะสมกับปัญหานั้นๆ
   ในการแก้ปัญหาโดยใช้คอมพิวเตอร์นั้น การออกแบบวิธีแก้ปัญหาอย่างเป็นขั้นเป็นตอนและง่ายต่อการทำความเข้าใจเป็นสิ่งสำคัญมาก เพราะจะทำให้สามารถเขียนโปรแกรมจากขั้นตอนที่ได้ออกแบบไว้อย่างง่ายดาย เครื่องมือที่ใช้เพื่อการออกแบบขั้นตอนวิธี เช่น รหัสลำลอง (Pseudo code) ซึ่งเป็นการจำลองขั้นตอนวิธีแก้ปัญหา โดยการอธิบายด้วยคำพูดที่เข้าใจได้ง่ายเป็นขั้นๆ หรือผังงาน (Flowchart) ซึ่งเป็นการใช้สัญลักษณ์ในการแสดงรายละเอียดและลำดับของแต่ละขั้นตอนที่ใช้แก้ปัญหา ข้อดีอีกประการหนึ่งของการใช้เครื่องมือเหล่านี้ช่วยในการออกแบบวิธีปัญหาคือ จะทำให้สามารถตรวจสอบความถูกต้อง หาจุดผิดพลาด และแก้ไขขั้นตอนในการแก้ปัญหาที่ซับซ้อนได้อย่างรวดเร็ว นักเขียนโปรแกรมจึงควรฝึกฝนการใช้งานเครื่องมือเหล่านี้ให้เชี่ยวชาญ ตัวอย่างการเขียนรหัสลำลองและผังงาน
(3) การดำเนินการแก้ปัญหา
  การดำเนินการแก้ปัญหา เป็นขั้นตอนการใช้โปรแกรมประยุกต์หรือโปรแกรมหรือภาษาคอมพิวเตอร์นั้นๆ ขั้นตอนนี้จะสำเร็จได้รวดเร็วหรือช้าขึ้นอยู่กับหลายปัจจัย เช่น ความชัดเจนและถูกต้องของวิธีแก้ปัญหาที่ได้ออกแบบไว้ และความสามารถในการเขียนหรือใช้งานโปรแกรมหรือภาษาคอมพิวเตอร์ที่เลือก ในขั้นตอนนี้ผู้พัฒนาควรคำนึงถึงความยืดหยุ่นของโปรแกรมที่ได้ออกแบบขึ้นด้วย เพื่อให้สามารถรองรับการเปลี่ยน แปลงที่อาจเกิดขึ้นในอนาคต เช่น การเปลี่ยนแปลงข้อมูลเข้า การเปลี่ยนรูปแบบของข้อมูลออกหรือวิธีการประมวลผลที่เปลี่ยนไป นอกจากนี้โปรแกรมควรต้องรองรับการขยายตัวในอนาคตได้อีกด้วย
(4) การตรวจสอบและปรับปรุงวิธีการ
  ในขั้นตอนนี้เป็นการตรวจสอบเพื่อให้แน่ใจว่าวิธีการแก้ปัญหารวมทั้งโปรแกรมที่พัฒนาขึ้นให้ผลลัพธ์ถูกต้อง โดยต้องตรวจสอบว่าขั้นตอนวิธีที่สร้างขึ้นสอดคล้องกับรายละเอียดของปัญหาซึ่งได้แก่ ข้อมูลเข้า และข้อมูลออกที่ได้ระบุไว้ อีกทั้งยังสามารถรองรับข้อมูลเข้าอื่นๆที่มีลักษณะเดียวกัน
  หลังจากที่โปรแกรมทำงานได้ผลตามที่ต้องการแล้ว อาจต้องมีการปรับปรุงให้วิธีการในการแก้ปัญหามีประสิทธิภาพที่สุด โดยยังคงความถูกต้องของผลลัพธ์เช่นเดิม ในขั้นตอนการปรับปรุงขั้นตอนการทำงานของวิธีการแก้ปัญหาให้ดีขึ้น และปรับโปรแกรมที่เขียนขึ้นให้ทีเทคนิคการประมวลผลที่มีประสิทธิภาพขึ้น
6.2 เครื่องมือที่ใช้ในการออกแบบและขั้นตอนวิธีในการแก้ปัญหา
 การออกแบบวิธีการแก้ปัญหาเป็นกระบวนการที่ต้องอาศัยประสบการณ์ ความรู้ความเข้าใจในปัญหา และความคิดมีเหตุผลและเป็นขั้นตอนแล้ว ยังต้องอาศัยเครื่องมือที่จะช่วยถ่ายทอดความคิดออกมาเป็นลายลักษณ์อักษร หรือเป็นแผนภาพซึ่งจะช่วยให้สามารถแก้ปัญหาได้ดีโดยเฉพาะปัญหาที่ยุ่งยากซับซ้อนอีกทั้งยังเป็นแนวทางให้ผู้ที่เกี่ยวข้องหรือผู้ดำเนินการปรับปรุงในอนาคตเข้าใจวิธีแก้ปัญหาที่เราพัฒนาขึ้นได้ง่าย เครื่องมือที่ใช้ในการออกแบบวิธีแก้ปัญหามี 2 ลักษณะ คือ
 6.2.1 รหัสลำลอง
 รหัสลำลองเป็นการใช้คำบรรยายเพื่ออธิบายขั้นตอนวิธีในการแก้ปัญหา การเขียนรหัสลำลองไม่มีรูปแบบที่แน่นอน ขึ้นอยู่กับประสบการณ์และความถนัดของผู้เขียน ซึ่งอาจจะเขียนอย่างละเอียดหรือย่อ และในบางครั้งอาจอธิบายในลักษณะคล้ายภาษาพูด หรืออาจจะเขียนในรูปแบบคล้ายภาษาโปรแกรมก็ได้เช่นกัน การใช้รหัสลำลองในการออกแบบวิธีแก้ปัญหามีข้อดีคือ เขียนง่ายผู้เขียนคำนึงถึงเพียงแต่วิธีการแก้ปัญหา โดยไม่ต้องกังวลว่าจะเขียนผิดรูปแบบหรือไม่และถ้าผู้เขียนมีความชำนาญแล้ว การเขียนรหัสลำลองในรูปแบบที่คล้ายกับภาษาโปรแกรมจะทำให้สามารถดัดแปลงไปเป็นโปรแกรมคอมพิวเตอร์ได้โดยง่าย ตัวอย่างที่ 6.4 และ 6.5 ต่อไปนี้แสดงถึงการใช้รหัสลำลองในการถ่ายทอดความคิดเพื่อแก้ปัญหาทั่วไป และปัญหาทางคณิตศาสตร์
ตัวอย่างที่ 6.4
ให้เขียนรหัสลำลองเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการเปลี่ยนยางรถ เมื่อยางแบนในขณะขับรถ.              เริ่มต้น
1.             จอดรถหลบข้างทาง
2.             คลายสกรูยึดล้อออกเล็กน้อย
3.             ยกรถด้วยแม่แรง
4.             ถอดสกรูยึดล้อ
5.             ถอดล้อออก
6.             เปลี่ยนยางอะไหล่
7.             ขันสกรูยึดล้อให้พอแน่น
8.             คลายแม่แรง และนำไปเก็บ
9.             ขันสกรูยึดล้อให้แน่น
10.      เก็บยางที่แบนเพื่อไปซ้อม                        
ตัวอย่างที่ 6.5  ให้เขียนรหัสลำลองเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการหาค่าเฉลี่ยของเลขจำนวนเต็ม 5 จำนวน โดยกำหนดให้สามารถรับค่าตัวเลขได้เพียงครั้งละหนึ่งจำนวนเท่านั้น.
         เริ่มต้น
1.             รับค่าตัวเลขหนึ่งจำนวน
2.             บวกค่าตัวเลขเก็บไว้ในค่าผลรวม
3.             ถ้าได้ค่าตัวเลขยังไม่ครบ 5 จำนวน ให้กลับไปทำข้อ 1
4.             ถ้าได้ตัวเลขครบ 5 จำนวนแล้วให้นำค่าผลรวมจากข้อ 2 มาหารด้วย 5 ได้เป็นผลลัพธ์
                5.             พิมพ์ผลลัพธ์              
6.2.2 ผังงาน
 ผังงานเป็นการอธิบายขั้นตอนวิธีการแก้ปัญหาโดยใช้รูปสัญลักษณ์มาเรียงต่อกัน สัญลักษณ์แต่ละแบบจะมีความหมายถึงกระบวนการที่แตกต่างกัน โดยจะมีคำอธิบายสั้นๆเพิ่มเติมในรูปสัญลักษณ์ ความหมายของสัญลักษณ์ต่างๆ ที่ใช้ในผังงานได้ถูกกำเนิดโดยสถาบันมาตรฐานแห่งชาติอเมริกา (The American National Standard Institute: ANSI) เพื่อให้สามารถสื่อความหมายที่ตรงกัน ซึ่งมีรายละเอียดของสัญลักษณ์และความหมายที่ควรทราบ      
    ในการเขียนผังงานมีหลักการ คือ ให้เลือกสัญลักษณ์แทนกระบวนการที่ถูกต้อง และเขียนข้อความสั้นๆ แทนสิ่งที่ต้องกระทำลงในรูปลักษณ์ แล้วนำมาเรียงต่อกัน เชื่อมต่อละสัญลักษณ์ด้วยลูกศร โดยทั่วไปแล้ว จะเรียงลำดับของสัญลักษณ์ไว้จากบนลงล่าง ตามลำดับของการทำงาน หรืออาจจะใช้หัวลูกศรระบุลำดับก่อนหลังของการทำงานก็ได้
     การเชื่อมต่อสัญลักษณ์ต่างๆของผังงาน อาจทำให้มีการตัดกันของเส้นลูกศรจนอาจเกิดความสับ สนได้ ผู้เขียนจึงควรเลือกใช้สัญลักษณ์จุดเชื่อมต่อในหน้าเดียวกัน โดยระบุตัวอักษรเดียวกันเพื่อหมายถึงการเชื่อมสองจุดของผังงานเข้าด้วยกัน แต่ถ้าผังงานใหญ่เกินหน้ากระดาษ ให้เลือกใช้สัญลักษณ์จุดเชื่อมต่อหน้ากระดาษ เพื่อเชื่อมระหว่างสองจุดของผังงานที่ข้ามไปอยู่คนละหน้ากัน
     ในการคิดค้นหาวิธีแก้ปัญหาหรือประมวลผลข้อมูลด้วยคอมพิวเตอร์ อาจมีความจำเป็นต้องบันทึกหรือพักข้อมูลไว้ที่ใดที่หนึ่ง เพื่อให้สามารถใช้อ้างอิงได้ในภายหลัง ตัวอย่างเช่น การที่จะนับว่ามีการรับตัวเลขเข้ามาเพื่อคำนวณครบ 5 ตัวหรือยัง จะต้องมีการเก็บค่าที่ใช้นับจำนวนเอาไว้ ซึ่งจะเก็บข้ออยู่ใน ตัวแปร(variable)ที่มีลักษณะคล้ายคลึงกับตัวแปรทางคณิตศาสตร์ จะต้องมีการตั้งชื่อให้กับตัวแปร มีการกำหนดค่าให้กับตัวแปรและค่าของตัวแปรอาจถูกเปลี่ยนแปลงไปได้ระหว่างที่ทำการประมวล หรือระหว่างการทำงานของโปรแกรมคอมพิวเตอร์
 ตัวอย่างที่ 6.7
  ให้เขียนรหัสลำลองและผังงานเพื่อถ่ายทอดความคิดขั้นตอนวิธีในการหาค่าเฉลี่ยของจำนวนเต็ม 5 จำนวน โดยกำหนดให้สามารถรับค่าตัวเลขได้เพียงครั้งละหนึ่งจำนวนเท่านั้น และให้ใช้สัญลักษณ์กำหนดค่าร่วมกับตัวแปรในการทำงานเพื่อให้ได้รหัสลำลองและผังงานที่กะทัดรัด
รหัสลำลอง
1.กำหนดค่าเริ่มต้นให้ตัวแปร Counter และ sum เป็น 0
2. รับค่าตัวเลขหนึ่งจำนวน เก็บไว้ในตัวแปร x
3. เพิ่มค่า Counter ขึ้น 1
4.บวกค่าของ Sum เข้ากับ x แล้วเก็บไว้ที่ตัวแปร Sum
5. ถ้าค่าของตัวแปร counter น้อยกว่า 5 วนไปทำข้อ 2 อีกครั้ง แต่ถ้า counter ไม่น้อยกว่า 5 ข้ามไปทำข้อ 6
6. หาค่าของ Sum/5 แล้วเก็บไว้ที่ตัวแปร average
7. พิมพ์ค่าของตัวแปร average    จบ
    ในตัวอย่างนี้ มีการใช้งานตัวแปรหลายตัวเพื่อเก็บค่าที่แตกต่างกัน ได้แก่ ตัวแปร Counter ซึ่งจะใช้เพื่อเป็นตัวนับว่ามีการรับค่าตัวเลขไปกี่ตัวแล้ว ตัวแปร sum ใช้เพื่อเก็บค่าผลรวมของตัวเลขทุกตัว ซึ่งตัวแปรทั้งสองตัวนี้จะต้องถูกกำหนดค่าให้เป็น 0 ก่อนที่จะใช้งาน สำหรับ x จะใช้เพื่อรับค่าตัวเลขทีละตัวเมื่อรับค่าแล้ว จะถูกนำค่าไปรวมกับค่า sum เป็นการเก็บค่าผลรวม แล้วตัวแปร x จะสามารถถูกนำไปใช้ซ้ำ เพื่อรับค่าตัวเลขตัวถัดไปได้อีก ตัวแปรสุดท้ายคือ average ที่ใช้เพื่อเก็บค่าเฉลี่ยที่หาได้แล้วรอการนำไปแสดงผลต่อไป
6.3 โครงสร้างการโปรแกรม
     ก่อนการเขียนโปรแกรม ผู้พัฒนาโปรแกรมจะต้องเลือกภาษาคอมพิวเตอร์ ที่จะนำว่าใช้ช่วยงานโดยพิจารณาจากปัจจัยต่างๆ ในการทำงาน เช่น ลักษณะของปัญหา ความถนัดของนักเขียนโปรแกรมสภาพแวดล้อมในการทำงานของระบบคอมพิวเตอร์ เป็นต้น  เนื่องจากในปัจจุบันมีภาษาคอมพิวเตอร์ให้เลือกใช้ได้หลายภาษา เช่น ภาษาปาสคาล ภาษาซี ภาษาจาวา และภาษาเดลฟาย ถึงแม้แต่ละภาษาจะมีรูปแบบและหลักการในการสร้างงานที่แตกต่างกันแต่ทุกภาษาจะต้องมีโครงสร้างควบคุมหลักทั้ง 3 แบบ ได้แก่ โครงสร้างแบบลำดับ (Sequential) โครงสร้างแบบทางเลือก (selection structure) และโครงสร้างแบบวนซ้ำ (repetition structure)
 6.3.1 โครงสร้างแบบลำดับ(sequential structure)
  โปรแกรมที่ทำงานเป็นขั้นตอนเพื่อแก้ปัญหาจะทำงานตามคำสั่งที่เขียนไว้ตามลำดับ ตั้งแต่คำสั่งแรกไปจนถึงคำสั่งสุดท้าย โดยที่คำสั่งในที่นี้อาจเป็นคำสั่งเดี่ยวๆ หรือเป็นคำสั่งเชิงซ้อนที่มีหลายคำสั่งย่อยประกอบกันในลักษณะเป็นโครงสร้างแบบทางเลือกหรือแบบวนซ้ำก็ได้
  โครงสร้างแบบเรียงลำดับเมื่อเขียนเป็นผังงาน จะมีลักษณะดังเช่นรูปที่ 6.9 และมีกระบวนการทำงานพื้นฐานอยู่ 3 ชนิด ดังแสดงในรูปที่ 6.10 ได้แก่
  • การคำนวณ เป็นกระบวนการที่คอมพิวเตอร์ทำการคำนวณ ประมวลผล ซึ่งจะรวมไปถึงการกำหนดค่าให้กับตัวแปร เพื่อให้สามารถนำค่าของตัวแปรนั้นมาใช้ในภายหลังได้
  • การรับข้อมูลเข้า เป็นกระบวนการรับข้อมูลจากอุปกรณ์ของหน่วยรับเข้า เช่น คีย์บอร์ด เพื่อนำค่าไปกำหนดให้กับตัวแปร และเก็บไว้ในหน่วยความจำ
  • การส่งข้อมูลออก เป็นกระบวนการนำค่าของข้อมูลไปแสดงผลยังอุปกรณ์ของหน่วยส่งออก เช่น จอภาพหรือเครื่องพิมพ์ ข้อมูลที่จะส่งออกโดยทั่วไปจะเป็นค่าคงที่ หรือค่าของตัวแปร
 ในการดำเนินการเพื่อแก้ปัญหาด้วยคอมพิวเตอร์ กระบวนการเหล่านี้ต้องถูกแปลงให้อยู่รูปของคำสั่งหลายคำสั่งประกอบกันเพื่อให้ทำงานตามขั้นตอนที่ได้ออกแบบไว้ เช่น กระบวนการคำนวณในการเพิ่มค่าของตัวแปร Counter ขึ้นอีกหนึ่ง จะใช้คำสั่ง “counter - counter + 1” กระบวนการรับข้อมูลเข้าเพื่อเก็บไว้ในตัวแปร x จะใช้คำสั่ง “input x” และกระบวนการส่งข้อมูลออกไปยังจอภาพเพื่อแสดงผลของตัวแปร average จะใช้คำสั่ง “print average” เป็นต้น
6.3.2 โครงสร้างแบบทางเลือก (Selection structure) 
          ปัญหาบางอย่างต้องการการตัดสินใจ เพื่อเลือกว่าจะใช้วิธีการใด โดยต้องมีการตรวจสอบว่าเงื่อนไขที่ใช้ในการตัดสินใจว่าเป็นจริงหรือเท็  ถ้าเป็นจริงจะไปเลือกทำคำสั่งชุดหนึ่ง แต่ถ้าเป็นเท็จจะไปเลือกทำคำสั่งอีกชุดหนึ่ง ซึ่งชุดคำสั่งเหล่านี้จะประกอบด้วยโครงสร้างแบบลำดับนั่นเอง แสดงผังงานของโครงสร้างแบบทางเลือก แสดงตัวอย่างขั้นตอนวิธีที่ต้องมีการเลือกตัดสินใจในการเลือกพิมพ์ค่าที่มากกว่าออกมา
 6.3.3โครงสร้างแบบวนซ้ำ (repetition structure)
    ในการแก้ปัญหาบางอาจต้องมีการทำงานในบางคำสั่งหรือบางชุดของคำสั่งกันมากกว่าหนึ่งรอบขึนไป โครงส้รางแบบมีการวนซ้ำนี้จะต้องมีการตัดสินใจร่วมอยู๋ด้วยเสมอ เพื่ออเป็นเงื่อนไขที่จะตัดสินใจว่าเมื่อใดจะวนซ้ำ หรือเมื่อใดจะถึงเวลาหยุดการวนซ้ำ
    แบบที่ต้องตรวจสอบเงื่อนไขที่จะให้วนซ้ำก่อนที่จะทำงานตามชุดคำสั่งในโครงสร้างแบบวนซ้ำ เรียกว่า การวนซ้ำแบบ While ซึ่งจะสังเกตได้ว่าถ้าเงื่อนไขไม่เป็นจริงตั้งแต่แรก คำสั่งในโครงสร้างแบบวนซ้ำจะไม่ถูกเรียกให้ทำงานเลย และการวนซ้ำอีกอย่างหนึ่งคือ การวนซ้ำแบบ Until เป็นการวนซ้ำที่มีการตรวจสอบเงื่อนไขที่จะให้วนซ้ำหลังจากที่ได้ทำงานตามชุดคำสั่ง ในโครงาร้างแบบวนซ้ำไปรอบหนึ่งแล้ว 
    สิ่งที่ควรระวังในการใช้งานขั้นตอนวิธีแบบมีการวนซ้ำคือ ต้องตรวจสอบว่ากำหนดเงื่อนไขอย่างรัดกุมและถูกต้อง มิเช่นนั้นแล้วอาจเกิดกรณีของการวนซ้ำไม่รู้จบ (infinite loop) วนซ้ำไม่ได้ตามจำนวนรอบที่ต้องการ
องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดของปัญหาแบบที่ 1 สามารถแสดงดังนี้
ข้อมูลออก                          - ข้อความแสดงผลการทายตัวเลข
ข้อมูลเข้า                            - ตัวเลขเป้าหมาย
                                             - ตัวเลขที่หาย 
รายละเอียดของปัญหา    - เปรียเทียบตัวเลขที่ทายกับค่าเป้าหมาย
                                             - ถ้าตรงกัน ให้แสดงคำว่า Correct 
                                             - ถ้าไม่ตรงกัน ให้แสดงคำว่า Incorrect
จากรายละเอียดของปัญหาแบบที่ 1 สามารถเขียนเป็นขั้นตอนด้วยรหัสลำลองดังนี้
เริ่นต้น
1.รับค่าตัวเลขเป้าหมาย เก็บไว้มนตัวแปร target
2.พิมพ์ข้อความว่า "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้าค่าของ number เท่ากับค่าของ target ให้พิมพ์ข้อความว่า "Correct" ไม่เช่นนั้น พิมพ์ข้อความว่า "Incorrect" 
    จบ
    องค์ประกอบของขั้นตอนการวิเคราะห์และกำหนดรายละเอียดของปัญหาแบบที่ 2 สามารถแสดงได้ดังนี้
ข้อมูลออก                         - ข้อความแสดงผลการทายตัวเลขว่า สูงหรือต่ำเกินไป กรณ๊ที่ทายไม่ถูก
                                            - ข้อความแสดงว่าทายถูกต้องแล้ว
ข้อมูลเข้า                            - ตัวเลขที่กำหนด
                                             - ตัวเลขที่ทาย
รายละอียดของปัญหา      - เปรียบเทียบค่าตัวเลขที่ทายว่าตรงกับค่าที่กำหนดหรือไม่จนกว่าจะทายถูก
  
  จากรายละเอียดของปัญหาแบบที่ 2 สามารถเขียนเป็นขั้นตอนด้วยรหัสลำลองดังนี้
เริ่มต้น
1.รับค่าที่กำหนด เก็บไว้ในตัวแปร target 
2.พิมพ์ข้อความ "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้า number ไม่เท่ากับ target ให้ทำคำสั่งในข้อ 4.1 มิเช่นนั้น ข้ามไปทำข้อ
    4.1 ถ้า number มีค่ามากกว่า target ให้พิมพ์ข้อความ "Too high" ไม่เช่นนั้น ให้พิมพ์ข้อความ "Too low"
    4.2 รับค่าตัวเลขที่ทายไว้ในตัวแปร number  
    4.3 วนกลับไปทำงานตามข้อ 4 อีกรอบหนึ่ง 
5. พิมพ์ข้อความ "Correct"
    จบ
    ในการออกแบบขั้นตอนการทำงานเพื่อให้สามารถวนรอบให้ผู้ทายทำการทายได้หลายครั้งจนกว่าจะถูกนั้น จะพบว่าเป็นการวนซ้ำแบบ While ที่มีการตรวจสอบการวนรอบในส่วนต้นก่อนการทำงานภายในของการวนรอบ โดยทั่วไปเราสามารถดัดแปลงแก้ไขขั้นตอนวิธีที่ใช้การวนซ้ำแบบ While เพียงเล็กน้อยเพื่อใช้การวนซ้ำแบบ Until ที่มีการตรวจสอบการวนรอบเมื่อจบการทำงานภายในของการวนรอบ
รหัสลำลองและผังที่ทำงาน ซึ่งใช้การวนซ้ำแบบ Until 
เริ่นต้น
1.รับค่าเป้าหมาย เก็บไว้ในตัวแปร target
2.พิมพ์ข้อความ "Enter the number you guess"
3.รับค่าตัวเลขที่ทายเก็บไว้ในตัวแปร number
4.ถ้า number มากกว่า target ให้พิมพ์ข้อความ "Too high"
5.ถ้า number น้อยกว่า target ให้พิมพ์ข้อความ "Too low"
6.ถ้า number เท่ากับ target ให้ข้ามไปทำงานข้อ 7 มิเช่นนั้น ให้วนกลับไปทำงานตั้งแต่ ข้อ
7.พิมพ์ข้อความ "correct"
    จบ