สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี แถวลำดับ (Array) สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
ความหมาย ตัวแปรเดี่ยว int a; ตัวแปรชุด (หรือแถวลำดับ หรือ อาร์เรย์) ? a a 1 2 3 9 8 ตัวแปร a จะเก็บค่าของข้อมูลได้ 10 ค่า ใช้ index เพื่อระบุตำแหน่ง เช่น a[3] หมายถึง ตัวแปร a ตำแหน่งที่ 3
ความหมาย อาร์เรย์ คือ แถว หรือ ลำดับของข้อมูลชนิดเดียวกันที่มีจำนวนหลายตัว นำมาเก็บในตัวแปรชื่อเดียวกัน แต่ต่างกันที่ตัวบอกลำดับ ซึ่งเรียกว่าตัวห้อย หรือ subscript ของตัวแปรนั้น ข้อสังเกต Subscript มักเริ่มต้นด้วย 0 ตัวเลขในเครื่องหมาย [ ] ตอนประกาศตัวแปร จะหมายถึงจำนวนสมาชิก ส่วนการนำตัวแปรไปใช้งานตัวเลขในเครื่องหมาย [ ] จะหมายถึงลำดับที่ของสมาชิก Subscript อาจเป็นตัวแปรได้ มักใช้ loop ช่วยในการทำงานกับอาร์เรย์
ตัวอย่างการนำไปใช้ เขียนโปรแกรมเพื่อคำนวณคะแนนเฉลี่ยของนักเรียน 10 คน และให้แสดง คะแนนที่มีค่าเท่ากับคะแนนเฉลี่ยขึ้นไป การหาค่าเฉลี่ย จำเป็นต้องรู้จำนวนข้อมูล และค่าของข้อมูลทุกตัว การแสดงผลเฉพาะนักเรียนที่มีคะแนนเท่ากับค่าเฉลี่ย จำเป็นต้องเก็บข้อมูลทุกตัวไว้ เขียนโปรแกรมเพื่อเรียงลำดับเลข 20 จำนวน ต้องรับตัวเลขให้ครบทุกจำนวนก่อน จึงจะทำการเรียงลำดับได้ a 1 2 3 9 8
การประกาศตัวแปรแบบอาร์เรย์ รูปแบบ ชนิดตัวแปร ชื่อตัวแปร[จำนวนช่องที่เก็บข้อมูล]; int n[10]; หมายถึง กำหนดให้อาร์เรย์ n เป็นตัวแปรชุด ชนิดเลขจำนวน เต็มที่สามารถเก็บข้อมูลได้ 10 ตัว โดยกำหนดค่าเริ่มต้นให้ อาร์เรย์ n[0], n[1], .., n[9] ตามลำดับ int x[5]={10,20,30,40,50}; หมายถึง กำหนดให้อาร์เรย์ x เป็นตัวแปรชุด ชนิด เลขจำนวนเต็ม ที่สามารถเก็บข้อมูลได้ 5 ตัว โดยกำหนดค่า เริ่มต้นให้อาร์เรย์ x[0],x[1], .., x[4] เป็น 10, 20, 30, 40 และ 50 ตามลำดับ char name[30]; หมายถึง กำหนดให้อาร์เรย์ name เป็นตัวแปรชุดชนิด ข้อความที่สามารถเก็บข้อมูลได้ 29 ตัวอักษร โดยที่ข้อมูล ตำแหน่งที่ 30 จะเก็บ \0
ตัวแปรชุด 1 มิติ (One Dimension Array) คือตัวแปรอาร์เรย์ที่ใช้เก็บข้อมูลเป็นกลุ่ม ที่มีลักษณะตำแหน่งที่ตั้งเป็นลักษณะแถวเดียว หรือ คอลัมน์เดียว เช่น ประกาศ float x[7] จะแสดงได้ดังรูป X[0] X[1] X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[2] X[3] X[4] X[5] X[6]
ตัวแปรชุด 1 มิติ (One Dimension Array) ตัวอย่าง int a[10]; หมายถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำให้สำหรับตัวแปร a เป็นตัวแปรชุดชนิดจำนวนเต็มแบบ 1 มิติ มีจำนวนสมาชิก 10 ตัว โดยในหน่วยความจำจะเตรียมที่ไว้ให้ 2 ไบท์ สำหรับสมาชิกแต่ละตัว ดังนี้ a[0] a[1] a[2] a[9] .... 1000 1001 1002 1003 1004 1005 ? ?
ตัวอย่างการใช้อาร์เรย์ 1 มิติ Begin End n [ ] ]= 10 1 20 2 30 #include <stdio.h> #include <conio.h> void main(void) { int n[3]; clrscr(); n[0]=10; n[1]=20; n[2]=30; printf("Array[0] = %d\n",n[0]); printf("Array[1] = %d\n",n[1]); printf("Array[2] = %d\n",n[2]); }
ตัวอย่างการใช้อาร์เรย์ 1 มิติ #include <stdio.h> #include <conio.h> void main(void) { int n[3]={10,20,30}; clrscr(); printf("Array[0] = %d\n",n[0]); printf("Array[1] = %d\n",n[1]); printf("Array[2] = %d\n",n[2]); } อาร์เรย์ ลำดับที่ (Index) 0 1 2 10 20 30
ตัวอย่างการใช้อาร์เรย์ 1 มิติร่วมกับโครงสร้างการทำงานซ้ำ #include <stdio.h> #include <conio.h> void main(void) { int n[3]={10,20,30}; int i; clrscr(); for(i=0;i<=2;i++) printf("Array[%d] = %d\n",i,n[i]); }
อาร์เรย์หลายมิติ แถว แถว ระนาบ คอลัมน์ คอลัมน์
อาร์เรย์ 2 มิติ คณะ ปี 1 ปี 2 ปี 3 ปี 4 ครุศาสตร์ 120 90 80 ลักษณะปัญหาที่ข้อมูลอยู่ในรูป 2 มิติ ได้แก่ ข้อมูลจำนวนนักศึกษาของสถาบันซึ่งมี 5 คณะวิชา แต่ละคณะวิชามี 4 ชั้นปี มีลักษณะการเก็บข้อมูลดังรูป คณะ ปี 1 ปี 2 ปี 3 ปี 4 ครุศาสตร์ 120 90 80 มนุษยศาสตร์ 150 130 110 วิทยาศาสตร์ วิทยาการจัดการ เกษตรศาสตร์ 40 30 20
อาร์เรย์ 2 มิติ จำนวนแถวของข้อมูล (คณะ) จำนวนชั้นปีของแต่ละคณะ การประกาศตัวแปรเพื่อเก็บข้อมูลดังกล่าว ทำได้โดย int stud[5][4] จำนวนแถวของข้อมูล (คณะ) จำนวนชั้นปีของแต่ละคณะ stud[0][0] stud[0][1] stud[0][2] stud[0][3] stud[1][0] stud[1][1] stud[1][2] stud[1][3] stud[2][0] stud[2][1] stud[2][2] stud[2][3] stud[3][0] stud[3][1] stud[3][2] stud[3][3] stud[4][0] stud[4][1] stud[4][2] stud[4][3]
อาร์เรย์ 2 มิติ Stud[0][0] stud[0][1] Stud[0][2] Stud[0][3] stud[1][0] การประกาศตัวแปรเพื่อเก็บข้อมูลดังกล่าว ทำดังนี้ stud[5][4] Stud[0][0] stud[0][1] Stud[0][2] Stud[0][3] stud[1][0] stud[1][1] stud[1][2] stud[1][3] stud[2][0] stud[2][1] stud[2][2] stud[2][3] stud[3][0] stud[3][1] stud[3][2] stud[3][3] stud[4][0] stud[4][1] stud[4][2] stud[4][3]
อาร์เรย์ 3 มิติ หลักสูตรที่ 3 ปี 1 ปี 2 ปี 3 ปี 4 ครุศาสตร์ 157 109 200 79 มนุษยศาสตร์ 150 120 130 110 วิทยาศาสตร์ 90 80 วิทยาการจัดการ เกษตรศาสตร์ 40 30 20 หลักสูตรที่ 2 ปี 1 ปี 2 ปี 3 ปี 4 ครุศาสตร์ 155 88 75 99 มนุษยศาสตร์ 150 120 130 110 วิทยาศาสตร์ 90 80 วิทยาการจัดการ เกษตรศาสตร์ 40 30 20 หลักสูตรที่ 1 ปี 1 ปี 2 ปี 3 ปี 4 ครุศาสตร์ 120 90 80 มนุษยศาสตร์ 150 130 110 วิทยาศาสตร์ วิทยาการจัดการ เกษตรศาสตร์ 40 30 20
จากตัวอย่าง การประกาศตัวแปร ทำได้ดังนี้ int stud[3][5][4] อาร์เรย์ 3 มิติ จากตัวอย่าง การประกาศตัวแปร ทำได้ดังนี้ int stud[3][5][4] จำนวนหลักสูตร จำนวนชั้นปี จำนวนคณะ
ตัวอย่าง 1 เขียนอัลกอริทึมหาค่าเฉลี่ยคะแนนนักเรียน n คน และแสดงคะแนนของนักเรียนที่สอบผ่าน (มีคะแนนตั้งแต่คะแนนเฉลี่ยขึ้นไป) วิเคราะห์โจทย์ รับจำนวนข้อมูล (n) รับคะแนน n คน หาค่าเฉลี่ย แสดงเฉพาะคนที่ได้คะแนนตั้งแต่ค่าเฉลี่ยขึ้นไป
ตัวอย่าง Input : n, sc[n] 4. i=1 Output : avg, sc[i] Process : 1. รับค่า n 2. sum = 0, avg = 0, i = 1 3. ตรวจสอบ (i<=n) ใช่หรือไม่ ใช่ รับ sc[i] sum = sum+ sc[i] i = i+1 กลับไปทำข้อ 3 ไม่ใช่ avg = sum / n 4. i=1 5. ตรวจสอบ (i<=n) ใช่หรือไม่ ใช่ ตรวจสอบ (sc[i]>avg) ใช่หรือไม่ ใช่ แสดง sc[i] i = i + 1 กลับไปทำข้อ 5
แบบฝึกหัด จากสูตรคำนวณหาเงินฝากทบต้น มีดังนี้ เงินฝากทบต้น = เงินต้น x ( 1 + อัตราดอกเบี้ย ) จำนวนปี จงเขียนโปรแกรมป้อนเงินต้น ดอกเบี้ย และจำนวนปีที่ฝาก แล้วพิมพ์ ผลลัพธ์เงินฝากทบต้น ตั้งแต่ปีแรก จนถึงปีสุดท้าย ดังนี้ ปีที่ เงินฝากทบต้น ## #####.## ## #####.##