මෙතැන් සිට සාකච්චා කරන උදාහරණ තුල කලින් නොයෙදුනු ආකෘතියක් යෙදේ. එය ගැලීම සටහන් ඇදීමේදී එතරම් අපහසු නොවුනත් ව්යාජ කේත ලිවිමේදී බොහෝ දෙනෙකුට වැරදි සිදුවන අවස්තාවකි. එනම් පුනර්කරණයි. පුනර්කරණයක් ගැලීම් සටහන් තුල දැක්වීමේදී තෝරාගැනීම් වලට සමානතාවක් දක්වයි. එනම් ඒ සදහා යොදා ගන්නේ තෝරාගැනීම්(selection) දැක්වීම සදහා යොදා ගන්නා තීරණ ගැනිමේ (decision) සංකේතයමයි. නමුත් ව්යාජ කේත ලිවීමේදී ඒ සදහා වෙනම ආකෘතීන් කිහිපයක් පවතී.පළමුව තෝරාගැනීමක හා පුනර්කරණයක වෙනසත්, ඒවා යොදන ආකාරයත් සලකා බලමු.
තෝරාගැනීමක් යනු යම්කිසි කොන්දේසියක් දී ඇති විට එහි සත්ය අසත්යතාව මත යම් කිසි කාර්යයක් හෝ කාර්යයන් කරදෙන ආකෘතියකි. එනම් අපට යම්කිසි කොන්දේසියක් හෝ කොන්දේසි කිහිපයක් ලබා දී ඒවා සත්යවිට,අසත්යවිට,එකක් පමණක් සත්යවිට,සියල්ල සත්ය විට,සියල්ල අසත්ය විට වැනි කිහිප අවස්තාවකදී සිදුවියයුතු කාර්යය ලබා දී අදාල ප්රතිදාන හා ක්රියාවලි සිදුකරගත හැකියි.
ගැලීම් සටහනක මෙය යොදන්නේ තීරණ ගැනීමේ (decision) සංකේතය තුල අදාල කොන්දේසිය යොදා ඉන් පිටතට අදාල කොන්දේසිය සත්යනම් සිදුවියයුතු කාර්යය දක්වා යන flow line එකක් යොදා එහි ආරම්හයේ කොන්දේසිය සත්ය බව හැගවෙන yes වැනි වචනයක් ලිවීමත්, කොන්දේසිය අසත්යනම් සිදුවිය යුතු කාර්යය සදහා යොමුවන flow line එකක් දක්වා එහි ආරම්භයේ කොන්දේසිය අසත්ය බව හැගවෙන no වැනි වචනයක් යෙදීමත්ය.
ව්යාජ කේතයක තෝරාගැනීමක් දැක්වීමට
1. If කොන්දේසියක්
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
End If
2. If කොන්දේසියක්
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else
කොන්දේසිය වැරදි විට සිදුවිය යුතු කාර්යය(න්)
End If
3. If කොන්දේසිය
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else If පළමු කොන්දේසිය අසත්යනම් සලකා බැලිය යුතු කොන්දේසිය
එය සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else
සියල්ල අසත්යනම් සිදුවිය යුතු කාර්යය(න්)
End If
යන ආකාරවලින් ලිවිය හැක.
2. පුනර්කරණ (Loops)
පුනර්කරණයක් යනු යම්කිසි කොන්දේසියක් සත්ය තාක්කල් හෝ අසත්ය තාක්කල් පුනර්කරණය තුල ලබා දී ඇති කාර්යය(න්) සිදුකර දෙන කොටසකි. පුනර්කරණයක් දැක්වීම සදහා ක්රම 4ක් යොදා ගනී.
1. Do
command(සිදු විය යුතු දෙයක්)
While Loop Condition(කොන්දේසියක්)
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් සත්ය තාක්කල් Loop වේ.
2. Do While Condition(කොන්දේසියක්)
command(සිදු විය යුතු දෙයක්)
Loop
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කිරීමට පෙර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් සත්ය තාක්කල් Loop වේ.
3. For Variable(විචල්යක්) value(අගයක්) To value(අගයක්)
command(සිදු විය යුතු දෙයක්)
Next
මෙමගින් පුනර්කරණයේදී දී ඇති විචල්යක අගය 1 බගින් වැඩි කරනු ලබයි.නමුත් Step value ලෙස ලිවීම මගින් අපට ආවශ්ය අගයකින් විචල්යයේ අගය අඩු හෝ වැඩි කළ හැක.ඒ අතරතුර අපට අවශ්ය කාර්යයක් කරගත හැක.විචල්යයේ අගය To යන්නට දෙපස ඇති අගයන් අතරමැද අගයක් ගන්නා තාක් කල් Loop වේ.
4. Repeat
command(සිදු විය යුතු දෙයක්)
Until Condition(කොන්දේසියක්)
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් අසත්ය තාක්කල් Loop වේ.
මෙලෙස තෝරාගැනීම් හා පුනර්කරණ පිළිබද වෙනස වටහා ගැනීම විභාග ප්රශ්න වලදී ගැලීම් සටහන් ව්යාජ කේත බවට පත් කිරීමේදී ඉතා වැදගත් වේ.
මෙය වඩාත් හොදින් තේරුම් ගැනීමට පහත සදහන් උදාහරණ සලකා බලමු.
- තෝරාගැනීම් (Selections)
තෝරාගැනීමක් යනු යම්කිසි කොන්දේසියක් දී ඇති විට එහි සත්ය අසත්යතාව මත යම් කිසි කාර්යයක් හෝ කාර්යයන් කරදෙන ආකෘතියකි. එනම් අපට යම්කිසි කොන්දේසියක් හෝ කොන්දේසි කිහිපයක් ලබා දී ඒවා සත්යවිට,අසත්යවිට,එකක් පමණක් සත්යවිට,සියල්ල සත්ය විට,සියල්ල අසත්ය විට වැනි කිහිප අවස්තාවකදී සිදුවියයුතු කාර්යය ලබා දී අදාල ප්රතිදාන හා ක්රියාවලි සිදුකරගත හැකියි.
ගැලීම් සටහනක මෙය යොදන්නේ තීරණ ගැනීමේ (decision) සංකේතය තුල අදාල කොන්දේසිය යොදා ඉන් පිටතට අදාල කොන්දේසිය සත්යනම් සිදුවියයුතු කාර්යය දක්වා යන flow line එකක් යොදා එහි ආරම්හයේ කොන්දේසිය සත්ය බව හැගවෙන yes වැනි වචනයක් ලිවීමත්, කොන්දේසිය අසත්යනම් සිදුවිය යුතු කාර්යය සදහා යොමුවන flow line එකක් දක්වා එහි ආරම්භයේ කොන්දේසිය අසත්ය බව හැගවෙන no වැනි වචනයක් යෙදීමත්ය.
ව්යාජ කේතයක තෝරාගැනීමක් දැක්වීමට
1. If කොන්දේසියක්
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
End If
2. If කොන්දේසියක්
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else
කොන්දේසිය වැරදි විට සිදුවිය යුතු කාර්යය(න්)
End If
3. If කොන්දේසිය
සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else If පළමු කොන්දේසිය අසත්යනම් සලකා බැලිය යුතු කොන්දේසිය
එය සත්යනම් සිදුවිය යුතු කාර්යය(න්)
Else
සියල්ල අසත්යනම් සිදුවිය යුතු කාර්යය(න්)
End If
යන ආකාරවලින් ලිවිය හැක.
2. පුනර්කරණ (Loops)
පුනර්කරණයක් යනු යම්කිසි කොන්දේසියක් සත්ය තාක්කල් හෝ අසත්ය තාක්කල් පුනර්කරණය තුල ලබා දී ඇති කාර්යය(න්) සිදුකර දෙන කොටසකි. පුනර්කරණයක් දැක්වීම සදහා ක්රම 4ක් යොදා ගනී.
1. Do
command(සිදු විය යුතු දෙයක්)
While Loop Condition(කොන්දේසියක්)
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් සත්ය තාක්කල් Loop වේ.
2. Do While Condition(කොන්දේසියක්)
command(සිදු විය යුතු දෙයක්)
Loop
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කිරීමට පෙර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් සත්ය තාක්කල් Loop වේ.
3. For Variable(විචල්යක්) value(අගයක්) To value(අගයක්)
command(සිදු විය යුතු දෙයක්)
Next
මෙමගින් පුනර්කරණයේදී දී ඇති විචල්යක අගය 1 බගින් වැඩි කරනු ලබයි.නමුත් Step value ලෙස ලිවීම මගින් අපට ආවශ්ය අගයකින් විචල්යයේ අගය අඩු හෝ වැඩි කළ හැක.ඒ අතරතුර අපට අවශ්ය කාර්යයක් කරගත හැක.විචල්යයේ අගය To යන්නට දෙපස ඇති අගයන් අතරමැද අගයක් ගන්නා තාක් කල් Loop වේ.
4. Repeat
command(සිදු විය යුතු දෙයක්)
Until Condition(කොන්දේසියක්)
මෙම Loop එක යම් කර්යයක් හෝ කර්යයන් සිදු කර කොන්දේසිය විමසා බලා දී ඇති කොන්දේසියක් අසත්ය තාක්කල් Loop වේ.
මෙලෙස තෝරාගැනීම් හා පුනර්කරණ පිළිබද වෙනස වටහා ගැනීම විභාග ප්රශ්න වලදී ගැලීම් සටහන් ව්යාජ කේත බවට පත් කිරීමේදී ඉතා වැදගත් වේ.
මෙය වඩාත් හොදින් තේරුම් ගැනීමට පහත සදහන් උදාහරණ සලකා බලමු.
7. නිවැරදි ආකාරයෙන් පාර මාරුවන අයුරු දැක්වෙන ඇල්ගොරිතමය
පාර මාරු වීමේදී අප මුලින්ම කරනුයේ පාර දෙපස බලා වාහන නැතිනම් පාර මාරු වීමත්, වාහන තිබේනම් මදක් නැවතී සිට නැවත පාර දෙපස බලා වාහන එනවාදැයි බැලීමය. මෙම ක්රියාවලිය පාර මාරුවන තෙක්ම නැවත් නැවත සිදු කල යුතුය.
ගැලීම සටහන අදින ආකාරය
start යන්නෙන් ගැලීම සටහන ආරම්භ කර, පළමුව ක්රියාවක් දක්වන (process) කොටු සලකුන තුල පදික වේදිකාවට ගමන් කිරිම දැක්විය යුතුය. පසුව කොටු සලකුණක් තුළම පාර දෙපස පරීක්ෂා කිරීම දැක්විය යුතුය. ඉන් පසු පාරේ වාහන ඇත්ද/නැතිද යන්න තීරණය කිරීම දැක්වීමට decision සංකේතය තුළ එය දැක්විය යුතුය. ඉන් පසු පාරේ වාහන නැතිනම් "නැත" හෝ "no" වැනි වචනයක් යොදා එම ස්ථානයෙන් පටන් ගෙන පාර මාරුවීම දක්වන කොටු හැඩය දක්වා flow line එකක් ඇදිය යුතුය. ඉන් පසු එම කොටුවට පහලින් stop යොදා ක්රියාවේ අවසානය දැක්විය හැක. නමුත් එය ගැලීම් සටහන ඇදීමේ අවසානය නොවේ. පාරේ වාහන ඇත්නම් නැවත පාර දෙපස බැලිම හා පාරේ වාහන ඇත්දැයි තීරණය කිරීම කළ යුතුය. ඒ සදහා පෙර ඇදි තීරණය ගැනීමේ සලකුණෙන් පිටතට තවත් flow line එකක් ගෙන එය ඉහලට හරවා නැවත පාර දෙපස බැලීම යන කොටුව තෙක් ඇදිය යුතුය. එහිදී ඊ හිස ඉහලට ඇදීමට තරයේ මතක තබාගත යුතුය. එමෙන්ම තීරණ ගන්නා ස්ථානයෙන් flow line එක ආරම්භ කිරීමේදී පාරේ වාහන ඇති බව දැක්වීමට "ඔව්" / "yes" වැනි වචනයක් යෙදිය යුතුය
ව්යාජ කේතය ලිවීම
ව්යාජ කේතය begin යන්නෙන් ආරම්භ කර පදික වේදිකාවට යාම විශේෂ පද (keyword) රහිතව ලිවිය යුතුය.(ක්රියාවක්/ process බැවින්). අනතුරුව පාරේ වාහන එනවාදැයි පරීක්ෂා කිරීමද සාමාන්ය ආකාරයෙන්ම ලිවිය යුතුය. ඉන් පසු පාරේ වාහන එනවාදැයි තීරණය ගත යුතුය. මෙහිදී එකවරම සිහියට එන්නේ If යන පදයයි. නමුත් මෙය තෝරාගැනීමක් නොව, පුනර්කරණයක් බැවින් ඒ සදහා වූ එක් ආකෘතියක් යොදා ගත යුතුය. මෙහි කාර්යය එක වරක්වත් කිරීමට පෙර තීරණය ගතයුතු නිසා Do while. . . Loop යොදා ගැනීම පහසුය. පළමුව Do while යන්න යොදා කොන්දේසිය ලිවිය යුතුය. එනම් පාරේ වාහන ඇත යන්නයි. එය සත්යනම් මදක් රැදී සිටිමත් , නැවත පාරේ වාහන එනවාදැයි පරීක්ෂා කිරීමත් ඊට පහළින් දැක්විය යුතුය. පසුව Loop යන්න දක්වා පුනර්කරණයේ අවසානය දැක්විය යුතුය. එවිට Loop යන ස්ථානයෙන් පහළ ඇති කේත වෙත යොමු නොවී නැවත Do While ට පසුව ඇති කොන්දේසිය වෙත යොමු වේ. යම් අවස්තාවක කොන්දේසිය අසත්ය වූ විට Do while හා Loop අතර ඇති කේත ක්රියාත්මක නොවීම ඊට පහලින් ඇති කේත ක්රියාතමක වේ. මෙලෙස පුනර්කරණයට පසු කොන්දේසිය අසත්යනම් (පාරේ වාහන නැත්නම්) සිදුවිය යුතු ක්රියාව (පාර මාරු වීම) දැක්විය යුතුය. ඉන් පසු ව්යාජ කේතය අවසාන කළ හැක.
start යන්නෙන් ගැලීම සටහන ආරම්භ කර, පළමුව ක්රියාවක් දක්වන (process) කොටු සලකුන තුල පදික වේදිකාවට ගමන් කිරිම දැක්විය යුතුය. පසුව කොටු සලකුණක් තුළම පාර දෙපස පරීක්ෂා කිරීම දැක්විය යුතුය. ඉන් පසු පාරේ වාහන ඇත්ද/නැතිද යන්න තීරණය කිරීම දැක්වීමට decision සංකේතය තුළ එය දැක්විය යුතුය. ඉන් පසු පාරේ වාහන නැතිනම් "නැත" හෝ "no" වැනි වචනයක් යොදා එම ස්ථානයෙන් පටන් ගෙන පාර මාරුවීම දක්වන කොටු හැඩය දක්වා flow line එකක් ඇදිය යුතුය. ඉන් පසු එම කොටුවට පහලින් stop යොදා ක්රියාවේ අවසානය දැක්විය හැක. නමුත් එය ගැලීම් සටහන ඇදීමේ අවසානය නොවේ. පාරේ වාහන ඇත්නම් නැවත පාර දෙපස බැලිම හා පාරේ වාහන ඇත්දැයි තීරණය කිරීම කළ යුතුය. ඒ සදහා පෙර ඇදි තීරණය ගැනීමේ සලකුණෙන් පිටතට තවත් flow line එකක් ගෙන එය ඉහලට හරවා නැවත පාර දෙපස බැලීම යන කොටුව තෙක් ඇදිය යුතුය. එහිදී ඊ හිස ඉහලට ඇදීමට තරයේ මතක තබාගත යුතුය. එමෙන්ම තීරණ ගන්නා ස්ථානයෙන් flow line එක ආරම්භ කිරීමේදී පාරේ වාහන ඇති බව දැක්වීමට "ඔව්" / "yes" වැනි වචනයක් යෙදිය යුතුය
ව්යාජ කේතය ලිවීම
ව්යාජ කේතය begin යන්නෙන් ආරම්භ කර පදික වේදිකාවට යාම විශේෂ පද (keyword) රහිතව ලිවිය යුතුය.(ක්රියාවක්/ process බැවින්). අනතුරුව පාරේ වාහන එනවාදැයි පරීක්ෂා කිරීමද සාමාන්ය ආකාරයෙන්ම ලිවිය යුතුය. ඉන් පසු පාරේ වාහන එනවාදැයි තීරණය ගත යුතුය. මෙහිදී එකවරම සිහියට එන්නේ If යන පදයයි. නමුත් මෙය තෝරාගැනීමක් නොව, පුනර්කරණයක් බැවින් ඒ සදහා වූ එක් ආකෘතියක් යොදා ගත යුතුය. මෙහි කාර්යය එක වරක්වත් කිරීමට පෙර තීරණය ගතයුතු නිසා Do while. . . Loop යොදා ගැනීම පහසුය. පළමුව Do while යන්න යොදා කොන්දේසිය ලිවිය යුතුය. එනම් පාරේ වාහන ඇත යන්නයි. එය සත්යනම් මදක් රැදී සිටිමත් , නැවත පාරේ වාහන එනවාදැයි පරීක්ෂා කිරීමත් ඊට පහළින් දැක්විය යුතුය. පසුව Loop යන්න දක්වා පුනර්කරණයේ අවසානය දැක්විය යුතුය. එවිට Loop යන ස්ථානයෙන් පහළ ඇති කේත වෙත යොමු නොවී නැවත Do While ට පසුව ඇති කොන්දේසිය වෙත යොමු වේ. යම් අවස්තාවක කොන්දේසිය අසත්ය වූ විට Do while හා Loop අතර ඇති කේත ක්රියාත්මක නොවීම ඊට පහලින් ඇති කේත ක්රියාතමක වේ. මෙලෙස පුනර්කරණයට පසු කොන්දේසිය අසත්යනම් (පාරේ වාහන නැත්නම්) සිදුවිය යුතු ක්රියාව (පාර මාරු වීම) දැක්විය යුතුය. ඉන් පසු ව්යාජ කේතය අවසාන කළ හැක.
Begin
Go to the pavement
Look left and right
Do while there are vehicles in the road
Wait
Look left and right
Loop
Cross the road
End
Go to the pavement
Look left and right
Do while there are vehicles in the road
Wait
Look left and right
Loop
Cross the road
End
8. 1 සිට 10 දක්වා ඉලක්කම් පිලිවෙලින් පෙන්වීමට අදාල ඇල්ගොරිතමය.
මෙවැනි වැඩසටහනක් ලිවීමේදී ප්රතිදානය 10 වතාවක් වැනි කුඩා ප්රමාණයකින් සිදුවන නිසා එක් එක් ප්රතිදානය ලබාදීමට වෙනම කේත ලිවිය හැකි වුවත් විශාල ප්රතිදාන ප්රමාණයක් ලබාදෙන වැඩසටහන් මෙන්ම මෙවැනි වැඩසටහන් පහසු කරගැනීමටද පුනර්කරණ භාවිතා කළ හැක.
මෙහිදී විචල්යයක් සකසා එහි අගය 1 බැගින් වැඩි කරමින් ප්රතිදාන ලබා දීමේ පුනර්කරණයක් මගින් මෙම වැඩසටහන පහසු කරගත හැක. ඒ සදහා වූ ගැලීම් සටහන සලකා බලමු.
මෙහිදී ආරම්භයේදී අප කැමති විචල්යයක් හදුන්වාදී එහි අගය 0ට ආදේශ කර තැබිය හැක. ඉන් පසුව එහි අගය 1 බැගින් වැඩි කිරීම සදහා මෙම ක්රමය අනුගමනය කළ හැක.
විචල්යය = විචල්යය + 1
මෙහි අර්ථය වන්නේ විචල්යයේ අගය ලෙස මෙතෙක් පැවති අගයට 1ක් එකතු කළ පසු ලැබෙන අගය ආදේශ කිරීමයි. මෙහිදී තරයේම මතක තබාගත යුතු වන්නේ මෙහි සමාන (=) ලකුණේ අර්ථය වන්නේ සමාන කිරීම නොව අදේශ කිරීම බවයි. එමෙන්ම සෑම විටම සමාන ලකුණෙන් වම්පස විචල්යයද, සමාන ලකුණෙන් දකුණුපස ආදේශ කරන සංඛ්යාව,වචනය ආදිය ලබා දිය යුතුය. ඉහත ක්රියාවන් දෙකම ක්රියාකාරකම් බැවින් කොටු හැඩය තුළ ලිවිය යුතුය. මෙම ගැලීම් සටහනේ මෙතෙක් ලියා ඇති කොටස් ක්රියාත්මක වීමේදී මේ වනවිට විචල්යයේ අගය 1 (0+1) බවට පත්වී ඇත. දැන් එය ප්රතිදානය කිරීමට අදාල වාක්ය සමාන්තරාස්ර හැඩයක් තුළ ලිවිය යුතුය. එය output/ display විචල්යයේ නම (උදා: display num) ආකාරයෙන් ලිවිය හැක. දැන් මෙම ක්රියාකාරකමම 2,3,4...10 දක්වා ප්රතිදානය වන අයුරින් පුනර්කරනය කල යුතුය. පුනර්කරණයක් පටන් ගැනීමටනම් කොන්දේසියක් දී සිටිය යුතුය. මෙහි කොන්දේසිය විය යුත්තේ ප්රතිදානය කරන අවසාන ඉලක්කම විය යුත්තේ 10යි. ගැලීම සටහනේදී කොන්දේසිය විමසා බැලීමට පෙර කියාවලිය සිදුකරයි. එමනිසා විචල්යයේ අගය 10 ලෙස ප්රතිදානය වීමෙන් පසු කොන්දේසිය විමසා බැලීමේදී කොන්දේසිය අසත්ය වී පුනර්කරණයෙන් ඉවත් විය යුතුය. විචල්යයේ අගය 10 වූ විට අසත්යවන කොන්දේසිය වන්නේ විචල්යය<10 යන කොන්දේසියයි. එමනිසා අපට එය තීරණ ගැනිමේ සංකේතය තුළ ලිවිය හැක. එයින් පිටතට ගලායාම් (flow line) යොදා සත්ය/ yes යන්න යෙදූ ගලායාම විචල්යයේ අගය 1 බැගින් වැඩි කරන ස්ථානයට ඉහළට ඇදිය හැක. අසත්ය/no යන්න යෙදූ ගලායාමෙන් පසුව ගැලීම් සටහන අවසන් කළ හැක.