สวัสดีครับบทความนี้เป็นยทความที่ต่อจาก บทความ แนะนำอาร์เรย์ นะครับซึ่งบทความนี้จะกล่าวถึง อาร์เรย์ 1 มิติ เอ๋มันคืออะไรเราไปดูกันเลยดีกว่า
อาร์เรย์ 1 มิติ (Array 1D)
หากกล่าวถึงอาร์เรย์แล้ว อาร์เรย์ก็เปรียบเสมือนห้องสี่เหลี่ยมว่างเปล่าห้องหนึ่งที่ผู้เขียนโปรแกรมสามารถจัดแบ่งห้องอย่างไรก็ได้(กำหนดขนาดอาร์เรย์เป็นกี่ช่องก็ได้)และข้อมูลแต่ละคัวที่จะนำเก็บลงในอาร์เรย์ ก็เปรียบได้กับผู้ที่เข้ามาอาศัยอยู่ในห้องแต่ละห้องนั้นโดยจะต้องระวังใหการจัดการบริหารห้องให้ดี ให้ทุกคนสามารถเข้าไปอยู่ในห้องได้(ต้องกำหนดขนาดของอาร์เรย์ให้เพียงพอกับจำนวนขอมูลที่ต้องการจัดเก็บ)แต่หากแบ่งห้องไว้แล้วมีคนเข้ามาอยู่ไม่ครบก็ไม่เกิดปัญหา(กำหนดขนาดอาร์เรย์ไว้จำนวนหนึ่ง แต่ใช้ไม่ครบตามจำนวนนั้นก็ไม่เป็นไร) เพราะถือคติว่า “เหลือดีกว่าขาด” แต่ควรระวังอย่าให้ห้องเหลือมากเพราะจะสิ้นเปลืองพื้นที่(หน่วยความจำ)โดยเปล่าประโยชน์
การประกาศตัวแปรอาร์เรย์ 1 มิติขึ้นมาใช้งาน
รูปแบบของอาร์เรย์1 มิติ
ชนิดข้อมูล ชื่อตัวแปร[ขนาดของอาร์เรย์] | |||
รูปแบบ | |||
เช่น
int n[5]; ประกาศตัวแปร n เป็นอาร์เรย์ชนิดเลขจำนวนเต็มมีขนาด 5 ช่องโดยชนิดข้อมูลแบบเลขจำนวนเต็มประเภท int มีขนาด 2 ไบต์ และกำหนดเป็นอาร์เรย์ขนาด 5 ช่อง ดังนั้นตัวแปร n จึงมีขนาด 10 ไบต์
float a[5]; ประกาศตัวแปร a เป็นอาร์เรย์ชนิดเลขจำนวนจริงมีขนาด 5 ช่องโดยชนิดข้อมูลแบบเลขจำนวนจริงประเภท float มีขนาด 4 ไบต์ และกำหนดเป็นอาร์เรย์ขนาด 5 ช่อง ดังนั้นตัวแปร a จึงมีขนาด 20 ไบต์
char ch[50]; ประกาศตัวแปร ch เป็นอาร์เรย์ชนิดตัวอักษร (เรียกอีกอย่างว่า steing) มีขนาด 50 ช่องโดยชนิดข้อมูลแบบตัวอักษร มีขนาด 1 ไบต์ และกำหนดเป็นอาร์เรย์ ขนาด 50 ช่อง ดังนั้นตัวแปร ch จึงมีขนาด 50 ไบต์
เรามาดูตัวอย่างโปรแกรมแสดงการหาขนาดของอาร์เรย์กันหน่อยนะครับ
1: | #include<stdio.h> | |
2: | #include<conio.h> | |
3: | ||
4: | ||
5: | main(){ | |
6: | char ch[20] ; | |
7: | int n[5]; | |
8: | float a[10]; | |
9: | clrscr(); | |
10: | ||
11: | printf(" n is 5 element int array(size of int = 2 byte)\n"); | |
12: | printf("So size array n are %d byte\n",sizeof(n)); | |
13: | printf(" a is 10 element float array(size of float = 4 byte)\n"); | |
14: | printf("So size array a are %d byte\n",sizeof(a)); | |
15: | printf(" ch is 20 element char array(size of char = 1 byte)\n"); | |
16: | printf("So size array ch are %d byte\n",sizeof(ch)); | |
17: | getch(); | |
18: | ||
19: | } |
ผลลัพธ์โปรแกรม | ||
n is 5 element int array(size of int = 2 byte) So size array n are 10 byte a is 10 element float array(size of float = 4 byte) So size array a are 40 byte ch is 20 element char array(size of char = 1 byte) So size array ch are 20 byte |
อธิบายโปรแกรม โปรแกรมนี้ได้ใช้ฟังก์ชั่นมาตรฐานของภาษาซีคือ sizeof() ในการหาขนาดของอาร์เรย์แต่ละตัว
Note | ||
การประกาศตัวแปรอาร์เรย์ขึ้นใชงานนั้น จะต้องกำหนดขนาดของอาร์เรย์ที่แน่นอนว่าต้องการอาร์เรย์ขนาดกี่ช่อง และขอมูลที่เก็บลงในอาร์เรย์นั้นต้องเป็นข้อมูลประเภทเดียวกันคือเป็นเลขจำนวนเต็มก็ต้องเป็นเลขจำนวนเต็มเหมือนกันทั้งหมด จึงจะเก็บลงในอาร์เรย์ชุดเดียวกันได้ |
การกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 1 มิติ
การกำหนดค่าเริ่มต้นให้กับอาร์เรย์สามารถทำได้โดยทำการกำหนดค่าเริ่มต้นให้กับตัวแปรไปพร้อมๆกับการประกาศตัวแปรขึ้นใช้งานโดยค่าที่ต้องการกำหนดให้อาร์เรย์จะต้องระบุไว้ภายในเครื่องหมาย { } และหากค่าที่ต้องการกำหนดให้อาร์เรย์มีมากกว่า 1 ค่าให้แยกแต่ละค่าออกจากกันด้วยเครื่องหมาย , (comma)
ตัวอย่างการกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 1 มิติ
char ch[3] = { 'a','b' }; |
อธิบาย ประกาศตัวแปร ch เป็นอาร์เรย์ชนิดตัวอักษร มีขนาด 3 ช่องโดยกำหนดค่าเริ่มต้นดังนี้
ช่องที่ 1 ch[0] มีค่าเป็น a
ช่องที่ 2 ch[1] มีค่าเป็น b
ช่องที่ 3 ch[2] มีค่าเป็น \0(string จะปิดท้ายด้วย null character เสมอ)
ดูอีกตัวอย่างการกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 1 มิติ เพื่อความเข้าใจ
int n[5] ={1,2,3}; char ch[5] = { 'a','b','c' }; |
อธิบาย
1. ประกาศตัวแปร n เป็นอาร์เรย์ชนิดเลขจำนวนเต็ม มีขนาด 5 ช่องแต่กำหนดค่าเริ่มต้นให้เพียง 3 ช่องแรก เป็น 1,2,3 ตามลำดับ ส่วนอีก2 ช่องที่เหลือถึงแม้จะไม่ได้กำหนดค่าเริ่มต้นให้ แต่ก็ไม่ได้หมายความว่าเป็นค่าว่างนะครับ กล่าวคือ หากอาร์เรย์เป็นชนิดเลขจำนวนเต็ม และไม่ได้มีการกำหนดค่าเริ่มต้นให้กับอาร์เรย์ช่องใด อาร์เรย์ช่องนั้นจะมีค่าเริ่มต้นเป็น 0 โดยอัตโนมัติ
2. ประกาศตัวแปร ch เป็นอาร์เรย์ชนิดตัวอักษร(สตริง) มีขนาด 5 ช่องแต่กำหนดค่าเริ่มต้นให้เพียง 3 ช่องแรก เป็น a,b,c ตามลำดับซึ่งโดยปกติอาร์เรย์ชนิดตัวอักษร(สตริง)จะปิดท้ายด้วย \0 (null character ) เสมอดังนั้นในที่นี้จะใช้ อาร์เรย์ไปทั้งหมดแค่4ช่องคือ ช่องแรก ch[0]เก็บค่า ‘a’ ช่องสอง ch[1]เก็บค่า ‘b’ ช่องสาม ch[2]เก็บค่า ‘c’ และ ช่องสี่ ch[3]เก็บค่า ‘\0’ (null character ) แต่การประกาศอาร์เรย์ไว้ 5 ช่องยังเหลืออีก1ช่องที่ยังไม่ได้กำหนดค่าให้ ซึ่งก็ไม่ได้เป็นค่าว่างอย่างที่หลายคนเข้าใจ กล่าวคือ เนื่องจากเป็นอาร์เรย์ชนิดตัวอักษร ดังนั้นหากช่องใดเป็นช่องว่างจะทำการกำหนดค่าเริ่มต้นให้กับช่องนั้นเป็น ‘\0’(null character ) โดยอัตโนมัติ
ดูอีกตัวอย่างการกำหนดค่าเริ่มต้นให้กับอาร์เรย์ 1 มิติ เพื่อความเข้าใจ
int n[ ] ={1,2,3,4}; |
อธิบาย อย่างที่เคยบอกไว้ว่าการประกาศตัวแปรอาร์เรย์ขึ้นใช้งาน จะต้องกำหนดขนาดของอาร์เรย์ที่แน่นอนทุกครั้ง แต่เราก็ยังสามารถประกาศในรูปแบบด้านบนนี้ได้เช่นกันครับ แต่ต้องกำหนดค่าเริ่มต้นให้กับอาร์เรย์ทั้งหมด เช่นจากด้านบนเรากำหนดให้ 4 ค่า คือ 1,2,3,4 ซึ่งจะเป็นการกำหนดโดยอัตโนมัติว่าอาร์เรย์มีขนาด 4 ช่องนั้นคือ
int n [ ] = {1,2,3,4}; มีความหมายเหมือนกับ int n [4] = {1,2,3,4};
Note | ||
การประกาศตัวแปรอาร์เรย์ขึ้นใชงานนั้น จะต้องกำหนดขนาดของอาร์เรย์ทุกครั้งเช่น |
เอาละคราวนี้เรามาดูตัวอย่างโปรแกรมแสดงการกำหนดค่าเริ่มต้นให้อาร์เรย์ 1 มิติ
1: | #include<stdio.h> | |
2: | #include<conio.h> | |
3: | ||
4: | ||
5: | main(){ | |
6: | int a[3] = {100,200,300}; | |
7: | int b[ ] = {100,200,300}; | |
8: | int i; | |
9: | char c[3] = "ab"; | |
10: | char d[3] = { ‘a’,'b’ }; | |
11: | clrscr(); | |
12: | gotoxy(10, 1); | |
13: | printf("Compare between array a and array b"); | |
14: | for(i=0;i<3;i++) { | |
15: | gotoxy(20, 2+i); | |
16: | printf("a[%d]=%d ,b[%d]=%d",i,a[i],i,b[i]); | |
17: | } | |
18: | printf("\n array a have %d element",sizeof(a)/2); | |
19: | printf("\n array b have %d element",sizeof(b)/2); | |
20: | printf("\n so array a same as array b\n"); | |
21: | ||
22: | for(i=0;i<3;i++) { | |
23: | gotoxy(10, 10+i); | |
24: | if(c[i]==’\0’) | |
25: | printf("array c terminate with null character"); | |
26: | else | |
27: | printf("c[%d] = %c",i,c[i]); | |
28: | } | |
29: | for(i=0;i<3;i++) { | |
30: | gotoxy(10, 13+i); | |
31: | if(d[i]==’\0’) | |
32: | printf("array d terminate with null character"); | |
33: | else | |
34: | printf("d[%d] = %c",i,d[i]); | |
35: | } | |
36: | getch(); | |
37: | } |
ผลลัพธ์โปรแกรม | ||
Compare between array a and array b a[0]=100 ,b[0]=100 a[1]=200 ,b[1]=200 a[2]=300 ,b[2]=300 array a have 3 element array b have 3 element so array a same as array c[0] = a c[1] = b array c terminate with null character d[0] = a d[1] = b array d terminate with null character |
อธิบายโปรแกรม
บรรทัดที่ 6-7 : ประกาศและกำหนดค่าเริ่มต้นให้ตัวแปร a และ b ซึ่งเป็นอาร์เรย์ชนิดเลขจำนวนเต็ม
บรรทัดที่ 9-10 : ประกาศและกำหนดค่าเริ่มต้นให้ตัวแปร c และ d ซึ่งเป็นอาร์เรย์ชนิดตัวอักษร(สตริง)
บรรทัดที่12 : ฟังก์ชั่น gotoxy() เป็นฟังก์ชั่นที่ใช้กำหนดตำแหน่งของเคอร์เซอร์บนหน้าจอซึ่งรูปแบบของ gotoxy() คือ gotoxy(x,y) โดย x คือตำแหน่งเคอร์เซอร์ในแนวตั้งมีได้สูงสุดถึง 80 คอลัมน์ และ y คือตำแหน่งเคอร์เซอร์ในแนวนอนซึ่งมีได้สูงสุด 25 บรรทัด โดยในที่นี้กำหนดให้เคอร์เซอร์เลื่อนไปคอลั่มที่ 10 ของบรรทัดที่ 1 สำหรับการเรียกใช้งานฟังก์ชั่น gotoxy() นั้นต้องทำการรวมเฮดเดอร์ไฟล์ conio.h เข้าไว้ในโปรแกรมด้วย
บรรทัดที่14-17: ทำการพิมพ์ค่าอาร์เรย์a และ b ออกทางจอภาพสังเกตุที่บรรทัด15นะครับมีการใช้ gotoxy() กำหนดการเลื่อนของเคอร์เซอร์ไปยังคอลั่มที่20ทุกครั้งที่แสดงผลส่วนบรรทัดนั้นจะมีการเปลียนค่าไปในแต่ละรอบของลูป เช่น ถ้าทำงานรอบแรกจะไปที่บรรทัดที่ 2 (มาจาก 2+i = 2+0) รอบต่อไปจะเป็นบรรทัดที่ 3 เป็นต้นดั้งนั้นจึงไม่จำเป็นต้องใช้ '\n' ช่วยในการขึ้นบรรทัดใหม่
บรรทัดที่ 18-19 : ทำการหาขนาดของ array ว่าเป็นกี่ช่อง
บรรทัดที่ 22-35 : ทำการวนลูปตรวจสอบค่าของอาร์เรย์ c และ d โดยถ้าตรวจสอบพบว่าเป็น '\0'(null) ซึ่งคือจุดสิ้นสุดของ สตริงก็จะพิมพ์ข้อความบอกให้รู้ว่าสิ้นสุดสตริงแล้วแต่ถ้าหากไม่ใช่ ก็จะแสดงตัวอักษรของช่องนั้นๆออกมาแทน
เอาละผมว่ามันชักจะยาวเกินไปแล้วเดียวค่อยมาต่อกันที่ อาร์เรย์ 1 มิติ (Array 1D) ภาค2 แล้วกันนะครับ สุดท้ายนี้ก็หวังว่าจะเข้าใจเกียวกับเจ้า Array เพิ่มขึ้นอีกหน่อยนะครับ see you again
0 ความคิดเห็น:
แสดงความคิดเห็น