Friday, December 28, 2012

C#


ေရးသူေဒၚေ၀လဲ့ရည္ (လက္ေထာက္ညႊန္ၾကားေရးမွဴး၊ စက္မႈႏွင့္သက္ေမြးပညာဦးစီးဌာန (ရံုးခ်ဳပ္)၊ သိပံႏွင့္နည္းပညာ၀န္္ၾကီးဌာန၊ ေနျပည္ေတာ္)

အပို္င္း (၁)
C++ နွင့္ Java ကုိ ေလ့လာပီးသားျဖစ္ပါက C# ကုိေလ့လာရတာပုိပီး လြယ္ပါမယ္… C# ဟာ java  ဆီကေနပီးေတာ့ ဘာေတြညာေတြ ယူထားတယ္ စသျဖင့္ေျပာၾကေသာ္လည္း… C#နဲ့ GUI create လုပ္ရတာပုိျပီးလြယ္ပါတယ္..
C# ကုိ Design လုပ္ရာမွာ java တုိ့ vbတုိ့ c++တုိ့ဆီကေန ေကာင္းတာေတြကုိယူထားတဲ့ အျပင္ .Net Framework ကုိသံုးပါတယ္တဲ့……
ဒီေတာ့ .Net Framework ဆုိတာဘာလဲလုိ့ စပ္စုရေအာင္……
.Net Framework ဆုိတာ Development Platform, Execution Environment ပါတဲ့.. သူ့မွာအဓိက ဘာေတြပါလဲဆုိေတာ့
(၁) Common Language Runtime (CLR)
(၂) .Net Framework class library တုိ့ျဖစ္ပါတယ္….


CLR
            C# program တပုဒ္ကုိ compile လုပ္ပီးလုိ့ထြက္လာတဲ့ code က executable code မဟုတ္ပါဘူး.. Microsoft Interediate Language Code ဆုိတာအရင္ထြက္လာပါတယ္….MSIL code .ကုိ executable code ျဖစ္ေအာင္ CLR ရဲ့ JIT (just in time compiler)  ကေျပာင္းေပး ပါတယ္… . MSIL code ကုိ CLR ရွိတဲ့ဘယ္ေနရာမွမဆုိ run လုိ့ရတာေၾကာင့္ JVM ရွိတဲ့စက္တုိင္းမွာ run လုိ့ရတဲ့   java ရဲ့ bytecode လုိမ်ိဳးပါပဲလုိ့ ေျပာၾကပါတယ္…. 

.Net Framework class library
         အသင့္ေရးထားတဲ့ class ေတြကုိ  သိမ္းထားတာပါ…. Program ေရးတဲ့ေနရာမွာလုိအပ္တဲ့ method  ေတြ ကုိ လွမ္းယူသံုးလုိက္ယံုပါပဲ..  ဥပမာ FirstApp.cs မွာဆိုရင္ Console ဆုိတဲ့ class ထဲက   WriteLine() ဆုိတဲ့ method ကုိလွမ္းယူသံုးထားတာ ျဖစ္ပါတယ္..အဲဒီ Console  class ကုိေတာ့ System ဆုိတဲ့ namespace ထဲမွာ သိမ္းထားတာပါ…. အဲဒါေၾကာင့္ Program ရဲ့အစမွာ using ဆုိတဲ့ keyword ကုိသံုးျပီး…using System.. ဆုိတာေရးခဲ့တာျဖစ္ပါတယ္ 
ဒါေပမဲ့ ဘယ္လုိ function မ်ိဳးကုိေရးခ်င္တယ္ဆုိရင္ class library ထဲက ဘယ္ class ရဲ့ ဘယ္ method ကုိေခၚသံုးရမလဲဆုိတာကုိေတာ့ ေလ့လာထားရမွာျဖစ္ပါတယ္…………

C# Program ကုိ compile လုပ္ဖုိ့ run ဖုိ့ ဆုိရင္ေတာ့ ပထမဆံုး.. Visual Studio တင္ပါမယ္.. ရနုိင္တဲ့ version ေပါ့ 2008 ျဖစ္ျဖစ္  2010 ျဖစ္ျဖစ္..
ပထမဆံုး program ကုိ IDE သံုးပီးေတာ့ရယ္.. Command Prompt ကေန csc.exe ကုိသံုးပီးေတာ့ ရယ္ ၂ မ်ိဳး run ၾကည့္ၾကမယ္…
/*
comment ေတြေရးဖုိ့ကုိ java မွာလုိပဲ.. more than 1 line ဆုိရင္ /*  */ နဲ့ေရးလုိ့ရပီးေတာ့
// 1 line ဆုိရင္ //နဲ့ေရးလုိ့ရပါတယ္
ခု ပထမဆံုး နမူနာ hello world ေလး တပုဒ္ ေလာက္စမ္းၾကည့္မယ္
*/
Notepad ထဲမွာ ေအာက္က code သြားရုိက္ပီး FristApp.cs လုိ့ save ပါ…. ၾကိဳက္တဲ့ေနရာမွာ save လုိ့ရေပမဲ့ ဒီမွာေတာ့  D ထဲမွာ save ပါမယ္.......
using System; //ဒါက java မွာ import လုပ္သလုိပါပဲ  System namespace ထဲက ယူသံုးဖုိ့ ေၾကညာတာ
class FirstApp    // class name
{
          Static Void Main()             // ဒါက ထံုးစံအတုိင္းေရးတဲ့ Main Method
{
Console.WriteLine(“Hello World”);        
          }
}
/* statement တေၾကာင္းဆံုးရင္ ; နဲ့ပိတ္ .   class တုိ့  method တုိ့က { နဲ့စ } နဲ့ပိတ္ စတဲ့ syntax ေတြက c++ တုိ့ java တုိ့နဲ့တူတူပါပဲ */
ရုိက္ပီးတဲ့ code ကုိ csc.exe သံုးပီး compile လုပ္ပါမယ္…
ဒီေတာ့ csc.exe ရွိတဲ့ေနရာကုိ class path ေပးပါမယ္..  csc.exe ရွိတဲ့ေနရာရဲ့ path ကုိ copy ကူး
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Control Panel\All Control Panel Items\System ရဲ့ Advanced tab ထဲက Enviromental Variable ကုိ နွိပ္ပါ.. User Variable မွာ new ယူပီးေတာ့ variable name မွာ path… variable value မွာ ခုန cs.exe ရွိတဲ့ေနရာ C:\Windows\Microsoft.NET\Framework\v4.0.30319 ကုိ paste လုပ္လုိက္ပါ.. ဒါဆုိ cmd prompt မွာ compile လုပ္လုိ့ runလုိ့ ရပါပီ..
ခုန program ကုိ  D ေအာက္မွာထားခဲ့တာဆုိေတာ့ dir change လုိက္ပါ..
D:\csc FirstApp.cs   // compile လုပ္လုိက္တဲ့အခါ error မရွိရင္ FristApp.exe       ဖုိင္ထြက္လာပါမယ္…
D:\ FristApp    // exe file ကုိ run တဲ့အခါ output ထြက္လာပါမယ္..

ကဲ.. ဒီတခါ IDE နဲ့စမ ္းၾကည့္မွာမုိ့ visual Studio ဆီကုိသြားၾကစုိ့့….
Start->All Program->Microsoft Visual studio 2010->Microsoft Visual Studio 2010
New Project ကုိေရြးပါ.
Installed Tamplate ထဲက Visual C# - Console Application ကုိေရြးပါ
Name, location name, solution name, တုိ့ကုိ ျဖည့္ပါ
အဆင္သင့္ေရးပီးသား ပံုစံေလးေပၚလာရင္ ကုိယ္ျဖည့္ခ်င္တဲ့ code ကုိျဖည့္ပါ
ဒီမွာေတာ့ Console.WriteLine(“Hello World”); ရုိက္ထည့္ပါ
ပီးတာနဲ့ menu-> Build ကုိနွိပ္ပီး run နုိင္ပါပီ...........

(c# ကုိစေလ့လာတဲ့ programming အေျခခံရွိတဲ့သူမ်ားအတြက္ ရည္ရြယ္ပါတယ္…. ဒီအထိ စမ္းၾကည့္လုိ့ အခက္အခဲ ေတြ့ရင္ေမးနုိင္ပါတယ္)        

အပိုင္း(၂)                                    
C# Overview
program structure
using System;
namespace <project name>
{
   <modifier > class <class name>
   {
      static void Main()
      {
               [statements]
      }
   }
}
ဒါကေတာ့ C# program တစ္ပုဒ္ရဲ့ structure ပါ… java နဲ့မတူတာက ဒီမွာ namespace ဆုိတာပါ လာတာပါ.. အဲဒီမွာ .. using System… ဆုိတာကလဲ System namespace ကုိ class library ထဲက ယူသံုးမယ္လုိ့ေျပာတယ္ ဆုိတာေၾကာင့္ namespace ဆုိတာဘာလဲလုိ့ ေလ့လာပါမယ္….
namespace: Declaration of classes, interfaces, structs, enums, delegates
namespace ဆုိတာ  declaration space ပါ.. namespace ထဲမွာ class ေတြ interface ေတြ delegates ေတြ ေနာက္ထပ္ namespace ေတြ(nested namespace)ကုိ ၾကိဳက္သေလာက္ ေၾကညာလုိ့ရပါတယ္…. အရင္တပတ္က example program ထဲမွာဆုိရင္ namespace ေၾကညာ မထားပါဘူး.. အဲဒါမ်ိဳးဆုိရင္…default က anonymos namespace ပါတဲ့… namespace ကုိ class ေတြၾကားမွာ name ေတြ conflit မျဖစ္ေအာင္သံုးပါတယ္တဲ့… namespace ထဲက class ေတြ interface ေတြကို ေခၚသံုးခ်င္တယ္ဆုိရင္ေတာ့… using ဆုိတဲ့ keyword နဲ့တြဲျပီးသံုးပါတယ္.. (eg….using System)……
ေနာက္တခုက <modifier > class <class name>
Class ဆုိတာလဲ declaration space… class ထဲမွာ fields,, methods ေတြ ေၾကညာပါတယ္..
ေရွ့က modifier ဆုိတာလဲ ထံုးစံအတုိင္း ကုိယ္သတ္မွတ္ခ်င္တဲ့ access modifier or access specifier (public, private, protected) ကုိေပးဖုိ့ပါပဲ..
C# မွာ file name နဲ့ class name နဲ့ တူစရာမလုိပါဘူး..J
static void Main()
ထံုးစံအတုိင္း program ရဲ့ entry point …… method မွာ  M ကုိ စာလံုးအၾကီးနဲ့ေရးပါတယ္…
Statement ေတြေရးတဲ့ေနရာမွာ syntax အေၾကာင္းနဲနဲေျပာပါမယ္..
C# က  case-sensitive ျဖစ္ပါတယ္… statement တေၾကာင္းဆံုးရင္ ; ေရးရမယ္.. block အဖြင့္ အပိတ္ေတြက {}…… comments ေတြက // ရယ္ /*                */ရယ္ …..
ကဲ.. Data type ေတြအေၾကာင္းေျပာပါေတာ့မယ္….

C# Data Types
Data types ၂ မ်ိဳးရွိပါတယ္…. Value type ရယ္  reference type ရယ္ပါတဲ့… ဘာကြာသလဲဆုိ ေတာ့ variable တခုဟာ actual value(eg.. 1,2,3,4) ကုိသိမ္းရင္ value type ျဖစ္ပီးေတာ့ reference value (eg….#00ffaa) ကုိသိမ္းရင္ေတာ့ reference type ပါတဲ့…. း)  ရွင္းတယ္ေနာ္… ရွင္းသမွသိပ္ရွင္း…. :P

Reference type… ၂ မ်ိဳးရွိပါတယ္… Predefined type နဲ့ User-defined type
Predefined type မွာ Object ရယ္………String ရယ္ ပါျပီးေတာ့…..
User-defined type မွာ Classes, Interfaces, Delegates and Arrays တုိ့ပါ ပါတယ္….
 Value type ( simple type, primitive type.. အမ်ိဳးစံုေခၚတဲ့)  ၁၃ မ်ိဳးရွိပါတယ္တဲ့ ….
Type
Meaning
bool
Represents true/false values
byte
8-bit unsigned integer
char
Character
decimal
Numeric type for financial calculations
double
Double-precision floating point
float
Single-precision floating point
int
Integer
long

Long integer
sbyte

8-bit signed integer
short

Short integer
uint

An unsigned integer
ulong

An unsigned long integer
ushort
An unsigned short integer
Literals
   Literals ဆုိတာ variable ထဲကုိ assigned လုပ္တဲ့ value ကုိေခၚပါတယ္…
Eg… 100 ဆုိတဲ့ value ဟာ literal ပါ…. Integer literal ေပါ့…
    “hello” ဆုိရင္ String literal……ျဖစ္ပီးေတာ့ … ‘a’ ဆုိတာ     character literal ပါ………..

ေနာက္တခုက…
Variables
Variable ေတြ ေၾကညာတဲ့ format က
type var_name;                              // type ဆုိတာ data type , var_name က variable name
variable ေတြမွာ create လုပ္တဲ့အခ်ိန္မွာ initialize လုပ္လုိ့ရသလုိ
eg……. int a=5;
           char ch=’a’;
အဲလုိမွမဟုတ္……initialize မလုပ္ဘူးဆုိရင္လဲ default value ေတြကုိ auto assign လုပ္ေပးပါတယ္………
Type
Default Value
All integer types
0
char type
‘\x000’
float type
0.0f
double type
0.0d
decimal type
0.0m
bool type
false
enum type
0
All reference types
null

Variable တခုရဲ့   scope နဲ့ life time ကေတာ့ block ပါပဲတဲ့ ({       }) variable တခုကုိ class ထဲမွာေၾကညာခဲ့ရင္ သူ့ရဲ့ life time က အဲဒီ class ရဲ့  အဆံုး } အပိတ္အထိပါပဲ… method တခုထဲ မွာေၾကညာခဲ့ရင္လဲ သူ့ရဲ့ life time က method အဆံုးထိပါပဲ.. class scope နဲ့ method scope ေပါ့ method ထဲမွာပါလာမဲ့ parameters ေတြကလဲပဲ method scope ပါပဲ…တကယ္လုိ ့ scope ေတြဟာ Nested ျဖစ္ေနခဲ့ရင္ inner scope က variable ကုိ outer scope မွာမျမင္ရပါဘူး.….. outer scope က variable ကုိေတာ့  inner scope မွာျမင္ရပါတယ္…… ေအာက္မွာပါတယ္ example ကေလးကုိ ၾကည့္ၾကည့္ပါ……………
// Demonstrate block scope.
using System;
class ScopeDemo
{
static void Main()
 {
Int   x;                          // known to all code within Main()
x = 10;
if(x == 10)
{                                   // start new scope
int y = 20;       // known only to this block
                                    // x and y both known here.
Console.WriteLine("x and y: " + x + " " + y);
x = y * 2;
}
// y = 100; // Error! y not known here.
// x is still known here.
Console.WriteLine("x is " + x);
}
}
အဲဒီေတာ့ကား…………… outer scope မွာေပးထားတဲ့ variable name နဲ့ နာမယ္တူ variable ကုိ inner scope မွာ ထပ္ပီးေပးလုိ့မရပါဘူး….ဟုတ္တယ္ေနာ္…….

Flow Control in C#
1.    Selection statement
i.             if
ii.            switch
2.    Iteration statement
i.             for
ii.            while
iii.           do-while
iv.           foreach
3.    Jump statement
i.             break
ii.            continue
iii.           return
iv.           goto
The if statement
if(condition)
{
statement sequence
}
else
{
statement sequence
}

if(condition)
statement;
else if(condition)
statement;
else if(condition)
statement;
...
else
statement;


if(condition)
{
if(condition)
{
statement sequence
}

}
if statement မွာ သံုးေနက်ျဖစ္တဲ့ ပုံစံကြဲေလးေတြပါ… ရုိးရုိး if else , nested if , နဲ့ if    else if   else တုိ့ပါ…..ဘယ္လုိသုံးသလဲဆုိတာ သိပီးသားျဖစ္မယ္ထင္ပါတယ္………  အေပၚဆုံး if မွာ condition စစ္ပီး condition မွန္/မမွန္ေပၚမူတည္ပီး ဆက္အလုပ္လုပ္သြားမွာျဖစ္ပါတယ္….

The switch statement
switch ( expression )     // expression မွာ numeric, enum, string, or char               
{                                // ထားနုိင္ပါတယ္….floating point ထားလုိ့မရပါ…
       case value-1:         
               block-1
               break;
       case value-2:
               block-2
               break;
            ……………..
       default :
               default-block
               break;
}
အလုပ္လုပ္တဲ့ပံုကေတာ့.. expression နဲ့ case value နဲ့တုိက္… match ျဖစ္ရင္ အဲဒီ case ရဲ့ block ကုိလုပ္ ပီးရင္ switch ကေန break နဲ့ထြက္………….expression နဲ့ match ျဖစ္္တဲ့ case တခုမွ မရွိဘူး ဆုိရင္ default  block ကုိ အလုပ္လုပ္ပီး break…………………………………..


The for statement
for(initialization; condition; iteration)
{
statement sequence
}
Iteration မစခင္ condition စစ္ပါတယ္….. statement sequence ကုိ condition မွန္ေနသေရြ့ အလုပ္လုပ္ေနပါမယ္……….
for(;;;)statement                  // ဒါကေတာ့ infinite loop ပါ…….

The while statement
while(condition)
{
            statement;
}
သူလဲပဲ pre test loop ပါ……… Iteration မစခင္ condition စစ္ပါတယ္….. statement sequence ကုိ condition မွန္ေနသေရြ့ အလုပ္လုပ္ေနပါမယ္……….

The do-while statement
do {
         statements;
} while(condition);
post test loop ပါ……. condition မစစ္ခင္ statement ကုိ တၾကိမ္အရင္ execute လုပ္ပါတယ္… ပီးေတာ့မွ condition စစ္ပီး match ျဖစ္တယ္ဆုိရင္ Loop ထပ္ပတ္ပါတယ္……..

The foreach statement
foreach (type loopvar in collection)  statement;
foreach ကုိ array တုိ့ collection တုိ့ ထဲမွာရွိသေလာက္ data ေတြကို loop ပတ္ပီး အလုပ္လုပ္ခ်င္တဲ့အခါသံုးပါတယ္……….. အဲဒါေၾကာင့္ initialize လုပ္စရာ condition စစ္ပီး stop လုုပ္စရာမလုိပါဘူး………….. array ထဲမွာ collection ထဲမွာရွိသေလာက္ အကုန္ အလုပ္လုပ္သြား မွာမုိ့လုိ့ပါပဲ…… ေအာက္က demo program ေလးကုိ စမ္းၾကည့္ပါ…
using System;
class ForeachDemo
{
           static void Main()
           {
                   int sum = 0;
                   int[] nums = new int[10];
                  // Give nums some values.
                  for(int i = 0; i < 10; i++)
                  nums[i] = i;
                 // Use foreach to display and sum the values.
                  foreach(int x in nums)
                  {
                        Console.WriteLine("Value is: " + x);
                        sum += x;
                   }
                  Console.WriteLine("Summation: " + sum);
         }
}

Output ထြက္လာတဲ့့အခါ ေတြ့မွာပါ…. foreach ဟာ array ထဲမွာရွိတဲ့ data ေတြ အကုန္လံုးကုိ အလုပ္လုပ္သြားတယ္ဆုိတာ……. Array nums ထဲက integer ေတြကုိ x ထဲကုိ loop တခုခ်င္း assign လုပ္သြားတာကုိ ေတြ့ရမွာျဖစ္ပါတယ္…………
ဒီေတာ့ကား………………………. Array ထဲမွာရွိတဲ့ အေရအတြက္အတုိင္း အလုပ္မလုပ္ခ်င္ဘူးဆုိ ရင္ေတာ့…. Condition စစ္္ပီး break ကုိသံုးပီး loop ထဲက ထြက္ရမွာျဖစ္ပါတယ္………
ခုနက demo program မွာ ထပ္ထည့္ပီးစမ္းၾကည့္ၾကရေအာင္……..
using System;
class ForeachDemo
{
           static void Main()
           {
                   int sum = 0;
                   int[] nums = new int[10];
                  // Give nums some values.
                  for(int i = 0; i < 10; i++)
                  nums[i] = i;
                 // Use foreach to display and sum the values.
                  foreach(int x in nums)
                  {
                        Console.WriteLine("Value is: " + x);
                        sum += x;
                        if(x==4) break;
                   }
                  Console.WriteLine("Summation: " + sum);
         }
}
foreach  loop ကို searching လုပ္တဲ့အခါ………… max, min ရွာခ်င္တဲ့အခါ…………….  Avg တြက္ခ်င္တဲ့အခါမ်ိဳးေတြမွာ….သံုးလုိ့ေကာင္းပါတယ္…………

The break statement
 break statement ကုိ ခုန prog မွာေတာင္သံုးပီးပီဆုိေတာ့ အထူးေျပာဖုိ့မလုိေတာ့ပါဘူး………
for, while, switch… စတဲ့ loop ကေန ထြက္ခ်င္တဲ့အခါမ်ိဳးမွာသံုးပါတယ္……..

The continue statement
လက္ရွိ Loop ကေန next loop ကုိ ဆက္သြားဖုိ့ force လုပ္ခ်င္တဲ့အခါမွာသံုးပါတယ္…………
using System;
class ContDemo
 {
          static void Main()
         {
                  // Print even numbers between 0 and 100.
                   for(int i = 0; i <= 100; i++)
                   {
                           if((i%2) != 0) continue; // iterate
                           Console.WriteLine(i);
                    }
           }
}

The return statement
Value return ျပန္ဖုိ့သံုး…………
public static int exampleMethod()
{
     int i =0;
     return i;
}

The goto statement
Unconditional jump  ………
x = 1;
loop;
x++;
if(x < 100) goto loop1;

ကဲ.. ကဲ… ကဲ…. C# ရဲ့ program structure ေကာ,  data types ေကာ, variables ေကာ, control statement ေတြေကာ ေျပာလုိ့ အဲ… ေရးလုိ့ ျပီးသြားပါပီ…………. ေပ်ာ္စရာ ေကာင္းလုိက္တာ….. ဒီတခါေတာ့ စာဖတ္သူရဲ့ အလွည့္ကုိ ေရာက္လုိ့လာပါပီ………… J assignment ေလး နဲနဲေပးပါမယ္… စမ္းေရးၾကည့္ၾကပါအုံးလုိ့…..
1.    Write a program in C# to generate prime numbers between 1 and 1000
2.    Write a C# program that will read the value of x and evaluate the following function


        using
              (a) nested if statements
    (b) else if statements
    3. Admission to a professional course is subject to the following conditions:
          (a) Marks in mathematics        >= 60
     (b) Marks is physics                  >= 50
     (c) Marks in chemistry              >= 40
     (d) Total in all three subjects    >=200
     (or)
          Total in mathematics and physics >=150
          Given the marks in the three subjects, write a program to process the applications to list the eligible candidates.

4. The straight-line method of computing the yearly depreciation of the value of an item is given by


     Write a program to detemine the salvage_value of an item when the purchase_price, years of service and the annual_depreciation are given.

Hints.. ေတြေပးရပါမယ္… အရင္တုန္းက print out လုပ္တဲ့ method ကုိသာေျပာဖူးတာမုိ့ပါ….
Keyboard ကေန read လုပ္တဲ့ Method က
Console.readLine();
Keyboard ကေနဖတ္သမွွ်ကုိ string လုိ့ယူဆမွာမုိ့  int ေျပာင္းခ်င္ရင္  int.parse(); ဆုိတဲ့ method ကုိသံုးပါတယ္…
int a = int.parse(Console.readLine());

                                 

No comments:

Post a Comment