การทำซ้ำ

 
Home

การทำซ้ำ
ความหมายของการทำซ้ำ
การทำซ้ำหรือการวนรอบ (loop) หมายถึง การกำหนดเงื่อนไขเพื่อให้โปรแกรมทำงานใน
statement หรือ กลุ่มของ statement เดิมซ้ำๆ 1 ครั้งหรือมากกว่า โดยจำนวนครั้งของการทำงานจะเป็นไป
ตามเงื่อนไขที่กำหนดไว้ มีประโยชน์อย่างยิ่งทำให้การเขียนโปรแกรมยืดหยุ่นและสะดวก การเขียน
โปรแกรมมีประสิทธิภาพด้วยคำสั่งกำหนดให้มีการทำซ้ำหรือวนรอบ
ใน C++ มี statement เพื่อสั่งให้โปรแกรมมีการทำงานแบบทำซ้ำ คือ for, while และ do…
while ซึ่งจะกล่าวถึงรายละเอียดต่อไป

การทำซ้ำโดยใช้คำสั่ง for
ลูป for จะเริ่มด้วยการนำค่าเริ่มต้นเปรียบเทียบกับเงื่อนไขที่กำหนดไว้ ถ้าเงื่อนไข เป็นจริง จะทำ statement ในลูป ถ้า เป็นเท็จ จะเลิกทำงานในลูป กรณีเมื่อตรวจสอบเงื่อนไขแล้วเป็นจริงเมื่อทำงานใน ลูปแล้ว ก็จะเพิ่มหรือลดค่าตัวแปรในเงื่อนไขอีก 1 หรือมากกว่าตามที่กำหนดไว้โดยอัตโนมัติ แล้วตรวจ สอบเงื่อนไขอีกครั้ง ถ้าเงื่อนไข เป็นเท็จ จะเลิกทำซ้ำในลูป มีรูปแบบ statement ดังนี้
1. ลูป for ที่มี statement เดียว มีรูปแบบ ดังนี้
for (ตัวแปรและค่าเริ่มต้น; เงื่อนไขเปรียบเทียบ; เพิ่มหรือลดค่าตัวแปร)
statement;
2. ลูป for ที่มีหลาย statement มีรูปแบบ ดังนี้
for (ตัวแปรและค่าเริ่มต้น; เงื่อนไขเปรียบเทียบ; เพิ่มหรือลดค่าตัวแปร)
{ statement;
statement;
statement;
}
3. ลูป for ซ้อนกัน หมายถึง มีการใช้ statement ของ for อีกในขณะมีการสั่งทำซ้ำด้วย for ไว้ แล้ว โปรแกรมจะดำเนินการทำซ้ำในลูป โดยแต่ละรอบของลูปนอก จะต้องทำลูปในให้ครบทุกรอบ ก่อน แล้วจึงเริ่มทำลูปนอกในรอบต่อไป มีรูปแบบทั่วไป ดังนี้
for (ตัวแปรและค่าเริ่มต้น; เงื่อนไขเปรียบเทียบ; เพิ่มหรือลดค่าตัวแปร)
{ statement; ลูปนอก
statement;
for (ตัวแปรและค่าเริ่มต้น; เงื่อนไขเปรียบเทียบ; เพิ่มหรือลดค่าตัวแปร)
{ statement;
statement; ลูปใน
statement;
}
statement;
statement;
}

ตัวอย่างโปแกรม for_exp1.cpp แสดงการใช้ for แบบ statement เดียวแสดงข้อความซ้ำ หลายครั้งบนจอภาพ โดยกำหนดค่าของตัวแปรตรวจสอบแบบเพิ่มค่าและลดค่าครั้งละ 1
หรือมากกว่า
/*Program : for_exp1.cpp
Process : display for loop statement
*/
#include <iostream.h>
#include <conio.h>
void main()
{ int i;
clrscr();
for(i=1;i<=5;i++) //set initial i value and condition of for loop
cout<< "Program C++\n";
getch();cout<<'\n';
// condition with decrease value i = i-1
for(i=5;i>=1;i--)
cout<< "I love C++ Language\n";
getch();cout<<'\n';
for(i=16;i<=20;i++)
cout<< "C++ Language is very easy for me\n";
getch();
}

ตัวอย่างโปรแกรม for_exp2.cpp แสดงการใช้ for แบบหลาย statement คำนวณผลรวมและ
ค่าเฉลี่ยจำนวน 1-10
/*Program : for_exp2.cpp
Process : Calculate summation and everage 1-10, display all
*/
#include <iostream.h>
#include <conio.h>
void main()
{ float i,summation;
float average;
//begin statement
clrscr();
summation=0;average=0; // set initial value
cout<< "Progarm display summation and average 1-10\n";
for(i=1;i<=10;i++)
{ cout<<i<<'\n';
summation=summation+i; //calculate summation 1-10
}
average=summation/10;
cout<< "\nSummation 1-10 = "<<summation;
cout<< "\nAverage 1-10 = "<<average;
getch();
}

ตัวอย่างโปรแกรม for_exp3.cpp แสดงการหาผลรวมและค่าเฉลี่ย จำนวนตั้งแต่ 1-n โดยที่ผู้ใช้สามารถกรอกค่า n ในการคำนวณได้
/*Program : for_exp3.cpp
Process : Calculate summation and everage 1-n, display all
*/
#include <iostream.h>
#include <conio.h>
void main()
{ float i,summation,n;
float average;
//begin statement
clrscr();
summation=0;average=0; // set initial value
cout<< "Progarm display summation and average 1-n\n";
cout<< "Please enter n : ";cin>>n;
for(i=1;i<=n;i++)
{ cout<<i<<" ";
summation=summation+i; //calculate summation 1-10
}
average=summation/n;
cout<< "\nSummation 1-10 = "<<summation;
cout<< "\nAverage 1-10 = "<<average;
getch();
}

ตัวอย่างโปรแกรม for_exp4.cpp แสดงการใช้ for แบบซ้อนกัน เพื่อคำนวณการคูณและ
แสดงผลลัพธ์
/*Program : for_exp4.cpp
Process : Calculate multiply number and display all
*/
#include <iostream.h>
#include <conio.h>
void main()
{ int i,j;
//begin statement
clrscr();
cout<< "Display Multiply calculation :\n";
for(i=2;i<=4;i++) //begin external loop
{ clrscr();
cout<< "Display Multiply calculation of "<<i<<'\n';
for (j=1;j<=12;j++) //begin internal loop
{
cout<<i<<"*"<<j<<" = "<<i*j;
cout<<'\n';
} //end of internal loop
cout<< "press any key to continue...";
getch();
} //end of external loop
cout<< "\nEnd of program....\a\n";getch();
}

Go to Top

การทำซ้ำโดยใช้คำสั่ง while
ลูป while จะเริ่มการทำงานด้วยการทดสอบเงื่อนไขที่กำหนดไว้ต้นลูปก่อนเสมอ ถ้าเงื่อนไขเป็น จริง จะทำงานซ้ำในลูป แต่ถ้าเงื่อนไขเป็น เท็จ จะเลิกทำงานในลูป (ทำงานในลูปขณะที่เงื่อนไขเป็นจริง เท่านั้น) รูปแบบของ while มีดังนี้
1. ลูป while ที่มี statement เดียว มีรูปแบบดังนี้
while(เงื่อนไขเปรียบเทียบ)
statement;
2. ลูป while ที่มีหลาย statement มีรูปแบบดังนี้
while(เงื่อนไขเปรียบเทียบ)
{ statement;
statement;
statement;
}
3. ลูป while ซ้อนกัน มีรูปแบบ ดังนี้
while(เงื่อนไขเปรียบเทียบของลูปนอก)
{ statement;
statement;
while(เงื่อนไขเปรียบเทียบของลูปใน)
{ statement;
statement;
statement;
}
statement;
statement;
}

ตัวอย่างโปรแกรม while1.cpp แสดงการกำหนดเงื่อนไข เพื่อให้สามารถพิมพ์ข้อความซ้ำ ๆ
ได้ จำนวน 5 ครั้ง ดังนี้
/*Program : while1.cpp
Process : display text 5 times
*/
#include <iostream.h>
#include <conio.h>
void main()
{ int i;
clrscr();
i=1; //set initial of variable in while condition
while(i<=5)
{ cout<< "I love C++ Langauge\n";
i++; // increase variable value
}
getch();
}

ตัวอย่างโปแกรม while2.cpp แสดงการทำงานของโปรแกรมโดยใช้ while แบบ หลาย
statement โดยโปรแกรมจะให้พิมพ์ตัวอักขระที่ถูกต้อง ซึ่งมีอยู่ 3 ตัว คือ 8, * และ a ตัวใด
ตัวหนึ่ง ถ้าพิมพ์อักขระไม่ตรงตามที่กำหนดไว้ โปรแกรมจะให้พิมพ์ใหม่ทางคีย์บอร์ด ดังนี้
/*Program : while2.cpp
Process : enter correct character
*/
#include <iostream.h>
#include <conio.h>
void main()
{ char ch;
int count;
//begin statement
clrscr();
count=0;
cout<< "Please enter character : \n";
while (ch!='8' && ch!='*' && ch!='a' )
{ cin>>ch; //enter character from keyboard
count++; //count of times that enter character
}
cout<< "Character "<<ch<< " is correct !!! \a\n";
cout<<"You enter "<<count<<" times";
getch();
}

ตัวอย่างโปรแกรม while3.cpp แสดงการคำนวณผลรวมและหาค่าเฉลี่ยของจำนวน 1 - 10
ด้วยการใช้ลูป while ที่ให้ผลลัพธ์เหมือนการใช้ลูป for
/*Program : while4.cpp
Process : calculate summation and average 1-10*/
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
void main()
{ float number,sum,average;
//begin statment
clrscr();
cout<< "Program calculate summation and average 1-10\n";
sum=0; average=0; number=1;
while (number<=10) //begin loop
{ cout<<number<<'\n';
sum+=number; //same as … sum=sum+number
number++; //increase variable +1
} //end loop
average=sum/(number-1);
cout<< "\nSummation number 1-10 = "<<sum;
cout<< "\nAverage number 1-10= "<<setprecision(2)<<average;
getch();
}

Go to Top

การทำซ้ำโดยใช้คำสั่ง do
ลูป do จะเริ่มด้วยการทำงาน รอบแรก 1 รอบก่อนเสมอ และมีการทดสอบเงื่อนไขที่ท้ายลูป ถ้าเงื่อนไขเป็น จริง จะมีการทำซ้ำในลูป แต่ถ้าเงื่อนไขเป็น เท็จ จะเลิกทำงานในลูป มีรูปแบบดังนี้
1. ลูป do ที่มี statement เดียว มีรูปแบบดังนี้
do
statement;
while(เงื่อนไขเปรียบเทียบ);
2. ลูป do ที่มีหลาย statement มีรูปแบบดังนี้
do{
statement;
statement;
statement;
}while(เงื่อนไขเปรียบเทียบ);
3. ลูป do ซ้อนกัน มีรูปแบบดังนี้
do{
statement;
statement;
do{
statement;
statement;
}while(เงื่อนไขเปรียบเทียบลูปใน);
statement;
}while(เงื่อนไขเปรียบเทียบลูปนอก);

ตัวอย่างโปรแกรม dowhile1.cpp แสดงการพิมพ์ข้อความ I love C++ Langauge ซ้ำ
จำนวน 5 ครั้ง โดยใช้ลูป do แบบหลาย statement
/*Program : dowhile1.cpp
Process : display text 5 times*/
#include <iostream.h>
#include <conio.h>
void main()
{ int i;
clrscr();
i=1; //set initial of variable in do...while condition
//begin loop
do{
cout<< "I love C++ Langauge\n";
i++; //increase value of i variable +1
}while(i<=5); //condition for loop
getch();
}

โปรแกรม dowhile2.cpp แสดงการคำนวณผลรวมและค่าเฉลี่ย 1-10 โดยใช้ลูป do…while
ซึ่งให้ผลลัพธ์เหมือนกับการใช้ลูป while
/*Program : dowhile2.cpp
Process : calculate summation and average 1-10
*/
#include <iostream.h>
#include <conio.h>
void main()
{ float number,sum,average;
//begin statment
clrscr();
cout<< "Program calculate summation and average 1-10\n";
sum=0; average=0;
number=1;
do{
cout<<number<<'\n';
sum+=number; //calculate summation
number++;
}while (number<=10);
average=sum/(number-1);
cout<< "\nSummation number 1-10 = "<<sum;
cout<< "\nAverage number 1-10= "<<average;
getch();
}

Go to Top

การออกจากลูปด้วย break
break เป็นคีย์เวิร์ด(keyword) เพื่อให้เลิกการทำงานหรือออกจากลูปทันที ในขณะที่การ ทดสอบเงื่อนไขที่กำหนดไว้ ยังไม่ให้ค่าเปรียบเทียบที่มีผลให้ต้องออกจากลูป สามารถนำ break ไปใช้ได้ กับลูปทุกประเภท (โดยส่วนใหญ่ break ใช้ร่วมกับประโยคที่มีเงื่อนไขมาก่อน เช่น if ตัวอย่างการใช้ break กับลูป for เป็นดังนี้
for (ตัวแปรและค่าเริ่มต้น; เงื่อนไขเปรียบเทียบ; เพิ่มหรือลดค่าตัวแปร)
{ statement;
statement;
break; ออกจากลูป
statement;
}

ตัวอย่างโปรแกรม break.cpp แสดงการทำงานหาผลรวมของลูป for ของเลข 1-100 แต่มี
เงื่อนไขว่า ถ้าค่าของตัวแปร row มากกว่า 23 ให้ break ออกจากลูปก่อนที่จะครบ
100 รอบ
/*Program : break.cpp
Process : display using 'break' in for loop*/
#include <iostream.h>
#include <conio.h>
void main()
{ int x,row,sum;
clrscr();
row=0;sum=0;
for(x=1;x<=100;++x) //condition for 100 loop
{ cout<<"x="<<x<<'\n';
sum+=x;
row++;
if(row>23) //condition of break
break;
}
cout<<"summation 1-"<<x<<" = "<<sum; getch();
}

Go to Top

การย้อนกลับไปต้นลูปด้วย continue
continue เป็นคีย์เวิร์ด (keyword) เพื่อกำหนดให้โปรแกรมย้อนกลับไปเริ่มทำงานที่ต้นลูปนั้น ใหม่ ในขณะที่ยังทำงานไม่ถึงท้ายลูป หรือยังไม่ครบจำนวนรอบที่กำหนดไว้ในเงื่อนไข สามารถใช้ continue กับลูป for while do…while ได้ทุกประเภท

ตัวอย่างโปรแกรม continue.cpp แสดงการใช้ continue ให้กลับไปเริ่มทำงานที่ต้นลูปใหม่
/*Program : continue.cpp
Process : display keyword 'continue' in do...while loop */
#include<iostream.h>
#include<conio.h>
void main()
{ float x,y;
char choice;
do{
clrscr();
cout<< "\nProgram Divide Calculation x/y";
cout<< "\n******************************";
cout<< "\nEnter X : "; cin>>x;
cout<< "\nEnter Y : "; cin>>y;
if(y==0)
{ cout<< "\a\n\nCan't divide by zero !!!";
cout<< "\npress any key to continue...";
getch();
continue; //return to begin loop
}
cout<< "\n*** Result "<<x<<"/"<<y<<" = "<<x/y;
cout<< "\n\nCalculate another <y or n> ? ";
cin>>choice;
}while((choice!='n')&&(choice!='N'));
clrscr();
}

Go to Top