บทที่ 6 Arrays - PSU
บทที่ 6 อาร์เรย์
Arrays
Objectives (จุดประสงค์)
1. เพื่อให้สามารถใช้งานตัวแปรประเภทอาร์เรย์ได้
Outline (โครงร่าง)
1. ตัวแปรอาร์เรย์ แบบ 1 มิติ
2. การให้ค่าเริ่มต้น
3. การส่งผ่านอาร์เรย์
4. ตัวแปรอาร์เรย์แบบ 2 มิติ
5. ความผิดพลาดของโปรแกรมทั่วไปเกี่ยวกับอาร์เรย์
6. บทสรุป
การเขียนโปรแกรมสำหรับบางกรณี เราจำเป็นที่จะต้องประกาศตัวแปรที่เป็นข้อมูลชนิดเดียวกันหลายๆ ตัวเพื่อใช้ในการเก็บกลุ่มของข้อมูลที่เหมือนกัน เช่น การเก็บข้อมูลอายุ และข้อมูลความสูงของนักศึกษา เป็นต้น
การเข้าถึงข้อมูลของแต่ละตัวแปรจะต้องมีการกำหนดค่าตัวแปรขึ้นใหม่เสมอ ซึ่งในบางกรณีเช่น ถ้าต้องการที่จะเก็บข้อมูลอายุของนักศึกษาทั้งมหาวิทยาลัย ซึ่งจำเป็นจะต้องมีการประกาศตัวแปรจำนวนมาก จึงเป็นปัญหาในการเขียนโปรแกรม ในภาษาซีจึงได้มีการกำหนดรูปแบบของข้อมูลอีกชนิดหนึ่งเพื่อให้สามารถมีการประกาศตัวแปรแบบเดียวกันหลายๆ ตัวพร้อมกันได้ โดยจัดอยู่ในบล็อกของหน่วยความจำเดียวกันและมีการจัดเรียงของข้อมูลแต่ละตัวกันอย่างต่อเนื่อง และใช้ชื่อตัวแปรร่วมกันในการอ้างอิงถึง ซึ่งเรียกข้อมูลแบบนี้ว่า อาร์เรย์ (Array)
ลักษณะสำคัญของอาร์เรย์คือการรวบรวมข้อมูลแบบเดียวกันไว้ด้วยกัน โดยข้อมูลแต่ละตัวของอาร์เรย์จะเรียกว่า อีลีเมนต์ (Element) ข้อมูลแต่ละอีลีเมนต์จะมีหมายเลขเพื่อใช้ในการอ้างอิงถึงเรียกตัวเลขนี้ว่า เลขดัชนี (Index) ดังนั้นในการอ้างอิงถึงข้อมูลแบบอาร์เรย์จึงทำได้โดยการระบุชื่อของอาร์เรย์นั้นๆ ประกอบกับค่าเลขดัชนี เพื่อให้สามารถเข้าถึงอีลีเมนต์ที่เก็บข้อมูลภายในอาร์เรย์นั้นๆ ได้
1 ตัวแปรอาร์เรย์แบบ 1 มิติ
ตัวแปรแบบอาร์เรย์ ที่ใช้ในการเก็บข้อมูลโดยมีการอ้างอิงที่ใช้เลขดัชนีเพียงหนึ่งค่าจะเรียกว่า ตัวแปรแบบอาร์เรย์ 1 มิติ เช่น การเก็บข้อมูลคะแนน ที่อ้างอิงด้วยรหัสนักศึกษา
ตัวอย่าง
int age[10];
เป็นการประกาศตัวแปรแบบอาร์เรย์เพื่อเก็บข้อมูลอายุ เมื่อต้องการเก็บข้อมูลอายุของนักศึกษาคนที่ 1 สามารถทำได้ดังนี้
age[1] = 18;
การประกาศ ตัวแปรอาร์เรย์
การประกาศตัวแปรแบบอาร์เรย์สามารถทำได้คล้ายกับการประกาศตัวแปรอื่นๆ ทั่วไป โดยการกำหนดซื่อของตัวแปร ชนิดของข้อมูล และขนาดของข้อมูล ตัวอย่างเช่น
int grades[5]; /* Array ขนาด 5 ของ int */
เป็นการประกาศตัวแปรแบบอาร์เรย์ 1 มิติชื่อ grades ให้เป็นข้อมูลแบบอักษรโดยมีขนาดเท่ากับ 5 อีลีเมนต์ ซึ่งการประกาศตัวแปรนี้จะจองหน่วยความจำเท่ากับ 2 byte * 5 = 10 byte
char codes[5]; /* Array ขนาด 5 ของ char */
การประกาศตัวแปร codes จะใช้หน่วยความจำเท่ากับ 1 byte * 5 = 5 byte
float prices[100]; /* Array ขนาด 100 ของ float */
การประกาศตัวแปร price จะใช้หน่วยความจำเท่ากับ 4 byte * 100 = 400 byte
ตัวอย่าง
แสดงค่าข้อมูลที่เก็บในตัวแปรอาร์เรย์ 3 ตัว คือ grade code และ price
|อีลีเมนต์ที่ |grades |sex |prices |
|0 |A |Male |10.96 |
|1 |B |Female |6.43 |
|2 |C | |58 |
|3 |D | |0.86 |
|4 |E | |45.00 |
ในการเข้าถึงแต่ละอีลีเมนต์สามารถกระทำได้โดยการระบุค่าดัชนี (Index)
grades[0] อ้างถึงค่า grades แรกที่เก็บใน grades array
grades[1] อ้างถึงค่า grades ลำดับที่สองที่เก็บใน grades array
grades[2] อ้างถึงค่า grades ลำดับที่สามที่เก็บใน grades array
grades[3] อ้างถึงค่า grades ลำดับที่สี่ที่เก็บใน grades array
grades[4] อ้างถึงค่า grades ลำดับที่ห้าที่เก็บใน grades array
[pic]
รูปที่ 6.1 แสดงการเก็บข้อมูล grades ในหน่วยความจำ
ในการอ้างอิงข้อมูลในอาร์เรย์ ค่าดัชนีที่ใช้ในการอ้างอิงจะเริ่มต้นที่ 0 เสมอทั้งนี้เพื่อให้การเข้าถึงข้อมูลมีความรวดเร็วขึ้น จากรูปที่ 6.3 จะเห็นว่าค่าดัชนีจะเป็นตัวอ้างอิงถึงข้อมูลแต่ละอีลีเมนต์การเข้าถึงข้อมูลสามารถทำได้โดยการเลื่อนตำแหน่งของค่าดัชนีเพื่อไปยังอีลีเมนต์ต่างๆ ที่ต้องการ โดยเริ่มต้องจากตำแหน่งแรก จากตัวอย่างจะเป็นการเลื่อนตำแหน่งไปที่อีลีเมนต์ตัวที่ 3 นั่นเอง
[pic]รูปที่ 6.2 แสดงการเข้าถึงข้อมูลของอาร์เรย์ อีลีเมนต์ที่ 3
ตัวแปรอาร์เรย์สามารถใช้งานได้เหมือนกับตัวแปรทั่วไป ตัวอย่างการใช้งานตัวแปร grades ที่เป็นอาร์เรย์ของจำนวนเต็ม 5 ตัว
grades[0] = 98;
grades[1] = grades[0] – 11;
grades[2] = 2 * (grades[0] – 6);
grades[3] = 79;
grades[4] = (grades[2] + grades[3] – 3) / 2;
total = grades[0] + grades[1] + grades[2] + grades[3] + grades[4];
ค่าตัวเลขอีลีเมนต์ไม่จำเป็นต้องเป็นตัวเลขโดยตรง อาจเป็นตัวแปร หรือพจน์ของการกระทำที่ได้เป็นจำนวนเต็มก็ได้เช่น
grades[i]
grades[2*i]
grades[j-i]
ประโยชน์ที่เห็นได้ชัดอีกอย่างของการใช้พจน์ของจำนวนเต็มแทนการกำหนดค่าคงที่คือการใช้ร่วมกับการวนลูป for เช่น
total = grades[1] + grades[2] + grades[3] + grades[4] + grades[5];
เปลี่ยนเป็น
total = 0;
for ( i = 0; i ................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.