PowerPoint - ee.eng.cmu.ac.th

Download Report

Transcript PowerPoint - ee.eng.cmu.ac.th

Week 9
Arrays
Outline
• ตัวแปรชุด
• ตัวแปรชุดสำหรับข้อมูลอักขระ และข้อควำม
• ตัวแปรชุดหลำยมิติ
2
Definition of Arrays
• ตัวแปรชุด (array) คือกลุ่มของพืน
้ ทีใ่ นหน่วยควำมจำทีใ่ ช้จดั เก็บข้อมูล
ชนิดเดียวกัน และใช้ช่อื อ้ำงอิงเดียวกัน
เป็ นตัวแปรชุดทีใ่ ช้จดั เก็บข้อมูลประเภท int ได้ทงั ้ หมด 5 ตัว
• ช่องว่ำงแต่ละช่องในรูปแสดงถึงพืน
้ ทีส่ ำหรับจัดเก็บข้อมูลแต่ละตัว (element)
• billy
• กำรอ้ำงอิงถึงพืน
้ ทีแ่ ต่ละช่องของตัวแปรชุด
• อำศัยชื่อตัวแปรชุดและหมำยเลขระบุตำแหน่ง (index)
• billy[index]
มีคำ่ เริม่ ต้นเป็ น 0 เสมอ : ระบุถงึ พืน้ ทีต่ ำแหน่งแรก (หรือห้องแรก)
index มีคำ
่ มำกทีส่ ดุ คือ n-1 : ใช้ระบุพน้ื ทีต่ ำแหน่งสุดท้ำย เมือ่ n จำนวน
พืน้ ทีท่ งั ้ หมดของตัวแปรชุด
• index
•
billy[2] //element 3rd
billy[5] //not exist, error!
3
Declaring Arrays
• กำรประกำศใช้งำนตัวแปรชุด จะอยูใ่ นรูปแบบต่อไปนี้
type identifier[size];
- ชนิดของข้อมูลทีต่ วั แปรชุดจัดเก็บ เช่น int,long,double,char
identifier - ชื่อของตัวแปรชุดซึง่ เป็ นไปตำมกฎกำรตัง้ ชื่อ
size - คือขนำดหรือจำนวนสมำชิก (element) ทีต
่ วั แปรชุดจะจัดเก็บได้
• type
•
•
• เป็ นค่ำคงทีซ่ ง่ึ เป็ นจำนวนเต็มทีม่ ำกกว่ำศูนย์
• Examples:
• int billy[5];
• double scores[30], weights[45];
• char name[50];
4
Initializing Arrays
• กำรกำหนดค่ำเริม่ ต้นให้ตวั แปรชุด สำมำรถทำได้หลำยลักษณะ
• ใช้เพียงชุดคำสังเดี
่ ยว (single statement)
int billy[5] = { 16, 2, 77, 40, 12071 };
• จำนวนข้อมูลทีร่ ะบุตอ้ งไม่เกินกว่ำขนำดของตัวแปรชุดทีก่ ำหนดไว้ก่อนหน้ำ
int billy[] = { 16, 2, 77, 40, 12071 };
• หำกไม่ระบุขนำด ตัวแปรชุดทีไ่ ด้จะมีขนำดเท่ำกับจำนวนข้อมูลทีร่ ะบุ
• กำรกำหนดค่ำเริม่ ต้นต่อไปนี้มผี ลเหมือนกัน
int billy[5] = { 1, 1, 1, 1, 1 };
int billy[] = { 1, 1, 1, 1, 1 };
int billy[5] = {1};
5
Initializing Arrays
• กำรกำหนดค่ำเริม่ ต้นให้ตวั แปรชุด (ต่อ)
• ใช้กำรวนลูปกำหนดค่ำทีล่ ะตำแหน่ง (iterative assignment)
double billy[5];
for (int i=0; i<5; i++) {
billy[i] = 2*i+1;
}
• ค่ำของตัวแปรชุด billy ภำยหลังกำรกำหนดค่ำ
index
0
1
2
3
4
value
1
3
5
7
9
6
Accessing Arrays
• กำรใช้งำนตัวแปรชุด
• สำมำรถใช้งำนสมำชิกของตัวแปรชุดแต่ละตัวได้เหมือนกับตัวแปรทัวไป
่
• ค่ำของตัวแปร billy ก่อนมีกำรเปลีย่ นแปลง
index
0
1
2
3
4
value
1
3
5
7
9
int data = billy[4];
billy[3] = billy[2]++;
billy[0] = billy[data%2]+10;
//
//
//
//
data=9
billy[3]=5,
billy[2]=6
billy[0]=13
• ค่ำของตัวแปร billy หลังจำกกำรประมวลผลคำสังด้
่ ำนบน
index
0
1
2
3
4
value
13
3
6
5
9
7
Example
• Example 9.1: กำรกำหนดค่ำ และกำรดึงค่ำจำกตัวแปรชุด
8
Example
• Example 9.2: กำรหำผลรวมของข้อมูลในตัวแปรชุด
9
Example
• Example 9.3: กำรรับค่ำข้อมูลเพือ่ เก็บในตัวแปรชุด
10
C-Style Character String
• ตัวแปรชุดสำมำรถนำใช้กบั อักขระ เพือ่ สร้ำงเป็ นตัวแปรเพือ่ ใช้จดั เก็บ
ข้อควำม (string) ในรูปแบบภำษำ C ได้ เช่น
char greeting[] = “Hello”;
หรือ
char greeting[6] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘\0’};
เป็ นตัวแปรชุดทีเ่ ก็บข้อควำม “Hello”
• greeting มีสมำชิกเป็ นอักขระทัง้ หมด 6 ตัว โดยมีอก
ั ขระพิเศษปิดท้ำย
• อักขระพิเศษทีใ่ ช้ในกำรปิ ดท้ำย string คือ อักขระนัล (Null Character) – ‘\0’
• greeting
• Null-terminated string
• ค่ำของตัวแปรในหน่วยควำมจำ
index
0
1
2
3
4
5
value
‘H’
‘e’
‘l’
‘l’
‘o’
‘\0’
11
C-Style Character String
• C++ มีชุดคำสังเพื
่ อ่ ใช้ในกำรประมวลผลข้อควำมในรูปแบบภำษำ C
หลำยชุดคำสังให้
่ เลือกใช้งำน
• ชุดคำสังเหล่
่ ำนี้ถูกจัดเก็บอยูใ่ น header file ชื่อ cstring
• ต้องมีกำร #include <cstring> เพือ่ ให้สำมำรถใช้ชุดคำสังต่
่ อไปนี้ได้
- คัดลอกค่ำข้อควำมใน s2 ไปเก็บไว้ใน s1
strcat(s1, s2); - เอำข้อควำมใน s2 ไปต่อท้ำยข้อควำม s1
strlen(s1); - หำควำมยำวของข้อควำม s2 ไม่รวม ‘\0’
strcpy(s1, s2);
12
Example
• Example 9.4: กำรประมวลผลข้อควำม
13
C++ Strings
• กำรใช้งำนข้อควำมในรูปแบบภำษำ C++ ด้วยตัวแปรชนิด string
• ต้องมีกำร #include <string> เสียก่อน
14
Example: C++ Strings
• Example 9.5: นำข้อมูลเข้ำตัวแปรชุดชนิด string
15
Multi-dimensional Arrays
• C++ รองรับตัวแปรชุดทีม่ ห
ี ลำยมิติ โดยจะประกำศตัวแปรอยูใ่ นรูปแบบ
type identifier[size1] [size2]...[sizeN];
- ชนิดของข้อมูลทีต่ วั แปรชุดจัดเก็บ
• identifier - ชื่อของตัวแปรชุดซึง
่ เป็ นไปตำมกฎกำรตัง้ ชื่อ
• size1 - คือขนำดหรือจำนวนสมำชิก (element) ในมิตท
ิ ่ี 1
• size2 - คือขนำดหรือจำนวนสมำชิก (element) ในมิตท
ิ ่ี 2
• sizeN - คือขนำดหรือจำนวนสมำชิก (element) ในมิตท
ิ ่ี N
• type
• Examples:
// ตัวแปรชุด 3 มิติ สำหรับจัดเก็บจำนวนเต็ม
// ตัวแปรชุด 2 มิติ สำหรับจัดเก็บ 3 ข้อควำม
// แต่ละข้อควำมยำวไม่เกิน 20 อักขระ เมือ่ รวม ‘\0’
• int threedim[3][6][4];
• char names[3][20];
16
Two-Dimensional Arrays
• กำรประกำศตัวแปรชุดเพือ่ จัดเก็บจำนวนเต็มแบบ 2 มิติ ทีม่ ขี นำด x, y
จะเป็ นไปตำมโค้ดต่อไปนี้
int identifier[x][y];
• เรำสำมำรถมองตัวแปรชุด 2 มิตดิ งั กล่ำว ให้อยูใ่ นรูปของตำรำง (table)
โดยมีคำ่ x คือจำนวนบรรทัด (row) และ y คือจำนวนคอลัมน์ (column)
• Example:
int a[3][4];
http://www.tutorialspoint.com/cplusplus/cpp_multi_dimensional_arrays.htm
17
Initializing Two-Dimensional Arrays
• กำรกำหนดค่ำเริม่ ต้นใหัตวั แปรชุด 2 มิติ ทำได้หลำยลักษณะ
• อำศัยวงเล็บปี กกำช่วยในกำรระบุขอบเขตของแต่ละแถว (row)
• แม้ไม่มวี งเล็บปี กกำทีใ่ ช้ระบุขอบเขตของแต่ละแถว ก็ยงั ได้ผลลัพธ์แบบเดียวกัน
• มีคำ่ เท่ำกันกับกำรกำหนดค่ำต่อไปนี้ ซึง่ ทำเสมือนว่ำเป็ นกำรกำหนดค่ำให้กบั
ตัวแปรชุด 1 มิติ
a
Col 0
Col 1
Col 2
Col 3
Row 0
0
1
2
3
Row 1
4
5
6
7
Row 2
8
9
10
11
18
Example: Two-Dimensional Array
• Example 9.6: กำรใช้งำนตัวแปร 2 มิติ
19
Summary
• ตัวแปรชุด คือกลุ่มของหน่วยควำมจำทีอ่ ำ้ งอิงด้วยชื่อ (identifier)
เดียวกัน และจัดเก็บชนิดข้อมูล (data type) เดียวกัน
• สมำชิกแต่ละตัวของตัวแปรชุดสำมำรถอ้ำงอิงได้ดว้ ยรูปแบบคือ
identifier[index]
มีคำ่ เริม่ ต้นที่ 0 เสมอ และมีคำ่ มำกทีส่ ดุ คือ n-1 เมือ่ n คือจำนวน
สมำชิกทัง้ หมด
• index
• นิยมใช้งำนร่วมกับกำรทำซ้ำ (iteration) โดยอำศัยลูปชนิดต่ำงๆ
• ข้อควำมในรูปแบบภำษำ C จะอำศัยตัวแปรชุดแบบอักขระ (char)
• ขนำดของตัวแปรชุดต้องมำกพอทีจ่ ะเก็บข้อควำมทีต่ อ้ งกำร + ‘\0’
• ก่อนใช้งำนชุดคำสัง่ strcpy, strcat, strlen
ต้อง #include <cstring>
20
Summary
• ข้อควำมในรูปแบบภำษำ C++ จะใช้ตวั แปรชนิด string
• ต้อง #include <string> ก่อนใช้งำน
• กำรคัดลองข้อควำมจะใช้ operator ‘=‘ (string copy)
• กำรต่อข้อควำมจะใช้ operator ‘+’ (string concatenation)
• ควำมยำวของข้อควำมทีจ่ ดั เก็บใช้คำสังในรู
่ ปแบบ
string_identifier.size()
• ตัวแปรชุดสำมำรถมีได้หลำยมิติ โดยสำหรับวิชำนี้จะมีมำกที่สดุ เพียง 2 มิติ
• ตัวแปรชุด 2 มิติ เปรียบเทียบได้กบั ตำรำง (table) ข้อมูลทีแ่ ต่ละช่องในตำรำงจะถูก
อ้ำงอิงในรูปแบบ
identifier[x][y]
• โดย x เป็ น index ทีใ่ ช้ระบุแถว (row) และ y เป็ น index ทีใ่ ช้ระบุคอลัมภ์ (column)
21
Lab
• Lab 9.1 – เขียนโปรแกรมเพือ่ รับค่ำข้อควำมจำกผูใ้ ช้ และให้โปรแกรมแสดง
ข้อควำมดังกล่ำวแบบย้อนกลับบนหน้ำจอ เช่นเมือ่ ผูใ้ ช้ป้อนข้อควำม “Computer”
โปรแกรมจะแสดงผล “retupmoC”
• Lab 9.2 – ปรับปรุงโปรแกรมจำก 9.1 ให้แสดงจำนวนของสระในภำษำอังกฤษ
a, e, i, o, u (ทัง้ ตัวเล็กและตัวใหญ่) ทีป่ รำกฎอยูภ่ ำยในข้อควำมทีผ่ ูใ้ ช้ป้อน และ
แสดงผลลัพธ์ทไ่ี ด้จำกกำรเอำข้อควำมย้อนกลับ มำต่อด้วยข้อควำมทีผ่ ู้ใชป้อน
22
Lab
• Lab 9.3 – เขียนโปรแกรมเพือ่ รับค่ำข้อมูลคะแนนสอบของนศ.จำนวน N คน
แล้วคำนวณหำ สูงสุด ต่ำสุด ค่ำเฉลีย่ และส่วนเบีย่ งเบนมำตรฐำน
• กำหนดให้ N มีคำ่ ไม่เกิน 20
• ให้เก็บค่ำคะแนนสอบซึง่ อยูร่ ะหว่ำ 0-100 ลงในตัวแปรชุด
• ส่วนเบีย่ งเบนมำตรฐำน (Standard Deviation:σ) คำนวณได้จำกสมกำร
1 N
2
s=
(x
x
)
å
i
N i=1
โดยที่
• N คือจำนวนข้อมูล
• Xi คือข้อมูลแต่ละตัว
• X-bar คือค่ำเฉลีย่ ของข้อมูลทัง้ หมด
23
Lab
• Lab 9.4 – ให้แก้ไขโปรแกรมทีไ่ ด้จำก 9.3 เพือ่ ให้สำมำรถรับข้อมูลคะแนน
สอบของ 3 วิชำ ของนศ.จำนวน N คน แล้วแสดงค่ำสูงสุด ต่ำสุด ค่ำเฉลีย่
และส่วนเบีย่ งเบนมำตรฐำน ของแต่ละวิชำ
• กำหนดให้ N มีคำ่ ไม่เกิน 20
• ใช้ตวั แปรชุด 2 มิติ เพือ่ เก็บคะแนนทัง้ หมด
24