Monday, October 22, 2012

6. C හයවන පාඩම - නැවත නැවතත් සිදුකිරීම (Loop)

මේ පාඩමෙන් බලමු ක්‍රියාවලියක් නැවත නැවත සිදුකරගන්න අවශ්‍යවිටදි ක්‍රමලේඛණයේ භාවිතාවන තවත් වැදගත් භාවිතයක් වන loop ගැන. loop එකක් යනු අර්ථයෙන්ම නොනැවති සිදුවන ක්‍රියාදාමයක් හඟවයි. ක්‍රමලේඛනයේදි අපිට යම් කිසි ක්‍රියාවලියක් නැවත සිදුකරගැනීමට අවශ්‍ය නම් එම කේත කොටස යලි ලිවීමට සිදුවේ. නමුත් මේ loop භාවිතයෙන් එම යලි ලිවීම අවම කොට එකම කේත කොටසක් නැවත නැවත භාවිතයට ගැනෙන ආකාරයට සකසා ගැනීමටත් එහි සිදුවීම පාලනය කරගැනීමටත් අපට අවකාශය ලබා දෙයි. එනම් අවශ්‍ය විටෙකදි පටන් ගැනීමටත් අවශ්‍ය විටකදි නතරකර ගැනීමටත් ආදි වශයෙන් කේතනය කිරීමට හැකියාව ලැබේ.




ඉහත රූපයේ දැක්වෙන්නෙ සරලවම loop එකක් ක්‍රියාකරන අන්දමයි. එහි පෙන්වා ඇති පරිදි යම් කිසි අවසථාවකදි පරීක්ෂාකෙරෙන condition එකක් මගින් එය නැවත සිදුකළ යුතුද නැතිනම් ඉවත් විය යුතුදැයි තීරණය කෙරේ. මෙහිදී condition එක සත්‍ය වනතුරු loop එක ක්‍රියාත්මක වන අතර condition එක අසත්‍ය වූ සැනින් loop එකෙන් ඉවත් වේ.

C හිදි භාවිතා වන loop වර්ග තුනක් හඳුනාගත හැකිය.
  1. While loop
  2. Do while loop
  3. For loop 
1. while loop 


while loop එක යනු ක්‍රමලේඛනයේදි භාවිතා වන සරලම loop එකයි. මෙහිදි loop එකට ඇතුළුවීම පිණිස condition එක true විය යුතුය. එසේ ඇතුලුවූ පසු අදාල කේත කොටස execute වී නැවත condition එක පරීක්ෂාකරයි. මේ ආකාරයෙන් නැවත නැවත සිදුවන අතර යම් අවස්ථාවකදි condition එක false වන්නේ නම් එවිට loop එකෙන් ඉවත් වේ. 

Syntax
while (condition[true/false]) 
{
    statement;
}


Example
int counter = 0;
while (counter<10) 
{
    printf("%d",counter);
    counter++;
}


ඉහත උදාහරණයේදි ඔබට පිළිතුර ලෙස තිරයේ 0 සිට 9 දක්වා output එක ලබාගත හැකිය.

මෙහිදී සිදූවිම සවිස්තරව දැනගනිමු.
මෙහිදි මුලින්ම හදුන්වා දී ඇති int counter යනු loop එකෙහි ක්‍රියාත්මක වාරගණන ගැන ගැනීම සඳහා මාවිසින් හදුන්වාගත් Integer type counter variable එකයි. එය ආරම්භයේදී 0 ලෙස අගයක් යොදාගෙන ඇත.
දෙවනි පෙලෙන් while ලෙස සඳහන් කිරීමෙන් මෙය while loop එකක් බවත් ඒ ඉදිරියේ ඇති වරහන් තුල පරීක්ෂාවිය යුතු condition එකත් ලබා දී ඇත. මෙහි ආරම්භය ලෙස counter යන variable එක 10ට වඩා කුඩාද යන්න පරීක්ෂාවට ලක් කෙරෙන අතර මෙම condition කොටස සඳහා ඔබට අවශ්‍ය පරිදි ඕනෑම Boolean result එකක ලබාදෙන statement එකක් (එනම් සත්‍ය(true) හෝ අසත්‍ය(false) ලෙස ප්‍රථිපලය ලබාදෙන) භාවිතා කළ හැක. loop වලදි බහුලව යොදාගනුයේ counter variable එකක් විචලනය කර අවශ්‍ය තාව සකසා ගැනීමයි.
ඉන් පසු සඟලවරහන් ආරම්භකයක් ( { ) දැකිය හැකිය. එමෙන්ම කේත කොටස අවසානයේ එහි ( } ) වැසුම දැකිය හැකිය. එම සඟලවරහන් කොටසින් කියැවෙනුයේ ඒ තුල ඇති කේත කොටස loop එකට අදාල කොටස බවයි. අපි මීට පෙර ඉගෙනගත් if ආදී පාඩම් වලදීද මෙම සඟලවරහනේ උපයෝගිතාවය ඉගෙන ගත්තෙමු.
ඊලඟ පෙලෙන් printf විධානයක් දැකිය හැකිය. එනම් මෙහිදි සරලවම අපේ counter variable එකෙහි පවතින අගය print කරගැනීම පමණක් සිදුකර ඇත.
counter++ යන පෙලින් සිදුකරගනු ලබන්නෙ අපගේ counter variable හි පවතින අගය එකකින් ඉහල දැමීමයි.

දැන් මුලින්ම counter = 0 බැවින් condition එක සත්‍ය වේ (condition එක වනුයේ counter<10 බැවින්). එබැවින් loop එක තුලට ඇතුලු වන අතර අදාල statement සියල්ල execute වූ පසු අවසානයේදී නැවත මුලට යමින් condition එක පරීක්ෂාකරයි. එවිට counter එකෙහි අගය එකකින් වැඩි වී ඇති නිසා නව අගය ලෙස 1 ලැබේ. එවිටත් condition එක සත්‍ය වන නිසා loop එක තුලට ඇතුලු වේ. මේ ආකාරයට 9 දක්වාම ගිය පසු counter එක 10 ලෙස පැමිණීමෙන් condition එක false වේ. එවිට loop එකෙන් ඉවත් වේ.

මෙය loop එකක සරල ක්‍රියාදාමය ලෙස හඳුනාගත හැකිය.

2. do.. while loop


Do...while loop හිදී පෙර පරිදිම සිදුවන නමුත් මෙහිදි statement  එක එකවරක් execute වීමෙන් අනතුරුව condition එක පරීක්ෂාවට ලක්වීම සුවිෂේශීවේ.
එනම් condition එක පළමු අවස්ථාවේදී සත්‍ය වුවත් නොවුවත් එක වරක් loop එක තුල ඇති code එක execute වේ.
ඉන් පසු පෙර පරිදිම condition එක පරීක්ෂා කෙරෙන අතර එය සත්‍ය නම් නැවත මුලට ගොස් code එක execute වෙමින් පැමිණේ. එලෙස condition එක අසත්‍ය වන තුරු loop එක ක්‍රියාත්මක වේ. 

Syntax
do
{
   statement;
} while (condition[true/false]); 



Example
int counter = 0;
do
{
    counter++;
    printf("%d",counter);
}while (counter < 10);


මෙහිදී ඔබට පිළිතුර ලෙස 1 සිට 10 දක්වා ප්‍රථිපලයක් ලැබෙනු ඇත.
ඒ මන්ද...
මෙහි ආරම්භයේදී counter = 0 වේ. නමුත් පළමු අවස්ථාවේදී code එක execute වන බැවින් counter++ හිදී counter හි අගය 1 ලෙස වෙනස් කර මුද්‍රණය කරයි. එවිට පළමු අවස්ථාවේදී condition එක පරීක්ෂාවට ලක්වද්දී counter එකෙහි අගය 1 වේ. එය සිදුවන්නේ do..while හි සුවිෂේශී වූ එක අවස්ථාවක් execute  වීමේ ගුණාංගය නිසායි. මෙලෙස 9 දක්වා අගයන් මුද්‍රණය වූ පසු condition එක පරීක්ෂා කරද්දී counter එක 9 වේ. එය සත්‍ය බැවින් නැවත මුලට යන අතර එම අවස්ථාවෙ counter++ මගින් අගය 10 ලෙස වෙනස් කරයි. එම නිසා 10 මුද්‍රණය වීමෙන්ද පසු එම අවස්ථාවේ condition එක පරීක්ෂා කෙරේ. එවිට ප්‍රථිපලය false බැවින් loop එකෙන් ඉවත් වේ.

3. for loop

for loop එක පෙර කතා කල while loop එකෙහිම වැඩි දියුණු අවස්ථාවක් ලෙස හැදින්විය හැකිය. මෙහිදී ඇති විශේෂත්වය නම් loop එක සඳහා වෙනස් කරනු ලබන variable එක for ලූප් එක තුලදීම හසුරවා ගැනීමයි. මෙය වඩා පහසුවෙන් හැසිරවිය හැකි බැවින් ක්‍රමලේඛණයේදී බහුලවම භාවිතා වන්නේ මෙම loop එකයි.

එය උදාහරණයක් මගින්ම පැහැදිලි කරගනිමු.

Syntax
for ( variable initialization; condition; variable update ) {
  Code to execute while the condition is true
}

Example
int x;

for ( x = 0; x < 10; x++ ) 
{
   printf( "%d\n", x );   
}

for loop එකෙහි මුලින්ම පද තුනකින් යුත්වරහනක් දැකිය හැක. එතුල ඇති පළමු පදයෙන් variable initialization එක හැඳින්වේ. එමගින් සිදුවන්නෙ පෙර දි counter හි අගය 0 ලෙස මුලින් ම සිදු කළ කාර්‍යයි. දෙවනි පදයෙන් සුපුරුදු පරිදි condition එකද තුන් වන පදයෙන් අපි මෙතෙක් loop එක තුළ භාවිතා කළ ආකාරයේ එක එක අවස්ථාවේදී update (යාවත්කාල) වීමද හදුන්වා දී ඇත. එම නිසා මෙම loop එක භාවිතය වඩාත් පහසු වී ඇත.
statement කොටසේදී printf විධානය පමණක් මෙහිදි ලබා දී ඇත. එම නිසා මෙහි ප්‍රථිපලය ලෙස 0 සිට 9 දක්වා අගයන් තිරය මත මුද්‍රණය වීම සිදුවේ.

C හිදි හඳුනාගත හැකි මෙම loop වර්ග තුන අනෙකුත් බොහෝ පරිගණක ක්‍රමලේක භාෂා වලදීද එකම ආකාරයක් වේ.
loop පාඩම මෙතෙකින් අවසන් වේ. ඔබ සතු ගැටලු අප වෙත ඉදිරිපත් කරන්න.
email: ndp.mymail@gmail.com

2 comments:

  1. loop කියන්නේ හෙන සරළ දෙයක්.. ඒ වුනාට බොරු කියන්නෝනි නෑ මම මුලින්ම ඉගෙන ගත්තු දවස් වලනම් මෙලෝ බෝලයක් තේරුනේ නෑ.. :D

    ReplyDelete
    Replies
    1. :D මටත් ඒ දයස් යල හෙනම මැජික් එක මේකෙ වැඩ කිඩ දැකල... :P

      Delete