วันพฤหัสบดีที่ 29 สิงหาคม พ.ศ. 2556

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


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


โครงงานคอมพิวเตอร์สามารถแบ่งออกได้เป็น 5 ประเภท คือ
1. โครงงานพัฒนาสื่อเพื่อการศึกษา
เป็นการสร้างบทเรียนที่อาจมีแบบฝึกหัดหรือคำถามเพื่อทดสอบด้วย
2.โครงงานพัฒนาเครื่องมือ
เป็นการพัฒนาโปรแกรมช่วยงานในด้านต่างๆ
3. โครงงานจำลองทฤษฎี
เป็นการพัฒนาโปรแกรมเพื่อจำลองการทดลองในด้านต่างๆที่ไม่สามารถทดลองด้วยสถานการณ์จริงได้
4.โครงงานประยุกต์
เป็นการนำเอาคอมพิวเตอร์มาประยุกต์ร่วมกับอุปกรณ์อื่นในการประดิษฐ์สิ่งของหรือปรับปรุง
เครื่องมือที่มีอยู่เดิมให้มีประสิทธิภาพสูงขึ้น
5.โครงงานพัฒนาเกม
เป็นการสร้างเกมเพื่อการศึกษาหรือความบันเทิง



ขั้นตอนการทำโครงงานคอมพิวเตอร์

1. คัดเลือกหัวข้อโครงงานที่สนใจ

2. ศึกษาค้นคว้าจากเอกสารและแหล่งข้อมูล

3. จัดทำเค้าโครงของโครงงาน

4. การลงมือทำโครงงาน

5. การเขียนรายงาน

6. การนำเสนอและแสดงโครงงาน

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

6.1 หลักการแก้ปัญหา
1.หลักการแก้ปัญหา
          ในชีวิตประจำวันทุกคนต้องเคยพบกับปัญหาต่างๆ ไม่ว่าจะเป็นปัญหาด้านการเรียน การงาน การเงิน หรือแม้แต่การเล่นเกม เมื่อพบกับปัญหา แต่ละคนมีวิธีที่จะจัดการหรือแก้ปัญหาเหล่านั้นแตกต่างกันไป  ซึ่งแต่ละวิธีการอาจให้ผลลัพธ์ที่เหมือนหรือแตกต่างกันเล็กน้อย  ทั้งนี้ขึ้นอยู่กับความรู้  ความสามารถ และประสบการณ์ของบุคคลผู้นั้น  อย่างไรก็ตาม หากเรานำวิธีการแก้ปัญหาต่างวิธีนั้นมาวิเคราะห์ให้ดี  จะพบว่าสามารถสรุปวิธีการเหล่านั้นเป็นทฤษฎีซึ่งมีรูปแบบที่แน่นอนได้  และบางครั้งต้องอาศัยการเรียนรู้ในระดับสูงเพื่อแก้ปัญหาบางอย่างให้สมบูรณ์แบบ  แต่ก่อนที่เราจะศึกษาต่อไป  ลองพิจารณาปัญหาต่อไปนี้
ตัวอย่างที่ 1   เกมทายใจ 
คือเกมให้ผู้เล่นทายตัวเลข 3 ตัว  ในการเล่นเกมต้องใช้ผู้เล่น 2 คน  คนที่หนึ่งคือ ผู้กำหนด เป็นคนกำหนดเลข 3 ตัวที่ไม่ซ้ำกัน โดยเลือกจากกลุ่มตัวเลข 1-9  และอีกคนหนึ่งคือผู้ทาย  เป็นผู้ทายตัวเลข 3 ตัวที่ไม่ซ้ำกันที่ผู้กำหนดได้กำหนดไว้แล้ว  หลังจากที่ผู้ทายทายเลขแต่ละครั้ง  ผู้กำหนดต้องให้รายละเอียดว่าตัวเลขที่ทายมานั้นถูกต้องกี่ตัว  และในกรณีที่ตัวเลขที่ทายมาถูกตำแหน่งด้วยก็ต้องบอกว่าถูกตำแหน่งกี่ตัว  เช่น  ถ้าตัวเลขที่กำหนดไว้เป็น 815 และผู้ทายทายว่า 123 ผู้กำหนดต้องแจ้งว่าตัวเลขที่ทายนั้นถูก 1 ตัว และไม่มีตัวใดถูกตำแหน่ง  ตารางที่ 1 เป็นตารางแสดงข้อมูลการเล่นเกม
ตารางที่ 1 ข้อมูลการเล่นเกมทายใจ
เลขที่ทาย
จำนวนตัวเลขที่ถูก
จำนวนตำแหน่งที่ถูก
123
415
425
416
715
815
1
2
1
1
2
3
-
2
1
1
2
3

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

           การวิเคราะห์และกำหนดรายละเอียดของปัญหา
          การวิเคราะห์และกำหนดรายละเอียดของปัญหา (State the problem) ขั้นตอนนี้เป็นขั้นตอนแรกสุดก่อนที่จะลงมือแก้ปัญหา แต่ผู้แก้ปัญหามักจะมองข้ามความสำคัญของขั้นตอนนี้อยู่เสมอ จุดประสงค์ของขั้นตอนนี้ คือการทำความเข้าใจกับปัญหาเพื่อแยกให้ออกว่าข้อมูลที่กำหนดมาในปัญหาหรือเงื่อนไขของปัญหาคืออะไร และสิ่งที่ต้องการคืออะไร อีกทั้งวิธีการที่ใช้ประมวลผล ในการวิเคราะห์ปัญหาใด กล่าวโดยสรุปมีองค์ประกอบในการวิเคราะห์ ดังนี้
1.1  การระบุข้อมูลเข้า  ได้แก่ การพิจารณาข้อมูลและเงื่อนไขที่กำหนดมาในปัญหา
1.2  การระบุข้อมูลออก  ได้แก่ การพิจารณาเป้าหมายหรือสิ่งที่ต้องหาคำตอบ
1.3  การกำหนดวิธีประมวลผล  ได้แก่ การพิจารณาขั้นตอนวิธีหาคำตอบหรือข้อมูลออก

 การเลือกเครื่องมือและออกแบบขั้นตอนวิธี
              การเลือกเครื่องมือและออกแบบขั้นตอนวิธี (Tools and Algorithm development) ขั้นตอนนี้เป็นขั้นตอนของการวางแผนในการแก้ปัญหาอย่างละเอียดถี่ถ้วน หลังจากที่เราทำความเข้าใจกับปัญหา พิจารณาข้อมูลและเงื่อนไขที่มีอยู่ และสิ่งที่ต้องการหาในขั้นตอนที่ 1 แล้ว เราสามารถคาดคะเนวิธีการที่จะใช้ในการแก้ปัญหา ขั้นตอนนี้จำเป็นต้องอาศัยประสบการณ์ของผู้แก้ปัญหาเป็นหลัก หากผู้แก้ปัญหาเคยพบกับปัญหาทำนองนี้มาแล้วก็สามารถดำเนินการตามแนวทางที่เคยปฏิบัติมา
              ขั้นตอนนี้จะเริ่มจากการเลือกเครื่องมือที่ใช้ในการแก้ปัญหา โดยพิจารณาความเหมาะสมระหว่างเครื่องมือกับเงื่อนไขต่างๆ ของปัญหาซึ่งหมายรวมถึงความสามารถของเครื่องมือในการแก้ปัญหาดังกล่าว และสิ่งที่สำคัญคือความคุ้นเคยในการใช้งานเครื่องมือนั้นๆ ของผู้แก้ปัญหา
              อีกสิ่งหนึ่งที่สำคัญในการแก้ปัญหา คือยุทธวิธีที่ใช้ในการแก้ปัญหาหรือที่เราเรียกว่า ขั้นตอนวิธี (algorithm) ในการแก้ปัญหา  หลังจากที่เราได้เครื่องมือช่วยแก้ปัญหาแล้ว ผู้แก้ปัญหาต้องวางแผนว่าจะใช้เครื่องมือดังกล่าวเพื่อให้ได้ผลลัพธ์ที่ถูกต้องและดีที่สุด การออกแบบขั้นตอนวิธีในการแก้ปัญหา ผู้แก้ปัญหาควรใช้แผนภาพหรือเครื่องมือในการแสดงขั้นตอนการทำงานเพื่อให้ง่ายต่อความเข้าใน เช่น ผังงาน (flowchart) ที่จำลองขั้นตอนวิธีการแก้ปัญหาในรูปของสัญลักษณ์  รหัสลำลอง (pseudo code) ซึ่งเป็นการจำลองขั้นตอนวิธีการแก้ปัญหาในรูปของคำบรรยาย การใช้เครื่องมือช่วยออกแบบดังกล่าวนอกจากแสดงกระบวนการที่ชัดเจนแล้ว ยังช่วยให้ผู้แก้ปัญหาสามารถหาข้อผิดพลาดของวิธีการที่ใช้ได้ง่ายและแก้ไขได้อย่างรวดเร็ว

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

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

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


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



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


6.3 โครงสร้างการโปรแกรม
โครงสร้างการโปรแกรม
ก่อนการเขียนโปรแกรม ผู้พัฒนาโปรแกรมจะต้องเลือกภาษาคอมพิวเตร์ ที่จะนำมาใช้ช่วยงานโดยพิจารณาจากปัจจัยต่างๆ ในการทำงาน เช่น ลักษณะของปัญหา ความถนัดของนักเขียนดโปรแกรม สภาพแวดล้อมในการทำงานของระบบคอมพิวเตอร์ เป็นต้น เนื่องจากในปัจจุบันมีภาษาคอมพิวเตอร์ให้เลือกได้หลายภาษา เช่น ภาษาปาสคาล ภาษาซี ภาษาจาวา และภาษาเดลฟาย ภึงแม้แต่ละภาษาจะมีรูปแบบและหลักการในการสร้างงานที่แตกต่างกันแต่ทุกภาษาจะต้องมีโครงสร้างควบคุมหลักทั้ง แบบ ได้แก่ โดครงสร้างแบบลำดับ (sequential structure) โครงสร้างแบบทางเลือก (selection structure) และโครงสร้างแบบวนซ้ำ(repetition structure)
   โครงสร้างแบบลำดับ
โปรแกรมที่ทำงานเป็นขั้นตอนเพื่อแก้ปัญหาจะทำงานตามคำสั่งที่เขียนไว้ตามลำดับ ตั้งแต่คำสั่งแรกไปจนถึงคำสั่งสุดท้าย โดยที่คำสั่งในที่นี้อาจเป็นคำสั่งเดี่ยวๆ หรือเป็นคำสั่งเชิงซ้อนทีมีหลายคำสั่งย่อยประกอบกันในลักษณะเป็นโครงสร้างแบบทางเลือกหรือแบบวนซ้ำก็ได้
โครงสร้างแบบเรียงลำดับเมื่อเขียนเป็นผังงาน จะมีลักษณะดังเช่นรูปที่ 6.9 และมีกระบวนการทำงานพื้ฐานอยู่ ชนิด ดังแสดงในรูปที่ 6.10 ได้แก่
-การคำนวณ เป็นกระบวนการที่คอมพิเตอร์ทำการคำนวณ ประมวลผล ซึ่งจะรวมไปถึงการกำหนดค่าให้กับตัวแปร เพื่อให้สามารถนำค่าของตัวแปรนั้นมาใช้ในภายหลังได้
การรับข้อมูลเข้า เป็นกระบวนการรับข้อมูลจากอุปกรณ์ของหน่วยรับเข้า เช่น คีย์บอร์ด เพื่อนำค่าไปกำหนดให้กับตัวแปร และเก็บไว้ในหน่วยความจำ
การส่งข้อมูลออก เป็นกระบวนการนำค่าของข้อมูลไปแสดงผลยังอุปกรณ์ของหน่วยส่งออก เช่น จอภาพหรือเครื่องพิมพ์ ข้อมูลที่จะส่งออกโดยทั่งไปจะเป็นค่าคงที่ หรือค่าของตัวแปร
ในการดำเนินการเพื่อแก้ปัญหาด้วยคอมพิวเตอร์ กระบวนการเหล่านี้ต้องถูกแปลงให้อย฿่รูปของคำสั่งหลายคำสั่งประกอบกันเพื่อให้ทำงานตามขั้นตอนที่ได้ออกแบบไว้ เช่น กรบวนการการคำนวณในการเพิ่มค่าของตัวแปร counter ขึ้นอีกหนึ่ง จะใช้คำสั่ง ” counter < counter + 1  ” กระบวนการรับข้อมูลเข้าเพื่อเก็บไว้ในตัวแปร จะใช้คำสั่ง  ” input x” และกระบวนการส่งข้อมูลออกไปยังจอภาพเพื่อแสดงผลของตัวแปร averageจะใช้คำสั่ง “print avereage” เป็นต้น


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



โครงสร้างการทำงานแบบทางเลือกที่กล่าวมาแล้ว อาจเรียกว่ามีโครงสร้างของการทำงานแบบ if…then…else…  ซึ่งเป็นการเลือกทำแบบทางใดทางหนึ่ง เนื่องจากต้องมีการเลือกทำชุดคำสั่งใดชุดคำสั่งหนึ่งตามผลของเงื่อนไข แต่ในการเขียนโปรแกรมหรือผังงานเพื่อแก้ปัญหา นักเขียนโปรแกรมอาจไม่ต้องการทำงานใดๆ เมื่อผลของเงื่อนไขเป็นเท็จก็ได้ โดยผังงานจะมีลักษณะดังรูปที่ 6.13 ซึ่งเรียกว่ามีโครงสร้างของการทำงานแบบเลือกทำเพียงทางเดียว หรือ แบบ if..then…



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

สิ่งที่ควรระวังในการใช้งานขั้นตอนวิธีแบบมีการวนซ้ำคือ ต้องตรวจสอบว่าได้กำหนดเงื่อนไขอย่างรัดกุมและถูกต้อง มิเช่นนั้นแล้วอาจเกิดกรณีแบบวนซ้ำไม่รู้จบ (infinte loop) หรือกรณีที่วนซ้ำไม่ได้ตามจำนวนรอบที่ต้องการ



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




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


จากรายละเอียดของปัญหา สามารถเขียนเป็นขั้นตอนของรหัสลำลองได้ดังนี้






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

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


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


 ภาษาคอมพิวเตอร์ (Computer Languages)
ในการเขียนโปรแกรมนั้น ผู้ใช้จะต้องใช้ภาษาคอมพิวเตอร์เขียนโปรแกรมเรียกว่าซอฟต์แวร์ขึ้นมา ภาษาคอมพิวเตอร์นั้นจะมีตั้งแต่ละดับภาษาของเครื่องขึ้นมาจนถึงภาษาธรรมชาติ


 ภาษาเครื่อง (Machine Languages) ภาษาที่เครื่องคอมพิวเตอร์เข้าใจมากที่สุด ซึ่งจะเป็นลักษณะแบบเลขฐานสอง คือ 0 กับ 1
ภาษาสัญลักษณ์ (Symbolic Languages) เมื่อคอมพิวเตอร์ได้พัฒนาขึ้นมาเรื่อยๆและมีผู้ใช้มากขึ้น จึงมีคนมองเห็นว่าการที่จะเขียนโปรแกรมควบคุมคอมพิวเตอร์ด้วยภาษาเครื่องนั้น จะทำให้การพัฒนาทางด้านซอฟต์แวร์เป็นไปได้ช้า จึงได้มีการพัฒนาภาษาสัญลักษณ์ขึ้นเพื่อให้การเขียนโปรแกรมคอมพิวเตอร์สะดวกยิ่งขึ้น แต่การที่นำโปรแกรมนั้นไปใช้ จะต้องทำการเปลี่ยนภาษาสัญลักษณ์เป็นภาษาเครื่องก่อนเสมอ
ภาษาระดับสูง (High-Level Languages) เป็นภาษาที่พัฒนามาจากภาษาสัญลักษณ์อีกทีหนึ่ง แต่จะมีลักษณะที่คล้ายกับภาษามนุษย์มากยิ่งขึ้น การแปลงภาษาระดับให้เป็นภาษาเครื่องนั้นจะมีวิธีการเรียกว่าคอมไฟล์ ภาษาระดับได้แก่ FORTRAN COBOL และ ภาษาC
ภาษาธรรมชาติ (Natural Languages) ภาษาธรรมชาติก็คือภาษาที่มนุษย์พูดกัน เช่น ภาษาอังกฤษ ภาษาจีน เป็นต้น ซึ่งเครื่องคอมพิวเตอร์นั้นไม่สามารถที่จะเข้าใจได้เลย ในปัจจุบันยังไม่มีคนนิยมใช้กันมากนัก


ขั้นตอนการรันโปรแกรมด้วยภาษา c

การพัฒนาโปรแกรมด้วยภาษา c นั้นมีขั้นตอนอยู่ 3 ขั้น ดังนี้
1.เขียนและแก้ไขโปรแกรม คือ การนำคำสั่งต่างๆของภา c มาเขียนเรียงต่อๆกันจนเป็นโปรแกรมที่ทำงานตามผู้ใช้ต้องการ โดยการเขียนจะเป็นตัวอักษร ซึ่งเมื่อเขียนเสร็จก็จะได้เป็น Source Files
2.คอมไฟล์โปรแกรม เมื่อได้ Source Files แล้วและเมื่อต้องการรันโปรแกรมใดๆผู้ใช้จะต้องทำการแปลง Source Files เหล่านั้น ให้เป็นภาษาเครื่องก่อน ซึ่งในขั้นตอนนี้เรียกว่า คอมไฟล์โปรแกรม ซึ่งจะได้ไฟล์ Object Module ด้วย3.การลิงค์โปรแกรม ในภาษา c นั้นจะมีฟังก์ชั่นต่างๆที่เตรียมพร้อมมาให้ผู้ใช้ได้ใช้อยู่แล้ว เมื่อ คอมไฟล์โปรแกรมเสร็จแล้วไม่มีข้อผิดพลาดใด ตัวคอมไฟล์ (Compiler) จะทำการดึงโปรแกรมอื่นที่ถูกเรียกใช้จากโปรแกรมที่ทำการลิงค์เข้ามารวมในโปรแกรมที่สมบูรณ์



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

การพัฒนาโปรแกรม
ในการพัฒนาโปรแกรมขึ้นมาซักโปรแกรมหนึ่งนั้น ไม่ใช่มาถึงจะเขียนโปรแกรมได้เลย การพัฒนานั้นจะมีขั้นตอนที่เรียกว่า System Development Life Cycle
1.หาความต้องการของระบบ (System Requirements) คือ การศึกษาและเก็บความต้องการของผู้ใช้โปรแกรม ว่ามีความต้องการอะไรบ้าง
2.วิเคราะห์ (Analysis) คือ การนำเอาความต้องการของผู้ใช้โปรแกรมมาวิเคราะห์ว่าจะพัฒนาเป็นโปรแกรมตามที่ผู้ใช้ต้องการได้หรือไม่ถ้าทำได้จะทำได้มากน้อยเพียงใด3.ออกแบบ (Design) คือ เมื่อสรุปได้แล้วว่าโปรแกรมที่จะสร้างมีลักษณะใดขั้นตอนต่อมาคือ การออกแบบการทำงานของโปรแกรมให้เป็นไปตามความต้องการที่วิเคราะห์ไว้การออกแบบอาจจะออกแบบเป็นผังงานก็ได้
4.เขียนโปรแกรม (Code) คือ เมื่อได้ผังงานแล้ว ต่อมาก็เป็นการเขียนโปรแกรมตามผังงานออกแบบไว้
5.ทดสอบ (System Test) คือเมื่อเขียนโปรแกรมเสร็จแล้ว จะต้องมีการทดสอบเพื่อหาข้อผิดพลาดต่างๆ เช่น ตรงตามที่ผู้ใช้ต้องการหรือไม่ ถ้าพบข้อผิดพลาดก็กลับไปทำออกแบบอีกครั้ง
6.ดูแล (Maintenance) เมื่อโปรแกรมผ่านการทดสอบแล้ว และผู้ใช้ได้นำโปรแกรมดังกล่าวไปใช้ ผู้พัฒนาจะต้องคอยดูแล เนื่อจากอาจมีข้อผิดพลาดที่หาไม่พบในขั้นตอนการทดสอบโปรแกรม


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


ภาษาคอมพิวเตอร์สามารถแบ่งออกเป็นสองกลุ่มคือ ภาษาระดับสูง (high level) และภาษาระดับต่ำ (low level) ภาษาระดับสูงถูกออกแบบมาเพื่อให้ใช้งานง่ายและสะดวกสบายมากกว่าภาษาระดับต่ำ โปรแกรมที่เขียนถูกต้องตามกฎเกณฑ์และไวยากรณ์ของภาษาจะถูกแปล(compile) ไปเป็นภาษาระดับต่ำเพื่อให้คอมพิวเตอร์สามารถนำไปใช้งานหรือปฏิบัติตามคำสั่งได้ต่อไป ซอฟต์แวร์สมัยใหม่ส่วนมากเขียนด้วยภาษาระดับสูง แปลไปเป็นออบเจกต์โค้ด (object code) แล้วเปลี่ยนให้เป็นชุดคำสั่งในภาษาเครื่อง



ภาษาคอมพิวเตอร์อาจแบ่งกลุ่มได้เป็นอีกสองประเภทคือ ภาษาที่มนุษย์อ่านออก (human-readable) และภาษาที่มนุษย์อ่านไม่ออก (non human-readable) ภาษาที่มนุษย์อ่านออกถูกออกแบบมาเพื่อให้มนุษย์สามารถเข้าใจและสื่อสารได้โดยตรงกับคอมพิวเตอร์ ส่วนใหญ่เป็นภาษาอังกฤษ) ส่วนภาษาที่มนุษย์อ่านไม่ออกจะมีโค้ดบางส่วนที่ไม่อาจอ่านเข้าใจได้