วันศุกร์ที่ 7 กรกฎาคม พ.ศ. 2560

ภาษาซีเบื้องต้น ตอนที่ 2 : ประวัติ ขั้นตอนการเขียนโปรแกรม Algorithms Flowchart

ก่อนเขียนเนื้อหาในตอนที่ 2
ลองตอบคำถามนี้ก่อน  
1 ทำไมเราต้องเรียนเขียนโปรแกรม?
2 การเขียนโปรแกรมมีประโยชน์อย่างไร?
3 หากไม่รู้ จะมีผลอะไรกับเราไหม ?
..ซึ่งคำตอบที่ได้ของแต่ละคน คิดว่าจะต่างกันออกไปแน่นอน ขอไม่เฉลยละกัน 

ในโลกนี้ผู้นำประเทศไหนบ้างที่เคยเขียนโปรแกรมแล้วออกข่าว 

(จากรูป ประธานาธิบดีบารัค โอบามา หัดเขียนโปรแกรมเป็นครั้งแรกด้วย JavaScript)
อ้างอิง : https://www.blognone.com/node/63672














(จากรูป นายกรัฐมนตรีสิงคโปร์โชว์เขียนโปรแกรม C++ แก้ปัญหาเกม Sudoku)
อ้างอิง : http://www.thaifone.com/นายกรัฐมนตรีสิงคโปร์โช/

หรือแม้แต่คนธรรมดาก็ยังสามารถเขียนโปรแกรมได้

(จากรูป โปรแกรมเมอร์ชื่อ Patrick McConlogue กับ คนจรจัดที่ชื่อ Leo)
อ้างอิง : http://jimmysoftwareblog.com/node/184


เนื้อหาส่วนต่อมาที่อยากจะให้เข้าใจคือการเขียนโปรแกรมเป็นการทำในส่วนของซอฟต์แวร์ ซึ่งองค์ประกอบหลักๆของคอมพิวเตอร์จะมี ฮาร์ดแวร์ ซอฟต์แวร์ บุคลากร ข้อมูล/สารสนเทศ .. 
อ่านเพิ่มได้ตามลิงค์นี้ http://srcom608.weebly.com/ หรือไปหาในgoogle เพิ่มเองก็ได้ 
ก็แสดงว่า ใครที่เป็นคนเขียนโปรแกรมสามารถสร้างทุกอย่างที่เป็นซอฟต์แวร์ที่อยู่ในคอมพิวเตอร์ สนุกไหมละ *-* เพราะเมื่อก่อนคอมพิวเตอร์สมัยแรกๆ ซอฟต์แวร์ต่างๆ ผู้ใช้ไม่สามารถทำหรือแก้ไขอะไรได้เลย ต้องใช้เท่าที่มี 

การเขียนโปรแกรมในบล็อกนี้จะเรียนการเขียนโปรแกรมภาษาซี 

คนสร้างหรือคิดขึ้นภาษาซีนี้มีชื่อว่า Dennis Ritchie

          ภาษาซีเกิดขึ้นในปี ค.ศ.1972 โดย Dennis Ritchie แห่ง Bell Labs โดยภาษาซีนั้นพัฒนามาจาก ภาษา B และจากภาษา BCPL ซึ่งในช่วงแรกนั้นภาษาซีถูกออกแบบให้ใช้เป็นภาษาการเขียนโปรแกรมในระบบ UNIX และเริ่มมีคนสนใจมากขึ้นในปี ค.ศ.1978 เมื่อ Brain Kernighan ร่วมกับ Dennis Ritchie พัฒนามาตรฐานของภาษาซีขึ้นมา คือ K&R (Kernighan & Ritchie) และทั้งสองยังได้แต่งหนังสือชื่อว่า "The C Programming Language" โดยภาษาซีนั้นสามารถจะปรับใช้กับเครื่องคอมพิวเตอร์รูปแบบต่างๆได้ ต่อมาในช่วง ปี ค.ศ.1988 Ritchie และ Kernighan ได้ร่วมกับ ANSI (American National Standards Institute) สร้างเป็นมาตรฐานของภาษาซีขึ้นมาใหม่มีชื่อว่า "ANSI C"

อ่านรายละเอียดอื่นๆได้ที่ wiki : https://th.wikipedia.org/wiki/ภาษาซี




evolution programming languageshttp://www.verkeyn.net/professional/histlang.html

ภาษาที่ใช้ในการพัฒนาโปรแกรม  แบ่งออก 2 ประเภท คือ
1 ภาษาระดับต่ำ
--ให้เข้าใจง่ายๆ เขียนยาก ภาษาเครื่องก็มีแค่ 0 กับ 1 ถ้าภาษาแอสเซมบลีก็จะต้องจองหน่วยความจำในเครื่องแล้วเขียนโปรแกรม
ภาษาเครื่อง  (0101010101 ) ภาษาแอสเซมบลี (Assembly)

2 ภาษาระดับสูง
--เป็นภาษาที่ใกล้เคียงกับคำพูดมนุษย์ อยู่ในรูปแบบภาษาอังกฤษ มีไวยากรณ์ในรูปแบบที่คล้ายๆกัน
ภาษาเบสิก (BASIC)  ภาษาซี (C )
ภาษาโคบอล (COBOL)  ภาษา C# ภาษาจาวา (JAVA)
ภาษา Python ภาษา PHP ภาษา PASCAL เป็นต้น

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


ขั้นตอนการเขียนโปรแกรม มีอยู่ 5 ขั้นตอน 
1.วิเคราะห์ปัญหา
   ในขั้นตอนนี้จำเป็นต้องอ่านโจทย์อย่างระมัดระวัง  เพื่อให้เข้าใจถึงแก่นแท้ของปัญหาให้ดี หากไม่สามารถตีความสิ่งที่โจทย์ต้องการผิดพลาดไป จะทำให้ส่วนอื่นๆหลังจากนี้ผิดหมดหรือมีปัญหาภายหลังได้ ในขั้นตอนนี้จะมีการแบ่งออกเป็น 3 ส่วนหลักๆดังนี้
         -ส่วนนำเข้าข้อมูล (input)   -ส่วนประมวลผล (process)    -ส่วนผลลัพธ์ (output)

ยกตัวอย่างง่ายๆ หากต้องการเขียนโปรแกรมบวกเลข 2 จำนวน โดยรับค่าจากผู้ใช้ 
ส่วนนำเข้าข้อมูล คือ ตัวเลข 2 จำนวน (เช่น 1 กับ 2) 
ส่วนประมวลผล คือ การบวกเพื่อที่จะให้ได้ผลบวก  (+) 
ส่วนผลลัพธ์ คือ ผลบวกของ2จำนวน (3)
        หากไม่เข้าใจโจทย์เช่น ส่วนนำเข้าข้อมูล ไปเอาตัวเลขที่ไม่ใช่ 2 จำนวน เช่น 3 จำนวน 1 2 3 ถ้าไปบวกกันแล้ว จะได้ผลลัพธ์คือ 6 ผลลัพธ์ถูก แต่ก็ไม่ตรงกับโจทย์ที่ต้องการ คือ โปรแกรมบวกเลข2จำนวน
หรือ หากส่วนประมวลผิด เช่น ไปใช้เครื่องหมาย - แทน + ผลลัพธ์ก็ผิดเหมือนกัน เพราะฉะนั้นต้องตีโจทย์ให้ได้ว่าแต่ะส่วนคืออะไร  สุดท้ายแล้ว สิ่งที่ยากที่สุดคือ ส่วนประมวลผล จากตัวอย่างเป็นแค่การ+เลข ก็คือใช้เครื่องหมาย+ตรงส่วนประมวลผล แต่หากเป็นโจทย์ที่ซับซ้อน ส่วนประมวลผลก็เหมือนกับการคิดสูตรขึ้นมาใหม่ 

2.ออกแบบโปรแกรม
   เมื่อวิเคราะห์ปัญหาเสร็จแล้ว ต่อไปก็คือการออกแบบโปรแกรม โดยใช้อัลกอริทึมเป็นขั้นตอนที่ใช้อธิบายลำดับการเขียนโปรแกรม ขึ้นตอนนี้จะประกอบด้วยกิจกรรมต่างๆดังนี้
-กำหนดขั้นตอนการประมวลผลส่วนหลักๆ
-การกำหนดของส่วนงานย่อย
-การออกแบบส่วนประสานการทำงานระหว่างผู้ใช้ (User Interface)
-โครงส้รางควบคุมการทำงาน เช่น การตรวจสอบเงื่อนไข หรือ การทำงานซ้ำ
-ตัวแปร
-ตรรกะโปรแกรม (Logic)

3.เขียนโปรแกรม
  เมื่ออัลกอริทึมถูกเขียนขึ้น หรือลำดับขั้นตอนในโปรแกรมมีอะไรบ้างที่ต้องมาเขียน  ผ่านการตรวจสอบและทดสอบจนแน่ใจว่าถูกต้องแล้ว ขั้นตอนต่อไปคือมาเขียนชุดคำสั่งด้วยภาษาคอมพิวเตอร์ โดยเลือกภาษาคอมพิวเตอร์ระดับสูงต่างๆตามความเหมาะสม เช่น C, C++, Pascal , Java หรือ Visual Basic เป็นต้น

4.ทดสอบโปรแกรม
   หลังจากเขียนโปรแกรมเสร็จเรียบร้อยแล้ว ขั้นตอนต่อไปคือนำโปรแกรมมาแปล (ตัวแปลภาษาคอมพิวเตอร์ อาจเป็นตัวแปรชนิดคอมไพเลอร์ หรือ อินเตอร์พรีเตอร์ก็ได้) เพื่อทดสอบความถูกต้อง หากตัวแปลภาษาเป็นคอมไพเลอร์ (Compiler) เช่น ภาษาซี ก็จะแปลแบบทั้งโปรแกรม ซึ่งหากโปรแกรมมีข้อผิดพลาด ก็ต้องถูกแก้ไขใหม่ให้ถูกต้อง และแปลใหม่จนกระทั่งไม่พบข้อผิดพลาด โปรแกรมจึงใช้งานได้ ในขณะที่ตัวแปลแบบอินเตอร์พรีเตอร์ (Interpreter) จะแปลชุดคำสั่งทีละคำสั่งในแต่ละบรรทัด โดยโปรแกรมยังคงสามารถทำงานได้ต่อไป ถึงแม้ว่าจะมีข้อผิดพลาดก็ตาม ตราบใดที่ตัวแปลภาษายังไม่ผ่านการแปลในบรรทัดที่เขียนชุดคำสั่งผิด และขั้นตอนการทดสอบโปรแกรม สามารถเรียกอีกชื่อหนึ่งว่า "การดีบั๊กโปรแกรม (Debugging)"
   ข้อผิดพลาดในการเขียนโปรแกรมที่พบเจอบ่อย มี 2 แบบ
1.Syntax Error คือ ข้อผิดพลาดของชุดคำสั่ง ที่มาจากการพิมพ์ส่วนใหญ่ เช่น จะเขียนชุดคำสั่งแสดงผลในภาษาซี จะต้องเขียน printf แต่หากไปพิมพ์แบบอื่นเช่น print ลืม f แบบนี้ก็คือเป็นข้อผิดพลาดแบบ Syntax Error
2.Logic Error คือ ข้อผิดพลาดแบบนี้ตัวแปลภาษาไม่สามารถตรวจเจอได้ เพราะ ส่วนใหญ่เป็นการใช้สูตรผิดทำให้แปลภาษาผ่าน แต่เมื่อใช้โปรแกรม ผลลัพธ์ออกมาผิด
-ดังนั้นการทดสอบโปรแกรมจึงต้องทดสอบข้อผิดพลาดของชุดคำสั่งและผลลัพธ์ที่รันว่าถูกหรือไม่ อาจมีความจำเป็นต้องทดสอบหลายๆรอบ หรือ ด้วยการป้อนข้อมูลการทดสอบในหลายๆกรณี จนมั่นใจไม่พบข้อผิดพลาด

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


** หนังสือบางเล่มอธิบายขั้นตอนมากกว่านี้ 6 7 หรือ 8  ขั้นตอน **

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














Algotithm 1  Vs Algotithm 2
ผลที่ได้เหมือนกันคือ ไข่ต้ม
ผลลัพธ์อัลกอริธึม 1 สามารถทานได้เลย ส่วนอัลกอริธึม 2 ต้องปอกก่อนทาน

สรุปคือ เราได้ผลลัพธ์ตามที่โจทย์ต้องการคือ ไข่ต้ม

Flowchart
         แผนภาพแสดงลำดับขั้นตอนการทำงานของ Algorithm, Workflow, Process เป็นเครื่องมือใช้การรวบรวมจัดลำดับความคิด เพื่อให้เห็นขั้นตอนการทำงานที่ชัดเจนและใช้วางแผนการทำงานขั้นแรก โดยสัญลักษณ์ Flowchart แสดงถึงการทำงานลักษณะต่างๆ เชื่อมต่อกัน


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

**เรื่องนี้หากสนใจให้ไปดูเพิ่มเติม เนื้องจากการเขียนโปรแกรมภาษาซีเบื้องต้นของผมจะไม่ขอพูดถึงส่วนนี้ ถ้าสรุปง่ายๆ คือ เป็นภาพของโปรแกรมในรูปแบบสัญลักษณ์ของโปรแกรมทำงานยังไง **
รายละเอียด อ้างอิง :http://share.olanlab.com/th/it/blog/view/214


Programming ?
algorithm and flowchart for solving problem:


การเขียนโปรแกรมก็คือ หาวิธีแก้ปัญหาที่เกิดขึ้น ว่าต้องทำอะไรบ้าง โดยเขียนในรูปแบบอัลกอริทึมหรืออาจมีโฟวชาร์ท(ผังงาน)ด้วย หลังจากนั้นก็เรื่มเขียนโปรแกรมผ่านภาษาคอมพิวเตอร์ที่เหมาะสม เขียนโปรแกรมเสร็จแล้วแปลโปรแกรมหรือรันโปรแกรมจะได้ผลลัพธ์ที่ไว้แก้ปัญหาตอนแรก
รายละเอียก อ้างอิง :https://en.wikiversity.org/wiki/Introduction_to_Programming/About_Programming



สุดท้ายนี้ อยากให้ดูวีดีโอนี้ 

(แน่นอนว่าในไทย การทำงานด้านเขียนโปรแกรมไม่ดีเท่าต่างประเทศ เพราะฉะนั้น ฝึกภาษาอังกฤษให้ดีแล้วโอกาสทำงานด้านนี้แบบในวีดีโอมีเยอะ)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น