Saturday, March 20, 2010

ප්'සුඩෝ කේත ක්‍රමය (Pseudo Codes)

ප්'සුඩෝ කේත ක්‍රමය ගැන තියෙන මා හට හමු වූ වඩාත් සාර්ථක ම අර්ථ දැක්වීම මෙයයි...,
"Pseudo code is a kind of structured English for describing algorithms. It allows the designer to focus on the logic of the algorithm without being distracted by details of language syntax. At the same time, the pseudo code needs to be complete. It describe the entire logic of the algorithm so that implementation becomes a rote mechanical task of translating line by line into source code."
- wikiAnswers.com

මෙහි තේරුම නම්...,
"ප්'සුඩො කේත ක්‍රමය යනු, ඇල්ගොරිතම පැහැදිලි ලෙස ( ලියා ) දැක්වීම සඳහා යොදා ගනු ලබන, ව්‍යුහගත ඉංග්‍රීසි භාෂා ක්‍රමයකි. මෙමගින්, කේතය ( ප්'සුඩෝ කේතය ) සම්පූර්ණ කිරීමේ අවස්ථාවේදී ම, පරිගණක භාෂාවලට ආවේනික කේත කොටස් වලින් බාධා ඇතිවීම වලකමින්, ඇල්ගොරිතමයේ තර්කය පිළිබඳව පමණක් අවධානය යොමුකිරීමට සැලසුම්කරුවා හට ඉඩ සලසාදෙයි. එය කොතෙක් දුරට ඇල්ගොරිතමයේ ඇති සම්පූර්ණ තර්කය පැහැදිළි කරයි ද කියතොත්, ඇල්ගොරිතමය ස්ථාපනය කිරීම, යාන්ත්‍රික ව ( පුරුද්දෙන් ) සිදු කරනු ලබන, ප්'සුඩෝ කේතය පේලියෙන් පේලිය පරිගණක කේතය බවට පරිවර්තනය කිරීමේ කාර්‍ය්යක් බවට පත් වේ."

මෙම කේත ක්‍රමයේ අරමුණ නම් ඕනෑම පරිගණක භාෂාවකට පොදු වන ලෙස සරලව යම් ඇල්ගොරිතමයක් (හෝ පරිගණක කේත කොටසක් ) ලියා දැක්වීමයි. මෙය ඕනෑම පරිගණක භාෂාවක් ( C++, Java, Phython,..etc. ) දන්නා හෝ භාවිත කරන අයකුට කියවා තේරුම් ගත හැකි පොදු කේත ක්‍රමයක් ( පරිගණක භාෂාවලින් ස්වායක්ත ) වන අතර මෙහිදී මෙම කේත වලින් ලියනු ලබන්නේ "තාර්කික කොටස" ( ඇල්ගොරිතමය ) පමණි.

යම් පරිගණක භාෂාවක් භාවිත කරන අයකු මෙම ප්'සුඩෝ කේත වලින් ලියන ලද කේත කොටස එම අදාල භාෂාවකින් ලිවීමේදී එම භාෂාවට ම ආවේනික වූ යම් යම් වෙනත් ( ඇල්ගොරිතමයට අදාල නොවන ) කේත කොටස් ද භාවිත කිරීමට, ඔහුට සිදුවනු ඇත.

උදා :-
Pseudo Code
---------------------------------------------------------------------
a ← 7
b ← 5
IF a > b THEN
PRINT “A is Greater”
­---------------------------------------------------------------------

Implementation on Java
---------------------------------------------------------------------
class test {

public static void main (String args[]){
int a = 7, b = 5;

if (a > b)
System.out.println(“A is Greater”);

}

}
---------------------------------------------------------------------

Implementation on C++
---------------------------------------------------------------------
#include <iostream>
using namespace std;

int main (){
int a = 7 , b = 5;

if (a > b)
cout << “A is Greater”;
return 0;
}
---------------------------------------------------------------------

ඉහත උදාහරණ වලදී "class, public static void main (String args[]), #include <iostream> , using namespace std; ...etc." ආදී කේත කොටස් එම Java සහ C++ යන පරිගණක භාෂා වලටම ආවේනික කේත කොටස් ව ඇති බව වැටහෙනු ඇත.
තර්කය / ඇල්ගොරිතමය, පරිගණකයක් තුළ ස්ථාපනය (implementation) කිරීමේදී මෙසේ, ප්'සුඩෝ කේතය පරිගණක භාෂාවකට පරිවර්තනය කරනු ලැබේ.
සාමාන්‍යයෙන් සලකනු ලබන්නේ ප්'සුඩෝ කේත ලිවීමට නිශ්චිතම වශයෙන් ක්‍රමයක් නැති බවයි.එය ලිවිය යුත්තේ තමාට හැකි තරම් සරල ( පහසු ) ලෙසයි. මෙහිදී තමා කැමති ක්‍රමයක් ( සම්පූර්ණ වාක්‍ය ලිවීම , තමාට පහසු අංකන ක්‍රමයක් යොදාගැනීම් , කරුණු වශයෙන් ලිවීම්... ) භාවිත කළ හැක.නමුත් ප්'සුඩෝ කේත සම්බන්දයෙන් හඳුනාගත් සම්මත ලක්ෂණ කීපයක් ඇත. මෙම සම්මත ලක්ෂණ 6 : SEQUENCE , WHILE , IF-THEN-ELSE , REPEAT-UNTIL , FOR හා CASE ලෙස නම් කළ හැක. මෙම සම්මත ලක්ෂණ පිලිබදව වැඩිදුර කරුණු Pseudocode Standard : වෙබ් පිටුවෙන් ලබාගත හැක.

"No standard for pseudo code syntax exists, as a program in pseudo code is not an executable program. Flowcharts can be thought of as a graphical alternative to pseudo code."
- en.Wikipedia.org

මෙහි අදහස...,
"ප්'සුඩෝ කේත ක්‍රමය මගින් ලියූ ඇල්ගොරිතම යනු ක්‍රියා කරන පරිගණක වැඩසටහන් නොවන නිසා, ප්'සුඩෝ කේත සඳහා සම්මත අංකනයක් නොමැත. "ගැලීම් සටහන්" (Flowcharts) යනු මෙම ප්'සුඩෝ කේත සඳහා හොඳ රූපමය ආදේශකයක් ලෙස හැඳින්විය හැක."

Saturday, March 13, 2010

ඇල්ගොරිතම : හැඳින්වීම (Algorithms : an Introduction)

ඇල්ගොරිතම ගණිතයේත් තියෙනවා.. ඒත් අපි දැන් කතා කරන්නෙ පරිගණක විද්‍යාවෙදි භාවිත වන ඇල්ගොරිතම ගැන.

" Computer algorithms
In computer systems, an algorithm is basically an instance of logic written in software by software developers to be effective for the intended "target" computer(s), in order for the software on the target machines to do something "
- en.Wikipedia.org

ඒ කියන්නේ,
" අපේක්ශිත ලෙස, ඉලක්කකොටගත් පරිගණක තුළ, ඵලදායී ලෙස ක්‍රියා කිරීම සඳහා, මෘදුකාංග නිර්මාණකරුවන් විසින් මෘදුකාංගයක් තුළ ලියනලද තාර්කිකමය කොටසක්(an instence) , මූලික වශයෙන් පරිගණක පද්ධතියකදී, ඇල්ගොරිතමයක් යනුවෙන් හැදින්වේ. "

සරලව කිව්වොත්, මේ ඇල්ගොරිතම කියන්නෙ අපි යම් දෙයක් කරනකොට ඒ දේ කරන පිලිවෙලටයි.

අපි හිතුවෙ නැති උනාට අපේ මොලයෙන් මේ වගේ දේවල් ගොඩාක් කෙරෙනවා, අපි නොදැනුවත්වම. එත් ඒක අපිට දැනෙන්නෙ බොහෝම සරල විදිහට. මොකද කිව්වොත් සාමන්‍ය මිනිසෙකුගේ මොලයක් උනත් ඒතරම්ම වේගවත්.. කාර්යක්ශමත්..

අපි උදාහරණයක් බලමු..,

පුද්ගලයෙක් උදේම ගෙදරින් එලියට එනව. අහස දිහා බලනව. වහින පාටක් තීනව නම් කුඩයක් අරන් යනව. නැත්නම් කුඩේ දාල යනව.

මේ සිද්ධිය හරියටම බැලුවොත් මේ වගේ,

අහස කළු කරල ඒ නිසා අද වහින දවසක්. කුඩේ අරන් යන්න ඕනෙ.
අහස ගොඩාක් පායලා ඒ නිසා අද හවසට වහින්න පුලුවන්. කොකටත් කුඩේ අරන් යන්න ඕනෙ.
අද අහස සාමාන්‍යයි ඒ නිසා අද කිසිම වහින පාටක් නෑ. අද කුඩේ ගෙනියන්න ඕනෙ වෙන්නෙ නෑ.

අපි මේක පරිගණකයට දැනෙන විදිහකට ලිව්වොත්...,

IF අහස කළු කරල THEN
අද වහින දවසක්. කුඩේ අරන් යන්න ඕනෙ.
ELSE IF අහස ගොඩාක් පායලා THEN
අද හවසට වහින්න පුලුවන්. කොකටත් කුඩේ අරන් යන්න ඕනෙ.
ELSE
අද කිසිම වහින පාටක් නෑ. අද කුඩේ ගෙනියන්න ඕනෙ වෙන්නෙ නෑ.

අපි තව උදාහරණයක් බලමු..,

සාමාන්‍ය පුද්ගලයෙක්, ගෙදර තියෙන තේ කොළ ප්‍රමාණය ගොඩක් අඩු ( ග්‍රැම් 10ක් විතර ) උනාම, තේ කොළ ගේන්න කඩේටයනවා.
ගිහින්, තමන් හමදාමත් ගන්න ජාතියෙන් තේ කොළ ඉල්ලනවා. ඒව ඉවර වෙලා. දැන් එයා මොකද කරන්නේ...?
තියෙන්නෙ මොන ජාතියේ ඒවද කියල බලනවා. අතේ තියෙන මුදල හා ඒ තේ කොළ වර්ගයේ ගුණාත්මක භාවය ගැන හිතල තියෙන

තේ කොළ ජාතියක් අරන් ගෙදර එනව.

මේ සිද්ධිය බොහෝම සංකීර්ණ සිද්ධියක්...
ඒක සරලව ලිව්වොත් මේ වගෙ..,

WHILE තේ කොළ ප්‍රමාණය < ග්‍රැම්10
කඩයට ගොස් සුපුරුදු තේ කොළ වර්ගය ඉල්ලීම
IF සුපුරුදු තේ කොළ වර්ගය නැත THEN
තිබෙන තේ කොළ වර්ග විමසීම.
ඒවා තම දැනුම, මතකය හා බුද්ධිය අනුව සැසඳීම.
එක් වර්ගයක් තොරාගෙන මිලදී ගැනීම.
ELSE
සුපුරුදු තේ කොළ වර්ගය මිලදී ගැනීම.

මෙතනදි අරන් තියෙන්නෙ තමන් යන්නෙ එක කඩයකට විතරයි කියලයි. ඒ වගේම වෙනත් තේ කොළ වර්ගයක් තෝරාගන්න ක්‍රමය දක්වල තියෙන්නෙ එක වාක්‍යකින් බොහොම සරලව. ඒත් ඒක ගොඩක් සංකීර්ණ වැඩක්.එතනදි මතකය, බුද්ධිය, පෙර ලබාගත් දැනුම වගේම ඒ පුද්ගලයාගේ අත්දකීම් ඉතා සංකීර්ණ විදිහට ක්‍රියාත්මක වෙනව.. ඒ වගේම ඒ ප්‍රදේශයේ කඩවල් පිහිටා තියෙන ආකාරය අනුව, පුද්ගලයාගේ එම අවස්ථාවේ මානසිකත්වය අනුව, කාලගුණය අනුව මේ කාර්යය වෙනස් වෙනව. ඒ වගේම ඒ ක්‍රියාවලිය පුද්ගලයා අනුව (ඔහුගේ සිතීමේ රටාව අනුව ) වෙනස් වෙනව. තවත් මේකට බලපාන වෙනත් හේතු තියෙනවත් ඇති. ඉතින් ඒක ඇත්තටම ඇල්ගොරිතමයකින් ලියන්න බරි තරම් සංකීර්ණ සිද්දියක්. ඉතින් මේ වගේ බලද්දි ඔබට තේරෙනව ඇති ඇල්ගොරිතමයක් කියන්නෙ මොන වගේ දෙයක්ද කියල...
ඒ වගේම තේරෙනව අති අපේ මොලය කොච්චර කාර්යක්ශම විදිහට මේ වගේ ඉතා සංකීර්ණ ඇල්ගොරිතම රාශියක් බොහොම අපූරුවට සැහල්ලුවෙන් ක්‍රියාත්මක කරන හැටිත්..