Thursday, May 26, 2016

c හා c++ ප්‍රෝග්‍රැමිං - 5


පහත දැක්වෙන දෙවන සී ප්‍රෝග්‍රෑම් එකත් ලියා කම්පයිල් කරන්න. මා මෙම සෝස්කෝඩ් එක 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.421x1053.421e+5 හෝ 3.421e5
0.000230 → 2.302x10-42.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;

5 comments:

  1. Thank you. This is the best sinhala tutorial i have ever found. please keep it up...!

    ReplyDelete
    Replies
    1. Welcome Darshana... it's really nice to see people who find my artices useful. Yes, I will continue writing the rest of the lessons on C/C++. Keep in touch.

      Delete