ตัวแปรชุดและสตริง
ตัวแปรชุดและสตริง
ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด (arrays variables)
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
5.1.1 ประเภทของตัวแปรชุด มีดังนี้
1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น
2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้
ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น
ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น
5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
ตัวอย่างการประกาศตัวแปรชุด 1 มิติ
ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes
ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes
ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes
2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1
m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1
ตัวอย่างการประกาศตัวแปรชุด 2 มิติ
ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes
วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด 1 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)
กรณีตัวแปรชุด 2 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m
จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก
ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes
3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)
type arrayname [n] [m] [p];
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1
m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1
วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p
ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว
ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง
Column 0 Column 1
ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3
Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]
Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes
5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)
1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
type arrayname[size] = { value list };
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
type arrayname[n][m] = { value list };
โดยที่
value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }
ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้
ตัวอย่างที่ 5.7 float p[5][3] = {
3.0, 4.5, 5.5,
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};
ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes
2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string constant”;
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string constant”};
โดยที่
string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;
ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้
null character
ตัวอย่างที่ 5.9 char province[3][13] = {
“NAKHONPANOM” ,
“SAKON NAKHON” ,
“MOOKDAHAN” } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes
การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ
เช่น
province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM
province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN
province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N
province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K
5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้
เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน
/* array1.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's scores. */ /* บรรทัดที่ 3 */
main() /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int index, scores[5]; /* บรรทัดที่ 6 */
scores[0] = 59; /* บรรทัดที่ 7 */
scores[1] = 67; /* บรรทัดที่ 8 */
scores[2] = 85; /* บรรทัดที่ 9 */
scores[3] = 92; /* บรรทัดที่ 10 */
scores[4] = 74; /* บรรทัดที่ 11 */
clrscr(); /* บรรทัดที่ 12 */
for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */
printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */
getch(); /* บรรทัดที่ 15 */
return(0); /* บรรทัดที่ 16 */
} /* บรรทัดที่ 17 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว
บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )
ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้
โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ
/* array2.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ float num[100] ; /* บรรทัดที่ 5 */
float sum= 0 , average ; /* บรรทัดที่ 6 */
int i, n ; char numstr[20]; /* บรรทัดที่ 7 */
clrscr(); /* บรรทัดที่ 8 */
printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
/* ===== Input Data ===== */ /* บรรทัดที่ 11*/
for( i=0; i<n; i++) { /* บรรทัดที่ 12 */
printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */
num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */
sum=sum+num[i]; /* บรรทัดที่ 15 */
printf("\n"); /* บรรทัดที่ 16 */
} /* end for */ /* บรรทัดที่ 17 */
/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */
average = sum/n ; /* บรรทัดที่ 19 */
printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */
printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */
getch(); /* บรรทัดที่ 22 */
} /* end main */ /* บรรทัดที่ 23 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน
ี้
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ
บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว
บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )
บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ
บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10
บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ
บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ
ตัวแปรชุดและสตริง
ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays) และเนื้อหาเกี่ยวกับสตริง (string) ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด (arrays variables)
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
5.1.1 ประเภทของตัวแปรชุด มีดังนี้
1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น
2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้
ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น
ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น
5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays)
โดยที่
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน เช่น ต้องการเก็บค่าตัวเลขจำนวนเต็ม 100 ตัว ถ้าไม่มีการใช้ตัวแปรชุด เราจะต้องประกาศตัวแปรถึง 100 ตัว ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100 ตัว */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้ เราสามารถเก็บตัวเลข 100 ตัวนี้ไว้ในชื่อเดียวกัน แต่มีตัวเลข subscript คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int k[100]; /* ประกาศตัวแปรชุด 1 ตัว คือชื่อตัวแปร k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง (table) โดยสามารถใช้ตัวแปรชุด 2 มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด (arrays variables)
ตัวแปรชุด คือ ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้ (subscript) เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
5.1.1 ประเภทของตัวแปรชุด มีดังนี้
1) ตัวแปรชุด 1 มิติ (one dimension arrays หรือ single dimension arrays) ตัวแปรชุด 1 มิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 1 ตัว เช่น a[20], b[100], name[30] และ salary[20] เป็นต้น
2) ตัวแปรชุดหลายมิติ (multi-dimension arrays) ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) ตั้งแต่ 2 ตัวขึ้นไป โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2 ตัว และ 3 ตัว ดังนี้
ตัวแปรชุด 2 มิติ (two dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 2 ตัว เช่น a[2][4], b[3][4], name[5][30] เป็นต้น
ตัวแปรชุด 3 มิติ (three dimension arrays) คือ ตัวแปรชุดที่มีตัวเลขกำกับ (subscript) เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5] เป็นต้น
5.1.2 การประกาศตัวแปรชุด (declaration of arrays) สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด 1 มิติ (declaration of one dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
ตัวอย่างการประกาศตัวแปรชุด 1 มิติ
ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size คือ ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
ตัวอย่างการประกาศตัวแปรชุด 1 มิติ
ตัวอย่างที่ 5.1 int s[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 2 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 40 bytes
ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes
ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
ตัวอย่างที่ 5.2 char p[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 1 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 20 bytes
ตัวอย่างที่ 5.3 float t[20]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ใช้ช่องละ 4 bytes 20 ช่อง รวมกันทั้งหมดใช้เนื้อที่ 80 bytes
2) การประกาศตัวแปรชุด 2 มิติ (declaration of two dimension arrays)
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1
m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุด ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่ 0, 1, 2, …, n-1
m คือ ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่ 0, 1, 2, …, m-1
ตัวอย่างการประกาศตัวแปรชุด 2 มิติ
ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
ตัวอย่างที่ 5.4 int r[3][2]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่ของตัวแปรชุด 2 มิติ จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2 และมีจำนวนคอลัมน์ m = 0, 1 โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว โดยใช้เนื้อที่ช่องละ 2 bytes มีสมาชิกทั้งหมด 6 ตัว ดังนั้นใช้เนื้อที่ทั้งหมด 12 bytes
วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด 1 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)
กรณีตัวแปรชุด 2 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m
จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก
ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes
3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)
type arrayname [n] [m] [p];
โดยที่
วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด 1 มิติ และ 2 มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด 1 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = ขนาดของตัวแปรชุด (size)
กรณีตัวแปรชุด 2 มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m
จากตัวอย่าง int r[3] [2]; จะได้ว่า n = 3, m = 2 ดังนั้น จำนวนสมาชิกของตัวแปรชุด = 3*2 = 6 แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้ r[0][0], r[0][1], r[n-1][m-1] รวมทั้งหมด 6 สมาชิก
ตัวอย่างที่ 5.5 float X[5] [4]; ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว n = 0, 1, 2, 3, 4 และมีจำนวนคอลัมน์ m = 0, 1, 2, 3 โดยที่ในตารางใช้เนื้อที่ช่องละ 4 bytes มีจำนวนทั้งหมด 20 ตัว ดังนั้นใช้เนื้อทั้งหมด 80 bytes
3) การประกาศตัวแปรชุด 3 มิติ (declaration of three dimension arrays)
type arrayname [n] [m] [p];
โดยที่
type คือ ชนิดของตัวแปรชุด เช่น int, float, char, double เป็นต้น
arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1
m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1
วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p
arrayname คือ ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n คือ ตัวเลขกำกับตัวที่ 1 มีค่าตั้งแต่ 0, 1, 2, …., n-1
m คือ ตัวเลขกำกับตัวที่ 2 มีค่าตั้งแต่ 0, 1, 2, …., m-1 p คือ ตัวเลขกำกับตัวที่ 3 มีค่าตั้งแต่ 0, 1, 2, …., p-1
วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด 3 มิติ หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด = n*m*p
ตัวอย่างการประกาศตัวแปรชุด 3 มิติ float a[2][2][3]; ดังนั้น n = 2 , m = 2, p = 3 จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด = 2*2*3 = 12 ตัว
ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง
Column 0 Column 1
ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3
Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]
Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes
5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)
1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
type arrayname[size] = { value list };
Column 0 Column 1
ตัวที่ 1 ตัวที่ 2 ตัวที่ 3 ตัวที่ 1 ตัวที่ 2 ตัวที่ 3
Row 0 a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]
Row 1 a[1][0][0] a[1][0][1] a[1][0][2] a[1][1][0] a[1][1][1] a[1][1][2]
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ 4 bytes จำนวนสมาชิกทั้งหมดมี 12 ตัว ดังนั้นใช้เนื้อที่ทั้งหมดคือ 4*12 = 48 bytes
5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด (initializing arrays)
1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
type arrayname[size] = { value list };
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
type arrayname[n][m] = { value list };
type arrayname[n][m] = { value list };
โดยที่
value list คือ ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าให้ใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }
ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้
ตัวอย่างที่ 5.7 float p[5][3] = {
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย { }
ตัวอย่าง 5.6 int a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้
ตัวอย่างที่ 5.7 float p[5][3] = {
3.0, 4.5, 5.5,
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};
ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง (table) ดังนี้
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes
โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ 4 bytes ดังนั้นใช้เนื้อที่ทั้งหมด = 4*15 = 60 bytes
2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string constant”;
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string constant”};
โดยที่
string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;
ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้
รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string constant”;
รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string constant”};
โดยที่
string constants คือ ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย , (comma) คั่นระหว่างค่าคงที่แต่ละค่า
ตัวอย่างที่ 5.8 char s[12] = “ASIAN GAME” ;
ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้
null character
ตัวอย่างที่ 5.9 char province[3][13] = {
“NAKHONPANOM” ,
“SAKON NAKHON” ,
“MOOKDAHAN” } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes
การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ
เช่น
ตัวอย่างที่ 5.9 char province[3][13] = {
“NAKHONPANOM” ,
“SAKON NAKHON” ,
“MOOKDAHAN” } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่ 3 x 13 = 39 bytes
การอ้างถึงสมาชิกในตัวแปรชุด 2 มิติ
เช่น
province [0] คือ สมาชิกแถวที่ 1 ทั้งแถว นั่นคือข้อมูล NAKHONPANOM
province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN
province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N
province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K
5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้
เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้
province [1] คือ สมาชิกแถวที่ 2 ทั้งแถว นั่นคือข้อมูล SAKON NAKHON province [2] คือ สมาชิกแถวที่ 3 ทั้งแถว นั่นคือข้อมูล MOOKDAHAN
province [0][0] คือ สมาชิกของ province [0] ตัวที่ 1 คือตัวอักษร N
province [1][2] คือ สมาชิกของ province [1] ตัวที่ 3 คือตัวอักษร K
5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
โดยปกติเราจะใช้คำสั่ง for หรือ while หรือ do while คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด ส่วนมากนิยมใช้คำสั่ง for มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้ ทำให้กำหนดจำนวนรอบการทำงานได้
เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น ให้ศึกษาโปรแกรมตัวอย่างที่ 5.1, 5.2, 5.3 และ 5.4 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 5.1 แสดงการใช้ตัวแปรชุด 1 มิติ ชื่อ scores เก็บคะแนนนักเรียน
/* array1.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's scores. */ /* บรรทัดที่ 3 */
main() /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int index, scores[5]; /* บรรทัดที่ 6 */
scores[0] = 59; /* บรรทัดที่ 7 */
scores[1] = 67; /* บรรทัดที่ 8 */
scores[2] = 85; /* บรรทัดที่ 9 */
scores[3] = 92; /* บรรทัดที่ 10 */
scores[4] = 74; /* บรรทัดที่ 11 */
clrscr(); /* บรรทัดที่ 12 */
for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */
printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */
getch(); /* บรรทัดที่ 15 */
return(0); /* บรรทัดที่ 16 */
} /* บรรทัดที่ 17 */
ผลลัพธ์ที่ได้จากโปรแกรม
/* array1.C */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
/* Record student's scores. */ /* บรรทัดที่ 3 */
main() /* บรรทัดที่ 4 */
{ /* บรรทัดที่ 5 */
int index, scores[5]; /* บรรทัดที่ 6 */
scores[0] = 59; /* บรรทัดที่ 7 */
scores[1] = 67; /* บรรทัดที่ 8 */
scores[2] = 85; /* บรรทัดที่ 9 */
scores[3] = 92; /* บรรทัดที่ 10 */
scores[4] = 74; /* บรรทัดที่ 11 */
clrscr(); /* บรรทัดที่ 12 */
for (index = 0; index < 5; index++) /* บรรทัดที่ 13 */
printf("Student's score: %d\n", scores[index]); /* end for */ /* บรรทัดที่ 14 */
getch(); /* บรรทัดที่ 15 */
return(0); /* บรรทัดที่ 16 */
} /* บรรทัดที่ 17 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.1 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 ประกาศตัวแปร index เป็นชนิดจำนวนเต็ม และ scores เป็นตัวแปรชุด 1 มิติ ชนิดจำนวนเต็มมีสมาชิก 5 ตัว
บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )
ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้
โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ
/* array2.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ float num[100] ; /* บรรทัดที่ 5 */
float sum= 0 , average ; /* บรรทัดที่ 6 */
int i, n ; char numstr[20]; /* บรรทัดที่ 7 */
clrscr(); /* บรรทัดที่ 8 */
printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
/* ===== Input Data ===== */ /* บรรทัดที่ 11*/
for( i=0; i<n; i++) { /* บรรทัดที่ 12 */
printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */
num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */
sum=sum+num[i]; /* บรรทัดที่ 15 */
printf("\n"); /* บรรทัดที่ 16 */
} /* end for */ /* บรรทัดที่ 17 */
/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */
average = sum/n ; /* บรรทัดที่ 19 */
printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */
printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */
getch(); /* บรรทัดที่ 22 */
} /* end main */ /* บรรทัดที่ 23 */
ผลลัพธ์ที่ได้จากโปรแกรม
บรรทัดที่ 7 ถึง 11 กำหนค่าจำนวนเต็มให้กับตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 13 คำสั่ง for ทำหน้าที่วนรอบทำงานซ้ำ 5 ครั้ง เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4]
บรรทัดที่ 14 และ 15 ฟังก์ชัน printf( ) เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด scores[0] ถึง scores[4] หลังจากนั้นจะหยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้ากด enter ก็จะกลับสู่โปรแกรม
บรรทัดที่ 16 ส่งค่า 0 (ศูนย์) กลับให้กับฟังก์ชัน main( )
ข้อสังเกต ฟังก์ชัน main( ) ของโปรแกรมตัวอย่างที่ 5.1 เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน return( ) ซึ่งถ้าไม่ใช้เวลาที่เรา compile โปรแกรม จะมีคำเตือนให้เราทราบทุกครั้ง แต่โปรแกรมก็สามารถ run ได้
โปรแกรมตัวอย่างที่ 5.2 แสดงการใช้ตัวแปรชุด 1 มิติ สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ
/* array2.c */
#include<stdio.h> /* บรรทัดที่ 1 */
#include<conio.h> /* บรรทัดที่ 2 */
#include<stdlib.h> /* บรรทัดที่ 3 */
void main(void) /* บรรทัดที่ 4 */
{ float num[100] ; /* บรรทัดที่ 5 */
float sum= 0 , average ; /* บรรทัดที่ 6 */
int i, n ; char numstr[20]; /* บรรทัดที่ 7 */
clrscr(); /* บรรทัดที่ 8 */
printf("Enter Total of number(n<100) : "); /* บรรทัดที่ 9 */
n = atoi(gets(numstr)); /* บรรทัดที่ 10 */
/* ===== Input Data ===== */ /* บรรทัดที่ 11*/
for( i=0; i<n; i++) { /* บรรทัดที่ 12 */
printf("\nEnter NUMBER #%d : ",i+1); /* บรรทัดที่ 13 */
num[i] = atof(gets(numstr)); /* บรรทัดที่ 14 */
sum=sum+num[i]; /* บรรทัดที่ 15 */
printf("\n"); /* บรรทัดที่ 16 */
} /* end for */ /* บรรทัดที่ 17 */
/* ===== Calulate MEAN ===== */ /* บรรทัดที่ 18 */
average = sum/n ; /* บรรทัดที่ 19 */
printf("N =%d\t Sum =%10.2f\n",n,sum); /* บรรทัดที่ 20 */
printf("Average = %10.2f\n",average); /* บรรทัดที่ 21 */
getch(); /* บรรทัดที่ 22 */
} /* end main */ /* บรรทัดที่ 23 */
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน
ี้
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ
บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว
บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )
บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ
บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10
บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ
บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
จากโปรแกรมตัวอย่างที่ 5.2 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังน
ี้
บรรทัดที่ 3 คำสั่ง #include <stdlib.h> ให้การสนับสนุนฟังก์ชัน atoi( ) และฟังก์ชัน atof( ) สำหรับโปรแกรมนี้ ในบรรทัดที่ 10 และ 14 ตามลำดับ
บรรทัดที่ 5 ประกาศตัวแปร num เป็นตัวแปรชุด 1 มิติ ชนิด float มีสมาชิก 100 ตัว
บรรทัดที่ 7 ประกาศตัวแปร numstr เป็นตัวแปรชุด 1 ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่ 10 ฟังก์ชัน atoi( ) ใช้เปลี่ยน string เป็นตัวเลขจำนวนเต็ม จากฟังก์ชัน gets( ) รับตัวอักขระมาเก็บไว้ในตัวแปร numstr แล้วเปลี่ยนค่า string ของตัวแปร numstr ไปเก็บไว้ในตัวแปร n โดยใช้ฟังก์ชัน atoi( )
บรรทัดที่ 12 คำสั่ง for ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด num ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด คือ n รอบ
บรรทัดที่ 14 ฟังก์ชัน atof( ) ใช้เปลี่ยน string เป็นตัวเลขทศนิยม ซึ่งมีการทำงานคล้ายกับฟังก์ชัน atoi( ) ในบรรทัดที่ 10
บรรทัดที่ 15 คำสั่ง sum = sum + num[i]; เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่ 18 ถึง 21 คำสั่ง average = sum/n; เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด แล้วแสดงผลค่าตัวแปร n ตัวแปร sum และตัวแปร average ออกจอภาพ
บรรทัดที่ 22 หยุดรอรับค่าใด ๆ จากคีย์บอร์ด ซึ่งถ้าเรากด enter ก็จะกลับสู่โปรแกรม
โปรแกรมตัวอย่างที่ 5.3 แสดงการใช้ตัวแปรชุด 2 มิติ สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น