Loop
For Loop အေၾကာင္းမေျပာခင္ Loop ဆိုတာဘာလဲ ေျပာၾကည့္ရေအာင္ဗ်ာ Loop ဆိုတာ ပတ္လမ္းပါပဲ ။ ထပ္ကာထပ္က အလုပ္လုပ္ေစဖို႔ ညႊန္ၾကားေပးနိုင္တဲ႔ အရာေပါ႔ ဗ်ာ ။ Program မွာ Loop ေတြ ကို အမ်ိဳးမ်ိဳး သံုးေလ႔ရွိပါတယ္ ။ for ,while, do ..while စသျဖင္႔ေပါ႔ ေလ တျခား Pogramming ေတြမွာ တျခား loop ပံုစံေတြလည္းရွိဦးမွာ ပါ (ဥပမာ C မွာဆိုရင္ Repeat until ေပါ႔) အခုက C++ ဆိုေတာ႔ သူ႔ထဲမွာပါတဲ႔ loop ေတြအေၾကာငး္ပဲေျပာတာေပါ႔ ။
For Loop
For loop ကေတာ႔ Intilization (အစမွတ္) ၊ condition (အေျခေနအတိုင္းတာတစ္ခု သို႔ အဆံုးမွတ္) ၊ နဲ႔ iteration (တိုးသြားမဲ႔ ႏွုန္း) စတာေတြကိုေသခ်ာသတ္သတ္မွတ္မွတ္နဲ႔ looping ပတ္ခ်င္တဲ႔အခါမ်ိဳးေတြမွာ for loop ကိုသံုးပါတယ္ ။ for loop ရဲ့ ပံုစံ ေလးကိုေအာက္မွာၾကည့္ၾကည့္ပါ ။
ပံုစံ (၁)
for(initialization; condition; iteration)
statement;
statement တစ္ခုတည္းကို looping ပတ္တဲ႔ပံုစံပါ ။
ပံုစံ (၂)
for(initialization; condition; iteration)
{
statement sequence
}
သူကေတာ႔ statements ေတြအမ်ားႀကိးလုပ္ေဆာင္ခ်င္တဲ႔အခါမွာ {…} (brace) နဲ႔ block လုပ္ၿပီး looping ပတ္တဲ႔အခါမွာသံုးတဲ႔ပံုစံပါ ။
For Loop ရဲ့လုပ္ေဆာင္ပံု
၁ ။ for loop ကို ေတြ႔ၿပီဆိုတာနဲ႔ ပထမဆံုး Intilization မွာစၿပီး အလုပ္လုပ္ပါတယ္ ။ intilization တန္ဖိုးတစ္ခုအတြက္ looping တစ္ႀကိမ္ပတ္ပါတယ္ ။
၂ ။ စမွတ္တန္ဖိုးရသြားၿပီးတဲ႔ အခါမွာ condition ေဖာ္ျပခ်က္မွာထပ္ၿပီးစစ္ပါတယ္ ။
၃ ။ တကယ္လု႔ိ condition မွာေဖာ္ျပထားတဲ႔ အတုိင္းမွန္ေနေသးတယ္ဆိုရင္ ေအာက္ကိုဆင္းၿပီး statements ေတြကုိလုပ္ေဆာင္ပါတယ္။ ၿပီးရင္ iteration မွာသြားၿပီး ေတာ႔ repeat လုပ္ရမဲ႔ႏွဳန္းအတိုင္း စမွတ္တန္ဖိုးကိုတိုးလိုက္ပါတယ္ ။
တကယ္လို႔ condition မွာစစ္လိုက္လို႔ ေဖာ္ျပထားတဲ႔ အခ်က္နဲ႔ မကိုက္ညီေတာ႔ဘူးဆိုရင္ေတာ႔ ေအာက္က statement ကုိလည္းမလုပ္ေတာ႔ပဲ looping ကေန ထြက္သြားပါတယ္ ။
၄ ။ နံပါတ္ ၃ က iteration မွ တိုးေပးထားတဲ႔ႏွုန္းအတိုင္ း intilized တန္ဖိုး ျပန္စၿပီး looping ထပ္ပတ္ပါတယ္ ။ နံပါတ္ ၁ ၊ ၂ ၊၃ ၊ ၄ ကိုအစဥ္တိုင္းျပန္လုပ္ပါတယ္ ။
Example for simplest for loop
မ်က္စိထဲမွာရွင္းရွင္းလင္းလင္းျမင္သြားေအာင္ ဥပမာေလးေတြ ၾကည့္လိုက္ရေအာင္ ။
#include <iostream>
using namespace std;
int main()
{
int count;
for(count=1; count <= 25; count=count+1)
cout << count << " ";
cout<<endl;
return 0;
}
ရွင္းလင္းခ်က္
အေပၚက code ေလးကိုၾကည့္ၾကည့္ပါ ။ for loop ရဲ့ ပံုစံ (၁) ကိုသံုးထားပါတယ္။ program မွာက ၁ ကေန ၂၅ ထိကို ဂဏန္းေတြ ထုတ္ေပးခိုင္းတာပါ ။ ပထမ ကၽြန္ေတာ္ int count; လို႔ data declaration လုပ္ထားပါတယ္ ။ ၿပီးေတာ႔ for loop စပါတယ္။
၁ ။ အရင္ဆံုး for loop ရဲ့လုပ္ေဆာင္ပံုကိုေျပာထားတုန္းကအတိုင္းပဲ count = 1 ; ဆိုၿပီး count တန္ဖိုးကို ၁ ကေနစပါလို႔ကၽြန္ေတာ္ေျပာထားလိုက္ပါတယ္ ။
၂ ။ ေနာက္ condition မွာ ကၽြန္ေတာ္က count <=25 ဆိုၿပီး count တန္ဖိုး ၂၅ ထိေအာင္ အလုပ္လုပ္မယ္လို႔ ဆံုးမွတ္ အေျခေနတစ္ခုေပးထားလိုက္ပါတယ္ ။ Program က count တန္ဖိုး ဟာ ၂၅ ေအာက္ငယ္ေနေသးသလား ဒါမွမဟုတ္ ၂၅ နဲ႔ညီၿပီလားဆိုတာစစ္ပါတယ္ ။ အခု count တန္ဖိုး က ၁ ပဲရွိေသးတာျဖစ္လို႔ သူ႔အေျခအေနနဲ႔ကိုက္ညီပါတယ္ ။
၃ ။ အဲမွာစၿပီး statement ကိုအလုပ္လုပ္ပါတယ္ ။ cout<<count << “ ” ; ဆိုတဲ႔အတြက္ေၾကာင္႔ count ရဲ့ စမွတ္တန္ဖိုး ၁ ျဖစ္တဲ႔အခ်ိန္မွာ ၁ လို႔ စက္ခရင္မွာထုတ္ေပးလိုက္ပါတယ္ ။ ေနာက္ iteration အပိုင္းကို ဆက္ၾကည့္ပါတယ္ ။ count=count+1; ဆိုတဲ႔ တိုးသြားရမဲ႔ႏွဳန္းကိုေပးထားတာေၾကာင္႔ ေနာက္တစ္ပါတ္အတြက္ count ရဲ့စမွတ္မွာ ၂ ဆိုတဲ႔တန္ဖိုး ျပန္ဝင္သြားပါတယ္ ။
၄ ။ အဲဒီအတိုင္း ပဲ စမွတ္ေနရာကေန ေနာက္ထပ္တစ္ပါတ္ ျပန္ပါတ္ ပါတယ္ ။ အဆင္႔ ၁ ၊ ၂ ၊ ၃ ၊ ၄ ကိုအစဥ္တိုင္းျပန္လုပ္ပါတယ္ ။
အခု Program ေလးမွာကၽြန္ေတာ္ သိေစခ်င္တဲ႔ အခ်က္ေလးကိုထည့္ထားပါတယ္ ။ cout<<endl; ဆိုတဲ႔ဟာေလးကို statement ေအာက္မွာေရးေပးထားတာပါပဲ ။ {..} ေတြကိုမသံုးရင္ for looping ေအာက္မွာstatementတစ္ေၾကာင္းပဲလုပ္တယ္ဆိုတာကိုသိေစခ်င္လို႔ပါ။
Result
For Loop by using brace ({….})
ဒီဥပမာေလးကေတာ႔ အေပၚမွာေျပာထားခဲ႔တဲ႔ for loop ရဲ့ ပံုစံ (၂) အတြက္ပါ ။ အခု program မွာ{…} သံုးၿပီး statements တစ္ခုထက္ပိုတာေတြကို for loop ထဲမွာအလုပ္လုပ္တဲ႔ ပံုစံပါ ။ အလုပ္လုပ္ပံု က ေတာ႔ အေပၚ က example Program အတိုင္းပါပဲ ။
#include <iostream>
using namespace std;
int main()
{
int count;
int sum=0;
long int multiply=1;
for(count=1; count <= 25; count++) // count++ ဆိုတာ count=count+1 နဲ႔တူတူပါပဲ
{
cout << count << " ";
sum+=count; //sum=sum+count;
multiply*=count; // multiply=multiply*count;
}
cout<<endl;
cout<<"The sum of from 1 to 25 = "<<sum;
cout<<endl;
cout<<"The Multiplication of from 1 to 25 = "<<multiply;
cout<<endl;
return 0;
}
ကုဒ္ေလးေတြကို ကိုယ္တိုင္ Run ၾကည့္ၿပီး ထြက္လာတဲ႔ result ေလးေတြကိုကိုယ္တိုင္ေလ႔လာၾကည့္ပါ ။ ပံုေတြ အမ်ားႀကီးထည့္ရင္ပို႔စ္ရွည္သြားမွာစိုးလို႔ ကၽြန္ေတာ္ result ပံုမထည့္ေပးေတာ႔ပါဘူး ။
For Loop with char
ဒါ ကေတာ႔ ေနာက္ ပံုစံတစ္မ်ိဳးေပါ႔ for loop မွာ character ကိုသံုးထားတဲ႔ ပံု စံပါ ။ ဂဏန္းေတြတင္ looping ပတ္လို႔ရတာမဟုတ္ဘူး character ကိုသံုးၿပီးေတာ႔ looping ပတ္လို႔ရတယ္ဆိုတာသိေစခ်င္လို႔ ပါ ။
#include <iostream>
using namespace std;
int main()
{
char letter;
for(letter = 'A'; letter <= 'Z'; letter++)
cout << letter<<" ";
cout<<endl;
return 0;
}
For Loop Without Increasement
အေပၚ မွာ for loop ရဲ့ ပံုစံေတြေျပာတုန္း က for(initialization; condition; iteration) ရွိတယ္လို႔ ကၽြန္ေတာ္ေျပာခဲ႔ တယ္ ။ ေက်ာင္းမွာ C++ ကိုစၿပီးသင္ဖူးတုန္း က ဆရာေတြ က ဒီ for loop ကေတာ႔ ဒီလိုပံုစံသံုးရတယ္ဆိုေတာ႔ ကၽြန္ေတာ္တို႔ က ဒီပံုစံတစ္မ်ိဳးပဲမွတ္လိုက္တာပါ ။ အဲဒီေတာ႔ဘာျဖစ္လာလဲဆိုေတာ႔ တျခား ကၽြန္ေတာ္တို႔မသိခဲ႔ရတဲ႔ ပံုစံေတြနဲ႔ code ေလးေတြကိုေတြ႔လိုက္တဲ႔အခါ ဒါကဘာႀကီးလဲ ဘာကိုဆိုလိုတာလဲ ဆိုၿပီး နားမလည္ျဖစ္လာပါတယ္ ။ ေက်ာင္းသားေတာ္ေတာ္မ်ားမ်ားလည္းျဖစ္ဖူးမယ္ထင္ပါတယ္ ။ ဒါေၾကာင္႔ ဒီလို သံုးယံုတင္မဘူး ။ ေနာက္ထပ္ ဒီလိုပံုစံပါ သံုးနိုင္တယ္ဆိုတာကို တစ္ခါတည္းသိသြားေစခ်င္လို႔ပါ ။
#include <iostream>
using namespace std;
int main()
{
int x;
for(x=0; x != 123; ) //without increasement
{
cout << "Enter a number: ";
cin >> x;
}
return 0;
}
ဒီဥပမာမွာကေတာ႔ for loop ေပမဲ႔ while loop နဲ ႔သြားၿပီးဆင္တူသြားပါတယ္ ။
// ေနာက္ပံုစံတစ္မ်ိဳး
#include <iostream>
using namespace std;
int main()
{
int x=0;
for( ; x <= 123; )
{
cout <<x<< " ";
x++;
}
cout<<endl;
return 0;
}
ဒီ ဥပမာ ပံုစံေလးကေတာ႔ intilization ေရာ increasement ပါ မပါပဲ for loop ေရးတဲ႔ပံုစံေလး ပါ ။ အေပၚက int x=0; ကို အစမွတ္အျဖစ္ယူလိုက္ၿပီး ေအာက္ က statement မွာေရးထားတဲ႔ x++ ကို increasement အျဖစ္ယူသြားတာပါ ။
Empty for loop statement
ဒါကေတာ႔ for loop မွာ intilization ေရာ condition ေရာ iteration ေရာ တစ္ခုမွ ေရးမထားပဲ ဒီတုိင္းေရးတဲ႔ပံုစံပါ ။ သူ႔အလုပ္လုပ္တာကေတာ႔ infinity loop ပါ အဆံုးမွတ္မရွိပါဘူး ဘယ္ေတာ႔မွရပ္မွာမဟုတ္ပါဘူး ။ ေအာက္ကကုဒ္ေလးေတြကို run ၾကည့္ပါ secreen မွ 1 ဆိုတဲ႔ဟာေတြ အဆံုးမရွိေျပးေနတာ ေတြ႔ပါလိမ္႔မယ္ ။
#include <iostream>
using namespace std;
int main()
{
for( ; ; )
cout << " 1 ";
cout<<endl;
return 0;
}
//ေနာက္ပံုစံတစ္မ်ိဳး
#include <iostream>
int main()
{
int counter=0;
int max = 3;
for (;;) //infinity for loop
{
if (counter < max)
{
std::cout << "Hello! all my friends\n";
counter++; // increment
}
else
break;
}
return 0;
}
ဒီ တစ္ပုဒ္ကေတာ႔ အခု န က infinity for loop ကိုပဲ ကိုလိုခ်င္တဲ႔ပြိဳင္႔ေလးေရာက္ရင္ ရပ္သြားေအာင္ေရးသြားတဲ႔ပံုစံ ပါ ။ for (;;) { } က အဆံုးမရွိပတ္ေပမဲ႔ သူ႔ထဲမွာပါတဲ႔ statement မွာ
int counter=0;
int max = 3;
if (counter < max)
{
}
else
break;
စတဲ႔ control ေလးေတြသံုးၿပီးေတာ႔ အဆံုးသတ္ခိုင္းလိုက္တာပါ ။ အေပၚ က တစ္ပုဒ္နဲ႔ အခုတစ္ပုဒ္ကိုႏွိုဳင္းယွဥ္ၾကည့္ပါ သေဘာေပါက္ပါလိမ္႔မယ္ ။ ဒီ programေလးမွာ operator break; ကိုသံုးထားပါတယ္ ။ သူ႔အေၾကာငး္ကိုေတာ႔ ေနာက္မွာဆက္ေဆြးေႏြးပါ႔မယ္ ။
For Loop without body or Statement
အေပၚမွာ intilization , condition နဲ႔ iteration မပါတာေတြကိုဥပမာ ေလးေတြျပခဲ႔ပါတယ္ အခု for loop မွာ statement မပါတဲ႔ပံုစံ ဥပမေလးၾကည့္ၾကည့္ပါဦး ။
#include <iostream>
using namespace std;
int main()
{
int i;
int sum = 0;
// sum the numbers from 1 through 10
for(i=1; i <= 10; sum += i++) ;
cout << "Sum is " << sum;
return 0;
}
စာဖတ္သူ စိတ္ထဲမွာcout << "Sum is " << sum; က for ရဲ့ statement မဟုတ္ဘူးလားလို႔ေမးခ်င္ေကာင္းေမးခ်င္ေနပါလိမ္႔မယ္ ။ မဟုတ္ပါဘူးခင္ဗ်ာ run ၾကည့္လိုက္ပါ ။ သူက for ရဲ့ statement သာဆိုရင္ ၁၀ secreen မွာ Sum is ဘယ္ေလာက္ဆိုၿပီး ၁၀ ခါျပမွာပါ ။ အခု ၁ ခါပဲျပပါလိမ္႔မယ္ ။ sum += i++ ေလးရဲ့သေဘာတရားကိုေတာ႔ operators ခန္းမွာတုန္းက operator ေတြအေၾကာင္းေဆြးေႏြးခဲ႔႔တာကိုနားလည္ခဲ႔တယ္ဆိုရင္ သေဘာေပါက္မယ္လို႔ ယူဆပါတယ္ ။ sum=sum+i ; i=i+1; ဆိုတဲ႔ ၂ ေၾကာင္းကို ေပါင္းေရးလိုက္တာပါ ။
Use multiple statements in for loops (or) Using comma Operator in For Loops
ဒါကေတာ႔ For loops တစ္ခုတည္းမွာ ၂ မ်ိဳးပတ္နိုင္ေအာင္ေရးတဲ႔နည္း ပါ ။ တစ္မ်ိဳးကို i လို႔သတ္မွတ္ၿပီး သြားတဲ႔ အခါ Increasement နဲ႔သြားခိုင္းပါတယ္ ။ ေနာက္တစ္မ်ိဳးကိုေတာ႔ j လို႔ သတ္မွတ္ထားၿပီး သြားတဲ႔ အခါမွာ decreasement iteration နဲ႔ သြားတဲ႔ သြားခိုင္းထားတာပါ ။ အဲလို ၂ မ်ိဳးကိုတစ္ၿပိဳင္တည္းေရးဖို႔အတြက္ comma (,) ေအာ္ပေရတာကိုသံုးထားပါတယ္ ။ example ေလးကို Run ၿပီးေလ႔လာၾကည့္ပါ ။
#include <iostream>
int main()
{
for (int i=0, j=2; i<3; i++, j--)
std::cout << "i: " << i << "\t j: " << j << std::endl;
return 0;
}
Use nested for loops
ကဲဗ်ာ … စာဖတ္ရတဲ႔သူလည္းေတာ္ေတာ္ပ်င္းေရာေပါ႔ ဒါကေတာ႔ For loop ရဲ့ ေနာက္ဆံုး example ပါ ။ for loop ထဲမွာေနာက္ထပ္ for loop ေတြထပ္ၿပီးသံုးတဲ႔ nested for loop ပံုစံပါ ။ အခုဥပမာေလးက ေတာ႔ ၂ ကေန ၅၀ အတြင္းမွာရွိတဲ႔ ဂဏန္းေတြရဲ့ factors ေတြကိုရွာေပးမဲ႔ Program ေလးပါ ။ ေလ႔လာၾကည့္ပါ ..။
#include <iostream>
using namespace std;
int main() {
for(int i=2; i <= 50; i++)
{
cout << "Factors of " << i << ": ";
for(int j = 2; j < i; j++)
if((i%j) == 0) cout << j << " ";
cout << "\n";
}
return 0;
}
ပထမ for loop အလုပ္လုပ္ၿပီး factors of <<I လို႔ေရးထားတဲ႔အတြက္ I တန္ဖိုး ၂ျဖစ္တဲ႔အခ်ိန္ မွာ factors of 2 : လို႔ စက္ခရင္မွစျပပါမယ္ ၿပီးေတာ႔ ေနာက္ကိုဆင္းသြားၿပီး for loop တစ္ခုထဲထပ္ဝင္ပါတယ္ j တန္ဖိုးကိုလည္း ၂ ကေနစထားတယ္ ။ ၿပီးေတာ႔ condition မွာ j က I တန္ဖိုးထက္ငယ္သလားၾကည့္ပါတယ္ ။ ငယ္တယ္ဆိုရင္ ေအာက္က statement ကိုဆက္လုပ္မွာပါ ။ I =2 ,j=2 ျဖစ္ေနတဲ႔အတြက္ condition နဲ႔မညီပါဘူး ဒါေၾကာင္႔ ဒုတိယ for loop ထဲက statement ကို မလုပ္ပါဘူး…ပထမ for ရဲ့ iteration ကိုျပန္သြားၿပီး ေနာက္တစ္ပါတ္ ထပ္ပါတ္ပါလိမ္႔မယ္ ။
ေနာက္တစ္ႀကိမ္ထပ္စစ္လို႔ ဒုတိယ for loop မွာ condition မွန္ၿပီဆိုတာနဲ႔ statement ျဖစ္တဲ႔ if((i%j) == 0) cout << j << " "; ကိုအလုပ္လုပ္ပါလိမ္႔မယ္ ။ ဒီ statement ကေတာ႔ I ကို j နဲ႔စားမယ္ဆိုရင္ အၾကြင္း သုည ရမလားဆိုတာစစ္တာပါ ရမယ္ဆိုရင္ေတာ႔ j ကိုထုတ္ေပးမွာျဖစ္ၿပီး မရဘူးဆိုရင္ေတာ႔ထုတ္မေပးပါဘူး ။ အဲလိုနဲ႔ ပတ္သြားလိုက္တာ အႀကိမ္ ၅၀ တိုင္ေအာင္ပါပဲ ။
ဒီမွာတစ္ခ်က္ သိရမွာ က အေပၚက i loop တစ္ပါတ္ ပါတ္တိုင္းမွာ j loop ကတစ္ပါတ္ပဲပတ္တာမဟုတ္ပါဘူ း ။ သူ႔တန္ဖိုး ၂ ကေနစၿပီး j<i မွန္ေနသမွ် သူကပတ္မွာပါ သူလုပ္ေဆာင္ခ်က္ၿပီးမွ အေပၚ မွာရွိတဲ႔ i loop က တန္ဖိုးတစ္ခုထပ္တိုးၿပီးေနာက္တစ္ပါတ္ပါတ္တာပါ ။
အခု Program ကိ ု Run ၾကည့္ရင္သိမွာပါ ဥပမာ factor of 8 is ဆိုတဲ႔ေနရာကိုတစ္ခ်က္ၾကည့္ၾကည့္ပါ ။ 2 ရယ္ 4 ရယ္ ဆိုၿပီး ျပေနတာေတြ႔မွာပါ ။
ဘာေၾကာင္႔လဲဆိုေတာ႔ j loop ထဲမွာ i တန္ဖိုး ၈ ကို 2 နဲ႔စၿပီး စားလိုက္ တာ 7 နဲ႔အထိတိုင္ေအာင္စားပါတယ္ ။ အဲဒါဆိုေတာ႔ i loop က ၈ ဆိုတဲ႔တန္ဖိုး တစ္ခုနဲ႔ တစ္ပါတ္ ပတ္ တဲ႔အခ်ိန္မွာ j loop က ၆ ႀကိမ္ပတ္တာေပါ႔ ။ ဒါေပမဲ႔ ၈ ကိုစားလို႔ျပတ္တာက ၂ နဲ႔ ၄ ပဲျပတ္တာဆိုေတာ႔ 2 ရယ္ 4 ရယ္ပဲျပေပးတာပါ ။
Result
အမွားပါရင္လည္းေထာက္ျပေဝဖန္ေပးၾကပါ ။ လိုေနတာရွိရင္လည္း ျဖည့္စြက္ေပးၾကပါလို႔ ေမတၱာရပ္ခံပါတယ္ ။ ကဲ …နားၾကဦးစို႔ဗ်ာ …
ေဆြးေႏြးခ်က္ (၈)
Saturday, July 3, 2010
ေရးသားသူ ->
စစ္ေသြး
at
4:49 PM
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment