แบบทดสอบ Online

สถิติผู้เข้าชม

529311
TodayToday223
YesterdayYesterday347
This WeekThis Week2665
This MonthThis Month9079
All DaysAll Days529311

ROBOT TEAM


warayuphat panumphan 'Kru Pu', Powered by Joomla!
Array PDF Print E-mail
Written by Administrator   
Thursday, 09 August 2012 01:49

Array (แถวลำดับ)


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

int n1,n2,n3,n4,n5,n6,n7,...,n99,n100;

ซึ่งการประกาศตัวแปรแบบนี้จะทำให้สิ้นเปลืองเวลา และยากต่อการจัดการข้อมูล ในภาษา C++ จึงได้กำหนดโครงสร้างใหม่ขึ้นมาเพื่อให้ง่ายต่อการจัดการข้อมูลที่มีหลายๆ จำนวน ดังที่กล่าวมาข้างต้น ซึ่งโครงสร้างใหม่ที่ว่านี้ เรียกว่า "Array" หรือเรียกเป็นภาษาไทยว่า "แถวลำดับ"

เราจะประกาศใช้ Array ได้อย่างไร ?

ชนิดข้อมูล   ชื่อตัวแปร[ขนาดของอาร์เรย์];

เช่น    ต้องการสร้างอาร์เรย์เก็บข้อมูลจำนวนเต็ม 25 จำนวน สามารถประกาศได้ดังนี้           
int num[25];
ต้องการสร้างอาร์เรย์เก็บข้อมูลเลขจำนวนจริง 100 จำนวน สามารถประกาศได้ดังนี้    
float real[100];
ต้องการสร้างอาร์เรย์เก็บข้อมูลตัวอักษร 10 ตัว สามารถประกาศได้ดังนี้                    
char alpha[11];
ที่ใส่ขนาดอาร์เรย์เกินมา จาก 10 เป็น 11 เพราะในการเก็บข้อมูลอาร์เรย์ ชนิด char จำเป็นจะต้องมีค่า NULL เก็บไว้ที่ช่องสุดท้าย เพื่อเป็นการบอก Complier ว่าเป็นการจบข้อความน้ันๆ ไม่มีข้อมูลต่อจากนี้แล้ว

การเข้าถึงข้อมูลในอาร์เรย์

เมื่อเราประกาศอาร์เรย์ เช่น int num[5]; จะเป็นการจองพื้นที่เก็บข้อมูลใน RAM ไว้จำนวน 5 ช่องดังภาพ

เราสามารถเข้าถึงข้อมูลแต่ละช่องได้โดยการใช้ index โดยข้อมูลช่องแรกจะเป็น index 0 เสมอแล้วไล่ไปเรื่อยๆ เช่น ถ้าประกาศอาร์เรย์ไว้ 10 ช่อง index จะมีได้ตั้งแต่ 0-9

จากรูปหากเราต้องการเก็บเลข 1 ไว้ในช่องแรก และเลข 2 ไว้ในช่องที่ 2 จะสามารถทำได้ดังนี้

num[0]=1;
num[1]=2;

การจัดการข้อมูลในอาร์เรย์ให้มีประสิทธิภาพ

หากจำเป็นต้องรับค่าข้อมูลมาเก็บไว้ในอาร์เรย์ 100 ช่อง เราคงไม่อยากนั่งพิมพ์คำสั่ง cin>> เป็นจำนวน 100 บรรทัด

cin>>num[0];
cin>>num[1];
cin>>num[2];
...
cin>>num[98];
cin>>num[99];

ถ้าเรามานั่งพิมพ์ cin>> รับค่าทีละค่า ก็คงไม่ต่างกับการประกาศตัวแปรแบบธรรมดา 100 ตัว แล้วเราจะมีวิธีในการเก็บข้อมูลอาร์เรย์ที่ดีกว่านี้หรือไม่ ? คำตอบคือ มี โดยการใช้ การวน Loop เข้าช่วย จะสังเกตเห็นว่า index จะเรียงลำดับตั้งแต่ 0,1,2,3,4,... ไปเรื่อยๆ เราจึงใช้ Loop เพื่อวนเลข index ในการเก็บข้อมูล

for(int i=0;i<5;i++)
{
cin>>num[i];
}

ตัวอย่าง โปรแกรมรับเกรดเฉลี่ยจากผู้ใช้มา 5 ค่า และรับเกรดเฉลี่ยมาตรฐานมา 1 ค่า หลังจากนั้นให้แสดงค่าเกรดเฉลี่ยที่มีค่ามากกว่าหรือเท่ากับเกรดเฉลี่ยมาตรฐาน หากไม่มีเกรดเฉลี่ยใดที่มีค่ามากกว่าหรือเท่ากับเกรดเฉลี่ยมาตรฐาน ให้พิมพ์ none ออกทางจอภาพ



Array 2 มิติ คืออะไร?

ถ้าอาร์เรย์ 1 มิติ เปรียบเสมือนแถวลำดับ อาร์เรย์ 2 มิติก็คงเปรียบเทียบได้กับตาราง ดังภาพ

รูปแบบการประกาศ อาเรย์ 2 มิติ

ชนิดตัวแปร ชื่อตัวแปร [แถว][คอลัมภ์];

หมายเหตุ

แถว -> แนวนอน

คอลัมภ์ -> แนวตั้ง

เราจะประกาศใช้ Array 2 มิติ ได้อย่างไร ?

 

ประกาศใช้คล้ายกับอาร์เรย์ 1 มิติ แต่ต้องระบุขนาดเพิ่มเข้าไปอีกมิติหนึ่ง ดังนี้

int num[5][5];

เราสามารถเข้าถึงข้อมูลแต่ละช่องได้โดยการใช้ index โดยข้อมูลช่องแรกจะเป็น index 0 เสมอแล้วไล่ไปเรื่อยๆ เช่น ถ้าประกาศอาร์เรย์ไว้ 10 ช่อง index จะมีได้ตั้งแต่ 0-9

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

num[0][0]=1;
num[4][4]=2;

การจัดการข้อมูลในอาร์เรย์ 2 มิติ ให้มีประสิทธิภาพ

ในการจัดการข้อมูลในอาร์เรย์ 1 มิติ เราจะใช้ Loop For 1 Loop ในการวนค่า index แต่อาร์เรย์ 2 มิติ มี index 2 ตัว จึงต้องใช้ Loop For 2 Loops ในการวนค่า index ดังนี้

for(int i=0;i<5;i++){
for(int j=0;j<5;j++)
cin>>num[i][j];
}

แบบฝึกหัด

1. ประกาศอาเรย์ 2 มิติ ชื่อตัวแปรเป็นชื่อเล่นตัวเอง 3แถว 2คอลัมภ์

เพือเก็บคะแนนสอบ แล้วตั้งคำถามไปถามคะแนนจากผู้ใช้

หลังจากนั้นแสดงผลคะแนนของทุกคนออกทางจอภาพ (จัดหน้าจอให้สวยงาม ดูง่าย)

หมายเหตุ การวนซำ้ให้นักเรียนใช้ คำสั่งในการวนรอบ

2. จงเขียนโปรแกรมบวกอาร์เรย์ 2 อาร์เรย์ที่มีขนาด อาร์เรย์ละ 5 ช่อง เช่น


อาร์เรย์ที่ 1 :

อาร์เรย์ที่ 2 :

ผลบวกของอาร์เรย์ทั้ง 2 มีค่า 6 6 6 6 6 เป็นต้น



3. จงเขียนโปรแกรมรับค่าตัวเลขจำนวนเต็ม 16 จำนวน (แถวละ 4 จำนวน ทั้งหมด 4 แถว) จากนั้นให้หาค่าทแยงมุมของข้อมูลที่รับเข้าไป
โดยกำหนดให้ค่าทแยงคือ ผลต่างของผลบวกข้อมูลในแนวทแยงมุมทั้ง 2 ยกตัวอย่างเช่น

 



ผลบวกแนวทแยงมุมที่ 1 มีค่า 1+6+11+16 = 34
ผลบวกแนวทแยงมุมที่ 2 มีค่า 4+7+10+13 = 34
ดังนั้น ค่าทแยงมุมของข้อมูลชุดนี้มีค่า = ผลบวกแนวทแยงมุมที่ 1 - ผลบวกแนวทแยงมุมที่ 2 = 0


 

 

4. จงประกาศตัวแปรอาเรย์ 2 มิติ 4 แถว 3 คอลัมภ์ ไว้เก็บเกรดเฉลี่ย

-ให้นักเรียนกำหนดค่าคงที่ลงไปเลย กำหนดเอง

-ตั้งชื่อตัวแปรเป็นชื่อเล่นตัวเอง

-วาดตารางการเข้าถึงข้อมูล โดยในตาราง ใส่ค่า และเขียนการเข้าถึงข้อมูลลงไปด้วย เช่น

a[0][1]

3.5

 

QUIZ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int a[3][2];

for(int b=0;b<3;b++)

{for(int c=0;c<2;c++)

{cout<<"Enter your code : ";

cin>>a[b][c];}}

cout<<"\n";

for(int d=0;d<3;d++)

{for(int e=0;e<2;e++)

{cout<<"Your code : ";

cout<<a[d][e]; cout<<"\n";}}

return 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Last Updated on Monday, 15 January 2018 03:00
 

Poll กรุณาตอบคำถามค่ะ

คุณเขียนโปรแกรมบ่อยแค่ไหน
 

Poll สื่อการสอน

สื่อแบบไหน ที่คุณชอบ
 

จำนวนผู้ชมที่ online ขณะนี้

We have 17 guests online

analogclock

search engine

Banner
Banner
Banner
Banner
Banner
Banner
Banner
Banner
Banner
Banner
Banner