34
ททททททททททท Array ททท struct pointer ททททททททททททททททททททท ทททททททททท ทททท COSC2202 ททททททททททททททท (Data Structure)

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

ทบทวนเรื่�อง Array และ struct pointer การื่เขี�ยนโปรื่แกรื่มติ�ดติ�อแฟ้�ม

ขี�อม�ล

ว�ชา COSC2202 โครื่งสรื่�างขี�อม�ล (Data Structure)

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

ทบทวนเรื่��อง Array Array เป"นโครื่งสรื่�างขี�อม�ลท�ปรื่ะกอบด�วยกล#�มขีอง

ติ$วแปรื่ท�เป"นค�าอะไรื่ก&ได� แติ�ติ�องม�ชน�ดเด�ยวก$น ขี�อม�ลแติ�ละติ$วใน Array เรื่�ยกว�าสมาช�กขีอง array การื่อ�างถึ)งจะเรื่�ยกช�อติ$วแปรื่ array แล�วติามด�วยหมายเลขีด$ชน� (index ) ขีองสมาช�กท�ติ�องการื่อ�างถึ)ง โดยสมาช�กติ$วแรื่กจะแทนด�วยล,าด$บหมายเลขี 0 สมาช�กติ$วท�2 แทนด�วยล,าด$บหมายเลขี 1 ..จนถึ)งล,าด$บท� n

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

ทบทวนเรื่��อง Arrayติ$วอยาง char a[4]; int num[10]; int a[2][3];

ขีนาดขีอง subscript = upper bound – lower bound + 1

ขีนาดขีองอะเรื่ย = ผลค�ณขีองขีนาดขีอง subscript แติละติ$ว

สมการื่ค,านวณหาติ,าแหน�งขี�อม�ล i -0Loc (A[i]) = L + (i L)C

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

Pointers และ Arrays ของ Pointers Pointer เป"นติ$วแปรื่ชน�ดหน)งท�ท,าหน�าท�เก&บติ,าแหน�งท�อย��

(Address ) ขีองติ$วแปรื่ท�อย��ในหน�วยความจ,า รื่�ปแบบ

   - *type variable name

type หมายถึ)ง   ชน�ดขีองติ$วแปรื่ *       หมายถึ)ง   เป"นเครื่�องหมายท�แสดงว�า ติ$วแปรื่ท�ติามหล$งเครื่�องหมาย

น�2เป"นติ$วแปรื่พอยน4เติอรื่4

variable-name    เป"นช�อขีองติ$วแปรื่ท�ติ�องการื่ปรื่ะกาศว�าเป"นชน�ดพอยน4เติอรื่4

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

Pointers และ Arrays ของ Pointers

char  * prt;                                หมายความว�า   ปรื่ะกาศว�าติ$วแปรื่ prt เป"นติ$วแปรื่พอยน4เติอรื่4ท�ใช�เก&บติ,าแหน�งเรื่�มติ�นท�จะเก&บ character            

int  * a;                       หมายความว�า  ปรื่ะกาศว�าติ$วแปรื่ a เป"นติ$วแปรื่พอยน4เติอรื่4ท�ใช�เก&บติ,าแหน�งเรื่�มติ�นท�จะใช�เก&บ integer

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

Pointers และ Arrays ของ Pointers

เครื่�องหมาย & เป"นเครื่�องหมายท�ใช�เม�อติ�องการื่ให�เอาค�าติ,าแหน�งท�อย��ขีองติ$วแปรื่ท�เก&บไว�ในหน�วยความจ,าออกมาใช� เช�น x=10 (ก,าหนดให�ติ$วแปรื่ x ซึ่)งอย��ท�ติ,าแหน�ง 1000 ม�ค�า 10 เก&บอย��)

  int  * y , x=10;   y = &x;

ติ$วแปรื่ y ซึ่)งปรื่ะกาศเป"นติ$วแปรื่พอยน4เติอรื่4จะเก&บค�า 1000 ซึ่)งเป"นติ,าแหน�งท�อย��

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

ติ$วอย�าง Pointers และ Arrays ของ Pointers

ค,าส$งท� 1 : int a, *ptr, b, c , *d;

int a, *ptr, b, c , *d; a=25;ptr = &a;

b = a; ค,าส$งท� 2 : a = 25c = *ptr;d = ptr;

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

ติ$วอย�าง 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;

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

ติ$วอย�าง 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;

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

Struct Struct เป"นท�เก&บช#ดขีองขี�อม�ลคล�ายก$บ Array แติ�

ถึ�าเป"น Array น$2น Array ติ$วหน)งสามารื่ถึเก&บขี�อม�ลได�เฉพาะท�เป"นชน�ดเด�ยวก$นเท�าน$2น (Data Type เด�ยวก$น ) แติ�ส,าหรื่$บ Struct ติ$วหน)ง ๆ สามารื่ถึเก&บขี�อม�ลได�หลาย ๆ ชน�ด เช�น int, float, char ด�วยการื่ใช�ช�อติ$วแปรื่เด�ยวก$น ชื่��อชื่��อ สกุ�ลสกุ�ล อายุ�อายุ�เกุรื่ดเฉล��ยุเกุรื่ดเฉล��ยุ

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

Structปรื่ะกาศ Struct โดยใช�ช�อ Struct ว�า data_recใน data_rec ม�ขี�อม�ลเก&บได� 4 fields ได�แก� ติ$วแปรื่ first_name เป"น String ขีนาด 20 ช�อง ติ$วแปรื่ last_name เป"น String ขีนาด 20 ช�อง ติ$วแปรื่ age เป"นชน�ดจ,านวนเติ&ม ติ$วแปรื่ gpa เป"นชน�ดทศน�ยม ปรื่ะกาศ Struct ติ$วน�2 ให�เป"นชน�ดขี�อม�ลใหม�ขีองเรื่าเอง โดยใช�ม$นช�อ

ว�า record ด$งน$2นค,าว�า record น�2 จะเสม�อนว�าม$น ค�อ int ม$นค�อ char ท,านองน$2น (Keyword ในการื่ปรื่ะกาศชน�ดขี�อม�ลใหม�ก&ค�อ typedef น$นเอง)

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

Struct การื่ปรื่ะกาศติ$วแปรื่

ส�งท�เรื่าได�ท,าไปค�อการื่สรื่�างชน�ดขี�อม�ลใหม�ขี)2นมา เวลาจะใช�งานม$นก&ติ�องปรื่ะกาศเป"นติ$วแปรื่ก�อน ด$งเช�น record student; หมายความว�า ให�ติ$วแปรื่ช�อ student ม�ชน�ดขี�อม�ล (data type)

เป"นแบบ record ซึ่)งจะเห&นว�าม$นก&คล�ายก$บ int x; น$นเอง การื่อ�างถึ)ง ท,าได�โดยการื่ใช�ช�อติ$วแปรื่ติามด�วยเครื่�องหมายจ#ด แล�วติามด�วยช�อ

field ท�ติ�องการื่ student.first_name;student.last_name;student.age;student.gpa ;

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

Struct

เรื่าสามารื่ถึปรื่ะย#กติ4การื่ใช� Struct เป"น Array of Struct ได�ด�วย ติ$วอย�างเช�น

ชื่��อชื่��อ สกุ�ลสกุ�ล อายุ�อายุ�เกุรื่ดเฉล��ยุเกุรื่ดเฉล��ยุ

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

Struct การื่อ�างถึ)ง ท,าได�โดยใช�ช�อติ$วแปรื่ติาม

ด�วยเครื่�องหมายก�ามป� [] ติามด�วยจ#ด แล�วติามด�วยช�อ Field ท�ติ�องการื่เช�น ชื่��อของแถวบนส�ด คื�อ

student[0].first_nameอายุ�ของแถวต่�อมา คื�อ student[1].last_nameเกุรื่ดเฉล��ยุของแถวส�ดท�ายุ คื�อ student[2].gpa

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

ติ$วอย�าง

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

การื่เขี�ยนโปรื่แกรื่มติ�ดติ�อแฟ้�มขี�อม�ล ท าไมต่�องเข�ยุนโปรื่แกุรื่มต่$ดต่�อแฟ้&มข�อม'ล (File) การื่ใช�ติ$วแปรื่และปรื่ะมวลผลติ$วโปรื่แกรื่มท$2งหมด จะท,างานอย��ใน

หน�วยความจ,า (Memory) เท�าน$2น น$นก&หมายความว�าเม�อโปรื่แกรื่มท,างานเสรื่&จขี�อม�ลติ�าง ๆ ก&จะส�ญหายไป

ถึ�าติ�องการื่ให�ขี�อม�ล (ผลล$พธ์4 ) น$2นย$งคงอย�� เรื่าสามารื่ถึท,าได�โดยใช�หล$กง�าย ๆ ค�อเขี�ยนขี�อม�ลผลล$พธ์4น$2น เก&บเอาไว�ในไฟ้ล4น$นเอง

การื่เขี�ยนโปรื่แกรื่มเพ�อติ�ดติ�อไฟ้ล4 ย$งม�ปรื่ะโยชน4ในกรื่ณ�ท�เรื่าม�ไฟ้ล4ขี�อม�ล input อย��แล�ว ติ�องการื่อ�านม$นขี)2นมาแล�วปรื่ะมวลผล แทนท�จะติ�องมาน$งค�ย4ขี�อม�ลด�วยตินเองมาก ๆ

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

ปรื่ะเภทขีองไฟ้ล4 ส,าหรื่$บไฟ้ล4ขี�อม�ลในภาษาซึ่�ท�ใช�ในการื่ท,างานเพ�อเก&บ

ขี�อม�ลแบ�งออกเป"น 2 ปรื่ะเภทค�อ Text File (Sequential Access) (*)

เป"นไฟ้ล4ขี�อม�ล ท�เก&บพวกขี�อความ (เป=ดอ�านรื่� �เรื่�อง)

Binary File (Random Access) เป"นไฟ้ล4ขี�อม�ล ท�เก&บเป"น Binary (0/1) ด$งน$2นถึ�า

เรื่าใช�โปรื่แกรื่มเช�น Notepad เป=ดก&จะอ�านไม�รื่� �เรื่�อง

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

การื่ติ�ดติ�อไฟ้ล4 รื่'ปแบบกุารื่ปรื่ะกุาศใชื่�งานต่*วแปรื่ส าหรื่*บเรื่��องกุารื่

ต่$ดต่�อไฟ้ล,

FILEFILE เป-นปรื่ะเภทข�อม'ล เป-นปรื่ะเภทข�อม'ล (data type)(data type) ท��ใชื่�งานกุ*บไฟ้ล, คืล�ายุ ๆ ท��ใชื่�งานกุ*บไฟ้ล, คืล�ายุ ๆ กุ*บ กุ*บ int, charint, char

*fp*fp เป-นชื่��อต่*วแปรื่เป-นชื่��อต่*วแปรื่ pointer pointer ท��ใชื่�อ�างอ$งพื้�1นท��กุารื่ท างานท��ใชื่�อ�างอ$งพื้�1นท��กุารื่ท างาน

FILE *fp; FILE *fp;

ในภาษาซี� ต่*วอ*กุษรื่เล4กุ กุ*บ ใหญ่� ม�คืวามหมายุต่�างกุ*น (Case Sensitive) ซี6�ง FILE เป-น keyword ต่�องเข�ยุนด�วยุต่*วพื้$มพื้,ใหญ่�

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

ค,าส$งท�ใช�งานก$บไฟ้ล4ขี�อม�ล กุารื่เป7ดไฟ้ล, กุารื่ป7ดไฟ้ล, กุารื่ต่รื่วจสอบว�าในไฟ้ล,ยุ*งม�ข�อม'ลเหล�ออยุ'�หรื่�อไม� กุารื่อ�านข�อม'ลจากุ Text File กุารื่เข�ยุนข�อม'ลลง Text File

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

การื่เป=ดไฟ้ล4

fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4ท�เรื่าติ�องการื่ น$กศ)กษาจะติ$2งว�าอะไรื่ก&ได�

fopen ค�อ ค,าส$งส,าหรื่$บเป=ดไฟ้ล4 file name ค�อ รื่ะบ#ช�อไฟ้ล4พรื่�อมนามสก#ล ท�ติ�องการื่ให�ไปเป=ด mode ค�อ โหมดในการื่เป=ด เน�องจากในภาษาซึ่�ติ�องรื่ะบ#

ด�วยว�าจะให�เป=ดเพ�ออะไรื่ เช�น เป=ดเพ�ออ�าน , เขี�ยน ,เขี�ยนติ�อท�าย

เป"นติ�น

fp = fopen(“file name”,“mode”); fp = fopen(“file name”,“mode”);

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

Mode ในการื่เป=ดไฟ้ล4ModeMode คื าอธิ$บายุคื าอธิ$บายุ

r เป=ดไฟ้ล4 เพ�ออ�านเท�าน$2น

w เป"นการื่สรื่�างไฟ้ล4ใหม� ถึ�าหากไฟ้ล4น$2นม�อย��แล�วจะถึ�กสรื่�างท$บท$นท� (overwritten)

a การื่เป=ดไฟ้ล4 เพ�อบ$นท)กขี�อม�ลติ�อท�ายขี�อม�ลเด�ม , หรื่�อเป"นการื่สรื่�างไฟ้ล4 ถึ�าไฟ้ล4น$2นย$งไม�ม�อย��

r+ เป=ดไฟ้ล4 เพ�ออ�านและปรื่$บปรื่#งแก�ไขี

w+ เป"นการื่สรื่�างไฟ้ล4ใหม� และบ$นท)กขี�อม�ล ถึ�าหากไฟ้ล4น$2นม�อย��แล�วจะถึ�กสรื่�างท$บท$นท�

a+ การื่เป=ดไฟ้ล4 เพ�อบ$นท)กขี�อม�ลติ�อท�ายขี�อม�ลเด�ม,เป=ดไฟ้ล4 เพ�ออ�านและปรื่$บปรื่#งแก�ไขีขี�อม�ลท�ท�ายส#ดขีองไฟ้ล4,เป"นการื่สรื่�างไฟ้ล4 ถึ�าไฟ้ล4น$2นย$งไม�ม�อย��

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

Mode ในการื่เป=ดไฟ้ล4 ส,าหรื่$บการื่ท,างานก$บ Text File เรื่าติ�องใส�

อ$กษรื่ “t” เพ�มเขี�าไปใน mode ด�วย (rt, w+t เป"นติ�น)

ส,าหรื่$บการื่ท,างานก$บ Binary File เรื่าติ�องใส�อ$กษรื่ “b” เพ�มเขี�าไปใน mode ด�วย (wb, a+b เป"นติ�น)

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

การื่ป=ดไฟ้ล4 ใช�ค,าส$ง fclose เม�อเรื่าใช�งานไฟ้ล4เสรื่&จ หรื่�อ

ติ�องการื่เปล�ยน mode

fclose ค�อ ค,าส$งส,าหรื่$บป=ดไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4

น$2น ๆ

fclose(fp); fclose(fp);

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

ติรื่วจสอบว�าย$งม�ขี�อม�ลเหล�ออย��ในไฟ้ล4หรื่�อไม�

feof ค�อ ค,าส$งติรื่วจสอบว�าย$งม�ขี�อม�ลอย��ในไฟ้ล4อ�กหรื่�อไม�

fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ

feof(fp); feof(fp);

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

การื่อ�านขี�อม�ลจาก Text File fscanf คล�าย ๆ ก$บค,าส$ง scanf ท�ท,างานก$บ

Memory ซึ่)งเวลาโปรื่แกรื่มท,างาน โปรื่แกรื่มก&ย$งคงติ�องอ�านขี�อม�ลเขี�าไปเก&บใน Memory เช�นเด�ม ด$งน$2น เม�อเรื่าใช�ค,าส$งอ�านขี�อม�ลจากไฟ้ล4 จ)งติ�องม�ติ$วแปรื่มารื่อรื่$บ โดยม�รื่�ปแบบการื่เขี�ยนค,าส$งค�อ fscanf (fp, "%s", fname); fscanf (fp, "%s", fname);

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

การื่อ�านขี�อม�ลจาก Text File

fscanf ค�อ ท�ใช�อ�านขี�อม�ลขี)2นมาจากไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ fname ค�อ ช�อติ$วแปรื่ ท�เรื่าจะเอาไว�เก&บค�า String โดยจะเก&บ String

ไปเรื่�อย ๆ จนกว�าจะเจอช�องว�าง (space) lname ค�อ ช�อติ$วแปรื่ ท�เรื่าจะเอาไว�เก&บค�า String ติ�อมาท�เจอ

fscanf (fp, "%s %s", fname, lname); fscanf (fp, "%s %s", fname, lname);

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

การื่อ�านขี�อม�ลจาก Text File

คื าว�า Computer จะถ'กุเอาไปเกุ4บในต่*วแปรื่ fname คื าว�า science จะถ'กุเอาไปเกุ4บในต่*วแปรื่ lname

Computer science Computer science

ส,าหรื่$บการื่อ�านขี�อม�ลปรื่ะเภทติ$วเลขีขี)2นมาค,านวณ ให�อ�านขี)2นมาโดยมองเป"น String ก�อนท$2งหมด เม�อขี�อม�ลอย��ใน Memory แล�วจ)งค�อยเปล�ยนให�ม�ลให�เป"น int, float หรื่�ออ�น ๆ เพ�อน,าไปใช�ติ�อไป

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

การื่เขี�ยนขี�อม�ลลง Text File

fprintf ค�อ ท�ใช�เขี�ยนขี�อม�ลลงไฟ้ล4 fp ค�อ ช�อติ$วแปรื่ pointer ท�จะช�2ไปหาไฟ้ล4น$2น ๆ name ค�อ ช�อติ$วแปรื่ ท�เก&บ String ท�เรื่าติ�องการื่จะเขี�ยนลงไฟ้ล4 age ค�อ ช�อติ$วแปรื่ ท�เก&บค�าจ,านวนเติ&ม ท�เรื่าติ�องการื่จะเขี�ยนลง

ไฟ้ล4

fprintf (fp, "%s %d", name, age); fprintf (fp, "%s %d", name, age);

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

การื่เขี�ยนขี�อม�ลลง Text File ติ$วอย�าง

char name = “Teera”;int age = 30; fprintf (fp, "%s %d", name, age);fprintf (fp, "%s %d", name, age);

fprintf (fp, "%s\t%d", name, age);fprintf (fp, "%s\t%d", name, age);

Teera 30Teera

30

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

ติ$วอย�าง#include<stdio.h>main(){

FILE *fp; //ปรื่ะกาศติ$วแปรื่ช�อ fp เป"น pointer ช�ไปหาไฟ้ล4fp = fopen("data.txt","wt"); //ส$งสรื่�างไฟ้ล4ใหม� ช�อ data.txt แล�วเอา fp ไปช�2ไว�fclose(fp); //ส$งป=ดไฟ้ล4 ท� fp ม$นช�2อย��

}

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

ติ$วอย�าง

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

ติ$วอย�าง