Computer Programming for Engineers

23
ออออออ ออออออ (Arrays) (Arrays)

description

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

Transcript of Computer Programming for Engineers

Page 1: Computer Programming for Engineers

อาเรย์� อาเรย์� (Arrays)(Arrays)

Page 2: Computer Programming for Engineers
Page 3: Computer Programming for Engineers

ความหมายของอาเรย� (Definition of Arrays)

อาเรย�ค�อกลุ่��มของตำ�าแหน่�งใน่หน่�วยความจำ�าที่��เก��ยวข�องก�น่โดยมีชื่��อร วมีกั�นและมีชื่น�ดเหมี�อนกั�น

ตำ�วอย�างเช่�น่ ประกาศให�ตำ�วแปรช่��อว�า billy ม�สมาช่%กประเภที่ int 5 ตำ�วสามารถที่�าให�เราสามารถเก(บข�อม*ลุ่ที่�+ง 5 ตำ�วได�โดยใชื่�ชื่��อเพีย์งชื่��อเดย์ว

แตำ�ลุ่ะช่�องว�างใน่ร*ปแสดงถ-งสมาช่%กใน่อาเรย� โดยลุ่�าด�บของสมาช่%กม�ตำ�+งแตำ� 0 ถ-ง 4 ลุ่�าด�บแรกของสมาช่%กอาเรย�น่�+น่ ค�อ 0 เสมอ การที่��จำะอ�างถ-งตำ�าแหน่�งของสมาช่%ก (index) ตำ�วใดใน่อาเรย� ใช่�ช่��ออาเรย�แลุ่ะหมายเลุ่ขระบ�

ตำ�าแหน่�งหร�อลุ่�าด�บของสมาช่%กใน่อาเรย� อาที่%เช่�น่

billy [2]

Page 4: Computer Programming for Engineers

การประกาศอาเรย� (Declaration of Arrays)การจำะใช่�อาเรย�น่�+น่ตำ�องม�การประกาศก�อน่ใช่�ด�งเช่�น่ ตำ�วแปร

ธรรมดา โดยปรกตำ%อย*�ใน่ร*ปแบบtype name [elements];

ซึ่-�ง name ค�อ ช่��ออาเรย�type หมายถ-งช่น่%ด อาที่%เช่�น่ int, float, ฯลุ่ฯ แลุ่ะ

elements ระบ�จำ�าน่วน่สมาช่%กใน่อาเรย� โดยใน่บที่เร�ยน่น่�+ elements จำะเป1น่ค�าคงที่��เที่�าน่�+น่ตั�วอย์ าง

int billy [5]; float c [12], x[27];

Page 5: Computer Programming for Engineers

การก�าหน่ดค�าเร%�มตำ�น่ใน่อาเรย� (Array Initialization)ค�าของแตำ�ลุ่ะสมาช่%กใน่อาเรย�หลุ่�งจำากการประกาศใช่� น่� +น่ม�กจำะ

ไม�ใช่�ค�าที่��เราตำ�องการ ด�งน่�+น่เราควรจำะม�การใส�ค�าเร%�มตำ�น่ไปใน่อาเรย� โดยม�อย*�สองว%ธ�หลุ่�กๆค�อ

ว�ธีแรกั การก�าหน่ดค�าเร%�มตำ�น่พร�อมก�บการประกาศ อาที่%เช่�น่ การก�าหน่ดให� อาเรย� billy ม�ค�าเป1น่ด�ง

น่อกจำากน่�+น่ผลุ่ที่��เก%ดข-+น่ส�าหร�บช่�ดค�าส��งใน่แตำ�ลุ่ะช่�ดด�าน่ลุ่�างเป1น่ด�งน่�+

int billy [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!

Page 6: Computer Programming for Engineers

การก�าหน่ดค�าเร%�มตำ�น่ใน่อาเรย� (Array Initialization)

ว�ธีกัารที่�สอง ค�อที่�าการเร%�มตำ�น่ค�าใน่โปรแกรมอาที่%เช่�น่การก�าหน่ดให�ค�าเร%�มตำ�น่ของสมาช่%กที่�+ง 10 ใน่ อาเรย� n ม�ค�า

เป1น่ 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 */

Page 7: Computer Programming for Engineers

การก�าหน่ดขน่าดของอาเรย�ได�ด�วยค�าคงที่��ส�ญลุ่�กษณ์�

(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 เป1น่ 10 เม��อม�ความจำ�าเป1น่ตำ�องเปลุ่��ยน่ขน่าด เราจำะเปลุ่��ยน่เพ�ยง 1 ที่�� ด�าน่บน่

Page 8: Computer Programming for Engineers

การใช่�ค�าตำ�างๆใน่อาเรย�ร*ปแบบการใช่�ค�าตำ�างๆใน่อาเรย�ค�อ name [index]

ตำ�วอย�างเช่�น่ billy[2] = 75;

ก�าหน่ดให� สมาช่%กที่�� 3 ใน่ billy ม�ค�าเป1น่ 75แลุ่ะ เป1น่การผ�าน่ค�าด�งกลุ่�าวไปย�งตำ�วแปร a

a= billy[2];

ข�อควรระว�งเมี��อใชื่�อาเรย์� เน่��องจำากอาเรย�ใน่ ภาษา C น่�+น่ไม�ม�การตำรวจำสอบขอบเขตำของอาเรย� ด�งน่�+น่เราสามารถที่�าข�อผ%ดพลุ่าดโดยการอ�างเก%น่ขอบเขตำที่��ก�าหน่ดไว�ได�อาที่% เช่�น่ billy[6] เป1น่ตำ�น่

Page 9: Computer Programming for Engineers

# include <stdio.h>

int billy [] = {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;}

Output

Page 10: Computer Programming for Engineers

กัารร�บค าของอาร�เรย์� (Input of Array Values)

ใน่กรณ์�ที่��ก�าหน่ดค�าตำ�วแปรอาเรย�จำากผ*�ใช่�ผ�าน่ค�ย�บอร�ดสามารถที่�าได�โดยใช่�ร�วมก�บค�าส��ง scanf() เช่�น่ก�น่

5 1069price[ ] = . ; (“% %”, &[0], &[2])

scanf(“%d ”, &[0]); scanf(“%d %d %d”,

0&grades[ ], 1&grades[ ],

2&grades[ ]);

หร�อการวน่รอบเพ��อร�บค�าจำากผ*�ใช่�ก(เป1น่ได�ด�งตำ�วอย�าง d d d d d0 5 ; ++){

d (“ drade: ” ); scanf(“%d”,

&grades[i]);}จำะเป1น่การวน่รอบร�บค�า grade จำากผ*�ใช่�จำ�าน่วน่ 5 ค�าแลุ่ะเก(บไว�ใน่อาเรย� grades

Page 11: Computer Programming for Engineers

แบบฝึ:กห�ดใน่ช่�+น่เร�ยน่จงสร�าง ตำ�วเลุ่ขส��มระหว�าง 0 ถ-ง 1 ข-+น่มาที่�+งหมด 10,000 ตำ�ว

แลุ่ะแบ�งช่�วง [0,1] ออกเป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

Page 12: Computer Programming for Engineers

#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]

Page 13: Computer Programming for Engineers
Page 14: Computer Programming for Engineers

การใช่�งาน่อาเรย�ของตำ�วอ�กษร (Strings)การใช่�อาเรย�น่�+น่ไม�ได�ถ*กจำ�าก�ดอย*�เพ�ยงข�อม*ลุ่ที่��เป1น่ตำ�วเลุ่ขเที่�าน่�+น่ ย�ง

สามารถน่�ามาใช่�ได�ก�บตำ�วอ�กษร หร�อ string อาที่%เช่�น่

char string1[] = “first”;หร�อchar string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’,‘/0’};

โดยที่�� string1 ประกอบไปด�วยตำ�วอ�กษร 5 ตำ�วแลุ่ะ ตำ�วอ�กษรพ%เศษที่��ใช่�ใน่การส%+น่ส�ดสตำร%งเร�ยกว�า ตำ�วอ�กษรน่�ลุ่ (Null Character) ด�งน่�+น่อาเรย� string1 จำ-งประกอบด�วยสมาช่%กจำ�าน่วน่หกตำ�ว โดยใช่� ‘ 0\ ’ ส�าหร�บตำ�วอ�กษรน่�ลุ่ สตำร%งที่�กตำ�วใน่ภาษาซึ่�จำะตำ�องป;ดที่�ายด�วยตำ�วอ�กษรน่�ลุ่เสมอ ด�งน่�+น่ string1[0] = ‘f’ แลุ่ะ string1[2] = ‘r’ใน่กรณ์�ที่��เราลุ่�ม อาที่%เช่�น่ใน่ char string1[] = { ‘f’, ‘i’, ‘r’, ‘s’, ‘t’}; ตำ�วอ�กษรน่�ลุ่จำะถ*กน่�าไปตำ�อที่�ายใน่ string1 อ�ตำโน่ม�ตำ%

Page 15: Computer Programming for Engineers

•เราสามารถที่��จำะร�บค�าอ%น่พ�ตำสตำร%งจำากค�ย�บอร�ดแลุ่�วเก(บใน่อาเรย�ของตำ�วอ�กษรได�โดยใช่� scanf แลุ่ะการใช่�การก�าหน่ดร*ปแบบ %s ตำ�วอย�างเช่�น่ประกาศอาเรย�ตำ�วอ�กษร

char string2[10]แลุ่ะร�บข�อม*ลุ่ scanf( “%s”, string2 );จำะใช่�เพ��อเก(บตำ�วอ�กษร ไม�เก%น่ 9 ตำ�วจำากค�ย�บอร�ด แลุ่ะเก(บไว�ใน่ตำ�วแปร string2

• ใน่กรณ์�ที่��อ%น่พ�ตำม�ขน่าดเก%น่กว�าที่��ก�าหน่ดไว� ข�อม*ลุ่ที่��อย*�ใน่ตำ�าแหน่�งตำ�อไป string2[10], string2[11],… ที่��เก%น่มาจำะถ*กลุ่บไปอย�างไม�ตำ�+งใจำได�

Page 16: Computer Programming for Engineers

char string2[10]scanf( “%s”, string2 );

น่อกจำากน่�+น่จำะส�งเกตำได�ว�า string2 น่�+น่ถ*กใช่�โดยไม�ตำ�องม�เคร��องหมาย & น่�าหน่�า ด�งเช่�น่ใน่อ%น่พ�ตำประเภที่อ��น่ๆ เพราะ string2 น่�+น่ระบ�ตำ�าแหน่�งของข�อม*ลุ่ไว�เร�ยบร�อยแลุ่�ว

Page 17: Computer Programming for Engineers

แบบฝึ:กห�ดจำงเข�ยน่โปรแกรมที่��อ�าน่ข�อม*ลุ่จำากค�ย�บอร�ด แลุ่ะพ%มพ�ข�อม*ลุ่

น่�+น่กลุ่�บออกไปแบบย�อน่กลุ่�บ อาที่%เช่�น่ เม��ออ%น่พ�ตำค�อ Test data เอาที่�พ�ตำควรเป1น่ atad tseTสมม�ตำ%ฐาน่ค�อ ข�อม*ลุ่ม�ความยาวไม�เก%น่ 19 ตำ�วอ�กษร

Page 18: Computer Programming for Engineers
Page 19: Computer Programming for Engineers

อาเรย์�หลาย์มี�ตั�อาเรย�ใน่ภาษาซึ่�สามารถม�ได�หลุ่ายม%ตำ% โดยใน่ที่��น่�+เราจำะศ-กษาอา

เรย�แบบ 2 ม%ตำ% ซึ่-�งการประกาศหมายถ-ง อาเรย� ประเภที่ int ที่��ม�ขน่าด 3แถว x 5ตำอน่ ด�งร*ป

ด�งน่�+น่ข�อม*ลุ่ jimmy [1][3] หมายถ-งข�อม*ลุ่แถวที่��สองจำากด�าน่บน่แลุ่ะแถวที่��ส��จำากซึ่�ายม�อด�งร*ป

int jimmy [3][5]

Page 20: Computer Programming for Engineers

การก�าหน่ดค�าใน่อาเรย�สองม%ตำ%การก�าหน่ดค�าเร%�มตำ�น่ใน่ตำ�วแปรอาร�เรย� 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};

หร�อสามารถเข�ยน่ได�เป1น่ int jimmy[3][5] =

{1,2,3,4,5,2,4,6,8,10,3,6,9,12,15};

Page 21: Computer Programming for Engineers

#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

Page 22: Computer Programming for Engineers

โปรแกรมหาผลุ่รวมของสมาช่%กใน่อาเรย�

total = 0;for ( row = 0; row <= HEIGHT; row++ )

for ( column = 0; column <= WIDTH; column++ )

{total += jimmy[ row ][ column ];

}

Page 23: Computer Programming for Engineers