การทดลองที่ 9 Loops (วงวน) การทดลองที่ 9 Loops (วงวน)
summer solstice sol --- sun sistere --- still
ทบทวน วงวน while ตรวจสอบก่อนทำ do – while ตรวจสอบหลังจากทำไปแล้ว for ทำซ้ำด้วยจำนวนรอบที่กำหนด
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i i i 1
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i 1 i 1 i 2
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i 2 i 2 i 3
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i 3 i 3 i 4
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i 4 i 4 i 5
while ตรวจสอบก่อนทำ #include <stdio.h> void main() { int i = 0; Hello #include <stdio.h> void main() { int i = 0; while (i<5) { printf(“Hello\n”); i++; } i 5
do – while ตรวจสอบหลังจากทำไปแล้ว Hello #include <stdio.h> void main() { int i = 0; do { printf(“Hello\n”); i++; } while (i < 5); } i i 1 ? i 1
do – while ตรวจสอบหลังจากทำไปแล้ว Hello Hello #include <stdio.h> void main() { int i = 0; do { printf(“Hello\n”); i++; } while (i < 5); } i 1 i 2 ? i 2
do – while ตรวจสอบหลังจากทำไปแล้ว Hello Hello #include <stdio.h> void main() { int i = 0; do { printf(“Hello\n”); i++; } while (i < 5); } i 2 i 3 ? i 3
do – while ตรวจสอบหลังจากทำไปแล้ว Hello Hello #include <stdio.h> void main() { int i = 0; do { printf(“Hello\n”); i++; } while (i < 5); } i 3 i 4 ? i 4
do – while ตรวจสอบหลังจากทำไปแล้ว Hello Hello #include <stdio.h> void main() { int i = 0; do { printf(“Hello\n”); i++; } while (i < 5); } i 4 i 5 ? i 5
ทำซ้ำตามจำนวนรอบที่กำหนด for ทำซ้ำตามจำนวนรอบที่กำหนด
วงวนคำสั่ง for #include <stdio.h> void main() { int i; for (i = 0; i < 5; i++) { printf(“Hello\n”); } กำหนดค่าเริ่มต้น ทดสอบ เปลี่ยนแปลงค่า
วงวนคำสั่ง for for (i = 0; i < 5; i++) { printf(“Hello\n”); } i 1 i for (i = 0; i < 5; i++) { printf(“Hello\n”); } Hello true
วงวนคำสั่ง for for (i = 0; i < 5; i++) { printf(“Hello\n”); } i 2 i 1 for (i = 0; i < 5; i++) { printf(“Hello\n”); } Hello Hello true
วงวนคำสั่ง for for (i = 0; i < 5; i++) { printf(“Hello\n”); } i 3 i 2 for (i = 0; i < 5; i++) { printf(“Hello\n”); } Hello Hello true
วงวนคำสั่ง for for (i = 0; i < 5; i++) { printf(“Hello\n”); } i 4 i 3 for (i = 0; i < 5; i++) { printf(“Hello\n”); } Hello Hello true
วงวนคำสั่ง for for (i = 0; i < 5; i++) { printf(“Hello\n”); } i 5 i 4 false for (i = 0; i < 5; i++) { printf(“Hello\n”); } Hello Hello true
การบวกเลข 1 – 10 (while) i sum #include <stdio.h> void main() { int i = 1, sum = 0; while( i <= 10) { sum += i; i++; } printf(“sum of 1 – 10 : %d\n”, sum); i sum 1 0+1 2 0+1+2 3 0+1+2+3 4 0+1+2+3+4 5 0+1+2+3+4+5 6 0+1+2+3+4+5+6 7 0+1+2+3+4+5+6+7 8 0+1+2+3+4+5+6+7+8 9 0+1+2+3+4+5+6+7+8+9 10 0+1+2+3+4+5+6+7+8+9+10 11 sum of 1 – 10 : 55
การบวกเลข 1 – 10 (do - while) #include <stdio.h> void main() { int i = 1, sum = 0; do { sum += i; i++; } while (i <= 10); printf(“sum of 1 – 10 : %d\n”, sum); }
การบวกเลข 1 – 10 (for) #include <stdio.h> void main() { int i, sum = 0; for( i = 1; i <= 10; i++) sum += i; printf(“sum of 1 – 10 : %d\n”, sum); }
ถ้าเป็นการหาผลบวกเลขคี่ เปลี่ยนอย่างไร ??? หาผลบวกเลขคู่ #include <stdio.h> void main() { int i = 2, sum = 0; while( i <= 20) { sum += i; i += 2; } printf(“sum of even number 1 – 20 : %d\n”, sum); sum 0+2 +4 +6 +8 +10 +12 +14 +16 +18 +20 ถ้าเป็นการหาผลบวกเลขคี่ เปลี่ยนอย่างไร ???
หาผลบวกเลขคี่ #include <stdio.h> void main() { int i = 1, sum = 0; while( i <= 20) { sum += i; i += 2; } printf(“sum of odd number 1 – 20 : %d\n”, sum);
การรับ input ในวงวน #include <stdio.h> void main() { int n, i; float sum = 0; printf("How many numbers ? "); scanf("%d", &n); for (i = 1; i <= n; ++i) { printf("x = "); scanf("%f", &x); sum += x; } printf("\nSummary of Number is %f\n", sum); 5 How many numbers ? x = 10 x = 20 x = 30 x = 40 x = 50 Summary of Number is 150
หลักการใช้งาน คำสั่งใน body ของ loops อาจมีคำสั่งเดียวหรือหลายคำสั่ง ถ้ามีคำสั่งเดียว ไม่จำเป็นต้องมี block ถ้ามีหลายคำสั่ง ต้องมี block มีคำสั่งเดียว ไม่ต้องมี block มีหลายคำสั่ง ต้องมี block for (i = 0; i < 10; i++) printf(“Hello\n”); int c = 0; for (i = 0; i < 10; i++) { printf(“Hello\n”); c = c + 1; printf(“c = %d\n”, c); } คำสั่งเดียว มี block ก็ได้ for (i = 0; i < 10; i++) { printf(“Hello\n”); }
output คืออะไร int i; for (i = 0; i < 5; i++) { printf(“Hello\n”); Sawasdee int i; for (i = 0; i < 5; i++) { printf(“Hello\n”); printf(“Sawasdee\n”); }
ทำไมจึงได้ผลลัพธ์นี้ output คืออะไร ทำไมจึงได้ผลลัพธ์นี้ int i; for (i = 0; i < 5; i++) printf(“Hello\n”); printf(“Sawasdee\n”); Hello Sawasdee
? ? หลักการใช้งาน ระวัง อย่าใส่เครื่องหมาย “;” หลังวงเล็บคำสั่ง for for (i = 0; i < 10; i++) ; printf(“Hello\n”); ; ? Hello for (i = 0; i < 10; i++) ; { printf(“Hello\n”); printf(“Sawasdee\n”); } ; Hello Sawasdee ?
หลักการใช้งาน จำนวนรอบและผลลัพธ์การทำงาน ให้ดูค่าเริ่มต้น ค่าสุดท้าย และ ลำดับการทำงาน i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 i = 10 int i = 0; while (i < 10) { i++; printf(“i = %d\n”, i); }
หลักการใช้งาน จำนวนรอบและผลลัพธ์การทำงาน ให้ดูค่าเริ่มต้น ค่าสุดท้าย และ ลำดับการทำงาน i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 int i = 0; while (i < 10) { printf(“i = %d\n”, i); i++; }
หลักการใช้งาน ระวังเงื่อนไขที่เป็นจริงตลอด จะทำให้เกิด infinite loops int i = 1; while (i > 0) { printf(“i = %d\n”); i++; }
หลักการใช้งาน ระวังเงื่อนไขที่เป็นจริงตลอด จะทำให้เกิด infinite loops int i = 1; do { printf(“i = %d\n”); i += 2; } while ( i != 10);
หลักการใช้งาน ระวังเงื่อนไขที่เป็นจริงตลอด จะทำให้เกิด infinite loops int i, n = 0; for ( i = 1; i > n; i++ ) { printf(“i = %d\n”, i) }
break เป็นคำสั่งหยุดการทำงานในวงวน และกระโดดออกจากวงวน for () { …. }
break เป็นคำสั่งหยุดการทำงานในวงวน และกระโดดออกจากวงวน int i; for (i = 0; i < 10; i++) { printf(“Korat\n”); if (i > 3) { break; } printf(“Bangkok\n”); Korat Bangkok
break เป็นคำสั่งหยุดการทำงานในวงวน และกระโดดออกจากวงวน int i = 0; while (i < 10) { printf(“Korat\n”); if (i > 3) { break; } printf(“Bangkok\n”); i++; Korat Bangkok
break ผลลัพธ์คืออะไร ? int i = 0; while (i < 10) { printf(“Korat\n”); i++; if (i > 3) { break; } printf(“Bangkok\n”); Korat Bangkok
break บวกเลข 1 ถึงเท่าไร ? int i = 1, sum = 0; while (i <= 10) { sum += i; if (i > 4) { break; } i++; printf(“sum = %d\n”, sum); 0 + 1 + 2 + 3 + 4 +5 sum = 15
break บวกเลข 1 ถึงเท่าไร ? int i = 1, sum = 0; while (i <= 10) { sum += i; i++; if (i > 4) { break; } printf(“sum = %d\n”, sum); 0 + 1 + 2 + 3 + 4 sum = 10
break บวกเลข 2 + 4 + … ? int i = 2, sum = 0; do { sum += i; if (i > 8) { break; } i += 2; } while (i <= 20); printf(“sum = %d\n”, sum); 2 + 4 + 6 + 8 + 10 sum = 30
break บวกเลข 2 + 4 + … ? int i = 2, sum = 0; do { sum += i; i += 2; if (i > 8) { break; } } while (i <= 20); printf(“sum = %d\n”, sum); 2 + 4 + 6 + 8 sum = 20
continue เป็นคำสั่งย้อนกลับไปตรวจสอบเงื่อนไข ถ้าจริง ให้ทำซ้ำ ถ้าเท็จ ออกจากวงวน for () { … continue; }
continue เป็นคำสั่งย้อนกลับไปตรวจสอบเงื่อนไข ถ้าจริง ให้ทำซ้ำ ถ้าเท็จ ออกจากวงวน int i; for (i = 0; i < 5; i++) { printf(“Korat\n”); if (i > 2) { continue; } printf(“Bangkok\n”); i = 0 Korat Bangkok i = 1 Korat Bangkok i = 2 Korat Bangkok i = 3 Korat i = 4 Korat
continue ผลลัพธ์คืออะไร ? int i = 0; while (i < 5) { printf(“Korat\n”); if (i > 2) { continue; } printf(“Bangkok\n”); i++; i = 0 Korat Bangkok i = 1 Korat Bangkok i = 2 Korat Bangkok i = 3 Korat infinite loops
continue ผลลัพธ์คืออะไร ? int i = 0; while (i < 5) { printf(“Korat\n”); i++; if (i > 2) { continue; } printf(“Bangkok\n”); i = 0 Korat i = 1 Bangkok i = 1 Korat i = 2 Bangkok i = 2 Korat i = 3 Korat i = 4 Korat
continue ผลลัพธ์คืออะไร ? int i = 0; do{ printf(“Korat\n”); i++; if (i > 2) { continue; } printf(“Bangkok\n”); } while (i < 5); i = 0 Korat i = 1 Bangkok i = 1 Korat i = 2 Bangkok i = 2 Korat i = 3 Korat i = 4 Korat
continue ผลลัพธ์คืออะไร ? infinite loops int i = 0; do{ printf(“Korat\n”); if (i > 2) { continue; } i++; printf(“Bangkok\n”); } while (i < 5); i = 0 Korat i = 1 Bangkok i = 1 Korat i = 2 Bangkok i = 2 Korat i = 3 Bangkok i = 3 Korat i = 3 Korat i = 3 Korat infinite loops
วงวนซ้อนใน (nested loops) เป็นคำสั่งสร้างวงวน ซ้อนกันสองชั้นขึ้นไป for () { คำสั่งในวงวนชั้นนอก for () { คำสั่งในวงวนชั้นใน }
วงวนซ้อนใน (nested loops) จำนวนรอบของการทำงานในวงวนชั้นใน เท่ากับจำนวนรอบของวงวนชั้นนอก คูณกับจำนวนรอบวงวนชั้นใน for (3 รอบ) { คำสั่งในวงวนชั้นนอก ทำงาน 3 รอบ } for (5 รอบ) { คำสั่งในวงวนชั้นใน ทำงาน 15 รอบ }
ตัวอย่าง int i, j; for (i = 0; i < 3; i++) { 3 รอบ 5 รอบ int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { printf(“Bangkok\n”); } Bangkok ถูกพิมพ์ 15 แถว
ตัวอย่าง int i, j; for (i = 0; i < 2; i++) { printf(“Korat\n”); for (j = 0; j < 3; j++) { printf(“Bangkok\n”); } Korat Bangkok
ตัวอย่าง int i, j; for (i = 0; i < 3; i++) { printf(“Korat\n”); for (j = 0; j < 3; j++) { printf(“Bangkok\n”); } Korat Bangkok
ผลลัพธ์คืออะไร int i = 0; j = 0; while (i<3) { printf(“January”); while(j < 3) { printf(“February”); j++; } i++; January February
ผลลัพธ์คืออะไร int i = 0; j = 0; while (i<3) { printf(“January”); while(j < 3) { printf(“February”); j++; } printf(“March”); i++; January February March
ปฏิบัติการ การทดลองที่ 8 ข้อ 5 – 6 การทดลองที่ 9
ไปทำ lab กันเถอะ