วันศุกร์ที่ 10 กุมภาพันธ์ พ.ศ. 2560

บทที่ 9 ข้อมูลชนิดโครงสร้างและการจัดการแฟ้มข้อมูล

บทที่ 9
ข้อมูลชนิดโครงสร้างและการจัดการแฟ้มข้อมูล



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



การประกาศตัวแบบโครงสร้าง
สหหรับการประกาศตัวแปรแบบโครงสร้างในภาษาซี มีดังนี้
Strict        หมายถึงคำที่ใช้กำหนดตัวแปรแบบโครงสร้าง
Tag           หมายถึงชื่อโครงสร้าง
Member   หมายถึงสมาชิกภายในโครงสร้าง

การประกาศตัวแปรให้กับโครงสร้าง





จากตัวอย่างข้างต้น เมื่อมีการประกาศตัวแบบโครงสร้างชื่อ employee แล้ว ยังไม่สามารถนำมาใช้งานได้ เนื่องจากการประกาศดังกล่าว เป็นเพียงการสร้างตัวแบบขึ้นมาเท่านั้น

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

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

1. เท็กซ์ไฟล์ (Text Filed)
คำว่า เท็กซ์ไฟล์ ความหมายก็บ่งบอกอยู่แล้วว่า เป็นแฟ้มที่จัดเก็บข้อความ ซึ่งมีคุณลักษณะที่สำคัญคือ จะบันทึกข้อมูลที่เป็นข้อความต่างๆ ตามรหัสแอสกรของแต่ละตัวอักขระ ดังนั้น เท็กซ์ไฟล์ จึงสามารถถูกเปิดอ่านด้วยโปรแกรม Notepad ได้ และสามารถอ่านข้อความที่บันทึกไว้ได้อย่างเข้าใจ



2. ไบนารีไฟล์ (Binary Files) 



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

การเปิดและปิดแฟ้มข้อมูล
การจัดการกับแฟ้มข้อมูลในภาษาซี จะเกี่ยวข้องกับตัวแปรพอยน์เตอร์จะนำไปชี้ระบุถึงตำแหน่งเรคอร์ด รวมถึงการดำเนินงานเกี่ยวกับการเปิดแฟ้มข้อมูล และปิดแฟ้มข้อมูล

1. ฟังก์ชัน fopen()
เป็นฟังก์ชันที่นำมาใช้เพื่อการเปิดแฟ้มข้อมูล

2. ฟังก์ชัน fclose()
เป็นฟังก์ชันที่ใช้สำหรับปิดแฟ้มข้อมูล โดยหลังจากที่ได้เปิดแฟ้มข้อมูลด้วยฟังก์ชัน fclose()

3. ฟังก์ชัน fprintf()
เป็นฟังก์ชันที่ใช้สำหรับบันทึกข้อมูลลงในแฟ้ม

4. ฟังก์ชัน fscanf()เป็นฟังก์ชันที่นำมาใช้อ่านข้อมูลจากแฟ้ม

บทที่ 8 การสร้างฟังก์ชันและตัวแปรชนิดพอยน์เตอร์

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


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

2. เพื่อง่ายต่อการตรวจสอบ และการบำรุงรักษา

3.เพื่อหลีกเลี่ยงการเขียนชุดคำสั่งเดิม

4.เพื่อสร้างกลุ่มคำสั่งประมวลผลเฉพาะงาน




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

1.1 ฟังก์ชันที่ไม่มีการส่งผ่านใดๆ
จัดเป็นฟังก์ชันที่มุ่งเน้นให้ทำงานใดๆ จนสำเร็จเท่านั้น โดยมิได้มีการส่งผ่านค่าใดๆลงไป และไม่มีการคืนค่าใดๆ กลับไปยังฟังก์ชัน ทั้งนี้ภาษาซีจะใช้คำว่า void

1.2 ฟังก์ชันที่มีการส่งผ่านค่าทางเดียว
เป็นฟังก์ชันที่มีการส่งผ่านค่าผ่านอาร์กิวเมนต์ภายในวงเว็บ จึงต้องระบุชนิดข้อมูลลงไป ซึ่งจะมีกี่ตัวก็ได้

1.3ฟังก์ชันที่ส่งผ่านค่าและคืนค่ากลับ
เป็นรูปแบบฟังก์ชันที่นอกจากจะมีการส่งผ่านค่าแล้ว ยังมีการคืนค่ากลับไปด้วย






ฟังก์ชันต้นแบบ (Prototype)
จากโปรแกรมการสร้างฟังก์ชันใช้งานเอง จะพบว่า ได้มีการวางตำแหน่งฟังก์ชันที่สร้างขึ้นไว้ก่อนฟังก์ชัน main () ทั้งนี้ก็เพื่อให้คอมไพเลอร์ได้แปลชุดคำสั่งของฟังก์ชันที่สร้างขึ้นเองก่อน








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





บทที่ 7 อาร์เรย์และฟังก์ชั่นจัดการสตริง


   





  




   


   


   

                                                                   สรุปบทที่ 6

                                   :คำสั่งควบคุมเงื่อนไขและการทำงานเป็น  รอบ:
                                                    


   >>คำสั่งควบคุมเงื่อนไข<<

        ภาษาซีจะใช้ประโยค if ในการ
    สร้างเงื่อนไข ซึ่งสามารถตรวจสอบเงื่อนไข
    ว่าตรงกับความจริง หรือความเท็จได้  นอกจากประโยค if แล้ว ในภาษาซียังมีการกำหนดทางเลือก       ด้วยประโยค switch ให้เลือกใช้อีกด้วย
   
   1. การควบคุมเงื่อนไข  if-statement
   
       ในการใช้ประโยคคำสั่ง if-statement เพื่อ  ตรวจสอบเงื่อนไข มีอยู่ 4 รูปแบบด้วยกันคือ

1.1 การสร้างเงื่อนไขประโยคเดียว 
   
      เป็นการาตรวจสอบเงื่อนไขว่าเป็นจริงหรือเท็จ แล้วให้ทำชุดคำสั่งนั้นๆ






  1.2 การสร้างเงื่อนไข if...eles
  
       เป็นการตรวจสอบว่า หากเงื่อนไขเป็นจริงก็จะดำเนินการกับชุดคำสั่งที่กำหนดไว้ และหาก
       เงื่อนไขเป็นเท็จ ก็จะดำเนินการกับชุดคำสั่งหลังประโยค eles


   


   
1.3 การสร้างเงื่อนไข if...eles แบบหลาย  กรณี

      จากรูปแบบเงื่อนไขข้างต้นที่ผ่านมา ้ป็นรูปแบบเงื่อนไขแค่ 2 กรณีเท่านั้น ดังนั้น หากรูปแบบการสร้างเงื่อนไขที่ต้องตรวจสอบหลายๆ กรณี ก็จะใช้ประโยค eles if เพื่อตรวจสอบ  เป็นลำดับย่อยๆต่อไป









1.4 การสร้างเงื่อนไขแบบซ้อน (Netsted if)

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





  







2. การควบคุมเงื่อนไขด้วยปรโยค switch

     นอกจาก if-else แล้ว ภาษาซียังมีคำสั่งควบคุมเงื่อนไขอีกตัวหนึ่งคือ switch  ซึ่งสามารถนำมาใช้งาน      ได้ดีกับโปรแกรมที่มีรายการเมนูให้เลือก


  







>>คุณสมบัติของประโยค if และ switch มี  ข้อแตกต่างกัน ดังต่อไปนี้<<

    1. switch ไม่สามารถตรวจสอบนิพจน์ชนิดเลขจำนวนจริงที่มีจุดทศนิยม

    2. switch นำมาใช้ตรวจสอบชนิดข้อมูลที่เป็นแบบ int หรือ char เท่านั้น

    3. การตรวจสอบเงื่อนไขภายใน case ของ  switch ในแต่ละกรณี จะไม่สามารถนำตัวแปรมาใช้ได้
       จะใช้ได้แต่เพียงค่าคงที่เท่านั้น

    4. switch ไม่สามารถตรวจสอบ เงื่อนไขหลายๆตัว ภายในนิพจน์ได้












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

  1. การทำงานเป็นรอบด้วยลูป while

  2. การทำงานเป็นรอบด้วยลูป do while

  3. การทำงานเป็นรอบด้วยลูป for











1.การทำงานเป็นรอบด้วยลูป while

  คุณลักษณะของการทำงานเป็นรอบด้วยลูป while

  1. ลูป while จะถูกทำงานต่อเมื่อเงื่อนไขเป็นจริง

  2. เมื่อเงื่อนไขเป็นเท็จ ก็ขะหลุดออกจากลูป  while

  3. นิพจน์ที่นำมาใช้ตรวจสอบเงื่อนไขสามารถใช้ตัวดำเนินการเปรียบเทียบ





 






2. การทำงานเป็นรอบด้วยลูป do while

   คุณลักษณะของการทำงานเป็นรอบด้วยลูป do while

   1. หากสร้างลูปด้วย do while ชุดคำสั่งภาย  ในลูป อย่างน้อยจะต้องถูกทำงาน 1 รอบ เสมอ ถึงแม้ว่าการตรวจสอบเงื่อนไขครั้งแรกจะเป็นเท็จก็ตาม


  




   
3. การทำงานเป็นรอบด้วยลูป for

   คุณลักษณะของการทำงานเป็นรอบด้วยลูป for

   1. การทำงานของลูป จะเริ่มจากค่าเริ่มต้นที่กำหนดใน expression 1
 
   2. รอบการทำงาน ขึ้นอยู่กับนิพจน์       เงื่อนไขที่ตั้งไว้ใน expression 2

   3. การเพิ่มค่า counter ให้กับลูปใน expression 3 จะส่งผลต่อจำนวนรอบของลูป




   

   





   








บทที่ 6 คำสั่งควบคุมเงื่อนไข และการทำงานเป็นรอบ


   





  




   


   


   

                                                                   สรุปบทที่ 6

                                   :คำสั่งควบคุมเงื่อนไขและการทำงานเป็น  รอบ:
                                                    


   >>คำสั่งควบคุมเงื่อนไข<<

        ภาษาซีจะใช้ประโยค if ในการ
    สร้างเงื่อนไข ซึ่งสามารถตรวจสอบเงื่อนไข
    ว่าตรงกับความจริง หรือความเท็จได้  นอกจากประโยค if แล้ว ในภาษาซียังมีการกำหนดทางเลือก       ด้วยประโยค switch ให้เลือกใช้อีกด้วย
   
   1. การควบคุมเงื่อนไข  if-statement
   
       ในการใช้ประโยคคำสั่ง if-statement เพื่อ  ตรวจสอบเงื่อนไข มีอยู่ 4 รูปแบบด้วยกันคือ

1.1 การสร้างเงื่อนไขประโยคเดียว 
   
      เป็นการาตรวจสอบเงื่อนไขว่าเป็นจริงหรือเท็จ แล้วให้ทำชุดคำสั่งนั้นๆ






  1.2 การสร้างเงื่อนไข if...eles
  
       เป็นการตรวจสอบว่า หากเงื่อนไขเป็นจริงก็จะดำเนินการกับชุดคำสั่งที่กำหนดไว้ และหาก
       เงื่อนไขเป็นเท็จ ก็จะดำเนินการกับชุดคำสั่งหลังประโยค eles


   


   
1.3 การสร้างเงื่อนไข if...eles แบบหลาย  กรณี

      จากรูปแบบเงื่อนไขข้างต้นที่ผ่านมา ้ป็นรูปแบบเงื่อนไขแค่ 2 กรณีเท่านั้น ดังนั้น หากรูปแบบการสร้างเงื่อนไขที่ต้องตรวจสอบหลายๆ กรณี ก็จะใช้ประโยค eles if เพื่อตรวจสอบ  เป็นลำดับย่อยๆต่อไป









1.4 การสร้างเงื่อนไขแบบซ้อน (Netsted if)

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





  







2. การควบคุมเงื่อนไขด้วยปรโยค switch

     นอกจาก if-else แล้ว ภาษาซียังมีคำสั่งควบคุมเงื่อนไขอีกตัวหนึ่งคือ switch  ซึ่งสามารถนำมาใช้งาน      ได้ดีกับโปรแกรมที่มีรายการเมนูให้เลือก


  







>>คุณสมบัติของประโยค if และ switch มี  ข้อแตกต่างกัน ดังต่อไปนี้<<

    1. switch ไม่สามารถตรวจสอบนิพจน์ชนิดเลขจำนวนจริงที่มีจุดทศนิยม

    2. switch นำมาใช้ตรวจสอบชนิดข้อมูลที่เป็นแบบ int หรือ char เท่านั้น

    3. การตรวจสอบเงื่อนไขภายใน case ของ  switch ในแต่ละกรณี จะไม่สามารถนำตัวแปรมาใช้ได้
       จะใช้ได้แต่เพียงค่าคงที่เท่านั้น

    4. switch ไม่สามารถตรวจสอบ เงื่อนไขหลายๆตัว ภายในนิพจน์ได้












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

  1. การทำงานเป็นรอบด้วยลูป while

  2. การทำงานเป็นรอบด้วยลูป do while

  3. การทำงานเป็นรอบด้วยลูป for











1.การทำงานเป็นรอบด้วยลูป while

  คุณลักษณะของการทำงานเป็นรอบด้วยลูป while

  1. ลูป while จะถูกทำงานต่อเมื่อเงื่อนไขเป็นจริง

  2. เมื่อเงื่อนไขเป็นเท็จ ก็ขะหลุดออกจากลูป  while

  3. นิพจน์ที่นำมาใช้ตรวจสอบเงื่อนไขสามารถใช้ตัวดำเนินการเปรียบเทียบ





 






2. การทำงานเป็นรอบด้วยลูป do while

   คุณลักษณะของการทำงานเป็นรอบด้วยลูป do while

   1. หากสร้างลูปด้วย do while ชุดคำสั่งภาย  ในลูป อย่างน้อยจะต้องถูกทำงาน 1 รอบ เสมอ ถึงแม้ว่าการตรวจสอบเงื่อนไขครั้งแรกจะเป็นเท็จก็ตาม


  




   
3. การทำงานเป็นรอบด้วยลูป for

   คุณลักษณะของการทำงานเป็นรอบด้วยลูป for

   1. การทำงานของลูป จะเริ่มจากค่าเริ่มต้นที่กำหนดใน expression 1
 
   2. รอบการทำงาน ขึ้นอยู่กับนิพจน์       เงื่อนไขที่ตั้งไว้ใน expression 2

   3. การเพิ่มค่า counter ให้กับลูปใน expression 3 จะส่งผลต่อจำนวนรอบของลูป