วันอาทิตย์ที่ 21 สิงหาคม พ.ศ. 2554

อาเรย์ (Array)


อาเรย์ (Array)



ตัวแปรอาเรย์สามารถเก็บข้อมูลหลายๆข้อมูลไว้ได้โดยไม่ต้องใช้ตัวแปรหลายตัว เช่นถ้าต้องการเก็บอายุของเพื่อนทั้ง 20 คน ถ้าเราใช้ตัวแปรแบบ int เราจะต้องประกาศตัวแปร age1, age2, age3,.....,age20 ให้เป็นแบบ int ซึ่งเป็นการประกาศตัวแปรถึง 20 ตัวด้วยกัน แต่ถ้าใช้อาเรย์เราประกาศตัวแปร age ให้เป็นอาเรย์แบบ int เพียงตัวเดียวก็สามารถเก็บค่าทั้ง 20 ค่าได้แล้ว



อาเรย์ 1 มิติ (One-Dimensional Array)



เราสามารถสร้างตัวแปรอาเรย์ของข้อมูลชนิดต่างๆได้ไม่ว่าจะเป็นอาเรย์แบบ int, char, float ดังตัวอย่างต่อไปนี้

void main()

{

int age [5];

double grade [5];

char s [5];

....

}

จากตัวอย่างเป็นการประกาศตัวแปรชื่อ age ให้เป็นอาเรย์ของข้อมูลชนิด int ที่มีขนาดเท่ากับ 5 ดังนั้นตัวแปร age จะสามารถเก็บเลขจำนวนเต็มได้ถึง 5 จำนวน สำหรับตัวแปร grade ถูกประกาศเป็นอาเรย์ของข้อมูลชนิด double และมีขนาดเท่ากับ 5 เช่นเดียวกัน เราจึงสามารถเก็บเลขทศนิยมไว้ในตัวแปร grade ได้ 5 จำนวน และการประกาศตัวแปร s ให้เป็นอาเรย์ของข้อมูลชนิด char ที่มีขนาด 5 ตัวอักษร จึงเก็บตัวอักษรได้ 5 ตัว

เมื่อเราประกาศตัวแปรอาเรย์ทั้ง 3 ตัวคือ age, grade และ s แล้ว ในหน่วยความจำจะมีการจองพื้นที่เอาไว้ตามจำนวนที่กำหนด โดยตัวแปร age และ grade นั้นจะมีการเตรียมพื้นที่ว่างในหน่วยความจำสำหรับเก็บค่าตัวแปรละ 5 ค่า และตัวแปร s ก็มีการเตรียมพื้นที่เอาไว้เก็บตัวอักษร 5 ตัว

การนำค่าใส่ลงไปในตัวแปรอาเรย์

ตัวแปรอาเรย์นั้นสามารถเก็บค่าได้หลายๆค่า โดยแต่ละค่าก็จะเหมือนกับเป็นตัวแปร 1 ตัว เช่นถ้าเราประกาศตัวแปร int age [5] ก็เหมือนกับว่าเรามีตัวแปร age ถึง 5 ตัว ซึ่งแต่ละตัวนี้เราเรียกว่าสมาชิกของอาเรย์ การอ้างถึงสมาชิกของอาเรย์จะต้องใช้หมายเลขลำดับ โดยเริ่มจาก 0,1,2,...ไปเรื่อยๆจนถึง” ขนาดของอาเรย์ลบด้วย 1” เช่นถ้าเราสร้างอาเรย์ int age [5] การอ้างถึงสมาชิกของอาเรย์จะใช้หมายเลข 0 ถึง 4 ถ้าเรานำเอาค่า 20, 21, 23, และ 26 มากำหนดให้กับสมาชิกลำดับที่ 0, 1, 2 และ 3 ของอาเรย์ age ตามลำดับ เราจะเขียนโปรแกรมดังนี้

int age [5];

age [0] = 20;

age [1] = 21;

age [2] = 23;

age [3] = 26;

จะเห็นว่าตัวแปร age เป็นอาเรย์แบบ int ซึ่งเก็บเลขจำนวนเต็มได้ 5 ค่า แต่จากตัวอย่างเรากำหนดค่าให้กับสมาชิกลำดับที่ 0 ถึง 3 โดยไม่ได้กำหนดค่าให้กับสมาชิกลำดับที่ 4 เพราะว่าการใส่ข้อมูลลงในอาเรย์นั้นไม่จำเป็นจะต้องใส่ทุกๆช่องให้ครบจึงจะใช้งานได้ ช่องใดไม่ได้ใส่ค่าลงไป มันก็ไม่เก็บค่าอะไรไว้จะเป็นช่องว่างๆไปโดยอัตโนมัติ

อาเรย์ของข้อมูลชนิด char คือตัวแปรสตริง

ตัวแปรอาเรย์ของข้อมูลชนิด char อีกนัยหนึ่งก็คือตัวแปรแบบข้อความหรือตัวแปรสตริง

(String) ตัวแปรสตริงคือการนำเอาตัวแปรแบบ char มาเรียงต่อๆกัน ซึ่งตัวแปร char ที่เรียงต่อกันก็เรียกได้ว่าเป็นตัวแปรอาเรย์ของข้อมูลชนิด char นั่นเอง จึงสรุปได้ว่า ”สตริง” กับ “อาเรย์ของ ข้อมูลชนิด char” คือสิ่งเดียวกัน

ตัวแปรอาเรย์ของข้อมูลชนิด char จะแตกต่างจากอาเรย์ของ int, double หรือแบบอื่นๆ เพราะว่าสมาชิกตัวสุดท้ายของอาเรย์แบบ char จะใช้เก็บรหัสสิ้นสุดข้อความ ด้วยเหตุนี้ถ้าเราประกาศตัวแปรอาเรย์แบบ char เพื่อเก็บข้อความ เราจะต้องประกาศอาเรย์ให้มีขนาดมากกว่าจำนวนตัวอักษรของข้อความที่ต้องการเก็บอย่างน้อย 1 ตัวอักษร

สมมติว่าเราประกาศตัวแปรอาเรย์แบบ char เพื่อที่จะเก็บคำว่า “Computer” ซึ่งมีทั้งหมด 8 ตัวอักษร เราจะต้องประกาศตัวแปรอาเรย์แบบ char ที่มีขนาด 9 ตัวอักษร นอกจากนี้การกำหนดค่าให้กับตัวแปรอาเรย์แบบ char หรือตัวแปรสตริงนี้ยังสามารถทำไปพร้อมกับการประกาศตัวแปรได้เลย ดังนี้

char s[5] = “GIRL”;

หรือ

char s[5] = { ‘G’, ‘I’, ‘R’, ‘L’ }





การนำค่าในอาเรย์ไปใช้

การใช้งานตัวแปรอาเรย์แบบ char นั้น โดยมากจะใช้รับค่าที่เป็นข้อความ เช่นชื่อ, เบอร์โทรศัพท์, ที่อยู่, อีเมล์, ชื่อเว็ปไซท์ เป็นต้น ดังตัวอย่างต่อไปนี้

#include

void main()

{

char s[10];

printf (“What is your name?n”);

scanf (“%s”, s);

printf (“You are %s. n”, s);

}

ผลการรันโปรแกรม

What is your name?

robert

You are robert.

จากตัวอย่างเราได้ประกาศอาเรย์ s เอาไว้ 10 ช่อง เพื่อให้เพียงพอต่อการเก็บชื่อโดยประมาณเอาไว้ 10



อาเรย์ 2 มิติ (Two-Dimensional Array)



อาเรย์ 2 มิติจะเก็บข้อมูลไว้ในลักษณะของตาราง

การสร้างอาเรย์ 2 มิตินั้นเราจะเขียนโค้ดภาษาซีดังนี้

int a[3][3];

int b[2][3];

การนำค่าที่ต้องการเก็บในอาเรย์เราจะต้องอ้างถึงลำดับของสมาชิกช่องนั้นๆ ทั้งลำดับในแนวนอนและลำดับในแนวตั้ง หรือจะมองในลักษณะของคู่ลำดับก็ได้ดังรูปต่อไปนี้

int a[3][3];

a[0][0] a[1][0] a[2][0]

a[0][1] a[1][1] a[2][1]

a[0][2] a[1][2] a[2][2]

จะเห็นว่าหมายเลขลำดับของอาเรย์ในแต่ละแนวเริ่มต้นจาก 0 จนถึง “ขนาดในแนวนั้นลบด้วย 1” เช่น ถ้าประกาศอาเรย์ 2 มิติขนาด 3x3 ลำดับในแนวนอนก็จะเริ่มจาก 0 ถึง 2 รวมทั้งหมด 3 ช่อง และในแนวตั้งก็จะเริ่มจาก 0 ถึง 2 รวมทั้งหมด 3 ช่องเช่นกัน

สำหรับวิธีการนำเอาข้อมูลใส่ลงในตัวแปรอาเรย์ 2 มิตินี้ก็จะใช้หลักการเดียวกันกับอาเรย์ 1 มิติ โดยระบุช่องที่ต้องการใส่ค่าลงไป เช่นถ้าจะใส่ค่า 10 ลงในช่อง a[1][2] เราจะเขียนโปรแกรมดังนี้

int a[3][3];

a[1][2] = 10;



int a[3][3];

a[0][0] a[1][0] a[2][0]

a[0][1] a[1][1] a[2][1]

a[0][2] 10 a[2][2]



การอ้างอิงสมาชิกของอาเรย์ 2 มิติ จะใช้การระบุเลขลำดับสองตัวเรียงกัน คือ [x][y] โดย x เป็นเลขที่บอกว่าอยู่ช่องที่เท่าไหร่ในแนวนอนและ y บอกว่าอยู่ช่องที่เท่าไหร่ในแนวตั้ง



อาเรย์ 3 มิติ (Three-Dimensional Array)



ลักษณะของอาเรย์ 3 มิติจะมีความลึกมาเกี่ยวข้องด้วย การประกาศอาเรย์ 3 มิติทำได้โดย

เพิ่มมิติที่ 3 เข้าไปเช่น

int a[3][3][4];

จากโค้ดตัวอย่างเป็นการประกาศอาเรย์ 3 มิติที่มีขนาด 3x3x4 โดยเลข 2 ตัวแรกคือ 3 กับ 3 จะหมายถึงอาเรย์ 2 มิติขนาด 3x3 ดังนั้นพอมีมิติที่ 3 เพิ่มเข้ามาซึ่งมีขนาดเป็น 4 ก็จะเหมือนกับมีอาเรย์ 2 มิติขนาด 3x3 เรียงกันอยู่ 4 ชุดนั่นเอง

การนำข้อมูลไปเก็บไว้ในอาเรย์ 3 มิติจะใช้เลขลำดับ 3 ค่าเพื่ออ้างถึงตำแหน่งในแนวตั้ง, แนวนอน และแนวลึกของอาเรย์ ดังตัวอย่างต่อไปนี้

a[1][0][0] = 8;

a[1][1][0] = 14;

a[2][1][0] = 17;



a[2][0][1] = 9;

a[2][1][1] = 8;

a[2][2][1] = 13;



a[1][0][2] = 9;

a[1][1][2] = 8;

a[2][1][2] = 13;

โดยทั่วไปเราไม่ค่อยพบเห็นการใช้งานอาเรย์ 3 มิติบ่อยนักเพราะจะใช้ในการแก้ไขปัญหาเฉพาะด้าน เช่นการวาดกราฟิกที่มีความลึกเป็นต้น เรามักจะเห็นการใช้งานอาเรย์ 2 มิติมากกว่า แต่อย่างไรก็ตามหลักการในการกำหนดค่าและการเข้าถึงข้อมูลสามารถทำได้เช่นเดียวกัน

ไม่มีความคิดเห็น:

แสดงความคิดเห็น