1 / 34

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure). ทบทวนเรื่อง Array และ struct pointer การเขียนโปรแกรมติดต่อแฟ้มข้อมูล. ทบทวนเรื่อง Array.

Download Presentation

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. วิชา COSC2202โครงสร้างข้อมูล (Data Structure) ทบทวนเรื่อง Array และ struct pointer การเขียนโปรแกรมติดต่อแฟ้มข้อมูล

  2. ทบทวนเรื่อง Array • Array เป็นโครงสร้างข้อมูลที่ประกอบด้วยกลุ่มของตัวแปรที่เป็นค่าอะไรก็ได้ แต่ต้องมีชนิดเดียวกัน ข้อมูลแต่ละตัวใน Array เรียกว่าสมาชิกของ array การอ้างถึงจะเรียกชื่อตัวแปร array แล้วตามด้วยหมายเลขดัชนี (index) ของสมาชิกที่ต้องการอ้างถึง โดยสมาชิกตัวแรกจะแทนด้วยลำดับหมายเลข 0 สมาชิกตัวที่2 แทนด้วยลำดับหมายเลข 1 ..จนถึงลำดับที่ n

  3. ทบทวนเรื่อง Array ตัวอยาง char a[4]; int num[10]; int a[2][3]; ขนาดของ subscript = upper bound – lower bound + 1 ขนาดของอะเรย = ผลคูณของขนาดของ subscript แตละตัว สมการคำนวณหาตำแหน่งข้อมูล iLoc (A[i]) = L0 + (i-L)C

  4. Pointersและ Arraysของ Pointers • Pointer เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่ (Address) ของตัวแปรที่อยู่ในหน่วยความจำ • รูปแบบ type   *variable-name type หมายถึงชนิดของตัวแปร *หมายถึงเป็นเครื่องหมายที่แสดงว่า ตัวแปรที่ตามหลังเครื่องหมายนี้เป็น ตัวแปรพอยน์เตอร์ variable-name    เป็นชื่อของตัวแปรที่ต้องการประกาศว่าเป็นชนิดพอยน์เตอร์

  5. Pointersและ Arraysของ Pointers • char  *prt;                                หมายความว่าประกาศว่าตัวแปร prt เป็นตัวแปรพอยน์เตอร์ที่ใช้เก็บตำแหน่งเริ่มต้นที่จะเก็บ character • int  *a;                       หมายความว่าประกาศว่าตัวแปร a เป็นตัวแปรพอยน์เตอร์ที่ใช้เก็บตำแหน่งเริ่มต้นที่จะใช้เก็บ integer

  6. Pointersและ Arraysของ Pointers • เครื่องหมาย & เป็นเครื่องหมายที่ใช้เมื่อต้องการให้เอาค่าตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำออกมาใช้ เช่น x=10 (กำหนดให้ตัวแปร x ซึ่งอยู่ที่ตำแหน่ง 1000 มีค่า 10 เก็บอยู่) int  *y , x=10;   y = &x; ตัวแปร y ซึ่งประกาศเป็นตัวแปรพอยน์เตอร์จะเก็บค่า 1000 ซึ่งเป็นตำแหน่งที่อยู่

  7. ตัวอย่าง Pointersและ Arraysของ Pointers คำสั่งที่ 1 : int a, *ptr, b, c , *d; int a, *ptr, b, c , *d; a=25; ptr = &a; b = a;คำสั่งที่ 2 : a = 25 c = *ptr; d = ptr;

  8. ตัวอย่าง Pointersและ Arraysของ Pointers คำสั่งที่ 3   :  ptr = &a; int a, *ptr, b, c , *d; a=25; ptr = &a; b = a;คำสั่งที่ 4   :   b = a; c = *ptr; d = ptr;

  9. ตัวอย่าง Pointersและ Arraysของ Pointers คำสั่งที่ 5 :c = *ptr; int a, *ptr, b, c , *d; a=25; ptr = &a; b = a;คำสั่งที่ 6 :d = ptr; c = *ptr; d = ptr;

  10. Struct • Struct เป็นที่เก็บชุดของข้อมูลคล้ายกับ Array แต่ถ้าเป็น Array นั้น Array ตัวหนึ่งสามารถเก็บข้อมูลได้เฉพาะที่เป็นชนิดเดียวกันเท่านั้น (Data Type เดียวกัน) แต่สำหรับ Struct ตัวหนึ่ง ๆ สามารถเก็บข้อมูลได้หลาย ๆ ชนิด เช่น int, float, char ด้วยการใช้ชื่อตัวแปรเดียวกัน ชื่อ สกุล อายุ เกรดเฉลี่ย

  11. Struct ประกาศ Struct โดยใช้ชื่อ Struct ว่า data_rec ใน data_rec มีข้อมูลเก็บได้ 4 fields ได้แก่ • ตัวแปร first_name เป็น String ขนาด 20 ช่อง • ตัวแปร last_name เป็น String ขนาด 20 ช่อง • ตัวแปร age เป็นชนิดจำนวนเต็ม • ตัวแปร gpa เป็นชนิดทศนิยม • ประกาศ Struct ตัวนี้ ให้เป็นชนิดข้อมูลใหม่ของเราเอง โดยใช้มันชื่อว่า record ดังนั้นคำว่า record นี้ จะเสมือนว่ามัน คือ int มันคือ char ทำนองนั้น (Keyword ในการประกาศชนิดข้อมูลใหม่ก็คือ typedef นั่นเอง)

  12. Struct • การประกาศตัวแปร • สิ่งที่เราได้ทำไปคือการสร้างชนิดข้อมูลใหม่ขึ้นมา เวลาจะใช้งานมันก็ต้องประกาศเป็นตัวแปรก่อน ดังเช่น record student;หมายความว่า ให้ตัวแปรชื่อ student มีชนิดข้อมูล (data type) เป็นแบบ record ซึ่งจะเห็นว่ามันก็คล้ายกับ int x; นั่นเอง • การอ้างถึง ทำได้โดยการใช้ชื่อตัวแปรตามด้วยเครื่องหมายจุด แล้วตามด้วยชื่อ field ที่ต้องการstudent.first_name; student.last_name; student.age; student.gpa ;

  13. ชื่อ สกุล อายุ เกรดเฉลี่ย Struct เราสามารถประยุกต์การใช้ Struct เป็น Array of Struct ได้ด้วย ตัวอย่างเช่น

  14. Struct • การอ้างถึง ทำได้โดยใช้ชื่อตัวแปรตามด้วยเครื่องหมายก้ามปู [] ตามด้วยจุด แล้วตามด้วยชื่อ Field ที่ต้องการเช่น ชื่อของแถวบนสุด คือ student[0].first_name อายุของแถวต่อมา คือ student[1].last_name เกรดเฉลี่ยของแถวสุดท้าย คือ student[2].gpa

  15. ตัวอย่าง

  16. การเขียนโปรแกรมติดต่อแฟ้มข้อมูลการเขียนโปรแกรมติดต่อแฟ้มข้อมูล • ทำไมต้องเขียนโปรแกรมติดต่อแฟ้มข้อมูล (File) • การใช้ตัวแปรและประมวลผลตัวโปรแกรมทั้งหมด จะทำงานอยู่ในหน่วยความจำ (Memory) เท่านั้น นั่นก็หมายความว่าเมื่อโปรแกรมทำงานเสร็จข้อมูลต่าง ๆ ก็จะสูญหายไป • ถ้าต้องการให้ข้อมูล (ผลลัพธ์) นั้นยังคงอยู่ เราสามารถทำได้โดยใช้หลักง่าย ๆ คือเขียนข้อมูลผลลัพธ์นั้น เก็บเอาไว้ในไฟล์นั่นเอง • การเขียนโปรแกรมเพื่อติดต่อไฟล์ ยังมีประโยชน์ในกรณีที่เรามีไฟล์ข้อมูล input อยู่แล้ว ต้องการอ่านมันขึ้นมาแล้วประมวลผล แทนที่จะต้องมานั่งคีย์ข้อมูลด้วยตนเองมาก ๆ

  17. ประเภทของไฟล์ • สำหรับไฟล์ข้อมูลในภาษาซีที่ใช้ในการทำงานเพื่อเก็บข้อมูลแบ่งออกเป็น 2 ประเภทคือ • Text File (Sequential Access) (*) • เป็นไฟล์ข้อมูล ที่เก็บพวกข้อความ (เปิดอ่านรู้เรื่อง) • Binary File (Random Access) • เป็นไฟล์ข้อมูล ที่เก็บเป็น Binary (0/1) ดังนั้นถ้าเราใช้โปรแกรมเช่น Notepad เปิดก็จะอ่านไม่รู้เรื่อง

  18. การติดต่อไฟล์ • รูปแบบการประกาศใช้งานตัวแปรสำหรับเรื่องการติดต่อไฟล์ FILE *fp; • FILE เป็นประเภทข้อมูล (data type) ที่ใช้งานกับไฟล์ คล้าย ๆ กับ int, char • *fpเป็นชื่อตัวแปร pointer ที่ใช้อ้างอิงพื้นที่การทำงาน ในภาษาซี ตัวอักษรเล็ก กับ ใหญ่ มีความหมายต่างกัน (Case Sensitive) ซึ่ง FILE เป็น keyword ต้องเขียนด้วยตัวพิมพ์ใหญ่

  19. คำสั่งที่ใช้งานกับไฟล์ข้อมูลคำสั่งที่ใช้งานกับไฟล์ข้อมูล • การเปิดไฟล์ • การปิดไฟล์ • การตรวจสอบว่าในไฟล์ยังมีข้อมูลเหลืออยู่หรือไม่ • การอ่านข้อมูลจาก Text File • การเขียนข้อมูลลง Text File

  20. การเปิดไฟล์ fp = fopen(“file name”,“mode”); • fp คือ ชื่อตัวแปร pointer ที่จะชี้ไปหาไฟล์ที่เราต้องการ นักศึกษาจะตั้งว่าอะไรก็ได้ • fopen คือ คำสั่งสำหรับเปิดไฟล์ • file nameคือ ระบุชื่อไฟล์พร้อมนามสกุล ที่ต้องการให้ไปเปิด • modeคือ โหมดในการเปิด เนื่องจากในภาษาซีต้องระบุ ด้วยว่าจะให้เปิดเพื่ออะไร เช่น เปิดเพื่ออ่าน, เขียน, เขียนต่อท้าย เป็นต้น

  21. Mode ในการเปิดไฟล์

  22. Mode ในการเปิดไฟล์ • สำหรับการทำงานกับ Text File เราต้องใส่อักษร “t” เพิ่มเข้าไปใน mode ด้วย (rt, w+t เป็นต้น) • สำหรับการทำงานกับ Binary File เราต้องใส่อักษร “b” เพิ่มเข้าไปใน mode ด้วย (wb, a+b เป็นต้น)

  23. การปิดไฟล์ • ใช้คำสั่ง fclose เมื่อเราใช้งานไฟล์เสร็จ หรือต้องการเปลี่ยน mode fclose(fp); • fcloseคือ คำสั่งสำหรับปิดไฟล์ • fp คือ ชื่อตัวแปร pointer ที่จะชี้ไปหาไฟล์นั้น ๆ

  24. ตรวจสอบว่ายังมีข้อมูลเหลืออยู่ในไฟล์หรือไม่ feof(fp); • feof คือ คำสั่งตรวจสอบว่ายังมีข้อมูลอยู่ในไฟล์อีกหรือไม่ • fp คือ ชื่อตัวแปร pointer ที่จะชี้ไปหาไฟล์นั้น ๆ

  25. การอ่านข้อมูลจาก Text File • fscanf คล้าย ๆ กับคำสั่ง scanf ที่ทำงานกับ Memory ซึ่งเวลาโปรแกรมทำงาน โปรแกรมก็ยังคงต้องอ่านข้อมูลเข้าไปเก็บใน Memory เช่นเดิม ดังนั้น เมื่อเราใช้คำสั่งอ่านข้อมูลจากไฟล์ จึงต้องมีตัวแปรมารอรับ โดยมีรูปแบบการเขียนคำสั่งคือ fscanf (fp, "%s", fname);

  26. การอ่านข้อมูลจาก Text File • fscanfคือ ที่ใช้อ่านข้อมูลขึ้นมาจากไฟล์ • fp คือ ชื่อตัวแปร pointer ที่จะชี้ไปหาไฟล์นั้น ๆ • fnameคือ ชื่อตัวแปร ที่เราจะเอาไว้เก็บค่า String โดยจะเก็บ String ไปเรื่อย ๆ จนกว่าจะเจอช่องว่าง (space) • lnameคือ ชื่อตัวแปร ที่เราจะเอาไว้เก็บค่า String ต่อมาที่เจอ fscanf (fp, "%s %s", fname, lname);

  27. การอ่านข้อมูลจาก Text File Computer science • คำว่า Computer จะถูกเอาไปเก็บในตัวแปร fname • คำว่า science จะถูกเอาไปเก็บในตัวแปร lname สำหรับการอ่านข้อมูลประเภทตัวเลขขึ้นมาคำนวณ ให้อ่านขึ้นมาโดยมองเป็น String ก่อนทั้งหมด เมื่อข้อมูลอยู่ใน Memory แล้วจึงค่อยเปลี่ยนให้มูลให้เป็น int, float หรืออื่น ๆ เพื่อนำไปใช้ต่อไป

  28. การเขียนข้อมูลลง Text File • fprintfคือ ที่ใช้เขียนข้อมูลลงไฟล์ • fp คือ ชื่อตัวแปร pointer ที่จะชี้ไปหาไฟล์นั้น ๆ • nameคือ ชื่อตัวแปร ที่เก็บ String ที่เราต้องการจะเขียนลงไฟล์ • ageคือ ชื่อตัวแปร ที่เก็บค่าจำนวนเต็ม ที่เราต้องการจะเขียนลงไฟล์ fprintf (fp, "%s %d", name, age);

  29. การเขียนข้อมูลลง Text File • ตัวอย่าง char name = “Teera”; int age = 30; fprintf (fp, "%s %d", name, age); fprintf (fp, "%s\t%d", name, age); Teera 30 Teera 30

  30. ตัวอย่าง #include<stdio.h> main() { FILE *fp; //ประกาศตัวแปรชื่อ fp เป็น pointer ชีไปหาไฟล์ fp = fopen("data.txt","wt"); //สั่งสร้างไฟล์ใหม่ ชื่อ data.txt แล้วเอา fp ไปชี้ไว้ fclose(fp); //สั่งปิดไฟล์ ที่ fp มันชี้อยู่ }

  31. ตัวอย่าง

  32. ตัวอย่าง

More Related