1 / 23

Computer Programming for Engineers

Computer Programming for Engineers. อาเรย์ (Arrays). Arrays of Numbers. ความหมายของอาเรย์ (Definition of Arrays). อาเรย์คือกลุ่มของตำแหน่งในหน่วยความจำที่เกี่ยวข้องกันโดย มีชื่อร่วมกันและมีชนิดเหมือนกัน

feryal
Download Presentation

Computer Programming for Engineers

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. Computer Programming for Engineers อาเรย์ (Arrays)

  2. Arrays of Numbers

  3. ความหมายของอาเรย์ (Definition of Arrays) • อาเรย์คือกลุ่มของตำแหน่งในหน่วยความจำที่เกี่ยวข้องกันโดยมีชื่อร่วมกันและมีชนิดเหมือนกัน • ตัวอย่างเช่น ประกาศให้ตัวแปรชื่อว่า billy มีสมาชิกประเภท int 5 ตัวสามารถทำให้เราสามารถเก็บข้อมูลทั้ง 5 ตัวได้โดยใช้ชื่อเพียงชื่อเดียว • แต่ละช่องว่างในรูปแสดงถึงสมาชิกในอาเรย์ โดยลำดับของสมาชิกมีตั้งแต่ 0 ถึง 4 • ลำดับแรกของสมาชิกอาเรย์นั้น คือ 0 เสมอ • การที่จะอ้างถึงตำแหน่งของสมาชิก (index) ตัวใดในอาเรย์ ใช้ชื่ออาเรย์และหมายเลขระบุตำแหน่งหรือลำดับของสมาชิกในอาเรย์ อาทิเช่น billy [2]

  4. การประกาศอาเรย์ (Declaration of Arrays) • การจะใช้อาเรย์นั้นต้องมีการประกาศก่อนใช้ดังเช่น ตัวแปรธรรมดา โดยปรกติอยู่ในรูปแบบ type name [elements]; • ซึ่ง name คือ ชื่ออาเรย์ • type หมายถึงชนิด อาทิเช่น int, float, ฯลฯ และ elements ระบุจำนวนสมาชิกในอาเรย์ • โดยในบทเรียนนี้ elements จะเป็นค่าคงที่เท่านั้น ตัวอย่าง int billy [5]; float c [12], x[27];

  5. การกำหนดค่าเริ่มต้นในอาเรย์ (Array Initialization) • ค่าของแต่ละสมาชิกในอาเรย์หลังจากการประกาศใช้ นั้นมักจะไม่ใช่ค่าที่เราต้องการ ดังนั้นเราควรจะมีการใส่ค่าเริ่มต้นไปในอาเรย์ โดยมีอยู่สองวิธีหลักๆคือ • วิธีแรก การกำหนดค่าเริ่มต้นพร้อมกับการประกาศ อาทิเช่น การกำหนดให้ อาเรย์ billy มีค่าเป็นดัง • นอกจากนั้นผลที่เกิดขึ้นสำหรับชุดคำสั่งในแต่ละชุดด้านล่างเป็นดังนี้ intbilly [5] = {16, 2, 77, 40, 12071 }; int n[10] = { 1 }; int n[] = {1, 2, 3, 4, 5}; int n[5] = { 32, 27, 64, 18, 95, 14 }; {1,0,0,….,0} n มีสมาชิก 5 ตัว Error!

  6. การกำหนดค่าเริ่มต้นในอาเรย์(Array Initialization) • วิธีการที่สอง คือทำการเริ่มต้นค่าในโปรแกรมอาทิเช่น การกำหนดให้ค่าเริ่มต้นของสมาชิกทั้ง 10 ใน อาเรย์n มีค่าเป็น 0 • /* initialize elements of array n to 0 */ • for ( i = 0; i < 10; i++ ) { • n[ i ] = 0; /* set element at location i to 0 */ • /* end for */

  7. การกำหนดขนาดของอาเรย์ได้ด้วยค่าคงที่สัญลักษณ์ (Symbolic Constant) เพื่อประหยัดเวลา โปรแกรมนี้ ซึ่งมีผลลัพธ์ด้านขวา มีการใช้ SIZE ทั้งหมด 3 ที่ ผลลัพธ์ • 1 /* Example */ • 2 Initialize the elements of array s to the even integers from 2 to 20 */ • 3 #include <stdio.h> • 4 #define SIZE 10 • 5 • 6 /* function main begins program execution */ • 7 int main() • 8 { • 9 /* symbolic constant SIZE can be used to specify array size */ • 10 int s[ SIZE ]; /* array s has 10 elements */ • 11 int j; /* counter */ • 12 • 13 for ( j = 0; j < SIZE; j++ ) { /* set the values */ • 14 s[ j ] = 2 + 2 * j; • 15 } /* end for */ • 16 • 17 printf( "%s%13s\n", "Element", "Value" ); • 18 • 19 /* output contents of array s in tabular format */ • 20 for ( j = 0; j < SIZE; j++ ) { • 21 printf( "%7d%13d\n", j, s[ j ] ); • 22 } /* end for */ • 23 • 24 return 0; /* indicates successful termination */ • 25 • 26 } /* end main */ • Element Value • 0 2 • 1 4 • 2 6 • 3 8 • 4 10 • 5 12 • 6 14 • 7 16 • 8 18 • 9 20 เมื่อเรากำหนดให้ค่าคงที่ SIZE เป็น 10 เมื่อมีความจำเป็นต้องเปลี่ยนขนาด เราจะเปลี่ยนเพียง 1 ที่ ด้านบน

  8. การใช้ค่าต่างๆในอาเรย์การใช้ค่าต่างๆในอาเรย์ • รูปแบบการใช้ค่าต่างๆในอาเรย์คือ name [index]ตัวอย่างเช่น billy[2] = 75; • กำหนดให้ สมาชิกที่ 3 ใน billy มีค่าเป็น 75 และ เป็นการผ่านค่าดังกล่าวไปยังตัวแปร a a= billy[2]; ข้อควรระวังเมื่อใช้อาเรย์ เนื่องจากอาเรย์ในภาษา C นั้นไม่มีการตรวจสอบขอบเขตของอาเรย์ ดังนั้นเราสามารถทำข้อผิดพลาดโดยการอ้างเกินขอบเขตที่กำหนดไว้ได้อาทิ เช่น billy[6] เป็นต้น

  9. ตัวอย่างการใช้อาเรย์เพื่อหาผลรวมตัวอย่างการใช้อาเรย์เพื่อหาผลรวม Output # include <stdio.h> intbilly [] = {16, 2, 77, 40, 12071}; int n, result=0; int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } printf("%d \n",result); return 0; }

  10. การรับค่าของอาร์เรย์(InputofArrayValues)การรับค่าของอาร์เรย์(InputofArrayValues) ในกรณีที่กำหนดค่าตัวแปรอาเรย์จากผู้ใช้ผ่านคีย์บอร์ดสามารถทำได้โดยใช้ร่วมกับคำสั่ง scanf() เช่นกัน price[5] = 10.69; scanf(“%d %lf”, &grades[0], &price[2]) scanf(“%d”, &code[0]); scanf(“%d %d %d”, &grades[0], &grades[1], &grades[2]); หรือการวนรอบเพื่อรับค่าจากผู้ใช้ก็เป็นได้ดังตัวอย่าง for(i = 0; i <5; ++i) { printf(“Enter a grade: ” ); scanf(“%d”, &grades[i]); } จะเป็นการวนรอบรับค่า grade จากผู้ใช้จำนวน 5 ค่าและเก็บไว้ในอาเรย์ grades

  11. แบบฝึกหัดในชั้นเรียน จงสร้างตัวเลขสุ่มระหว่าง 0 ถึง 1 ขึ้นมาทั้งหมด 10,000 ตัว และแบ่งช่วง [0,1] ออกเป็น 20 ช่วงความกว้างช่วงละ 0.05. ดังนั้นช่วงแรกคือ [0,0.05] และช่วงสุดท้ายคือ [0.95,1.00]. จงนับจำนวนตัวเลขสุ่มที่อยู่ในแต่ละช่วงและแสดงผลดังด้านล่าง 0.000000-0.050000: 501 0.050000-0.100000: 463 0.100000-0.150000: 476 ... 0.900000-0.950000: 466 0.950000-1.000000: 493

  12. #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { float r; srand(time(NULL)); int a[20]; /* number of visits for each interval */ /* initialize the array */ /* do a loop from 1 to 10000 here */ { r=1.0*rand()/RAND_MAX; /* find out which interval r belongs to, then increment the corresponding element in the array */ } /* print out the array */ return 0; } บางส่วนของโปรแกรมการนับจำนวนตัวเลขสุ่มในช่วง [0,1]

  13. Arrays of Characters

  14. การใช้งานอาเรย์ของตัวอักษร (Strings) char string1[] = “first”; หรือ char string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’,‘/0’}; • การใช้อาเรย์นั้นไม่ได้ถูกจำกัดอยู่เพียงข้อมูลที่เป็นตัวเลขเท่านั้น ยังสามารถนำมาใช้ได้กับตัวอักษร หรือ string อาทิเช่น โดยที่ string1 ประกอบไปด้วยตัวอักษร 5 ตัวและ ตัวอักษร พิเศษที่ใช้ในการสิ้นสุดสตริงเรียกว่า ตัวอักษรนัล (Null Character) ดังนั้นอาเรย์ string1 จึงประกอบด้วยสมาชิกจำนวนหกตัว โดยใช้ ‘\0’ สำหรับตัวอักษรนัล สตริงทุกตัวในภาษาซีจะต้องปิดท้ายด้วยตัวอักษรนัลเสมอ ดังนั้น string1[0] = ‘f’ และ string1[2] = ‘r’ ในกรณีที่เราลืม อาทิเช่นใน char string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’}; ตัวอักษรนัลจะถูกนำไปต่อท้ายใน string1 อัตโนมัติ

  15. การใช้ String สำหรับ อินพุต • เราสามารถที่จะรับค่าอินพุตสตริงจากคีย์บอร์ดแล้วเก็บในอาเรย์ของตัวอักษรได้โดยใช้ scanf และการใช้การกำหนดรูปแบบ %s ตัวอย่างเช่น • ประกาศอาเรย์ตัวอักษร • char string2[10] • และรับข้อมูล scanf( “%s”, string2 ); • จะใช้เพื่อเก็บตัวอักษร ไม่เกิน 9 ตัวจากคีย์บอร์ด และเก็บไว้ในตัวแปร string2 • ในกรณีที่อินพุตมีขนาดเกินกว่าที่กำหนดไว้ ข้อมูลที่อยู่ในตำแหน่งต่อไป string2[10], string2[11],… ที่เกินมาจะถูกลบไปอย่างไม่ตั้งใจได้

  16. การใช้ String สำหรับ อินพุต char string2[10] scanf( “%s”, string2 ); นอกจากนั้นจะสังเกตได้ว่า string2 นั้นถูกใช้โดยไม่ต้องมีเครื่องหมาย & นำหน้า ดังเช่นในอินพุตประเภทอื่นๆ เพราะ string2 นั้นระบุตำแหน่งของข้อมูลไว้เรียบร้อยแล้ว

  17. แบบฝึกหัด • จงเขียนโปรแกรมที่อ่านข้อมูลจากคีย์บอร์ด และพิมพ์ข้อมูลนั้นกลับออกไปแบบย้อนกลับ อาทิเช่น เมื่ออินพุตคือ Test data เอาท์พุตควรเป็น atad tseT สมมุติฐานคือ ข้อมูลมีความยาวไม่เกิน 19 ตัวอักษร

  18. Multi-Dimensional Arrays

  19. อาเรย์หลายมิติ • อาเรย์ในภาษาซีสามารถมีได้หลายมิติ โดยในที่นี้เราจะศึกษาอาเรย์แบบ 2 มิติ ซึ่ง การประกาศ หมายถึง อาเรย์ ประเภท int ที่มีขนาด 3แถว x 5ตอน ดังรูป ดังนั้นข้อมูล jimmy [1][3] หมายถึงข้อมูลแถวที่สองจากด้านบนและแถวที่สี่จากซ้ายมือดังรูป int jimmy [3][5]

  20. การกำหนดค่าในอาเรย์สองมิติการกำหนดค่าในอาเรย์สองมิติ การกำหนดค่าเริ่มต้นในตัวแปรอาร์เรย์ 2 มิติสามารถกระทำได้โดยจะเพิ่มส่วนการแบ่งแยกในแต่ละแถวด้วยเครื่องหมาย “{ }” และ “,” เช่น • int jimmy[3][5] = {{1,2,3,4,5}, {2,4,6,8,10}, {3,6,9,12,15}}; การให้ค่าเริ่มต้นแก่ตัวแปรอาร์เรย์ 2 มิติยังสามารถที่จะละเครื่องหมายปีกกาในแต่ละแถวได้โดยให้ใช้เครื่องหมายจุลภาคแทนเช่น • int jimmy[3][5] = {1,2,3,4,5, 2,4,6,8,10, 3,6,9,12,15}; หรือสามารถเขียนได้เป็น • int jimmy[3][5] = {1,2,3,4,5,2,4,6,8,10,3,6,9,12,15};

  21. ตัวอย่างการใช้ อาเรย์สองมิติ #define WIDTH 5 #define HEIGHT 3 int jimmy [HEIGHT][WIDTH]; int n,m; int main () { for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) { jimmy[n][m]=(n+1)*(m+1); } return 0; } ตารางแสดงค่าที่เก็บไว้ในแต่ละตำแหน่งในอาเรย์jimmy

  22. โปรแกรมหาผลรวมของสมาชิกในอาเรย์โปรแกรมหาผลรวมของสมาชิกในอาเรย์ total = 0; for ( row = 0; row <= HEIGHT; row++ ) for ( column = 0; column <= WIDTH; column++ ) { total += jimmy[ row ][ column ]; }

  23. End

More Related