තවත් අපූරු ඡන්දයක් නිම විය. එය කරුණු රැසක් නිසා අපූර්ව වේ. සමහරු කියන පරිදි රදලයන්ගේ දේශපාලනයේ අවසානයක් (තාවකාලිකව හෝ) ඉන් සිදු විය. වැඩ කරන ජනයාගේ, නිර්ධන පංතියේ නායකයෙකු හා පක්ෂයක් බලයට පත් වීමද සුවිශේෂී වේ. රටේ මෙතෙක් සිදු වූ සකල විධ අපරාධ, දූෂන, භීෂන සොයා දඩුවම් කරනවා යැයි සමස්ථ රටවැසියා විශ්වාස කරන පාලනයක් ඇති විය. තවද, බහුතර කැමැත්ත නැති (එනම් 43%ක කැමැත්ත ඇති) ජනපතිවරයකු පත් විය. ජවිපෙ නායකයෙක් "තෙරුවන් සරණයි" කියා පැවසීමත් පුදුමය. මේ සියල්ල ලංකා ඉතිහාසයේ පලමු වරට සිදු වූ අපූරු දේශපාලන සංසිද්ධි වේ. මාද විවිධ හේතුන් මත අනුරට විරුද්ධව මෙවර තර්ක විතර්ක, සංවාද විවාද, හා "මඩ" යහමින් ගැසූ තත්වයක් මත වුවද, ඔහු දැන් රටේ ජනපති බැවින් ඔහුට පලමුව සුබ පතමි. ඔහුට විරුද්ධව වැඩ කලත්, මා (කිසිදා) කිසිදු පක්ෂයකට හෝ පුද්ගලයකුට කඩේ ගියේද නැති අතර අඩුම ගණනේ මාගේ ඡන්දය ප්රකාශ කිරීමටවත් ඡන්ද පොලට ගියෙ නැත (ජීවිතයේ පලමු වරට ඡන්ද වර්ජනයක). උපතේ සිටම වාමාංශික දේශපාලනය සක්රියව යෙදුනු පවුලක හැදී වැඩී, විප්ලවවාදි අදහස්වලින් මෙතෙක් කල් දක්වා සිටි මා පලමු වරට සාම්ප්රදායික (කන්සර්වටිව්...
පහත
දැක්වෙන දෙවන සී ප්රෝග්රෑම්
එකත් ලියා කම්පයිල් කරන්න.
මා මෙම
සෝස්කෝඩ් එක num_display.c යන
නමින් සේව් කර, gcc num_display.c
-o num_display.exe මඟින්
ටර්මිනලය මත කම්පයිල් කළා.
ඉන්පසු
ප්රෝග්රෑම් එක සේව් වී තිබෙන
ෆෝල්ඩර් එක ටර්මිනලයේ ඕපන්
කරගෙන, ./num_display.exe ලෙස
ටයිප් කර එන්ටර් කළ විට,
ප්රෝග්රෑම්
එක රන් වේවි. මෙම
කුඩා ප්රෝග්රෑම් එකෙන්
කරන්නේ ඔබ විසින් ඇතුලු කරන
යම් සංඛ්යාවක වර්ග පදය ගණනය
කර දර්ශනය කිරීමයි. පහත
රූපය බලන්න. එහි
Enter a number: ලෙස
දක්වාවි (ඒ
කියන්නේ කුමක් හෝ සංඛ්යාවක්
කීබෝඩ් එකෙන් ටයිප් කරන්න
කියාය).
දැන්
ඔබ 12 හෝ
142 හෝ
කුමන හෝ සංඛ්යාවක් ඇතුලු
කරන්න. එවිට,
පහත රූපයේ
ආකාරයට එහි වර්ගය ඔබට පෙන්වාවි.
මෙම ප්රෝග්රෑම්
එක පළමුවෙන් සාදපු එකට වඩා
තරමක් දියුණුයි. ඔබෙන්
යම් දත්තයක් ලබාගෙන යම් ගණනය
කිරීමක්ද සිදු කර, එම
ගණනය කරපු තොරතුරයි මින්
දර්ශනය කරන්නේ.
පරිගනක
ප්රෝග්රෑම් එකක් යනු පියවරෙන්
පියවර නිශ්චිත කාරණයක් බැගින්
සිදු කරන්න යැයි දෙන ලද උපදෙස්
(instructions) හෙවත්
විධාන (commands) හෙවත්
ප්රකාශ (statements)
ගොන්නකි.
භාවිතා කරන
පරිගනක භාෂාව අනුව එම උපදෙස්
දීමට යොදා ගන්නා වචන හා එම
උපදෙස් දෙන ආකාරය වෙනස් විය
හැකියි. ඉහත
උදාහරණ දෙකෙහිම printf යන
වචනය සෝස්කෝඩ්වල ඔබට දක්නට
ලැබෙනවා. එය
සී භාෂාවේ භාවිතා කෙරෙන
විධානයකි. printf ට
පසුව වරහනක් (parenthesis) තුල
කුමක් හෝ ලිවිය හැකියි.
එයද ලියන්නේ
උඩු කොමා (quotation marks හෙවත්
quotes) තුලයි.
ඉතිං,
මෙලෙස ලියූ
විට ඉන් සිදු කරන්නේ කන්සෝල්
තිරය මත වරහන් හා උඩු කොමා
ඇතුලේ ඔබ ලියපු දේ දර්ශනය
කිරීමයි. ඒ
අනුව printf(“Hello World!”) ලෙස
ලියූ විට Hello World! යන්න
තිරයේ දිස් වේවි. ඉහත
උදාහරණවල ඊට අමතරව තවත් උපදෙස්
ගණනාවක් පේනවා නේද?
ඒවායෙනුත්
කුමක් හෝ රාජකාරියක් සිදු
කරනවා.
ඉහත
උදාහරණ දෙස හොඳින් බලන්න.
එම ප්රෝග්රෑම්වල
උපදෙස් ගණනාවක් පේලි වශයෙන්
ලියා ඇත. ඔබ
එම ප්රෝග්රෑම් රන් කරන විට,
එය ක්රියාත්මක
කරන්නේ කුමන පේලියේ සිටද?
සී වලදී
හැමවිටම දෙන ලද උපදෙස් ක්රියාත්මක
වන්නේ main() යන්න
හමුවන තැන සිටයි. ඒ
කියන්නේ සෑම සී ප්රෝග්රෑම්
එකක් සඳහාම main()
අත්යවශ්යයෙන්ම
ලිවිය යුතුයි. තවත්
හොඳින් බැලූ විට, main() ට
පසුව { } යන
සඟළ වරහනක් (curling bracket හෙවත්
curls) ඇත.
එම සඟළ වරහන
තුළ තමයි ප්රෝග්රෑම් එක
රන් වන විට ක්රියාත්මක වන
විධාන ලියා තිබෙන්නේ.
ඒ
කියන්නේ යම් සී ප්රෝග්රෑම්
එකක් රන් වන විට, පළමුවෙන්ම
main එක
තුල තිබෙන පළමු පේලිය/විධානය
ක්රියාත්මක වෙනවා.
ඉන්පසු
දෙවැනි විධානය, තෙවැනි
විධානය ආදී ලෙස එහි ඇති අවසන්
විධානය දක්වා පිළිවෙලින්
ක්රියාත්මක වෙනවා.
අවසන් විධානය
ක්රියාත්මක වීමෙන් පසුව
ඉබේම ප්රෝග්රෑම් එක රන්
වීමත් අවසන් වෙනවා.
ඔබ
යම්කිසි ප්රෝග්රෑම් එකක්
සාදනවා යනු යම් යම් දත්ත
(data) මත
යම් යම් "සිදු
කිරීම්" හෙවත්
කර්මයන් (operations) කිරීමයි.
ඒ අනුව,
ප්රෝග්රෑම්
එකක් සඳහා මූලික අංග දෙක වන්නේ
දත්ත හා කර්මයන් වේ.
ඩේටා (දත්ත)
ප්රෝග්රෑම්
එකට අවශ්ය දත්ත දෙයාකාරයකින්
ලබා දිය හැකියි.
1. ප්රෝග්රෑම්
එක සාදන මෙහොතේම ප්රෝග්රැමර්
විසින් එහි ඇතුලත් කර තිබෙන
දත්ත
2. ප්රෝග්රෑම්
එක රන් වන මොහොතේ එය රන් කරන
යූසර් විසින් ඊට ලබා දෙන දත්ත.
සමහරවිට
යූසර් කෙනෙකු නොව යම් කිසි
විද්යුත් උපකරණයකින් (සර්කිට්
එකකින්) දත්ත
ඊට ලබා දෙන පරිදිද ප්රෝග්රෑම්
සකස් කළ හැකියි.
මේ
දෙයාකාරයේම දත්ත අපට ඉහත
උදාහරණ දෙකෙහිදී හමු වූවා.
පළමු උදාහරණයේදී
printf(“Hello World!”) යන්නෙහි
ඇති Hello World! යනු
දත්තයකි. එම
දත්තය ප්රෝග්රෑම් එක කෝඩිං
කරන විටම ප්රෝග්රැමර් විසින්
ඊට ඇතුලත් කර ඇත. එහෙත්
දෙවැනි උදාහරණයේදී ඔබට සිදු
වූවා ප්රෝග්රෑම් එක රන් වන
අතරේදී කිසියම් සංඛ්යාවක්
ඇතුලු කිරීමට. මෙයත්
දත්තයකි.
ග්ලෝබල් හා ලෝකල් ඩේටා
ඉතිං,
ප්රෝග්රෑම්
එකක් තුළ (ඉහත
දෙයාකාරයේම) දත්ත
ගබඩා කර තබා ගත යුතුය.
සමහර දත්ත
ප්රෝග්රෑම් එක රන් කරපු
මොහොතේ සිට එය අවසන් වන මොහොත
දක්වාම ගබඩා කර ගනී. මේවා
global data ලෙස
හඳුන්වමු (ග්ලෝබල්
යන ඉංග්රිසි වදනෙහි තේරුම
ගෝලීය හෙවත් “පුරා පැතිරී
පවතින” යන්නයි). සමහර
දත්ත ප්රෝග්රෑම් එක රන් වන
මුලු කාලය පුරාම නොව,
තාවකාලිකව
කුඩා කාලයක් තුල පමණක් ගබඩා
කර ගනී. මේවා
local data ලෙස
හඳුන්වමු (ලෝකල්
යන ඉංග්රිසි වදනෙහි තේරුම
ස්ථානීය හෙවත් “සීමිත” යන්නයි).
සී ලැංවේජ්
එකේ ලෝකල් හා ග්ලෝබල් ඩේටා
සාදා ගන්නා අයුරු පසුව සලකා
බලමු.
මේ
සියලු දත්ත පරිගනකයේ මෙමරිය
(රැම්
එක) තුලයි
පවතින්නේ. ප්රෝග්රැමිං
පැත්තෙන් ගත් කළ, මෙමරිය
යනු ඉතා සීමිත හා ඉතා වටිනා
සම්පතකි. එනිසා
එහි ඉඩකඩ (space) පුලුවන්
තරම් අඩුවෙන් භාවිතා කළ යුතුය.
ඒ සඳහා හොඳ
ප්රෝග්රැමර්ස්ලා විසින්
යොදා ගන්නා උපක්රම ඇත.
ඉන් එකක්
නම්, හැකි
තරම් ග්ලෝබල් ඩේටා අඩුවෙන්
භාවිතා කිරීමයි. ග්ලෝබල්
ඩේටා වෙනුවට හැකි හැමවිටම
ලෝකල් ඩේටා භාවිතා කළ යුතුය.
තවද,
ප්රෝග්රෑම්
එක භාවිතයට නොගන්නා ඩේටා
බොරුවට ගබඩා කරගෙන තබා නොගත
යුතුයි.
වේරියබල් හා කොන්ස්ටන්ට්
තවත්
ආකාරයකින් දත්ත දෙවර්ගයකි
- කොන්ස්ටන්ට්
හා වේරියබල්. සමහර
දත්ත ප්රෝග්රෑම් එක තුළ
නොවෙනස්වන දත්තයක් ලෙස පවතිනවා
ප්රෝග්රෑම් එක රන් වී අවසන්
වන තුරුම. මෙවැනි
දත්ත නියත (constant) ලෙස
හැඳින්වෙනවා. හැමවිටම
වාගේ කොන්ස්ටන්ට් දත්ත ග්ලෝබල්
වේ. ඉහත
උදාහරණවල printf() තුළ
තිබූ Enter a number, Hello World! වැනි
දත්ත ඇත්තටම කොන්ස්ටන්ට් වේ.
අනෙක් දත්ත
වර්ගය ප්රෝග්රෑම් එක රන්
වන කාලය තුල වරින් වර වෙනස්
විය හැකියි. ඒවා
විචල්ය (variable) ලෙස
හැඳින්වෙනවා. ඉහත
දෙවැනි උදාහරණයේ num1 ලෙස
දක්වා තිබෙන්නේ වේරියබල්
එකකි. වේරියබල්
දත්ත ලෝකල් හා ග්ලෝබල් යන
දෙයාකාරයෙන්ම පැවතිය හැකියි.
ප්රෝග්රෑම්වලදී
විතරක් නොවේ, වෙනත්
ඕනෑම දෙයක් සම්බන්ධයෙන්ද ඉහත
දත්ත දෙවර්ගය තිබෙනු ඔබට දැක
ගත හැකියි. උදාහරණයක්
ලෙස, ඔබේ
නම සාමාන්යයෙන් කොන්ස්ටන්ට්
එකකි මොකද එම නම ඔබට දැමූ වෙලාවේ
සිට ජීවිත කාලය පුරාම නොවෙනස්ව
පවතින නිසාය. එහෙත්
ඔබේ බැංකු ගිණුමේ මුදල් ප්රමාණය
හෝ ඔබේ බර ආදී දත්ත වරින්වර
වෙනස් වේ - එනම්
එම දත්ත විචල්ය දත්ත වේ.
ප්රෝග්රෑම්වලදී
අපට යොදා ගන්නට සිදු වන දත්ත
වර්ග ගැන මඳක් කල්පනා කර බලමු.
ඒවා විවිධාකාර
වේ. සමහර
දත්ත 12, 1.34, 0 වැනි
සංඛ්යාත්මක (numeric) වේ.
සමහර දත්ත
a, name වැනි
අක්ෂර (alphabetic හෝ
letters) වේ.
තවත් සමහර
දත්ත ශබ්ද (audio), රූප
(graphics), වීඩියෝ
(video) වැනි
binary data වේ
(සාමාන්යයෙන්
බයිනරි දත්තයක් සඳහා අනෙක්
දත්ත වර්ගයන්ට වඩා අතිවිශාල
බයිට් ප්රමාණයක් අවශ්ය
කෙරෙනවා; රූපයක්
හෝ සිංදුවක් හෝ වීඩියෝ එකක්
සඳහා විශාල ඉඩක් අවශ්ය බව
ඉතිං අමුතුවෙන් කිව යුතු
නැහැනෙ). මේ
සෑම ආකාරයකම දත්ත ප්රෝග්රෑම්
එකක් තුල පැවතිය හැකියි.
ඉහත ඕනෑම
ආකාරයක දත්ත වර්ගයක් සමග
ගනුදෙනු කිරීමට ප්රෝග්රැමිං
ලැංවේජ් එක විසින් හැකියාව
ලබා ගන්නේ වේරියබල් හා කොන්ස්ටන්ට්
යන දෙක මඟින්ය.
සෑම
ලොකු කුඩා දත්තයක්ම ගබඩා වන්නේ
මෙමරිය තුළ බව ඔබ දැන් දන්නවා.
මෙමරිය යනු
විදුලි සර්කිට් එකකි.
මෙමරිය තුළ
දත්ත ගඩබා කිරීමට හැකියි හරියට
හෝටලයක ඇති කාමර තුළ අමුත්තන්ට
රැඳී සිටින්නට හැකියාව තිබෙනවා
සේම. ඔව්,
මෙමරිය හෝටල්
කාමරවලට උපමා කළ හැකියි.
හෝටලයේ සෑම
කාමරයකටම ඇඩ්රස් එකක් තිබෙන්නා
සේ, මෙමරිය
තුළ තිබෙන සෑම "කාමරයකටමත්"
අනන්ය
ඇඩ්රස් එකක් ඇත. ඉතිං
ප්රෝග්රෑම් එක කරන්නේ යම්
දත්තයක් මෙමරියේ යම් හිස්
කාමරයක රඳවා, එම
කාමරයේ ඇඩ්රස් එක මතක තබා
ගැනීමයි. එවිට,
එම ඇඩ්රස්
එකෙන් ප්රෝග්රෑම් එකට
හැකියාව ලැබෙනවා එම කාමරයේ
ගබඩා කළ දත්තය හසුරුවන්න
(මෙහිදී
හසුරුවනවා යනු, එම
කාමරයේ තිබෙන දත්තය කියවීම,
එම දත්තය
මැකීම, එම
දත්තය වෙනස් කිරීම වේ).
මුල්ම
කාලයේ (බයිනරි
ලැංවේජ් එකේදී) ප්රෝග්රැම්
කිරීමේදී ඇත්තටම ප්රෝග්රැමර්
විසින් මෙලෙස මෙමරි ඇඩ්රස්
සමග ඍජුව ගනුදෙනු කළා.
එහෙත් තාක්ෂණය
හා දැනුම දියුණු වූ විට පෙනී
ගියා මෙලෙස ඍජුවම මෙමරි ඇඩ්රස්
සමග ගනුදෙනු කිරීමට වඩා පහසු
ක්රමයක්. ඒ
තමයි අප මේ කතා කරමින් සිටින
වේරියබල් හා කොන්ස්ටන්ට්.
මෙහිදී සිදු
කරන්නේ මෙමරි ඇඩ්රස් එකක්
වෙනුවට යම් නමක් (label)
භාවිතා
කිරීමයි. මෙහි
විශාල වාසි ඇත. එකක්
නම්, 0x129f2492a4 වැනි
ඉලක්කම්වලින් දක්වන මෙමරි
ඇඩ්රස් සමග ගනුදෙනු කරනවාට
වඩා num1, age වැනි
ඉංග්රිසි වචන සමග ගනුදෙනු
කිරීම කොතරම් පහසුවක්ද?
තවත් කරුණක්
නම්, මෙම
මෙමරි ඇඩ්රස් එක ප්රෝග්රෑම්
එක රන් කරන සෑම වාරයක් පාසාම
වෙනස් වෙනවා. එහෙත්
ඇඩ්රස් එක වෙනස් වුවත් ලේබල්
එක වෙනස් නොවන නිසා ප්රෝග්රැමර්ට
එම වෙනස් වන ඇඩ්රස් එක ගැන
විමසිල්ලෙන් ඉන්නට අවශ්ය
නැත (විමසිල්ලෙන්
සිටිමින්, ඇඩ්රස්
එක වෙනස් වුවත් එම වෙනස් වූ
ඇඩ්රස් එක ඊට අදාල ලේබල් එකට
ගැලපීම මෙහෙයුම් පද්ධතිය
විසින් සිදු කරනවා ඔබට නොදැනීම).
තවත් වාසි
ඇත (මෙම
අවශේෂ කරුණු ගැන ඔබ දැන සිටීම
අත්යවශ්ය නොවන නමුත්,
ඔබට ඒවා
දැනගැනීමට අවශ්යම නම් ඒ ගැන
සොයා බලන්න).
ඒ
අනුව, වේරියබල්
හා කොන්ස්ටන්ට් යනු මෙමරි
ඇඩ්රස්වලට දාපු නම්/ලේබල්
ලෙස සැලකිය හැකියි. මෙය
හරියට ඔබේ දුරකතනයේ ෆෝන්බුක්
එක වාගේ එකක්. මතක
තබා ගැනීමට අමාරු අංක වෙනුවට
මතක තබා ගැනීමට පහසු නමක්/ලේබල්
භාවිතා කරන්නටයි එහිදී තිබෙන්නේ.
ඔබ සාමාන්යයෙන්
ඇමතුමක් ගන්නේ ෆෝන්බුක් එකේ
තිබෙන ෂර්මිලා හෝ නිශාන්ත
වැනි නමක් තෝරාගෙනය. එම
නම සාමාන්යයෙන් වෙනස් නොවේ.
එහෙත් එම
පුද්ගලයා කලින් කලට ඔහුගේ
දුරකතන අංකය වෙනස් කර ගන්නට
ඉඩ තිබෙනවා (එවිට
එම වෙනස ෆෝන්බුක් එකේද සිදු
කරනවානෙ). එනිසා
අංකය වෙනස් වුවත් දිගටම එකම
ලේබල්/නම
භාවිතා කර කෝල් ගන්න පුලුවන්කම
ලැබෙනවා.
දැන්
අපි බලමු කොහොමද සී වල වේරියබල්
එකක් සකස් කර ගන්නේ කියා.
විවිධ වර්ගයේ
දත්ත සඳහා දත්ත වර්ග (data
type) ගණනාවක්ම
සී හි අර්ථ දක්වා තිබෙනවා.
සෑම ඩේටා
ටයිප් එකක් සඳහාම මෙමරියේ
යම් නිශ්චිත ඉඩ ප්රමාණයක්
(බයිට්
ගණනක්) හිමි
කර ගන්නවා. බයිට්
ගණන නිශ්චිත නිසා, සෑම
ඩේටා ටයිප් එකක් සඳහාම ඊට ගත
හැකි අවම හා උපරිම අගයකුත්
පවතිනවා. පහත
වගුවේ දැක්වෙන්නේ සී වල පවතින
ඩේටා ටයිප් වේ.
ඩේටා
ටයිප්
|
බයිට්
ගණන
|
අගය
පරාසය
|
char | 1 | අන්සයින්ඩ්:
0 සිට 255 සයින්ඩ්: -128 සිට +127 |
short | 2 | අන්සයින්ඩ්:
0 සිට 65535 සයින්ඩ්: -32768 සිට +32767 |
int | 2 හෝ 4 | |
long | 4 | අන්සයින්ඩ්:
0 සිට
4,294,967,295 සයින්ඩ්: -2,147,483,648 සිට +2,147,483,647 |
float | 4 | 1.2E-38 සිට
3.4E+38 දශමස්ථාන 6ක් දක්වා නිවැරදිය |
double | 8 | 2.3E-308 සිට
1.7E+308 දශමස්ථාන 15ක් දක්වා නිවැරදිය |
void | - | - |
උදාහරණයක්
ලෙස short යන
දත්ත වර්ගය බයිට් 2ක්
හෙවත් බිට් 16ක
මෙමරි ඉඩක් ලබා ගන්නවා.
ඒ කියන්නේ
ෂෝට් දත්ත වර්ගයට හැකියි 216
= 65536 ක වෙනස්
වෙනස් අගයන් ලබා ගන්නට.
ඒ කියන්නේ
short ඩේට්
ටයිප් එකට ලබා ගත හැකි වන්නේ
අවම අගය 0 හා
උපරිම අගය 65535 යන්න
නේද? ඊට
පිළිතුර ඔව් හා නැහැ යන දෙකම
වේ. ඒ
ගැන දැන් මඳක් විමසමු.
සටහන
බයිට්
(byte) 1ක්
යනු බිට් (bit) 8 කි.
සාමාන්යයෙන්
බයිට් යන්න කෙටියෙන් කැපිටල්
බී (B) අකුරෙනුත්
බිට් යන්න සිම්පල් බී (b)
අකුරෙනුත්
සංඛේතවත් කරනවා. ඒ
අනුව ඔබ 200B ලෙස
දුටුවොත් ඉන් කියන්නේ බයිට්
200ක්
(හෙවත්
බිට් 1600ක්)
බවත්,
512b දුටුවොත්
ඉන් කියන්නේ බිට් 512ක්
(හෙවත්
බයිට් 64ක්)
බවත් මතක
තබා ගන්න.
බිට්
යනු ද්ව්යාංගික (binary)
වේ. ඒ
කියන්නේ ඊට ගත හැක්කේ 0
හෝ 1
යන අගයන්
දෙකෙන් එකක් පමණි. එනිසා,
එක බිට්
එකකින් වෙනස් වෙනස් අගයන්
2ක්
දැක්විය හැකියි - එම
අගයන් දෙක වන්නේ එක්කො 0
නැතහොත් 1
වේ (හරියට
එය “එක කාසියකින්” නෝනා හෝ
පොල්ල යන අගයන් දෙකෙන් එකක්
ලබා ගන්නවා වාගේ). ඊට
අප කියනවා බිට් 1කට
සංයෝජන (combination) 2ක්
පවතින බව. බිට්
2ක්
ඇති විට, එම
බිට් දෙකට ගත හැකි අගයන් වෙනස්
කිරීමෙන් වෙනස් ආකාර 4ක්
ලබා ගත හැකියි - 00, 01, 10, 11
යනුවෙන්.
ඒ කියන්නේ
බිට් 2කට
සංයෝජන 4ක්
ගත හැකියි. බිට්
3ක්
ඇති විට, 000, 001, 010, 011, 100, 101, 110,
111 යන විවිධ
සංයෝජන 8ක්
ගත හැකියි.
මේ
ලෙස ඕනෑම බිට් ගණනක් දී ඇති
විට ඉන් ලබා ගත හැකි සංයෝජන
ගණන සෙවීමට 2n යන
සරල සූත්රය භාවිතා කළ හැකියි
(මෙහි
n යනු
බිට් ගණනයි). ඒ
අනුව බිට් 1ක්
ඇති විට 21 = 2 ද,
බිට් 2ක්
සඳහා 22 = 4 ද,
බිට් 3ක්
සඳහා 23 = 8 ද
නිවැරදිය ලැබෙනවා නේද?
බිට් 8ක්
ඇති විට 28 = 256 ද,
බිට් 10
කදී 210
= 1024 ද,
බිට් 16කදී
216 = 65536 ද
බව පෙනේ. (ඇත්තටම
ඉහත විශේෂිත සංයෝජන අවස්ථා
මතක තබා ගන්න.)
සටහන
ඉහත
ආකාරයට දී ඇති බිට් ගණනට තිබෙන
මුලු සංයෝජන ගණන පහසුවෙන්
සෙවිය හැකියිනෙ. ඉතිං
දැන් ඔබට පුලුවන් එම එක් එක්
සංයෝජනයකින් ඉලක්කමක් හෝ
ඉංග්රිසි අකුරක් හෝ වෙනත්
සංඛේතයක් නියෝජනය කරන්නට.
උදාහරණයක්
ලෙස, අපි
ගමු බිට් 8ක්
හෙවත් බයිට් 1ක්.
එහි 01000001
යන සංයෝජනය
ඉංග්රිසි A අකුර
නියෝජනය කරනවා යැයි සම්මත කර
ගත හැකියි. B = 01000010, C = 01000011
ආදී ලෙස
සියලු ඉංග්රිසි අකුරු (කැපිටල්
අකුරු 26ත්,
සිම්පල්
අකුරු 26ත්)
නියෝජනය කළ
හැකියි. මෙලෙස
බිට් සංයෝජන මඟින් අක්ෂර
නියෝජනය කිරීම mapping හෝ
encoding ලෙස
හඳුන්වමු. බිට්
8කින්
විවිධ සංයෝජනය 256ක්
සෑදිය හැකි නිසා බිට් 8ක්
හොඳටම ප්රමාණවත් සම්පූර්ණ
ඉංග්රිසි හෝඩියම මැප් කිරීමට
හෙවත් එන්කෝඩ් කිරීමට.
ඉතිං ඉංග්රිසි
අක්ෂර නිරූපණය සඳහා ලෝකය පුරාම
සම්මතයක් වශයෙන් භාවිතා කරන්නේ
ASCII ලෙස
හැඳින්වෙන එන්කෝඩිං ක්රමය
වන අතර, ඉංග්රිසිද
ඇතුලුව ලොව අනෙකුත් භාෂාවන්ගේ
අක්ෂර නිරූපණය සඳහා Unicode
කියන සම්මත
එන්කෝඩිං ක්රමය භාවිතා වේ.
ඇස්කී,
යුනිකෝඩ්,
හා පොදුවේ
එන්කෝඩිං ගැන අතිරේක පාඩමින්
වැඩි දුරටත් ඉගෙන ගන්න.
ඉංග්රිසි
අකුරු පමණක් නොව, පරිගනකවල
භාවිතා වන සෑම දත්තයක්ම මෙලෙස
කිසියම් එන්කෝඩිං ක්රමයකින්
දැක්විය යුතුමයි. ඒ
කියන්නේ සංඛ්යා/අගයන්
පවා මෙලෙස එන්කෝඩ් කළ යුතුයි.
උදාහරණයක්
වශයෙන් ඔබ අප 157 යැයි
පවසන අගය පරිගණකයේ තිබිය
යුත්තේ කෙසේද? ඔබ
දන්නවා පරිගනකයේ සෑම දත්තයක්ම
පවතින්නේ 0 හා
1 ආකාරයෙනි
(බයිනරි
ආකාරයෙන්). ඒ
කියන්නේ කිසියම් එන්කෝඩිං
ක්රමයක් දැන් අවශ්යයි 157
යන්න 0
හා 1
හි කිසියම්
සංයෝජනයක් වශයෙන් දක්වන්නට.
සංඛ්යා/අගයන්
එන්කෝඩ් කිරීමටත් එන්කෝඩිං
ක්රම ගණනාවක් තිබෙන අතර ඒ
ගැන වැඩි විස්තර අතිරේකයේ පළ
වේ. මේ
ක්රම අතරින් සරලතම එන්කෝඩිං
ක්රමය මා දැන් කෙටියෙන්
පෙන්වන්නම්. සංඛ්යාවන්
0 සිට
ඉහලට ආරෝහණ පිළිවෙලට (0,
1, 2, 3, 4, ... ආදී
ලෙස) සකස්
කරමු. තවද
යම් සංඛ්යාවක් නිරූපණය කිරීමට
(එන්කෝඩ්
කිරීමට) බිට්
16ක්
යොදා ගන්නවා යැයිද සිතමු.
දැන් මෙම
එකිනෙකට වෙනස් සංයෝජන 0000
0000 0000 0000 සිට
එකින් එක පිළිවෙලින් වැඩි වන
ලෙසට 1111 1111 1111 1111 දක්වා
සකස් කරමු. ඉන්පසු
පිළිවෙලින් 0 සිට
ඇති අගයන් මෙම සංයෝජනයන්ට
ආදේශ කරමු.
0000 0000 0000 0000
= 0
0000 0000 0000 0001
= 1
0000 0000 0000 0010
= 2
0000 0000 0000 0011
= 3
.…
1111 1111 1111 1101
= 65533
1111 1111 1111 1110
= 65534
1111 1111 1111 1111
= 65535
ඉහත
පෙනෙන පරිදි බිට් 16ක්
ගතහොත් ඉන් නිරූපණය කළ හැකි
අගය පරාසය වන්නේ 0 සිට
65535 දක්වාය.
ඔබ ගත්තේ
බිට් 8ක්
නම්, 0 සිට
255 දක්වා
අගය පරාසය ඉන් නිරූපණය කළ
හැකියි. ඔබට
143,422 යන
අගය නිරූපණය කිරීමට බිට් 16ක්
ප්රමාණවත් නැහැ නේද?
ඒ සඳහා අවම
වශයෙන් බිට් 18ක්
අවශ්ය කෙරේ.
තවද,
සංඛ්යා
නිරූපණය කිරීමට මා ඉහත යොදා
ගත් සරල එන්කෝඩිං ක්රමයෙන්
බැහැ ඍණ සංඛ්යා නිරූපණය
කරන්නට. ඍණ
සංඛ්යාද නිරූපණය කිරීමට
අවශ්ය නම්, වෙනත්
එන්කෝඩිං ක්රමයක් යොදා ගැනීමට
සිදු වේ (අතිරේකය
බලන්න). ධන-ඍණ
භේදයක් නොමැතිව සංඛ්යා (පූර්ණ
සංඛ්යා) නිරූපණය
කළ හැකිවා සේම, ධන-ඍණ
භේදය සහිතවද සංඛ්යා නිරූපණය
කළ හැකි බව දැන් ඔබට වැටහෙනවා.
ධන-ඍණ
භේදය නොසලකා හරින සංඛ්යා
නිරූපණයක් unsigned ලෙසද,
ධන-ඍණ
භේදය පවතින සංඛ්යා නිරූපණයක්
signed ලෙසද
හැඳින්වෙනවා.
මේ
අනුව, අන්සයින්ඩ්
සංඛ්යා දත්තයකදී අවම අගය 0
වන වන අතර
උපරිම අගය තීරණය වන්නේ එය
එන්කෝඩ් කිරීමට යොදා ගන්නා
බිට් ගණන අනුවයි. උදාහරණයක්
ලෙස, බිට්
16ක්
ගන්නේ නම්, උපරිම
අගය 65535 වන
අතර, බිට්
8ක්
ගන්නේ නම් උපරිම අගය 255
වේ (උපරිම
අගය හැමවිටම 2n-1 වේ).
එහෙත්,
සයින්ඩ්
සංඛ්යා දත්තයකදී, දී
ඇති බිට් ගණනින් සකස් කළ හැකි
සංයෝජන ප්රමාණයෙන් හරි අඩක්
ධන සංඛ්යා සඳහාද, අනෙක්
අඩ ඍණ සංඛ්යා නිරූපණය කිරීම
සඳහාද යොදා ගන්නවා. ඒ
අනුව අවම හා උපරිම අගය යන දෙකම
තීරණය වන්නේ යොදා ගන්නා බිට්
ගණන අනුවයි. උදාහරණයක්
ලෙස, සයින්ඩ්
සංඛ්යා නිරූපණය සඳහා බිට්
16ක්
උපයෝගී කර ගන්නවා නම්,
දළ වශයෙන්
ඉන් -32768 සිට
+32767 දක්වා
නිරූපණය කළ හැකි වෙනවා.
එන්කෝඩිං
ගැන අතිරේකයේ විස්තර බලා
ගැඹුරට ඒ ගැන ඉගෙන ගත හැකියි.
ඉහත
සටහන් කියවූ පසු, ඉහත
ප්රශ්නයට පිළිතුර දැන් සිතා
ගත හැකියි. බිට්
16කින්
සංඛ්යා නිරූපණය කරන්නට
ගියොත්, එම
සංඛ්යා අන්සයින්ඩ් ක්රමය
නම් අනුගමනය කරනනේ, එවිට
0 සිට
(216 – 1) හෙවත්
65535 යන
අගය පරාසය ලැබේ. එහෙත්
එම බිට් ප්රමාණයම යොදා ගන්නේ
සයින්ඩ් සංඛ්යා නිරූපණයක්
සඳහා නම්, දළ
වශයෙන් එම බිට් ගණනින් සාදා
ගත හැකි සංයෝජන ගණනින් හරි
අඩක් සලකා, එම
අඩක් වන සේ ගත් සංඛ්යාවේ ඍණ
අගයේ සිට ධන අගය දක්වා පරාසයක්
ගත යුතුය. එවිට,
බිට් 16
මඟින් සාදා
ගත හැකි සංයෝජන ගණන වන 65536න්
හරි අඩක් වන 32768 සොයා
ගත් විට, දළ
වශයෙන් -32768 සිට
+32768 දක්වා
අගය පරාසයක් ඉන් නිරූපණය කළ
හැකිය. එලෙසම
බිට් 8ක්
යම් සංඛ්යාවක් නිරූපණය කිරීමට
ගතහොත්, අන්සයින්ඩ්
ක්රමයේදී ඉන් 0 සිට
256 දක්වා
අගයන්ද, සයින්ඩ්
ක්රමයේදී ඉන් -128 සිට
+128 දක්වාද
නිරූපණය කළ හැකියි.
ප්රායෝගික
කරුණක් මෙහිදී සිහිපත් කිරීමට
වටී. ඉහත
වගුවේ දත්ත පරාස (උපරිම
හා අවම අගයන්) දී
ඇත්තේ 100%ක්ම
නිවැරදිවයි. එහෙත්
එම අගයන් එලෙසම මතක තබා ගැනීම
අත්යවශ්ය නොවේ යැයි මා
කල්පනා කරනවා (විශේෂයෙන්
බයිට් 2කට
වඩා ඉඩ ලබා ගන්නා දත්ත වර්ග
සඳහා). එම
අගයන් දළ වශයෙන් මතක තබා ගැනීම
ප්රමාණවත්. උදාහරණයක්
ලෙස, බයිට්
2ක්
ලබා ගන්නා ෂෝට් දත්ත වර්ගයේ
අන්සයින්ඩ් අගය පරාසය මා මතක
තබා ගන්නේ "බිංදුවේ
සිට හැටපන්දහස් ගණනක් දක්වා"
කියාය.
එහිම සයින්ඩ්
පරාසය "තිස්දහස්
ගණනක්" යනුවෙනුයි
මතක තබා ගන්නේ (ඍණ
තිස්දහස් ගණනක සිට ධන තිස්දහස්
ගණනක් යන්න ඉබේම ඉන් හැඟවේ).
මෙහි මතක
තබා ගැනීමේ පහසුව මෙන්ම තරමක
ආරක්ෂාවක්ද ඇත. උදාහරණයක්
ලෙස, අන්සයින්ඩ්
ෂෝට් වර්ගය හැටදහස් ගණනක්
දක්වා අගයක් ලබා ගත හැකියි
යැයි සිතූ විට එහි උපරිම අගය
දළ වශයෙන් 60,000 කියා
හැඟවේ. එහෙත්
එහි සත්ය උපරිම අගය මීට තරමක්
වැඩිය (එනම්
65535 වේ).
එවිට බැරිවෙලාවත්
අප යොදා ගන්නා දත්තයේ අගය
තරමක් ඉහල ගියත් ඊට ඔරොත්තු
දීමට එම දත්ත වර්ගයට හැකියි
නේද? (මෙය
අපේ එදිනෙදා වැඩ කටයුතු වලදී
"එලවන්ස්"
එකතු කරනවා
වැනි වැඩකි; උදාහරණයක්
ලෙස, අහවල්
දේ කිරීමට රුපියල් ලක්ෂයක්
වැය වේ යනුවෙන් ගණන් හැඳූ පසු,
ඊට අමතරම
තවත් යම්කිසි මුදලක් වැඩිපුර
එකතු කරන්නේ බැරිවෙලාවත් එම
වියදම විවිධ හේතු නිසා වැඩි
වුවොත් ඊට ඔරොත්තු දීමටනෙ;
යම් ගමනක්
සඳහා වැඩිපුර යම් කාලයක් එකතු
කරන සිරිතක්ද තිබෙනවානෙ;
මඟුල් ගේක
ආරාධිතයන් ගණනට වඩා කෑම ප්ලේට්
සාදන්නෙත් වැඩි ආරක්ෂාවටනෙ).
ඔබට
පෙනෙනවා ඉහත වගුවේ සංඛ්යා
නිරූපණය සඳහා char, short, int,
long ආදී ලෙස
දත්ත වර්ග කිහිපයක්ම අර්ථ
දක්වා තිබෙනවා. ඊට
හේතුව කුමක්ද? එක්
ඩේටා ටයිප් එකක් විතරක් තිබුණොත්
මදිද? ඊට
සරල පිළිතුරක් තිබේ.
ප්රෝග්රෑම්
එකක් තුළ ඔබට ගනුදෙනු කරන්නට
සිදු වන සංඛ්යා සියල්ලම එක
වගේ නොවේ. උදාහරණයක්
ලෙස, ප්රෝග්රෑම්
එක තුළ පුද්ගලයකුගේ වයස ගබඩා
කර ගැනීමට අවශ්ය යැයි සිතමු.
ඔබ දන්නවා
කෙනෙකු බොහොම කලාතුරකින්
තමයි අවුරුදු 100 ඉක්මවා
ජීවත් වන්නෙත්. ඉතිං
එවැනි දත්තයක් ගබඩා කිරීමට
එක බයිට් එකක් පමණක් ප්රමාණවත්
නේද (මොකද
බයිට් එකක 0 සිට
255 දක්වා
අගයක් නිරූපණය කළ හැකියි)?
මේ සඳහා
short හෝ
long දත්ත
වර්ගය වුවද යොදා ගතද හැකියි.
උදාහරණයක්
ලෙස, ලෝං
දත්ත වර්ගය භාවිතා කළොත්,
ඒ සඳහා බයිට්
4ක්
වැය වේ (0 සිට
බිලියන 4 පමණ
අගය පරාසයක් එහි ගබඩා කළද
හැකිය). ඉතිං
අපරාදේ වැඩිපුර බයිට් 3ක්
ඒ සඳහා වැය වී තිබෙනවා නේද?
මා පෙරත්
පවසපු ලෙසම, මෙමරියේ
ඉඩ යනු ඉතාම වටිනා සම්පතකි.
ඉතිං විවිධ
වර්ගයේ සංඛ්යාවන් ගබඩා කිරීමට
විවිධ ප්රමාණයේ දත්ත වර්ග
කිහිපයක් අර්ථ දක්වා තිබේ.
ඒ අනුව char
වර්ගයේදී
බයිට් 1ක්ද,
short වර්ගයේදී
බයිට් 2ක්ද,
long වර්ගයේදී
බයිට් 4ක්ද
ලබා ගනී.
char, short, long,
int යන දත්ත
වර්ගවලින් නිරූපණය කළ හැක්කේ
පූර්ණ සංඛ්යා (whole numbers)
හෙවත් නිඛිල
(integers) පමණි.
දශමස්ථාන
සහිත සංඛ්යා නිරූපණය කිරීමට
ඉන් නොහැකිය. මෙහිනුත්
int දත්ත
වර්ගය ගැන අමුතුවෙන් දැනගත
යුතු දෙයක් ඇත. අනෙක්
දත්ත වර්ගවලට නිශ්චිතවම බයිට්
ගණනක් දැක්කුවත් හැමවිටම
වාගේ ඉන්ට් දත්ත වර්ගයට හරියටම
නිශ්චිතවම එලෙස බයිට් ගණනක්
කියන්නේ නැත. සමහර
පරිගනක සඳහා එය බයිට් 2ක්
විය හැකි අතර තවත් පරිගනකවල
එය බයිට් 4කි.
ඒ කියන්නේ,
බයිට් 2ක්
වන විට, ඉන්ට්
දත්ත වර්ගයයි ෂෝට් දත්ත වර්ගයයි
100%ක්ම
සමාන වන අතර, බයිට්
4ක්
ගන්නා විට ඉන්ට් දත්ත වර්ගයයි
ලෝං දත්ත වර්ගයයි 100%ක්ම
සමාන වේ. ඉන්ට්
විසින් ලබා ගන්නා බයිට් ගණන
ඇත්තටම තීරණය වන්නේ පරිගනකයේ
සවිකර ඇති CPU හෙවත්
මයික්රොප්රොසෙසරය මතයි
(එනිසා
ප්රෝග්රැමර් වශයෙන් ඔබට
එහි කළ හැක්කක් නැත).
වර්තමානයේ
භාවිතා වන සියලුම පරිගනකවල
එය බයිට් 4 වේ.
ඉන්ට් යන්නෙහි
අමතර වාසි නැති නිසා (අවිනිශ්චිත
බව පමණයි ඇත්තේ) මා
යෝජනා කරනවා එය වෙනුවට හැවිටම
ෂෝට් හෝ ලෝං යන දත්ත වර්ග දෙකෙන්
එකක් යොදා ගන්නා ලෙසට.
දශම
සංඛ්යා සඳහායි float හා
double යන
දත්ත වර්ග දෙක ලබා දී තිබෙන්නේ.
මේවා හැමවිටම
සයින්ඩ් වේ (එනම්
ධන ඍණ භේදය ඇත). ඉන්
ෆ්ලෝට් දත්ත වර්ගයට බයිට්
4ක්ද
ඩබ්ල් දත්ත වර්ගයට බයිට් 8ක්ද
වැය වේ. එනිසා
හැකි හැමවිට ෆ්ලෝට් දත්ත වර්ගය
භාවිතා කිරීමට උත්සහ ගන්න.
ෆ්ලෝට්
වර්ගයට හැකියි 10-38
වැනි ඉතාම
කුඩා අගයක (මෙම
අගය යනු 0.000 000 000 000 000 000 000 000
000 000 000 000 01 යන
ඉතාම කුඩා අගයයි) සිට
1038 වැනි
ඉතා විශාල අගයක් (මෙම
අගය 100, 000 000 000 000 000 000 000 000 000 000
000 000 යන්නයි)
දක්වා අගය
පරාසයක් ගබඩා කර ගන්න.
ඉතිං මෙවැනි
අතිවිශාල අගය පරාසයක් දක්වන්නට
හැකිව තිබියදී කුමකටද ඩබ්ල්
යන දත්ත වර්ගය? ඊට
හේතු ඇත.
සටහන
342100 යන
සංඛ්යාව සම්මත ආකාරයෙන්
(standard notation) ලියන
විට 3.421x105 ලෙසද,
0.0002302 යන
සංඛ්යාව සම්මත ආකාරයෙන්
ලියන විට 2.302x10-4 ලෙසද
ලිවිය හැකි බව පාසැලේ ගණිත
විෂයේදී ඔබ ඉගෙන තිබෙනවා.
සම්මත ආකාරය
එලෙස ලියන විට තරමක් අපහසුයි
මොකද ඉහලට කුඩාවට ඉලක්කම්
ලිවීමට සිදුවෙනවානෙ.
ඉතිං එම
අපහසුතාව මඟ හැරීමට පරිගනක
(හා
තාක්ෂණ) විෂයේදී
සම්මත ආකාරය ලියන තවත් ආකාරයක්
සාදා ගෙන තිබෙනවා. එහිදී
x ට වම්
ඇත පැත්තේ කොටස එලෙසම ලියා,
x වෙනුවට e
හෝ E
ලියා ඉන්පසු
එම ඊ අකුරට දකුණු පසින් 10හි
පවතින දර්ශක අගය ලිවිය යුතුය.
ඒ අනුව ඉහත
සම්මත ආකාරයන් පහත දැක්වෙන
අයුරින් දිස් වේ.
342100 → 3.421x105
→ 3.421e+5 හෝ
3.421e5
0.000230 →
2.302x10-4 → 2.302e-4
බලන්න
ඉහත වගුවේ සඳහන් කර තිබෙනවා
ෆ්ලෝට් යන්න දශමස්ථාන 6ක්
දක්වා නිවැරදි වේ යනුවෙන්.
එහෙත් ඔබට
ඊට වඩා දශමස්ථාන ගණනක් නිවැරදි
විය යුතු විට, ඩබ්ල්
භාවිතා කිරීමට සිදු වෙනවා.
තවද,
කිසියම්
හේතුවක් නිසා, ඔබට
ෆ්ලෝට් දත්ත වර්ගයේ පරාසයද
ඉක්මවා යන දත්ත ගබඩා කිරීමට
අවශ්ය විටද අනිවාර්යෙන්ම
ඩබ්ල් යන්න යොදා ගැනීමට සිදු
වෙනවා. ඇත්තටම
දශමස්ථාන සහිත සංඛ්යා සමග
ගනුදෙනු කිරීම ඉක්මනින් සිදු
කිරීමට පරිගනකයේ බොහෝවිට ඒ
සඳහාම වූ ඉලෙක්ට්රොනික්
සර්කිට් එකක් (චිප්
එකක්) පවා
තිබෙනවා. පැරණි
පරිගනකවල නම් මෙම චිප් එක
(හෙවත්
අයිසී එක) ප්රධාන
සීපීයූ චිප් එකට ආසන්නයේ
විශාලව තිබුණත්, නූතන
පරිගනකවල මෙම චිප් එක සීපීයූ
එක තුළම ඇතුලත් කර තිබෙන නිසා
එය පිටතින් දිස් වන්නේ නැත.
ඩේටා
ටයිප් ගැන තවදුරටත් සලකා බැලිය
යුතු විස්තර ඉදිරියේදී හමුවේවි.
දැන් අපි
බලමු කොහොමද සී ප්රෝග්රෑම්
එකක් තුළ තොරතුරු ගබඩා කරගැනීම
සඳහා ප්රායෝගිකව වේරියබල්
සාදන්නේ කියා. ප්රෝග්රෑම්
සෑදීමේදී නිතරම කිරීමට සිදු
වන දෙයක් තමයි වේරියබල් සෑදීම.
ඒ සඳහා පළමුව
ඉහත වගුවේ සඳහන් යම් දත්ත
වර්ගයක නම ලියා, ඊට
පසුව වේරියබල් නේම් එක සඳහා
ඔබ කැමති නමක් ලබා දෙන්න.
short my_variable1;
ඉහත
උදාහරණයේ පෙන්වා තිබෙන්නේ
ෂෝට් ඩේටා ටයිප් එකේ my_variable1
යන නමින්
(ලේබල්
එකෙන්) සාදා
ගත් වේරියබල් එකකි. මෙහිදී
සැලකිලිමත් විය යුතු කරුණු
පහත දැක්වේ. වේරියබල්
නේම් එකට ඔබට කැමති නමක් ලිවිය
හැකියි (පහත
කොන්දේසිවලට යටත්ව).
1. අනිවාර්යෙන්ම
සියලුම ඩේටා ටයිප් සිම්පල්
අකුරින් ලිවිය යුතු අතර,
එම ඩේටා
ටයිප්වල නම් ඉහත වගුවේ සඳහන්
කර ඇති ලෙසටම ස්පෙලිං නොවරදවාම
ලිවිය යුතුය.
2. ඩේටා
ටයිප් එකට පසුව ඇති ලේබලය/නම
ලියන විට එහි පළමු අකුර
අනිවාර්යෙන්ම ඉංග්රිසි
අකුරක්, හෝ
_ (මෙම
සලකුණ අන්ඩර්ස්කෝර් -
underscore ලෙස
හැඳින්වේ) විය
යුතුය. එම
පළමු අකුරට පසුව ලිවිය හැක්කේ
ඉංග්රිසි අකුරු හෝ ඉලක්කම්
හෝ අන්ඩර්ස්කෝර් පමණි.
3. සී
භාෂාවේ අභ්යන්තර ප්රයෝජනය
සඳහා වෙන්කරගෙන ඇති වචන
(keywords) වේරියබල්
නම් කිරීමට යොදා ගත නොහැකියි.
එම කීවර්ඩ්ස්
පහත දැක්වේ. ඇත්තටම
මෙම සම්මත කීවර්ඩ්ස් හැරුණු
විට, තවත්
වචන තිබිය හැකියි. ඒ
ගැන සැලකිලිමත් වන්න.
auto | break | case | char | const |
continue | default | do | double | else |
enum | extern | float | for | goto |
if | int | long | register | return |
short | signed | sizeof | static | struct |
switch | typeof | union | unsigned | void |
volatile | while |
4. නම
අකුරු 31කට
වඩා දිගු නොවිය යුතුය.
එහෙත් පුලුවන්
තරම් හොඳ නමක් ලිවීමට උත්සහ
කරන්න. එනම්,
වේරියබල්නේම්
එක දැක්ක ගමන්, ඉන්
කුමක් කරන්නේද (ගබඩා
කර ගන්නේද) යන්න
වැටහෙන පරිදි නමක් ලබා දෙන්න.
5. එකම
ලේබලය/නම
එම ප්රෝග්රෑම් එක තුළ තවත්
එකක් සඳහා ලබා දිය නොහැකිය
(ඒ
කියන්නේ නම අනන්ය විය යුතුය).
ඇත්තටම
ඉහත වේරියබල් නේම් එක සඳහා
පනවපු කොන්දේසී එලෙසම වලංගු
වෙනවා ඔබ පසුවට ඉගෙන ගන්නා
ෆන්ක්ෂන්, කොන්ස්ටන්ට්,
ස්ට්රක්චර්
යන ඒවා සෑදීමේදි. එනම්,
ෆන්ක්ෂන්
එකක් සාදන විට නමක් දිය යුතුය;
කොන්ස්ටන්ට්
එකක් සඳහාද නමක් දිය යුතුය;
ස්ට්රක්චර්
සෑදීමේදීත් නමක් දිය යුතුය.
මේ ආදී ලෙස
ඔබ විසින් නමක් ලබා දිය යුතු
දේවල් සී ප්රෝග්රෑම්වල ඇත.
මේ සියලු
අවස්ථාවලදී ඉහත කොන්දේසි
අනුගමනය කරමින් සුදුසු නමක්
ලබා දිය යුතු වෙනවා. එනිසා
මේ වේරියබල් නේම්, ෆන්ක්ෂන්
නේම්, ආදී
සියලු නම්/ලේබල්
identifier යන
පොදු වචනයෙන් හැඳින්වෙනවා.
ඒ අනුව ඉහත
දක්වා තිබෙන්නේ අයිඩෙන්ටිෆයර්
සාදන විට පිළිපැදිය යුතු
රීති/කොන්දේසි
වේ.
ඉහත
ආකාරයට වේරියබල් එකක් සාදා
ගැනීම variable declaration කියා
හැඳින්වෙනවා. සමහරවිට
එයම variable definition කියාද
හැඳින්විය හැකියි (ඇත්තටම
මෙවැනි සරල වේරියබල් සම්බන්ධයෙන්
ගත්විට වේරියබල් ඩෙක්ලරේෂන්
හා වේරියබල් ඩෙෆිනිෂන් යන
දෙකෙහි වැඩි වෙනසක් නැත;
එහෙත් පසුවට
ඉගෙන ගන්නා structure වැනි
සංයුක්ත/සංකීර්ණ
දත්ත වර්ගවලදී මේ දෙකෙහි යම්
වෙනසක් ඇත).
හැමවිටම
වේරියබල් ඩෙක්ලරේෂන් එකක්
ලියා, අවසානයේ
; යන
සෙමිකෝලන් (semicolon) එකක්
ලිවිය යුතුමය. ඇත්තටම,
මෙතැන පමණක්
නොව, සී
ප්රෝග්රෑම් එකක් තුළ ලියන
සෑම කමාන්ඩ් එකක්ම අවසාන
කරන්නේ සෙමිකෝලන් එකකින්ය.
සී කම්පයිලරය
අහවල් කමාන්ඩ් එක අවසන් වූවා
යැයි හඳුනාගන්නේ මෙම සෙමිකෝලන්
එක උපකාරයෙනි. ඒ
අනුව පහත දැක්වෙන්නේ නිවැරදිව
ලියා ඇති වේරියබල් ඩෙක්ලරේෂන්
කමාන්ඩ්/ස්ටේට්මන්ට්
කිහිපයකි.
char age;
int length;
int width;
int depth;
long
distance_to_sun;
float loan_amount;
අවශ්ය
නම්, එකම
ඩේටා ටයිප් එකේ ඩෙක්ලරේෂන්
කිහිපයක් එකම පේලියකින්
(ස්ටේට්මන්ට්
එකකින්) ඩික්ලෙයාර්
කළ හැකියි. උදාහරණයක්
ලෙස, ඉහත
length, width, depth යන
වේරියබල් 3ම
එකම වර්ගයට අයත් නිසා,
වෙන වෙනම
ස්ටේට්මන්ට් 3කින්
ඒවා ඩික්ලෙයාර් කරනවා වෙනුවට
පහත ආකාරයට තනි ස්ටේට්මන්ට්
එකකින් එය සිදු කළ හැකියි.
මෙවිට,
වේරියබල්
නේම් කොමා මඟින් වෙන් කරන්න.
int length, width,
depth;
තවද,
පහත දැක්වෙන්නේ
වැරදි වේරියබල් ඩෙක්ලරේෂන්
ස්ටේට්මන්ට් කිහිපයකි.
බලන්න මේ
සෑම එකකදීම වේරියබල් නේම් එක
ඉහත සඳහා කුමක් හෝ කොන්දේසියක්
කඩ කර තිබේ. පළමු
නම පටන්ගන්නේ ඉලක්කමකින්ය.
දෙවැන්න
පටන් ගන්නේ ඩෑෂ් එකෙන්ය
(අන්ඩර්ස්කෝර්
එකෙන් පටන් ගත හැකි වුවත්,
ඩෑෂ් එකෙන්
නමක් පටන් ගත නොහැකිය).
තෙවැන්නෙහි
වේරියබල් නේම් එක අතරමැද
ස්පේස් එකක් තිබේ.
සිව්වැන්නෙහි
නම අකුරු 31කට
වඩා දිගය.
int 23abc;
int -var1;
short var 2;
long
this_name_is_absurdly_and_unncessarily_long_just_for_fun;