อาร์เรย์ (Array)
การเก็บข้อมูลด้วยอาร์เรย์ float Grade_student1 = 2.12; float Grade_student2 = 3.62; float Grade_student3 = 0.89; ถ้าสมมติว่ามีนักศึกษา 1000 คน? อาร์เรย์ (Array) คือ รูปแบบการเก็บข้อมูล ที่สามารถเก็บข้อมูลได้หลาย ค่า โดยใช้ตัวแปรเพียงตัวเดียว โดยที่ค่าต่างๆ เหล่านี้ มีชนิดข้อมูลแบบ เดียวกัน สมาชิก (Element) คือ ข้อมูลที่ถูกเก็บอยู่ภายในอาร์เรย์ คีย์ หรือ อินเด็กซ์ (Index) คือ ค่าที่ใช้ระบุตำแหน่งสมาชิกในอาร์เรย์ (เป็น integer เท่านั้น)
1. การประกาศข้อมูลชนิดอาร์เรย์ มีรูปแบบดังนี้ Array_Type Array_name[amount of element]; โดยที่ Array_Type คือ ชนิดข้อมูล (data type) ในอาร์เรย์ เช่น int, char, float, double Array_name คือ ชื่อของตัวแปรอาร์เรย์ [amount of element] คือ จำนวนสมาชิกของอาร์เรย์
1.1 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (ในแต่ละอินเด็กซ์) ตัวอย่าง : int score[10]; //ประกาศตัวแปรชื่อ score เพื่อเก็บข้อมูลคะแนน //นักศึกษา จำนวน 10 ข้อมูล โดยทั้ง 10 ข้อมูลมี //ชนิดเป็นจำนวนเต็ม score[0] = 20; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 0 มีค่า 20 score[1] = 25; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 1 มีค่า 25 score[2] = 15; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 2 มีค่า 15 … score[9] = 26; //กำหนดค่าให้อาร์เรย์อินเด็กซ์ที่ 9 มีค่า 26
1.2 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (ทุกอินเด็กซ์พร้อมกัน) การกำหนดค่าของอาร์เรย์ทั้งหมด โดยระบุจำนวนสมาชิก หรือไม่ระบุก็ได้ หรือ กำหนดสมาชิกไม่ครบก็ได้ ดังนี้ int score[10] = { 20,25,30,26,24,18,17,25,24,22}; int score[ ] = { 20,25,30,26,24,18,17,25,24,22}; int score[10] = {20,25,30}
1.3 การประกาศและกำหนดค่าข้อมูลชนิดอาร์เรย์ (กำหนดค่าจากตัวแปร) การกำหนดค่าให้อาร์เรย์จากตัวแปร เช่น int score[10]; int x = 20, y = 26; score[0] = x; score[9] = y;
2. การอ้างถึงสมาชิกและข้อมูลในอาร์เรย์ การอ้างถึงแต่ละสมาชิกของอาร์เรย์ เพื่อเข้าไปใช้งานค่า ทำได้โดยการเขียนชื่อของ อาร์เรย์และใส่อินเด็กซ์ของสมาชิกไว้ใน [ ] โดยอินเด็กซ์เริ่มตั้ง 0 ถึง n-1 (n คือ จำนวนสมาชิกของอาร์เรย์ทั้งหมด) เช่น cout << score[9] + score[8] ; score[4] = score[3]+ score[2]; cout << score[4]; ถ้าอ้างถึงสมาชิกอาร์เรย์เกินขอบเขตจะเกิดอะไรขึ้น? เช่น score[10]
3. การรับข้อมูลทางคีย์บอร์ดเก็บไว้ในอาร์เรย์ สามารถใช้คำสั่งวนลูปเพื่อรับค่าคงที่เข้าไปเก็บไว้ในอาร์เรย์แต่ละสมาชิกโดยใช้ลูป for, while , do เช่น จงเขียนคำสั่งในการรับค่าเลขจำนวนเต็ม 10 จำนวนจากผู้ใช้แล้วเก็บไว้ในอาร์เรย์ int score[10]; for (int i=0 ; i<=9; i++) { cin >> score[i]; }
3. การรับข้อมูลทางคีย์บอร์ดเก็บไว้ในอาร์เรย์ (ต่อ) จงเขียนคำสั่งในการรับค่าเลขจำนวนเต็ม 10 จำนวนจากผู้ใช้แล้วเก็บไว้ในอาร์เรย์ แล้วหาผลรวมของค่าทุกค่าที่ผู้ใช้กรอกเข้ามา แล้วแสดงผลลัพธ์ออกหน้าจอ int score[10]; int total=0; for (int i=0 ; i<=9; i++) { cin >> score[i]; total = total + i; } cout << “ผลลัพธ์คือ ” << total;
4. การแสดงผลข้อมูลอาร์เรย์ สามารถแสดงผลข้อมูลในอาร์เรย์แต่ละสมาชิกได้ โดยการอ้างชื่อและอินเด็กซ์ สามารถใช้ลูป for , while ,do เพื่อแสดงผลข้อมูลในอาร์เรย์ทั้งหมดได้ เช่น for(i=0;i<=9;i++) { cout << score[i] << endl; }
5. ตัวอย่าง
6. ตัวอย่าง #include <iostream> using namespace std; int main() { int age[5] = {20,4,7,9,100}; int min = age[0]; for (int i=0 ; i<5; i++) { cout << age[i] <<endl; if (age[i] < min) { min = age[i]; } cout << "Min age = "<< min <<endl; system("pause"); return 0;
7. การจองพื้นที่ในหน่วยความจำ การจองพื้นที่หน่วยความจำ ของอาร์เรย์จะจองพื้นที่ในหน่วยความจำต่อเนื่องกันไป ตั้งแต่สมาชิกเริ่มต้นตัวที่ 0 จนถึงตัวสุดท้าย ถ้าคะแนนที่เก็บเป็นข้อมูลชนิด int จะจองพื้นที่หน่วยความจำทั้งหมดเท่าไร่? ต้องคิดว่าคะแนน 1 ข้อมูล ใช้กี่ไบต์ แล้วคิดว่าถ้าคะแนนข้อมูลทั้งหมด จะใช้กี่ไบต์ สมมติว่า address เริ่มต้น score[0] คือ 0x5002 แล้ว address ของ score[9] อยู่ตำแหน่งใด
แบบฝึกหัด 1.1 สร้างตัวแปรอาร์เรย์ขึ้นมาเพื่อเก็บค่าเกรดเฉลี่ยของนักศึกษาจำนวน 5 คน โดยวนลูป ให้ผู้ใช้กรอกข้อมูลเกรดเฉลี่ยผ่านทางคีย์บอร์ด แล้ววนลูปแสดงข้อมูลเกรดเฉลี่ยผ่าน ทางหน้าจอ
แบบฝึกหัด 1.2 ต่อมาให้ตรวจสอบว่าเกรดเฉลี่ยที่มากที่สุดคือ เกรดเฉลี่ยใด
แบบฝึกหัด 1.3 เพิ่มเติมข้อมูลว่านักศึกษาคนไหนที่ได้เกรดเฉลี่ยมากที่สุด
แบบฝึกหัด 1.4 เขียนโปรแกรมเพื่อเก็บข้อมูลคะแนนสอบของนักศึกษา โดยกำหนดให้รับข้อมูล จำนวนนักศึกษาว่ามีกี่คน แล้ววนลูปรับข้อมูลคะแนนของนักศึกษาแต่ละคนผ่านทาง คีย์บอร์ด พร้อมแสดงข้อมูลผลรวมคะแนนสอบทั้งหมด และแสดงค่าเฉลี่ยคะแนน สอบที่ได้