การทดลองที่ 9 Loops (วงวน)

Download Report

Transcript การทดลองที่ 9 Loops (วงวน)

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