วันพุธที่ 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

บทที่ 6 การทำซ้ำ

การทำซ้ำ

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

 ถ้าหากเราต้องการเขียนโปรแกรมให้แสดงข้อความว่า Hello ‘ world 5 ครั้งถ้าเราเขียนแบบปกติเราอาจเขียนได้ว่า

#include"iostream.h"

int main()

{

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

return 0;

}

ซึ่งการเขียนแบบนี้ก็จะเป็นการแสดงข้อความว่า Hello ‘s world 5 ครั้ง

แต่ถ้าหากเราต้องการเขียนโปรแกรม ให้แสดง คำว่า Hello ‘s world 100 ครั้งเราคงต้องเสียเวลามาก ถ้าเราใช้วิธีนี้ เพราะฉะนั้นเราควรเขียนโปรแกรมโดยใช้ loop เช่น for  หรือ do while ถ้าหากเราเขียนโปรแกรมให้แสดงข้อความว่า Hello ‘s world 5 ครั้งโดยใช้ loop for โปรแกรม จะมี Source code ดังนี้

#include"iostream.h"

int main()

{

 int i;

 for(i=1;i<=5;i++)

 cout << "Hello ' s world" << endl;



 return 0;

}

ถ้าเขียนแบบนี้ก็จะได้การทำงานเหมือนกัน

}

For

การทำซ้ำโดยใช้ For

 มีรูปแบบ



for(< intilize>;<Condition>;<increment>) Statement



intilize   คือค่าเริ่มต้นของตัวแปรจะทำงานแค่ครั้งเดียว

Condition  เงื่อนไขที่ว่าเป็นจริงถึงจะทำจะตรวจสอบทุกครัง้ที่แต่ละรอบของการทำงาน

Inclement  ค่าของตัวแปรที่เพิ่มขึ้นหรือลดลงแต่ละครั้ง

Statement  จะทำตราบเท่าที่ Condition เป็น true

โปรแกรมที่ 6-1 ตัวอย่างการใช้ loop for

Source code

1:#include “iostream.h”

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;I++) cout << “Hello ‘ world”;

6: return 0;

7:}

Output

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

บรรทัดที่ 5: for(i=1;I<=5;I++)มีความหมายว่า เป็นการวนลูปโดยที่ตัวแปร i มีค่าเริ่มต้นคือ 1

for(I=1;I<=5;I++) มีความหมายว่าจะวนลูปไปเรีอยๆตราบเท่าที่ ตัวแปร i ยังคงน้อยกว่าหรือเท่ากับ 5

for(I=1;I<=5;i++) ในแต่ละรอบให้ค่า i เพิ่มอีก 1

บรรทัดที่ 5:cout << “Hello ‘ world”; นี่คือ Statement ที่จะทำถ้าหากเงื่อนไขในCondition เป็นจริง


ใน C++ เราสามารถประกาศตัวแปร ในตอนเริ่มต้นได้เช่น

 for(int i=1; i<=5;i++)

จะเท่ากับ

 int i; for (i=1;I<=5;i++)



เราสามารถเขียนอีกอย่างได้ว่า

for(i=1;i<=5;i=i+1) cout << “Hello ‘ world”;

ก็จะมีการทำงานเหมือนกัน

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

for(i=1;i>=10;i--) cout << “Hello ‘ World”;

ถ้าเราเขียนแบบนี้โปรแกรมจะไม่ทำงาน เพราะค่า i ที่กำหนดให้ตอนเริ่มต้นมีค่า 1 แล้วในแต่ละรอบ

โปรแกรมจะเช็คว่า I >=10 จริงรึเปล่าซึ่งไม่สามารถเป็นจริงได้เพราะในแต่ละรอบค่า I จะลดลงที่ละ 1

loop แบบนี้เรียกว่า loop infinite คือ loop ที่ทำงานไปเรื่อยๆไม่มีที่สิ้นสุด

Loop For ที่มีหลาย Statement

มีรูปแบบ

 for(< intilize>;<Condition>;<increment>)

 {

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

}



เช่น

โปรแกรมที่ 6-2 ตัวอย่างการใช้ loop for ที่มีหลาย Statement

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=3;i++)

6: {

7: cout << "Hello" << endl;

8:  cout << "C++ is Easy" << endl;

9: }

10: return 0;

11:}

Output

Hello

C++ is Easy

Hello

C++ is Easy

Hello

C++ is Easy



บรรทัดที่ 5: เป็นการบอกว่านี่เป็นการทำงานลูป For เหมือนโปรแกรมที่ 5.1

บรรทัดที่ 6:เป็นวงเล็บ ปีกกาที่บอกถึงว่านี่เป็นส่วนเริ่มต้นของ ของ Statement

บรรทัดที่ 9:เป็นวงเล็บปีกกาที่บอกว่านี่เป็นส่วนจบของ Statement โปรแกรมจะทำงานในStatement  ตั้งแต่ บรรทัดที่ 6 จะ ถึง บรรทัด ที่ 9 ตามจำนวนรอบที่กำหนดไว้ตรง Loop For



หรือจะเขียนแบบนี้ก็ได้



for(I=1;I<=3;I++){cout << “Hello” << endl; cout << “C++ is Easy” << endl;}



แบบนี้ก็จะได้ผลรันเหมือนกัน และก็ถือว่าเป็น LoopFor ที่มีหลาย Statement ด้วย

การนำค่าตัวแปรที่ใช้ในการวน loop for มาใช้

 เราสามารถนำค่าตัวแปรที่ใช้ในการวนloop มาใช้ในloop มาได้ เช่นเราใช้ตัวแปร i ในการวน loop และ Statement ที่อยู่ใน loop เราก็นำค่าตัวแปร i มาใช้ เข่นใช้ในการกำหนดข้อมูลใช้ในการคำนวณ หรือใช้ในการแสดงผล แต่เราไม่ควรกับหนดค่าให้กับตัวแปรที่ใช้ในการวน loop ใน Statement ของ loop เพราะอาจจะทำให้ loop มีปัญหาและอาจเกิด loop infinite ได้



โปรแกรมที่6-3 ตัวอย่างการนำค่าตัวแปรที่ใช้ในการวน loop for มาใช้

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;i++)

6: cout << i << " " << i * 5 << endl;

7:

8: return 0;

9:}

Output

1 5

2 10

3 15

4 20

5 25



อธิบาย Source code

บรรทัดที่ 5: เป็นการใช้ loop for ที่ใช้ตัวแปร i โดยที่ให้ค่าตัวแปร i ตอนเริ่มต้นเท่ากับ 1 และเงื่อนไขที่จะทำตราบเท่าที่เป็นจริงคือ i <= 5 และในแต่ละรอบให้ ค่าตัวแปร i เพิ่มอีก 1

บรรทัดที่ 6: cout << i << " " << i * 5 << endl; เป็น Statement ที่จะทำตราบเท่าที่เงื่อนไขใน loop for เป็นจริง

โดย Statement นี้จะมีการทำงานคือ ในแต่ละรอบที่ loop for ทำงาน ให้แสดงค่าตัวแปร i และต่อด้วยข้อความว่างๆ1ช่อง(“ “) และต่อด้วย ให้แสดงค่าตัวแปร i * 5

จะเห็นได้ว่าเราสามารถนำค่าตัวแปรที่ใช้ในการวน loop for มาใช้ในการแสดงผลหรือใช้ในการคำนวณได้

การใช้ Statement ทีอยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop

 การใช้ Statement ทีอยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop จะก่อให้เกิดปัญหาได้ถ้าไม่จำเป็นไม่ควรทำ เช่น



โปรแกรมที่ 6-4 แสดงตัวอย่างการใช้ Statement ที่อยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop for

แล้วเกิดปัญหา loop infinite

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;i++)

6: {

7: i--;

8: cout << i << " " << i * 5 << endl;

9: }

10: return 0;

11:}

Output จะแสดงเลข 0 0 ไปเรื่อยๆไม่มีที่สิ้นสุด

อธิบาย Source code

บรรทัดที่ 5:เป็นการใช้ตัวแปร i ในการใช้ loop for โดยที่ค่าเริ่มต้นของตัวแปร i คือ 1 และเงื่อนไขที่จะทำตราบเท่าที่เป็นจริงคือ i <= 5 ซึ่งถ้าค่า i ไม่มีการเปลี่ยนแปลงคือเป็น 1 ตลอด loop นี้ก็จะทำงานไปเรื่อยๆไม่มีที่สิ้นสุดเราจึงต้องกำหนดให้ค่า i เพิ่มขึ้นทุกครั้งในการ วน loop คือ i++ ในเมื่อเรากำหนดแล้ว แล้วทำไม loop ยังทำงานไม่มีที่สิ้นสุดนั่นเป็นเพราะ ในบรรทัดที่ 7:i—เป็นการกำหนดให้ค่าตัวแปร i มีค่าลดลง 1 ซึ่ง Statement นี้จะทำงานทุกครั้งที่มีการวน loop เพราะฉะนั้นค่า i จะไม่สามารถเพิ่มขึ้นได้เลยก็จะ <=5 อยู่ตลอด เพราะว่าถึงแม้เราจะสั่งให้ i++ ในแต่ละรอบของการวน loop แต่ Statement ใน loop นั้นก็ไปลดค่า i ลงอีก จึงเป็นสาเหตุให้เกิด loop infinite



loop for ไม่จำเป็นต้องเพิ่ม หรือลดทีละ 1 เช่น

for(i=1;i<=30;i = i +5) cout << “Hello”;





ที่ยกตัวอย่างมาเป็นรูปแบบการใช้ For ในแบบพื้นฐานแต่ความจริงแล้ว

ภาษา C++ เป็นภาษาที่มีความยืดหยุ่นมากในความจริงแล้วการใช้ Loop For ไม่จำเป็นต้องมีรูปแบบอย่างที่ยกตัวอย่างมาก็ได้

for(< initialize>;<Condition>;<increment>)



 ในส่วน Initialize,  condition , increment ทั้ง 3 ส่วนนี้ไม่จำเป็นต้องมีก็ได้

 การใช้ loop for โดยไม่มีส่วนของ initialize

 ถ้าไม่มีส่วนของ initialize ก็จะไม่มีค่าเริ่มต้นของตัวแปร ที่ใช้ ในการวน loop ถ้าหากในส่วนของ condition คือ i <= 10 คือถ้าค่า i น้อยกว่าหรือเท่ากับ 10 Statement ใน loop ก็จะทำงาน แต่ถ้าค่า i เป็น 20 ตั้งแต่แรก Statement ใน loop ก็จะไม่ได้ทำงาน เลย สักรอบ เราสามารถไม่ไม่อะไรเลยในส่วนของ initialize ได้ โดยโปรแกรมจะนำค่าปัจจุบันของตัวแปรที่ใช้ในการวน loop มาใช้

ถ้าเราไม่ใส่อะไรเลยในส่วน Initialize เราก็ควรจะกำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวน loop ก่อน

โปรแกรมที่ 6-5 ตัวอย่างการใช้ for โดยไม่มี initialize

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: i = 1;

6: for( ;i<=10;i++)

7: cout << i << " Hello C++." << endl;

8:

9: return 0;

10:}

Output

1 Hello C++.

2 Hello C++.

3 Hello C++.

4 Hello C++.

5 Hello C++.

6 Hello C++.

7 Hello C++.

8 Hello C++.

9 Hello C++.

10 Hello C++.

อธิบาย Source code

บรรทัดที่ 4:เป็นการประกาศตัวแปร ประเภท int ชื่อ i และกำหนดค่าให้เท่ากับ 1 ในบรรทัดที่ 5

บรรทัดที่ 6 และ 7:

6: for( ;i<=10;i++)

7: cout << i << " Hello C++." << endl;

 ในที่นี้จะเห็นได้ว่า ใน loop for เราไม่ได้ใส่ Source code ในส่วนของ initlize เลยซึ่งการวน loop ก็ยังทำงานอยู่ โดย Statement ที่จะทำงาน คือ Statement ในบรรทัดที่ 7 คือให้แสดงค่าตัวแปร i และคำว่า “Hello C++” ส่วยสาเหตุที่โปรแกรมทำงาน 10 รอบก็เพราะว่า ในส่วนของ condition คือ i <= 10 ยังทำงานอยู่คือ Statement ในบรรทัดที่ 7 จะทำงานตราบเท่าที่ i ยังน้อยกว่า หรือ เท่ากับ 10 และในส่วนของ increment คือ

i++ ก็ยังทำงานอยู่คือในแต่ละรอบเราให้ค่าตัวแปร i เพิ่มอีก1

 การใช้ loop for โดยไม่มีส่วนของ condition และการใช้ break

 ส่วนของ condition จะเป็นการเช็คเงื่อนไขในแต่ละรอบว่าจะทำตราบเท่าที่เงื่อนไข ใน condition เป็นจริง เช่น i <= 10 ก็คือ ตราบเท่าที่ i ยังน้อยกว่า หรือเท่ากับ 10 ก็จะทำโดยที่เรามักจะเขียนโปรแกรมให้ตัวแปร i เพิ่มค่า ในแต่ละรอบในส่วน ของ increment เมือตัวแปร i มากกว่า 10 เมื่อไหร่ loop ก็จะหยุดทำ แต่ถ้าเราไม่มีส่วนของ condition แล้วเราจะออกจาก loop ได้อย่าง ไร

 ในC++ เราสามารถใช้ breakในการออกจาก loop ได้ เมื่อ Compiler มาเจอ Statement นี้ก็จะออกจาก loop เราสามารถใช้ break ร่วมกับ if ได้

 เช่น

 for(i = 1; i <= 10; i++)

 if ( i == 5) break;

 ถ้าเขียนแบบนี้เมื่อค่าตัวแปร i เท่ากับ 5 โปรแกรมก็จะออกจาก loop โดยที่จะไม่ทำถึง 10 รอบ

การใช้ break;ไม่จำเป็นต้องใช้กับ loop for ที่ไม่มีส่วนของ condition เท่านั้น loop for ทั่วไปก็สามารถใช้ break ได้

 จะมีข้อสังเกตุว่าถ้าเราใช้ loop for ที่ไม่มีส่วนของ condition และเราจะใช้ break ร่วมกับ if แทน เงื่อนไขใน if จะเป็นไปในทางตรงกันข้ามกับ condition

 เช่นถ้าในส่วนของ condition ถ้าเราต้องการเขียนให้ ทำงาน 10 รอบ เราอาจเขียนเป็น

 for(i=1; i <= 10 ; i ++)

 แต่ถ้าเราใช้ if ควรเขียนเป็น

  if(i > 10 ) break;

 เป็นเพราะว่า condition คือเงื่อนไขที่ถ้าเป็นจริง Statement ใน loop จะ ทำงาน

 แต่ การใช้ if ในกรณีนี้ส่วนใหญ่ เป็นเงื่อนไขที่ถ้าเป็นจริงจะออกจาก loop

โปรแกรมที่ 6-6 การใช้ loop for โดยไม่มีส่วนของ condition

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5:

6: for(i=1; ;i++)

7: {

8: if(i>10)break;

9:

10: cout << i << " Hello C++." << endl;

11: }

12:

13: return 0;

14:}

Output เหมือนโปรแกรมที่ 6-5

อธิบาย Source code

บรรทัดที่ 6:เราใช้ loop for โดยใช้ตัวแปร i ที่ไม่มีส่วนของ condition loop for ก็จะทำงานต่อไปเรื่อยๆไม่มีที่สิ้นสุด แต่สาเหตุที่ loop for นี้ทำงานแค่ 10 รอบเนื่องจาก ในบรรทัดที่ 8 เรามีการเช็คเงื่อนไขว่า ถ้าตัวแปร i > 10 จริง ให้ break; นั่นคือการ ออกจาก loop  และถึงแม้ loop นี้จะไม่มีในส่วน ของ condition แต่ส่วนของ initialize ยังมีอยู่ โดยเรากำหนดให้ตอนเริ่มต้นตัวแปร i เป็น 1 และในส่วนของ increment เราก็กำหนดให้ตัวแปร i เพิ่มค่าอีก 1 โดยที่เมื่อถึงรอบที่ 11 ตัวแปร i ก็จะมีค่า 11 และพอเจอ Statement ในบรรทัดที่ 8 : โปรแกรมก็จะทำการเช็คเงื่อนไขซึ่งในรอบที่ 1 ถึง รอบ ที่ 10 เงื่อนไขในบรรทัดที่ 8 จะเป็นเท็จ เพราะว่า ค่าตัวแปร i น้อยกว่า 10 แต่พอรอบที่ 11 เงื่อนไขในบรรทัดที่ 8 ที่เช็คจะเป็นจริง ก็จะทำงาน Statement break; ก็จะออกจาก loop

 การใช้ loop for โดยไม่มีส่วนของ increment

 ในการใช้ for ในการวน loop ถ้าไม่มีส่วนของ increment ค่าตัวแปรที่ใช้ ในการวน loop ก็จะไม่มีการเปลี่ยนแปลง โปรแกรมอาจจะทำงาน วน loop ไปเรื่อยๆ โดยที่ไม่มีการหยุดเนื่องจาก ค่าของตัวแปรใช้ในการวน loop ไม่เปลี่ยนแปลง ในส่วนของ condition ก็จะเป็นจริง แล้วก็จะทำงาน Statement ที่อยู่ใน loop ไปทุกๆรอบ

เช่น ถ้าเราเขียน Source code

  for (i = 1;i <= 10; )

  Statement ที่อยู่ใน loop for ก็จะทำงานไปเรื่อยๆเนื่องจากในส่วนของ condition เป็นจริงคือ i<=10 ถ้าเราไม่มีส่วนของ increment มาเพิ่มค่าตัวแปร i โปรแกรมก็จะทำงานวน loop อยู่อย่างนั้น ไม่สามารถออกจาก loop ได้

 ใน C++ อนุญาติให้เราไม่ต้องเขียน Source code ในส่วนของ increment ได้แต่เราก็ควรกำหนดค่าของตัวแปรที่ใช้ในการวน loop ให้เพิ่มขึ้นหรือลดลงเองในส่วนของ Statement ใน loop เพื่อป้องกัน ปัญหา loop infinite แต่การ กำหนดค่าให้กับตัวแปรที่ใช้ในการวนloop โดย Statement ใน loop อาจทำให้โปรแกรมมีปัญหาได้ถ้าไม่จำเป็นก็ไม่ควรทำ

 โปรแกรมที่ 6-7 ตัวอย่าง การใช้ loop for ที่ไม่มีส่วน increment

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5:

6: for(i=1;i<=10;)

7: {

8: cout << i << " Hello C++." << endl;

9: i++;

10: }

11:

12: return 0;

13:}

Output เหมือนโปรแกรมที่ 6-5

อธิบาย Source code

บรรทัดที่ 6: เป็นการใช้ loop for โดยไม่มีส่วนของ increment ซึ่งโปรแกรมก็จะทำการวน loop ไม่เรื่อยๆ เนื่องจาก เงื่อนไขใน condition เป็นจริง แต่โปรแกรมนี้จะมีการทำงานแค่ 10 รอบเนื่องจาก ในบรรทัดที่ 9:เราได้เขียน ให้ตัวแปร i เพิ่มค่าอีก 1 ในทุกๆรอบ พอถึงรอบที่ 10 หลังจากพิมพ์ข้อความ 10 Hello C++. แล้วค่าตัวแปร i ก็เพิ่มขึ้นอีก 1 แล้วก็จะไม่ทำการวน loop อีกแล้ว เนื่องจากในส่วนของ condition คือ i <= 10 ไม่เป็นจริงแล้ว โปรแกรมก็จะไม่ทำงาน ในส่วนของ Statement ที่อยู่ใน loop

โปรแกรมที่ 6-8 การใช้ loop for โดยไม่มีส่วนของ initialize , condition, increment

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: i = 1;

6: for(; ;)

7: {

8: if(i > 10)break;

9: cout << i << " Hello C++." << endl;

10: i++;

11: }

12:

13: return 0;

14:}

Output เหมือนโปรแกรมที่ 6-5

โปรแกรมนี้เป็นการใช้ loop for โดยที่ไม่มีส่วนของ initialize , condition, increment จะเห็นได้ว่าเราไม่ได้เขียน Source code อะไรไปเลยในแต่ละส่วน โปรแกรมก็ยังทำการวน loop ได้ 10 รอบ เนื่องจาก ใน Source code เราได้มีส่วนที่เขียน แล้วสามารถใช้แทน initialize , condition, increment แล้ว

บรรทัดที่ 5:เป็นการกำหนดให้ค่าตัวแปร i เท่ากับ 1 ซึ่งทำให้เราไม่จำเป็นต้องเขียนส่วนของ initialize

บรรทัดที่ 8:เป็นการเขียนโปรแกรมให้เช็คเงื่อนไขในแต่ละรอบว่า ถ้า i > 10 จริงให้ออกจาก loop นี่คือส่วนที่ทำให้เราไม่ต้องเขียน Source code ในส่วนของ condition

บรรทัดที่ 10:เป็นการกำหนดให้ค่าตัวแปร i เพิ่มขึ้นอีก 1 ทำให้เราไม่จำเป็นต้องเขียน Source code ในส่วนของ increment

 นอกจากนี้แล้วในส่วนของ initialize , condition, increment เรายังสามารถกำหนดรายละเอียดได้มากกว่านี้อีก

 initizlize เราสามารถกำหนดค่าในมากกว่า1ค่า เช่น i= 1,j=2

 condition เราสามารถมีเงื่อนไขที่สามารถนำมาเชื่อมกันได้เช่น i > 10 && j > 20

 increment สามารถมีตัวแปรได้มากกว่า1 ตัวในการเพิ่มหรือลดค่าในแต่ละครั้งรวมถึงตัวแปรที่ไม่ได้ใช้ในการวน loop เราก็สามารถกำหนดให้เพิ่มค่าหรือลดค่าในส่วนของ increment ได้

โปรแกรมที่ 6-9 การใช้ for ในการวน loop

Source code

#include "iostream.h"

int main()

{

 int i,x;

 for(i=1,x=2;i<=10 || x <=7;i +=x,x++)

 {

 cout << i << " " << x << endl;

 }

 return 0;

}

Output

1 2

3 3

6 4

10 5

15 6

21 7

บรรทัดที่ 4: ในโปรแกรมนี้มีความหมายว่า เป็นการใช้ Loop For โดยที่

 initilize ค่าเริ่มต้นมี 2 ตัวคือ I และ X โดยที่ I = 1 ,X = 2

 condition เงื่อนไขในการตรวจสอบว่าถ้าเป็นจริงจะทำคือ I<=10 หรือ X <=7

 increment ในแต่ละรอบค่า i = i +x ส่วน x = x + 1

 โปรแกรมนี้จะทำงานไปเรื่อยๆ ตราบเท่าที่ ค่า ตัวแปร i <= 10 หรือ x<= 7 ในแต่ละรอบก็จะพิมพ์ค่าตัวแปร i และ ตัวแปร x ทางจอถาพ และให้ค่าตัวแปร i จะเท่ากับ i + x และค่าตัวแปร x จะ เพิ่มที่ละ 1



การใช้ Loop For เขียนโปรแกรม

 ในที่นี่จะเป็นตัวอย่างโปรแกรมที่ใช้ loop for ในการเขียน

ตัวอย่างโปรแกรมที่ 6-10 ให้เขียนโปรแกรมที่จะทำการ รวมผลบวกที่ได้ ตั้งแต่ เลข 1 ถึง 100 โดยใช้ loop for
คำว่ารวมผลบวกที่ได้ในที่นี้หมายถึง 1 ถึง 4 จะมีค่าเท่ากับ 1+2+3+4 ได้เท่ากับ 10
 1 ถึง 6 1+2+3+4+5+6 ได้เท่ากับ 21 โปรแกรมนี้ให้ทำการบวกตั้งแต่ 1 ถึง 100

วิเคราะห์อัลกอริทึ่ม อย่างง่ายๆก่อน

1. โปรแกรมต้องการวน loop ร้อย รอบ ในที่นี้ให้ใช้ loop for

2.ถ้าเราจะหาค่าของผลรวมตั้งแต่ 1 to 100 เราอาจใช้ตัวแปรที่ใช้ในการเก็บค่าได้เช่น

 Total = Total +1+2+3…+100;

แต่ถ้าทำอย่างนั้น Source code จะยาวมากและอีกอย่างคือ โปรแกรมนี้ โจทย์บังคับให้ใช้ loop for

 โดยที่ค่าของ ตัวแปรที่ใช้ในการวน loop ในแต่ละรอบจะมีค่าตั้งแต่ 1 ถึง 100 เพราะฉะนั้นเราน่าจะเขียนโปรแกรมให้ ในแต่ละรอบค่าของตัวแปร จะเท่ากับค่าของตัวแปร บวกตัวแปรที่ใช้ในการวน loop

 เช่น

 (loop ที่จะทำงาน 3 ครั้ง)

 Total = Total + i;

 สมมุติว่า loop นี้ทำงาน 3 รอบ โดยที่ค่าของตัวแปรที่ใช้ในการวน loop คือ i จะมีค่า 1,2,3 ตามลำดับ

และค่าของตัวแปร Total มีค่าเท่ากับ 0

ในรอบแรกค่า i จะเท่ากับ 1

 Total = Total + 1  หรือมีค่าเท่ากับ Total = 0 + 1

ในรอบ 2 ค่า i จะเท่ากับ 2

 Total = Total + 2  หรือมีค่าเท่ากับ Total = 1 + 2

ในรอบ 3 ค่า i จะเท่ากับ 3

 Total = Total + 3  หรือมีค่าเท่ากับ Total = 3 + 3

หลังจากวน loop ครบ 3 รอบแล้ว

 Total จะเท่ากับ 6 ซึ่งเท่ากับ 1+2+3

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i,Total;

5: Total = 0;

6:

7: for(i=1;i<=100;i++)

8: Total = Total +i;

9:

10:  cout << Total;

11: return 0;

12:}

Output

5050

ในส่วนของการ อธิบาย Source code โปรแกรมนี้จะไม่มีเพราะได้ อธิบาย ไปในส่วนของการวิเคราะห์อัลกอริทึ่มแล้ว


โปรแกรมที่ 6-12
ถ้าหากโจทย์ต้องการให้เรารับค่าตัวเขเข้าไปแล้วแสดงผลออกมาเป็นสูตรคูณของแม่นั้น เช่น

รับ ค่า 3

แสดง

 3 * 1 = 3

 3 * 2 = 6

 3 * 3 = 9

 ไปจนถึง 12



วิเคราะห็โจทย์

1.จากโจทย์จะเห็นได้ เราต้องการรับเลขและแสดงสูตรคูณของแม่นั้นโดยที่ต้องแสดงทั้งหมด 12 รอบ เราควรใช้ Loop For เพื่อความสะดวกในการเขียนโปรแกรม

2. สิ่งที่ต้องแสดงในแต่ละรอบแบ่ง 5 ส่วนเช่นถ้าเป็นแม่ 3

  3 * 1 = 3

 3 * 2 = 6

ตำแหน่งที่ 1 เลข 3 ตัวแรกคือแม่ของสูตรคูณที่เรารับค่ามา

ตำแหน่งที่ 2 เครื่องหมาย * ในทุกๆรอบจะเป็นเครื่องหมายนี้อยู่แล้วไม่มีการเปลี่ยนแปลง

ตำแหน่งที่ 3 จำนวนรอบมีทั้งหมด 12 รอบจะเปลี่ยนไปทุกครั้งตั้งแต่ 1 ถึง 12

ตำแหน่งที่ 4 เครื่องหมาย = ในทุกๆรอบจะเป็นเครื่องหมายนี้อยู่แล้วไม่มีการเปลี่ยนแปลง

ตำแหน่งที่ 5 เลข 3 ตัวสุดท้าย คือผลคูณในแต่ละรอบได้มาจาก ตัวแปรที่เก็บค่าแม่ * จำนวนรอบ

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,Mae;

5: cout << "Please Enter your number :";

6: cin >> Mae;

7: for(i=1;i<=12;i++)

8: {

9: cout << Mae << " * " << i << " = " << Mae*i;

10: cout << endl;

11:

12: }

13:

14: return 0;

15:}

Output

Please Enter your number :5

5 * 1 = 5

5 * 2 = 10

5 * 3 = 15

5 * 4 = 20

5 * 5 = 25

5 * 6 = 30

5 * 7 = 35

5 * 8 = 40

5 * 9 = 45

5 * 10 = 50

5 * 11 = 55

5 * 12 = 60



อธิบาย Source code

บรรทัดที่ 4: เป็นการประกาศตัวแปรประเภท integer 2 ตัวคือ i และ Mae i ใช้ในการวน Loop ส่วน Mae ใข้ในการ เก็บค่าหมายเลขของแม่

บรรทัดที่ 5: เป็นการให้แสดงผลข้อความให้ผู้ใช้รู้ว่าต้องทำอะไร

บรรทัดที่ 6:เป็นการค่ามาเก็บไว้ในตัวแปร Mae

บรรทัดที่ 7: เป็นการบอกว่าให้มีการใช้ Loop For เพื่อทำงาน 12 รอบ

บรรทัดที่ 9: cout << Mae << " * " << i << " = " << Mae*i;

เป็นการพิมพ์ ตัวแปร Mae และ เครื่องหมาย * และ รอบที่ และเครื่องหมาย = และผลของการ

คำนวณ สมมุติว่า แม่ 5

 รอบที่ 1 5 * 1 = 5

 รอบที่ 2  5 * 2 = 10

บรรทัดที่ 11:เป็นการขึ้นบรรทัดใหม่ในการจบแต่ละรอบ



ตัวอย่างโปรแกรมที่ 6-12-1
ถ้าหากโจทย์ต้องการให้เราเขียนโปรแกรมที่มีการแสดงเลขโดยที่ต้องมีการจัดรูปแบบแบบนี้ด้วย

 1 2  3   4 5 6 7

 8  9  10  11  12  13  14

15 16  17  18  19  20  21

22 23  24  25  26  27  28

29 30  31  32  33  34  35



ถ้าหากตัวเลขมีแค่นี้เราอาจ จะ ใช้ วิธีพิมพ์ไปทั้งหมดแล้วใช้ cout แสดง ผลก็ได้ แต่ถ้าหากมีเลข เป็น ร้อยก็จะทำให้เสียเวลามากเพราะฉะนั้นเราน่าจะใช้วิธีการทำซ้ำมากกว่า



วิเคราะห์โจทย์ อย่างง่ายๆก่อน

1.โจทย์ต้องการ ให้แสดงเลข 1 –35

2.การจัดตำแหน่งควรจะมีรูปแบบสวยงาม

ไม่ควรให้เป็นแบบ นี้-à  8  9  10  11  12  13 14

15 16  17  18  19  20  21

3.ใน 1 บรรทัด แสดง แค่ 7 ตัว พอตัวต่อไปให้ขึ้นบรรทัดใหม่



วิธีการทำงานวิธีที่ 1
ในข้อ 1 ที่ทำงาน 35 ครั้ง เพื่อที่จะแสดงตัวเลขในที่นี้เราสามารถใช้ตัวแปรที่ใช้ในการวน loop แสดงค่าออกมาได้

ข้อ 2 เราใช้ Manipulater setw ในการแสดงผลที่หน้าจอได้ได้

ข้อ 3 นี่คือส่วนที่ยากที่สุดสำหรับโจทย์นี้ สำหรับคำที่ว่า “พอครบ 7 ตัวให้ขึ้นบรรทัดใหม่”

ถ้าเราจะเขียนโปรแกรมให้เช็คเงื่อนไข

if(ครบเจ็ดตัว) cout << endl;

เราไม่สามารถสั่งให้ compiler ทำงาน แบบนั้นได้ แต่เราสามารถสั่งให้ compiler เช็คเงื่อนไขบางอย่างได้ เช่นในแต่ละรอบของการ แสดงผลตัวเลขแต่ละตัว ให้มีตัวแปรที่ใช้การนับ (ในที่นี้สมมุติตัวแปร ชื่อ count ) ด้วยว่านี่เป็นตัวที่เท่าไหร่ โดยวิธีการคือให้ตัวแปร นั้นเพิ่มค่าทีละ 1

ส่วนในการเช็คเงื่อนไข ก็เช็คว่า ถ้าตัวแปรนั้นเท่ากับ 7 จริงก็ให้ขึ้นบรรทัดใหม่

 แล้วหลังจากที่ขึ้นบรรทัดใหม่แล้วก็ให้กำหนดค่าตัวแปร ที่ใช้ นับ ให้เท่ากับ 0

 สาเหตุที่ทำไมต้องกำหนดให้ตัวแปรที่ใช้นับ เป็น 0 เมื่อขึ้นบรรทัดใหม่เนื่องจากว่าถ้าหากว่ารอบการทำงานของโปรแกรมถึงรอบที่ 7 ตัวแปร count ก็จะเท่ากับ 7 ก็จะขึ้นบรรทัดใหม่แต่พอรอบการทำงานถึงรอบที่ 14 ตัวแปร count ก็จะเท่ากับ 14 โปรแกรมก็จะไม่ขึ้นบรรทัดใหม่เพราะเงื่อนไขของเราคือต้องเท่ากับ 7 ถึงขึ้นบรรทัดใหม่ อัลกอริทึ่มนี้ผู้เขียนคิดว่าน่าจะตรงกับความคิดของคนเรามากที่สุด

Source code

1:#include"iostream.h"

2:#include"iomanip.h"

3:int main()

4:{

5: int i,Count=0;

6: for(i=1;i<=35;i++)

7: {

8: cout << setw(3) << i;

9: Count++;

10:

11: if(Count ==7)

12: {

13: cout << endl;

14: Count =0;

15: }

16: }

17:

18: return 0;

19:}

Output เหมือนกับที่โจทย์ต้องการ

อธิบาย Source code

บรรทัดที่ 5:เป็นการประกาศตัวแปร ประเภท int ชื่อ i ใช้ในการวน loop และตัวแปร ชื่อ count ไว้ใช้ในการนับในแต่ละรอบโดยกำหนดค่าเริ่มต้นให้เป็น 0 ด้วย

บรรทัดที่ 6:เป็นการวน loop for โดยใช้ตัวแปร i โดยให้วน loop 35 รอบ

บรรทัดที่ 8: cout << setw(3) << i; เป็น Statement ที่อยู่ใน loop ที่จะทำงาน โดย Statement นี้จะพิมพ์ค่าตัวแปร i ออกทางจอภาพโดยมีการจัดตำแหน่งด้วย

บรรทัดที่ 9: Count++ เป็นการเพิ่มค่าให้กับตัวแปร Count อีกหนึ่งในแต่ละรอบเพื่อที่จะสามารถใช้นับได้ว่าเราพิมพ์ตัวเลขไปกี่ตัวแล้ว

บรรทัดที่ 11:เป็นการเช็คเงื่อนไขว่า ถ้าตัวแปร Count == 7 จริง คือได้มีการพิมพ์ตัวเลขครบ 7 ตัวแล้ว ให้ทำงาน Statement ในบรรทัดที่ 12 คือการขึ้นบรรทัดใหม่ และในบรรทัดที่ 13 เป็นการกำหนดค่าให้กับตัวแปร Count เป็น 0 ใหม่

โปรแกรมที่ 6-12-2

 โจทย์เหมือนกับโปรแกรมที่ 6-12-1 แต่เปลี่ยนตรงอัลกอริทึ่ม

 จากรูปแบบของการแสดงผลของโปรแกรมที่ 6-12-1 คือ

 1 2  3   4 5 6 7

 8  9  10  11  12  13  14

15 16  17  18  19  20  21

22 23  24  25  26  27  28

29 30  31  32  33  34  35

 จะมีข้อสังเกตุได้ว่าเราอาจไม่ต้องนับว่าในแต่ละบรรทัดมีเลขครบ 7 ตัวแล้วจึงขึ้นบรรทัดแต่เราอาจใช้วิธีให้ในแต่ละรอบของการทำงานคือการพิมพ์เลขออกมา ถ้าหากเลขนั้น คือเลข 7,14,21,28 ก็ให้ขึ้นบรรทัดใหม่ ตัวเลขชุดนี้ถ้านำไป %(หารเอาแต่ส่วน) กับ 7 จะได้ 0 เช่น

 7 % 7 จะได้ 0

 14 % 7 จะได้

เพราะฉะนั้นเราอาจเขียนโปรแกรมเพื่อที่จะทำการตรวจสอบการทำงานในแต่ละรอบได้ว่าถ้า จำนวนรอบ % 7 แล้วได้เท่ากับ 0 จริง ก็ให้ขึ้นบรรทัดใหม่

Source code

1:#include "iostream.h"

2:#include "iomanip.h"

3:int main()

4:{

5: int i;

6: for(i=1;i<=35;i++)

7:  {

8: cout << setw(3) << i;

9:

10: if(i % 7 ==0) cout << endl;

11:  }

12:

13:  return 0;

14:}

Output เหมือนที่โจทย์ต้องการ

บรรทัดที่ 6: โปรแกรมจะทำงาน 35 รอบ

บรรทัดที่ 8: ในแต่ละรอบโปรแกรมจะแสดงผลค่า i โดยที่เราใช้ Manipulater setw ในการจัดตำแหน่ง

บรรทัดที่ 10: โปรแกรมจะเช็คว่า ถ้าลำดับของรอบ % 7 ได้เท่ากับ 0(ครบ 7 รอบ) ให้ขึ้นบรรทัดใหม่



Loop For ที่ซ้อนกัน

 เราสามารถใช้ Loop For ซ้อนกันได้ในกรณีที่ต้องการให้มีการวน Loop ซ้อนกันโดยที่ รูปแบบการใช้ก็จะเหมือนรูปแบบปกติ ถ้ามีหลาย Statement ก็ต้อง มีวงเล็บ ปีกกาด้วย

รูปแบบ



 for(< intilize>;<Condition>;<increment>)

 {

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

 for(< intilize>;<Condition>;<increment>)

 {

 statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ



 }

}

โดยที่ Loop ที่อยู่ด้านนอก

โจทย์ที่5.3

ตัวอย่างเช่นโจทย์ต้องการให้แสดงผล



1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10



เราอาจใช้ Loop For ที่ซ้อนกัน โดยให้ Loop แรกทำงาน 5 ครั้ง(มี 5 บรรทัด) Loop ที่ซ้อนอยู่ทำงาน 10 ครั้ง ในการพิมพ์ตัวเลข

โปรแกรมที่ 6-13 การใช้ loop for ซ้อนกัน

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,j;

5: for(i=1;i<=5;i++)

6: {

7: for(j=1;j<=10;j++)cout << j << " " ;

8:

9: cout << endl;

10: }

11:

12: return 0;

13:}

ผลรันจะเป็นเหมือนที่โจทย์ต้องการ

บรรทัดที่ 4:ประกาศตัวแปร i และ j เป็นตัวแปรประเภท integer เพื่อใช้ กับ Loop For

บรรทัดที่ 5:เป็นการบอกว่า Loop i จะทำงาน 5 ครั้ง

บรรทัดที่ 7: Loop j จะทำงาน 10 ครั้ง โดยแต่ละครั้งให้ แสดงผลค่า j และ “ “ ในการเว้นวรรคการที่ Loop jอยู่ใน Loop i มีความหมายว่า เมื่อ Loop i ทำงาน 1 ครั้ง Loop j ก็จะทำงาน 10 ครั้ง Loop i ทำงาน 5 ครั้ง Loop j

ก็จะทำงาน รวมแล้ว 50 ครั้ง

บรรทัดที่ 9: เป็นการให้ขึ้นบรรทัดใหม่เมื่อจบ Loop i แต่ละครั้ง Statement ในบรรทัดที่ 9 นี้จะไม่ถือว่าเป็น Statement ใน loop  j เนื่อง จาก loop j เป็น loop แบบมี Statement เดียว เพราะฉะนั้นในการทำงานในแต่ละรอบของ loop j คือจะทำงาน Statement cout << j << " " ; ในบรรทัดที่ 7 เท่านั้นแต่ไม่ได้ทำงาน Statement ในบรรทัดที่ 9 ด้วย



โจทย์ที่ 6-14

ต้องการโปรแกรมที่รับค่าด้านกว่างของรูปสี่เหลี่ยมจตุรัสแล้วแสดงจำนวนเสาที่ล้อมรอบเช่น

ด้านยาว 2

แสดงผล

**

**

ด้านยาว 4

****

* *

* *

****

ด้านยาว 6

******

* *

* *

* *

* *

******

วิเคราะห์โจทย์

 โปรแกรมนี้เราต้องรับค่าความยาวของด้านของรูปสี่เหลี่ยมจุตุรัส และเราก็ต้องแสดงภาพเสาที่ใช้ล้อมรอบรูปสี่เหลี่ยม ซึ่งในที่นี้เราควรเขียนโปรแกรมให้มีการใช้ loop for ที่ซ้อนกัน โดยที่ loop แรกจะทำงานเท่ากับความยาวของ ด้าน และloop ที่ 2 ที่ซ้อนอยู่ใน loop แรก ก็จะทำงาน เท่ากับ ความยาวของด้านของ รูปสี่เหลี่ยมจัตุรัสเพื่อที่จะแสดงตัวอักษร *

โปรแกรมที่ 6-14-1

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int Len,i,j;

5: cout << "Please enter Length:";

6: cin >> Len;

7: for(i=1;i<=Len;i++)

8: {

9: for(j=1;j<=Len;j++) cout << "*";

10:

11: cout << endl;

12: }

13: return 0;

14:

15:}

Output

Please enter Length:6

******

******

******

******

******

******

อธิบาย Source code

บรรทัดที่ 6:เป็นการรับค่าตัวแปร Len

บรรทัดที่ 7:เป็นการวน loop for โดยใช้ตัวแปร i จำนวนรอบของตัวแปรนี้ จะทำงานเท่ากับตัวแปร Len

บรรทัดที่ 9:เป็นการวน loop for โดยใช้ตัวแปร j จำนวนรอบของตัวแปรนี้ จะทำงานเท่ากับตัวแปร Len โดยที่ loop j อยู่ใน loop i เพราะฉะนั้น เมื่อ loop i ทำงาน 1 ครั้ง loop j ก็จะทำงานตามจำนวนของตัวแปร Len ถ้าตัวแปร Len เท่ากับ 6 เมื่อ loop  i ทำงาน 1 loop j ก็ต้องทำงาน 6 รอบ เพื่อที่จะดูเข้าใจง่ายให้คิดว่า

 i = แถว , j = คอลัมน์

 รอบแรก i = 1 j ก็เป็นรอบที่ 1

 i = 1 j  = 1

 *

 รอบต่อมา i ยังเป็นรอบที่ 1 j เป็นรอบที่ 2

 i = 1  j = 2

 **

 จนถึง i ยังเป็นรอบที่ 1 j เป็นรอบที่ 6

 i = 1 j = 6

 ******

 i เปลี่ยน เป็น รอบที่2 j จะต้องเริ่มรอบที่ 1 ใหม่

 i = 2 j = 1

 ******

 *

 i ยังเป็นรอบที่ 2 j ในรอบต่อมาจะเพิ่มเป็น 2 แล้ว

 i = 2 j = 2

 ******

 **

 จนถึง i เท่ากับ 2 แต่ j ไปถึงรอบที่ 6

 ******

 ******

 จนเมื่อไปถึงรอบที่ i เท่ากับ 6 และ j เท่ากับ 6

 ******

 ******

 ******

 ******

 ******

 ******

รวมแล้วloop j ทำงาน 36 รอบ

รู้สึกว่าโปรแกรมนี้ยังทำงานได้ไม่ตรงตามที่เราต้องการเท่าไหร่ เพราะที่เราต้องการคือแสดงแค่เสาที่ล้อมรอบเท่านั้นไม่จำเป็นต้องแสดงส่วนภายใน แต่โดยรวมๆแล้วโปรแกรมที่ 6-14-1 ก็ทำงานได้ดีพอสมควรเพียงแค่เรามาเปลี่ยนแปลงบางส่วนของโปรแกรมก็จะสามารถทำงานอย่างที่โจทย์ต้องการได้

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

 ****

 * *

 * *

 ****



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

เราไม่สามารถเขียน Code ว่า if(บริเวณส่วนตรงกลาง)  cout << “ “; แบบนี้ได้แต่เราสามารถเช็คได้ว่าบริเวณไหนคือบริเวณตรงกลางของรูปสี่เหลี่ยม นั่นคือ สมมุติความยาวของรูปสี่เหลี่ยมคือ 5 บริเวณตรงกลางคือบริเวณที่ แถว ต้องไม่เป็น 1 กับ 5 และ คอลัมน์ ต้องไม่เป็น 1 กับ 5 เพราะบริเวณ 1 กับ 5 คือบริเวณรอบๆรูป

ในขณะที่ ถ้าความยาวของรูปสี่เหลี่ยมคือ 6 บริเวณตรงกลางคือบริเวณที่ แถว ต้องไม่เป็น 1 กับ 6 และ คอลัมน์ ต้องไม่เป็น 1 กับ 6 เพราะฉะนั้นเราควรเช็คเงื่อนไข คือ

 สมมุติว่าความยาว 5

 12345

 1 *****

 2 * *

 3 * *

 4 * *

 5 *****

เราจะพิมพ์เครื่องหมาย * ต่อเมื่อ แถวต้องเป็น 1 หรือ ความยาว(5)

 หรือ

  คอลัมน์ต้องเป็น 1 หรือ ความยาว(5)

 ถ้าไม่ตรงกับเงื่อนไขนี้ให้พิมพ์ “ “ แทน

แบบนี้แทนที่จะเช็คจากค่าคงที่ และเงื่อนไขของเรายังไม่ส่วนของ คอลัมน์อีกด้วย เราจึงต้องเขียน Source code เป็น

 สำหรับการเช็คแถวเพียงอย่างเดียว

 if (i == 1 || i ==Len)

 สำหรับการเช็คคอลัมน์ด้วย

 if ((i == 1 || i == Len)) || (j ==1 || j == Len)) cout << “ “;

 else cout << “*”;

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int Len,i,j;

5: cout << "Please enter Length:";

6: cin >> Len;

7: for(i=1;i<=Len;i++)

8: {

9: for(j=1;j<=Len;j++)

10: if((i==1 || i==Len) || (j==1 || j==Len))cout << "*";

11: else cout << " ";

12:

13: cout << endl;

14: }

15: return 0;

16:

17:}

Output เหมือนอย่างที่โจทย์ต้องการ

อธิบาย Source code ในโปรแกรมนี้ไม่มีเพราะว่าได้อธิบายไปก่อนหน้านี้แล้ว



การใช้ continue กับ loop for

 การใช้ continue เป็นการใช้ที่จะเริ่มวนloop ต่อไปโดยที่ไม่ต้องทำงาน Statement ที่เหลือต่อ ถ้าหาก

เช่น

รอบที่ทำงานคือรอบที่ 5 และโปรแกรมมาเจอ Statement continue ก็จะเริ่มทำงานรอบที่ 6 โดย Statement ที่เหลือในรอบที่ 5 จะไม่ทำงาน



โปรแกรมที่ 6-15 การใช้ continue กับ loop for

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=10;i++)

6: {

7:  if(i==5)continue;

8:

9:  cout << i << endl;

10: }

11:

12: return 0;

13:}

Output

1

2

3

4

6

7

8

9

10

อธิบาย Source code

บรรทัดที่ 5: เป็นการใช้ loop for โดยใช้ตัวแปร i ที่จะทำงาน 10 รอบ โดยที่บรรทัดที่ 9 จะเป็นการแสดงค่า i

แต่ทำไมค่าตัวแปร i ที่แสดงไม่แสดงเลข 5 พอแสดงเลข 4 และก็แสดงเลข 6 เลย นั่นเป็นเพราะว่าในบรรทัดที่ 7

if(i==5)continue; เป็น การใช้ if ที่จะทำการเช็คเงื่อนไขว่า ค่าตัวแปร i ได้ เท่ากับ 5 หรือเปล่าถ้าเท่ากับ 5 ก็ให้ continue โปรแกรมก็จะไปทำงานในบรรทัดที่ 5 ใหม่แต่คราวนี้ตัวแปร i เป็น 6 แล้ว เท่ากับว่า Statement  ที่ใช้ในการแสดงค่า i ในการวน loop รอบที่ 5 ก็จะไม่มีการได้ทำ จะไปทำรอบที่ 6 เลย

 การใช้ continue เป็น Statement สุดท้ายที่อยู่ใน loop

 ปกติแล้วการใช้ continue จะวางไว้ก่อน Statement ใดๆใน loop  เพื่อใช้เช็คเงื่อนไขว่าถ้าเงื่อนไขเป็นจริงก็ให้ไม่ต้องทำงาน Statement ที่เหลือใน loop นั้นให้ไปทำรอบใหม่ได้เลย แต่ถ้าเราวาง Statement continue ไว้ เป็นลำดับสุดท้าย Statement ที่อยู่ใน loop โปรแกรมอาจจะทำงานเหมือนไม่ได้มีการใช้ Statement continue ก็ได้

โปรแกรมที่ 6-16 ตัวอย่างการใช้ continue เป็น Statement สุดท้าย  ใน loop

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=10;i++)

6: {

7:

8: cout << i << endl;

9:

10: if(i==5)continue;

11: }

12:

13: return 0;

14:}

Output จะเป็น เลข 1 ถึง 10 โดยไม่มีการเว้นเลขไหนเลย

อธิบาย Source code

บรรทัดที่ 10:เป็นการเช็คเงื่อนไขว่า ถ้า i == 5 จริงให้ continue คือให้กลับไปทำงานบรรทัดที่ 5 และให้เริ่มต้น loop ใหม่ ใน รอบที่ 6 โดยที่ไม่ต้องทำงาน Statement ที่เหลือ อยู่ใน loop ที่ 5 แต่ทำไม Output ออกมาถึงมีเลข 5 ด้วย ไม่เหมือนโปรแกรมที่ 6-15 นั่นเป็นเพราะว่า การใช้ continue ในบรรทัดที่ 10 เป็นส่วนสุดท้ายของ Statement ใน loop ก่อนที่จะมาเจอ Statement continue โปรแกรมก็ได้ทำ Statement ในบรรทัดที่ 8 คือ พิมพ์ค่าตัวแปร i ไปแล้ว เพราะฉะนั้น การทำงานของ โปรแกรมจึงดูเหมือนไม่ได้มีการใช้ continue เลย

Loop while

เป็น Loop ที่มีการเช็คเงื่อนไขว่าถ้าเป็นจริงถึงจะทำงาน Source code ที่อยู่ใน loop ถ้าเป็นเท็จก็จะไม่ทำ loop while มีรูปแบบการใช้ดังนี้

While (condition) statement

Condition  เงื่อนไขที่ว่าเป็นจริงถึงจะทำจะตรวจสอบทุกครัง้ที่แต่ละรอบของการทำงาน

Statement   จะทำตราบเท่าที่ condition เป็น จริง

โปรแกรมที่ 6-17 ตัวอย่างการใช้ while loop

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i;

5: while(i!=1) cin >> i;

6:

7: return 0;

8:}

Output

5

6

7

8

1

บรรทัดที่ 5: ของโปรแกรมนี้จะทำการรับค่าจาก Keyboard ไปเรื่อย จนกว่า ค่า i จะเท่ากับ 1 จึงหยุดโปรแกรม ถ้า i ไม่เท่ากับ 1 ก็จะทำไปเรื่อยๆ



 Loop While ที่มีหลาย Statement

รูปแบบ

While (condition) statement

 {

 statement 1

 statement 2

}



ตัวอย่างการใช้  loop while ที่มีหลาย Statement ถ้าเราจะนำโปรแกรมที่ 6-11 ซึ่งเป็นโปรแกรม สูตรคูณ มาปรับปรุงใหม่ โดยให้มีการป้อนข้อมูลว่าต้องการแสดงสูตรคูณแม่อะไรเสร็จแล้วให้แสดงผล หลังจากที่แสดงผลแล้วก็ให้ผู้ใช้ ป้อนข้อมูลต่อไปอีกว่าต้องการแม่อะไร ไปเรื่อยๆ ถ้าหากผู้ใช้ต้องการจบการทำงานของ โปรแกรมก็ให้ป้อน เลข 0 โปรแกรมก็จะจบการทำงาน

โปรแกรมที่ 6-18-1

Source code

1:int main()

2:{

3: int i,Mae;

4: while(Mae != 0)

5: {

6: cout << "Please Enter your number :";

7: cin >> Mae;

8: for(i=1;i<=12;i++)

9: {

10: cout << Mae << " * " << i << " = " << Mae*i;

11: cout << endl;

12:

13: }

14: }

15:

16: return 0;

17:}

Output โปรแกรมนี้ ก็จะเป็นการให้ผู้ใช้ป้อนข้อมูลว่าต้องการสูตรคูณแม่อะไรหลังจากนั้นก็รับค่า อีกต่อไปเรื่อยๆจนกว่าผู้ใช้จะป้อนเลข 0 แต่พอผู้ใช้ ป้อนเลข 0 โปรแกรมจะยังไม่จบการทำงาน แต่จะแสดงสูตรคูณแม่ 0 แล้วค่อยจบโปรแกรม

0 * 1= 0

0 * 2= 0

0 * 3= 0

0 * 4= 0

0 * 5= 0

0 * 6= 0

0 * 7= 0

0 * 8= 0

0 * 9= 0

0 * 10= 0

0 * 11= 0

0 * 12= 0

 สาเหตุที่โปรแกรมจะยังไม่หยุดโปรแกรมจะอธิบาย ในส่วน อธิบาย Source code

อธิบาย Source code

บรรทัดที่ 4: while(Mae != 0) มีความหมายว่าจะทำงานวน loop ไปเรื่อยๆตราบเท่าที่ ตัวแปร Mae != 0 ซึ่ง Source code ในส่วนที่จะทำการ วน loop คือ Source code ที่อยู่ระหว่างบรรทัดที่ 5 และ 14

บรรทัดที่ 6 และ บรรทัดที่ 7:เป็นการให้ผู้ใช้ป้อนข้อมูลแม่ที่ต้องการ

บรรทัดที่ 8 ถึงบรรทัดที่ 13:เป็นการแสดงผลสูตรคูณของแม่ ที่ผู้ใช้ป้อนเข้ามา

 สาเหตุที่ทำไมผู้ใช้ป้อนข้อมูล เลข 0 แล้วโปรแกรมยังไม่หยุดทำงานเนื่องจาก Source code ในส่วนของการรับข้อมูลตัวแปร Mae จะอยู่ในบรรทัดที่ 7 ซึ่งในบรรทัดที่ 7 ตัวแปร Mae จะเท่ากับ 0 แล้ว แต่ยังมี Source code ที่เหลือที่โปรแกรมต้องทำงานสำหรับ loop นี้คือ บรรทัดที่ 8 ถึง 13 โปรแกรมก็เลยแสดงผลสูตรคูณแม่ 0 แล้วพอเริ่มรอบใหม่  loop while ก็จะไม่ทำงานแล้วเพราะว่า ค่าตัวแปร Mae != 0

 จะเห็นได้ว่าถ้าเรากำหนดให้ตัวแปร Mae != 0 ซึ่งจะทำให้เงื่อนไขใน condition เป็นเท็จ โปรแกรมก็จะยังทำงาน Statement ที่เหลืออยู่ใน loop จากนั้นในรอบต่อไปถึงค่อยออกจาก loop

 ในเมื่อเรารู้แล้วว่า ถึงแม้ว่าเราจะป้อนค่าของตัวแปร Mae ให้เท่ากับ 0 โปรแกรมก็ยังจะทำงาน Statement ที่เหลืออยู่ เพราะฉะนั้น เราอาจจะใช้ เขียน โปรแกรมให้รับค่าตัวแปร Mae ให้เป็น Statement สุดท้ายของ loop ถ้าเราเขียนอย่างนี้แล้วเวลาเราป้อนข้อมูลตัวแปร Mae เท่ากับ 0 โปรแกรมก็ไม่เหลือ Statement อื่นให้ทำงานอีกแล้ว และก็จะเริ่ม วน loop รอบใหม่เลยแต่พอจะทำงานรอบใหม่เงื่อนไข ใน condition ก็เป็น เท็จ โปรแกรมก็จะออกจาก loop

 ถ้าเราเขียนโปรแกรมให้รับค่าตัวแปร Mae เป็น Statement สุดท้ายของ loop while โปรแกรมก็จะทำการแสดงผลสูตรคูณก่อน ก่อนที่จะรับค่า เพราะฉะนั้นเราควรเขียน Statement  ที่อยู่นอก loop ที่แยกออกมาต่างหากในการรับค่าตัวแปร Mae ครั้งแรก หลังจากนั้น โปรแกรมก็จะทำงาน Statement ทีอยู่ใน loop แสดงสูตรคูณ จากนั้นก็จะใช้ Statement รับค่าตัวแปร Mae ใน  loop while

โปรแกรมที่ 6-18-2 ตัวอย่างการใช้  loop while

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,Mae;

5: cout << "Please Enter your number :";

6: cin >> Mae;

7:

8: while(Mae != 0)

9: {

10:

11: for(i=1;i<=12;i++)

12: {

13: cout << Mae << " * " << i << " = " << Mae*i;

14: cout << endl;

15:

16: }

17: cout << "Please Enter your number :";

18: cin >> Mae;

19: }

20:

21: return 0;

22:}

Output จะได้อย่างที่ต้องการแล้วล่ะ

อธิบาย Source code

บรรทัดที่ 5 กับ บรรทัดที่ 6:เป็นการให้ผู้ใช้ป้อนข้อมูลตัวแปร Mae ในครั้งแรกซึ่ง Source code ในส่วนนี้ไม่อยู่ใน loop

บรรทัดที่ 8: while(Mae != 0) มีความหมายว่าจะทำตราบเท่าที่ตัวแปร Mae != 0 ซึ่ง Source code ส่วนที่จะทำอยู่ระหว่างบรรทัดที่ 9 ถึง บรรทัดที่19

บรรทัดที่ 11 ถึง บรรทัดที่ 16 :เป็นการแสดงผลสูตรคูณที่อยู่ใน loop while จะเห็นได้ว่าใน loop while เราแสดงผล สูตรคูณก่อนที่จะทำการรับค่าตัวแปร Mae ในบรรทัดที่ 17 และ 18 นี่คือสาเหตุที่ต้องมีบรรทัดที่ 5 และ 6 ในการรับค่าตัวแปร Mae ในรอบแรก

บรรทัดที่ 17 และบรรทัดที่ 18: เป็นการรับค่าตัวแปร Mae ถ้าหากผู้ใช้ป้อนเลข 0 โปรแกรมก็จะทำงาน Statement ที่เหลืออยู่ใน loop นี้ ซึ่งในที่นี้ ไม่มี Statement อะไรแล้ว เพราะว่า Statement รับค่าตัวแปร Mae เป็น Statement สุดท้ายของ  while loop เราก็จะไม่ต้องเห็นโปรแกรมทำการแสดงผล สูตรคูณแม่ 0 แล้วล่ะ แล้วพอโปรแกรมจะทำงาน Statement ใหม่ ก็จะทำการเช็คเงื่อนไขใน condition เนื่องจาก เงื่อนไขเป็นเท็จก็จะออกจาก loop และออกจาก โปรแกรม

loop do

 loop do เป็น การวน loop ที่จะทำงาน Statement ใน loop ก่อน 1 รอบถึงจะตรวจสอบเงื่อนไขใน condition ถ้าเป็นจริงก็จะทำรอบต่อๆไป ถ้าเป็น เท็จก็จะไม่ทำ

loop do มีรูปแบบดังนี้

 do

 Statement;

 while(condition);

โปรแกรมที่ 6-19 ตัวอย่างการใช้ do loop

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i =0;

5:

6: do

7: i++;

8: while(i<10);

9:

10: cout << i;

11: return 0;

12:}

Output

10

อธิบาย Source code

โปรแกรมนี้เป็นตัวอย่างการใช้ loop do ในการทำซ้ำในการเพิ่มค่าให้กับตัวแปร i

บรรทัดที่ 4:ประกาศตัวแปร i และยังกำหนดค่าให้เท่ากับ 0

บรรทัดที่ 6:มีความหมายว่า เป็นการใช้ loop do

บรรทัดที่ 8:มีความหมายว่า loop do จะทำงานตราบเท่าที่ค่าตัวแปร i < 10 โดยที่ Statement ของ loop do ในที่นี้คือ Statement ในบรรทัดที่ 7 คือการเพิ่มค่าให้กับตัวแปร i ครั้งละ 1 พอรอบที่ 10 ตัวแปร i มีค่าไม่น้อยกว่า 10 แล้วก็จะไม่ทำอีก

โปรแกรมที่ 6-20 ตัวอย่างการใช้ loop do

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i =0;

5:

6: do

7: i++;

8: while(i >10);

9:

10: cout << i;

11: return 0;

12:}

Output

1

อธิบาย Source code

โปรแกรมนี้คล้ายโปรแกรมที่ 6-19 มากแต่จะต่างกันก็ตรงที่เงื่อนไขของ loop do ในบรรทัดที่ 8 จะเปลี่ยนเป็น i > 10 ซึ่งในบรรทัดที่ 4 เราประกาศและกำหนดค่าตัวแปร i ให้เท่ากับ 0 เงื่อนไขใน condition ก็จะเป็นเท็จ แต่ loop do ก็จะทำงาน Statement ใน loop ก่อน 1 รอบ ถึงแม้เงื่อนไขจะเป็นเท็จ Statement ที่ทำงาน ก็คือการเพิ่มค่าให้กับตัวแปร i อีก 1 ซึ่งทำให้เราได้ Output เท่ากับ 1

loop do ที่มีหลาย Statement

 เราสามารถเขียน โปรแกรมโดยใช้ loop do ที่มีหลาย Statement ได้โดยมีรูปแบบดังนี้

 do

 {

 Statement;

 Statement;

 }

 while(condition);

โปรแกรมที่ 6-21 ตัวอย่างการใช้ loop do เขียนโปรแกรมสูตรคูณ

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i=1,Mae;

5:

6: cout << "Please Enter your number :";

7: cin >> Mae;

8: do

9: {

10: cout << Mae << " * " << i << " = " << Mae*i;

11: cout << endl;

12: i++;

13: }

14: while(i<13);

15:

16:

17: return 0;

18:}

Output ได้เหมือนโปรแกรมที่ 6-11

อธิบาย Source code

บรรทัดที่ 8:มีความหมายว่าเป็นการใช้ loop do

บรรทัดที่ 14:มีความหมยว่า Statement ใน loop do จะทำงาน ตราบเท่าที่เงื่อนไข i < 13 เป็นจริง

บรรทัดที่ 12:นี่คือ Statement ใน loop do โดย Statement นี้จะทำการเพิ่มค่าตัวแปร i ให้เพิ่มอีก 1 ในแต่ละรอบ

โปรแกรมที่ 6-22 โปรแกรมนี้จะมีการทำงานโดยรับข้อมูลตัวเลขจากผู้ใช้และจะแสดงรูปสามเหลี่ยมโดยใช้เครื่องหมาย *

ถ้าตัวเลขคือ 2 แสดงผล

*

**

ถ้าตัวเลขคือ 3 แสดงผล

*

**

***

ถ้าตัวเลขคือ 5 แสดงผล

*

**

***

****

*****

วิเคราะห์โจทย์แบบง่ายๆก่อน

 โปรแกรมต้องการแสดงผลในลักษณะนี้เราอาจใช้ loop do ที่ซ้อนกันโดยให้ loop แรกแสดง แถว และ loop ที่ซ้อนอยู่แสดงเครื่องหมาย * ในแต่ละคอลัมน์

 ในแต่ละแถวจำนวนคอลัมน์ที่ต้องแสดงจะมีจำนวนเท่ากับลำดับของแถว เช่นถ้าผู้ใช้ป้อนข้อมูลเลข 5

  12345

1*

2**

3***

4****

5*****

 จะเห็นได้ว่าถ้าเป็นแถวที่ 1 ก็แสดงเครื่องหมาย * 1ครั้ง ถ้าเป็นแถวที่ 5 ก็แสดงเครื่องหมาย * 5 ครั้ง เพราะฉะนั้นเราควรเขียนโปรแกรมให้ loop ที่ซ้อนอยู่ที่มีหน้าที่แสดงเครื่องหมาย * ให้วน loop เท่ากับ การทำงานใน loop แรก

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i=0,col,j=0;

5: cout << "Please enter number:";

6: cin >> col;

7: do

8: {

9:

10: i++;

11: j =0;

12: do

13: {

14: cout << "*";

15: j++;

16: }while(j < i);

17:

18: cout << endl;

19:

20: }

21: while(i < col);

22: return 0;

23:}

Output

Please enter number:3

*

**

***

อธิบาย Source code

บรรทัดที่ 7 ถึง บรรทัดที่ 21:เป็นการใช้ loop do ที่จะทำงานไปเรื่อยๆ ถ้าตัวแปร i ยังน้อยกว่าตัวแปร col อยู่โดยที่บรรทัดที่ 10 เราได้ทำการเพิ่มค่าให้กับตัวแปร i อีก 1 ในแต่ละรอบ ถ้าหากตัวแปร i ไม่น้อยกว่าตัวแปร col โปรแกรมก็ยังจะทำงาน Source code ใน loop อยู่ 1 รอบ เพราะเราใช้ loop do

บรรทัดที่ 12 ถึง บรรทัดที่ 16:เป็นการใช้ loop do ที่จำทำงานไปเรื่อยๆ ตราบเท่าที่ตัวแปร j น้อยกว่าตัวแปร i โดยที่ในแต่ละรอบเราจะทำการเพิ่มค่าให้กับตัวแปร j อีก 1 ด้วย และ loop นี้มีหน้าที่การทำงานคือแสดงเครื่องหมาย * ถ้าหากตัวแปร j ไม่น้อยกว่าตัวแปร i โปรแกรมก็ยังจะทำงาน Source code ใน loop อยู่ 1 รอบ เพราะเราใช้ loop do

 ในที่นี้เพื่อความเข้าใจง่ายเราจะเรียก loop do อันแรกว่า loop i

 และ เราจะเรียก loop do ที่ซ้อนอยู่ใน loop i ว่า loop j

 ถ้าตัวแปร col = 3

 loop i ก็จะทำงาน 3 รอบคือ 3 บรรทัด

 และใน loop i แต่ละรอบก็จะมี loop j ที่ทำงาน เท่ากับ ตัวแปร i

 ในรอบแรกตัวแปร i เป็น 1

 loop  j ก็จะทำงาน 1 รอบคือแสดงผล

 *

 ในรอบที่ 2 ตัวแปร i เป็น 2

 loop j ก็จะทำงาน 2 รอบคือแสดงผล

 **

 ในรอบที่ 3 ตัวแปร i เป็น 3

 loop j ก็จะทำงาน 3 รอบคือแสดงผล

  ***

เมื่อรวมกันแล้วก็จะได้ Output อย่างที่เราต้องการ