Lesson 3 C programming - Arduino Myanmar

Breaking

Open Arduino for Myanmar

Friday, June 15, 2018

Lesson 3 C programming


Lesson 3
Simple C program with Integer(int)and Variable (Memory Location)


1 #include<stdio.h>
2 #include<conio.h>
3
4 int main(void) {
5   int number1 = 0;
6   int number2 = 0;
7   int total = 0;
8   printf_s("Please enter first number:\n");
9   scanf_s("%d", &number1);
10  printf_s("Please enter second number:\n");
11  scanf_s("%d", &number2);
12  total = number1 + number2;
13  printf_s("Total number is %d\n",total);
14  
15  _getch();
16  return 0;
17 }
             Line number 1,2,3,4 က ကြ်န္ေတာ္ အရင္ သင္ခန္းစာေတြ မွာ ရွင္းထား ျပီးသားျဖစ္တဲ့ အတြက္ အခု line number 5 ကေနျပီးေတာ့ စရွင္းပါမယ္ ခင္ဗ်ာ။ Line number 5 မွာ int number1=0; ဆိုျပီးေတာ့ ေရးထားပါတယ္ သူ႕မွာ ရွင္းျပ ရမယ့္ အခ်က္ ၂ ခ်က္ ရွိပါတယ္..int ဆိုိတဲ့ integer  data type ရယ္ number1 ဆိုတဲ့ variable ရယ္ ျဖစ္ပါတယ္…Integer data type ကို မရွင္းခင္မွာ ကြ်န္ေတာ္တို႕ေတြ တစ္ခု သိထားဖို႕လိုပါတယ္ အဲဒါကေတာ့ What are integers? Integer ဆိုတာ ဘာလဲေပါ့..Integer ဆိုတာကို မသိခင္ Natural Numbers နဲ႕ Whole Numbers ေတြ ကို သိဖို႕လိုပါတယ္……..Natural Numbers ဆိုတာကေတာ့ 1,2,3,4,5… etc တို႕ျဖစ္ပါတယ္…Whole Numbers ေတြကေတာ့ 0,1,2,3,5,……..စ သည္တို႕ျဖစ္ပါတယ္…….integer ဆိုတာကေတာ့ အေပါင္းကိန္းျပည့္ေတြ ေရာ အႏုတ္ကိန္းျပည့္ေတြေရာ သုည ေရာပါမွာ ျဖစ္ပါတယ္………. …..,-3,-2,-1,0,1,2,3,……စသည္တို႕သည္ integers မ်ားျဖစ္ပါတယ္…… ..,-3,-2,-1 စသည္တို႕သည္ negative integers မ်ားျဖစ္ပါတယ္…. 1,2,3,….စသည္တို႕သည္ positive integers မ်ားျဖစ္ပါတယ္……. Zero(0) ကေတာ့ Neither Positive Nor Negative ျဖစ္ပါတယ္ခင္မ်ာ…. ရႈပ္သြားရင္ ေအာက္က ပံုေလးမွာ math concept ေလးနဲ႕ ေဖာ္ျပထားပါ တယ္…..

               Computer programming ဘက္ကေန သြားပါမယ္…… Data type ေတြမွာဆိုရင္ Standard C အရ အေျခခံ data type ေလးခုရွိပါ တယ္…int , char , float , double  ရယ္ျဖစ္ပါတယ္။ 

data type 4 မ်ိဳးမွာ သူရဲ႕ ကိုယ္ပိုင္ ကိုင္တြယ္ျပီး သိုေလွာင္ တြက္ခ်က္ နိုင္တဲ့ ပမာဏ တန္ဘိုးရွိပါတယ္

  ….ေအာက္က ပံုေလးကို တစ္ခ်က္ျကည့္ေပးပါ….

                     Integer data type ကို မရွင္းခင္မွာ bit နဲ႕ byte ကို ကြဲျပားစြာ သိထားဖို႕လို ပါတယ္ bit ဆိုတာက binary digit ကို ေျပာတာပါ binary ဆိုတာကေတာ့ 01 base 2 number system ကိုေျပာတာ ပါ..byte ကေတာ့ unit of digit Information ကို ေျပာတာပါ သူကေတာ့ digit ေတြရဲ႕ unit ပါ…. 1 byte မွာ 8bit ရွိပါတယ္ ကြ်န္ေတာ္တို႕ အခု ေျပာသြားမွာက 32 bit ပါ 32 bit ဆိုတာ 2 to the power 32 ကိုေျပာတာပါ (ပံုထဲမွာျကည့္ေပးပါ).. အဲေတာ့ 2 to the power 32 ၇ဲ႕ တန္ဖိုးဟာ 4294967259 ျဖစ္ပါတယ္..
ဒါေပမယ္ ကြ်န္ေတာ္တို႕က သူ႕ကို အေပါင္းကိန္းရယ္ အႏုတ္ကိန္းရယ္ ယူ ခ်င္တာပါ ထို႕ေျကာင့္ 32 ထဲကေန 1 နုတ္ေပးရပါတယ္….အဲဒါဆိုရင္ 2 power က 31ျဖစ္သြားျပီး သူ႕ တန္ဖိုးက 214748367 ျဖစ္ပါတယ္…… Positive integer ရယ္  negative integer ရယ္ ျပန္ခြဲတဲ့ အခ်ိန္မွာ (Positive integer = +214748367)ျဖစ္ျပီးေတာ့ (Negative integer= -214748367) ျဖစ္သြားပါတယ္……အခုဆိုရင္ ကြ်န္ေတာ္တို႕ Integer data type ထဲမွာ အေပါင္းကိန္း +214748367 ထိ သိုေလွာင္ႏိုင္သြားျပီးေတာ့ အနုတ္ကန္း-214748367 ထိ From -214748367 to +214748367 ထိသိုေလွာင္ကိုင္တြယ္ ႏိုင္သြားမွာ ျဖစ္ပါတယ္ ….ဒါဆိုရင္ ပံုေလးနဲ႕ တြဲျကည့္ျပီး 32 ထဲကေန 1 ကို ဘာေျကာင့္ႏုတ္လိုက္ရတယ္ ဆိုတာကို နားလည္ လိမ့္မယ္လို႕ေမွ်ာ္လင့္ပါတယ္…. ဥပမာ ေပးရရင္ int ဆိုတဲ့ ဂ်က္ဖာဗူး ထဲမွာ စာလံုးေပါင္း -214748367 to +214748367 ထိ ႏွစ္ခုေပါင္း 4294967259 ေလာက္ကို ထည့္ထားႏုိင္တယ္လို႕ ဆိုလိုခ်င္တာျဖစ္ပါတယ္……………. အထက္မွာ ရွင္းျပထားတာက 32 bit က int data type ကိုပဲ ရွင္းျပေပးထား တာျဖစ္ပါတယ္…..64 bit မွာ 2 power 64 ဆိုရင္ေတာ့ သူ႕တန္ဖိုးက 18446744073709551616 ပါ အေပါင္းကိန္
ရယ္ အနုတ္ကိန္းရယ္ ျပန္လုပ္ဖို႕ 2 to the power 63 ကေတာ့ 9,223,372,036,854,775,808 ျဖစ္ပ

တယ္ negative integer -9,223,372,036,854,775,808 ကေန  +9,223,372,036,854,775,808  ထိေပါင္း18446744073709551616 ကို  ကိုင္တြယ္ သိုေလွာင္ႏိုင္သြားမွာျဖစ္ပါတယ္…   ဒါဟာ data type ေတြ အမ်ားျကီး ရွိတဲ့ ထဲက integer data type အေျကာင္းကို အျကမ္းျဖင္းေလး ေျပာျပ တာပါ အခု ဆက္လက္ျပီး variable ဆိုတာကို ေျပာျပပါမယ္…..variable ဆိုတာ memory ထဲမွာ ရွိတဲ့ location တစ္ခုကို လွမ္းျပီး ညႊန္းထားတာ ျဖစ္ပါတယ္..အဲဒိ location ထဲမွာ သူနဲ႕ သက္ဆိုင္တဲ့ value တစ္ခုကို သိမ္းထားတာ ျဖစ္ပါတယ္…အဲဒိ သိမ္းထားတဲ့ value ကိုမွ ကြ်န္ေတာ္တို႕ program အလုပ္လုပ္ တဲ့ အခ်ိန္မွာ ေခၚသံုးမွာ ျဖစ္ပါတယ္….

                              ပံုမွာ ျကည့္မယ္ ဆိုရင္ ျမွား အ၀ါနဲ႕ ျပထားတဲ့ 0x0116FE74 ဆိုတာ number1 ဆိုတဲ့ Variable name ရဲ႕ memory address ပါ ျမွား အနီေရာင္နဲ႕ ျပထားတာကေတာ့ သူရဲ႕ value ျဖစ္ပါတယ္  Variable ေတြမွာ အခ်က္သံုးခ်က္ မွတ္ထားရပါမယ္ အဲဒါကေတာ့ name ရယ္ type ရယ္ value ရယ္ျဖစ္ပါတယ္..line number 5 int number1 = 0; မွာ number1 ဆိုတာက variable name ျဖစ္ပါတယ္။integer data type နဲ႕ number1 ဆိုတဲ့ variable တစ္ခုကို ေျကျငာထားျခင္းျဖစ္ပါတယ္line number 5 and 6 မွာ ကြ်န္ေတာ္တို႕ Program ထဲမွာ သံုးခ်င္တဲ့ variable ကို သံုးခ်င္တဲ့ data type နဲ႕ ေျကျငာထားပါတယ္ တစ္ခု မွတ္ထားရမွာ program ထဲမွာ ေခၚမသံုးခင္ ကိုယ္သံုးခ်င္တဲ့ variable ေတြကို ျကိုျပီးေျကျငာထားရမွာ ျဖစ္ပါတယ္ခင္မ်ာ။ ကြ်န္ေတာ္တို႕ variable ေတြကို int number1 = 0; and int number2=0; လို႕မေျကျငာဘဲ int number1,number2; ဆိုျပီးေတာ့လဲ ေျကျငာထားလို႕ရပါတယ္.ဒါေပမယ့္ ကြ်န္ေတာ္တို႕ေတြ int number1=0; လို႕မေျကျငာထားခဲ့ဘူးဆိုရင္ int number1; ဆိုျပီး ရိုးရိုးပဲ ေျကျငာခဲ့ရင္ visual studio နဲ႕ watch လုပ္ျကည့္တဲ့ အခ်ိန္မွာ သူ႕ထဲမွာ ဘယ္ကမွန္းမသိတဲ့ random value ေတြ ၀င္ေနတာကို ေတြ႕ရပါတယ္..ဒါကေတာ့ မိမိတို႕ သေဘာအတိုင္း အဆင္ေျပသလို ေျကျငာလို႕ ရပါတယ္ ကိုကိုယ္တိုင္ ေလ့လာျပီး အသံုးျပဳတာက ေတာ့ အေကာင္းဆံုး ျဖစ္မွာပါ…          အေပၚက program ေလးကို စျပီးေတာ့ ရွင္းျကရေအာင္
5   int number1 = 0;
6   int number2 = 0;
7   int total = 0;
မွာဆိုရင္ integer data type ေတြနဲ႕ variable ေတြေျကျငာ ထားလိုက္ပါ တယ္..အဲဒိ variable ေတြကိုမွ program ထဲမွာ ေခၚသံုးမွာ ျဖစ္ပါတယ္..
8   printf_s("Please enter first number:\n");
9   scanf_s("%d", &number1);
10  printf_s("Please enter second number:\n");
11  scanf_s("%d", &number2);
Number 8 ကေတာ့ printf_s ဆိုတဲ့ function ကိုသံုးျပီး user ဆီကို
Screen ေပၚမွာ ေပၚေအာင္ please enter first number: ဆိုျပီး message တစ္ေျကာင္းေရးခိုင္းလိုက္တာပါ promt လုပ္တယ္ လို႕လဲ ေခၚပါတယ္
Please enter a number: ဆိုတဲ့ ေနာက္မွာ \n ဆိုတာေလး ပါ ပါေသးတယ္\n ဆိုတာ ကိုသိဖို႕ ဆိုရင္ escape sequence ဆိုတာကို သိဖို႕ လိုပါတယ္ c programming မွာဆို အေျခ ခံ အေနနဲ႕ escape sequence ၅ မ်ိဳး ရွိပါတယ္..
1.   \n
2.   \t
3.   \a
4.   \\
5.   \”

\n ဆိုတာကေတာ့ newline ပါ ဆိုလိုခ်င္တာကေတာ့ program ထဲမွာ \n ကို ေတြ႕တာနဲ႕ ေအာက္ကို တစ္ေျကာင္းဆင္းသြားမွာ ျဖစ္ပါတယ္…… \t ဆိုတာကေတာ့ Horizontal tab ပါ ဆိုလိုခ်င္တာကေတာ့ စာေျကာင္းထဲမွာ  tab တစ္ခ်က္ ခုန္သြားမယ္လို႕ ေျပာခ်င္တာပါေအာက္ကပံုမွာ ျကည့္ေပးပါခင္မ်ာ
\a ဆိုတာကေတာ့ Alert ပါ ဆိုလိုခ်င္တာကေတာ့ အသံ သို႕မဟုတ္ သိသာတဲ့ အရာ တစ္ခုခု နဲ႕ ေရာက္ေနတဲ့ cusor ေနရာမွာ alert လုပ္တာပါ.. ေအာက္က ပံုမွာျကည့္လို႕ရပါတယ္ ..
                           \\ ဆိုတာကေတာ့ Backslash ပါ ဆိုလိုခ်င္တာကေတာ့ ကြ်န္ေတာ္တို႕ စာေျကာင္းထဲမွာ ဆိုတဲ့ charater ကို ထည့္မယ္လို႕ ေျပာတာပါ…  ေအာက္က ပံုမွာ ျပထားပါတယ္ .



                          \* ဆိုတာကေတာ့ double quote ပါ ဆိုလိုခ်င္တာကေတာ့ ကြ်န္ေတာ္တို႕  စာေျကာင္းထဲမွာ * ဆိုတဲ့ charater ကို ထည့္မယ္လို႕ ေျပာတာပါ… ေအာက္က ပံုမွာ ျကည့္ပါခင္မ်ာ

                         ဒီေလာက္ဆိုရင္ c programming ရဲ႕ escape sequence အေျကာင္းကို အနည္းငယ္ သိသြားမယ္လို႔ ထင္ပါတယ္ကြ်န္ေတာ္တို႕ program ေလးကို ဆက္သြားရေအာင္ line number8 က ေနာက္ဆံုး \n ကို ေတြ႕တာနဲ႕Cursor က ေအာက္တစ္ေျကာင္းကို ဆင္းသြားပါတယ္ ဒီေနရာမွာ သတိ တစ္ခုထားရမွာက ကြ်န္ေတာ္တို႕ promt လုပ္ခ်င္တဲ့ စာေျကာင္း အစမွာေရာ အဆံုးမွာေရာ double quote (“…….”) ကို ထည့္ဖို႕ မေမ့ပါနဲ႕ .. ျပီးရင္ေတာ့ Line အဆံုးမွာ (;) ဒီေကာင္ေလး ထည့္ေပးရပါတယ္.
9   scanf_s("%d", &number1);  Line number 9 မွာ scanf_s ဆိုတာကေတာ့ scan  formatted ကို ဆိုလိုတာပါ..scanf_s ဆိုတဲ့ function မွာ argument နွစ္ခု ပါ ပါတယ္(ပထမ argument ကေတာ့ %d ဒုတိယ တစ္ခုကေတာ့ ampersand(&) သူ႕ကို address operator လို႕လဲ ေခၚပါတယ္ သူက user ဆီက ေနျပီး ထည့္လိုက္တဲ့ တန္ဘိုး(standard input,eg, keyboard)  ကို ဖတ္လိုက္တာပါ. %d ဆိုတာကေတာ့ integer နဲ႕ ဖတ္မယ္လို႕ ေျပာတာပါ (d ဆိုတာကေတာ့ decimal ကိုေျပာခ်င္တာပါ). သူ႕ကိုလည္း double quote ေလးေတြ ထဲထည့္ပါ ျပီးရင္ေတာ့ (,) ေလးထည့္ဖို႕ မေမ့ပါနဲ႕ . ေနာက္တစ္ခုကေတာ့ &number1(address of number1) သူေျပာခ်င္တာက user ဆီက ရိုက္ထည့္လိုက္တဲ့ တန္ဘိုးကို %d ဆိုတဲ့  integer နဲ႕ ဖတ္ျပီး number1 ဆိုတဲ့Address ရွိတဲ့ ေနရာမွာ သိမ္းမယ္လုို႕ေျပာလိုက္တာပါ… အခုဆိုရင္ line number 8 and 9 ကို နားလည္ သြားလိမ့္မယ္လို႕ထင္ပါတယ္အခုဆက္ဖတ္လိုက္ရင္ 10 and 11 ကိုလည္း နားလည္ သြားပါလိမ့္မယ္… 
10  printf_s("Please enter second number:\n");
11  scanf_s("%d", &number2);
အခုဆက္ျပီး

အထက္မွာ ျပထားတဲ့ ပံုကေတာ့ ကြ်န္ေတာ္တို႕ ေပးလိုက္တဲ့ number ကို Hexa decimal value နဲ႕ ေဖာ္ျပထားတာျဖစ္ပါတယ္ျမားအနီေရာင္နဲ႕ ျပ ထားတဲ့ 0x008FFDE0 ဆိုတာကေတာ့ သူ႕ရဲ႕ address ျဖစ္ပါတယ္

 12  total = number1 + number2;
13  printf_s("Total number is %d\n",total);
ကို ရွင္းပါမယ္. Line number 12 ကေတာ့ number1 + number2
ေပါင္းလို႔ရလာတဲ့ တန္ဘိုးကို assignment operators ျဖစ္တဲ့ (=) ကို သံုးျပီး total ဆိုတဲ့ variable ထဲကို ထည့္လိုက္တာ ျဖစ္ပါတယ္ ျပီးရင္ေတာ့ line number 13 မွာ total ရဲ႕ value ကို promt လုပ္လိုက္ပါေတာ့တယ္.ေအာက္က ပံုတြင္ ျကည့္ပါ ခင္မ်ာ.

ေနာက္ထပ္ lesson ေတြကိုလည္း ဆက္လက္ျပီး ေဖာ္ျပေပးသြားပါဦးမယ္ ခင္ဗ်ာ ။
Green HackersTeam


























































No comments:

Post a Comment