1 of 18

การควบคุมทิศทางการทำงานของโปรแกรม � การทำซ้ำ (Repetition)

1

บทที่ 4-2

2 of 18

Repetition in C Programming

  • ภาษา C มีคำสั่งเพื่อใช้สำหรับควบคุมการทำซ้ำ ดังนี้
      • คำสั่ง for
      • คำสั่ง while
      • คำสั่ง do-while

2

      • วงรอบ (Loop) ในภาษาการโปรแกรมคอมพิวเตอร์ หมายถึง ลำดับของคำสั่งในภาษาโปรแกรมที่ทำงานซ้ำต่อเนื่อง จนกว่าเงื่อนไขในการทำซ้ำนั้นจะสิ้นสุดลง

3 of 18

คำสั่ง for

  • โครงสร้างของคำสั่ง for
    • Index initialization คือ การกำหนดค่าเริ่มต้นให้กับตัวแปรดัชนี

ตัวแปรดัชนี (index) คือ ตัวที่ใช้ควบคุมการทำงานในวงรอบ

    • Update index คือ การเพิ่มค่า หรือลดค่า index เพื่อให้ผลของการเปรียบเทียบเงื่อนไข (condition) มีแนวโน้มที่จะเป็นเท็จได้ เช่น n++ หรือ n--
    • Condition คือ เงื่อนไขในการเปรียบเทียบ เช่น n <= 9

3

4 of 18

คำสั่ง for

  • ไวยากรณ์ของคำสั่ง for

for (index initialization; Condition; Update Index)

Statement ;

ตัวอย่างเช่น

หรือ

4

ผลลัพธ์ของ Loop นี้จะแสดงคำว่า RMUTT ทั้งหมด 10 ครั้ง

(รอบที่ 1-10)

ผลลัพธ์ของ Loop นี้จะแสดงคำว่า RMUTT ทั้งหมด 10 ครั้ง

(รอบที่ 10-1)

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

printf("RMUTT\n");

for (n = 10; n >= 1; n--)

printf("RMUTT\n");

5 of 18

คำสั่ง for

  • คำสั่ง for สามารถทำซ้ำได้เพียงหนึ่งคำสั่งเท่านั้น ถ้าต้องการให้ทำซ้ำมากกว่าหนึ่งคำสั่งต้องใส่คำสั่งเหล่านั้นไว้ภายใต้ Compound Statement โดยใช้เครื่องหมาย { }

  • ในทางเดียวกัน ถ้าใส่เครื่องหมาย ; หลังเครื่องหมายวงเล็บ ) ของ for ดังตัวอย่าง

จะทำให้ไม่เกิดการทำซ้ำคำสั่งต่อจากนี้ เนื่องจาก ; หมายถึง จบหนึ่งคำสั่ง ดังนั้นคำสั่งที่ถูกทำซ้ำคือ คำสั่งที่อยู่ก่อนหน้า ; ซึ่งก็คือ ไม่มีคำสั่งใด ๆ นั่นเอง

5

for (n = 0; n <= 9; n++)

{

printf("Hello");

printf("World");

}

for (n=0; n<=9; n++) ;

6 of 18

คำสั่ง for

  • สามารถประกาศตัวแปรในส่วนของ index initialization ได้หลายตัว เช่น

**ในที่นี้ Index มี 2 ตัวคือ ตัวแปร x และตัวแปร y **

6

จากตัวอย่าง แสดงให้เห็นว่า ในส่วนของ index initialization สามารถมีตัวแปรดัชนี (index) ได้มากกว่า 1 ตัว และในส่วนของ condition ก็สามารถใส่นิพจน์การคำนวณได้ด้วย

0+0 = 0

1+5 = 6

2+10 = 12

3+15 = 18

4+20 = 24

for (int x=0,y=0; x+y<30; ++x, y+=5)

printf("%d+%d = %d\n", x, y, x+y);

7 of 18

การประยุกต์ใช้งาน Nested for

  • ตัวอย่างการแสดงสูตรคูณแม่ 1 ถึงสูตรคูณแม่ 12

7

1x1 = 1

1x2 = 2

.

.

1x12 = 12

*มุมขบคิด*

ถ้าต้องการให้โปรแกรมนี้มีการแสดงทีละบรรทัดตามการกด enter จะต้องเปลี่ยนโปรแกรมให้เป็นแบบใด

for (int m = 1; m <= 12; m++)

{

for (int n = 1; n <= 12; n++)

printf("%dx%d = %d\n",m,n,m*n);

}

8 of 18

ตัวอย่างการใช้งาน for

8

การทำงาน

โปรแกรมจะทำการวนรอบเพื่อรับค่าตัวอักษรเรื่อย ๆ จนกว่าตัวอักษรที่รับเข้ามาเป็นอักขระ ‘q’ จึงจะจบการวนรอบ

โปรแกรมนี้แสดงให้เห็นถึง การกำหนดค่าให้กับตัวแปรดัชนี (index) อีกรูปแบบหนึ่ง โดยการใช้ฟังก์ชัน getche( ) และมีการ update ค่าด้วยวิธีการรับค่า มิใช่การเพิ่มหรือลดค่า index

ผลลัพธ์การทำงาน

123abcq

q has been found

1

2

3

4

5

67

8

9

#include <stdio.h>

#include <conio.h>

int main(void)

{

char c;

for (c=getche( ); c!=‘q’; c=getche( ));

printf("\n q has been found \n");

return(0);

}

9 of 18

ตัวอย่างการใช้งาน for

9

หมายเหตุ

    • คำสั่ง continue ทำหน้าที่กระโดดไปยังจุด update (i++) ทันทีโดยไม่สนใจคำสั่งต่อไป
    • คำสั่ง break ทำหน้าที่กระโดดออกจาก loop

ผลลัพธ์การทำงาน

This is odd number (1)

This is odd number (3)

This is odd number (5)

This is odd number (7)

1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

int main(void)

{

int i;

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

{ if ((i%2)== 0)

continue;

printf("This is odd number (%d)\n", i);

if (i>5) break;

}

return(0);

}

10 of 18

ตัวอย่างการใช้งาน for

10

มีลวดหนามยาว 200 เมตร จะล้อมลวดหนามแต่ละด้านอย่างไร ให้มีพื้นที่ที่มากที่สุด และพื้นที่นั้นมีขนาดเท่าไร

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <stdio.h>

int main(void)

{

int x, area, max;

printf("Value of x Area\n");

max = 0;

for (x=1; x<100; x++)

{ area = x*(100-x);

printf("%d %d\n",x,area);

if (area > max) max = area;

}

printf("Maximum area is %d\n", max);

return(0);

}

ผลลัพธ์การทำงาน

Value of x Area

1 99

… …

10 900

11 979

… …

50 2500

… …

58 2436

… …

99 99

Maximum area is 2500

11 of 18

คำสั่ง while

  • โครงสร้างของคำสั่ง while
    • Condition คือ เงื่อนไขที่ใช้ในการเปรียบเทียบ ถ้าผลลัพธ์ของการเปรียบเทียบเป็นจริง จะมีการเข้าไปทำงานคำสั่งในวงรอบ
    • statement คือ คำสั่งที่จะถูกกระทำเมื่อเงื่อนไขการเปรียบเทียบเป็นจริง
    • คำสั่ง while จะต้องมีการกำหนดค่าเริ่มต้นให้กับ index (ในที่นี้คือตัวแปร n) ก่อนที่จะเข้า loop ดังตัวอย่าง คือ n 🡨 1
    • ในวงรอบจะต้องมีคำสั่งสำหรับ update ค่า index เพื่อที่จะทำให้เงื่อนไขมีแนวโน้มจบวงรอบได้ ในที่นี้คือ n 🡨 n+1

11

12 of 18

คำสั่ง while

  • ไวยากรณ์ของคำสั่ง while

while (condition)

Statement ;

ตัวอย่างเช่น

ตัวอย่างเช่น

  • คำสั่ง while สามารถทำซ้ำได้เพียงหนึ่งคำสั่งเท่านั้น ถ้าต้องการให้ทำซ้ำมากกว่า หนึ่งคำสั่ง ต้องใส่คำสั่งเหล่านั้นไว้ภายใต้เครื่องหมาย { }

12

ผลลัพธ์การทำงาน

1. RMUTT

2. RMUTT

3. RMUTT

4. RMUTT

5. RMUTT

n = 1;

while (n <= 5)

{

printf("%d. RMUTT\n", n);

n++;

}

13 of 18

ตัวอย่างการใช้งาน while

  • คำสั่ง while สามารถทำซ้ำได้เพียงหนึ่งคำสั่งเท่านั้น ถ้าต้องการให้ทำซ้ำมากกว่าหนึ่งคำสั่ง ต้องใส่คำสั่งเหล่านั้นไว้ภายใต้เครื่องหมาย { }

13

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <stdio.h>

int main(void)

{

int sum, n;

sum = 0;

n = 1;

while (n <= 10)

{

sum = sum+n;

n++;

}

printf("Summation of 1-10 is : %d", sum);

return(0);

}

ผลลัพธ์การทำงาน

Summation of 1-10 is 55

14 of 18

คำสั่ง do-while

  • โครงสร้างของคำสั่ง do-while
    • Condition คือ เงื่อนไขที่ใช้เปรียบเทียบซึ่งถ้าผลลัพธ์ของการเปรียบเทียบเป็นจริง จะมีการเข้าไปทำงานคำสั่งในวงรอบ ถ้าเป็นเท็จจะออกนอกวงรอบ
    • statement คือ คำสั่งที่จะถูกกระทำเมื่อเงื่อนไขการเปรียบเทียบเป็นจริง
    • จุดเด่นของ do-while คือ คำสั่งทำซ้ำที่จะถูกกระทำก่อนอย่างน้อยหนึ่งครั้ง ก่อนจะออกจากวงรอบ
    • ในการ update และ initial ค่าเริ่มต้นยังคงเป็นหลักการเดียวกันกับคำสั่ง while

14

15 of 18

ตัวอย่างการใช้งาน do-while

  • ไวยากรณ์ของคำสั่ง do-while

do {

statement in do-while

} while (condition);

ตัวอย่างเช่น

15

ผลลัพธ์การทำงาน

1. RMUTT

2. RMUTT

3. RMUTT

4. RMUTT

5. RMUTT

n = 1;

do {

printf("%d. RMUTT\n", n);

n++;

} while (n <= 5);

16 of 18

ตัวอย่างการใช้งาน do-while

  • หมายเหตุ โปรแกรมจะวนไปรับข้อมูลไปเรื่อยๆ จนกว่า ตัวแปร choice จะมีค่าเท่ากับ 3 จึงจะออกจากการวนรอบ

16

do {

printf("****Menu****\n");

printf(" 1. Show odd\n");

printf(" 2. Show even\n");

printf(" 3. Exit\n");

printf(" Please enter number [1-3] : ");

scanf("%d", &choice);

} while (choice != 3);

17 of 18

สรุปการควบคุมทิศทางการทำงานของโปรแกรม � การทำซ้ำ

  • หลักการในการทำซ้ำนั้นจะประกอบไปด้วยสิ่งสำคัญ 3 สิ่ง คือ
    • การกำหนดค่าเริ่มต้นให้กับค่าดัชนี (Index)
    • เงื่อนไข (Condition) ที่จะตัดสินว่า จะให้ทำซ้ำในวงรอบหรือไม่
    • การปรับค่าดัชนี (Update index) ภายในวงรอบ

17

i = 1;

while (i <= 5)

{

printf("RMUTT");

i++;

}

i = 1;

do {

printf("RMUTT");

i++;

} while (i<=5);

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

{

printf("RMUTT");

}

18 of 18

การควบคุมทิศทางการทำงานของโปรแกรม � การทำซ้ำ (Repetition)

18

จบบทที่ 4-2