17
1

ตัวแปรชุด

  • Upload
    ansel

  • View
    37

  • Download
    3

Embed Size (px)

DESCRIPTION

ตัวแปรชุด. Arrays. สมาชิกตัวที่ ๑. สมาชิกตัวที่ ๒. สมาชิกตัวที่ N. ตัวแปรชุด (Arrays). กลุ่มของข้อมูลซึ่งมีชนิดข้อมูลเป็นอย่างเดียวกัน อ้างถึงกลุ่มข้อมูลชุดนี้ด้วยชื่อตัวแปรเดียวกัน ข้อมูลแต่ละตัวเรียกว่าเป็นสมาชิกของตัวแปรชุด สมาชิกแต่ละตัวจะมีหมายเลข/ดัชนีี ( index ) กำกับ. - PowerPoint PPT Presentation

Citation preview

Page 1: ตัวแปรชุด

1

Page 2: ตัวแปรชุด

2

ตั�วแปรชุ�ด (Arrays)

กลุ่��มของข�อม�ลุ่ซึ่��งม�ชุนิ�ดข�อม�ลุ่เป�นิอย่�างเด�ย่วก�นิ อ�างถึ�งกลุ่��มข�อม�ลุ่ชุ�ดนิ��ด�วย่ชุ �อตั�วแปรเด�ย่วก�นิ

ข�อม�ลุ่แตั�ลุ่ะตั�วเร�ย่กว�าเป�นิสมาชุ�กของตั�วแปรชุ�ดสมาชุ�กแตั�ลุ่ะตั�วจะม�หมาย่เลุ่ข/ด�ชุนิ��(index ) ก%าก�บ

สมาชิ�กตัวที่� ๑

สมาชิ�กตัวที่� ๒

สมาชิ�กตัวที่� N

...

Page 3: ตัวแปรชุด

3

ตั�วแปรชุ�ด(Arrays)

• การประกาศตัวแปรชิ�ด• การอ้�างถึ�งหร�อ้การเร�ยกใชิ�ข้�อ้ม"ลข้อ้งตัวแปรชิ�ด• ความสมพันธ์(ระหว)างตัวแปรชิ�ดกบตัวแปรพั

อ้ยน(เตัอ้ร(• การส)งผ่)านตัวแปรชิ�ดให�กบฟั-งก(ชิน

Page 4: ตัวแปรชุด

4

• การจัดสรรเน�/อ้ที่� ในหน)วยความจั0าสมาชิ�กแตั)ละตัวจัะถึ"กจัดสรรที่� ในหน)วยความจั0าแบบตั)อ้เน� อ้ง

ข้นาดหน)วยความจั0าข้อ้งแตั)ละตัวจัะข้�/นกบชิน�ดข้�อ้ม"ลเชิ)นตัวแปร score จัะใชิ�เน�/อ้ที่� ข้นาด 2 x10=20 ไบตั(

2 ไบตั( 2 ไบตั( 2 ไบตั( id จัะใชิ�เน�/อ้ที่� ข้นาด 1 x 8 = 8 ไบตั( name จัะใชิ�เน�/อ้ที่� ข้นาด 1 x 25 = 25 ไบตั(score จัะใชิ�เน�/อ้ที่� ข้นาด 2 x 10 = 20 ไบตั(

การประกาศตั�วแปรชุ�ด• ร"ปแบบ (1) ชิน�ดข้�อ้ม"ล ชิ� อ้ตัวแปร [จั0านวนสมาชิ�ก];

int score [10];

char id[8], name[N];

สมาชิ�กตัวที่� ๑

สมาชิ�กตัวที่� ๒

สมาชิ�กตัวที่� 10

...

N เป�นิค่�าค่งที่��ส�ญลุ่�กษณ์- ก%าหนิดโดย่

#define N 25

Page 5: ตัวแปรชุด

5

การอ�างถึ�งหร อการเร�ย่กใชุ�ข�อม�ลุ่ของตั�วแปรชุ�ด• ร"ปแบบ ชิ� อ้ตัวแปรชิ�ด [ดชิน� หร�อ้ ตัวบ)งชิ�/ ]• ในิภาษา C ด�ชุนิ�

– ม�ชิน�ดข้�อ้ม"ลเป2นจั0านวนเตั3ม– ดชิน�ตัวแรกม�ค)าเป2น 0 เสมอ้– อ้าจัอ้ย")ในร"ปค)าคงที่� หร�อ้ ตัวแปร หร�อ้ น�พัจัน(ที่� ให�ค)าเป2น

จั0านวนเตั3ม

score

ตัวบ)งชิ�/ 0 1 9

score [0] /* อ้�างถึ�งสมาชิ�กตัวแรกข้อ้ง score */

score [i] /* สมาชิ�กหมายเลข้ i */

score [i+1] /* สมาชิ�กหมายเลข้ i+ 1 */

สมาชิ�กตัวที่� ๑

สมาชิ�กตัวที่� ๒

สมาชิ�กตัวที่� 10

...

Page 6: ตัวแปรชุด

6

ตัวอ้ย)างชิ�ดค0าส งภาษา C• ก0าหนดค)าเร� มตั�นให�กบสมาข้�กที่�กตัวข้อ้ง

score ม�ค)าเป2น 0

0 0 0 ...

score[0] score[1] score[9]

int i, score[10];

for (i= 0; i<10; i++)

score[i] = 0;

Page 7: ตัวแปรชุด

7

การประกาศตั�วแปรชุ�ดพร�อมก�บก%าหนิดค่�าเร��มตั�นิ• ร"ปแบบ(2) ชิน�ดข้�อ้ม"ล ชิ� อ้ตัวแปร [ ] = { ค)าเร� มตั�นตัวที่� 1, ค)าเร� มตั�นตัวที่ � 2,

… ค)าเร� มตั�นตัวส�ดที่�าย };(3) ชิน�ดข้�อ้ม"ล ชิ� อ้ตัวแปร [n] = {ค)าเร� มตั�นตัวที่� 1,ค)าเร� มตั�นตัวที่ � 2, … ค)าเร� มตั�นตัวส�ดที่�าย};

n ค)า int X[ ] = {5, 2, 4, 1, 3};

char id[8] = { ‘2’,’3’,’0’,’5’,’1’,’7’,’1’,’\0’ };

X[0] X[1] X[2] X[3] X[4]

5 2 4 1 3

id[0] id[1] id[2] id[3] id[4] id[5] id[6] id[7]

‘2’ ‘3’ ‘0’ ‘5’ ‘1’ ‘7’ ‘1’ ‘\0’

Page 8: ตัวแปรชุด

8

ตัวอ้ย)างชิ�ดค0าส งภาษา C• เร�ยงล0าดบคะแนนจัากน�อ้ยไปมาก

#define N 5:int i, j, tmp, score[N]= {5, 2, 4, 1, 3};

for (i = 0; i< N -1; i++) for (j = i+1; j< N; j++) if (score[i] > score[ j]) { tmp = score[i]; score[i] = score[ j]; score[j] = tmp; }

Page 9: ตัวแปรชุด

9

ตั�วแปรชุ�ดหลุ่าย่ม�ตั�• ตัวแปรชิ�ด 2 ม�ตั� (two dimensional arrays)

int a[2][3] ={{1,2,3},{4,5,6}};

1 2 3 4 5 6

• เพั� อ้เข้�าให�ถึ�งข้�อ้ม"ลซึ่� งเป2นสมาชิ�กข้อ้งตัวแปรชิ�ด จัะตั�อ้งใชิ�ตัวบ)งชิ�/เที่)ากบจั0านวนม�ตั�

a[0][0] /* สมาชิ�กที่� อ้ย")ในแถึวแรก สดมภ(แรก*/a[1][2] /*สมาชิ�กที่� อ้ย")ในแถึวที่� สอ้ง สดมภ(ที่� ๓ */ a[k][k+1] /* สมาชิ�กที่� อ้ย")ในแถึว k สดมภ( k+1*/

1 2 3

4 5 6

แถึว0 แถึว1

Page 10: ตัวแปรชุด

10

ตั�วอย่�าง• ชิ�ดค0าส งเพั� อ้สร�างเมที่ร�กเอ้กลกษณ์( (Identity matrix ) ข้นาด n x n Identity

matrix เป2นเมที่ร�กซึ่( ที่� ค)าสมาชิ�กที่�กตัวม�ค)าเป2น 0 ยกเว�นสมาชิ�กในแนวที่ะแยงที่� ตั0าแหน)งแถึวเที่)ากบตั0าแหน)งคอ้ลมน(จัะม�ค)าเป2น 1

เชิ)น I เป2นเมที่ร�กซึ่(เอ้กลกษณ์(ข้นาด 3 3x

I = 1 0 0

0 1 0

0 0 1#define Size 3:int m, n, I [Size][Size];

for (m = 0; m< Size; m++) for (n = 0; n<Size; n++) I [m][n] = (m == n ? : 1 : 0);

Page 11: ตัวแปรชุด

11

สร�ป• ตัวแปรชิ�ด หมายถึ�ง กล�)มข้อ้งข้�อ้ม"ลซึ่� งม�ชิน�ดข้�อ้ม"ลเป2นอ้ย)างเด�ยวกน

อ้�างถึ�งกล�)มข้�อ้ม"ลชิ�ดน�/ด�วยชิ� อ้ตัวแปรเด�ยวกน และ อ้�างถึ�งสมาชิ�กแตั)ละตัวด�วยชิ� อ้ตัวแปรชิ�ดพัร�อ้มระบ�หมายเลข้/ดชิน�

• การประกาศตัวแปรชิ�ด(1) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร [จ%านิวนิสมาชุ�กในิม�ตั�ที่�� 1 ] [จ%านิวนิสมาชุ�กในิม�ตั�ที่�� 2 ];

(2) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร []={ค่�าค่งที่��ตั�วที่�� 1,ค่�าค่งที่��ตั�วที่�� 2 ,…, ค่�าค่งที่��ตั�วส�ดที่�าย่};

(3) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร [n] =

{ค่�าค่งที่��ตั�วที่�� 1, ค่�าค่งที่��ตั�วที่�� 2 , …, ค่�าค่งที่��ตั�วส�ดที่�าย่};

• การอ้�างถึ�งหร�อ้การเร�ยกใชิ�ข้�อ้ม"ลข้อ้งตัวแปรชิ�ดชิ� อ้ตัวแปรชิ�ด[ดชิน� หร�อ้ ตัวบ)งชิ�/ ]

ในิภาษา C ด�ชุนิ� – ม�ชิน�ดข้�อ้ม"ลเป2นจั0านวนเตั3ม– ดชิน�ตัวแรกม�ค)าเป2น 0 เสมอ้– อ้าจัอ้ย")ในร"ปค)าคงที่� หร�อ้ ตัวแปร หร�อ้ น�พัจัน(ที่� ให�ค)าเป2นจั0านวนเตั3ม– จั0านวนม�ตั�ข้อ้งตัวแปรชิ�ด จัะบอ้กถึ�งจั0านวนดชิน�ที่� ตั�อ้งใชิ�เพั� อ้ระบ�ถึ�งสมาชิ�กข้อ้ง

ตัวแปรชิ�ด

Page 12: ตัวแปรชุด

12

ความสมพันธ์(ระหว)างตัวแปรชิ�ดกบตัวแปรพัอ้ยน(เตัอ้ร(• ตัวแปรพัอ้ยน(เตัอ้ร( เป2น

– ตัวแปรซึ่� งเก3บค)าแอ้ดเดรสหร�อ้ตั0าแหน)งในหน)วยความจั0า– เราสามารถึเปล� ยนแปลงค)าข้อ้งตัวแปรพัอ้ยน(เตัอ้ร(ได�

• ตัวแปรชิ�ด เป2นชิ� อ้ที่� เราใชิ�อ้�างถึ�งกล�)มข้อ้งข้�อ้ม"ล ในภาษา C เม� อ้เราอ้�างถึ�งชิ� อ้ตัวแปรชิ�ดเราจัะได�เป2นค)าข้อ้งตั0าแหน)งใน หน)วยความจั0า เราไม)สามารถึเปล� ยนค)าน�/ได�

int x[ ] = {10, 20, 30, 40, 50};

x[0] x[1] x[2] x[3] x[4]

*x *(x+1) *(x+2) *(x+3) *(x+4)

เม� อ้อ้�างถึ�ง x เราจัะได� แอ้ดเดรสข้อ้งสมาชิ�กตัวแรก

10 20 30 40 50

Page 13: ตัวแปรชุด

13

ตั�วอย่�าง// Demonstrate array and address of elements

# include <stdio.h>

void main ( ) {

int indx, data [5] = {10, 20, 30, 40, 50};

printf(“Starting address of array is %u\n”, data);

for (indx=0; indx < 5; indx++)

printf (“address of element %u = %u \t data is %d\n”,

indx+1, data+indx, *(data+indx));

}

Page 14: ตัวแปรชุด

14

การใชุ�ตั�วแปรพอย่นิ-เตัอร-ก�บแอเรย่-#define N 10:

int i, *p, A[N], sum = 0;// summing an array using subscripts

for (i=0; i<N; i++) sum += A[i];// using pointer

for (p=A; p<&A[N]; p++) sum += *p;// using an array variable as a pointer

for (i=0; i<N; i++) sum += *(A + i);// using pointer with subscripts

for (p=A, i=0; i<N; i++) sum += p[i];

Page 15: ตัวแปรชุด

15

ตั�วแปรชุ�ดหลุ่าย่ม�ตั� (2)

int a[2][3] ={{1,2,3},{4,5,6}};

1 2 3 4 5 6

a : address of the first row*a : address of the 1st column of the 1st row**a : element of the 1st column of the 1st rowa[0][0] /*สมาชิ�กที่� อ้ย")ในแถึวแรก สดมภ(แรก*/*a + j : address of the jth column of the 1st row* (a + i) : address of the 1st column of the ith row* (a + i)+j : address of the jth column of the ith row *(* (a + i)+j) : element of the jth column of the ith row*(a[i] + j) = ? *(&a[0][0] + 3*i + j) = ?

Page 16: ตัวแปรชุด

16

การส�งผ่�านิตั�วแปรชุ�ดให�ก�บฟั4งก-ชุ�นิ// Function to sum elements of an array// array A is passed as a pointer, Size of array is passed as separate intint sum (int A[], int Size) { int i, s=0; for (i=0; i<Size; i++)

s += A[i]; return s;}// at the calling sideint sum ( int [], int ) ; // prototype of sum function

// Various ways that sum() might be called Invocation What gets computed and returnedsum(v, 100) v[0] + v[1] +…+ v[99]sum(&v[7], k-7) v[7] + v[8] +…+ v[k-1]sum(v+7, 2*k) v[7] + v[8] + …+ v[2*k+6]

Page 17: ตัวแปรชุด

17

การส�งผ่�านิตั�วแปรชุ�ดให�ก�บฟั4งก-ชุ�นิ• Call by value : ส)งได�แค)สมาชิ�กข้อ้งตัวแปรชิ�ด

•ที่� ส)วนข้อ้งการประกาศพัาราม�เตัอ้ร( ประกาศให�พัาราม�เตัอ้ร(ม�ชิน�ดข้�อ้ม"ลเป2นอ้ย)างเด�ยวกบค)าที่� ตั�อ้งการส)งผ่)าน

• Call by reference : ส)งเป2น address ข้อ้งสมาชิ�กตัวแรกข้อ้งตัวแปรชิ�ดที่� ตั�อ้งการประมวลผ่ล

• ที่� ส)วนหวข้อ้งการประกาศฟั-งก(ชิน (Function header) ในส)วนข้อ้งการประกาศพัาราม�เตัอ้ร( หากพัาราม�เตัอ้ร(เป2นตัวแปรชิ�ด 1 ม�ตั�ไม)ตั�อ้งระบ�จั0านวนสมาชิ�ก แตั)ถึ�าเป2นตัวแปรชิ�ด 2 ม�ตั� ให�ระบ�เฉพัาะจั0านวนสมาชิ�กข้อ้งม�ตั�ที่� สอ้ง (จั0านวนคอ้ลมน()

• พัาราม�เตัอ้ร(ที่� ใชิ�รบค)าข้อ้งตัวแปรชิ�ด อ้าจัจัะถึ"กประกาศในลกษณ์ะข้อ้ง ตัวแปรพัอ้ยน(เตัอ้ร(ได�