โครงสร้างข้อมูลแบบอาร์เรย์
การกำหนด subscript แต่ละตัวจะประกอบไปด้วยค่าสูงสุดและ ค่าต่ำสุดของ subscript นั้น การประกาศค่าตัวแปรอะเรย์ ในภาษาคอมพิวเตอร์ บางภาษา เช่น
ภาษาปาสคาล var A:array[1..10] of real;
var K:array[1..5,1..10] of integer;
ภาษาซี float A[10];
int K[5] [10];
ข้อกำหนดของการกำหนดค่าต่ำสุดและค่าสูงสุดของ subscript คือ
1.ค่าต่ำสุดต้องมีค่าน้อยกว่าหรือเท่ากับค่าสูงสุดเสมอ
2.ค่าต่ำสุด เรียกว่า ขอบเขตล่าง
3.ค่าสูงสุด เรียกว่า ขอบเขตบน
ค่า subscript ที่ใช้อ้างอิงถึงสมาชิก จะต้องมีค่ามากกว่าหรือเท่ากับขอบเขตล่างและน้อยกว่า หรอเท่ากับขอบเขตบน
lower bound ≤ subscript ≤ upper bound
ขนาดของ index แต่ละตัว ของ Array หาได้จากขนาดของsubscript = upper bound - lower bound + 1
จำนวนสมาชิกหรือขนาดของอะเรย์ n มิติ หาได้จาก
ขนาดของอะเรย์ = ผลคูณของขนาดของsubscript แต่ละตัวเช่น
ขนาดของอะเรย์ A = Upper bound - lower bound+1
ขนาดของอะเรย์ K = ผลคูณของขนาดของsubscript แต่ละตัว
= (5-1+1) * (10-1+1)
= 5 * 10
= 50
การ จัดเก็บอะเรย์ในหน่วยความจำหลักจะใช้เนื้อที่ขนาดเท่ากันเพื่อเก็บสมาชิกแต่ ละตัวโดยเนื้อที่จะเรียงต่อเนื่องกันการจัดเก็บอะเรย์ในหน่วยความจำหลักจะ พิจารณาตามประเภทของอะเรย์ในมิติต่างๆดั้งนี้- อะเรย์ 1 มิติ- อะเรย์ หลายมิติ
อะเรย์ 1 มิติ
รูปแบบ
data-type array-name[expression]
data-type คือ ประเภทของข้อมูลอะเรย์ เช่น int char float
array-name คือ ชื่อของอะเรย์
expression คือ นิพจน์จำนวนเต็มซึ่งระบุจำนวน สมาชิกของอะเรย์
ตัวอย่าง char a[4]; int num[10];
char a[4];
หมาย ถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำสำหรับตัวแปร a ให้เป็นตัวแปรชุดชนิด character ขนาดสมาชิก 4 สมาชิกโดยหน่วยความจำจะเตรียมเนื้อที่ให้ 1 byte สำหรับ 1 ชื่อตัวแปร
#include#define N 5int main(void) {int i;float score[N];float total=0;printf("Number of student [%d]\n",N);for(i=0; i <>(printf("input score student[%d]",i);scanf(%f",& score[i]);total = total + score[i]);)printf("Total is % f\n",total);printf("Average is % f\n",total/N);
return 0;
คือ การกำหนดค่าเริ่มต้นให้กับอะเรย์ การกำหนดค่าให้กับตัวแปรชุดที่มีค่าเป็นตัวเลข รูปแบบ data-type array-name[n] = {value1, value2,..,value n}; ตัวอย่าง int num[5] = {1,2,3,4,5}; หรือ int num[] = {1,2,3,4,5}; float x[6] = {0,0.25,0,0.5,0,0};
การ กำหนดค่าให้กับตัวแปรชุดชนิด Characterรูปแบบchar array-name[n] =“string”;EX.char ch[9] = “SAWASDEE”;หรือ char ch[9]={‘S’,‘A’,‘W’,‘A’,‘S’,‘D’,‘E’,‘E’,‘\0’}มีการกำหนดค่าให้ตัวแปร ชุดch[0] จะเก็บค่า S ถึง ch[7] จะเก็บค่า E และ ch[8] จะเก็บค่า \0โดยอัตโนมัติเพื่อแสดงการสิ้นสุดของข้อความ
สามารถ กำหนดอะเรย์เป็นพารามิเตอร์ส่งให้กับฟังกชั่นได้ 2 ลักษณะ 1. การกำหนด array element เป็น พารามิเตอร์ส่งค่าให้กับฟังกชั่นทำได้โดยอ้างถึงชื่ออะเรย์พร้อมระบุ subscript ตัวอย่าง swap(num[2],num[3]);draw_house(color[i],x[i],y[i]);
2. ส่งอะเรย์ทั้งชุดให้ฟังกชั่นทำได้โดยอ้างถึงชื่ออะเรย์โดยไม่มี subscript ตัวอย่าง #define N 10float a[N]; float avg;avg = average(N,a);
ถ้าเป็นอะเรย์มิติเดียวสามารถทำได้ทั้งหมด 3วิธี
1.มีการประกาศขนาดของอะเรย์ที่ทำหน้าที่ในการรับค่า
2.ไม่ต้องมีการประกาศขนาดของอะเรย์ที่ทำ หน้าที่ในการรับค่า
3. ตัวแปรที่ทำหน้าที่รับค่าถูกกำหนดเป็นพอยนเตอร์
การ ส่งผ่านอะเรย์ให้กับฟังกชั่นเป็นการส่งผ่านโดยการอ้างอิง เรียกว่า Pass by reference คือ ค่าของสมาชิกแต่ละตัวจะไม่ได้ถูกส่งไปให้ฟังกชั่น แต่ชื่อของอะเรย์จะถูกมองเป็นตำแหน่งในหน่วยความจำที่ใช้เก็บสมาชิกตัวแรก ซึ่ง addressนี้จะถูกส่งให้กับอารกิวเมนต์ที่ตรงกัน ดั้งนั้น อารกิวเมนต์จึงเป็นpointer ชี้ไปยังสมาชิกตัวแรกของอะเรย์
รูปแบบtype array-name[n] [m];
type หมายถึง ชนิดของตัวแปรที่ต้องการประกาศเป็นอะเรย์ array-name หมายถึง ชื่อของตัวแปรที่ต้องการประกาศเป็น อะเรย์n หมายถึง ตัวเลขที่แสดงตำแหน่งของแถว m หมายถึง ตัวเลขที่แสดงตำแหน่งของคอลัมน์
ตัวอย่าง
char a[2][3];
col1 col2 col3
row 1 a[0][0] a[0][1] a[0][2]
row 2 a[1][0] a[1][1] a[1][2]
หมายถึง คอมพิวเตอร์จะจองเนื้อที่ในหน่วยความจำ จำนวน 6 ที่สำหรับตัวแปร aกำหนดค่าเริ่มต้นได้หลายลักษณะ
ตัวอย่าง
กำหนดค่าเริ่มต้นให้ int a[2][3]
int a[2][3] = {1,2,3,4,5,6}; หรือ
int a[2][3] = {{1,2,3},{4,5,6}}; หรือ
int a[][3] = {{1,2,3},{4,5,6}};
#include
int main(void)
int a[3][4],r,c;
for(r=0; r<=2; r++)
for(c=0;c<=3;c++)
{
printf(" Entry Number ");
scanf("%d",&a[r][c]);
}
for(r=0; r<=2; r++)
for(c=0;c<=3;c++)
{
printf("\n Display");
printf("%4d",a[r][c]);
}
return 0;
Record or Structure
เป็น โครงสร้างข้อมูลที่ประกอบขึ้นมาจากข้อมูลพื้นฐานต่างประเภทกันรวมเป็น 1ชุดข้อมูลคือ จะประกอบด้วย data element หรือ field ต่างประเภทกันอยู่รวมกันในภาษา C ก็คือการ กำหนดข้อมูลเป็นรูปแบบของ Structure
Structure คือ โครงสร้างที่สมาชิกแต่ละตัวมี ประเภทข้อมูลแตกต่างกันได้ โดยที่ใน structure อาจมีสมาชิกเป็นจำนวนเต็ม ทศนิยม อักขระ อะเรย์ หรือพอยเตอร์ หรือแม้แต่ structure ด้วยกันก็ได้
การนิยาม structure รูปแบบ struct struc-name { type name-1; type name-2; ……… type name-n; }struc-variable;
struct เป็นค่าหลักที่ต้องมีเสมอ struc-name ชื่อกลุ่ม structuretype ชนิดของตัวแปรที่อยู่ในกลุ่ม structurename-n ชื่อของตัวแปรที่อยู่ในกลุ่ม structure struc-variable ชื่อตัวแปรชนิดโครงสร้างคือ ตัวแปรที่มีโครงสร้าง เหมือนกับที่ประกาศไว้ในชื่อของกลุ่ม structureอาจมีหรือไม่มีก็ได้ถามมากกวา 1 ชื่อ แยกกันด้วยเครื่องหมายคอมมา (,)
การ ประกาศสมาชิกแต่ละตัวของ structureสมาชิกแต่ละตัวของ structure จะเป็นตัวแปรธรรมดาพอยนเตอร์อะเรย์หรือ structure ตัวอื่นก็ได้โดยชื่อของสมาชิกแต่ละตัวต้องแตกต่างกัน
struct employee {
char name[30];
int age;
float salary;
} personel;
จาก ตัวอย่าง เป็นการกำหนดให้ตัวแปร employeeเป็นชื่อของกลุ่ม structureที่ประกอบไปด้วย ตัวแปร name[30],age และ salary โดยมีตัวแปร personel เป็นตัวแปรชนิดโครงสร้างที่มีข้อมูลแบบเดียวกับตัวแปร employee
การ กำหนดให้ตัวแปรมีโครงสร้างข้อมูลเหมือนกับ structure ที่ประกาศไว้แล้วสามารถกำหนดให้ตัวแปรอื่น ๆ มีโครงสร้างข้อมูลเหมือนกับ structure ที่ประกาศไว้ได้โดยใช้คำสั่งstruct struct struc-name struc-variable;ถามหลายตัวแปรจะคั่นด้วยเครื่องหมายคอมมา ( ,)
ตัวอย่าง
structemployee {
char name[30];
int
float salary;
};
struct employee emp1, emp2;
emp1 และ emp2 เป็นตัวแปรแบบ structure
ซึ่ง มีการระบุ องค์ประกอบไว้ใน employeeเราสามารถที่จะประกาศ structureหนึ่งเป็นสมาชิกของอีก structureหนึ่งได้โดยจะต้องประกาศ structureที่จะนำไปฝั่งไว้ก่อนหน้า structure ตัวนอก
ตัวอย่าง
struct date {
int month;
int day;int year;
};
struct account {
int acct_no;
char name[30];
struct date lastpayment;
oldcustomer;
การ กำหนดค่าเริ่มต้นให้กับสมาชิกของ structureสามารถกำหนดค่าเริ่มต้นให้กับสมาชิกของ structureได้โดยค่าเริ่มต้นที่กำหนดให้กับสมาชิกตัวใด จะต้องอยู่ในตำแหน่งที่ตรงกับสมาชิกตัวนั้นค่าเริ่มต้นจะต้องอยู่ในวงเล็บ ปีกกาและข้อมูลค่าเริ่มต้นแต่ละตัวแยกกันด้วยเครื่องหมาย ,
structure account ประกอบด้วยสมาชิก ดั้งนี้
- เลขจำนวนเต็ม (int acct_no)
- อะเรย์ของอีกขระจำนวน 30 ตัว (char name[30]);
- structure date
struct date {
int month;
int day;
int year;
};
struct account
{
int acct_no;
char name[30];
struct date lastpayment;
};
struct account customer = {1234, “John Smith”, 5,24,46};
จะได้วา customer เป็นตัวแปรแบบstructure ประเภท accountมีการกำหนดค่าเริ่มต้นให้สมาชิกแต่ละตัว ดั้งนี้
acct_no มีค่าเป็นจำนวนเต็ม 1234
name[30]มีค่าเป็น string “John Smith”
month มีค่าเป็นจำนวนเต็ม 5
มีค่าเป็นจำนวนเต็ม 24
มีค่าเป็นจำนวนเต็ม 46
การอ้างถึงตัวแปรที่อยู่ในตัวแปรชนืดโครงสร้างสามารถอ้างถึงตัวแปรที่อยู่ในตัวแปรชนิด โครงสร้างได้ รูปแบบ
struct-variable.element-namestruct-variable ชื่อตัวแปรชนิดโครงสร้าง
element-name ชื่อตัวแปรที่อยู่ภายใน structure
ตัวอย่าง
struct employee {
char name[30];
char address[20];
float salary;
} personel;
จากตัวอย่าง ถ้าต้องการนำตัวแปร salary มาใช้งานก็จะอ้างถึงตัวแปร salary ได้โดย
personel.salary
ตัวอย่าง
int main(void) {
struct account {
char name[30];
char addr[30];
float salary;int age;}
new;strcpy(new.name, “somsri”);
strcpy(new.addr, “jantaburi”);
new.salary = 7500;new.age= 35;
printf(“Name: %s\n Address: %s\n Salary : %.2f\n Age : %d\n”,new.name,new.addr,new.salary,new.age);
return 0;
}
อะเรย์ชนิดโครงสร้าง
รูปแบบ struct struc-name {
type name-1;
type name-2;
………
type name-n;
} struct-array variable;
แบบทดสอบ โครงสร้างข้อมูลแบบอาร์เรย์
1.โปรแกรมใดที่จำเป็นต้องใช้ตัวแปรอาร์เรย์
ก. โปรแกรมคำนวณหาพื้นที่รูปวงกลม
ข. โปรแกรมคำนวณหาพื้นที่รูปวงกลม 20 วง
ค. โปรแกรมคำนวณหาพื้นที่และเส้นรอบวงของวงกลม
ง. โปรแกรมหาพื้นที่วงกลมใดที่มีค่ามากที่สุดจาก 20 วง
2. ถ้าตัวแปร A เป็นตัวแปรแบบอาร์เรย์แล้ว กลุ่มข้อมูลใดสามารถจัดเก็บตัวแปร A ได้
ก. 25 , 60 , boy , T
ข. A , B , C , D
ค. Dog , cat 2.50
ง. True , Somsri , 10.25
3. จากโปรแกรมต่อไปนี้ Data มีผลลัพธ์เป็นเท่าไร
Program Test 1
Var Data : integer
Begin
Data : = 60;
Data : = 20;
Writeln (Data);
End
ก. 60
ข. 20
ค. 80
ง. 40
4. ข้อใดต่อไปนี้ที่ผู้เขียนโปรแกรมควรกำหนดเป็นตัวแปรอาร์เรย์
ก. I เก็บค่านับรอบของลูป จำนวน 20 รอบ
ข. Score เก็บค่าคะแนนนักศึกษา 20 คน
ค. Mean เก็บคะแนนเฉลี่ยนักศึกษา 20 คน
ง. Max เก็บคะแนนนักศึกษาที่มีคะแนนสูงสุดจาก 20 คน
5. ตัวแปรอาร์เรย์ต่างกับตัวแปรเดี่ยวอย่างไร
ก. ตัวแปรอาร์เรย์เก็บค่าในฮาร์ดดิสก์ตัวแปรเดี่ยวเก็บค่าใน RAM
ข. ตัวแปรอาร์เรย์เก็บค่าแบบ Numeric ตัวแปรเดี่ยวเก็บค่าแบบ String
ค. ตัวแปรอาร์เรย์เก็บค่าคงที่ ตัวแปรเดี่ยวเก็บค่าเปลี่ยนแปลงได้
ง. ตัวแปรอาร์เรย์เก็บค่าได้หลายค่า ตัวแปรข้อมูลเดี่ยวเก็บค่าได้เพียงค่าเดี่ยว
6. ประกาศตัวแปร A:array[1..20] of integer; ตัวแปรอาร์เรย์ชุดที่ประกาศนี้สามารถเก็บค่าได้ทั้งหมดกี่ค่า
ก. 1 ค่า
ข. 19 ค่า
ค. 20 ค่า
ง. 21 ค่า
7. J : Array [1..100, 1..5] of integer; ตัวแปรอาร์เรย์ J ประกอบด้วยสมาชิกกี่ค่า
ก. 5
ข. 100
ค. 50
ง. 500
8. ข้อใดคือความหมายของโครงสร้างข้อมูลแบบอาร์เรย์
ก. กลุ่มข้อมูลที่มีค่าชนิดเดียวกัน
ข. กลุ่มข้อมูลที่เป็นตัวเลขเท่านั้น
ค. กลุ่มข้อมูลที่มีความสัมพันธ์กัน
ง. กลุ่มข้อมูลที่มีการลดความซ้ำซ้อน
9. ถ้าประกาศตัวแปรอาร์เรย์ดังนี้ Data : array [1…5] of integer; ข้อมูลใดไม่สามารถเก็บในอาร์เรย์ชุดนี้ได้
ก. 500 20 40 25 2.5
ข. 601 2 0 13 100
ค. 1 0 0 0 1
ง. 0 0 0 0 0
10. การประกาศตัวแปรอาร์เรย์เพื่อใช้งานต้องประกอบด้วยอะไรบ้าง
ก. ชื่ออาร์เรย์ ชนิดข้อมูล
ข. ชื่ออาร์เรย์ ค่าสูงสุดและค่าต่ำสุด ชนิดข้อมูล
ค. ชื่ออาร์เรย์ ค่าสูงสุดและค่าต่ำสุด มิติของอาร์เรย์ ชนิดข้อมูล
ง. ชื่ออาร์เรย์ ค่าสูงสุดและค่าต่ำสุด มิติของอาร์เรย์ ชนิดข้อมูล จำนวนสมาชิก
เฉลย 1. ค 2. ข 3. ค 4. ข 5. ง 6. ค 7. ข 8. ก 9. ง 10. ค
ไม่มีความคิดเห็น:
แสดงความคิดเห็น