Upload
ansel
View
37
Download
3
Embed Size (px)
DESCRIPTION
ตัวแปรชุด. Arrays. สมาชิกตัวที่ ๑. สมาชิกตัวที่ ๒. สมาชิกตัวที่ N. ตัวแปรชุด (Arrays). กลุ่มของข้อมูลซึ่งมีชนิดข้อมูลเป็นอย่างเดียวกัน อ้างถึงกลุ่มข้อมูลชุดนี้ด้วยชื่อตัวแปรเดียวกัน ข้อมูลแต่ละตัวเรียกว่าเป็นสมาชิกของตัวแปรชุด สมาชิกแต่ละตัวจะมีหมายเลข/ดัชนีี ( index ) กำกับ. - PowerPoint PPT Presentation
Citation preview
1
2
ตั�วแปรชุ�ด (Arrays)
กลุ่��มของข�อม�ลุ่ซึ่��งม�ชุนิ�ดข�อม�ลุ่เป�นิอย่�างเด�ย่วก�นิ อ�างถึ�งกลุ่��มข�อม�ลุ่ชุ�ดนิ��ด�วย่ชุ �อตั�วแปรเด�ย่วก�นิ
ข�อม�ลุ่แตั�ลุ่ะตั�วเร�ย่กว�าเป�นิสมาชุ�กของตั�วแปรชุ�ดสมาชุ�กแตั�ลุ่ะตั�วจะม�หมาย่เลุ่ข/ด�ชุนิ��(index ) ก%าก�บ
สมาชิ�กตัวที่� ๑
สมาชิ�กตัวที่� ๒
สมาชิ�กตัวที่� N
...
3
ตั�วแปรชุ�ด(Arrays)
• การประกาศตัวแปรชิ�ด• การอ้�างถึ�งหร�อ้การเร�ยกใชิ�ข้�อ้ม"ลข้อ้งตัวแปรชิ�ด• ความสมพันธ์(ระหว)างตัวแปรชิ�ดกบตัวแปรพั
อ้ยน(เตัอ้ร(• การส)งผ่)านตัวแปรชิ�ดให�กบฟั-งก(ชิน
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
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
...
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;
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’
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; }
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
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);
11
สร�ป• ตัวแปรชิ�ด หมายถึ�ง กล�)มข้อ้งข้�อ้ม"ลซึ่� งม�ชิน�ดข้�อ้ม"ลเป2นอ้ย)างเด�ยวกน
อ้�างถึ�งกล�)มข้�อ้ม"ลชิ�ดน�/ด�วยชิ� อ้ตัวแปรเด�ยวกน และ อ้�างถึ�งสมาชิ�กแตั)ละตัวด�วยชิ� อ้ตัวแปรชิ�ดพัร�อ้มระบ�หมายเลข้/ดชิน�
• การประกาศตัวแปรชิ�ด(1) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร [จ%านิวนิสมาชุ�กในิม�ตั�ที่�� 1 ] [จ%านิวนิสมาชุ�กในิม�ตั�ที่�� 2 ];
(2) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร []={ค่�าค่งที่��ตั�วที่�� 1,ค่�าค่งที่��ตั�วที่�� 2 ,…, ค่�าค่งที่��ตั�วส�ดที่�าย่};
(3) ชุนิ�ดข�อม�ลุ่ ชุ �อตั�วแปร [n] =
{ค่�าค่งที่��ตั�วที่�� 1, ค่�าค่งที่��ตั�วที่�� 2 , …, ค่�าค่งที่��ตั�วส�ดที่�าย่};
• การอ้�างถึ�งหร�อ้การเร�ยกใชิ�ข้�อ้ม"ลข้อ้งตัวแปรชิ�ดชิ� อ้ตัวแปรชิ�ด[ดชิน� หร�อ้ ตัวบ)งชิ�/ ]
ในิภาษา C ด�ชุนิ� – ม�ชิน�ดข้�อ้ม"ลเป2นจั0านวนเตั3ม– ดชิน�ตัวแรกม�ค)าเป2น 0 เสมอ้– อ้าจัอ้ย")ในร"ปค)าคงที่� หร�อ้ ตัวแปร หร�อ้ น�พัจัน(ที่� ให�ค)าเป2นจั0านวนเตั3ม– จั0านวนม�ตั�ข้อ้งตัวแปรชิ�ด จัะบอ้กถึ�งจั0านวนดชิน�ที่� ตั�อ้งใชิ�เพั� อ้ระบ�ถึ�งสมาชิ�กข้อ้ง
ตัวแปรชิ�ด
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
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));
}
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];
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) = ?
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]
17
การส�งผ่�านิตั�วแปรชุ�ดให�ก�บฟั4งก-ชุ�นิ• Call by value : ส)งได�แค)สมาชิ�กข้อ้งตัวแปรชิ�ด
•ที่� ส)วนข้อ้งการประกาศพัาราม�เตัอ้ร( ประกาศให�พัาราม�เตัอ้ร(ม�ชิน�ดข้�อ้ม"ลเป2นอ้ย)างเด�ยวกบค)าที่� ตั�อ้งการส)งผ่)าน
• Call by reference : ส)งเป2น address ข้อ้งสมาชิ�กตัวแรกข้อ้งตัวแปรชิ�ดที่� ตั�อ้งการประมวลผ่ล
• ที่� ส)วนหวข้อ้งการประกาศฟั-งก(ชิน (Function header) ในส)วนข้อ้งการประกาศพัาราม�เตัอ้ร( หากพัาราม�เตัอ้ร(เป2นตัวแปรชิ�ด 1 ม�ตั�ไม)ตั�อ้งระบ�จั0านวนสมาชิ�ก แตั)ถึ�าเป2นตัวแปรชิ�ด 2 ม�ตั� ให�ระบ�เฉพัาะจั0านวนสมาชิ�กข้อ้งม�ตั�ที่� สอ้ง (จั0านวนคอ้ลมน()
• พัาราม�เตัอ้ร(ที่� ใชิ�รบค)าข้อ้งตัวแปรชิ�ด อ้าจัจัะถึ"กประกาศในลกษณ์ะข้อ้ง ตัวแปรพัอ้ยน(เตัอ้ร(ได�