บทที่ 9 โครงสร้างแบบทําซ้ํา เนื้อหา 1. คําสั่ง for 2. คําสั่ง while 3. คําสั่ง do…while
ผลการเรียนรู้ที่คาดหวัง 1. เขียนโปรแกรมที่มีโครงสร้างการทํางานแบบวนซ้ําและเลือกใช้คําสั่งได้อย่างเหมาะสม 2. อธิบายความสัมพันธ์ของเทคโนโลยีสารสนเทศ ข้อมูล คอมพิวเตอร์ และการเขียนโปรแกรมได้ 3. ใช้คอมพิวเตอร์สร้างงานอย่างมีจิตสํานึกและมีความรับผิดชอบ
การวนซ้ํา (Loop) หมายถึง กลุ่มของคําสั่งที่ต้องการประมวลผลซ้ําหลายครั้ง ทั้งนี้ขึ้นอยู่กับเงื่อนไขที่กําหนด ไว้ โปรแกรมภาษา C มีคําสั่งวนซ้ําอยู่ 3 คําสั่ง ได้แก่ คําสั่ง while, คําสั่ง do…while และคําสั่ง for
1. คําสั่ง while รูปแบบของคําสั่ง while ได้แก่ while(condition) { statement-1; statement-n; }
โดยที่ condition statement
คือ คือ
เงื่อนไขที่ถูกกําหนดขึ้น คําสั่งที่ต้องการให้โปรแกรมประมวลผล
การทํางานของคําสั่ง while จะเริ่มต้นด้วยการตรวจสอบเงื่อนไข (condition) ถ้าผลการตรวจสอบเป็นจริง หรือมีค่าไม่เท่ากันศูนย์ คําสั่ง (statement) ที่อยู่ภายใต้เครื่องหมาย { } ทุกคําสั่งจะได้รับการประมวลผล 1 ครั้ง แล้ว โปรแกรมจะกลับไปตรวจสอบเงื่อนไข ถ้าผลการตรวจสอบยังคงเป็นจริงอยู่ โปรแกรมก็จะประมวลผลคําสั่งหลัง เงื่อนไขอีก 1 รอบ และทําซ้ําในลักษณะนี้จนกระทั่งผลการตรวจสอบเป็นเท็จ (มีค่าเท่ากับ 0) จึงจะยุติการทํางานใน ลูป
-2-
เงื่อนไข
จริง
เท็จ
คําสั่งที่ 1 คําสั่งที่ N
รูปที่ 1 ผังงานแสดงการทํางานของโครงสร้างแบบทําซ้ํา while และ for ตัวอย่างที่ 1 แสดงเลขจํานวนเต็มที่เรียงต่อกันไป โดยใช้ while int main() { int digit = 0; while(digit <= 9) { printf(“%d\n”, digit); digit++; } return 0; } จากตัวอย่าง กําหนดค่าเริ่มต้นให้ digit มีค่าเป็น 0 จากนั้นจะตรวจสอบเงื่อนไข (digit <= 9) ว่าเป็นจริง หรือไม่ ถ้าเป็นจริงก็จะทําคําสั่งทั้ง 2 คําสั่ง ซึ่งจะมีการเพิ่มค่า digit ขึ้นทีละ 1 จนกระทั่งค่า n เป็น 10 ทําให้เงื่อนไข (digit <= 9) เป็นเท็จจึงออกจากลูป (ทําซ้ําทั้งสิ้น 10 รอบ คือ รอบที่ digit มีค่าเท่ากับ 0 จนถึง digit เท่ากับ 9)
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-3ตัวอย่างที่ 2 การคํานวณหาค่าแฟคทอเรียล โดยใช้ while int main() { int n, fac = 1; printf(“Enter positive number”); scanf(“%d”,&n); while(n>=1) { fac = fac * n; n = n-1; } printf(“%d”,fac); return 0; }
จากตัวอย่าง มีการกําหนดค่าเริ่มต้นให้กับตัวแปร fac เป็น 1 แล้วรับค่า n จากผู้ใช้ หลังจากนั้นจะตรวจสอบ เงื่อนไข (n>1) ว่าเป็นจริงหรือไม่ ถ้าเป็นจริงก็จะทําคําสั่งทั้ง 2 คําสั่ง ซึ่งจะมีการลดค่า n ลงทีละ 1 จนกระทั่งค่า n เป็น 1 ดังนั้น ถ้า n = 5 จะได้ 5! = 5 x 4 x 3 x 2 x 1 = 120
2. คําสั่ง do..while คําสั่ง do..while จะมีการทํางานคล้ายกับ while แต่ต่างกันตรงที่ คําสั่ง do..while จะตรวจสอบเงื่อนไขที หลัง นั่นคือจะมีการทําคําสั่งในลูปอย่างน้อย 1 ครั้งเสมอ เมื่อทําคําสั่งในลูปแล้วจึงตรวจสอบเงื่อนไขทีหลัง รูปแบบของคําสั่ง do..while ได้แก่ do {
statement-1; statement-n; } while(condition);
โดยที่ condition statement
คือ คือ
เงื่อนไขที่ถูกกําหนดขึ้น คําสั่งที่ต้องการให้โปรแกรมประมวลผล
คําสั่งที่ 1 คําสั่งที่ N
เงื่อนไข เท็จ
จริง
รูปที่ 2 ผังงานแสดงการทํางานของโครงสร้างแบบทําซ้ํา do..while รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-4ตัวอย่างที่ 3 แสดงเลขจํานวนเต็มที่เรียงต่อกันไป โดยใช้ do..while int main() { int digit = 0; do { printf(“%d\n”, digit); digit++; } while(digit <= 9); return 0; }
จากตัวอยา ง โปรแกรมจะทําการประมวลผลคํา สั่ง ภายใตคําสั่ง do..while ภายในเครื่องหมาย { } กอน หนึ่ ง ครั้ ง แล ว จึ ง มาตรวจสอบเงื่ อ นไขว า เป น จริ ง หรือไม ถาเปนจริงก็จะวนกลับไปทําคําสั่งอีกครั้ง ทํา อยางนี้ไปจนกวาการตรวจสอบเงื่อนไขจะเปนเท็จ จึง จะจบการทํางาน
ตัวอย่างที่ 4 การคํานวณค่าแฟคทอเรียล โดยใช้ do..while int main() { int n, fac = 1; printf(“Enter positive number”); scanf(“%d”,&n); do { fac = fac * n; n = n-1; } while(n>=1); printf(“%d”,fac); return 0; }
จากตัวอย่าง โปรแกรมจะทําการประมวลผลคําสั่ง fac = fac * n; และ n = n-1; ก่อน แล้วจึงมาตรวจสอบ เงื่อนไขว่าเป็นจริงหรือไม่ ถ้าเป็นจริงก็จะวนกลับไปทําคําสั่ง (statement) ที่อยู่ในลูปอีกครั้ง ทําอย่างนี้ไปจนกว่าการ ตรวจสอบเงื่อนไขจะเป็นเท็จ จึงจะจบการทํางาน
3. คําสั่ง for คําสั่ง for เป็นคําสั่งวนลูปที่มีส่วนประกอบอยู่ 3 ส่วน ได้แก่ 1. ส่วนเริ่มต้น (initialization) 2. ส่วนเงื่อนไข (Condition) 3. ส่วนปรับค่า (Update) รูปแบบของคําสั่ง for ได้แก่ for(initialization; condition; update) { statement-1; statement-n; }
สําหรับลําดับหรือขั้นตอนการทํางานของคําสั่ง for จะเหมือนกับคําสั่ง while
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-5ตัวอย่างที่ 5 แสดงเลขจํานวนเต็มที่เรียงต่อกันไป โดยใช้ for int main() { int digit; for(digit=0; digit<=9; digit++) { printf(“%d\n”, digit); } return 0; }
ตัวอย่างที่ 6 การคํานวณค่าแฟคทอเรียล โดยใช้ for int main() { int n, i, fac = 1; printf(“Enter positive number”); scanf(“%d”,&n); for(i=1;i<=n;i++) fac = fac * n; printf(“%d”,fac); return 0; }
จากตัวอย่าง มีการกําหนดค่าเริ่มต้น(initialzation) คือ i =1 และให้มีการปรับค่าให้ตัวแปร i เพิ่มขึ้นทีละ 1 ซึ่งลูป for จะทํางานก็ต่อเมื่อเงื่อนไข (i<=n) เป็นจริง ตัวอย่างที่ 7 การแสดง asterisk (*) ออกมาทางจอภาพ n แถวๆ ละ n ตัว โดยใช้คําสั่ง for int main() { int i, j, n; printf("Enter number : "); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("*"); printf("\n"); } return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ภาคเรียนที่ 1/2554
-6-
คําสั่ง break ถ้าใช้คําสั่ง break ใน loop ใดๆ แล้ว จะทําให้ออกจาก loop ทันที แล้วมาทําคําสั่งที่ต่อจาก loop นั้น เช่น for(i=0;i<6;i++) { if(i==3) break; printf(“Hello %d\n”,i); }
ไดผลลัพธดังนี้ Hello 0 Hello 1 Hello 2
คําสั่ง continue ถ้าใช้คําสั่ง continue ใน loop ใดๆ แล้ว จะทําให้คําสั่งทั้งหมดที่อยู่หลังจากคําสั่ง continue ภายใน loop นั้นๆ ไม่ถูกประมวลผล จะข้ามการทํางานไปทําคําสั่งใน loop ต่อไปทันที เช่น for(i=0;i<6;i++) { if(i==3) continue; printf(“Hello %d\n”,i); }
ตัวอย่างที่ 8 #include<stdio.h> int main() { int i, x=0; for(i=1;i<10;i*=2) { x++; printf("%d ", x); } printf(“\n”); return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ไดผลลัพธดังนี้ Hello 0 Hello 1 Hello 2 Hello 4 Hello 5
ตัวอย่างที่ 9 #include<stdio.h> int main() { int i=0, x=0; while(i<20) { if(i%5 == 0) { x += i; printf("%d\n", x); } i++; } printf("\nx = %d", x); printf("\ni = %d", i); printf(“\n”); return 0; }
ภาคเรียนที่ 1/2554
-7ตัวอย่างที่ 10 #include<stdio.h> int main() { float x; do { printf("Input a positive value: "); scanf("%f", &x); } while(x < 0); printf("Your positive value is %.2f", x); return 0; }
รายวิชา ง30101 เทคโนโลยีสารสนเทศและการเขียนโปรแกรมขั้นตน
ตัวอย่างที่ 11 #include<stdio.h> int main() { int i, j, x=0; for(i=1;i<5;i++) { for(j=0;j<=i;j++) { x += (i+j); printf("%d ", x); } } printf("\nx = %d", x); return 0; }
ภาคเรียนที่ 1/2554