array คือกลุ่มของข้อมูลที่เรียงลำดับกัน มีจำนวนแน่นอนซึ่งข้อมูลจะเป็นประเภทเดียวกัน array จะเป็นตัวแปรที่ชื่อ เหมือนกัน แต่จะแตกต่างกันตรงหมายเลข อินเด็กซ์ เพื่อใช้ในการอ้างถึง array จะทำให้การตั้งชื่อตัวแปรไม่มากมายหรือ ซับซ้อนเกินไปก็ได้ ถ้าหากตัวแปรหลายตัวเป็นประเภทเดียวกันเราก็อาจจะใช้ array แทนได้
รูปแบบการใช้ array 1 มืติ
การใช้ตัวแปร array มีรูปแบบดังนี้
ประเภทตัวแปร ชื่อตัวแปรarray[จำนวนสมาชิกของ array;
เช่น
int Score[4];
ในที่นี้มีความหมายว่า เป็นการประกาศตัวแปร array ชื่อ Score มีจำนวน 4 รายการ โดยมีรายการที่
Score[0]
Score[1]
Score[2]
Score[3]
Score[0] Score[1] Score[2] Score[3]
int int int int
รายการของ array จะเริ่มที่ 0 ไม่ได้เริ่มที่ 1 ถ้าเราประกาศตัวแปร array เช่น int i[3] ก็จะมีรายการที่ 0 ถึง 2 จะไม่มีหมายเลข อินเด็กซ์ 3
การเข้าถึงสมาชิกของ array
การใช้ค่าคงที่ในการเข้าถึงสมาชิกของ array
เราสามารถกำหนดค่าให้ สมาชิกของ array แต่ละรายการ คล้ายกับการกำหนดให้กับตัวแปร ธรรมดา แต่ว่าถ้าเป็น ตัวแปร array เราจะต้องกำหนด อินเด็กซ์ เป็นค่าคงที่ เช่น
int A[4];
A[0] = 50;
จะมี
A[0] A[1] A[2] A[3]
int int int int
มีความหมายว่าให้ตัวแปร array ชื่อ A อินเด็กซ์ ที่ 0 มีค่าเท่ากับ 50
ถ้าเราเขียน Source code แบบนี้
cout << A[2];
หมายถึงเป็นการให้โปรแกรมแสดงข้อมูลของตัวแปร array ชื่อ A อินเด็กซ์ที่ 2
การใช้ตัวแปรในการเข้าถึงสมาชิกของ array
เราสามารถใช้ตัวแปร เป็นอินเด็กซ์ในการเข้าถึง สมาชิกของ array ได้ โดยที่ถ้าค่าของตัวแปรมีค่าเท่าไหร่ ก็จะเท่ากับ เป็นการอ้างถึง อินเด็กซ์ เลขนั้น
int j = 3;
int i[5];
cout << i[j];
แบบนี้จะมีความหมายว่าให้ แสดงค่าของตัวแปร array ชื่อ i อินเด็กซ์ที่ 3
การใช้โอเปอเรเตอร์เลขคณิตในการเข้าถึงสมาชิกของ array
เราสามารถใช้โอเปอเรเตอร์เลขคณิตในการเข้าถึงสมาชิกของ array ได้ เช่น
A[2+3] = 40;
หมายถึง การกำหนด ค่า 40 ให้กับตัวแปร array ชื่อ A อินเด็กซ์ที่ 5
โปรแกรมที่ 7-1 ตัวอย่างการใช้ตัวแปร array
Source code
1:#include"iostream.h"
2:main()
3:{
4: int Score[7];
5:
6:
7: Score[1] = 10;
8: Score[2] = 6;
9: Score[3] = 25;
10: Score[4] = 59;
11:
12: cout << Score[1] << endl;
13: cout << Score[2] << endl;
14: cout << Score[3] << endl;
15: cout << Score[4] << endl;
16: return 0;
17:}
Output
10
6
25
59
อธิบาย Source code
บรรทัดที่ 4: เป็นการประกาศตัวแปร array ประเภท int ชื่อ Score มีจำนวน 7 สมาชิก ตั้งแต่สมาชิกที่ 0 ถึง 6
บรรทัดที่ 7 ถึง บรรทัดที่ 10:เป็นการกำหนดค่าให้แก่ตัวแปร Score อินเด็กซ์ที่ 1,2,3,4 ตามลำดับ เราไม่จำเป็นต้องใช้ตัวแปร array ทุก อินเด็กซ์ที่มี เช่นในโปรแกรมนี้เราไม่ใช้ อินเด็กซ์ 0,5,6 เราอยากกำหนดให้อินเด็กซ์ ไหนก่อน ก็ได้
บรรทัดที่ 12 ถึง บรรทัดที่ 15:เป็นการแสดงค่าของตัวแปร array ชื่อ Score อินเด็กซ์ที่ 1,2,3,4 ตามลำดับ
โปรแกรมที่ 7-2 ตัวอย่างการใช้ loop ในการกำหนดและแสดงผลตัวแปร array โดยโปรแกรมนี้จะมีการทำงาน วน loop รับค่าตัวแปร array ชื่อ Score ทั้ง 7 อินเด็กซ์ และก็ใช้การวน loop แสดงผล โดยเรียงจากตำแหน่งสุดท้ายมาตำแหน่งแรก
Source code
1:#include"iostream.h"
2:main()
3:{
4: int Score[7];
5: int i;
6:
7: for(i=0;i<=6;i++)
8: {
9: cout << "Enter Score :";
10: cin >> Score[i];
11:
12: }
13:
14: for(i=6;i>=0;i--)
15: cout << Score[i] << endl;
16:
17: return 0;
18:}
Output
ข้อมูลที่จะลองใส่คือ 1,2,3,9,8,7,6
Enter Score:1
Enter Score:2
Enter Score:3
Enter Score:9
Enter Score:8
Enter Score:7
Enter Score:6
6
7
8
9
3
2
1
อธิบาย Source code
บรรทัดที่ 7 ถึง 12:เป็นการวน loop for โดยใช้ตัวแปร i ในการวน loop
ในบรรทัดที่ 10 เป็นการรับค่าตัวแปร Score อินเด็กซ์ ที่ i
ในรอบแรกจะมีความหมายเหมือนกับ cin >> Score[0]
ในรอบที่ 2 จะมีความหมายเหมือนกับ cin >> Score[1]
จนถึงรอบสุดท้ายจะเป็นการรับค่าตัวแปร Score อินเด็กซ์ ที่ 6
บรรทัดที่ 14 ถึง 17:จะเป็นการวนloop แสดงค่าตัวแปร Score อินเด็กซ์ i โดยการวน loop ครั้งนี้จะแตกต่างจากการ วน loop รับค่า ตรงที่ ครั้งนี้ค่า i จะเริ่มที่ 6 และในรอบสุดท้ายค่า i จะเป็น 0
ในรอบแรกจะมีความหมายเหมือนกับ cout << Score[6];
ในรอบที่ 2 จะมีความหมายเหมือนกับ cout << Score[5];
จนถึงรอบสุดท้ายจะเป็น อินเด็กซ์ 0
จากตัวอย่างที่ 7-1 และ 7-2 จะเห็นได้ว่าถ้าเราไม่ใช้ตัวแปร array เราก็อาจจะต้องประกาศตัวแปร ขึ้นมา ถึง 7 ตัว และเราจะไม่สามารถใช้การวน loop อ้างถึงตัวแปร แต่ละตัวได้ เช่น
int Score1,Score2,Score3,Score4,Score5,Score6,Score7 ,i ;
for(i=1;i<=7;i++)
cin >> Scorei;
ถึงแม้ว่าค่าของตัวแปร i ในแต่ละรอบจะเป็นตั้งแต่ 1 ถึง 7 แล้วเราเขียน Soucre code
เเบบนี้ cin >> Scorei;
เพื่อหวังว่ามันจะมีการทำงาน แบบนี้ในรอบที่ 1 cin >> Score1;
และจะเป็นแบบนี้ในรอบที่ 2 cin >> Score2;
แต่ในความเป็นจริงแล้วมันเป็นไปไม่ได้ ถึงแม้ว่าC++ จะเป็นโปรแกรมภาษาที่ยืดหยุ่นมากก็เถอะ ถ้าเราจะใช้การวน loop ในการรับค่า กำหนดค่า หรือ แสดงผลเราต้องใช้ตัวแปร array
การกำหนดค่าเริ่มต้นให้แก่ตัวแปร array
เราสามารถ กำหนดค่าเริ่มต้นให้แก่ สมาชิกแต่ละตัวของตัวแปร array ได้ โดยมีรูปแบบดังนี้
ประเภทตัวแปร ชื่อตัวแปรarray[จำนวนสมาชิกของ array] = {ค่าของแต่ละอินเด็กซ์, ค่าของแต่ละอินเด็กซ์}
ค่าของ แต่ละอินเด็กซ์แต่ละตัวต้องคั่นด้วยเครื่องหมาย , โดยที่ค่าที่กำหนดให้จะเรียงตามลำดับกันไป
เช่น
int A[10] = {5,6,7,2,3,5,4,8,6,9}
ตัวแปร A[0] จะเท่ากับ 5
A[1] จะเท่ากับ 6
A[9] จะเท่ากับ 9
โปรแกรมที่ 7-3 ตัวอย่างการกำหนดค่าเริ่มต้นให้กับต้วแปร array
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int A[10] ={5,3,6,4,7,8,1,2,9,3};
5: int i;
6: for(i=0;i<=9;i++)
7: {
8: cout << "A[" << i << "]" << "=";
9: cout << A[i] << endl;
10: }
11:
12:
13: return 0;
14:}
Output
A[0] =5
A[1] =3
A[2] =6
A[3] =4
A[4] =7
A[5] =8
A[6] =1
A[7] =2
A[8] =9
A[9] =3
อธิบาย Source code
บรรทัดที่ 4:เป็นการประกาศตัวแปร array ชื่อ A มี 10 สมาชิก โดยกำหนดค่าเริ่มต้นให้แก่สมาชิกแต่ละตัวด้วย
บรรทัดที่ 6 ถึง บรรทัดที่ 10 :เป็นการวน loop เพื่อแสดงข้อความ และค่าของ สมาชิกแต่ละตัว
การใช้หน่วยความจำของ array
จำนวนหน่วยความจำของตัวแปร array จะมีค่าเท่ากับ
หน่วยความจำของประเภทของตัวแปร * จำนวนสมาชิกของ
เช่น
int A[30];
ขนาดของหน่วนความจำที่ใช้จะเท่ากับ
ขนาดของตัวแปร int * จำนวนสมาชิก
2 * 30 = 60 bytes
โปรแกรมที่ 7-4 ตัวอย่างการใช้ sizeof หาจำนวนหน่วยความจำที่ตัวแปร array ใช้
Source code
1:#include"iostream.h"
2:int main()
3:{
4:
5: cout << "size of int[10] = ";
6: cout << sizeof(int[10]) << " bytes" << endl;
7:
8: cout << "size of float[20] = ";
9: cout << sizeof(float[20]) << " bytes" <<endl;
10:
11: cout << "size of double[5] = ";
12: cout << sizeof(double[5]) << " bytes" <<endl;
13:
14: cout << "size of char[40] = ";
15: cout << sizeof(char[40]) << " bytes" <<endl;
16:
17:
18: return 0;
19:}
Output
size of int[10] = 20
size of float[20]= 80
size of double[5] = 40
size of char[40] = 40
อธิบาย Source code
บรรทัดที่ 6,9,12,15:เป็นการใช้ sizeof แสดงผลขนาดของตัวแปร array โดยผลที่ก็เป็นอย่าง Output เช่นในบรรทัดที่ 9 เป็นการสั่งให้แสดงผลค่าของตัวแปร float ที่มี 20 สมาชิก ค่าที่ได้คือ
4 * 20 = 80 bytes
การใช้ array หลายมิติ
array สามารถมีได้มากกว่า 1 มิติ เช่นรูปแบบ array 2 มิติจะเป็นแบบนี้
รูปแบบของ array 2 มิติจะเป็นแบบนี้
ประเภทตัวแปร ชื่อตัวแปรarray[จำนวนสมาชิกของของมิติที่ ][จำนวนสมาชิกของมิติที่ 2];
เช่น
int A[5][3];
จะมีสมาชิกทั้งหมด 15 สมาชิก โดยจำนวนของสมาชิกจะเท่ากับ
จำนวนของมิติที่ 1 * จำนวนของมิติที่ 2
ในที่นี้ 5 * 3 = 15
สมาชิกจะมีตั้งแต่
คอลัมน์0 คอลัมน์1 คอลัมน์2
แถวที่ 0 A[0][0] A[0][1] A[0][2]
แถวที่ 1 A[1][0] A[1][1] A[1][2]
แถวที่ 2 A[2][0] A[2][1] A[2][2]
แถวที่ 3 A[3][0] A[3][1] A[3][2]
แถวที่ 4 A[4][0] A[4][1] A[4][2]
ในกรณีที่ array มี 2 มิติเราอาจจะเรียกมิติที่ 1 ว่า แถว และเรียกมิติที่ 2 ว่าคอลัมน์ก็ได้ แต่ถ้าจะนวนมิติของ array มีมากกว่า 2 ก็จะไม่สามารถใช้ คำว่าแถว หรือ คอลัมน์ได้
การเข้าถึงข้อมูลสมาชิกของ array ที่มีหลายมิติ
array ที่มีสมาชิกหลายมิติสามารถเข้าถึงข้อมูล ได้คล้ายกับ array 1 มิติ เพียงแต่เราต้องระบุอินเด็กซ์ของแต่ละมิติให้ครบ ตามจำนวนมิติของ array นั้น
เข่น int A[5][3];
A[0][1] = 5;
A[0][2] = 10;
A[3][2] = 257;
เป็นการกำหนดข้อมูลให้กับ ตัวแปร array 2 มิติ ชื่อ A โดยอินเด็กซ์ที่กำหนดให้ก็คือ [0][1],[0][2],[3][2] ค่าที่กำหนดให้คือ 5,7,257 ตามลำดับ สมมุติว่าเรากำหนดค่า 0 ให้กับสมาชิกตัวอื่นที่ไม่ใช้ 3 ตัวนี้ การเก็บข้อมูลจะเป็นรูปแบบนี้
คอลัมน์0 คอลัมน์1 คอลัมน์2
แถวที่ 0 0 5 10
แถวที่ 1 0 0 0
แถวที่ 2 0 0 0
แถวที่ 3 0 0 257
แถวที่ 4 0 0 0
นอกจากนั้นแล้วการ รับค่าจากทาง คีย์บอร์ด โดยใช้ cin และการแสดงผล โดยใช้ cout กับสมาชิกของ array ที่มีมากกกว่า 1 มิติก็ใช้ หลักการนี้ตลอด คือ เวลาจะกำหนดค่าหรือนำไปใช้ ก็ให้กำหนด อินเด็กซ์ ตามจำนวนมิติของ array นั้น ถ้าเป็น array 2 มิติก็ต้องกำหนด อินเด็กซ์ทั้ง 2 มิติ ถ้าเป็น array 3 มิติ ก็ต้องกำหนดทั้ง 3 มิติ
ตัวอย่ากการใช้ array 2 มิติ
เราอาจจะนำ array 2 มิติมาใช้ได้สำหรับในกรณีที่ โปรแกรมของเราจะมีการเก็บข้อมูลในลักษณะนี้
โดยเราอาจจะใช้ array 2 มิติในการเก็บข้อมูลโดยให้ มิติแรก เป็นมิติที่ระบุ ลำดับที่ของนักเรียน และให้มิติที่ 2 ระบุ ลำดับที่ของวิชาของแต่ละคน
เข่น Student[3][4];
Student[0][1] = 50;
หมายความว่า คะแนนของนักเรียนคนที่ 1 วิชาที่ 2 เท่ากับ 50
สาเหตุที่อินเด็กซ์ 0 จะเท่ากับนักเรียนคนที่ 1 เพราะว่า อินเด็กซ์ของ array จะเริ่มที่ 0 และนี่ก็เป็นสาเหตุที่ อินเด็กซ์ 1 เท่ากับวิชาที่ 2
Student[2][3] = 100;
หมายความว่า คะแนนของนักเรียนคนที่ 3 วิชาที่ 4 เท่ากับ 100
โปรแกรมที่ 7-5 ตัวอย่างการใช้ array 2 มิติ
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:#include"iomanip.h"
4:int main()
5:{
6: int Student[3][4];
7: int i,j;
8: // input data
9: for(i=0;i<=2;i++)
10: {
11:
12: cout << "Student " << i+1 << endl;
13: for(j=0;j<=3;j++)
14: {
15: cout << "Please enter Subject " << j+1 << ":";
16: cin >> Student[i][j];
17: }
18: cout << "******************************" << endl;
19: }
20:
21: // Output data
22: clrscr();
23: gotoxy(40,2);
24: cout << "Report";
25: cout << endl;
26: cout <<" *****************************************************" << endl;
27: gotoxy(15,4); cout << "Subject 1";
28: gotoxy(30,4); cout << "Subject 2";
29: gotoxy(45,4); cout << "Subject 3";
30: gotoxy(60,4); cout << "Subject 4";
31: cout << endl;
32: for(i=0;i<=2;i++)
33: {
34: cout << "Student" << i;
35:
36: for(j=0;j<=3;j++)
37: {
38:
39: cout << setw(15) << Student[i][j];
40: }
41: cout << endl;
42: }
43:
44: return 0;
45:}
Output
Student 1
Please enter Subject 1:1
Please enter Subject 2:2
Please enter Subject 3:3
Please enter Subject 4:4
******************************
Student 2
Please enter Subject 1:5
Please enter Subject 2:6
Please enter Subject 3:7
Please enter Subject 4:8
******************************
Student 3
Please enter Subject 1:9
Please enter Subject 2:10
Please enter Subject 3:11
Please enter Subject 4:12
หลังจากรับข้อมูลเสร็จแล้วโปรแกรมจะ เคลียร์หน้าจอ และแสดงผล
Report
*******************************************************
Subject 1 Subject 2 Subject 3 Subject 4
Student 1 1 2 3 4
Student 2 5 6 7 8
Student 3 9 10 11 12
อธิบาย Source code
บรรทัดที่ 6: int Student[3][4]; เป็นการประกาศตัวแปร array 2 มิติประเภท int ชื่อว่า Student มิติแรกมีขนาด 3 สมาชิก เราจะใช้มิติแรกเพื่อเป็นการระบุลำดับที่ของนักเรียนแต่ละคน มิติที่ 2 มีจำนวน 4 สมาชิกเราจะใช้มิติที่ 2 ในการเก็บข้อมูลวิชาที่ 1 ถึง 4 แต่ละคน
บรรทัดที่ 9 ถึง บรรทัดที่ 19:เป็นการวน loop for โดยใช้ตัวแปร i เพื่อที่จะวน loop จำนวนนักเรียน 3 คน โดยเราจะใช้ตัวแปร i กับมิติแรกของ array ในบรรทัดที่ 12 จะมีการแสดงผลข้อความที่หน้าจอเพื่อบอกว่านี่เป็นนักเรียนคนที่เท่าไหร่ สาเหตุที่ต้องแสดง i + 1 เพราะว่า
ตัวแปร i จะเป็น 0 สำหรับนักเรียน คนที่ 1
ตัวแปร i จะเป็น 1 สำหรับนักเรียน คนที่ 2
บรรทัดที่ 13 จะมีการทำงานคือ ทำการวน loop 4 รอบเพื่อรับคะแนนที่ป้อนเข้ามาทางคีย์บอร์ด
บรรทัดที่ 16 Statement นี้จะเป็นการทำการรับข้อมูลจากทางคีย์บอร์ดแล้วก็กำหนดให้ตัวแปร array
ที่ อินเด็กซ์ [i][j]
ค่าตัวแปร i ค่าตัวแปร j จะมีความหมายเท่ากับ
โดยที่รอบแรก 0 0 cin >> Student[0][0]
รอบที่ 2 0 1 cin >> Student[0][1]
จนถึงรอบที่ 4 ค่าตัวแปร i จะเป็น 0 ค่าตัวแปร j จะเป็น 3 จะเป็นการกำหนดคะแนนของนักเรียนคนที่ 1 วิชา ที่ 4
บรรทัดที่ 22 ถึง 30: จะเป็นการแสดงส่วนหัวของ Menu
บรรทัดที่ 32 ถึง 42:จะเป็นการแสดงผลข้อมูลของ array โดยการวนloop จะเหมือนกับบรรทัดที่ 9 ถึง 19 แต่เปลี่ยนเป็นการแสดงผลแทน
โปรแกรมที่ 7-6 ตัวอย่างการใช้ array 2 มิติในการคำนวนผลบวกของ matrix
ถ้าหากเรามี Matrix อยู่ 2 Matrix
คือ MatrixA MatrixB เราจะสามารถใช้ตัวแปร array 2 มิติในการหาผลบวกของทั้ง 2 Matrix นี้ได้ โดยใน
ที่นี้จะแสดงตัวอย่างการบวกของ Matrix ที่มีขนาด 2 มิติ
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:int main()
4:{
5: int MatrixA[2][2];
6: int MatrixB[2][2];
7: int i,j;
8: // input MatrixA
9: cout << "MatrixA" << endl;
10: for(i=0;i<=1;i++)
11: {
12: for(j=0;j<=1;j++)
13: {
14: cout << "Please enter number " << i+1 << "," << j+1 << " ";
15: cin >> MatrixA[i][j];
16:
17: }
18: }
19: cout << "MatrixB" << endl;
20: // input MatrixB
21: for(i=0;i<=1;i++)
22: {
23: for(j=0;j<=1;j++)
24: {
25: cout << "Please enter number " << i+1 << "," << j+1 << " ";
27: cin >> MatrixB[i][j];
28:
29: }
30: }
31:
32: clrscr();
33:// Output
34: cout << "MatrixA" << endl;
35: for(i=0;i<=1;i++)
36: {
37: for(j=0;j<=1;j++)
38: {
39: cout << MatrixA[i][j] << " ";
40: }
41: cout << endl;
42: }
43: cout << "MatrixB" << endl;
44: for(i=0;i<=1;i++)
45: {
46: for(j=0;j<=1;j++)
47: {
48: cout << MatrixB[i][j] << " ";
49: }
50: cout << endl;
51: }
52: // Calulate
53:
54: cout << "MatrixA+MatrixB" << endl;
55: for(i=0;i<=1;i++)
56: {
57: for(j=0;j<=1;j++)
58: {
59: cout << MatrixA[i][j] + MatrixB[i][j] << " ";
60: }
61: cout << endl;
62: }
63: return 0;
64:}
Output
MatrixA
Please enter number 1,1 1
Please enter number 1,2 2
Please enter number 2,1 3
Please enter number 2,1 4
MatrixB
Please enter number 1,1 4
Please enter number 1,2 3
Please enter number 2,1 2
Please enter number 2,1 1
เมื่อป้อนข้อมูลตัวสุดท้ายเสร็จแล้วโปรแกรมจะทำการเคลียร์หน้าจอและแสดงผลดังนี้
MatrixA
1 2
3 4
MatrixB
4 3
2 1
MatrixA + MatrixB
5 5
5 5
อธิบาย Source code
บรรทัดที่ 5 และ บรรทัดที่ 6:เป็นการประกาศตัวแปร array 2 ตัวชื่อ MatrixA และ MatrixB โดยตัวแปร 2 ตัวนี้เราจะใช้ในการหาค่าผลรวมของ Matrix
บรรทัดที่ 10 ถึง บรรทัดที่ 18:เป็นการวน loop เพื่อรับค่าของ MatrixA โดยที่เราจะใช้ตัวแปร i และ j ในการวน loop โดยให้ loop j เป็น loop ที่ซ้อนอยู่ใน loop i อีกที
รอบแรก
จะเท่ากับ cin >> MatrixA[0][0];
รอบที่ 2
จะเท่ากับ cin >> MatrixA[0][1];
รอบที่ 3
จะเท่ากับ cin >> MatrixA[1][0];
รอบที่ 4
จะเท่ากับ cin >> MatrixA[1][1];
การวน loop ทั้งโปรแกรมที่เหลือต่อจากนี้จะเป็นลักษณะนี้
บรรทัดที่ 21 ถึง บรรทัดที่ 30:ก็จะมีการทำงานเหมือนกับบรรทัดที่ 10 ถึง บรรทัดที่ 18 แต่จะเป็น MatrixB
บรรทัดที่ 34 ถึงบรรทัดที่ 42:จะเป็นการแสดงผล MatrixA โดยใช้การวน loop i กับ j
บรรทัดที่ 43 ถึง บรรทัดที่ 51:จะเป็นการแสดงผล MatrixB โดยจะมีการทำงานเหมือนกับบรรทัดที่ 34 ถึง 42
บรรทัดที่ 54 ถึง บรรทัดที่ 62:จะเป็นการแสดงผลที่ได้จากการบวกกันของ ตัวแปร MatrixA และ MatrixB
โปรแกรมที่ 7-7 ตัวอย่างการใช้ array ขนาด 2 มิติ ในการหาค่าผลรวม
โดยที่โจทย์คือให้เขียนโปรแกรมรับข้อมูลทางแป้นพิมพ์เป็นตาราง 2 มิติ ขนาด 3 * 3 ตอนรับให้รับเรียงลงมาทีละบรรทัดก็ได้ แล้วหลังจากที่รับเสร็จ ก็ให้นำมาหาผลรวมในแต่ละด้าน และแสดงผลในลักษณะตาราง
โปรแกรมนี้ไม่ยาก แต่จะค่อนข้าง ซับซ้อนอยู่พอสมควร ผู้เขียนจึงอยากอธิบายอัลกอริทึ่มแบบง่ายๆก่อน
1.ให้สร้าง array 2 มิติที่สามารถบรรจุข้อมูลทั้งตารางได้ โดยที่เราควรสร้าง array ให้แต่ละมิติมีจำนวน 4 สมาชิก ถึงแม้ว่าโปรแกรมจะให้รับข้อมูล ขนาด 3 * 3 แต่เราจำเป็นต้องคำนวณผลรวมด้วย เพราะฉะนั้นให้ใช้ arry 2 มิติที่มี 4 สมาชิกในแต่ละมิติในที่นี้สมมุติว่าชื่อ A
2.ทำการวนloop เพื่อรับข้อมูล โดยที่เราควรใช้ loop for ซ้อนกันในการรับข้อมูล ทั้ง 9 ตัว โดยที่รอบแรกต้องรับข้อมูลอินเด็กซ์ที่ 0,0
รอบที่ 2 คือ 0,1
จนถึงรอบที่ 9 คือ 2,2
ในที่นี้ให้ใช้ต้วแปร i และ j ในการวนloop โดยให้ loop j ซ้อนอยู่ใน loop i
3.จากนั้นเราจะได้ข้อมูลตัวที่ 0,0 ถึง 2,2 แล้วดังรูป
A 0 1 2 3
0 x xx xxx
1 x xx xxx
2 x xx xxx
3
ในตอนนี้ที่เราต้องทำคือหาค่าของ A[0][3] A[1][3] A[2][3] โดยเราจะได้จาก การที่ให้เราสร้างตัวแปร temp ขึ้นมา 1 ตัว และให้ทำการวน loop ทั้ง 9 ตัวโดยที่ตัวแปร temp จะทำการเก็บผลรวมในแต่ละรอบ โดยที่เมื่อครบ 3 รอบตัวแปร ก็ให้กำหนดให้ต้วแปร A[i][3] = temp และตัวแปร temp ก็ต้อง clear ค่าให้ เป็น 0
ค่าตัวแปร A[0][3] = A[0][0] + A[0][1] + A[0][2]
ค่าตัวแปร A[1][3] = A[1][0] + A[1][1] + A[1][2]
ค่าตัวแปร A[2][3] = A[2][0] + A[2][1] + A[2][2]
โดยที่การทำงาน รอบแรก ค่า i จะเป็น 0 และ j จะเป็น 0
temp += A[0][0];
รอบที่ 2 ค่า i จะเป็น 0 และ j จะเป็น 1
temp += A[0][1];
รอบที่ 3 ค่า i จะเป็น 0 และ j จะเป็น 2
temp += A[0][2];
จากนั้น จะเป็นการกำหนดให้ค่า temp ให้กับตัวแปร A[i][3];
A[i][3] = temp;
ซึ่งเราก็จะได้ A[0][3] , A[1][3] ,A[2][3] เมื่อโปรแกรมทำการวน loop ทั้ง 9 รอบ
4.เราได้ทำการคำนวนตัวเลขมา 1 แถวแล้วดังรูป
A 0 1 2 3
0 x xx xxx รวม
1 x xx xxx รวม
2 x xx xxx รวม
3
ตอนนี้สิ่งที่เราต้องหาคือ A[3][0] ,A[3][1] ,A[3][2] โดยที่การทำงานจะคล้ายกับข้อ 3 เพียงแต่เราต้องเปลี่ยนให้ตัวแปร temp เพิ่มค่า A[j][i] แทน จากเดิมที่เป็น A[i][j]
ค่าตัวแปร A[3][0] = A[0][0] + A[1][0] + A[2][0]
ค่าตัวแปร A[3][1] = A[0][1] + A[1][1] + A[2][1]
ค่าตัวแปร A[3][2] = A[0][2] + A[1][2] + A[2][2]
โดยที่การทำงาน รอบแรก ค่า i จะเป็น 0 และ j จะเป็น 0
temp += A[0][0];
รอบที่ 2 ค่า i จะเป็น 0 และ j จะเป็น 1
temp += A[1][0];
รอบที่ 3 ค่า i จะเป็น 0 และ j จะเป็น 2
temp += A[2][0];
จากนั้น จะเป็นการกำหนดให้ค่า temp ให้กับตัวแปร A[3][i];
A[3][i] = temp;
ซึ่งเราก็จะได้ A[3][0] , A[3][1] ,A[3][2] เมื่อโปรแกรมทำการวน loop ทั้ง 9 รอบ
5.ตอนนี้เราได้ทำการคำนวนผลรวมมา เกือบทั้งหมดแล้วดังรูป
A 0 1 2 3
0 x xx xxx รวม
1 x xx xxx รวม
2 x xx xxx รวม
3 รวม รวม รวม
เหลืออยู่อย่างเดียวที่เรายังไม่ได้ทำคือ หาค่าตัวแปร A[3][3]
ค่าตัวแปร A[3][3] = A[3][0] + A[3][1] + A[3][2] + A[0][3] + A[1][3] + A[2][3]
โดยเราอาจจะแบ่งได้เป็น 2 ส่วนคือ
ผลรวมของ A[3][0] A[3][1] A[3][2]
และ ผลรวมของ A[0][3] A[1][3] A[2][3]
ในส่วนแรกให้เราเขียน Source code วน loop โดยใช้ตัวแปร i ทำการวน loop 3 รอบ และใช้ตัวแปร temp ในการเก็บค่าผลรวม
temp += A[3][i];
ในรอบแรก จะเท่ากับ
temp += A[3][0];
ในรอบที่ 2 จะเท่ากับ
temp += A[3][1];
ในรอบที่ 3 จะเท่ากับ
temp +=A[3][2];
เท่านี้ตัวแปร temp ก็จะได้ผลรวมของ ส่วนแรกแล้ว
และในส่วนที่ 2 ก็จะคล้ายกับส่วนแรก แต่ให้เราเปลี่ยนเป็น
temp += A[i][3];
ในรอบแรก จะเท่ากับ
temp += A[0][3];
ในรอบที่ 2 จะเท่ากับ
temp += A[1][3];
ในรอบที่ 3 จะเท่ากับ
temp +=A[2][3];
ตอนนี้ตัวแปร temp ก็จะมีค่าผลรวมของทั้ง 6 ตัวแล้วและ ก็ให้เรากำหนดค่าตัวแปร A[3][3] ให้เท่ากับตัวแปร temp
6.แสดงผลในลักษณะตารางโดยใช้การวน loop
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:#include"iomanip.h"
4:int main()
5:{
6: int i,j;
7: int A[4][4];
8: int temp=0;
9: for(i=0;i<=2;i++)
10: {
11: for(j=0;j<=2;j++)
12: {
13: cout << "Please enter number " << i+1 << "," << j+1 << " ";
14: cin >> A[i][j];
15: }
16: }
17:
18: for(i=0;i<=2;i++)
19: {
20:
21: for(j=0;j<=2;j++)
22: {
23: temp +=A[i][j];
24: }
25: A[i][3] = temp;
26: temp =0;
27: }
28: for(i=0;i<=2;i++)
29: {
30:
31: for(j=0;j<=2;j++)
32: {
33: temp +=A[j][i];
34: }
35: A[3][i] = temp;
36: temp =0;
37: }
38:
39: for(i=0;i<=2;i++)
40: temp += A[3][i];
41:
42:
43: for(i=0;i<=2;i++)
44: temp += A[i][3];
45:
46: A[3][3] = temp;
47:
48: clrscr();
49: for(i=0;i<=3;i++)
50: {
51: for(j=0;j<=3;j++)
52: {
53: cout << setw(3) << A[i][j];
54: }
55: cout << endl;
56: }
57: return 0;
58:}
Output
Please enter number 1,1 7
Please enter number 1,2 8
Please enter number 1,3 9
Please enter number 2,1 4
Please enter number 2,2 5
Please enter number 2,3 6
Please enter number 3,1 1
Please enter number 3,2 2
Please enter number 3,3 3
มาถึงตรงนี้โปรแกรมจะทำการเคลียร์หน้าจอและแสดงผล
7 8 9 24
4 5 6 15
1 2 3 6
12 15 18 90
อธิบาย Source code
บรรทัดที่ 7:เป็นการสร้างต้วแปร array 2 มิติ ชื่อ A โดยแต่ละมิติมีสมาชิก 4 ตัว Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 1
บรรทัดที่ 9 ถึง บรรทัดที่ 16: เป็นการรับข้อมูลและก็กำหนดให้ตัวแปร array Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 2
บรรทัดที่ 18 ถึง บรรทัดที่ 27:เป็นการ วน loop เพื่อหาค่าตัวแปร A[0][3],A[1][3],A[2][3] Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 3
บรรทัดที่ 28 ถึง บรรทัดที่ 37: เป็นการ วน loop เพื่อหาค่าตัวแปร A[3][0],A[3][1],A[3][2] Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 4
บรรทัดที่ 39 ถึง บรรทัดที่ 46:เป็นการวน loop เพื่อหาค่าตัวแปร A[3][3] Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 5
บรรทัดที่ 49 ถึง บรรทัดที่ 56:เป็นการวน loop เพื่อแสดงผลในลักษณะ ตาราง Source code ในส่วนนี้ตรงกับ อัลกอริทึ่มในข้อ 6
การกำหนดค่าเริ่มต้นให้กับ array 2 มิติ
วิธีการกำหนดค่าเริ่มต้นให้กับ array 2 มิติจะคล้ายกับ การกำหนดค่าเริ่มต้นให้กับ array 1 มิติแต่จะแตกต่างกันคือ ในข้อมูลแต่ละกลุ่มจะต้องแบ่งแยกด้วยเครื่องหมาย { และ } และต้องมีเครื่องหมาย , คั่นเช่น
เช่น int A[5][3] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
หรือเราจะเขียนแบบนี้เพื่อให้ดูง่ายก็ได้
int A[5][3] ={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
หรือถ้าจะให้ดูง่ายกว่านี้ก็ให้เราเขียนแบบนี้ int A[5][3] ={
{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12},
{13,14,15}
};
มีความหมายว่า ตัวแปร A เป็นตัวแปร array 2 มิติ ประเภท int โดยที่จะแบ่งได้เป็น 5 กลุ่ม คือ
A[0] ถึง A[4] และแต่ละกลุ่มจะมี 3 สมาชิก คือ A[0][0],A[0][1],A[0][2] จนถึง A[4][2]
ในที่นี้เราจะแบ่งสิ่งที่อยู่ในวงเล็บปีกกาเป็น 5 กลุ่มนั่นคือ มิติแรกของ array และ แบ่งส่วนที่อยู่ในวงเล็บปีกกาแต่ละอัน เป็น มิติที่ 2 ของ array
แต่ละกลุ่มคือ
กลุ่มที่ 1 {1,2,3}
กลุ่มที่ 2 {4,5,6}
กลุ่มที่ 3 {7,8,9}
กลุ่มที่ 4 {10,11,12},
กลุ่มที่ 5 {13,14,15}
โดยที่แต่ละกลุ่มจะมีสมาชิกอยู่ 3 ตัวรวมเป็น 15 ตัว จากตัวอย่างนี้
A[0][0] จะมีค่า 1
A[0][2] จะมีค่า 3
A[3][0] จะมีค่า 7
โปรแกรมที่ 7-8 ตัวอย่างการกำหนดค่าเริ่มต้นให้กับ array 2 มิติ
Source code
1:#include"iostream.h"
2:#include"iomanip.h"
3:int main()
4:{
5: int A[5][3] ={
6: {1,2,3},
7: {4,5,6},
8: {7,8,9},
9: {10,11,12},
10: {13,14,15}
11: };
12: int i,j;
13: for(i=0;i<=4;i++)
14: {
15: for(j=0;j<=2;j++)
16: {
17: cout << " A[" << i << "][" << j << "] =";
18: cout << setw(3) << A[i][j];
19: }
20: cout << endl;
21: }
22: return 0;
23:}
Output
A[0][0] = 1 A[0][1] = 2 A[0][2] = 3
A[1][0] = 4 A[1][1] = 5 A[1][2] = 6
A[2][0] = 7 A[2][1] = 8 A[2][2] = 9
A[3][0] =10 A[3][1] =11 A[3][2] = 12
A[4][0] =13 A[4][1] =14 A[4][2] = 15
อธิบาย Source code
บรรทัดที่ 5 ถึง บรรทัดที่ 11:เป็นการประกาศตัวแปร array 2มิติพร้อมทั้งกำหนดค่าเริ่มต้น
บรรทัดที่ 13 ถึง บรรทัดที่ 21:เป็นการวน loop เพื่อแสดงผลค่าของตัวแปร array
array 3 มิติ
ลักษณะการใช้ array 3 มิติก็จะคล้าย array 2 มิติ
ตัวอย่างโจทย์ที่ใช้ array 3 มิติ
โปรแกรมที่ 7-9 ให้เขียนโปรแกรมที่ทำการรับข้อมูลคะแนนนักเรียน 4 คน โดยแต่ละคน จะเรียน 2 เทอมและในแต่ละเทอม จะมี 2 วิชา ให้รับข้อมูลนักเรียนทีละ 1 คน หลังจากที่รับข้อมูลเสร็จแล้ว 1 คนก็ให้ทำการเคลียร์หน้าจอ และหลังจากที่รับข้อมูลคนสุดท้ายเสร็จแล้ว ก็ให้แสดงผลในลักษณะนี้
ในที่นี้เราสามารถใช้ array 3 มิติได้ โดย มิติแรก สำหรับจำนวนนักเรียน มิติที่ 2 สำหรับเทอม และมิติที่ 3 สำหรับวิชา
Source code
1:#include"iostream.h"
2:#include"iomanip.h"
3:#include"conio.h"
4:int main()
5:{
6: int St[4][2][12];
7: int i,j,k;
8: for(i=0;i<=3;i++)
9: {
10: clrscr();
11: cout << "Student " << i+1 << endl;
12: for(j=0;j<=1;j++)
13: {
14: cout << "Term " << j+1 << endl;
15: for(k=0;k<=1;k++)
16: {
17: cout << " Subject " << k+1 << " ";
18: cin >> St[i][j][k];
19: }
20: }
21: }
22: clrscr();
23: cout << "**********************************************************" << endl;
24: cout << " Number of Student";
25:
26: cout << setw(20) << "Term 1" << setw(20) << "Term 2" << endl;
27:
28: cout << "**********************************************************" << endl;
29: cout << " ";
30: cout << setw(10) << "Subject1" << setw(10) << "Subject2";
31: cout << setw(10) << "Subject1" << setw(10) << "Subject2" << endl;
32: cout << "**********************************************************" << endl;
33: for(i=0;i<=3;i++)
34: {
35: cout << endl;
36: cout << setw(5) << i +1;
37: cout << " ";
38: for(j=0;j<=1;j++)
39: for(k=0;k<=1;k++)
40: cout << setw(10) << St[i][j][k];
41:
42: }
43:
44:
45: return 0;
46:}
Output โปรแกรมนี้จะทำการรับข้อมูลนักเรียน 4 คน
Student 1
term 1
Subject 1 1
Subject 2 2
term 2
Subject 1 3
Subject 2 4
หลังจากนี้โปรแกรมจะทำการ เคลียร์หน้าจอและทำการรับข้อมูลคนต่อไปจนถึงคนที่ 4 เสร็จแล้วโปรแกรมก็ทำการ เคลียร์หน้าจออีกครั้ง จากนั้นก็แสดงผล รูปที่ 7-1
รูปที่ 7-1
อธิบาย Source code
บรรทัดที่ 8 ถึง บรรทัดที่ 21:เป็นการวน loop เพื่อรับข้อมูลคะแนนนักเรียน 4 คนแต่ละคนมี 2 เทอม และแต่ละเทอมมี 2 วิชา โดยที่เราจะใช้ตัวแปร 3 ตัวแปร ในการวน loop คือตัวแปร i,j,k โดยที่
ตัวแปร i จะใช้กับนักเรียนมีการวน loop 4 รอบ
ตัวแปร j จะใช้กับ เทอมมีการวน loop 2 รอบ และตัวแปร j จะเป็น loop ที่ซ้อนอยู่ใน loop i
ตัวแปร k จะใช้กับ วิชา มีการวน loop 2 รอบ และ ตัวแปร k จะเป็น loop ที่ซ้อนอยู่ใน loop j
การวน loop จึงเป็นลักษณะนี้
คนที่(ตัวแปร i loop 4 ครั้ง)
เทอมที่(ตัวแปร j loop 2 ครั้ง)
วิชาที่(ตัวแปร k ทำการวน loop 2 ครั้ง)
บรรทัดที่รับข้อมูลคือบรรทัดที่ 18
บรรทัดที่ 23 ถึง บรรทัดที่ 32:สร้างส่วนหัว Menu
บรรทัดที่ 33 ถึง บรรทัดที่ 42:เป็นการวน loop เพื่อแสดงผลข้อมูล โดยจะใช้ 3 ตัวแปร ในการวน loop เหมือนตอนรับข้อมูล
String
String คือข้อความ หรือ สายของอักขระ ในภาษา C++ ไม่มีตัวแปร ประเภท String แต่จะมีตัวแปรประเภท char ให้ใช้แทน ซึ่งตัวแปร ประเภทchar จะสามารถเก็บอักขระได้ 1 อักขระ เท่านั้นถ้าหากเราอยากให้ตัวแปร char สามารถเก็บข้อความได้เราก็สามารถ ทำให้ตัวแปร char เป็น array ได้ เช่น
char Name[10];
มีความหมายว่า
ตัวแปร ชื่อ Name เป็นตัวแปรประเภท char สามารถเก็บอักขระได้ 9 ตัวอักษรสาเหตุที่เก็บได้ 9 ตัวอักษรก็เพราะว่า ในกรณีที่เราใช้ตัวแปร char เป็น array เพื่อเก็บข้อความ Compiler จะเหลือเนื้อที่ตำแหน่งสุดท้ายไว้เก็บอักขระ นัล เพื่อให้รู้ว่าเป็นการจบ String เพราะฉะนั้นรูปแบบการประกาศตัวแปร char ที่เป็น Stringจึงเป็นแบบนี้
char ชื่อตัวแปร[จำนวนอักษร+1];
ถ้าเราต้องการประกาศตัวแปร char ที่เป็น String ไว้เก็บข้อมูลชื่อที่มีได้มากสุด 30 ตัวอักษรก็ให้ประกาศดังนี้
char Name[31];
หรือถ้าเรา จะประกาศตัวแปร char ที่เป็น String ไว้เก็บข้อมูลชื่อเดือนมีได้มากสุด 20 ตัวอักษรก็ให้ประกาศดังนี้
char Month[21];
การกำหนดค่าเริ่มต้นให้กับ String
เนื่องจากตัวแปร String เป็นตัวแปร char ที่เป็น array เพราะฉะนั้นการกำหนดค่าเริ่มต้นให้กับ String ก็เหมือนกับการกำหนดค่าเริ่มต้นให้กับตัวแปร array เช่น
char Name[10] ={'K','r','i','r','K'};
ในที่นี้มีความหมายว่าตัวแปร
Name[0] จะเท่ากับ ‘K’
Name[1] จะเท่ากับ ‘r’
Name[2] จะเท่ากับ ‘i’
จนถึง Name[4] จะเท่ากับ ‘K’ และ Name[5] จะเท่ากับ อักขระนัล Compiler จะกำหนดให้เอง เพื่อให้รู้ว่าเป็นการจบ String
นอกจากนั้นแล้ว String ยังมีการกำหนดค่าเริ่มต้นอีกแบบหนึ่งซึ่งไม่เหมือนกับตัวแปร array แบบอื่น เราสามารถกำหนดค่าเริ่มต้นของ String ตั้งแต่ตอนประกาศโดยอยู่ในเครื่องหมาย “ และเครื่องหมาย “ ได้ เช่น
char Name[10] = “Krirk”;
แบบนี้ก็จะเหมือนแบบที่แล้ว
ในC++ เราไม่จำเป็นต้องกำหนดจำนวนของตัวอักษรตอนประกาศก็ได้ เพราะCompiler จะจองเนื้อที่ให้เอง เช่น
char Name[] =”Krirk”;
แบบนี้ก็จะทำงานได้เหมือนกัน
การรับค่า String
ในกรณที่เราประกาศตัวแปร array ของ char ขึ้นมา ถ้าหากเราใช้ cin และโอเปอเรเตอร์ >> แล้วต่อท้ายด้วยชื่อตัวแปร เหมือนกับตัวแปร ปกติ เช่น
char Name[10];
cin >> Name;
ถ้าเป็นแบบนี้โปรแกรมจะรับข้อความที่ผู้ใช้ป้อนทาง คีย์บอร์ดและจะนำมาเก็บไว้ในตัวแปร Name โดยเรียงตามลำดับ เช่นถ้าผู้ใช้ป้อนข้อมูล PUNG
Name[0] จะเท่ากับ ‘P’
Name[1] จะเท่ากับ ‘U’
Name[2] จะเท่ากับ ‘N’
Name[3] จะเท่ากับ ‘G’
แต่ถ้าหากเราใช้ cin และโอเปอเรเตอร์ >> และต่อท้ายด้วยชื่อตัวแปร โดยมีอินเด็กซ์อยู่ด้วย เช่น
cin >> Name[4];
จะมีความหมายว่าข้อมูลที่ผู้ใช้ป้อนมาทางคีย์บอร์ดจะนำไปเก็บในตัวแปร Name[4] ซึ่งตัวแปร Name[4] จะเก็บได้ 1 อักขระเท่านั้น
String ถ้าจะใช้ร่วมกับ cin ในการรับค่าไม่จำเป็นต้องใส่เครื่องหมาย [] หลังตัวแปรถ้าหากเราไม่ได้กำหนด index
เช่น cin >> Name[] ; แบบนี้คือตัวอย่างที่ผิด
การแสดงผล String
การแสดงผล String โดยใช้ cout ก็จะมีหลักการคล้ายการรับค่า String คือ ถ้าเราแสดงผลโดยใช้ชื่อตัวแปร โดยไม่มีอินเด็กซ์ต่อท้าย โปรแกรมก็จะแสดงจำนวนอักขระทั้งหมดใน String ยกเว้นตำแหน่งสุดท้ายคืออักขระนัล
เช่น
char Name[10] = “PUNG”;
cout << Name;
โปรแกรมจะแสดงข้อความ PUNG
แต่ถ้าเราใช้ cout แสดงผล String โดยมีอินเด็กซ์ต่อท้ายตัวแปร โปรแกรมก็จะแสดงอักขระที่เก็บในอินเด็กซ์นั้น
เช่น
char Name[10] = “PUNG”;
cout << Name[0];
cout << Name[2];
โปรแกรมจะแสดงข้อความ PN
นอกจากนั้นแล้วการใช้ cout แสดงผล String ก็จะไม่ต้องใส่เครื่องหมาย [] หลังชื่อตัวแปรถ้าหากเราไม่ได้กำหนด อินเด็กซ์
โปรแกรมที่ 7-10 ตัวอย่างการแสดงผล String
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char Name[10] ="Somsri";
5: cout << Name;
6: cout << endl;
7: cout << Name[0];
8: cout << Name[1];
9: cout << Name[2];
10:
11: return 0;
12:}
Output
Somsri
Som
อธิบาย Source code
บรรทัดที่ 4: char Name[10] ="Somsri"; มีความหมายว่าเป็นการประกาศตัวแปรชื่อ Name เป็น array ของ char และก็มีการกำหนดค่าเริ่มต้นให้ด้วย โดยในที่นี้
Name[0] จะเท่ากับ ‘S’
Name[1] จะเท่ากับ ‘o’
Name[2] จะเท่ากับ ‘m’
…
บรรทัดที่ 5: cout << Name; มีความหมายว่าให้แสดงอักขระทั้งหมดตั้งแต่ตำแหน่งที่ 0 จะถึงตำแหน่งสุดท้ายก่อนอักขระ นัล ซึ่งก็คือให้แสดง Name[0] ถึง Name[5] เพราะว่าอักขระ นัล อยู่ที่ Name[6]
บรรทัดที่ 7,8,9:เป็นการใช้ cout แสดงผลตัวแปร Name[0],Name[1],Name[2] ตามลำดับเป็นการแสดงทีละ 1 อักขระเท่านั้น Source code ในส่วนนี้แตกต่างจาก บรรทัดที่ 5 คือ บรรทัดที่ 5 ไม่มีการกำหนด index หลังตัวแปร
โปรแกรมที่ 7-11 ตัวอย่างการรับค่า String
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char Name[10];
5: cout << "What 's your name :";
6: cin >> Name;
7: cout << "Hello ";
8: cout << Name;
9:
10: return 0;
11:}
Output
ข้อมูลที่ใส่คือ Bank
What 's your name :Bank
Hello Bank
อธิบาย Source code
บรรทัดที่ 6:เป็นการใช้ cin ในการรับข้อมูลแล้วนำมาเก็บให้ตัวแปร Name และ แสดงผลออกมาในบรรทัดที่ 8
การกำหนดค่าให้กับ String
เราสามารถกำหนดค่าให้กับตัวแปร int โดยใช้เครื่องหมาย = ได้แต่กับ String เราไม่สามารถกำหนดได้เว้นแต่ว่าเราจะกำหนดเป็นค่าเริ่มต้น เราไม่สามารถเขียน Source code แบบนี้ได้
char Name[10];
Name = “Krirk”;
แบบนี้โปรแกรมจะ Compile ไม่ผ่าน ถ้าหากเราอยากกำหนดค่าให้กับ String เราอาจจะใช้วิธีการกำหนดให้ทีละ index ก็ได้ เช่น
Name[0] = ‘K’;
Name[1] = ‘r’;
Name[2] = ‘i’;
…
แต่ถ้าเราทำแบบนี้ก็จะค่อนข้างยุ่งยาก C++ จึงได้เตรียม Function ที่ใช้กับ String ให้เพื่อความสะดวกในการเขียนโปรแกรม ถ้าเราจะกำหนดค่าให้กับ String ก็ขอให้ดูในส่วนต่อไปเกี่ยวกับ Function ที่ใช้กับ String
Function ที่ใช้กับ String
C++ ได้เตรียม Header file ที่รวบรวม Function ที่ใช้กับ String ไว้ชื่อ string.h
ตัวอย่าง Function
strcpy ใช้สำหรับการกำหนด String
รูปแบบ char* strcpy(char* dest,const char* src);
Function นี้จะมีการทำงานคือ copy ค่าของ src ไปใส่ไว้ใน dest
strlen ใช้หาความยาวของ String
รูปแบบ size_t strlen(const char*s);
Function นี้จะคืนค่าจำนวนตัวอักษรที่อยู่หน้าเครื่องหมาย นัล ของ String
โปรแกรมที่ 7-12 ตัวอย่างโปรแกรมที่ใช้ Function strcpy และ Function strlen
Source code
1:#include"iostream.h"
2:#include"string.h"
3:int main()
4:{
5: char Name[20];
6:
7: strcpy(Name,"Krirk");
8:
9: cout << Name;
10: cout << endl;
11: cout << strlen(Name);
12:
13: return 0;
14:}
Output
Krirk
5
อธิบาย Source code
บรรทัดที่ 7:เราได้ใช้ Function strcpy ในการกำหนดข้อความ “Krirk” ให้กับ String ชื่อ Name
บรรทดที่ 11: เราได้ใช้ Function strlen ในการหาความกว้างของ String ชื่อ Name ซึ่ง Name นั้นต้อนประกาศเราได้ประกาศ ให้กว้าง 20 ตำแหน่ง แต่ตอนนี้ข้อความที่อยู่ก่อนอักขระนัล มีอยู่ 5 ตำแหน่งเท่านั้น
โปรแกรมที่ 7-13
โจทย์คือให้เขียนโปรแกรมแสดง การกลับหลังไปหน้าของ String โดยให้รับข้อมูลชื่อ และหลังจากนั้นก็แสดงข้อมูลชื่อจากหลังไปหน้าเช่น
ชื่อ Krirk
แสดง krirK
ชื่อ Somchai
แสดง iahcmoS
โดยเราอาจจะใช้การวน loop และพิมพ์ออกมาที่ละตำแหน่ง เช่น
ชื่อ Pung เก็บไว้ในตัวแปร Name
โปรแกรมจะเก็บในลักษณะนี้
P u n g
Name[0] Name[1] Name[2] Name[3]
สิ่งที่เราต้องแสดงคือ
g n u P
Name[3] Name[2] Name[1] Name[0]
จะเห็นได้ว่าให้เราแสดงจากตำแหน่งสุดท้ายมาที่ตำแหน่งที่ 0 โดยเราจะใช้การวน loop ก็ได้
เราจะหาว่าความกว้างของ String กว้างเท่าไหร่เราสามารถใช้ Function strlen ในการหาได้แต่อย่างในกรณีที่ข้อความ Pung Function strlen จะคืนค่ากลับคือ 4 แต่ในขณะที่ตำแหน่งสุดท้ายของข้อความคือ อินเด็กซ์ที่ 3 เพราะ array เริ่มจาก 0 เพราะฉะนั้นตอนวน loop เราก็ควรกำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวน loop เท่ากับ ความกว้างของ String –1 ไปจนถึง 0
Source code
1:#include"iostream.h"
2:#include"string.h"
3:int main()
4:{
5: char Name[20];
6: int i,Len;
7: cout << "What 's your name :";
8: cin >> Name;
9: cout << "This is reverse:";
10: Len = strlen(Name);
11: for(i=Len-1;i>=0;i--)
12: {
13: cout << Name[i];
14: }
15:
16: return 0;
17:}
Output
ชื่อที่จะใส่ในตอน รันคือ Pung
What 's your name :Pung
This is reverse:gnuP
อธิบาย Source code
บรรทัดที่ 8:เป็นการรับค่า String Name ทางคีย์บอร์ด
บรรทัดที่ 10:เป็นการใช้ ตัวแปร Len เป็นประเภท int ในการเก็บความกว้างของตัวแปร Name
บรรทัดที่ 11 ถึง บรรทัดที่ 14:เป็นการวนloop for โดยใช้ตัวแปร i โดยค่าเริ่มต้นของตัวแปร i จะเท่ากับความกว้างของ Name – 1 จากตัวอย่างการรันโปรแกรมตัวแปร i จะมีค่าเริ่มต้นคือ 3 และจะทำไปเรื่อยๆตราบเท่าที่ตัวแปร i ยังมากกว่าหรือเท่ากับ 0 และในทุกๆรอบค่าของตัวแปร i จะลดลงทีละ 1
บรรทัดที่ 13:เป็นการสั่งให้แสดงผลตัวแปร Name อินเด็กซ์ i ในที่นี้
รอบแรกจะมีความหมายเท่ากับ cout << Name[3];
ซึ่งจะแสดงตัว ‘g’
รอบ 2 จะมีความหมายเท่ากับ cout << Name[2];
ซึ่งจะแสดงตัว ‘n’
…
ไปจนถึงรอบที่ 4 ตัวแปร i จะเป็น 0 และโปรแกรมจะแสดงตัว ‘P’
การเรียงลำดับ
การเรียงลำดับเป็นเรื่องที่สำคัญมาก เนื่องจากข้อมูลที่อยู่ในเครื่องคอมพิวเตอร์เราควรที่จะมีการเรียงลำดับเพื่อที่จะให้ผู้ใช้ดูข้อมูลได้ง่าย และอาจจะทำให้ค้นหาข้อมูลเร็วขึ้น ตัวอย่างการเรียงลำดับข้อมูลเช่น
เรามีจำนวนอยู่ 6 จำนวนคือ
5 9 23 18 3 6
ถ้าจะทำให้มีการเรียงลำดับข้อมูลเราก็ต้องเลือกว่าจะให้เรียงจากมากไปน้อยหรือน้อยไปมาก
ถ้าเราเรียงจากมากไปน้อยก็จะได้
23 18 9 6 5 3
ถ้าเราเรียงจากน้อยไปมากก็จะได้
3 5 6 9 18 23
สาเหตุที่กล่าวถึงเรื่องการเรียงลำดับในบทนี้ก็เพราะว่าส่วนใหญ่เราจะนิยมนำตัวแปร array มาใช้ในการเรียงลำดับและใช้ในการแสดงผล
การสลับค่าของข้อมูล
ถ้าเราจะเขียนโปรแกรมเพื่อเรียงลำดับข้อมูลเราก็ควรที่จะลองเขียนโปรแกรมเพื่อสลับข้อมูลก่อนเช่น
ถ้าหากเรามีตัวแปร 2 ตัวชื่อ A กับ B
A = 10;
B = 19;
ที่เราต้องการคือ ให้ A เท่ากับ 19 และ B = 10 ซึ่งเราจะต้องทำให้ A เท่ากับ B แล้ว B เท่ากับ A
แต่เราจะเขียน ในลักษณะนี้ก็ไม่ได้
A = B;
B = A;
ถ้าเราเขียนแบบนี้ทั้ง 2 ตัวจะเป็น 19 ทั้งคู่เนื่องจากเมื่อเรากำหนดให้ A เท่ากับ B แล้ว A ก็จะเท่ากับ 19 และเมื่อเรากำหนดให้ B เท่ากับ A ค่า B ก็จะได้ 19 เท่าเดิม
ในที่นี้เราควรที่จะสร้างตัวแปรที่ทำหน้าที่พักข้อมูลชั่วคราวขึ้นมาก่อน แล้วก็ให้ตัวแปรนั้นเก็บค่าของ A
ก่อน เช่น
int A = 10,B = 19,temp;
temp = A;
A = B;
B = temp;
นี่คือวิธีการสลับค่าขั้นพื้นฐานที่ ใครๆก็นิยมใช้กัน
การหาค่ามากสุดหรือค่าน้อยสุด
ในการหาค่ามากที่สุดหรือค่าน้อยที่สุด ในกรณีที่จะหาค่ามากที่สุดเรามักจะใช้วิธีการวน loop ตั้งแต่ตำแหน่งแรกของข้อมูลจนถึงตำแหน่งสุดท้าย และทำการเช็คในแต่ละรอบว่า ค่าของข้อมูลมากกว่าค่าของตัวแปร Max ที่เราเตรียมไว้ก็ให้เรากำหนดค่าของตัวแปร Max ให้เท่ากับข้อมูลใน รอบนั้นและก็วน loop ต่อไปเรื่อยๆจนถึงตัวสุดท้าย
เช่น
เราต้องสร้างตัวแปร Max ขึ้นมาก่อนและอาจจะกำหนดให้เป็น 0 ก็ได้
ข้อมูลมี 23 65 96 33
รอบแรก 2 ค่าของข้อมูลคือ 3 ตอนนี้ Max เท่ากับ 0
เช็คเงื่อนไขว่า มากกว่า Max หรือเปล่า ซึ่งคำตอบที่ได้คือไม่จริงก็ทำรอบต่อไป
รอบที่ 2 ค่าของข้อมูลคือ 65 ตอนนี้ Max เท่ากับ 0
เช็คเงื่อนไขว่า มากกว่า Max หรือเปล่า ซึ่งคำตอบที่ได้จริงก็ทำการกำหนดค่า Max ให้เท่ากับ 65
รอบที่ 3 ค่าของข้อมูลคือ 96 ตอนนี้ Max เท่ากับ 65
เช็คเงื่อนไขว่า มากกว่า Max หรือเปล่า ซึ่งคำตอบที่ได้จริงก็ทำการกำหนดค่า Max ให้เท่ากับ 96
รอบที่ 4 ค่าของข้อมูลคือ 33 ตอนนี้ Max เท่ากับ 96
เช็คเงื่อนไขว่า มากกว่า Max หรือเปล่า ซึ่งคำตอบที่ได้คือไม่จริงก็ทำรอบต่อไปเนื่องจากนี่เป็นข้อมูลชุดสุดท้ายแล้ว จึงไม่ต้องทำต่อ ค่าของ Max จึงได้เท่ากับ 96
โปรแกรมที่ 7-14 ตัวอย่างการหาค่ามากที่สุด
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Num[10];
5: int Max;
6: int i;
7:
8: Num[0]=5;
9: Num[1]=11;
10: Num[2]=55;
11: Num[3]=20;
12: Num[4]=40;
13: Num[5]=3;
14: Num[6]=2;
15: Num[7]=99;
16: Num[8]=65;
17: Num[9]=32;
18: Max = Num[0];
19: for(i=1;i<=9;i++)
20: {
21: if (Num[i] > Max)
22: Max = Num[i];
23: }
24: cout << Max;
25:
26:
27:
28: return 0;
29:}
Output
99
อธิบาย Source code
โปรแกรมนี้ได้มีการหาค่ามากที่สุดของชุดข้อมูลหนึ่งชุด ซึ่งอัลกอริทึ่มของการหาค่ามากที่สุดได้อธิบายไปแล้ว
การเรียงลำดับข้อมูลด้วยวิธี Selection Sort
เป็นการเรียงลำดับข้อมูลที่มีอัลกอริทึ่มค่อนข้างง่าย วิธีการก็คือ
ถ้าหากเราต้องการเรียงจากน้อยไปมาก
1.ทำการวน loop เพื่อที่จะเรียงลำดับโดยจำนวนรอบของการวน loop คือ จำนวนทั้งหมด –1
2.ในแต่ละรอบของการวน loop ให้ทำการหาค่าที่น้อยที่สุดตั้งแต่ตำแหน่งของรอบจนถึงตำแหน่งสุดท้าย แล้วให้ทำการสลับตำแหน่งข้อมูลของรอบกับข้อมูลที่น้อยที่สุด
เช่น ถ้าข้อมูลคือ
Num[0]=5; Num[1]=11; Num[2]=55; Num[3]=20; Num[4]=40; Num[5]=3
Num[6]=2; Num[7]=99; Num[8]=65; Num[9]=32;
รอบที่ 0 หมายเลขรอบคือ 0
ให้ทำการหาค่าที่น้อยที่สุดตั้งแต่ Num[0] ถึง Num[9] ซึ่งค่าที่น้อยที่สุดคือ Num[6] เท่ากับ 2
จากนั้นก็ทำการสลับค่าระหว่าง Num[0] กับ Num[6]
ตอนนี้ข้อมูลก็จะเป็นแบบนี้
Num[0]=2 Num[1]=11 Num[2]=55 Num[3]=20 Num[4]=40 Num[5]=3
Num[6]=5 Num[7]=99 Num[8]=65 Num[9]=32
รอบ 1หมายเลขรอบคือ 1
ให้ทำการหาค่าที่น้อยที่สุดตั้งแต่ Num[1] ถึง Num[9] ซึ่งค่าที่น้อยที่สุดคือ Num[5] เท่ากับ 3
จากนั้นก็ทำการสลับค่าระหว่าง Num[1] กับ Num[5]
ตอนนี้ข้อมูลก็จะเป็นแบบนี้
Num[0]=2 Num[1]=3 Num[2]=55 Num[3]=20 Num[4]=40 Num[5]=11
Num[6]=5 Num[7]=99 Num[8]=65 Num[9]=32
รอบ 2 หมายเลขรอบคือ 2
ให้ทำการหาค่าที่น้อยที่สุดตั้งแต่ Num[2] ถึง Num[9] ซึ่งค่าที่น้อยที่สุดคือ Num[6] เท่ากับ 5
จากนั้นก็ทำการสลับค่าระหว่าง Num[2] กับ Num[6]
ตอนนี้ข้อมูลก็จะเป็นแบบนี้
Num[0]=2 Num[1]=3 Num[2]=5 Num[3]=20 Num[4]=40 Num[5]=11
Num[6]=55 Num[7]=99 Num[8]=65 Num[9]=32
รอบ 3หมายเลขรอบคือ 3
ให้ทำการหาค่าที่น้อยที่สุดตั้งแต่ Num[3] ถึง Num[9] ซึ่งค่าที่น้อยที่สุดคือ Num[5] เท่ากับ 11
จากนั้นก็ทำการสลับค่าระหว่าง Num[3] กับ Num[5]
ตอนนี้ข้อมูลก็จะเป็นแบบนี้
Num[0]=2 Num[1]=3 Num[2]=5 Num[3]=11 Num[4]=40 Num[5]=20
Num[6]=55 Num[7]=99 Num[8]=65 Num[9]=32
จะเห็นได้ว่าในแต่ละรอบของการทำงานเราก็จะเรียงลำดับข้อมูลไปเรื่อยๆ จนถึงรอบสุดท้ายข้อมูลก็จะถูกเรียงลำดับจนหมด
โปรแกรมที่ 17-15 ตัวอย่างการใช้ Selection Sort
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Num[10];
5: int i;
6: int j;
7: int temp;
8: int Min=0;
9: int tempPosition = 0;
10: // Input
11: for(i=0;i<=9;i++)
12: {
13: cout << "Please enter Num " << i << " :";
14: cin >> Num[i];
15: }
16:
17: // Selection Sort
18: for(i=0;i<=8;i++)
19: {
20: Min = Num[i];
21: for(j=i;j<=9;j++)
22: {
23:
24: if(Num[j] < Min)
25: {
26: Min = Num[j];
27: tempPosition = j;
28:
29: }
30: }
31: temp = Num[i];
32: Num[i] = Num[tempPosition];
33: Num[tempPosition] = temp;
34: }
35:
36:
37: // Display
38: for(i=0;i<=9;i++)
39: {
40: cout << Num[i] << endl;
41: }
42:
43: return 0;
44:}
Output
Please enter Num 0:1
Please enter Num 1:9
Please enter Num 2:6
Please enter Num 3:7
Please enter Num 4:5
Please enter Num 5:26
Please enter Num 6:33
Please enter Num 7:18
Please enter Num 8:55
Please enter Num 9:43
1
5
9
6
7
18
26
33
44
55
อธิบาย Source code
โปรแกรมนี้ได้มีการใช้ Selection Sort ซึ่งได้อธิบาย อัลกอริทึ่มไปก่อนหน้านี้แล้ว
บรรทัดที่ 11 ถึง บรรทัดที่ 15:เป็นการรับข้อมูล
บรรทัดที่ 18 ถึง บรรทัดที่ 34:เป็นการวน loop เพื่อที่จะทำ Selection Sort
ซึ่งจะแบ่งการทำงานภายในได้เป็น 2 ส่วน
1.บรรทัดที่ 21 ถึง บรรทัดที่ 30 เป็นการวน loop เพื่อหาค่าที่น้อยที่สุด
2.บรรทัดที่ 31 ถึง บรรทัดที่ 33 เป็นการสลับตำแหน่งของข้อมูล
การเรียงลำดับข้อมูลด้วยวิธี Bubble Sort
เป็นวิธีการเรียงลำดับที่จะทำการเปรียบเทียบข้อมูลที่อยู่ในตำแหน่งที่ติดกัน ถ้าข้อมูลไม่อยู่ในตำแหน่งที่ถูกต้องก็จะทำการสลับตำแหน่งของข้อมูล
การเปรียบเทียบจะต้องเปรียบเทียบตั้งแต่ตำแหน่งแรกจนถึง ตำแหน่งสุดท้าย-1 ถ้ามีข้อมูล A[0] ถึง A[9] ก็จะต้องเปรียบเทียบตั้งแต่ A[0] ถึง A[8]
การเปรียบเทียบจะเริ่มที่ A[0] เปรียบเทียบกับ A[1] จากนั้นจึง
เปรียบเทียบ A[1] กับ A[2]
เปรียบเทียบ A[2] กับ A[3]
จะเห็นได้ว่าถึงแม้ A[1] จะเคยถูกเปรียบเทียบกับ A[0] แล้วก็ตาม แต่เมื่อถึงคราว A[1] ก็ต้องนำ A[1] ไปเปรียบเทียบกับ A[2] อยู่ดี
เช่น ถ้าข้อมูลคือ
Num[0]=5; Num[1]=11; Num[2]=55; Num[3]=20; Num[4]=40; Num[5]=3
Num[6]=2; Num[7]=99; Num[8]=65; Num[9]=32;
เริ่มต้น แสดงวิธีการทำงานอขงรอบที่ 1
Num[0] 5 5 กับ 11 ไม่ต้องสลับที่
Num[1] 11 11 กับ 55 ไม่ต้องสลับที่
Num[2] 55 55 กับ 20 ต้องสลับที่ ตอนนี้ Num[3] จะเท่ากับ 55
Num[3] 20 55 กับ 40 ต้องสลับที่ ตอนนี้ Num[4] จะเท่ากับ 55
Num[4] 40 55 กับ 3 ต้องสลับที่ ตอนนี้ Num[5] จะเท่ากับ 55
Num[5] 3 55 กับ 2 ต้องสลับที่ ตอนนี้ Num[6] จะเท่ากับ 55
Num[6] 2 55 กับ 99 ไม่ต้องสลับที่
Num[7] 99 99 กับ 65 ต้องสลับที่ ตอนนี้ Num[8] จะเท่ากับ 99
Num[8] 65 99 กับ 32 ไม่ต้องสลับที่
Num[9] 32
รอบที่ 1 รอบที่2 รอบที่3 รอบที่4 รอบที่5 รอบที่6
Num[0] 5 5 5 5 3 2
Num[1] 11 11 11 3 2 3
Num[2] 20 20 3 2 5 5
Num[3] 40 3 2 11 11 11
Num[4] 3 2 20 20 20 20
Num[5] 2 40 40 32 32 32
Num[6] 55 55 32 40 40 40
Num[7] 65 32 55 55 55 55
Num[8] 32 65 65 65 65 65
Num[9] 99 99 99 99 99 99
โปรแกรมที่ 7-16 ตัวอย่างการใช้ Bubble Sort เรียงข้อมูลจากมากไปน้อย
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Num[10];
5: int i;
6: int j;
7: int temp;
8: // Input
9: for(i=0;i<=9;i++)
10: {
11: cout << "Please enter Num " << i << " :";
12: cin >> Num[i];
13: }
14:
15: // bubble Sort
16: for(i=0;i<=8;i++)
17: {
18: for(j=0;j<=8;j++)
19: {
20: if(Num[j] < Num[j+1])
21: {
22: temp = Num[j];
23: Num[j] = Num[j+1];
24: Num[j+1] = temp;
25: }
26: }
27: }
28:
29: // Display
30: for(i=0;i<=9;i++)
31: {
32: cout << Num[i] << endl;
33: }
34:
35: return 0;
36:}
Output
Please enter Num 0:1
Please enter Num 1:9
Please enter Num 2:6
Please enter Num 3:7
Please enter Num 4:5
Please enter Num 5:26
Please enter Num 6:33
Please enter Num 7:18
Please enter Num 8:55
Please enter Num 9:43
55
43
33
26
18
9
7
6
5
1
อธิบาย Source code
โปรแกรมนี้ได้มีการใช้ Bubble Sort ซึ่งได้อธิบาย อัลกอริทึ่มไว้ก่อนหน้านี้แล้ว
บรรทัดที่ 16 ถึง บรรทัดที่ 27:เป็นการวน loop เพื่อใช้ Bubble Sort โดยใช้ตัวแปร i เป็นจำนวนรอบของการทำงาน โดยการทำงานภายในคือ บรรทัดที่ 18 ถึง บรรทัดที่ 25 เป็นการวน loop เพื่อเปรียบเทียงสมาชิกทุกตัวกับสมาชิกตัวถัดไป เพื่อใช้ในการเปรียบเทียบ ถ้าหากสมาชิกตัวถัดไปมากกว่าจริงก็ให้ทำการสลับที่
การเรียงลำดับข้อมูลด้วยวิธี Insert Sort
เป็นการเรียงลำดับข้อมูลแบบที่จะทำการแทรกข้อมูลโดยมีอัลกอริทึ่มคือ
1.อ่านข้อมูลเข้ามาทีละ 1 ตัวแล้วก็ให้หาตำแหน่งที่ข้อมูลควรอยู่
2.ตำแหน่งของข้อมูลไม่ได้อยู่ลำดับสุดท้ายก็ให้ทำการย้ายข้อมูลชุดที่อยู่ตรงตำแหน่งของข้อมูลจนถึงชุดสุดท้ายไปอีก 1 ตำแหน่ง
3.ทำการกำหนดข้อมูลให้กับตำแหน่งของข้อมูล
เช่นข้อมูลคือ
Input[0]=5; Input[1]=11; Input[2]=55; Input[3]=20; Input[4]=40; Input[5]=3
Input[6]=2; Input[7]=99; Input[8]=65; Input[9]=32;
ในที่นี้ได้ใช้ Inputในการเก็บข้อมูลแทน Num เพราะ Num จะใช้ในการเรียงข้อมูลอีกที
ข้อมูลตัวที่ 1 ข้อมูลตัวที่ 2 ข้อมูลตัวที่ 3 ข้อมูลตัวที่ 4
Num[0] 5 5 5 5
Num[1] 11 11 11
Num[2] 55 20
Num[3] 55
รอบที่ 0 ข้อมูลตัวที่ 0 คือ 5 ให้เราทำการวน loop ดูข้อมูลทั้งหมดว่าใน Num มีจำนวนที่มากกว่า 5 รึเปล่าซึ่งปรากฎว่าไม่มีก็ให้ Num[รอบที่] เท่ากับ 5 ในที่นี้คือ Num[0]
รอบที่ 1 ข้อมูลตัวที่ 1 คือ 11 ให้เราทำการวน loop ดูข้อมูลทั้งหมดว่าใน Num มีจำนวนที่มากกว่า 11 รึเปล่าซึ่งปรากฎว่าไม่มีก็ให้ Num[รอบที่] เท่ากับ 11 ในที่นี้คือ Num[1]
รอบที่ 2 ข้อมูลตัวที่ 2 คือ 55 ให้เราทำการวน loop ดูข้อมูลทั้งหมดว่าใน Num มีจำนวนที่มากกว่า 55 รึเปล่า
ซึ่งปรากฎว่าไม่มีก็ให้ Num[รอบที่] เท่ากับ 55 ในที่นี้คือ Num[2]
รอบที่ 3 ข้อมูลตัวที่ 3 คือ 20 ให้เราทำการวน loop ดูข้อมูลทั้งหมดว่าใน Num มีจำนวนที่มากกว่า 20 รึเปล่า
ซึ่งปรากฎว่ามีนั่นคือ ข้อมูลตัวที่ 2 นั่นก็คือ 55 ให้เราทำการขยับข้อมูลตั้งแต่ตัวที่ 2 ไปไว้ที่ตัวที่ 2+1 นั่นก็คือ
ให้ Num[3] เท่ากับ 55 เนื่องจากในตอนนี้เรามีข้อมูลถึงแค่ตัวที่ 3 เท่านั้นจึงไม่ต้องขยับที่เหลือแล้ว แล้วจึงกำหนดให้ Num[2] เท่ากับ 20
จนถึงในรอบสุดท้ายข้อมูลจะถูกเรียงลำดับจนหมด
โปรแกรมที่ 7-17 ตัวอย่างการใช้ Insert Sort ในการเรียงลำดับข้อมูล
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:int main()
4:{
5: int Num[10],Input[10];
6: int i=0;
7: int j=0;
8: int k=0;
9: int temp;
10: int tempPosition = 0;
11: // Input
12: Input[0]=5;
13: Input[1]=11;
14: Input[2]=55;
15: Input[3]=20;
16: Input[4]=40;
17: Input[5]=3;
18: Input[6]=2;
19: Input[7]=99;
20: Input[8]=65;
21: Input[9]=32;
22:
23: // Prepare Data
24: for(i=0;i<=9;i++)
25: {
26: Num[i] = 0;
27: }
28:
29: // Input
30: for(i=0;i<=9;i++)
31: {
32: cout << "Please enter Input " << i << " :";
33: cin >> Input[i];
34: }
35:
36: // Insert Sort
37: for(i=0;i<=9;++i)
38: {
39:
40: tempPosition = i;
41: for(j=0;j<i;++j)
42: {
43: if(Num[j] > Input[i])
44: {
45: tempPosition = j;
46: break;
47: }
48: }
49:
50:
51: for(k=i;k>tempPosition;--k)
52: {
53: Num[k] = Num[k-1];
54: }
55:
56:
57: Num[tempPosition] = Input[i];
58:
59:
60: }
61:
62:
63:
64:
65: // Display
66: for(i=0;i<=9;i++)
67: {
68: cout << Num[i] << endl;
69: }
70: getch();
71: return 0;
72:}
Output
Please enter Input 0:1
Please enter Input 1:6
Please enter Input 2:9
Please enter Input 3:2
Please enter Input 4:5
Please enter Input 5:4
Please enter Input 6:3
Please enter Input 7:90
Please enter Input 8:3
Please enter Input 9:7
1
2
3
3
4
5
6
7
9
90
อธิบาย Source code
บรรทัดที่ 37 ถึง บรรทัดที่ 60:เป็นการใช้ Insert Sort ซึ่งมีการทำงานภายในคือ
เราจะใช้ตัวแปร i ในการวน loop สำหรับในการที่จะนำข้อมูลมาเรียงทีละ 1 ตัว
ตัวแปร tempPosition เป็นตัวแปรที่จะเอาไว้เก็บตำแหน่งที่ข้อมูลควรอยู่ในตอนแรกกำนหนดให้เท่ากับ i
บรรทัดที่ 34 ถึง 48:เป็นการใช้ loop for ที่ใช้ตัวแปร j หาค่าว่าในจำนวนทั้งหมดที่มีอยู่มีจำนวนไหนมากกว่าตัวที่นำเข้ามาใหม่หรือเปล่า ถ้ามีก็กำหนดให้ tempPosition เท่ากับ j
บรรทัดที่ 51 ถึง 54:เป็นการย้ายจำนวนตั้งแต่จำนวนสุดท้ายจนถึงจำนวนที่เท่ากับ tempPosition ไปอีก 1 ตำแหน่ง
บรรทัดที่ 57:เป็นการกำหนดที่อยู่ของข้อมูลให้กับข้อมูลที่นำเข้า
นอกจากนี้แล้วการเรียงลำดับยังมีอีกหลายอัลกอริทึมเช่น Quick Sort ,Shell Sort , Heap Sort ซึ่งถ้าหากผู้อ่านสนใจขอให้ศึกษาเรื่องนี้ได้ในตำราเกี่ยวกับ Data Structru
ไม่มีความคิดเห็น:
แสดงความคิดเห็น