Iteration Statement
การเขยนโปรแกรมคาสงวนซา
โครงสรางการเขยนโปรแกรมแบบวนซา (Iteration)
โครงสรางการเขยนโปรแกรมแบบวนซา (Iteration) หรอ เรยกสน ๆ วา Loop มจดประสงคเพอใหโปรแกรมวนทางานตามคาสงหรอกลมของคาสงซาๆ ตามจานวนรอบทตองการ หรอวนทางานจนกวาเงอนไขทกาหนดไวจะเปนเทจ จงจะสามารถหลดออกจากรอบการทางานวนซานนได การทจะใหทางานในชดคาสงเดมซากรอบนน ขนอยกบเงอนไขทกาหนดขน ซงบางโปรแกรมอาจกาหนดรอบการทางานแนนอน วาใหวนซากรอบ บางโปรแกรมกาหนดรอบตายตวไมได วาจะใหทาซากรอบ แตขนอยกบเงอนไขทตรวจสอบเปนสาคญ
คาสงวนซา (Iteration) ในภาษา C
แบงเปน 3 คาสง ดงนfor statementwhile statementDo …while statement
คาสง for คาสง for เหมาะสาหรบกรณทรจานวนรอบการทางานวนซาทแนนอน รปแบบคาสง for มดงน
ตวอยาง พมพเลข 1 - 10
for(กาหนดคาเรมตนใหตวแปรนบรอบ; นพจนเงอนไขทตรวจสอบ; ปรบคารอบการทางานของตวแปรนบรอบ){ คาสงทใหทางานซา}
for(int i=1; i <= 10 ; i++){ printf(‚%d\n‛ , i); }
//กาหนดคาเรมตนใหตวแปร i = 1 ; ตรวจสอบเงอนไข i <= 10;เพมคาใหตวแปร i รอบละ 1//แตละรอบการทางาน พมพคาจากตวแปร i
ลกษณะการทางานของคาสง for การทางานของ loop จะเรมจากคาเรมตนทกาหนด จานวนรอบการทางาน ขนอยกบนพจนเงอนไขทตงไว การปรบคาตวนบรอบของ loop สงผลตอจานวนรอบททางาน ตวอยาง
for (i=1; i <= 10; i++) { …. }
ตวนบรอบ(i) เรมตนท 1 เงอนไขการทางาน เมอคาของ i ยงมคานอยกวาหรอเทากบ 10ปรบคาตวนบรอบเพมขนรอบละ 1 คา
ลกษณะการทางานของคาสง for ตวอยาง
for (count=1; i <= 100; i += 2) { …. }
ตวนบรอบ(count)เรมตนท 1 เงอนไขการทางาน เมอคาของ count ยงมคานอยกวาหรอเทากบ 100ปรบคาตวนบรอบเพมขนรอบละ 2 คา
for (count=100; i >= 0; i--) { …. }
ตวนบรอบ(count)เรมตนท 100 เงอนไขการทางาน เมอคาของ count ยงมคามากกวาหรอเทากบ 0ปรบคาตวนบรอบลดลงรอบละ 1 คา
ลกษณะการทางานของคาสง for ชนดขอมลของตวแปรนบรอบ กาหนดเปน จานวนเตม หรอ อกขระเดยวเทานน สามารถประกาศตวแปรของตวนบรอบในคาสง for ได เชน
for (char letter = ‘A’; letter <= ‘Z’ ; letter++) { …. }
ประกาศตวนบรอบ(letter) เปนชนดขอมล char กาหนดคาเรมตนเปน A เงอนไขการทางาน เมอคาของ letter ยงมคานอยกวาหรอเทากบ Zปรบคาตวนบรอบเพมขนรอบละ 1 คา
ตวอยาง for (1) จงเขยนโปรแกรมหาผลรวมของเลขจานวนเตมตง 1 ถง 10
ผลลพธ
START
i =1 ,i <= 10 ,
i++
แสดง sum
STOP
sum= 0
sum= sum + i
ตวอยาง for (2) จงเขยนโปรแกรมเพอคานวณคาแฟกทอเรยล
(Factorials) n หรอ n! เมอคา n คอเลขจานวนเตมทรบจากผใช
START
i =1 ,i <= n ,
i++
แสดง n ,fac
STOP
fac= 1
fac= fac * i
รบคา n
ตวอยาง for (3) จงเขยนโปรแกรมแสดงสตรคณ 12 บรรทด โดยรบแมสตรคณทตองการจากผใช
START
i =1 ,i <= 12 ,
i++
แสดง n , i , n*i
STOP
รบคา n
ผลลพธ
ตวอยาง for (4) จงเขยนโปรแกรมพมพเครองหมาย * เปนรปสเหลยม โดยรบจานวนแถวและ
จานวนคอลมนจากผใช START
i =1 , i <= row ,i++
แสดง ‚ * ‛
i
STOP
รบคา row , col
j =1 , j <= col ,j++
แสดง บรรทดวาง
j
ผลลพธ
ตวอยาง for (5) จงเขยนโปรแกรมหาคะแนนสงสดและ
คะแนนเฉลยของนกศกษาหองหนง โดยรบคาจานวนนกศกษาทงหมด และรบคะแนนสอบของนกศกษาแตละคน
START
รบคา num
max = 0 , sum = 0
i =1 , i <= num ,i++
รบคา score
score > max
max = score
avg = sum / num
sum = sum+score
แสดง max , avg
STOP
False
True
ตวอยาง for (5)
คาสง while คาสง while เปนคาสงทางานซา โดยจะตรวจสอบเงอนไขกอนจะใหไปทางานในคาสงทาซา ถาเงอนไขทตรวจสอบใหผลเปนจรง จะใหไปทางานในคาสงหรอกลมคาสงทาซา 1 รอบ แลวกลบมาตรวจสอบเงอนไขอกครง ถาเงอนไขทตรวจสอบใหผลเปนเทจ จะออกจากคาสง while ทนท รปแบบคาสง while ดงน
while (เงอนไขทตรวจสอบ){ คาสงทใหทางานซา}
ลกษณะการทางานของคาสง while สามารถใชคาสง while กบการทางานซาทไมรรอบการทางานทแนนอน การจะทางานในคาสงทาซากรอบนน ขนอยกบเงอนไขทกาหนดในคาสง while ในกรณทใชคาสง while กบการทางานซาทกาหนดรอบไวลวงหนา มกจะตองกาหนดตวแปรทใชในการนบรอบการทางานคลายกบคาสง for แตในคาสงทาซาภายใน loop while ตองมคาสง ปรบคาตวนบรอบการทาซาดวย
ลกษณะการทางานของคาสง while เชนint count = 1;while (count <= 10){
printf(‚%d\n‛ , count) ;count++;
}
กาหนดคาเรมตนใหตวแปรนบรอบ(count) มคาเทากบ 1 เงอนไขการตรวจสอบ กอนทางานซา คอ ตวแปร count มคานอยกวาหรอเทากบ 10ถาเงอนไข เปนจรง เขาไปทางานใน loopถาเงอนไข เปนเทจ ออกจาก loop
คาสงใน loop
ลกษณะการทางานของคาสง while เชนint num;scanf(‚%d‛ , &num);while (num > 0){
printf(‚%d\n‛ , num) ;scanf(‚%d‛ , &num);
}
รบคาตวเลขจากผใชใสตวแปร numเงอนไขการตรวจสอบ กอนทางานซา คอ ตวแปร num มคามากกวา 0ถาเงอนไข เปนจรง เขาไปทางานใน loopถาเงอนไข เปนเทจ ออกจาก loop
คาสงใน loop
ตวอยาง while (1) จงเขยนโปรแกรมหาผลรวมของเลขจานวนเตมตง 1 ถง 10
ผลลพธ
//กาหนดคาเรมตน
//ตรวจสอบเงอนไข
//เพมคาใหตวนบรอบ
START
แสดง sum
STOP
sum= 0i = 1
sum= sum + i
i <= 10
i = i +1
False
True
ตวอยาง while (2) จงเขยนโปรแกรมเพอคานวณคาแฟกทอเรยล
(Factorials) n หรอ n! เมอคา n คอเลขจานวนเตมทรบจากผใช
START
แสดง n , fac
STOP
fac = 1 i = 1
fac = fac * i
i <= n
i = i +1
False
True
รบคา n//กาหนดคาเรมตน
//ตรวจสอบเงอนไข
//เพมคาใหตวนบรอบ
ตวอยาง while (3) จงเขยนโปรแกรมแสดงสตรคณ 12 บรรทด โดยรบแมสตรคณทตองการจากผใช
ผลลพธ
//กาหนดคาเรมตน
//ตรวจสอบเงอนไข
//เพมคาใหตวนบรอบ
START
STOP
i <= 12 False
True
รบคา n
แสดง n , i , n*i
i = i +1
i = 1
ตวอยาง while (4) จงเขยนโปรแกรมพมพ
เครองหมาย * เปนรปสเหลยม โดยรบจานวนแถวและจานวนคอลมนจากผใช
START
รบคา row , col
i <= row
i = 1
j = 1
j <= col
แสดง ‚ * ‛
j = j + 1
แสดง บรรทดวาง
i = i + 1
False
True
False
TrueSTOP
ตวอยาง while (4)
//กาหนดคาเรมตน ตวแปรนบ loop นอก
//ตรวจสอบเงอนไข loop นอก
//ประกาศและกาหนดคาเรมตน ตวแปรนบ loop ใน
//ตรวจสอบเงอนไข loop ใน
//เพมคาใหตวนบรอบ loop นอก
//เพมคาใหตวนบรอบ loop ใน
ตวอยาง while (5) จงเขยนโปรแกรมหาคะแนนสงสดและ
คะแนนเฉลยของนกศกษาหองหนง โดยรบคาจานวนนกศกษาทงหมด และรบคะแนนสอบของนกศกษาแตละคน
START
รบคา num
max = 0 , sum = 0
รบคา score
score > max
max = score
avg = sum / num
sum = sum+score
แสดง max , avg
STOP
False
True
i <= num
i = 1
i = i + 1
True
False
ตวอยาง while (5)
ตวอยาง while (6)จงเขยนโปรแกรมเพอแจกแจงความถของอายสมาชกชมลลาศ ดงน
อายตากวา 20 , 21 – 30 , 31 – 40 , 41 – 50 , 51 – 60 และ มากกวา 60 ป
โดยรบอายของสมาชกแตละคน จากผใช ถารบอายตากวา 1 ป หรอ มากกวา 150 ป โปรแกรมจะหยดทางาน
กาหนดตวแปรทใชage = อายของสมาชกแตละคนn1 = จานวนสมาชกทมอายตากวา 20 ปn2 = จานวนสมาชกทมอาย 21 – 30 ปn3 = จานวนสมาชกทมอาย 31 – 40 ปn4 = จานวนสมาชกทมอาย 41 – 50 ปn5 = จานวนสมาชกทมอาย 51 – 60 ปn6 = จานวนสมาชกทมอายมากกวา 60 ป
START
รบคา age
n1=0 , n2 =0 , n3 = 0n4 =0 , n5 =, n6 = 0
age>=1 และ age<=150
age <= 20 n1 = n1 + 1
age>=21 และ age<=30 n2= n2 + 1
age>=31 และ age<=40 n3= n3 + 1
age>=41 และ age<=50 n4= n4 + 1
age>=51 และ age<=60 n5= n5+ 1
n6= n6+ 1
รบคา age
แสดง n1 , n2 , n3 , n4 , n5 , n6
STOP
True True
True
True
True
True
False
False
False
False
False
False
ตวอยาง while (6)
มตอหนาตอไป
ตวอยาง while (6)
จงเขยนโปรแกรมเพอจาแนกเพศของสมาชกชมลลาศ โดยรบขอมลเพศของสมาชกแตละคนจากผใช ถาเปนเพศชาย ใหปอน M ถาเปนเพศหญง ใหปอน F ถาปอนขอมลเพศ นอกเหนอจากคา M หรอ F โปรแกรมจะหยดรบคาและแสดงขอมลสรปจานวนเพศของสมาชกชมรม
ตวแปรทใชในการประมวลผลsex แทน เพศ
num แทน จานวนสมาชกทงหมด male แทน จานวนสมาชกเพศชาย
female แทน จานวนสมาชกเพศหญง
29
ตวอยาง while (7)
START
รบคา sex
num = 0male = 0
female = 0
sex = ‘M’ หรอ sex = ‘F’
num = num + 1
sex = ‘M’
male = male + 1 female = female + 1
TrueFalseTrue
รบคา sex
แสดง num , male , female
STOP
False
30
ตวอยาง while (7)
31
ตวอยาง while (6)
ตวอยางผลลพธ
32
ตวอยาง while (7)
จงเขยนโปรแกรมคานวณคาแรงของพนกงาน โดยใหรบชอพนกงาน รหสการทางาน จานวนชม.การทางาน โดยกาหนดอตราคาแรง/ชม. ตามเงอนไข ตอไปน ถารหสการทางาน A กาหนดให อตราคาแรง 500 บาท/ชม. ถารหสการทางาน B กาหนดให อตราคาแรง 400 บาท/ชม. ถารหสการทางาน C กาหนดให อตราคาแรง 300 บาท/ชม. ถารหสการทางาน D กาหนดให อตราคาแรง 200 บาท/ชม.
ใหแสดงคาแรงทพนกงานไดรบ ใหวนทางานซา จนกวาจะตองการเลกทางาน จงใหโปรแกรมหยดการรบขอมลและแสดงคาแรงรวมทตองจายใหพนกทกคน
33
ตวอยาง while (8)
ตวอยาง while (8)START
sumPay = 0answer = y
answer = y
รบคา emp_name , code , hr
code
rate = 500 rate = 400 rate = 300 rate = 200 rate = 0
แสดง ‚Invalid code‛
pay = rate * hr
แสดง emp_name , code , hr , rate , pay
‘A’ ‘B’ ‘C’ ‘D’ อน ๆ
1
2True
False
3
ตวอยาง while (8)1
sumPay = sumPay + pay
รบคา answer
แสดง ‚ทางานตอ ใชหรอไม ?‛2
3
แสดง sumPay
STOP
ตวอยาง while (8)
ตวอยาง while (8)
คาสง do{ … }while คาสง do…while เปนคาสงทางานซา โดยจะใหทางานในคาสงหรอกลมคาสงทาซากอน 1 รอบ แลวจงคอยตรวจสอบเงอนไขวาจะใหทางานซาอหรอไม ถาเงอนไขทตรวจสอบใหผลเปนจรง จะใหไปทางานในคาสงหรอกลมคาสงทาซา 1 รอบ แลวกลบมาตรวจสอบเงอนไขอกครง ถาเงอนไขทตรวจสอบใหผลเปนเทจ จะออกจากคาสง do…while ทนท รปแบบคาสง do…while ดงน
do { คาสงทใหทางานซา }while (เงอนไขทตรวจสอบ) ;
ลกษณะการทางานของคาสง do…while สามารถใชคาสง do…while กบการทางานซาทไมรรอบการทางานทแนนอน เชนเดยวกบ คาสง while การจะทางานในคาสงทาซากรอบนน ขนอยกบเงอนไขทกาหนดในคาสง while ในกรณทใชคาสง do…while กบการทางานซาทกาหนดรอบไวลวงหนา มกจะตองกาหนดตวแปรทใชในการนบรอบการทางานคลายกบคาสง for และ while แตในคาสงทาซาภายใน loop do…while ตองมคาสง ปรบคาตวนบรอบการทาซาดวย
ลกษณะการทางานของคาสง do…while เชน
int count = 1;do {
printf(‚%d\n‛ , count) ;count++;
} while (count <= 10) ;
กาหนดคาเรมตนใหตวแปรนบรอบ(count) มคาเทากบ 1 เรมตนทางานใน loopเงอนไขการตรวจสอบ กอนทางานซา คอ ตวแปร count มคานอยกวาหรอเทากบ 10ถาเงอนไข เปนจรง กลบเขาไปทางานใน loop อกถาเงอนไข เปนเทจ ออกจาก loop
คาสงใน loop
ลกษณะการทางานของคาสง do…while เชน
int num;do{
scanf(‚%d‛ , &num);printf(‚%d\n‛ , num) ;
} while (num > 0) ;
เรมตน loopรบคาตวเลขจากผใชใสตวแปร numเงอนไขการตรวจสอบ กอนทางานซา คอ ตวแปร num มคามากกวา 0ถาเงอนไข เปนจรง เขาไปทางานใน loopถาเงอนไข เปนเทจ ออกจาก loop
คาสงใน loop
ตวอยาง do…while (1) จงเขยนโปรแกรมหาผลรวมของเลขจานวนเตมตง 1 ถง 10
ผลลพธ
//กาหนดคาเรมตน
//ตรวจสอบเงอนไข//เพมคาใหตวนบรอบ
START
แสดง sum
STOP
sum= 0i = 1
sum= sum + i
i <= 10
i = i +1
False
True
ตวอยาง do…while (2) จงเขยนโปรแกรมเพอคานวณคาแฟกทอเรยล
(Factorials) n หรอ n! เมอคา n คอเลขจานวนเตมทรบจากผใช
START
แสดง n , fac
STOP
fac = 1 i = 1
fac = fac * i
i <= n
i = i +1
False
True
รบคา n
//กาหนดคาเรมตน
//ตรวจสอบเงอนไข//เพมคาใหตวนบรอบ
ตวอยาง do…while (3) จงเขยนโปรแกรมแสดงสตรคณ 12 บรรทด โดยรบแมสตรคณทตองการจากผใช
ผลลพธ
//กาหนดคาเรมตน
//ตรวจสอบเงอนไข//เพมคาใหตวนบรอบ
START
STOP
i <= 12False
True
รบคา n
แสดง n , i , n*i
i = i +1
i = 1
ตวอยาง do…while (4) จงเขยนโปรแกรมพมพ
เครองหมาย * เปนรปสเหลยม โดยรบจานวนแถวและจานวนคอลมนจากผใช
START
รบคา row , col
i <= row
i = 1
j = 1
j <= col
แสดง ‚ * ‛
j = j + 1
แสดง บรรทดวาง
i = i + 1
False
True
False
True
STOP
ตวอยาง do…while (4)
ตวอยาง do…while (5) จงเขยนโปรแกรมหาคะแนนสงสดและ
คะแนนเฉลยของนกศกษาหองหนง โดยรบคาจานวนนกศกษาทงหมด และรบคะแนนสอบของนกศกษาแตละคน
START
รบคา num
max = 0 , sum = 0
รบคา score
score > max
max = score
avg = sum / num sum = sum+score
แสดง max , avg
STOPFalse
True
i <= num
i = 1
i = i + 1
True
False
A
A
ตวอยาง do…while (5)
คาสง Break คาสง break จะหยดการทางานใน loop และทางานในคาสงตอไปทอยนอก loop
Ex. วนลปพมพคา 1-10 แตถาตวนบรอบมคา 5 ใหหยดการทางาน
คาสง continued คาสง continue จะหยดการทางานของ loop รอบปจจบน และไปทางานไปทางานใน loop รอบตอไป
Ex. วนลปพมพคา 1-10 แตถาตวนบรอบมคา 5 ใหขามการทางานรอบนน