บทที่ 7 การทำาซ้ำ้า
7.1 การทำาซ้ำ้าโดยการใช้ While-do7.2 การทำาซ้ำ้าโดยใช้ For7.3 การทำาซ้ำ้าโดยการใช้ Do-Until
Copyright (c) 2006 by Sasalak Tongkaw2
COMPUTER PROGRAMMING AND ALGORITHM
การทำาซ้ำ้า
หมายถึง การทำาอะไรซ้ำ้าๆ หรือคำานวณซ้ำ้า โดยการใช้ วงวน (looping) การทำาซ้ำ้าจะเกิดข้ึนเรื่อยๆ จนกว่าจะครบกำาหนดการทำาซ้ำ้าเกิดข้ึนบ่อยๆ ในชีวิตประจำาวัน เช่น การวนรับรหัสผ่าน จนกว่าจะใส่รหสัผ่านถูกต้อง หรือไมเ่กิน 3 ครั้ง, การวนรับรหสับัตรเติมเงินของบริการโทรศัพท ์ไมเ่กิน 3 ครั้ง จนกว่าจะใสร่หสับัตรเติมเงินถกูต้อง เป็นต้น
Copyright (c) 2006 by Sasalak Tongkaw3
COMPUTER PROGRAMMING AND ALGORITHM
ตัวอยา่ง ผังงานที่มีวงวน
EOFEOF
StartStart
Yes
HouseKeepHouseKeep
StopStop
No
Main loopMain loop
Finish upFinish up
Copyright (c) 2006 by Sasalak Tongkaw4
COMPUTER PROGRAMMING AND ALGORITHM
ชนิดของการทำาซ้ำ้า
การทำาซ้ำ้าม ี2 ลักษณะ คือแบบใช้เงื่อนไขเป็นตัวตัดสินใจว่าจะทำาซ้ำ้าต่อไปหรือไม่ ต้องการให้โปรแกรมทำาไปเรื่อยๆ ในขณะที่เงื่อนไขยงัเป็นจริง อยู ่เช่น ให้รับรหสัผ่านไปเรื่อยๆ จนกว่าจะใส่ถูก ซ้ึ่งจะไมม่จีำานวนรอบที่แน่นอนตายตัว ลักษณะนีจ้ะม ี2 คำาสั่งคือ do..while และ while...แบบมจีำานวนรอบทีแ่นน่อน เช่น ต้องการให้พมิพ์ตัวอักษร a จำานวน 1000 ครั้งข้ึนบนหนา้จอ แบบนีจ้ะใช้ คำาสั่ง for
Copyright (c) 2006 by Sasalak Tongkaw5
COMPUTER PROGRAMMING AND ALGORITHM
การทำาซ้ำ้าแบบ While-Do และ Do-While
คำาสั่ง while และ do..while จะต่างจากคำาสัง่ forเล็กนอ้ยตรงที่การทำาซ้ำ้าแบบนี ้ไมจ่ำาเป็นต้องบอกถึงจำานวนรอบของการทำาซ้ำ้า แต่ละทำาซ้ำ้าไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็นเทจ็
รูปแบบคำาสั่ง while คือWhile (เงื่อนไข){
คำาสั่งหรือกลุ่มคำาสั่งทีต่้องการให้ทำาซ้ำ้า
}
Copyright (c) 2006 by Sasalak Tongkaw6
COMPUTER PROGRAMMING AND ALGORITHM
ตัวแปร Counter
เป็นตัวแปรทีใ่ช้สำาหรับการเพิม่ค่าเพื่อกำาหนดการหยุดของวงวน หากเป็นค่าสุดทา้ยจะเรียกว่า ลิมติ (limit) หรือค่าเซ้นทเินล (sentinel)
Copyright (c) 2006 by Sasalak Tongkaw7
COMPUTER PROGRAMMING AND ALGORITHM
ตัวอยา่ง ขั้นตอนสำาคญัของวงวนหลัก 4 ขั้นตอน
Label-Counter=100?
YES
NO
Main-Loop
Return
ReadEmployees
WriteLabel-Line,In-Name
Add 1 ToLabel-Counter
Label-Counter= 0
1
5
432
Copyright (c) 2006 by Sasalak Tongkaw8
COMPUTER PROGRAMMING AND ALGORITHM
ตัวอยา่งโปรแกรม Whilevoid main(){ void housekeep(); // เรียกฟังกช์ั่นย่อย housekeep() while(EOF!=null) { // ตรวจสอบว่าสิ้นสุดไฟล์หรือไม่
/* main-loop */ int Lable-Counter=0; // กำาหนดค่าเริ่มต้นให้ตัว
นับ while(Lable-Counter<=100) { // ทำาในขณะที่ Label-
Counter // น้อยกว่าหรือเท่ากับ 100
printf(“Lable-Line”); // ถา้ไม่เง่ือนไขเป็นจริง จะทำาในลูป
printf(“In-name”); Lable-Counter++; // เพิ่มค่าให้ตัวนับ } // Read Employees // อ่านระเบียนใหม่} void finishedup(); // เรียกฟังก์ชั่นยอ่ย finishedup()
Copyright (c) 2006 by Sasalak Tongkaw9
COMPUTER PROGRAMMING AND ALGORITHM
while.c
#include<stdio.h>Void main(){
int count=1;while(count<=10){
printf(“Hello %d\n”,count);count++;
}}
จากตัวอย่างเรากำาหนดให้ count มีค่า เป็น 1 จากน้ันใช้คำาสั่ง while ตรวจดูค่าของ count ว่ายังน้อยกว่าหรือเท่ากับ 10 หรือไม่ ถ้าใช่กย็ังทำาคำาสั่งภายใน{} ต่อไป และเพิ่มค่า count ทีละ 1 ไปเรื่อยๆ จนกว่าค่า count จะมากกว่า 10 ทำาให้เงื่อนไขเป็นเท็จก็จะหลดุจากลูป while
แบบฝึกหัด 1 จงเขียนผลรันทีไ่ด้จากการรันโปรแกรมนี้
แบบฝึกหัด 1 จงเขียนผลรันทีไ่ด้จากการรันโปรแกรมนี้
Copyright (c) 2006 by Sasalak Tongkaw10
COMPUTER PROGRAMMING AND ALGORITHM
dowhile.c#include<stdio.h>void main(){
char out;do{
printf(“\n Do you what to exit ?[Y]es or [N]o :”);scanf(“%c”,&out);
}while(out!=‘y’);}
• ก่อนเข้าสู่การตรวจสอบเงื่อนไข(out!=y) ครั้งแรกนัน้จะมกีารทำาคำาสั่งใน {} กอ่น ดังนัน้ do..while จึงทำาคำาสัง่ภายใน {} อยา่งนอ้ย 1 ครั้งเสมอ และถา้ตรวจสอบแล้วเงื่อนไขยังจริงอยูก่็จะวนมาทำาคำาสั่งภายใน {} อีกครั้ง
แบบฝึกหัด 2 จงเขียนผลรันทีไ่ด้จากการรันโปรแกรมนี้
แบบฝึกหดั 2 จงเขียนผลรันทีไ่ด้จากการรันโปรแกรมนี้
Copyright (c) 2006 by Sasalak Tongkaw11
COMPUTER PROGRAMMING AND ALGORITHM
for
ใช้ในกรณีทีเ่ราต้องการทำาซ้ำ้าโดยทราบจำานวนครั้งทีแ่นน่อน เช่น 20 ครั้ง 30 ครั้ง การใช้งานจะกำาหนดลงไปเลยว่าต้องการให้ทำากี่ครั้ง และจะต้องสร้างตัวแปร ข้ึนมาเป็นตัวนบั (counter) โดยมากจะกำาหนดให้เป็นตัวแปรแบบจำานวนเต็ม (integer) ตัวนบัจะเป็นตัวคอยบอกว่าครบตามจำานวนทีต่้องการรึยงั ถ้ายงัไม่ครบก็จะวนไปเรื่อยๆ จนกว่าจะครบ
Copyright (c) 2006 by Sasalak Tongkaw12
COMPUTER PROGRAMMING AND ALGORITHM
รูปแบบ ของ for
for( คา่เร ิ่มต ้นของต ัวนบั เชน่ 0;เปร ียบเท ียบต ัวนบัว ่าย ังอย ู่ในชว่งน ีห้ร ือไม ่;
จ ำานวนนับเพ ิ่มท ีละเท ่าไรหร ือลดทีละเท ่าไร)
{คำาส ัง่ท ี่ต ้องการให้ท ำา
}
Copyright (c) 2006 by Sasalak Tongkaw13
COMPUTER PROGRAMMING AND ALGORITHM
โปรแกรม for1.c#include<stdio.h>Void main(){
int count;printf(“Begin\n”);
for(count=0;count<10;count++)printf(“Hello\n”);
printf(“End\n”);}
เร ิ่มต ้นให้ count=0
ทำำในขณะที่ count<10
เพ ิ่มค ่ำ count ทีละ 1count=count+1
Copyright (c) 2006 by Sasalak Tongkaw14
COMPUTER PROGRAMMING AND ALGORITHM
ผลรันโปรแกรมBeginHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloEnd
• คำำว่ำ Hello จะถกูแสดงท้ังหมด 10 ครั้ง โดยท่ีตวัแปร count คือตวัแปรท่ีใช้เป็นตัวนับ เรำให้ค่ำเริ่มตน้เป็น 1 และจะเพิ่มค่ำขึ้นทีละ 1 ไปเรื่อยๆ ในขณะท่ีตวัแปร count ยังน้อยกว่ำ 10 แตถ่้ำตวัแปร count เท่ำกับ 10 เมื่อไร ่เงื่อนไขจะเป็นเท็จ โปรแกรมก็จะหลุดออกจำกคำำสัง่ for ทันที
Copyright (c) 2006 by Sasalak Tongkaw15
COMPUTER PROGRAMMING AND ALGORITHM
โปรแกรม สตูรคณู#include<stdio.h>Void main(){
int mother=6;int count;printf(“Begin\n”);for (count =1;count<=12;count++){
pintf(“%d x %d = %d\n”,mother,count,mother *count);}printf(“End\n”);
}
แบบฝึกหดั 3 จงเขียนผลรันที่ได้จำกกำรรันโปรแกรมนี้
แบบฝึกหดั 3 จงเขียนผลรันทีไ่ด้จำกกำรรันโปรแกรมนี้