1 / 33

ทบทวน แถวลำดับ และสายอักขระ

ทบทวน แถวลำดับ และสายอักขระ. ที่ อ.บุญทรัพย์ ไวคำ สอนในค่าย 1 วิทยาการคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น. แถวลำดับหรืออาร์เรย์ ( array).

Download Presentation

ทบทวน แถวลำดับ และสายอักขระ

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. ทบทวนแถวลำดับ และสายอักขระ ที่ อ.บุญทรัพย์ ไวคำ สอนในค่าย 1 วิทยาการคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น

  2. แถวลำดับหรืออาร์เรย์ (array) • การเก็บข้อมูลหลายจำนวนที่เป็นระเบียบบนหน่วยความจำของคอมพิวเตอร์สามารถทำได้โดยการกำหนดตัวแปรชนิดพิเศษที่เรียกว่า อาร์เรย์ ที่ครอบคลุมหน่วยความจำหลายตำแหน่ง โดยแต่ละตำแหน่งจะถูกกำกับด้วยหมายเลยของตำแหน่งตั้งแต่ตำแหน่งที่ 0 1 2 3 ...ไปเรื่อยๆจนครบจำนวนตำแหน่งทั้งหมด • ตัวอย่าง ถ้ามีข้อมูลตัวเลขใดๆ 10 20 30 40 50 60 70 80 90 00 เราจำเป็นต้องสร้างตัวแปรที่เป็นชนิด int เพื่อเก็บข้อมูลเหล่า โดยปกติ ตัวแปรหนึ่งสามารถเก็บได้หนึ่งจำนวนเท่านั้น แต่ด้วยตัวแปรแบบอาร์เรย์หนึ่งตัวแปรสามารถเก็บข้อมูลได้หลายจำนวนดังนี้

  3. ตำแหน่ง ต่าข้อมูล การประกาศตัวแปรแถวลำดับ รูปแบบชนิดข้อมูล ชื่อตัวแปร[n]; โดยที่ ชนิดข้อมูล คือชนิดของข้อมูลที่จะทำการเก็บไว้ในตัวแปรแถวลำดับ n คือ จำนวนสมาชิกของตัวแปรแถวลำดับ หรือจำนวนข้อมูลที่ตัวแปรสามารถเก็บได้สุงสุดนั้นเอง ตัวอย่าง int n[10]; char a[20]; float g[5];

  4. การอ้างถึงสมาชิก • รูปแบบชื่อตัวแปร[ตำแหน่งของข้อมูลหรือดรรชณี] โดย ชื่อตัวแปรเป็นตัวแปรที่ประกาศเป็นแถวลำดับ ตำแหน่งของข้อมูล โดยเริ่มที่ตำแหน่งที่ 0 1 2 ...แต่ต้องไม่เกินหรือเท่ากับจำนวนที่ประกาศไว้ ตัวอย่าง int n[5]; n[0] = 0; n[4] = 4;// จะไม่สามารถอ้างถึง n[5] ได้

  5. การใช้งานอาร์เรย์ 1. การประกาศตัวแปร โดยระบุชื่อตัวแปรพร้อมจำนวนข้อมูลที่สามารถเก็บได้สูงสุด int number[10];// number คือซื่อตัวแปร 10 คือจำนวนตำแหน่งเก็บข้อมูล 2. การกำหนดค่าเริ่มต้นให้กับตัวแปรอาร์เรย์ for (i = 0; i < 10; i++) number[i]=0;// 0.0 ถ้าเป็น float หรือ double 3. การใส่คำข้อมูลลงในอาร์เรย์ (สามารถรับค่ามาจาก file หรือจากฟังก์ชันสุ่มค่า) for (i = 0; i < 10; i++) scanf(“%d”,&number[i]);// รับค่าผ่านแป้นพิมพ์

  6. ตัวอย่าง • ตัวอย่าง 5.4 โปรแกรมอ่านข้อมูลเป็นจำนวนเต็ม 10 จำนวน แล้วหาผลรวมของเลขเหล่านั้น int num[10]; • ตัวอย่าง 5.5 โปรแกรมอ่านข้อมูลจำนวนจริง 50 จำนวน หาค่าเฉลี่ย และจำนวนข้อมูลที่มีค่าสูงกว่าค่าเฉลี่ย • ตัวอย่าง 5.7 โปรแกรมอ่านข้อมูลเข้าเป็นคะแนนสอบ ซึ่งเป็นจำนวนจริงแล้วเก็บไว้ในตัวแปรแถวลำดับ score[] อ่านจนกว่าข้อมูลเข้าจะมีค่าน้อยกว่าศูนย์ แล้วพิมพ์จำนวนนักเรียนที่เข้าสอบทั้งหมด ซึ่งมีได้ไม่เกิน 500 คน

  7. ตัวอย่างที่ 5.4 int num[10]; for(i=0;i<10;i++) scanf(“%d”, &num[i]); sum=0; for(i=0;i<10;i++) sum = sum + num[i]; printf(“sum is %d\n”, sum); int suma(int a[], int n) { int sum = a[n]; for(;n>=0;--n) sum = sum + a[n]; return sum; }

  8. ตัวอย่างที่ 5.5 avg = sum/n; k=0; for(i = 0; i < n; i++) if(list[i] > avg) k = k + 1; printf(“number above average is %d”,k);

  9. ตัวแปรแถวลำดับแบบ String • การเก็บข้อมูลแบบสายอักขระ (String) สามารถเก็บเป็นตัวแปรชนิดอาร์เรย์ของชนิดข้อมูลแบบตัวอักษร (char) ที่มีขนาด 1 ไบต์ หรือ 1 ตัวอักษร และปิดท้ายชุดข้อมูลด้วยตัวอักษรพิเศษ ‘\0’ เพื่อบอกจุดสิ้นสุดของสายอักขระ • ตัวอย่าง สายอักขระคำว่า ‘string’ ที่เก็บในหน่วยความจำ ตำแหน่ง ข้อมูล

  10. การประกาศตัวแปรสายอักขระการประกาศตัวแปรสายอักขระ • รูปแบบ char ชื่อตัวแปรลำดับ[n]; • n คือจำนวนตัวอักษรที่ตัวแปรสามารถเก็บได้สูงสุด ส่วนการรับค่าผ่าน scanf() และ แสดงผลผ่าน printf() ให้ใช้ %s ตัวอย่าง char msg[6]; scanf(“%s”,msg); printf(“%s”, msg);

  11. ตัวแปรแถวลำดับสองมิติตัวแปรแถวลำดับสองมิติ • เป็นตัวแปรที่สามารถเก็บข้อมูลได้มากขึ้น โดยเหมาะสำหรับข้อมูลที่สามารถจัดรูปแบบในลักษณะตารางข้อมูล ดังนั้นจึงมีตัวบอกตำแหน่งแถว และตำแหน่งสดมภ์กำกับ การประกาศ ชนิดข้อมูล ชื่อตัวแปร[nrow][ncol]; โดย nrow เป็นจำนวนแถวทั้งหมด ncol เป็นจำนวนสดมภ์ทั้งหมด และ nrow*ncol เป็นจำนวนข้อมูลที่เป็นไปได้ทั้งหมด

  12. ตัวอย่าง อาร์เรย์สองมิติ • float a[3][5]; • เป็นการประกาศตัวแปร a แบบ float ที่มีขนาดข้อมูลเป็นตาราง 3*5 ซึ่งสามารถเก็บข้อมูลสุงสุดได้ 15 ตัว column row

  13. แบบฝึกหัด อาร์เรย์สองมิติ • ตัวอย่าง 5.14 ให้อ่านข้อมูลจำนวนเต็มเก็บไว้ในตัวแปร b[][] ที่มีการจองเนื้อที่ 5 แถว 4 สดมภ์แล้วหาผลรวมของข้อมูลทั้งหมด • ตัวอย่าง 5.15 ให้อ่านคะแนนสอบ 5 ครั้ง ของนักเรียน 10 คน หลังจากนั้นให้หาคะแนนรวมของการสอบทุกครั้งของแต่ละคน แล้วแสดงผล

  14. แบบฝึกหัด อาร์เรย์สองมิติ • ตัวอย่าง 5.16 ให้เขียนโปรแกรมการสำรวจจำนวนคนในแต่ละช่วงอายุของบ้าน 6 หลัง ซึ่งให้แสดงผลดังนี้ ช่วงอายุ 0-5 6-12 13-19 20 ขึ้นไป หลังที่1 - - - - หลังที่2 - - - - . หลังที่6 - - - - รวม - - - -

  15. การบ้าน ข้อ 1 - จงเขียนโปรแกรมที่สามารถรับข้อมูลนำเข้าที่เป็นตัวเลขได้ไม่เกิน 5 จำนวน เพื่อคำนวณหาค่าเฉลี่ย ค่าสูงสุด ค่าต่ำสุด ของข้อมูลนำเข้านั้น โดยเก็บข้อมูลไว้ในแถวลำดับ

  16. การบ้าน ข้อสอง

  17. กำหนดให้ผลจากการรวมอักขระสองตัวเป็นไปตามตาราง ให้เขียนโปรแกรมเพื่อหาผลรวมของสองข้อความดังต่อไปนี้ ข้อ 1 ข้อความที่1: ABCABCABCABCAB ข้อความที่2: ATTACK_AT_DAWN ผล BVWBENACWAFDXP ข้อ 2 ข้อความที่1: SHINESHINES ข้อความที่2: HOW_ARE_YOU ผล AWFNFKMIMTN

  18. ตัวแปรแถวลำดับสามมิติตัวแปรแถวลำดับสามมิติ • เป็นตัวแปรที่สามารถเก็บข้อมูลเป็นชุด โดยเหมาะสำหรับข้อมูลที่สามารถจัดรูปแบบในลักษณะหลายตารางข้อมูล ดังนั้นจึงมีตัวบอก ตำหแหน่งตาราง ตำแหน่งแถว และตำแหน่งสดมภ์กำกับ การประกาศ ชนิดข้อมูล ชื่อตัวแปร[ntab][nrow][ncol]; โดย ntab เป็นจำนวนตารางทั้งหมด nrow เป็นจำนวนแถวทั้งหมด ncol เป็นจำนวนสดมภ์ทั้งหมด และ ntab*nrow*ncol เป็นจำนวนข้อมูลที่เป็นไปได้ทั้งหมด

  19. int t[2][3][4]; เป็นการประกาศตัวแปรแถวลำดับ t ที่มีจำนวน 2 ตาราง และแต่ละตารางมีขนาด 3 แถว 4 สดมภ์ โดยมีตำแหน่งอ้างอิงข้อมูลดังนี้

  20. แบบฝึกหัด อาร์เรย์สามมิติ • ตัวอย่าง 5.18 เขียนโปรแกรมเพื่ออ่านข้อมูลชนิดจำนวนเต็ม แล้วเก็บไว้ในตัวแปร tab[][][] แล้วหาผลรวมของข้อมูลในแถวลำดับทั้งหมด

  21. การกำหนดค่าเริ่มต้นแก่แถวลำดับการกำหนดค่าเริ่มต้นแก่แถวลำดับ • การกำหนดค่าเริ่มต้นให้กับแถวลำดับ สามารถทำได้หลายวิธี ซึ่งขึ้นอยู่กับวัตถุประสงค์ ได้แก่ การกำหนดค่าเริ่มต้นเมื่อประกาศตัวแปร การกำหนดค่าเริ่มต้นโดยอ่านข้อมูลจากแฟ้ม หรือการกำหนดค่าเริ่มด้วยผ่านแป้นพิมพ์ รูปแบบการกำหนดค่าผ่านการประกาศตัวแปร ชนิดข้อมูล ชื่อตัวแปร[][].. = {{ค่าเริ่มต้น},{ค่าเริ่มต้น},..}; หมายเหตุ ค่าเริ่มต้นแต่ละตัวขั้นด้วย , และค่าเริ่มอาจจะมีน้อยกว่าจำนวนของข้อมูลในตัวแปรแถวลำดับก็ได้

  22. ตัวอย่าง • int num[10] = {0,1,2,3,4,5,6,7,8,9}; ดังนั้น num[0] มีค่า 0 num[1] มีค่า 1 num[2] มีค่า 2 num[3] มีค่า 3 num[4] มีค่า 4 num[5] มีค่า 5 ... • int num[10] = {0,1,2,3}; ดังนั้น num[0] มีค่า 0 num[1] มีค่า 1 num[2] มีค่า 2 num[3] มีค่า 3 num[4] มีค่า 0 num[5] มีค่า 0 ...

  23. ตัวอย่าง ให้เขียนโปรแกรมเพื่อกำหนดค่าเริ่มต้นให้กับตัวแปรแถวลำดับ แล้วให้แสดงผลออกทางหน้าจอ 1. char fname[10] = {‘s’,’w’,’e’,’e’,’t’,’\0’}; char last[10] = “Honey”; char paint[2][5] = {“red”, “pink”}; 2. int guess[] = {1,2,5,7,9}; //ตำแหน่ง 0-9 int emp[3][5] = {{10,20,30,40,50}, // แถว 0 {11,21,31,41,51}, // แถว 1 {12,22,32,42,52}}; // แถว 2

  24. ฟังก์ชันเพื่อทำงานกับสายอักขระฟังก์ชันเพื่อทำงานกับสายอักขระ • ฟังก์ชันของภาษาซีที่ใช้กับตัวแปรแบบสายอักขระจะอยู่ใน string.h ดังนั้นเมื่อต้องถูกเรียกใช้งานเราต้องประกาศการเรียกใช้ฟังก์ชันเหล่านี้ โดย #include <string.h> ตัวอย่าง strcat(), strcmp(), strcpy(), strlen()

  25. strcat() • strcat() – ใช้สำหรับนำสายอักขระ 2 สายมีต่อกัน รูปแบบstrcat(สายอักขระ1, สายอักขระ2); โดยที่ สายอักขระ1 ตัวแปรแถวลำดับแรก และเป็นที่เก็บผลลัพธ์ สายอักขระ2 ตัวแปรที่สองที่นำมาต่อ ตัวอย่าง char str1[21]=“What school do ”; char str2[] = “you go to?”; strcat(str1, str2); // str1  “What school do you go to?”

  26. strcmp() • strcmp() – ใช้เปรียบเทียบสายอักขระ 2 สาย ว่าเท่ากัน หรือไม่เท่ากัน โดยถ้าสายอักขระ 2 สายเท่ากัน จะให้ผลเป็น 0 ถ้าสายอักขระแรกมากกว่า จะให้ผลมากกว่า 0 และถ้าสายอักขระแรกน้อยกว่า จะให้ผลเป็นลบ รูปแบบ strcmp(str1, str2); ตัวอย่าง char str1 = “name1”; strcmp(str1, “name2”); // -1 strcmp(str1, “name1); // 0

  27. strcpy() • strcpy() – ใช้คัดลอกสายอักขระไปสู่ตัวแปร รูปแบบstrcpy(สายอักขระปลายทาง, สายอักขระต้นทาง); โดย สายอักขระปลายทาง คือ ตัวแปรแถวลำดับเพื่อเก็บผลลัพธ์ สายอักขระต้นทาง เป็นข้อมูลที่ต้องการคัดลอก ตัวอย่าง char str[20]; strcpy(str, “What’s your name?”); // str  What’s your name?

  28. strlen() • strlen() – ใช้นับจำนวนอักขระทั้งหมดในสายอักขระ • รูปแบบstrlen(str); ตัวอย่าง char str[10] = “01234”; strlen(str); //  5 strlen(“”); //  0

  29. แบบฝึกหัด ให้เขียนโปรแกรมเพื่อ 1. หาความยาวของสายอักขระ แล้วต่อสายอักขระ 2 สายแล้วหาความยาวของสายอักขระใหม่ 2. เปรียบเทียบสายอักขระ 2 สาย แล้วทำสำเนาสายอักขระ และเปรียบเทียบอีกครั้ง ข้อมูลนำเข้าคือ สายอักขระ 2 สาย ให้แสดงผลความยาวของสายอักขระ และผลของการเปรียบเทียบ

  30. การบ้าน 1. ให้เขียนโปรแกรมเพื่อแปลงสายอักขระโรมันเป็นเลขฐาน 10 โดยสัญลักษณ์ที่ใช้แทนเลขโรมัน มีดังนี้ เลขโรมัน เลขฐาน 10เลขโรมัน เลขฐาน 10 I 1 II 2 V 5 III 3 X 10 XXX 30 L 50 XL 40 C 100 CL 150 D 500 DX 510 M 1000 CMXC 990

  31. การบ้าน 2. ในการหาความเหมือนของ 2 สายอักขระใดๆ มีเกณฑ์การให้คะแนนดังนี้ ถ้าตัวอักขระเหมือนกัน 5 คะแนน, ไม่เหมือนกัน -4 คะแนน, ถ้าความยาวของสายอักขระไม่เท่ากัน แล้วต้องเลื่อนตำแหน่งทำให้เกิดช่องว่าง -7 คะแนน ตัวอย่าง m=“GAAGGCA” n=“GCAGAGCA” ดังนั้น คะแนนความเหมือนกัน 5(4)55(7) 555=19 Sequence m: G A A G  G C A Sequence n: G C A G A G C A

  32. ข้อมูลที่แสดง The query string: ACGGG The most similar strings are: ACGGGG The similarity score is: 18 ข้อมูลนำเข้าคือ 1 query string ต่อ หลาย data string >query ACGGG >seq1 ACGGT >seq2 ACGGGG >seq3 TCCGGTT

  33. สรุป • ต้องฝึกฝนการใช้เขียนโปรแกรมโดยใช้ • 1. แถวลำดับ 1, 2, และ 3 มิติ • 2. การใช้ loop for, while, etc. • 3. การใช้ตัวแปรสายอักขระ และ function ที่ใช้กับ string • boonsup@kku.ac.th • Waikham@msn.com

More Related