1 / 57

Lecture 8 Array and Struct ( ตัวแปรชุด และ ข้อมูลแบบโครงสร้าง)

Lecture 8 Array and Struct ( ตัวแปรชุด และ ข้อมูลแบบโครงสร้าง). OBJECTIVE 1. ทราบการกำหนดตัวแปรอาร์เรย์ (Define Array Variable) 2. ทราบถึงการนำไปใช้งาน 3. สามารถนำตัวแปรแบบอาร์เรย์ไปประยุกต์ใช้งานได้ 4. ทราบถึงการกำหนดตัวแปรแบบโครงสร้าง. อาร์เรย์ (Array) คืออะไร

truly
Download Presentation

Lecture 8 Array and Struct ( ตัวแปรชุด และ ข้อมูลแบบโครงสร้าง)

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. Lecture 8 Array and Struct (ตัวแปรชุด และ ข้อมูลแบบโครงสร้าง)

  2. OBJECTIVE 1. ทราบการกำหนดตัวแปรอาร์เรย์(Define Array Variable) 2. ทราบถึงการนำไปใช้งาน 3. สามารถนำตัวแปรแบบอาร์เรย์ไปประยุกต์ใช้งานได้ 4. ทราบถึงการกำหนดตัวแปรแบบโครงสร้าง

  3. อาร์เรย์(Array)คืออะไร ในการเขียนโปรแกรม ข้อมูล ที่มีลักษณะเหมือนๆ กัน ควรที่จะมีชื่อตัวแปรที่เหมือนกัน เช่น ข้อมูลอายุของนักศึกษาห้อง TM1 เรากำหนดให้เป็นตัวแปรชื่อ OldTm1 จะสังเกตว่าตัวแปรชื่อOldtm1 จะมีข้อมูลภายในทั้งหมดก็คืออายุของนักศึกษาห้อง TM1 ดังนั้นข้อมูลที่อยู่ภายในจะมีตัวเลขทั้งหมด 20 ข้อมูล ถ้าเป็นข้อมูลชื่อนักศึกษาระดับ ป.ตรี ภายในสถาบันก็จะมีข้อมูล 631 คน เป็นชนิดข้อความ เป็นต้น ถ้าเป็นข้อมูลระดับคะแนนนักศึกษา TM1 ก็จะมีข้อมูล 20 ค่า เป็นชนิดตัวอักษร เป็นต้น (ลองดูหน้าถัดไปซิ) เราเรียกตัวแปรดังกล่าวข้องต้นว่า”อาร์เรย์”ซึ่งก็คือตัวแปรเพียงตัวเดียวแต่เก็บค่าได้หลายค่า ประโยชน์ของอาร์เรย์ 1. ใช้ตัวแปรเพียงชื่อเดียวแต่จำนวนสมาชิกมากกว่า 1 2. คิดเอาเองครับ...

  4. ชื่อตัวแปร [จำนวนสมาชิก] 0 1 2 3 4 ... 19 GradeTM1[20]; ข้อมูลภายใน ตัวแปร ตัวแปรเดียวแต่เก็บได้หลายข้อมูล

  5. RESERVED RESERVED RESERVED RESERVED RESERVED #define MAXC 5 char t[MAXC]; • การกำหนดตัวแปรอาร์เรย์ไว้เครื่องจะทำการจองหน่วยความจำไว้เพื่อเก็บค่า

  6. RESERVED RESERVED RESERVED RESERVED RESERVED #define MAXC 5 char t[MAXC]; t[0] t[1] • Arrays จะชี้เริ่มต้นที่ ศูนย์. • t[2]คือสมาชิกลำดับที่สาม( thirdelement of the arrayt.) t[2] t[3] t[4]

  7. 8.1วิธีการกำหนดตัวแปรแบบอาร์เรย์8.1วิธีการกำหนดตัวแปรแบบอาร์เรย์ ชนิดตัวแปร ชื่อตัวแปร[จำนวนสมาชิก] ตัวอย่างการกำหนด int oldTM1[20]; char GradTM1[20]; จากด้านบนตัวแปร oldTM1 จะมีจำนวนสมาชิก 20 ข้อมูล 0 1 2 3 4 ... 19 oldTM1[20];

  8. ตัวอย่างการกำหนดตัวแปรอาร์เรย์(ต่อ)ตัวอย่างการกำหนดตัวแปรอาร์เรย์(ต่อ) void main() { const int size=4; int a[size]; } ลักษณะนี้ตัวแปรจะได้เป็น a[4] เก็บค่าจำนวนเต็ม void main() { char a[10]; } ลักษณะนี้ตัวแปรจะได้เป็น a[10] เก็บค่าตัวอักษร 10 ตัว (หรือ 1 ข้อความมีค่าไม่เกิน 10 ตัว)

  9. 8.2 การกำหนดค่าเริ่มต้นให้อาร์เรย์ เราสามารถกำหนดค่าเริ่มต้นให้อาร์เรย์ได้โดยมีตัวอย่างดังนี้ #include <iostream.h> void main() { int a[4]={1,2,3,4}; } จากด้านข้างค่า a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 void main() { int a[]={1,2,3,4}; } จะได้ผลเหมือนกับด้านบน โดยที่complier จะทำการจองหน่วยความจำไว้จำนวน 4 ค่า

  10. การกำหนดค่าเริ่มต้นให้อาร์เรย์แบบหลายมิติการกำหนดค่าเริ่มต้นให้อาร์เรย์แบบหลายมิติ เราสามารถกำหนดค่าเริ่มต้นให้อาร์เรย์ได้โดยมีตัวอย่างดังนี้ #include <iostream.h> void main() { int a[2][4]={{1,2,3,4},{5,6,7,8}}; } จากด้านบนค่า a[0][0] = 1 , a[0][1] = 2 , a[0][2] = 3 , a[0][3] = 4 a[1][0] = 5 , a[1][1] = 6 , a[1][2] = 7 , a[1][3] = 8

  11. การกำหนดค่าเริ่มต้นให้อาร์เรย์การกำหนดค่าเริ่มต้นให้อาร์เรย์ เราสามารถกำหนดค่าเริ่มต้นให้อาร์เรย์ได้โดยมีตัวอย่างดังนี้ #include <iostream.h> void main() { char A[10]={‘S’,’o’,’m’,’p’,’o’,’n’,’g’}; } จากด้านบนค่า A[0] = S , A[1] = o , A[2] = m , A[3] = p A[4] = o , A[5] = n , A[6] = g , A[7] = ‘’ A[8] = ‘’, A[9] = ‘’

  12. A S o m p o n g \o A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] การกำหนดค่าเริ่มต้นให้อาร์เรย์ เราสามารถกำหนดค่าเริ่มต้นให้อาร์เรย์ได้โดยมีตัวอย่างดังนี้ #include <iostream.h> void main() { char A[]=“Sompong”; } คอมไพเลอร์จะจองหน่วยความจำให้อัตโนมัติและจะมี \o ต่อท้ายเสมอ แสดงการสิ้นสุดข้อความ \o

  13. A S o m p o n g \o A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] การกำหนดแบบนี้ไม่ได้น่ะครับ เพราะว่า การใช้เครื่องหมาย “ “ จะมี \o ต่อท้ายของ array เสมอ #include <iostream.h> void main() { char A[7]=“Sompong”; } คอมไพเลอร์จะจองหน่วยความจำให้อัตโนมัติและจะมี \o ต่อท้ายเสมอ แสดงการสิ้นสุดข้อความ \o

  14. A S o m p o n g \o A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] แบบนี้กำหนดได้ครับ จองหน่วยความจำไว้ 8 บล็อก ไม่ได้ก็ให้มันรู้ไป!!! #include <iostream.h> void main() { char A[8]=“Sompong”; } แสดงการสิ้นสุดข้อความ \o

  15. A S o m p o n g \o A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] แบบนี้กำหนดก็เหมือนกันน่ะครับ กำหนดได้เยอะแยะ ไปหมด เลือกตามที่เราถนัดแล้วกัน #include <iostream.h> void main() { char A[8]={“Sompong”}; } แสดงการสิ้นสุดข้อความ \o

  16. A S o m p o n g A[0] A[1] A[2] A[3] A[4] A[5] A[6] แบบนี้ก็ได้ครับ ถ้าอยากจองหน่วยความจำไว้ 7 บล็อก เท่าเดิม แต่ต้องเป็นตัวอักษร น่ะ #include <iostream.h> void main() { char A[7]={‘S’,’o’,’m’,’p’,’o’,’n’,’g’}; }

  17. แบบ float ก็ได้ครับ เดี๋ยวจะหาว่าไม่พูดถึง !!! #include <iostream.h> void main() { floatA[3]={10.12 ,5.1214 , -14.121 }; } A A[0] A[1] A[2]

  18. แบบdouble ก็ได้ครับ เพราะเก็บค่าแบบจำนวนจริงได้ เดี๋ยวจะหาว่าไม่พูดถึง !!! แต่ออกจะเวอร์ไปนิดนึง ตรงที่ทศนิยมไม่กี่ตำแหน่ง แต่ใช้ double ซึ่งใช้หน่วยความจำ 8 byte ในการเก็บข้อมูล ขณะที่ floatใช้เพียง 4 byte ให้การเก็บข้อมูล ถ้าทศนิยมเยอะๆ ก็ว่าไปอย่าง!!!!! #include <iostream.h> void main() { doubleA[3]={10.12 ,5.1214 , -14.121 }; } 4 byte 4 byte 4 byte A A[0] A[1] A[2]

  19. ปัญหาคืออะไร ????? แล้วเราจะมีวิธีการอย่างไรในการแสดงค่า ที่อยู่ในตัวแปรแบบอาร์เรย์ได้อย่างไร น่ะ ????

  20. การสั่งให้แสดงค่าในกรณีที่ไม่ได้กำหนดค่าเริ่มต้นให้อาร์เรย์การสั่งให้แสดงค่าในกรณีที่ไม่ได้กำหนดค่าเริ่มต้นให้อาร์เรย์ #include <iostream.h> int main() { double a[4]; cout << a[0] << a[1] << a[2] << a[3]; return 0; } ค่าที่แสดงจะเป็นค่าที่ไม่ถูกต้อง เพราะ Array ไม่ได้ถูกกำหนดค่าไว้ก่อน 555!!!!

  21. การสั่งให้แสดงค่าในอาร์เรย์การสั่งให้แสดงค่าในอาร์เรย์ #include <iostream.h> int main() { float a[4]={ 1.11 , 2 , 0.5 , 8.11 }; cout << a[0] << a[1] << a[2] << a[3]; return 0; } กำหนดค่าไว้ก่อนก็เรียบร้อย แต่การแสดงค่า ไม่ค่อยจะ อินเตอร์!!!

  22. การสั่งให้แสดงค่าในอาร์เรย์การสั่งให้แสดงค่าในอาร์เรย์ #include <iostream.h> int main() { double a[4]={ 1 , 2 , 0.5 , 8.11 }; for(int i ; i<4 ; i++) { cout << a[i] <<endl ; } return 0; } ระวังนิดน่ะครับ i<4 ไม่ใช่ i <=4 ถ้าพิมพ์ i<=4 มันจะแสดงค่า a[4] ออกมาด้วยน่ะครับ แต่ไม่รู้ว่าเป็นค่าเท่าไร เพราะขอบเขตอาร์เรย์ที่เรากำหนดมีค่าสูงสุดถึง a[3] เท่านั้นภาษาC/C++ ไม่เช็คให้เราน่ะครับ

  23. ปัญหาต่อไปคืออะไร ????? แล้วเราจะมีวิธีการอย่างไรในการนำค่าเข้าไปเก็บไว้ในอาร์เรย์ได้อย่างไร น่ะ ????

  24. การกำหนดค่าให้อาร์เรย์การกำหนดค่าให้อาร์เรย์ #include <iostream.h> void main() { float a[3]; a[0] = 12.1; a[1] = 0.00011; a[2] = -12.1; cout << a[0] << a[1] << a[2] << endl; } ลองดูแบบกำหนดตรงๆ !!!

  25. การกำหนดค่าให้อาร์เรย์การกำหนดค่าให้อาร์เรย์ #include <iostream.h> void main() { char name[10]; cin >> name; cout <<“Your name is : ” << name << endl; } ลองดูแบบกำหนดโดยใช้ cin เข้าช่วย แต่ อย่าพิมพ์เกิน 10 ตัวน่ะครับเพราะเราจองไว้แค่ 10 (ไม่เชื่อก็ลองพิมพ์ดูน่ะครับ)

  26. 8.3 ฟังก์ชันที่ใช้จัดการ string • gets() รับสตริงจากคีย์บอรด์ (อยู่ใน library stdio.h) • strcpy() ก๊อปปี้สตริง (อยู่ใน library string.h) • strcat() รวมสตริงทั้งสองเข้าด้วยกัน (อยู่ใน library string.h) • strlen() ให้หาค่าความยาวของสตริง (อยู่ใน library string.h) • strcmp() เปรียบเทียบลำดับของสตริง (อยู่ใน library string.h)

  27. ตัวอย่างการใช้งาน gets() รับข้อความ • #include <iostream.h> • #include <stdio.h> • void main( void ) • { • char line[81]; • cout<< "Input a string: "; • gets( line ); • cout<<"The line entered was: “<<line; • } • Output • Input a string: Hello! • The line entered was: Hello! ข้อความที่พิมพ์เข้าไปจะถูกแสดงออกมา

  28. ตัวอย่างการใช้งาน strcpy() และ strcat() • #include <iostream.h> • #include <stdio.h> • #include <string.h> • void main( void ) • { • char string[80]; • strcpy( string, "Hello world from " ); • strcat( string, "strcpy " ); • strcat( string, "and " ); • strcat( string, "strcat!" ); • printf( "String = %s\n", string ); • } • Output • String = Hello world from strcpy and strcat! เป็นลักษณะการ ก๊อปปี้สตริง เป็นลักษณะการ รวมสตริง เดิม เข้ากับสตริงใหม่ และสตริงใหม่จะต่อท้ายไปเรื่อยๆ

  29. ตัวอย่างการใช้งาน strlen() • #include <string.h> • #include <stdio.h> • #include <conio.h> • void main( void ) • { • char buffer[61] = "How long am I?"; • int len; • len = strlen( buffer ); • printf( "'%s' is %d characters long\n", buffer, len ); • } • Output • 'How long am I?' is 14 characters long ตัวอักษรยาว 14 ตัว เป็นลักษณะการ หาความยาวของสตริง ช่องว่างก็มองเป็นตัวอักษรเหมือนกัน

  30. ตัวอย่างการใช้งาน strcmp() #include <string.h> #include <stdio.h> #include <conio.h> char string1[] = “Hello"; char string2[] = “hello"; void main( void ) { char tmp[20]; int result; /* Case sensitive */ printf( "Compare strings:\n\t%s\n\t%s\n\n", string1, string2 ); result = strcmp( string1, string2 ); if( result > 0 ) strcpy( tmp, "greater than" ); elseif( result < 0 ) strcpy( tmp, "less than" ); else strcpy( tmp, "equal to" ); printf( "\tstrcmp: string 1 is %s string 2\n", tmp ); } เป็นลักษณะการ เปรียบเทียบ สตริง ตัวอักษร เล็กใหญ่มีผล ตามตาราง ASCII

  31. ผลที่ได้จากการเปรียบเทียบ strcmp() • result = strcmp( string1, string2 ); • กรณี • string1<string2 ค่าส่งกลับคือ <0 • string1=string2 ค่าส่งกลับคือ =0 • string1>string2 ค่าส่งกลับคือ >0

  32. ตัวอย่างการใช้งาน _stricmp() #include <string.h> #include <stdio.h> #include <conio.h> char string1[] = “Hello"; char string2[] = “hello"; void main( void ) { char tmp[20]; int result; /* Case sensitive */ printf( "Compare strings:\n\t%s\n\t%s\n\n", string1, string2 ); result = _stricmp( string1, string2 ); if( result > 0 ) strcpy( tmp, "greater than" ); elseif( result < 0 ) strcpy( tmp, "less than" ); else strcpy( tmp, "equal to" ); printf( "\tstrcmp: String 1 is %s string 2\n", tmp ); } เป็นลักษณะการ เปรียบเทียบ สตริง ตัวอักษร เล็กใหญ่ไม่มีผล

  33. 8.4 การส่งค่า Array ไปยังฟังก์ชัน ตัวอย่าง #include <iostream.h> #include <math.h> int cube(int x[]); //declare function int main(void) { int a[]={1,2,3}; int ans; ans=cube(a); cout<<"Result is "<<ans<<endl; return 0; } int cube(int x[]) { int result; //local variable result = x[0]+x[1]+x[2]; return result; }

  34. สงสัยไหมน่ะ ????? การส่งค่าเข้าในฟังก์ชันของตัวแปรแบบ array เป็นแบบ Pass by value(ส่งค่าไปให้)หรือ Pass by reference(ส่งค่าอ้างอิงไปให้) 2แบบนี้...ถ้าลืมแล้วก็กลับไปดู Lecture 7 ครับ

  35. ตัวอย่าง การส่งผ่านตัวแปร array ไปให้ฟังก์ชัน #include <iostream.h> #include <math.h> void cube(int x[]); //declare function int main(void) { int a[]={1,2,3}; int ans; cout<<"Result is "<<a[0]<<a[1]<<a[2]<<endl; ans=cube(a); cout<<"Result is "<<a[0]<<a[1]<<a[2]<<endl; return 0; } void cube(int x[]) { x[0]=4; } ทำตัวอย่างนี้แล้วตอบด้วยน่ะครับว่าเป็นการส่งแบบไหน Pass by value(ส่งค่าไปให้)หรือ Pass by reference(ส่งค่าอ้างอิงไปให้) 2แบบนี้...ถ้าลืมแล้วก็กลับไปดู Lecture 7 ครับ

  36. สตรัค(Struct)คืออะไร สตรัคเจอร์ หรือกลุ่มข้อมูลชนิดโครงสร้าง คือกลุ่มของข้อมูลที่จัดเข้ารวมเป็นกลุ่มเดียวกันโดยที่ภายในกลุ่มข้อมูลนั้นมีข้อมูลชนิดเดียวกันหรืออาจจะต่างชนิดกันก็ได้ นักศึกษาลองคิดดูน่ะครับว่าภายในสภาบันของเรานั้นมีอะไรอยู่บ้าง เท่าที่คิดได้น่ะครับมี นักศึกษา ป.ตรี,ป.โท,ป.เอก เจ้าหน้าที่,ยาม,ฯลฯ จะเห็นว่าข้อมูลทั้งหมดนั้นเป็นข้อมูลต่างชนิดกัน แต่มีสิ่งที่เหมือนกันก็คือ อยู่ภายในสถาบันเดียวกัน ข้อมูลแบบโครงสร้างก็เหมือนกันน่ะครับ เราพยายามที่จะจัดข้อมูลจำนวนมากๆ และแบ่งข้อมูลให้อยู่เป็นกลุ่มๆ ประโยชน์ของสตรัค 1. จัดกลุ่มของตัวแปรไว้ให้อยู่เป็นพวกๆ เดียวกัน 2. คิดเอาเองน่ะว่ามีประโยชน์อย่างไร

  37. นักศึกษาลองมองดูซิว่า ภายในตัวเรา สามารถที่จะจัดข้อมูลให้เป็นแบบโครงสร้างได้ไหมน่ะครับ

  38. อายุ เพศ ส่วนสูง เบอร์โทร ฯลฯ ข้อมูลทั้งหมดนี้ก็คือตัวเรานั้นเอง!!! ซึ่งโครงสร้างข้อมูลจะช่วยในการห่อหุ้มข้อมูล ที่แต่ต่างไว้ภายใต้ชื่อชนิดเดียวกัน

  39. วิธีการกำหนด struct structชื่อ { ตัวแปร ตัวแปร }ชื่อObject; เช่น struct children{ int age; char sex; char tel[9]; int height; }Sompong;

  40. ตัวอย่างการใช้งาน struct struct children{ int age; char sex; char tel[9]; int height; }Sompong; void main(void) { cin >> Sompong.age; cout << Sompong.age; } Sompong เป็น Object ของ struct ชื่อ Children เมื่อเราต้องการเข้าถึงข้อมูล ภายใน struct childern จะต้องเข้าถึงผ่าน Object ของ struct การเข้าถึงข้อมูลจะ ใช้ จุด คั่น

  41. รูปแบบ Memory Map ของ Object struct children{ int age; char sex; char tel[4]; int hei; }Sompong; Sompong เป็น Object ของ struct ชื่อ Children เมื่อเราต้องการเข้าถึงข้อมูล ภายใน struct childern จะต้องเข้าถึงผ่าน Object ของ struct children Somong hei tel hei age age sex tel tel tel

  42. หรืออาจจะใช้วิธีการกำหนด struct แบบนี้ก็ได้ แล้วค่อยไปประกาศ Object ทีหลัง structชื่อ { ตัวแปร ตัวแปร }; เช่น struct children{ int age; char sex; char tel[9]; int height; };

  43. ตัวอย่างการใช้งาน struct struct children{ int age; char sex; char tel[9]; int height; }; void main(void) { children Sompong; cin >> Sompong.age; cout << Sompong.age; } ประกาศ Object Sompong ภายในฟังก์ชันเมน

  44. วิธีการกำหนด class classชื่อ { ตัวแปร ตัวแปร }; เช่น class children{ int age; char sex; char tel[9]; int height; };

  45. ตัวอย่างการใช้งาน class class children{ int age; char sex; char tel[9]; int height; }; void main(void) { children Sompong; cin >> Sompong.age; cout << Sompong.age; } ลองเขียนดูแล้ว Run ดูน่ะครับ ว่าผลเป็นยังงัย !!

  46. ตัวอย่างการใช้งาน class ต้องแก้เป็นแบบนี้ เราว่า struct จะ default ไว้เป็นแบบ Private class children{ public: int age; char sex; char tel[9]; int height; }; void main(void) { children Sompong; cin >> Sompong.age; cout << Sompong.age; }

  47. ตาราง แอสกี้(ASCII)

  48. ตาราง แอสกี้(ASCII) ส่วนขยาย

  49. THE END

More Related