วันพุธที่ 11 กันยายน พ.ศ. 2556

บทที่ 7 Array,String และการเรียงลำดับ

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

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

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