บทที่ 06 อาร์เรย์ (Array)

15
ศิริชัย นามบุรี อารเรย (Array) บทที่ 6 อารเรย (Array) ความหมายของขอมูลชนิดอารเรย (array) อารเรย (array) เปนขอมูลชนิดมีโครงสราง (structure) หมายถึงเปนขอมูลชุดหนึ่งมีจํ านวนนวน สมาชิกขอมูลแนนอนและตองเปนชนิดเดียวกันทั้งชุด แตละรายการของขอมูลในชุดนั้น เรียกวา สมาชิก ของอารเรย (element of array) สมาชิกแตละตัวมีตัวชี้ตํ าแหนงที ่อยู เรียกวา อินเด็กซ (index) เพื่อใช สํ าหรับการอางอิงถึงขอมูลแตละสมาชิก โดยอินเด็กซเปนขอมูลชนิดที่มีลํ าดับ เชน integer ตัวอยางขอมูลชนิดอารเรย 1 มิติ เชน คะแนนสอบของนักศึกษา 10 คน เปนตัวเลขประเภท int กํ าหนดเปนโครงสรางของอารเรยดังนี นักศึกษาคนที (index) [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] คะแนนที่ได ความหมายของขอมูลในอารเรยโดยใช index เปนตัวชี้ขอมูลในแตละชอง เปนดังนี้ อารเรยชองที่ [0] มีคาคะแนนนักศึกษา คนที่ 1 เก็บอยู คือ 20 อารเรยชองที่ [1] มีคาคะแนนนักศึกษา คนที่ 2 เก็บอยู คือ 25 อารเรยชองที่ [2] มีคาคะแนนนักศึกษา คนที่ 3 เก็บอยู คือ 15 อารเรยชองที่ [3] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 30 อารเรยชองที่ [4] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 28 อารเรยชองที่ [5] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 16 อารเรยชองที่ [6] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 23 อารเรยชองที่ [7] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 24 อารเรยชองที่ [8] มีคาคะแนนนักศึกษา คนที่ 4 เก็บอยู คือ 30 อารเรยชองที่ [9] มีคาคะแนนนักศึกษา คนที่ 10 เก็บอยู คือ 26 ถาคะแนนที ่เก็บเปนขอมูลชนิด int จะจองพื ้นที ่หนวยความจํ าในการเก็บขอมูล 2 byte * 10 ชอง เทากับ 20 byte 20 25 23 24 30 16 26 28 30 15 ขอมูลในอาเรย

Transcript of บทที่ 06 อาร์เรย์ (Array)

Page 1: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

บทที่ 6อารเรย (Array)

♦ !ความหมายของขอมูลชนิดอารเรย(array)อารเรย (array) เปนขอมูลชนิดมีโครงสราง (structure) หมายถึงเปนขอมูลชุดหนึ่งมีจํ านวนนวน

สมาชิกขอมูลแนนอนและตองเปนชนิดเดียวกันทั้งชุด แตละรายการของขอมูลในชุดนั้น ๆ เรียกวา สมาชิกของอารเรย (element of array) สมาชิกแตละตัวมีตัวชี้ต ําแหนงท่ีอยู เรียกวา อินเด็กซ (index) เพื่อใชส ําหรับการอางอิงถึงขอมูลแตละสมาชิก โดยอินเด็กซเปนขอมูลชนิดที่มีล ําดับ เชน integer

ตัวอยางขอมูลชนิดอารเรย 1 มิต ิ เชน คะแนนสอบของนักศึกษา 10 คน เปนตัวเลขประเภท intกํ าหนดเปนโครงสรางของอารเรยดังน้ี

นักศึกษาคนท่ี (index)[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

คะแนนที่ได

ความหมายของขอมูลในอารเรยโดยใช index เปนตัวชี้ขอมูลในแตละชอง เปนดังนี้อารเรยชองที่ [0] มีคาคะแนนนักศึกษา คนที ่1 เก็บอยู คือ 20อารเรยชองที่ [1] มีคาคะแนนนักศึกษา คนที ่2 เก็บอยู คือ 25อารเรยชองที่ [2] มีคาคะแนนนักศึกษา คนที ่3 เก็บอยู คือ 15อารเรยชองที่ [3] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 30อารเรยชองที่ [4] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 28อารเรยชองที่ [5] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 16อารเรยชองที่ [6] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 23อารเรยชองที่ [7] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 24อารเรยชองที่ [8] มีคาคะแนนนักศึกษา คนที ่4 เก็บอยู คือ 30อารเรยชองที่ [9] มีคาคะแนนนักศึกษา คนที ่10 เก็บอยู คือ 26ถาคะแนนท่ีเก็บเปนขอมูลชนิด int จะจองพ้ืนท่ีหนวยความจํ าในการเก็บขอมลู 2 byte *

10 ชอง เทากับ 20 byte

! 20 ! 25 ! 23 ! 24 ! 30! 16 ! 26! 28! 30! 15

! ขอมูลในอาเรย

Page 2: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

82

หมายเหตุ การจองพ้ืนท่ีหนวยความจํ าของอารเรยจะจองพ้ืนท่ีในหนวยความจํ าตอเน่ืองกันไป ตั้งแตสมาชิกเริ่มตนตัวที ่ 0 จนถึงตัวสุดทาย

♦ ! ขอมูลอารเรยชนิด 1 มิติขอมูลชนิดอารเรย 1 มิติ หมายถึง อารเรยที่มีอินเด็กซในการอางอิงถึงแตละสมาชิกเพียง 1 ตัว1. การกํ าหนดขอมูลชนิดอารเรย 1 มิต ิ ในโปรแกรม มีรูปแบบดังน้ี

โดยที ่Array_Type คือ ชนิดขอมูล (data type) ในอารเรยหรือประเภทอารเรย เชน int, char, float Array_name คือ ช่ือของตัวแปรอารเรย [amount of element] คือ จํ านวนสมาชิกหรือรายการของอารเรย

ตัวอยางขอมูลคะแนนนักศึกษา จํ านวน 10 คน เชนนักศึกษาคนท่ี (index)

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]คะแนนที่ได

กํ าหนดตัวแปรอารเรยเก็บคะแนนเปนชนิด int และจองจํ านวนสมาชิกไว 10 รายการ ดังน้ีint score[10];2. การอางถึงสมาชิกและขอมูลในอารเรย การอางถึงแตละสมาชิกของอารเรยท ําไดโดยการเขียน

ชื่อของอารเรยและระบบอินเด็กซของสมาชิกไวใน [ ] โดยอินเด็กซเร่ิมต้ัง 0 ถึง n-1 (n คือจํ านวนสมาชิกของอารเรยทั้งหมด) เชน

score[0] มีขอมูล 20 เก็บอยูscore[1] มีขอมูล 25 เก็บอยูscore[5] มีขอมูล 16 เก็บอยูscore[9] มีขอมูล 26 เก็บอยู

3. การกํ าหนดคาใหอารเรย การก ําหนดคาใหแกอารเรย 1 มิติ มีวิธีการดังนี้3.1 การก ําหนดคาคงท่ีใหกับอารเรย เชน

score[0] = 20;score[1] = 25;score[2] = 15;score[9 ]= 26;

! 20 ! 25 ! 23 ! 24 ! 30! 16 ! 26! 28! 30! 15

! Array_Type Array_name[amount of element];

Page 3: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

83

สามารถก ําหนดคาของอารเรย เปน constant โดยระบุจํ านวนสมาชิกหรือไมระบุก็ไดดังนี้const int score[10] = { 20,25,30,26,24,18,17,25,24,22};const int score[] = { 20,25,30,26,24,18,17,25,24,22};

3.2 การก ําหนดคาใหอารเรยจากตัวแปร เชนx = 20; y = 26;score[0] = x;score[9] = y;

4. การรับขอมูลทางคียบอรดเก็บในอาเรยโดยใชค ําสั่งลูป เพื่อความสะดวกและความยืดหยุนในโปรแกรม เราสามารถรับคาคงที่เขาไปเก็บไวในอารเรยแตละสมาชิกโดยใชลูป for, while , do เชน

for( no=0 ; no<=9; ++no) cin>>score[no]; //enter from keyboard to array and no is index

5. การแสดงผลขอมูลอารเรย สามารถแสดงผลขอมูลในอารเรยแตละสมาชิกได โดยการอางช่ือและอินเด็กซ โดยใชลูป for , while ,do เพ่ือแสดงผลขอมูลในอารเรยท้ังหมดได เชน

for(no=0;no<=9;++no)cout<<score[no]<<endl; //display data all element of array and no is index

• ! ตัวอยางโปรแกรม array1.cpp แสดงการรับคาคะแนนนักศึกษา 10 คน เก็บไวในอารเรยคํ านวณหาผลรวมคะแนนท้ังหมดและค ํานวณหาคาเฉลี่ยของคะแนน พรอมแสดงผลขอมูลจากอารเรยท้ังหมด

/*Program : array1.cpp Process : input and display data for array 1 dimension */

#include <iostream.h> #include <conio.h>

void main() //begin program { int no,score[10]; float avg=0,sum=0; clrscr(); //input integer constant to array cout<< "Please enter score of student 10 persons\n\n"; for(no=0;no<=9;++no) { cout<< "Std.#"<<no+1<<" : "; cin>>score[no]; }

Page 4: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

84

cout<< "O.K. you enter complete...press any key to display\n"; getch();clrscr();

//display value of each element of array cout<< "Display your enter score :\n"; for(no=0;no<=9;++no) { cout<< "Std.#"<<no+1<<" : "<<score[no]; cout<<endl; sum+=score[no]; //calculate summation } avg=sum/10.0; //calculate average of score cout<<"Summation of score = "<<sum<<endl; cout<<"Average of score = "<<avg<<endl<<'\a'; getch();} //end program

• ! ตัวอยางโปรแกรม arr_func.cpp แสดงการรับคาคะแนนนักศึกษา 10 คน เก็บไวในอารเรยคํ านวณหาผลรวมคะแนนท้ังหมดและค ํานวณหาคาเฉลี่ยของคะแนน พรอมแสดงผลขอมูลจากอารเรยท้ังหมด แตเขียนแยกเปนฟงกชันทํ าหนาท่ีแยกกัน

/*Program : arr_func.cpp Process : define input and display data for array 1 dimension */ #include <iostream.h> #include <conio.h> //declaration prototype function void input(); void display(); //declaration external variable int score[10]; float avg=0,sum=0;

void main() //begin main program { clrscr(); input(); //call function display(); //call function avg=sum/10.0; //calculate average of score cout<<"Summation of score = "<<sum<<endl; cout<<"Average of score = "<<avg<<endl<<'\a';getch(); } //end main program void input() //input() function for enter integer constant to array

Page 5: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

85

{ int no; cout<< "Please enter score of student 10 persons\n\n"; for(no=0;no<=9;++no) { cout<< "Std.#"<<no+1<<" : "; cin>>score[no]; } cout<< "O.K. you enter complete...press any key to display\n"; getch();clrscr(); }

void display() //display() function for show value of each element of array { int no; cout<< "Display your enter score :\n"; for(no=0;no<=9;++no) { cout<< "Std.#"<<no+1<<" : "<<score[no]; cout<<endl; sum+=score[no]; //calculate summation } }

♦ !อารเรย 2 มิติอารเรย 2 มิติ (two-dimension array) หมายถึง อารเรยท่ีมีตัวอินเด็กซสํ าหรับการอางถึงขอมูล

จํ านวน 2 ชุด คือ อินเด็กซช้ืแนวแถว(row) และแนวคอลัมน (column)ลักษณะของขอมูลชนิดที่เปนอารเรย 2 มิติ เชน คะแนนสอบของนักศึกษาจ ํานวน 10 คน ทั้ง

หมด 3 วิชา ดังตารางนักศึกษาคนท่ี คะแนนวิชา

คณิตศาสตร ภาษาอังกฤษ วิทยาศาสตร1 25 30 352 28 25 323 30 29 334 29 30 355 35 20 376 26 31 307 20 26 308 26 25 249 29 30 3510 26 32 25

! แนวแถว

! แนวคอลัมน

Page 6: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

86

จากตาราง 2 มิติขางบน ถาตองการเก็บคะแนนสอบของนักศึกษาดังกลาว สามารถใชตัวแปรอารเรยชนิด 2 มิติเพ่ือเก็บขอมูลชุดน้ีได สังเกตจากตารางดังกลาว (เฉพาะที่เปนขอมูลตัวเลขคะแนน)ประกอบดวย 10 แถว และ 3 คอลัมน ตัวอยาง การอานคะแนนจากตาราง แถวที่ 5 คอลัมนที ่ 3 คือ 37เปนคะแนนของนักศึกษาคนที ่ 5 วิชาที ่ 3 คือ วิชาวิทยาศาสตร

1. การกํ าหนดอารเรย 2 มิต ิ การประกาศตัวแปรประเภทอารเรย 2 มิติ มีรูปแบบดังน้ี

โดยที ่ Array_Type คือ ชนิดขอมูลในอารเรยหรือประเภทอารเรย 2 มิติ เชน char , int ,float ,double

Array_name คือ ช่ือของตัวแปรอารเรย 2 มิติ[row] คือ จํ านวนสมาชิกหรือรายการของอารเรยในแนวแถว[column] คือ จํ านวนสมาชิกหรือรายการของอารเรยในแนวคอลัมนการคํ านวณจ ํานวนรายการหรือสมาชิกของอารเรย 2 มิต ิคือ row*column

2. การอางอิงถึงสมาชิกอารเรย 2 มิต ิ มีวิธีการอางอิงโดยการเขียนช่ืออารเรย และอินเด็กซของสมาชิกนั้น เชน

score[3][2] หมายถึงสมาชิกอารเรยตํ าแหนงแถวที่ 3 คอลัมนที ่ 2score[0][3] หมายถึงสมาชิกอารเรยตํ าแหนงแถวที่ 0 คอลัมนที ่ 3

3. การกํ าหนดคาใหอารเรย 2 มิต ิ มีวิธีการก ําหนดคาเชนเดียวกับอารเรย 1 มิติ คือกํ าหนดคาคงที่ใหกับอารเรย เชน

score[3][2] = 25;score[2][1] = 30;x = 35;score[3][3] = x;ถาตองการก ําหนดคาอารเรย 2 มิติเปนลักษณะ constant กํ าหนดไดเชนเดียวกับอารเรย

1 มิติ ดังน้ีconst int score[5][3] = { {25,30,22},

{30,25,20}, {25,24,18}, {22,21,24}, {20,18,17}

};หรือไมตองระบบจํ านวนแถวของอารเรย ดังน้ี

! Array_Type Array_name[row][column];

Page 7: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

87

const int score[][3] = { {25,30,22}, {30,25,20},

{25,24,18},{22,21,24},{20,18,17}

}; โดยท่ีมิติแรก คือ จํ านวนแถวไมตองระบุก็ได C++ compiler จะทราบเองจากการตรวจ

สอบเซตของคาคงที่ที่ก ําหนดในลักษณะ constเพื่อความสะดวกและความยืดหยุนในโปรแกรม การก ําหนดคาใหอารเรยโดยการรับคา

จากการกรอกทางคียบอรด จะใชลูป for, while หรือ do จํ านวน 2 ลูปซอนกันเพื่อรับขอมูลไปเก็บไวในอารเรย สามารถก ําหนดลูปได 2 ลักษณะ

- กรอกในแนวแถวกอน เชน จากขอมูลตัวอยาง จะกรอกคะแนนของนักศึกษาคนที่ 1ใหครบทั้ง 3 วิชากอน แลวจึงเริ่มกรอกคะแนนของนักศึกษาคนที่ 2 ใหครบทุกวิชา ท ําเชนน้ีเร่ือย ๆ จนถึงคะแนนคนที ่10 วิชาที ่3 ดังตัวอยางการใชลูป for

for(std_no=0;std_no<=9;++std_no) //ลูปนอกfor(subj_no=0;subj_no<=2;++subj_no) //ลูปใน

cin>>score[std_no][subj_no];

std_no คือ ตัวแปรเก็บคาตัวช้ีตํ าแหนงแถวหรือนักศึกษาคนที ่0 - 9subj_no คือ ตัวแปรเก็บคาตัวช้ีตํ าแหนงคอลัมนหรือวิชาท่ี 0-2

- กรอกในแนวคอลมันกอน เชน จากขอมูลตัวอยาง จะกรอกคะแนนนักศึกษาของวิชาที่1 ใหครบทั้ง 10 คนกอน จากน้ันจึงเร่ิมกรอกวิชาท่ี 2 ใหครบกอน แลวจึงเร่ิมกรอกคะแนนวิชาท่ี 3 จนกวาจะกรอกคะแนนวิชาที ่3 ของนักศึกษาคนที่ 10 ซึ่งเปนคนสุดทาย ดังตัวอยางการใชลูป for

for(subj_no=0;subj_no<=2;++subj_no) //ลูปนอกfor(std_no=0;std_no<=9;++std_no) //ลูปใน

cin>>score[std_no][subj_no];//subj_no คือ ตัวแปรเก็บคาของคอลัมนหรือวิชาท่ี 0-2//std_no คือ ตัวแปรเก็บคาของแถวหรือนักศึกษาคนท่ี 0 - 9

Page 8: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

88

4. การแสดงผลอารเรย 2 มิต ิ การแสดงผลขอมูลแตละสมาชิกในอารเรย 2 มิติ มีวิธีการใชลูป 2ลูปซอนกัน เหมือนกับการก ําหนดคาเชนเดียวกัน เพียงแตใช cout แทน cin เพ่ือแสดงคาตัวแปร จากตัวอยางคะแนนสอบนักศึกษา 10 คน 3 วิชา สามารถเขียนลูป for เพื่อแสดงผลได ดังน้ี

- กรณีแสดงคาแนวแถวกอนfor(std_no=0;std_no<=9;++std_no) //ลูปนอก

for(subj_no=0;subj_no<=2;++subj_no) //ลูปในcout>>score[std_no][subj_no];

- กรณีแสดงคาแนวคอลัมนกอนfor(subj_no=0;subj_no<=2;++subj_no) //ลูปนอก

for(std_no=0;std_no<=9;++std_no) //ลูปในcin>>score[std_no][subj_no];

//subj_no คือ ตัวแปรเก็บคาของคอลัมนหรือวิชาท่ี 0-2//std_no คือ ตัวแปรเก็บคาของแถวหรือนักศึกษาคนท่ี 0 - 9

• ! ตัวอยางโปรแกรม arr_2dim.cpp แสดงการรับคาและแสดงคาอารเรย 2 มิต ิ คะแนนสอบของนักศึกษา 10 คน เปนจ ํานวนเต็ม วิชาที่สอบ 3 วิชา โดยการกรอกขอมูลเปนรายคน ไดดังนี้

/*Program : arr_2dim.cpp Process : define input and display data for array 2 dimension */

#include <iostream.h> #include <conio.h> //declaration prototype function void input(); void display(); //declaration external variable int score[10][3];

void main() //begin main program { clrscr(); input(); display(); cout<< "\n\nO.K. press any key to exit\n\a"; getch(); } //end main program

Page 9: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

89

void input() //input() function for enter integer constant to array { int std_no,subj_no,col,row; cout<< "Please enter score of student 10 persons\n\n"; gotoxy(5,3);cout<<"Std # Math English Science"; col=15;row =5; //varaible for function gotoxy() for(std_no=0;std_no<=9;++std_no) { gotoxy(7,row); //skip cursor to enter data position cout<<std_no+1; for(subj_no=0;subj_no<=2;++subj_no) { gotoxy(col,row); cin>>score[std_no][subj_no]; col+=15; //increase column position } row++; //increase row position col=15; //set column at old position in new row (next student) } cout<< "O.K. you enter complete...press any key to display\n\a"; getch();clrscr(); }

void display() //display() function for display score { int std_no,subj_no,col,row; cout<< "*** Display score of student 10 persons 3 subjects ***\n\n"; gotoxy(5,3);cout<<"Std # Math English Science"; col=15;row =5; for(std_no=0;std_no<=9;++std_no) { gotoxy(7,row); cout<<std_no+1; for(subj_no=0;subj_no<=2;++subj_no) { gotoxy(col,row); cout<<score[std_no][subj_no]; col+=15; } row++; col=15; } }

Page 10: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

90

♦ !อารเรย 3 มิติอารเรย 3 มิติ (3 dimension array) เปนอารเรยท่ีมีอินเด็กซอางอิงถึงตํ าแหนงขอมูลจํ านวน 3 ชุด

คือ แถว, คอลัมน และแนวลึก ตัวอยางขอมูลที่สามารถน ํามาเก็บในลักษณะของอารเรย 3 มิติได เชนคะแนนสอบนักศึกษา จํ านวน 5 คน(แถว) วิชาสอบทั้งหมด 3 วิชา(คอลัมน) แตละวิชาสอบ 2 คร้ัง(ลึก)มีขอมูลดังตารางตอไปน้ี

คะแนนวิชานักศึกษาคนท่ี คณิตศาสตร ภาษาอังกฤษ วิทยาศาสตร

ครั้งที่ 1 ครั้งที่ 2 ครั้งที่ 1 ครั้งที่ 2 ครั้งที่ 1 ครั้งที่ 21 24 25 28 30 20 352 26 28 24 25 30 323 31 30 30 29 26 334 25 29 25 30 30 355 30 35 18 20 32 37

จากขอมูลคะแนนทั้งหมดในตาราง เปรียบเทียบกับโครงสรางขอมูลอารเรยแบบ 3 มิติ ไดดังน้ีแนวแถว แทน จํ านวนนักศึกษา 5 คนแนวคอลัมน แทน จํ านวนวิชา 3 วิชาแนวลึก แทน จํ านวนคร้ังท่ีสอบ 2 คร้ัง1. การกํ าหนดขอมูลอารเรย 3 มิต ิ มีรูปแบบการก ําหนด ดังน้ี

โดยที่ Array_Type คือ ชนิดขอมูลในอารเรยหรือประเภทของอารเรย 3 มิติArray_name คือ ช่ือของตัวแปรอารเรย 3 มิติ[row] คือ จํ านวนสมาชิกหรือรายการของอารเรยในแนวแถว[column] คือ จํ านวนสมาชิกหรือรายการของอารเรยในแนวคอลัมน[depth] คือ จํ านวนสมาชิกหรือรายการในแนวลึก

จ ํานวนสมาชิกของอารเรย 3 มิต ิเทากับ row*column*depth เชน int score[5][3][2];จะมีจํ านวนสมาชิกของอารเรยท้ังหมด 5*3*2 = 30 สมาชิก

! แนวแถว! ทั้งหมด! 5 แถว

Array_Type Array_name[row][column][depth];

! แนวคอลัมน มีทั้งหมด 3 คอลัมน

! แตละคอลัมนมีแนวลึกอีก 2 แนวลึก

Page 11: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

91

2. การอางถึงสมาชิกอารเรย 3 มิต ิ ตองเขียนช่ืออารเรยและตามดวยอินเด็กซท้ัง 3 ชุด เชนscore[0][1][0]; หมายถึง คะแนนสอบของนักศึกษาคนที ่1 วิชาที ่2 สอบครั้งที ่1 เน่ือง

จากอินเด็กซเร่ิมท่ี 03. การกํ าหนดคาใหกับอารเรย 3 มิต ิ มีวิธีการก ําหนดเชนเดียวกับอารเรย 2 มิติ เพียงแตตองเพ่ิม

ตํ าแหนงอินเด็กซชุดท่ี 3 (แนวลึก) เชนscore[0][1][1] = 25;score[4][2][0] = 30;การกํ าหนดเปน constant ตองกํ าหนดคาคงท่ีใหกับอารเรยใหครบทุกชอง ดังนี้const int score[5][3][2] = {

{ {25,24},{21,23},{24,23} },{ {24,20},{29,30},{28,29} },{ {27,32},{24,29},{29,30} },{ {24,29},{24,30},{25,28} },{ {24,35},{28,21},{28,23} }};

เราสามารถใชลูป for, while หรือ do กํ าหนดคาโดยการกรอกขอมูลทางคียบอรดได โดยใชคํ าสั่งลูปซอนกัน 3 ลูป ตัวอยางการใชลูป for ดังน้ี

for(std_no=0;std_no<=4;++std_no)for(subj_no=0;subj_no<=2;++subj_no)

for(time_no=0;time_no<=1;++time_no) cin>>score[std_no][subj_no][time_no]; //input from

keyboard

4. การแสดงผลจากอารเรย 3 มิต ิ สามารถใชลูป for, while หรือ do ตัวอยางเชน การใชลูป forแสดงคาในอารเรย score[5][3][2] เปนดังน้ี

for(std_no=0;std_no<=4;++std_no)for(subj_no=0;subj_no<=2;++subj_no)

for(time_no=0;time_no<=1;++time_no)cout<<score[std_no][subj_no][time_no]; //display

Page 12: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

92

♦ !การสงคาอารเรยใหฟงกชันช่ือของอารเรยสามารถใชเปนอารกิวเมนตสงใหแกฟงกชันได ท ําใหสามารถสงอารเรยทั้งชุดไป

ใหแกฟงกชัน เพ่ือนํ าคาของอารเรยไปใชในฟงกชันได แตวิธีการการสงอารเรยไปใหฟงกชันมีขอแตกตางจากการสงตัวแปรธรรมดา คือในการสงอารเรยไปใหแกฟงกชันนั้นจะตองเขียนเฉพาะชื่อของอารเรยไมตองกํ าหนดตัวช้ีหรือ index สวนในการก ําหนดพารามิเตอรรอรับคาของอารเรยน้ัน ใหก ําหนดตัวแปรชนิดอารเรยรอรับไว โดยไมตองระบุจํ านวนสมาชิกในอารเรย ดังตัวอยางตอไปน้ี

• ! ตัวอยางโปรแกรม Arr_Fun1.CPP แสดงการสงคาของอารยท้ังหมดใหแกฟงกชัน เพ่ือนํ าขอมูลในอารเรยท้ังหมดไปแสดงผล คํ านวณผลรวม และคํ านวณคาเฉลี่ย

! /*Program:Arr_Fun1.Cpp! Process: display and calculate summation, average of all array! */! #include <iostream.h>! #include <ctype.h>! #include <conio.h>!! //prototype function! void ShowArray(int x[]);! float AvgArray(int x[]);! int SumArray(int x[]);! //global variable! int number[5]={10,20,30,40,50};! void main() //main function! { clrscr();! ShowArray(number);! cout<<"\nSummation of All Array : "<<SumArray(number);! cout<<"\nAverage of All Array : "<<AvgArray(number);! getch();! }

! สงอารกิวเมนตไปเฉพาะช่ือของอาารเรย number

! สงอารกิวเมนตไปเฉพาะช่ือของอาารเรย number

! สงอารกิวเมนตไปเฉพาะช่ือของอาารเรย number

Page 13: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

93

! void ShowArray(int x[]) //function display all array element! {! int i;! for(i=0;i<=4;i++)! cout<<"#"<<i+1<<": "<<x[i]<<endl;! }!! int SumArray(int x[]) //function calculate summation of all array! {! int i,sum=0;! for(i=0;i<=4;i++)! sum=sum+x[i];! return sum;! }!! float AvgArray(int x[])//function calculate average of all array! {! int i,sum=0;! for(i=0;i<=4;i++)! sum=sum+x[i];! return sum/5;! }

พารามิเตอรรอรับคา ไมตองระบุจ ํานวนสมาชิกของอารเรย

! พารามิเตอรรอรับคา ไมตองระบุจํ านวนสมาชิกของอารเรย

! พารามิเตอรรอรับคา ไมตองระบุจํ านวนสมาชิกของอารเรย

Page 14: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

94

♦ ! แบบฝกหัดทายบท1. ใหเขียนโปรแกรมเพ่ือรับคาจํ านวนเต็ม 10 จํ านวนทางคียบอรด แสดงคาจ ํานวนเต็มท่ีกรอกท้ังหมดพรอมกับหาคาขอมูลที่มากที่สุดและขอมูลนอยที่สุดของขอมูลชุดนี้ พรอมบอกตํ าแหนงของอารเรยท่ีพบขอมูลที่มากที่สุดและที่นอยที่สุดดวย แสดงผลทางจอภาพ

2. จงสราง Matrix ขนาด 3x4 กรอกขอมูลลงในแตละชอง และค ํานวณหาผลรวมในแนวแถว และแนวคอลัมนของ Matrix น้ี ดังตัวอยางผลลัพธตอไปนี้

col1 col2 col3 col4 Totalrow1 20 30 10 10 70row2 10 25 5 40 80row3 20 40 30 30 120Total 50 95 45 80 270

3. จากขอมูลในตารางตอไปน้ี ใหเขียนโปรแกรมเพ่ือกรอกคะแนน นักศึกษา จํ านวน 5 คน จํ านวน 3 รายวิชา แตละวิชามีคะแนนสอบ 2 คร้ัง และใหหาคะแนนเฉลี่ยของการสอบแตละครั้ง ทั้ง 3 รายวิชา แลวแสดงรายงานทางจอภาพ ดังน้ี ( เสนตารางไมตองสราง )

คะแนนวิชานักศึกษาคนท่ี คณิตศาสตร ภาษาอังกฤษ วิทยาศาสตร

คร้ังท่ี 1 คร้ังท่ี 2 คร้ังท่ี 1 คร้ังท่ี 2 คร้ังท่ี 1 คร้ังท่ี2

1 24 25 28 30 20 352 26 28 24 25 30 323 31 30 30 29 26 334 25 29 25 30 30 355 30 35 18 20 32 37รวม 999 999 999 999 999 999เฉลี่ย 99.99 99.99 99.99 99.99 99.99 99.99

! กรอกขอมูล! ทางคียบอรด

Page 15: บทที่ 06 อาร์เรย์ (Array)

!

ศิริชัย นามบุรี อารเรย(Array)

95

4. ใหเขียนโปรแกรมรับขอมูลตัวเลขจํ านวนเต็ม 10 จํ านวน และสรางฟงกชันในการจัดเรียงขอมูล 10 จํ านวนน้ี คือ Ascending() เรียงขอมูลจากนอยไปมาก ฟงกชัน Descending() เรียงขอมูลจากมากไปนอย

5. ใหเขียนโปรแกรมรับขอมูลตัวอักขระ 5 ตัว และสรางฟงกชันในการจัดเรียงขอมูล 5 อักขระน้ี คือฟงกชัน Ascending() เรียงขอมูลจากนอยไปมาก ฟงกชัน Descending() เรียงขอมูลจากมากไปนอย