ข้อมูลแบบโครงสร้าง (structure) เป็นข้อมูลชนิดหนึ่งเกิดจากการรวมข้อมูลชนิดต่าง ๆ จำนวนหนึ่งไว้ด้วยกันภายใต้ชื่อโครงสร้างเดียวกัน เช่น ข้อมูลแบบโครงสร้าง ชื่อ student ประกอบดัวย
ตัวแปร ชื่อ name เป็นข้อมูล ประเภท string(ข้อความ)
ตัวแปร ชื่อ surname เป็นข้อมูล ประเภท string
ตัวแปร ชื่อ birthyear เป็นข้อมูล ประเภท int
ตัวแปร ชื่อ sex เป็นข้อมูล ประเภท string
ตัวแปร ชื่อ room เป็นข้อมูล ประเภท int
ตัวแปรที่เกิดจากข้อมูลแบบโครงสร้าง เรียกว่าตัวแปรโครงสร้าง เช่น ตัวแปรโครงสร้าง คือ นักเรียนคนที่ 1 นักเรียนคนที่ 2 นักเรียนคนที่ 3 แต่ละคนจะประกอบด้วยข้อมูลของตัวแปรต่าง ๆ ที่อยู่ภายในข้อมูลแบบโครงสร้าง เช่น
ตัวแปรโครงสร้าง นักเรียนคนที่ 1 มีตัวแปรต่าง ๆ ที่มีข้อมูลเป็นดังนี้
ตัวแปร ชื่อ name เป็นข้อมูล ประเภท string มีข้อมูล คือ ชัย
ตัวแปร ชื่อ surname เป็นข้อมูล ประเภท string มีข้อมูล คือ สายเสมอ
ตัวแปร ชื่อ birthyear เป็นข้อมูล ประเภท int มีข้อมูล คือ 2501
ตัวแปร ชื่อ sex เป็นข้อมูล ประเภท string มีข้อมูล คือ ชาย
ตัวแปร ชื่อ room เป็นข้อมูล ประเภท int มีข้อมูล คือ 6
ตัวแปรโครงสร้าง นักเรียนคนที่ 2 มีตัวแปรต่าง ๆ ที่มีข้อมูลเป็นดังนี้
ตัวแปร ชื่อ name เป็นข้อมูล ประเภท string มีข้อมูล คือ สมหญิง
ตัวแปร ชื่อ surname เป็นข้อมูล ประเภท string มีข้อมูล คือ เย็นใจ
ตัวแปร ชื่อ birthyear เป็นข้อมูล ประเภท int มีข้อมูล คือ 2502
ตัวแปร ชื่อ sex เป็นข้อมูล ประเภท string มีข้อมูล คือ หญิง
ตัวแปร ชื่อ room เป็นข้อมูล ประเภท int มีข้อมูล คือ 5
การประกาศข้อมูลแบบโครงสร้าง
เป็นการกำหนดลักษณะของข้อมูลแบบโครงสร้าง มี 2 รูป คือ ประกาศข้อมูลแบบโครงสร้างก่อนแล้วจึงกำหนด ตัวแปรให้มีข้อมูลเป็นแบบโครงสร้าง หรือประกาศข้อมูลแบบโครงสร้างพร้อมกับกำหนดตัวแปรพร้อมกัน แต่ทั้งสองแบบใช้ คำสั่งร่วมกัน คือ struct
รูปแบบที่ 1 กำหนดโครงสร้างพร้อมกับการประกาศตัวแปรที่มีโครงสร้างนั้น มีรูปแบบ ดังนี้
struct structure name
{
type1 name1;
type2 name2;
...
typeN nameN;
} structure variable1, structure variable2,..., structure variableN;
รูปแบบที่ 2 กำหนดโครงสร้างก่อน แล้วจึงการประกาศตัวแปรที่มีโครงสร้างนั้น ในภายหลัง มีรูปแบบ ดังนี้
struct structure name
{
type1 name1;
type2 name2;
...
typeN nameN;
};
struct structure name struture variable1, structure variable2,..., structure variableN;
โดย struct เป็นคำสั่งสำหรับประกาศข้อมูลแบบโครงสร้าง
Structure name เป็นชื่อของข้อมูลแบบโครงสร้างใช้สำหรับกำหนดให้ข้อมูลกลุ่มอื่นๆ ให้มีโครงสร้างแบบเดียวกัน
type1,type2,...,typeN คือชนิดของตัวแปร หรือ ข้อมูล ต่าง ๆ เช่น int float char ฯลฯ
name1, name2,..., nameN คือชื่อของตัวแปร ต่าง ๆ
structure variable เป็นชื่อของตัวแปรที่โครงสร้างเหมือนกับข้อมูลโครงสร้างชื่อ structure name
ตัวอย่าง struct person
{
char name[20];
char surname[20];
double salary;
int birthday;
} sompol , wimolsiri , jeera;
หรือ ตัวอย่างในรูปแบบที่2
ตัวอย่าง struct person
{
char name[20];
char surname[20];
double salary;
int birthday;
};
struct person sompol , wimolsiri , jeera;
ลักษณะการจัดการหน่วยความจำ เปรียบเทียบได้ดังรูป
การอ้างอิงถึงสมาชิกของตัวแปรโครงสร้าง
ในการระบุหรืออ้างอิงถึงตัวแปรซึ่งเป็นสมาชิกในโครงสร้างของตัวแปรโครงสร้าง นั้น ทำได้ ดังนี้
Structure variable.name โดย structure variable คือ ชื่อของตัวแปรโครงสร้าง ส่วน name คือ ชื่อของตัวแปรที่เป็นสมาชิกในโครงสร้างนั้น ดังเช่น ในตัวอย่างที่ผ่านมา sompol.salary จะหมายถึงตัวแปร salary ในตัวแปรโครงสร้างชื่อ sompol หรือ jeera.birthday หมายถึง ตัวแปร birthday ในตัวแปรโครงสร้าง ชื่อ jeera
ดังนั้นในตัวแปรโครงสร้าง wimolsiri จะมีสมาชิกที่อ้างถึงได้ ดังต่อไปนี้
wimolsiri.name
wimolsiri.surname
wimolsiri.salary
wimolsiri.birthday
ตัวอย่าง การอ้างอิงถึงสมาชิกของตัวแปรโครงสร้าง ให้นักเรียนศึกษาโปรแกรม และคาดคะเนผล แล้วทดสอบ ว่าเป็นตามที่คาดคะเนหรือไม่
/* ref_to_st.c */
#include
#include
#include
main()
{
struct member /* ประกาศ ข้อมูลโครงสร้างชื่อ member */
{
char name[20], surname[20],id_num[6]; /* ประกาศตัวแปร ชนิด ข้อความ ชื่อ name,surname,id_num */
int level,room,no_room; /* ประกาศตัวแปร จำนวนเต็ม คือ level , room , room_no */
}room412; /* ประกาศตัวแปรชื่อ room412 มีโครงสร้างข้อมูล แบบ member */
strcpy(room412.name,"Kanokporn"); */ นำข้อความให้เป็นค่าในตัวแปร name ซึ่งเป็นสมาชิกของตัวแปร room412 */
strcpy(room412.surname,"Jakka"); */ นำข้อความให้เป็นค่าในตัวแปร surname ซึ่งเป็นสมาชิกของตัวแปร room412 */
strcpy(room412.id_num,"26534"); */ นำข้อความให้เป็นค่าในตัวแปร id_num ซึ่งเป็นสมาชิกของตัวแปร room412 */
room412.level=4; /* กำหนดค่า ให้แก่ตัวแปร level ซึ่งเป็นสมาชิกของตัวแปรโครงสร้าง room412 */
room412.room=12; /* กำหนดค่า ให้แก่ตัวแปร room ซึ่งเป็นสมาชิกของตัวแปรโครงสร้าง room412 */
room412.no_room=20; /* กำหนดค่าให้แก่ตัวแปรno_room ซึ่งเป็นสมาชิกของตัวแปรโครงสร้าง room412 */
printf("\nid_num = %s name = %s surname = %s ",room412.id_num,room412.name,room412.surname);
printf("\nlevel = %d room = %d no_room = %d ",room412.level,room412.room,room412.no_room);
}
จะเห็นได้ว่าการอ้างอิงถึงตัวแปรซึ่งเป็นสมาชิกของตัวแปรโครงสร้างมีวิธีการเฉพาะ แต่การกำหนดค่าให้แก่ตัวแปรเหล่านั้น ใช้วิธีการทำนองเดียวกับเมื่อตัวแปรชนิดนั้น อยู่เป็นอิสระนอกตัวแปรโครงสร้าง
การกำหนดข้อมูลให้ตัวแปรโครงสร้าง และการแสดงผลตัวแปรโครงสร้าง
การกำหนดข้อมูลและการแสดงผลตัวแปรโครงสร้างนั้นนำหลักการเข้าถึงตัวแปรที่เป็นสมาชิกของตัวแปรโครงสร้าง ที่ใช้รูปแบบดังที่ผ่านมาแล้ว คือ structure variable.name เมื่อ structure variable คือ ชื่อของตัวแปรโครงสร้าง ส่วน name คือ ชื่อของตัวแปรที่เป็นสมาชิกของตัวแปรโครงสร้าง ส่วนการกำหนดข้อมูลให้แก่ตัวแปรโครงสร้างและการแสดงผลตัวแปรโครงสร้างนำหลักการเข้าถึงตัวแปรที่เป็นสมาชิกของตัวแปรโครงสร้างและการกำหนดข้อมูลให้แก่ตัวแปรและการแสดงผลตัวแปรตามชนิดของตัวแปร มาใช้ประกอบกัน
ตัวอย่าง ให้นักเรียนศึกษาโปรแกรม /* str_variable1.c */ แล้วคาดคะเนผล แล้วทดสอบว่าเป็นตามที่คาดคะเนหรือไม่
/* str_variable1.c */
#include
#include
#include
#include
main()
{
struct person
{
char name[20],surname[20];
int age;
float salary;
};
struct person sompol,tanapol;
char numstring[20];
char forename[20];
clrscr();
printf("\nPerson \nEnter name :");
scanf ("%s",forename); /* รับข้อความจากแป้นพิมพ์ ไปเก็บในตัวแปร forename */
strcpy(tanapol.name,forename); /* ทำสำเนาforename เก็บใน tanapol.name */
printf("\nEnter tanapol.surname :");
scanf("%s",tanapol.surname);
printf("\nEnter salary :");
scanf( "%s", numstring); /* รับข้อความจากแป้นพิมพ์ ไปเก็บในตัวแปร numstring */
tanapol.salary = atof(numstring); /* เปลี่ยนตัวเลขที่เป็นข้อความใน numstring ให้เป็นจำนวนเลขที่เป็นทศนิยมและกำหนดให้เป็นข้อมูลของ ตัวแปร tanapol.salary */
printf("\nEnter age :");
scanf("%d",&tanapol.age); /* รับข้อความจากแป้นพิมพ์ ไปเก็บในตัวแปร tanapol.age */
sompol = tanapol ; /* คัดลอกข้อมูลของตัวแปรโครงสร้าง tanapol ไปให้กับตัวแปรโครงสร้าง sompol */
printf("\n tanapol.name = %s \n tanapol.surname =%s \n tanapol.age =%d years \ntanapol.salary =%8.2f bath",tanapol.name,tanapol.surname,tanapol.age,tanapol.salary);
printf("\n sompol.name = %s \n sompol.surname =%s \n sompol.age =%d years \nsompol.salary =%8.2f bath",sompol.name,sompol.surname,sompol.age,sompol.salary);
}
ตัวแปรชุดของข้อมูลแบบโครงสร้าง (arrays of structures)
ตัวแปรชุดของข้อมูลแบบโครงสร้าง มีลักษณะทำนองเดียวกับตัวแปรชุดหรือ array ของข้อมูลประเภทอื่น ๆ คือ เป็นกลุ่มของข้อมูลแบบโครงสร้างที่เก็บไว้ในชื่อเดียวกัน ต่างกันที่ดัชนีหรือเลขกำกับชื่อ โดยการประกาศตัวแปรชุดของข้อมูลแบบโครงสร้างชนิดอื่น ๆ คืออาจประกาศโครงสร้างพร้อมกับกำหนดชื่อตัวแปรพร้อมกัน หรือประกาศโครงสร้างก่อนแล้วมากำหนดชื่อตัวแปรในภายหลัง ดังตัวอย่าง
ตัวอย่าง การประกาศตัวแปรชุดของข้อมูลแบบโครงสร้าง
struct room412
{
char name[20];
char surname[20];
float salary;
int birthyear;
} student[55] ;
struct room412
{
char name[20];
char surname[20];
float salary;
int birthyear;
} ;
struct room412 student[55];
หน่วยความจำที่ใช้ในตัวแปรชุดของข้อมูลแบบโครงสร้าง เป็นลักษณะทำนองเดียวกับตัวแปรชุดของข้อมูลประเภทอื่น ๆ โดยหน่วยความจำทั้งหมดที่ใช้เป็นผลรวมของหน่วยความจำที่ใช้โดยสมาชิกแต่ละตัว ซึ่งมีหน่วยความจำที่ใช้ขึ้นกับตัวแปรสมาชิกแต่ละตัวของข้อมูลแบบโครงสร้าง
การอ้างอิงถึงตัวแปรสมาชิกซึ่งอยู่ในข้อมูลโครงสร้าง ทำได้โดยการระบุถึงสมาชิกของตัวแปรชุดตามด้วยตัวแปรที่เป็นสมาชิกในข้อมูลแบบโครงสร้าง ในลักษณะ structure variable.name โดย
structure variable คือ ชื่อตัวแปรชุดพร้อมดัชนี name คือ ตัวแปรในข้อมูลโครงสร้าง ดังในตัวอย่างที่ผ่านมา
student[0].surname หมายถึงตัวแปรชื่อ surname ในโครงสร้างข้อมูล ของตัวแปรโครงสร้างชื่อ student[0]
โดยการกำหนดค่าตัวแปรเป็นไปทำนองเดียวกับตัวแปรอื่น ๆ ที่ผ่านมา
ตัวอย่าง จงศึกษาวิเคราะห์โปรแกรม structur1.c คาดคะเนการทำงานของโปรแกรม แล้วทดสอบว่าเป็นตามที่คาดหรือไม่
/* structur1.c */
#include
#include
#include
main()
{
struct member /* ประกาศสร้างข้อมูลโครงสร้าง ชื่อ member */
{
int num;
char name[20];
char surname[20];
char grade;
}student[60]; /* สร้างตัวแปรชุด ชื่อstudent สำหรับข้อมูลโครงสร้าง โดยใช้โครงสร้างข้อมูล member */
clrscr();
int i,time;
printf("How many students that you want to input data? ");
scanf("%d",&time);
for (i=0;i
ไม่มีความคิดเห็น:
แสดงความคิดเห็น