ArraysArray ဆိုတာ data items အမ်ားႀကီးကို တူညီတဲ႔ ဘံုနာမည္တစ္ခုေပးၿပီးေတာ႔ storage လုပ္ဖို႔အတြက္ သတ္မွတ္ထားတဲ႔ data type တစ္မ်ိဳးပါပဲ ။ တနည္း အားျဖင္႔ array ဆိုတာ data type တူညီတဲ႔ data အစုေဝးလို႔လည္းေျပာလို႔ရပါတယ္ ။
An array of airplanes
An array of cards
An array of characters
ပံုေလးေတြကိုၾကည့္ၾကည့္ပါ ။ အမ်ိဳးစားတူညီတဲ႔ ေဒတာ အစုအေဝး ကို array လို႔ေခၚနိုင္တယ္ဆိုတာ သေဘာေပါက္ပါလိမ္႔မယ္ ။ ကၽြန္ေတာ္တို႔ က Array တစ္ခု ကိုေၾကျငာလုိက္ၿပီဆိုတာနဲ႔ ကြန္ပ်ဴတာရဲ့ မန္မိုရီမွာ နာမည္တစ္ခုနဲ႔ ေဘာက္စ္ေလး အျဖစ္ေနရာယူလိုက္တယ္လို႔ ေတြးၾကည့္နိုင္ပါတယ္ ။ အဲဒီေဘာက္စ္ေလး မွာ အပိုင္းေလးေတြထပ္ပိုင္းမယ္ အဲလို ပိုင္းလိုက္တဲ႔အပိုင္းေလးတစ္ခုခ်င္းစီ ကို array ရဲ့ element လို႔ေခၚပါတယ္ ။ arrays မွာဆိုရင္ one-dimensional array နဲ႔ multi-dimensional array ရယ္လို႔ထပ္ၿပီးခြဲလို႔ရပါတယ္ ။
Array ကိုဘာေၾကာင္႔သံုးရတာလဲArray ရဲ့ အဓိပၸါယ္ န႔ဲ အမ်ိဳးစားကိုသိၿပီးၿပိဆိုရင္ array ကိုဘာေၾကာင္႔သံုးရလဲဆိုတာသိရင္ပိုအဆင္ေျပမယ္ထင္ပါတယ္ ။ ဥပမာ data type (int , float , char, …etc) ကြဲျပားမွုမရွိတဲ႔ ေဒတာ ၁၀ ခုကို ၁၀ ခါေၾကျငာၿပီးသံုးမယ္ဆိုရင္ မန္မိုရီမွာေနရာယူတာလည္းမ်ားမယ္ ။ လုပ္ေဆာင္ဖို႔အခ်ိန္လည္းၾကာမယ္ ေလ ။ အဲဒါဆိုေတာ တူညီေနတဲ႔ data ေတြကို ဘံုနာမည္တစ္ခုေပးၿပီး array အျဖစ္သံုးလိုက္မယ္ဆိုရင္ အခ်ိန္ကုန္လည္းသက္သာသလို ပိုၿပီးလည္းအဆင္ေျပတာေပါ႔ ။
int a = 10;
int b = 20;
int c = 30;
int d = 40;
လို႔ ေၾကျငာမဲ႔အစား
int Numbers[4]={10,20,30,40};
လို႔ေၾကျငာလိုက္တာပါ ။
Arrays ေတြကိုေၾကျငာျခင္းOne-dimensional array အတြက္DataType Array_Name [ subscript ];
int OneDiArray [ 10 ]; // ဥပမာ ( 1,2,3,4,5,6,7,8,9,10 ) ဆိုၿပီး အတန္းလိုက္ ၁၀ လံုးရွိမွာပါ ။
Multi-dimensional array အတြက္One-dimension ထပ္ပိုတဲ႔ ဟာေတြကို multi-dimensional array လို႔ ေခၚပါတယ္ ။ two-dimension ကေန စၿပီး dimension အမ်ားႀကီးထိျဖစ္နိုင္ပါတယ္ ။
DataType Array_Name [
row][
column]; //two-dimensional array
DataType Array_Name [
pages][
row][
column]; // three-dimensional array
Float fNumbers [
3][
4];
//
အေပၚမွာတုန္းက row နဲ႔ columns ဆိုတာ အလြယ္မွတ္တဲ႔နည္းပါ ။ တကယ္တန္းသူ႔အဓိပၸါယ္က Elements ၄ ခုပါတဲ႔ arrays ၃ ခုရွိမယ္လို႔ ေျပာခ်င္တာပါ ။ fNumbers ဆိုတဲ႔ array မွာ elements ဘယ္ႏွခုပါမလဲဆိုေတာ႔ 3X4 =12 လံုးပါမယ္ ။Double dNumbers[
2][
3][
4];
// သူကေတာ႔ [3][4] က two-dimensional တုန္းကအတိုင္းပါပဲ ။ [2][3][4] ကေတာ႔ 3 rows , 4 columns ပါမဲ႔ two-dimension arrays ၂ ခုရွိမယ္လို႔ေျပာခ်င္တာပါ ။ သူ႔မွာပါဝင္မဲ႔ elements အေရအတြက္ကိုသိခ်င္ရင္ 2x3x4= 24 ရွိမွာျဖစ္ပါတယ္ ။စၿပီးေလ႔လာခါစဆိုရင္ dimension ေတြမွာမ်က္စိလည္တက္ပါတယ္ ။ မ်က္စိမလည္ေအာင္အလြယ္မွတ္ တဲ႔နည္း ကေတာ႔ အေပၚမွာေျပာခဲ႔တဲ႔တိုင္းပါပဲ ။ ေသခ်ာနားလည္သြားေအာင္ေနာက္တစ္ေခါက္ထပ္ေျပာျပပါ႔မယ္ ။
One-dimensionInt OneDimension [5] ;
1 2 3 4 5 ဆိုၿပီး ၅ လံုး တန္း တစ္တန္း ျဖစ္ပါတယ္ ။
Two-dimensionInt TwoDimension [4][5];
One-dimension တုန္းကလို array မ်ိဳး ၄ ခုပါဝင္ပါမယ္ ။ [4][5] မွာ 5 သည္ အတန္း (row)တစ္ခုခ်င္းဆီမွာပါဝင္မဲ႔ elements အေရတြက္ ၊ 4 သည္ ပါဝင္မဲ႔ အတန္း အေရအတြက္ ။
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Elements 25 ခုပါဝင္ေနတဲ႔ အေပၚက ဟာတစ္ခုလံုးကို two-dimension array တစ္ခုလို႔ေခၚပါတယ္ ။
Three-dimensionInt ThreeDimension [3][4][5];
Two-Dimension တုန္းကလို array မ်ိဳး ၃ ခုပါဝင္ပါမယ္ ။ elements 60 ပါဝင္ပါမယ္ ။ အဲဒီ elements 60 ပါဝင္တဲ႔ array တစ္ခုလံုးကို Three-Dimensional array တစ္ခုလို႔ေခၚပါတယ္ ။
Four-DimensionInt FourDimension [2][3][4][5];
Three-Dimension တုန္းကလို array မ်ိဳး ၂ ခုပါဝင္ပါမယ္ ။ elements 120 ပါဝင္ပါမယ္ ။ အဲလို elements 120 ပါဝင္မဲ႔ array တစ္ခုလံုးကို four-Dimensional array တစ္ခုလို႔ ေခၚပါတယ္ ။
ေနာက္ dimension ေတြလည္းထိုနည္း လည္းေကာင္း အတိုင္းျဖစ္ပါတယ္ ။ ေသခ်ာၾကည့္ရင္နားလည္နိုင္လိမ္႔မယ္ထင္ပါတယ္ ။
Initializing An ArrayArrays ေတြကို သုံးမယ္ဆိုရင္ သံုးမဲ႔ array ကုိ intialize လုပ္ေပးဖို႔လိုပါတယ္ ။ array ေတြေၾကျငာတုန္းက ကၽြန္ေတာ္တို႔က array မွာ elements ဘယ္ႏွခု store လုပ္မယ္ဆိုတာကိုေၾကျငာခဲ႔ပါတယ္ ။ အဲလို ေၾကျငာၿပီးသတ္မွတ္ထားတဲ႔ေနရာေလးေတြမွာ value ေလးေတြထည့္ေပးရပါမယ္ ။ အဲဒါကို intialize လုပ္တယ္လို႔ေခၚပါတယ္ ။ တကယ္လို႔ ကၽြန္ေတာ္တို႔ကသာ intialize လုပ္မေပးဘူးဆိုရင္ ကၽြန္ေတာ္တို႔ ေၾကျငာထားတဲ႔ array ေတြက သူ႔ဘာသာ default value ေတြကို intialize လုပ္ေပးနိုင္မွာမဟုတ္ပါဘူး ။ array ေတြကို intialize လုပ္ရာ မွာ declare လုပ္ေပးရင္း တခါတည္း intialize လုပ္တာရယ္ ။ အေပၚမွာ declare လုပ္ၿပီးမွ ထည့္ခ်င္တဲ႔ element ေလးေတြကို ထည့္ေပးတာရယ္ ရွိပါတယ္ ။ ေအာက္က ဥပမာေလးၾကည့္ၾကည့္ပါ ။ ဒါကေတာ႔ declare လုပ္ရင္ းတခါတည္း initialize ပါတြဲလုပ္တ႔ဲ ပံုစံေပါ႔ ။
Example#include <iostream>
using namespace std;
int main()
{
//initializing arrays
char c[]={'A','R','R','A','Y'};
int n[ 10 ] = { 2, 7, 4, 8, 5, 4, 9, 7, 6, 3 };
for ( int j = 0; j < 5; j++ )
cout << c[ j ] <<" ";
cout<<"---->";
for ( int i = 0; i < 10; i++ )
cout << n[ i ] <<" ";
cout<<endl;
cout<<"Element in character array[0] = "<<c[0]<<endl;
cout<<"Element in number array[0] = "<<n[0]<<endl;
return 0;
}
ရွင္းလင္းခ်က္• Array ကို ေၾကျငာမယ္ဆိုရင္ လိုအပ္တဲ႔ပံုစံ အတုိင္းပဲ type ရယ္ array name ရယ္ ၿပီးေတာ႔ [] (square brackts - ေလးေထာင္႔ကြင္း ) ရယ္ပါပါမယ္ ။ တခါတေလမွာ square brackets ထဲမွာ dimension တန္ဖိုးမပါပဲလည္းေရးလို႔ရပါတယ္ ။ ဥပမာ char c[] လိုေပါ႔ ။ တခါတေလမွာေတာ႔ square brackets ထဲမွာ တန္ဖိုးထည့္ေရးနိုင္ပါတယ္ ။ ဥပမာ int n[ 10 ] လိုေပါ႔ ။ ၿပီးရင္ = (equal sign) ခံပါတယ္ ။ ေနာက္ၿပီး ၾကရင္ {} (braces - တြန္႔ကြင္း) ထဲမွာ ကိုယ္ထည့္ခ်င္တဲ႔ တန္ဖိုး (characters , numbers ) ေတြကို ေကာ္မာ ( , ) ခံၿပီးေရးေပးရမွာပါ ။ ၿပီးရင္ေတာ႔ ( ; ) နဲ႔ပိတ္ ေပးရပါမယ္ ။ ဒါဆိုရင္ arrays ေတြကို declare လုပ္တာနဲ႔ initialize လုပ္တာၿပီးပါၿပီ ။
• ေအာက္က for looping ၂ ခုကေတာ႔ array ၂ ခုကို secreen မွာ ထုတ္ျပေပးဖို႔ပါ ။ array မွာေတာ႔ for looping ေတာ္ေတာ္သံုးပါတယ္ ။ for loop ရဲ့အလုပ္လုပ္ပုံကိုနားလည္မွရမွာပါ ။
• ေအာက္ က cout ၂ ခု ထုတ္ေပးထားတာကေတာ႔ array မွာ elements ေတြဘယ္လိုေနရာခ်လဲဆိုတာသိသာေအာင္လို႔ပါ ။ array မွာေနရာခ်ရင္ ၀ (သုည) ကေနစၿပီးေနရာခ်တာပါ ။ အေပၚက ဥပမာမွာ c[0] နဲ႔ n[0] ကိုထုတ္ေပးထားပါတယ္ ။ ကၽြန္ေတာ္တို႔ initialize လုပ္ထားတဲ႔ ပထမဆံုး ဂဏန္းေတြကို ထုတ္ေပးမွာျဖစ္ပါတယ္ ။ ကၽြန္ေတာ္တုိ႔မ်က္စိနဲ႔ၾကည့္ၿပီးေရေတာ႔သာ ၁ ခု ၂ ခု ၃ ခု ဆိုၿပီး elements ေတြကိုေရေနေပမဲ႔ array ကလက္ခံတဲ႔အခါ ၀ ၊ ၁ ၊ ၂ ၊ ၃ ဆိုၿပီး ေရတြက္ပါတယ္ ။ မ်က္စိလည္တက္ပါတယ္ ။ မွတ္ထားရမွာပါ ။
Result
Initialize လုပ္တာေနာက္ထပ္ပံုစံတစ္မ်ိဳးျဖစ္တဲ႔ အရင္ဆံုးေၾကျငာၿပီးေနာက္ၿပီးမွ ႏွစ္သက္ရာ value ကို user ကထည့္ေပးတဲ႔ဥပမာ ေလးထပ္ၾကည့္ပါဦး ။
#include <iostream>
using namespace std;
int main()
{
int n,i,j;
int Num[100];
cout<<"How many numbers in arrays = ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Enter Num["<<i<<"] = ";
cin>>Num[i];
}
cout<<"Your Array is = ";
for(j=0;j<n;j++)
{
cout<<Num[j]<<" ";
}
cout<<endl;
return 0;
}
ရွင္းလင္းခ်က္• Program မွာသံုးမဲ႔ variableေတြျဖစ္တဲ႔ I,j,n တို႔ကို ေၾကျငာလုိက္ပါတယ္ ။ ၿပီးေတာ႔ Num ဆိုတဲ႔ array တစ္ခုကို elements ၁၀၀ အတြက္ဆိုၿပီး ေၾကျငာလုိက္ပါတယ္ ။
• အရင္ဥပမာတုန္းကလို တစ္ခါတည္း value ေတြထည့္ထားတာမ်ိဳးမဟုတ္ပဲ Program ကိုသံုးမဲ႔ user စိတ္ႀကိဳက္ elements ဘယ္ႏွလံုးထည့္ခ်င္လဲဆိုတာေမးလိုက္ပါတယ္ ။ user ကေနထည့္ေပးလိုက္တဲ႔တန္ဖိုးကို variable n ထဲမွာထည့္ထားလိုက္ပါတယ္ ။
• For looping စၿပီးသံုးပါတယ္ ။ i=0 ကေနၿပီး i တန္ဖိုး က ယူဆာ ထည့္ေပးတဲ႔ n ကိုေရာက္တဲ႔အထိ i<n တိုင္ေအာင္ အလုပ္လုပ္ခိုင္းလိုက္ပါတယ္ ။ ဘာလို႔လဲဆိုေတာ႔ array က 0 elements ကေနစလို႔ပါပဲ ။ for loop ထဲမွာပါပဲ elements တစ္ခုခ်င္းစီ အတြက္ တန္ဖိုးေတြကို user ကို ထည့္ေပးခိုင္းပါတယ္ ။ အဲဒီထည့္ေပးလိုက္တဲ႔တန္ဖိုးေတြကို array နဲ႔ဖမ္းထားလိုက္ပါတယ္ ။
• ေနာက္ for loop တစ္ခုကေတာ႔ ယူဆာထည့္ေပးတဲ႔ array ကို ျပန္ျပေပးတာျဖစ္ပါတယ္ ။
Result
Random ArraysArrays ရဲ့ elements ေတြကို declare လုပ္ရင္တခါတည္း initialize လုပ္တာရွိတယ္ ။ ေနာက္ၿပီး ယူဆာ ရဲ့စိတ္ႀကိဳက္ တန္ဖိုးေတြရိုက္ထည့္တာ ရွိတယ္ ။ အခု ဟာကေတာ႔ Ramdom ေခါက္ၿပီးထည့္တာ ပါ ။ Ramdom ဆိုတာကေတာ႔ ကံစမ္းမဲအတြက္ ေဂၚလီလံုးေလးေတြႏွိဳက္သလို ပါပဲ သူက်ခ်င္တဲ႔ ဂဏန္းေတြက်ပါတယ္ ။ arrays ရဲ့ elements ေတြအတြက္ တန္ဖိုးထည့္ရာမွာလည္း ဘယ္ကေနဘယ္အတြင္း က ဂဏန္းေတြ ကို random numbers ေခါက္ေပးပါလို႔ေျပာထားလို႔ရပါတယ္ ။ ဥပမာေလးကိုၾကည့္ၾကည့္ရေအာင္။
Example#include <iostream>
#include <stdlib>h>
using namespace std;
int main()
{
int a[10], b[3][4];
double d[10];
cout<<"First array : "<<endl;
for (int i=0;i<10;i++)
a[i]=rand()%400;
for (int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<endl;
cout<<"Second array : "<<endl;
for (int i=0;i<3;i++)
d[i]=rand()/32768>0;
for (int i=0;i<3;i++)
cout<<d[i]<<" ";
cout<<endl;
cout<<endl;
cout<<"Third array : "<<endl;
for (int i=0;i<3;i++)
for (int j=0;j<4;j++)
b[i][j]=rand()%100+1;
for (int i=0;i<3;i++)
{cout<<endl;
for (int j=0;j<4;j++)
cout<<b[i][j]<<" ";
}
cout<<endl;
cout<<endl;
return 0;
}
ရွင္းလင္းခ်က္• Program ထဲမွာကၽြန္ေတာ္တို႔ က rand() ဆိုတဲ႔ဖန္ရွင္ကိုသံုးမွာျဖစ္လို႔ သူနဲ႔ပက္သက္တဲ႔ header file ကိုဦးစြာေၾကျငာေပးရပါမယ္။ rand ဖန္ရွင္ဟာ stdlib>h ရဲ့ေအာက္မွာရွိလို႔ အေပၚမွာသူ႔ကိုေၾကျငာေပးခဲ႔ရပါမယ္ ။
• Program မွာသံုးမဲ႔ variables နဲ႔ arrays ေတြကို declare လုပ္ပါတယ္ ။
• ေနာက္ First Array ရဲ့ေအာက္မွာ for looping စသံုးၿပီးေတာ႔ array a[] ထဲကို ၀ ကေန ၃၉၉ ထိဂဏန္းေတြကို random ေခါက္ၿပီးထည့္လိုက္ပါတယ္ ။ မ်က္စိနည္းနည္းလည္သြားမယ္ထင္တယ္ ။ rand ရဲ ့အလုပ္လုပ္ပံုကိုေအာက္မွာတစ္ခ်က္ၾကည့္ၾကည့္ပါ ။
rand () -- ဆိုရင္ 0 ကေန infinity သူက်ခ်င္ရာက်မွာပါ ။
rand ()% 400 - ဆိုရင္ 0 ကေန 399 အတြင္း ဂဏန္းေတြကို random ေခါက္ေပးမွာပါ ။
rand()%100+1 -- ဆိုရင္ 1 ကေန 100 အတြင္းဂဏန္းေတြကို random ေခါက္ေပးမွာပါ
rand()%50+1000 -- ဆိုရင္ေတာ႔ 1000 ကေန 1050 အတြင္းက ဂဏန္းေတြကို random ေခါက္ေပးမွာျဖစ္ပါတယ္ ။
ဒါေၾကာင္႔မို႔ ပ ထမ array မွာဆိုရင္ elements တန္ဖိုး ကို ၁၀ လံုးေပးထားတဲ႔အတြက္ 0 ကေန 399 ၾကားမွာရွိတဲ႔ ဂဏန္း ၁၀ လံုးပါဝင္မွာျဖစ္ပါတယ္ ။
• ဒုတိယ arrays မွာက်ေတာ႔ elements ကို ၃ လံုးပဲထုတ္ခိုင္းထားတယ္ ။ ဒါေပမဲ႔ random ေခါက္လို႔ရလာတဲ႔တန္းဖိုးကို 32768>0 နဲ႔တခါတည္းတန္းစားၿပီး ရတဲ႔ တန္ဖိုးကိုမွ array ထဲထည့္ခိုင္းထားပါတယ္ ။ ၿပီးတဲ႔အခါမွ အေျဖထုတ္ေပးတဲ႔အခါမွာေတာ႔ ဂဏန္း ၃ လံုးကိုျမင္ရမွာျဖစ္ပါတယ္ ။
• တတိယ array မွာေတာ႔ two-dimension array တစ္ခုကို row 3 ခု column 4 ခုနဲ႔ ေၾကျငာေပးထားပါတယ္ ။ သူ႔ရဲ့ elements ေတြအတြက္ေတာ႔ rand()%100+1 ဆိုတဲ႔အတြက္ ၁ ကေန ၁၀၀ အတြင္း က ဂဏန္း ၁၂ ခုကို random ေခါက္ေပးခိုင္းထားတာျဖစ္ပါတယ္ ။
ကၽြန္ေတာ္ run ထားတ႔ဲအေျဖေလးကိုၾကည့္ၾကည့္ပါ ။ စာဖတ္သူ အေနနဲ႔ကိုယ္တုိင္ Run ၾကည့္မယ္ဆုိရင္ေတာ႔ ကၽြန္ေတာ္ထြက္တဲ႔အေျဖနဲ႔တူခ်င္မွတူမွာပါ ။ ဘာလို႔လဲဆိုေတာ႔ random numbers ေတြဟာတစ္ႀကိမ္နဲ႔တစ္ႀကိမ္မတူညီိလို႔ပါပဲ ။
Result
Finding MAXIMUM , MINIMUM , SUM , AVERAGE in ArraysArrays ထဲမွာရွိတဲ႔ elements ေတြရဲ့ အႀကီးဆံုး elements ေတြ အငယ္ဆံုး element ေတြ ၿပီးေတာ႔ အဲဒီ elements ေတြေပါင္းလဒ္ေတြ ၊ၿပီးေတာ႔ အဲဒီ elements ေတြရဲ့ ပ်မ္းမွ် တန္ဖိုးေတြကိုရွာေပးနိုင္မဲ႔ ဥပမာေလးတစ္ပုဒ္ကိုၾကည့္ၾကည့္ရေအာင္ဗ်ာ ။
#include <iostream>
using namespace std;
int main()
{
int n,i,j,sum=0,max,min;
float avg;
int Num[100];
cout<<"How many numbers in arrays = ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Enter Num["<<i<<"] = ";
cin>>Num[i];
}
cout<<"Your Array is = ";
for(j=0;j<n;j++)
{
cout<<Num[j]<<" ";
}
cout<<endl;
max=min=Num[0];
for(i=0;i<n;i++)
{
if(Num[i]>max)
max=Num[i];
if(Num[i]<min)
min=Num[i];
sum=sum+Num[i];
}
avg=sum/n;
cout<<"Maximum Number in Array is = "<<max<<endl;
cout<<"Minimum Number in Array is = "<<min<<endl;
cout<<"The Sum of elements in Array is = "<<sum<<endl;
cout<<"Average Number in Array is = "<<avg<<endl;
return 0;
}
ရွင္းလင္းခ်က္• ထံုးစံအတုိင္းပဲ Program ထဲမွာသံုးမဲ႔ variables (n , I ,j , max ,min , sum ,)ေတြ နဲ႔ array ကိုေၾကျငာလိုက္ေပးလိုက္ပါတယ္ ။
• ၿပီးတဲ႔အခါမွာေတာ႔ အရင္က ဥပမာေရးျပခဲ႔တဲ႔အတိုင္းပဲ array မွာ elements ဘယ္ႏွလံုးေပးမလဲဆိုတာကို ေတာင္းပါတယ္ ။ ေပးလိုက္ၿပီဆိုရင္ cin>>n; ဆိုၿပီ ထည့္ထားလိုက္ပါတယ္ ။ ၿပီးေတာ႔ for looping သံုးၿပီးေတာ႔ element တစ္လံုးခ်င္းစီအတြက္တန္ဖိုးေတြရိုက္ထည့္ေပးခိုင္းပါတယ္ ။ ေနာက္ၿပီး user ရဲ့ array ကို Your array is ဆုိၿပီးျပန္ျပေပးလိုက္တယ္ ။
• ေနာက္တဆင္႔မွာေတာ႔ max=min=Num[0]; ဆိုၿပီး အႀကီးဆံုးအငယ္ဆံုးကိန္းေတြဟာ Num ဆိုတဲ႔ array ရဲ့ ပထမဆံုးကိန္းနဲ႔ ညီပါတယ္ဆိုၿပီး initialize လုပ္ထားလိုက္ပါတယ္ ။
• For loop ကိုသံုးၿပီး စ အလုပ္လုပ္ပါေတာ႔မယ္ ။ ပထမဆံုး for loop တစ္ပါတ္မွာ max နဲ႔ min ထဲမွာ array ရဲ့ ပထမဆံုး element က ဝင္ၿပီးသားျဖစ္လို႔ ပထမအလံုးနဲ႔ ေနာက္ထပ္ ဒုတိယေျမာက္ element နဲ႔တိုက္စစ္လုိက္ပါတယ္ တကယ္လို႔ ဒုတိယ element ဟာ ပထမ element ထက္ ႀကီးမယ္ဆိုရင္ ဒုတိယ element ကို maximum ေနရာေလးမွာေျပာင္းထားလိုက္ပါတယ္ ။ တကယ္လို႔ ငယ္ခဲ႔မယ္ဆိုရင္ေတာ႔ ဒုတိယ element ကို minimun ဆိုတဲ႔ေနရာေလးမွာေျပာင္းထားလိုက္ပါတယ္ ။
• အဲဒီအတိုင္းပဲ ဒုတိယ for looping တစ္ပတ္မွာ တတိယ elements နဲ႔ ထပ္စစ္ပါတယ္ ။ အဲလို နဲ႔ ႀကီးတာေတြ႔ရင္ max ထဲေျပာင္းထည့္လိုက္ ။ ပိုငယ္တာေတြ႔ရင္ min ထဲေျပာင္းထဲ႔လိုက္နဲ႔ looping ပတ္လိုက္စစ္လိုက္ လုပ္လိုက္တာ elements ေတြအားလံုး ကုန္သြားတဲ႔အခါမွာေတာ႔ array ထဲကအႀကီးဆံုး element ဟာ max မွာရွိေနၿပီး ။ အငယ္ဆံုး element ကေတာ႔min မွာရွိေနပါတယ္ ။
• ေနာက္ ေပါင္းလဒ္ေတြကိုရွာ တဲ႔အခါမွာေတာ႔ sum=0; လို႔ intialize လုပ္ေပးထားခဲ႔ၿပီး ေအာက္က for loop ထဲမွာေတာ႔ sum=sum+Num[i]; လို႔ေရးထားတဲ႔အတြက္ ။ sum=0+Num[0]; ကေနစၿပီးေပါင္းလိုက္တာ element ေတြ အားလံုးၿပီးတဲ႔အခါမွာ အားလံုးေပါင္းျခင္းတန္ဖိုး ဟာ sum ထဲမွာေရာက္ေနပါတယ္ ။
• Average တန္ဖိုးကေတာ႔ ရွင္းပါတယ္ ။ elements ေတြအားလံုးရဲ့ေပါင္းျခင္းတန္ဖိုးျဖစ္တဲ႔ sum ကုိတည္ၿပီး ၊ element အေရအတြက္ျဖစ္တဲ႔ user ထည့္ေပးထားတဲ႔ n တန္ဖိုးနဲ႔စားေပးလိုက္တဲ႔အခါမွာ average တန္ဖိုးရလာတာပါ ။
• အားလံုးလုပ္ေဆာင္ၿပီးတဲ႔အခါမွာ အႀကီးဆံုးတန္ဖိုး ၊ အငယ္ဆံုးတန္ဖိုး ၊ ေပါင္းျခင္းတန္ဖိုး ၊ နဲ႔ပ်မ္းမွ် တန္ဖိုးတို႔ကို အသီးသီး secreen မွာထုတ္ေပးလိုက္ပါတယ္ ။
Result ကို ၾကည့္ၾကည့္လိုက္ရင္ ပိုၿပီးနားလည္သြားမယ္ထင္ပါတယ္ ။
Result
How to know Size Of ArraysArrays ေတြရဲ့ size (သို႔) array မွာ elements ဘယ္ေလာက္ပါဝင္လဲဆိုတာကို အလြယ္တကူသိနုိင္ပါတယ္ ။ အဲလိုသိဖို႔ အတြက္ sizeof ေအာ္ပေရတာကိုသံုးရပါတယ္ ။ ေအာက္ကဥပမာေလးကိုၾကည့္ၾကည့္ပါ ။
#include<iostream>
using namespace std;
int main()
{
int a[]={1,2,3,4,5,6,11,16,12,2,2,4,6,7,8,9,0,12,-3,5,1,1,100,23,65,90};
char b[]={'O','n','O','u','r','H','a','n','d','s'};
int nArraySize,cArraySize;
nArraySize=sizeof a/sizeof(int); //total size of array/size of array data type
cArraySize=sizeof b/sizeof(b[0]);
cout<<"size Of NumberArray is = "<<nArraySize<<endl;
cout<<"size Of CharacterArray is = "<<cArraySize<<endl;
int min=a[0];
int max=a[0];
for(int i=0;i<nArraySize;i++)
{
if(max<a[i]) max=a[i];
if(min>a[i]) min=a[i];
}
cout<<"Maximum Element in NmuberArray is = "<<max<<endl;
cout<<"Minimun Element in NmuberArray is = "<<min<<endl;
return 0;
}
ရွင္းလင္းခ်က္• int a[]={1,2,3,4,5,6,11,16,12,2,2,4,6,7,8,9,0,12,-3,5,1,1,100,23,65,90};
char b[]={'O','n','O','u','r','H','a','n','d','s'};
arrays 2 ခုကို declareation နဲ႔ initialization တခါတည္းလုပ္လိုက္ပါတယ္ ။ ၿပီးေတာ႔size ေတြကိုသိဖို႔အတြက္ variables ႏွစ္ခုကို ပါ declare လုပ္ေပးလိုက္ပါတယ္ ။
• အေပၚမွာ ကၽြန္ေတာ္ သံုးခဲ႔ arrays ၂ ခုရဲ့ size (သို႔) element ဘယ္ႏွခု ပါသလဲဆိုတာ သိခ်င္တယ္ ။ အဲဒီအတြက္ေၾကာင္႔ sizeof array/sizeof array(type) ဆို ၿပီး sizeof Operator ကိုသံုးၿပီးရွာလိုက္ပါတယ္ ။ Program မွာေတာ႔ sizeof a/sizeof a(int); ဆိုၿပီးေရးထားပါတယ္ ။ အဲလိုမ်ိဳးသံုးလို႔ရသလို sizeof a/ sizeof (a[0]); ဆိုတဲ႔ပံုစံမ်ိဳးလည္း သံုးနိုင္ပါေသးတယ္ ။ အဲဒီ ၂ ခုကတူတူပဲျဖစ္ပါတယ္ ။
• ေနာက္ character array အတြက္ size ကိုလည္း အေပၚကနည္းအတိုင္း ပဲ sizeof b/sizeof (char); လို႔ေရးၿပီးရွာနိုင္သလို sizeof b/sizeof(b[0]); လို႔ေရးၿပီးလည္းရွာနိုင္ပါတယ္ ။
• Arrays ၂ ခုရဲ့ size ေတြကို သိသာေအာင္ secreen မွာထုတ္ေပးလိုက္ပါတယ္ ။
• ၿပီးတဲ႔အခါမွာေတာ႔ အရင္ဥပမာတုန္းကတိုင္းပဲ max နဲ႔ min ကို intialize လုပ္လိုက္တယ္ ။ ၿပီးေတာ႔ i=0 ကေန အခုနကရွာထားတဲ႔ size အထိ looping ပတ္ၿပီး Maximun နဲ႔ minimun တန္ဖိုးေတြကိုရွာေပးလိုက္ပါတယ္ ။အေပၚဥပမာနဲ႔တူတူမို႔ အက်ဥ္းခ်ဳပ္ေျပာလိုက္တာပါ ။ ဒီဥပမာ က sizeof သံုးၿပီး array ေတြရဲ့ size ရွာတာ ကို အဓိကေျပာခ်င္တာပါ ။
Result
Sorting in Arraysအခု Arrays ေတြမွာ elements ေတြကို sorting လုပ္တဲ႔နည္းကို ဥပမာေလးနဲ႔ေဆြးေႏြးေပးပါမယ္ ။ ေအာက္ကဥပမာေလးကိုၾကည့္ၾကည့္ပါ။
#include<iostream>
using namespace std;
int main()
{
int i;
int j,n;
int tmp;
int arr[]={6,3,9,8,4,8,9,4,2,9,4,8,1,5,2};
n=sizeof arr/sizeof(int);
cout<<"Before Sorting ---> ";
for(j = 0; j < n; j++)
{
cout<<arr[j]<<" ";
}
cout<<endl;
//start sorting ascending
for(i = 0; i <= n-1; i++)
{
for(j = 0; j <= n-2-i; j++)
{
if( arr[j]>arr[j+1] )
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
//For Output
cout<<"After Sorting(Ascending) ---> ";
for(j = 0; j < n; j++)
{
cout<<arr[j]<<" ";
}
cout<<endl;
//start sorting decending
for(i = 0; i <= n-1; i++)
{
for(j = 0; j <= n-2-i; j++)
{
if( arr[j]<arr[j+1] )
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
//For Output
cout<<"After Sorting(Decending) ---> ";
for(j = 0; j < n; j++)
{
cout<<arr[j]<<" ";
}
cout<<endl;
return 0;
}
ရွင္းလင္းခ်က္• အရင္ဥပမာေတြတုန္း ကေဆြးေႏြးခဲ႔တဲ႔တိုင္းပါပဲပထမဆံုးလိုအပ္တာေတြကို declare လုပ္တယ္ array ရဲ့ size ကိုရွာမယ္ ။ ၿပီးေတာ႔ looping ပတ္ၿပီး sorting မစီရေသးခင္ array ကုိထုတ္ျပမယ္ ။ ဒီအထိက အရင္ဥပမာေတြတိုင္းပါပဲ ။
• Start sorting ဆိုတဲ႔ အစိမ္းေရာင္ေလးနဲ႔ ကြန္႔မန္႔ေပးထားတဲ႔ေနရာေလးကစၿပီး array ထဲက elements ေတြကို sorting စီမွာျဖစ္ပါတယ္ ။ sorting စီတဲ႔ေနရာမွာ bubblesort နည္းကိုသံုးၿပီးစီမွာျဖစ္ပါတယ္ ။ program ထဲမွာေတာ႔ for loop ၂ ခုသံုးၿပိးေရးထားတယ္ ၿပီးေတာ႔ i<n-1 ေတြေရာ i<n-2-i ေတြေရာဆိုေတာ႔ နည္းနည္းရွဳပ္သလိုလိုပါပဲ ။ ဒါေပမဲ႔ bubble sort ရဲ့ စီတဲ႔ပံုကို ၾကည့္ရင္ နားလည္လြယ္မွာပါ ။ ကၽြန္ေတာ္႔ ေပးထားတဲ႔ array မွာက element 15 လံုးရွိပါတယ္ အားလံုးစီျပရင္ေတာ႔ အရွည္ႀကိးျဖစ္ေနမွာမို႔ ေရွ့ ၅ လံုးပဲစီျပပါ႔မယ္ ။ ငယ္စဥ္ႀကီးလိုက္စီမွာျဖစ္လို႔ ေရွ့ေနာက္ ဂဏန္း ၂ လံုးကို ႏွိဳင္းယွဥ္ၿပီး ငယ္တဲ႔ဟာကိုေရွ့ကိုပို႔မွာပါ ။
6 3 9 8 4
၃ ၆ 9 8 4
3
၆ ၉ 8 4
3 6
၈ ၉ 4
3 6 8
၄ ၉ဒါဆိုရင္Looping တစ္ပါတ္ျပည့္မွာပါ ။ ႏွိဳင္းယွဥ္ၿပီး ခ်ိန္းတဲ႔ ဂဏန္းေတြကိုကၽြန္ေတာ္ျမန္မာလုိေရးျပထားပါတယ္ ။ အခုေနာက္ထပ္တစ္ပါတ္ ထပ္ပတ္မွာျဖစ္ပါတယ္ ။
3 6 8 4 9
၃ ၆ 8 4 9
3
၆ ၈ 4 9
3 6
၄ ၈ 9
3 6 4
၈ ၉ဒါဆိုရင္ ဒုတိယတစ္ပါတ္ၿပိးပါၿပီ ။
3 6 4 8 9
၃ ၆ 4 8 9
3
၄ ၆ 8 9
3 4
၆ ၈ 9
3 4 6
၈ ၉ဒါဆိုရင္ ၿပီးသြားပါၿပီ ။ ၆ ၃ ၉ ၈ ၄ ဆိုတဲ႔ ဂဏန္း ၅ လံုးကေန ၃ ၄ ၆ ၈ ၉ ဆိုၿပီး ငယ္စဥ္ႀကီးလိုက္ ဂဏန္းေတြ စဥ္ၿပီးသားျဖစ္သြားပါၿပီ ။ တကယ္လို႔ ႀကီးရာကေနငယ္တဲ႔ ႀကီးစဥ္ငယ္လုိက္စီမယ္ဆိုလည္း ႀကီးတဲ႔ဂဏန္းကို ေရွ့ပို႔ သြားတာပါ ။ ဒါေၾကာင္႔ ascending နဲ႔ decending စီဖို႔ အတြက္ေရးတဲ႔အခါမွာ if (arr[j] < arr[j+1]) ဆို ၿပီး > (greater than) နဲ႔ < (less than) ဆိုတဲ႔ sign ေလး ၂ ခုပဲကြာသြားတာပါ ။
• Ascending Sorting အတြက္ For Loop တစ္ခုသံုးတယ္ၿပီးေတာ႔ OutPut ျပဖို႔အတြက္ For Loop တစ္ခါထပ္သံုးတယ္ ။ စတဲ႔ေနရာေတြကိုသိသာေအာင္လို႔ ကြန္႔မန္႔ေလးေတြနဲ႔ //start sorting Ascending စသည္ျဖင္႔ေရးျပထားပါတယ္ ။
• Decending Sorting အတြက္လည္းပဲ Ascending လိုပါပဲ ။ sorting စီတဲ႔ For loop ေလးကိုေသခ်ာျပန္ၾကည့္ၾကည့္ပါ ။ နားလည္ပါလိမ္႔မယ္ ။
Result
Arrays မွ စံုဂဏန္းမ်ား ၊ မဂဏန္းမ်ား ၊ အႏွုတ္ကိန္းမ်ား ၊ အေပါင္းကိန္းမ်ား ကိုရွာေဖြျခင္းArrays ေတြနဲ႔အလုပ္လုပ္ရာမွာ Looping ေတြကိုအသံုးျပဳပါတယ္ ။ အဲဒီ Loop ေတြထဲမွာ စစ္ေဆးတဲ႔ condition ေလးေတြထည့္ၿပီးကိုယ္ လိုခ်င္တဲ႔ elements ေလးေတြခ်ည္းပဲ ထုတ္ႏွဳတ္ၿပီးယူ လို႔ရပါတယ္ ။ အခု ေဆြးေႏြးမွာကေတာ႔ Array တစ္ခုကေနၿပိးေတာ႔ အေပါင္းကိန္း၊ အႏွုတ္ကိန္းေတြ ၊ စံုကိန္းမကိန္းေတြ ထုတ္ႏွဳတ္ၿပီးယူတဲ႔ပံုစံေလးပဲျဖစ္ပါတယ္ ။
Example#include<iostream>
using namespace std;
int main()
{
int i;
int j,n;
int tmp;
int arr[]={6,3,9,8,4,-8,9,4,2,9,-4,8,1,5,2,0,-23,-3,4,22,35};
n=sizeof arr/sizeof(int);
cout<<"Natural Numbers in Array -----> ";
for(i=0;i<n;i++)
{
if(arr[i]>=0)
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"Sorting Natural Numbers(ascending)-----> ";
for(i = 0; i <= n-1; i++)
{
for(j = 0; j <= n-2-i; j++)
{
if( arr[j]>arr[j+1] )
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for(j = 0; j < n; j++)
{
if(arr[j]>=0)
cout<<arr[j]<<" ";
}
cout<<endl;
cout<<"Negative Numbers in Array -----> ";
for(i=0;i<n;i++)
{
if(arr[i]<=0)
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"Even Numbers in Array----> ";
for(j = 0; j < n; j++)
{
if(arr[j]%2==0)
cout<<arr[j]<<" ";
}
cout<<endl;
cout<<"Odd Numbers in Array----> ";
for(j = 0; j < n; j++)
{
if(arr[j]%2!=0)
cout<<arr[j]<<" ";
}
cout<<endl;
int max=arr[0];
cout<<"Largest Even Numbers in Array----> ";
for(j = 0; j < n; j++)
{
if((arr[j]%2==0)&&(arr[j]>max))
max=arr[j];
}
cout<<max<<endl;
return 0;
}
ရွင္းလင္းခ်က္• အေပၚကဥပမာ Program ေလးမွာဆိုရင္ Natural Number ရွာေပးတာ ၊ Negative Nuber ရွာေပးတာ ၊ Even Number ရွာေပးတာ ၊ Odd Numbers ရွာေပးတာ ၊ ေနာက္ၿပီး Even Numbers ေတြထဲကအႀကီးဆံုးကိန္း ရွာေပးတာဆိုၿပီး အပိုင္း ၅ပုိင္းကို သူ႔အပိုင္းေလးနဲ႔သူေရးထားပါတယ္ ။
• ပထမဆံုးကေတာ႔ လုပ္ရိုးလုပ္စဥ္အတုိငး္ပါပဲ Program မွာသံုးမဲ႔ variables ေတြ နဲ႔ array ကို declare လုပ္ပါမယ္ ။ array ရဲ့ Size ကိုရွာေပးပါမယ္ ။ ၿပီးရင္ Natural Numbers ေတြကိုရွာေပးပါမယ္ ။ Natural Numbers ဆိုတာကေတာ႔သိၿပီးတဲ႔အတိုင္းပါပဲ 0 (သုည) ကေနၿပီး infinity (အဆံုးမရွိ) ဂဏန္းေတြထိကို Natural Numbers လို႔ေခၚတာပါ ။ သုညန႔ဲသုညထက္ႀကိးတဲ႔ဂဏန္းအားလံုးကို array ထဲကေန ၿပီး ထုတ္ေပးမွာပါ ။ အဲဒါေၾကာင္႔ ပထမဆံုး array ထဲ က elements အားလံုးကိုအလုပ္လုပ္နိုင္ဖို႔ For (i=0;i<n;i++) ဆိုၿပီး Looping သံုးလိုက္ပါတယ္ ။ ၿပီးေတာ႔ Looping ထဲမွာ ပဲ if(arr[j]>=0) ဆိုၿပီး ကၽြန္ေတာ္တို႔လိုခ်င္တဲ႔ Condition ေလးတစ္ခုနဲ႔ စစ္လိုက္ပါတယ္ ။ array arr ထဲမွာပါတဲ႔ elements ေတြထဲက သုည နဲ႔ သုညထက္ႀကိးတဲ႔ ဂဏန္းေတြပါရင္ေတာ႔ထုတ္ေပးပါလို႔ခိုင္းလိုက္တာပါ ။
• ေနာက္တစ္ပိုင္း ကေတာ႔ အဲဒီ Natural Numbers ေတြကို Sorting အေနနဲ႔စီၿပီးထုတ္ေပးခိုင္းတာပါ ။
• တတိယတစ္ပိုင္းျဖစ္တဲ႔ cout<<”Negative Numbers in Array --” ; ဆိုတဲ႔ေနရာကစၿပိးေတာ႔ Negative (အႏွုတ္) တန္းဖိုးဂဏန္းေတြကို Arrays ထဲကေန ထုတ္ယူေပးဖို႔ေရးထားတာပါ ။ အႏွုတ္တန္ဖိုးဆိုတာကေတာ႔ 0 (သုည) ေအာက္ငယ္ေသာဂဏန္းအားလံုးပါ ။
• Cout<<”Even Numbers in Array--”; ဆိုတဲ႔ Line ရဲ့ေအာက္ကအပိုင္းကေတာ႔ စံုကိန္းေတြကို array ကေန ထုတ္ႏွုတ္ေပးဖို႔ေရးထားတာပါ ။ စံုကိန္းဆိုတာကေတာ႔သိၿပီးတဲ႔တိုင္းပါပဲ ၂ နဲ႔စားၿပီး ျပတ္တဲ႔ကိန္း (အၾကြင္း သုည) အားလံုးကို စံုကိန္းလို႔ေခၚတာပါ ။ အေပါင္းကိန္းေရာ အႏွုတ္ကိန္းပါ အက်ံဳးဝင္ပါတယ္ ။ ဒါေၾကာင္႔မို႔ for Looping ထဲမွာ arr[j]%2==0 လို႔ေရးထားတာပါ ။ % (mod) အၾကြင္းယူတဲ႔ Operator ပါ ။ Operators ေတြအေၾကာင္းေဆြးေႏြးတုန္းကေရးခဲ႔ဖူးပါတယ္ ။
• Cout<<”Odd Numbers in Array -- ”; ဆိုတဲ႔Line ေအာက္ကအပိုင္းကေတာ႔ မကိန္းေတြ ကို array ကေန စစ္ထုတ္ေပးဖို႔ေရးထားတာပါ ။ မကိန္းဆိုတာကေတာ႔ ၂ နဲ႔စားလို႔မျပတ္တဲ႔ကိန္းေတြကိုေခၚတာပါ ။ ဒါေၾကာင္႔ arr[j]%2!=0 ဆိုၿပိး condition ေပးထားတာပါ ။
• ေနာက္ဆံုးတစ္ပိုင္းကေတာ႔ Even Numbers ေတြထဲကေန ၿပီးေတာ႔အႀကီးဆံုးကို ရွာေပးမဲ႔ အပို္င္းပါ ။ array ထဲမွာရွိတဲ႔ elements ေတြထဲကေန ကၽြန္ေတာ္တို႔လိုခ်င္တဲ႔ဟာ က အေျခေန ၂ ခုနဲ႔ ထုတ္ယူရမွာပါ ပထမ စံုကိန္းလည္းျဖစ္ရမယ္ ။ ဒုတိယ စံုကိန္းေတြထဲက အႀကီးဆံုးကိန္းလည္းျဖစ္ရမယ္ ။ အဲဒါေၾကာင္႔ if((arr[j]%2==0)&&(arr[j]>max)) ဆိုၿပီး Condition ၂ ခုကို && (AND Operator) နဲ႔ဆက္ေပးထားတာပါ ။ ရလာမဲ႔ Result ကိုၾကည့္ၾကည့္ပါ ။
Result
Array and PointerArray နဲ႔ Pointer အေၾကာင္းကို Pointer အေၾကာင္းေဆြးေႏြးတုန္းကလည္း တစ္ခါေဆြးေႏြးခဲ႔ဖူးပါတယ္ ။ အဲဒီတုန္း က array အေၾကာင္းမေျပာရေသးေတာ႔ ခ်န္လွန္ထားခဲ႔တာေတြရွိခဲ႔ပါတယ္ ။ ဒါေၾကာင္႔ဒီမွာထပ္ၿပီးေဆြးေႏြးလိုက္ပါတယ္ ။ Array ေတြကို Pointer နဲ႔ point လုပ္တဲ႔အခါမွာ Array ရဲ့ ပထမဆံုး element ျဖစ္တဲ႔ array[0] ကိုပဲ Point လုပ္နိုင္ပါတယ္ ။ ဒါေလးကိုသတိထားမိဖို႔လိုပါတယ္ ။ အရင္ေပးခဲ႔တဲ႔ ဥပမာနဲ႔ပဲျပန္ရွင္းျပလိုက္ပါတယ္ ။ ၾကည့္ၾကည့္ ပါ ။
Example#include<iostream>
using namespace std;
int main()
{
//declare and initialization of array
int iArray[5]={1,2,3,4,5};
char chArray[]="OnOurHands";
//declare Pointers
int *iPtr;
char *chPtr;
//Point Array
iPtr=iArray;
chPtr=chArray;
//deference and Output Pointer
cout<<*iPtr<<endl;
cout<<*chPtr<<endl;
//If you want to output all Elements , do like that
cout<<*(iPtr);
cout<<*(iPtr+1);
cout<<*(iPtr+2);
cout<<*(iPtr+3);
cout<<*(iPtr+4)<<endl;
for(int i=0;i<10;i++)
{
cout<<*(chPtr+i);
}
cout<<endl;
return 0;
}
Array ေတြ Declare လုပ္တယ္ ။ ၿပီးေတာ႔ Pointers ေတြ Declare လုပ္တယ္ ။ Arrays ေတြကို Pointer ေတြနဲ႔ Point လုပ္လိုက္တယ္ ။ အဲဒါေတြၿပီးေတာ႔ cout<<*iPtr<<endl; cout<<*chPtr<<endl; ဆိုၿပီး Pointers ေတြ Derefence လုပ္ၿပီး Output ထုတ္ေပးလိုက္တဲ႔အခါ မွာ 1 ရယ္ O (အို) ရယ္ဆိုၿပီး Array ၂ ခု ရဲ့ ပထမဆံုး Element ၂ ခု ထြက္လာတာကိုေတြ႔ပါလိမ္႔မယ္ ။ ဒါဆိုရင္ Pointer ေတြ က Arrays ေတြရဲ့ ပထမဆံုး Element ကိုသာ Point လုပ္နိုင္တယ္ဆိုတာ သေဘာေပါက္ေလာက္ပါၿပီ ။ ေနာက္မွာေရးထားတာေတြကေတာ႔ ကၽြန္ေတာ္တို႔ က ပထမဆံုး Element တင္မဟုတ္ပဲ Array တစ္ခုမွာရွိတဲ႔ Elements ေတြကို Pointer နဲ႔ထုတ္ေပးခ်င္တဲ႔အခါ Pointer Arithmetic ကိုသံုးၿပီး ထုတ္ေပးတဲ႔ပံုစံ ေရးျပထားတာပါ ။ အဲဒါေၾကာင္႔ ပထမ Integer Array အတြက္
1 2 3 4 5 ေနာက္ Array အတြက္ OnOurHands ဆိုၿပီး Elements အားလံုးထြက္လာတာပါ ။
Example 2Example 2 မွာေတာ႔ elements ေတြႀကိဳတင္ထည့္မထားခင္ ponter နဲ႔ ႀကိဳၿပီး Point လုပ္ထားၿပီးမွ elements ေတြကိုထည့္တဲ႔ပံုစံေလးပါ။ အရင္ array initialize လုပ္တာေဆြးေႏြးတုန္းကတစ္ခါ ေဆြးေႏြးခ႔ဲဖူးပါတယ္ ။ အဲဒီပံုစံနဲ႔ နည္းနည္းေလးပဲကြာပါတယ္ ။
ေလ႔လာၾကည့္ပါ ။
#include <iostream>
using namespace std;
void main()
{
int Count,*arr;
cout<<"How many numbers in Array : ";
cin>>Count;
arr=new int[Count];
for(int i=0;i<Count;i++)
{
cout<<"Enter arr ["<<i<<"] : ";
cin>>arr[i];
}
cout<<"Your Array is : ";
for(int i=0;i<Count;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
ရွင္းလင္းခ်က္• int Count,*arr; မွာ ယူဆာ ကထည့္ေပးတဲ႔ elements ဘယ္ႏွလံုးလဲဆိုတာကို ဖမ္းေပးဖို႔ count ကို integer type အျဖစ္ေၾကျငာတာျဖစ္ၿပီးေတာ႔ *arr ဆိုတာကေတာ႔ pointer array တစ္ခုအျဖစ္ႀကိဳၿပီး ေၾကျငာထားတာပါ ။
• cout<<"How many numbers in Array : ";
cin>>Count;
မွာ စၿပီးေတာ႔ Program User ကိုေမးလိုက္ပါတယ္ array ထဲကို ဂဏန္းဘယ္ႏွလံုးထည့္မလဲေပါ႔ ။ User ထည့္လိုက္တဲ႔ ဂဏန္းကို variable Count ထဲမွာသိမ္းထားလိုက္ပါတယ္ ။
• arr=new int[Count]; ဆိုတာကေတာ႔ ယူဆာကထည့္လိုက္တဲ႔ element အေရအတြက္နဲ႔ array တစ္ခုတည္ေဆာက္ၿပီး Point လုပ္လိုက္တဲ႔သေဘာပါ ။ ဥပမာ Program User ကေန array ထဲမွာ elements ၁၀ လံုးလို႔ ရိုက္ေပးလိုက္တယ္စိုပါ႔စို႔ ။
arr = new int[10]; ဆိုတဲ႔ပံုစံမ်ိဳးျဖစ္သြားပါတယ္ အဲဒါကေတာ႔ Pointer array တစ္ခုျဖစ္တဲ႔ arr မွာ elements ၁၀ ခုပါဝင္တယ္ ။ int arr[10]; ဆိုတဲ႔သေဘာမ်ိဳးျဖစ္သြားပါတယ္ ။ ဘာလို႔ကၽြန္ေတာ္တို႔ က ဒီလိုတန္းမေရးပဲ Pointer array နဲ႔ေရးလည္းဆိုေတာ႔ User ကေန ရိုက္ေပးမဲ႔ Count ဆိုတဲ႔တန္ဖိုး ကို ႀကိဳမသိပါဘူး ။ ၁၀ ျဖစ္ခ်င္လည္းျဖစ္မယ္ ။ ၅ ျဖစ္ခ်င္လည္းျဖစ္မယ္ ။ ၁၀၀ ျဖစ္ခ်င္လည္းျဖစ္မယ္ ။ အဲလိုသူ႔စိတ္ႀကိဳက္ ေပးနိုင္ေအာင္လို႔ အရွင္ျဖစ္ေအာင္လို႔ Pointer array ကိုသံုးၿပီးေရးေပးတာျဖစ္ပါတယ္။
• for(int i=0;i<Count;i++)
{
cout<<"Enter arr ["<<i<<"] : ";
cin>>arr[i];
}
မွာေတာ႔ i = 0 ကေန i < Count (User ရိုက္ထည့္ေပးမဲ႔တန္ဖိုး) ထိ Looping ပတ္ၿပိး Array ထဲကို elements ေတြထည့္သြားမွာျဖစ္ပါတယ္ ။ Looping ပထမတစ္ပါတ္ i = 0 ျဖစ္တဲ႔အခ်ိန္မွာ Enter arr[0] : -- လို႔ေတာင္းမွာျဖစ္ၿပီးေတာ႔ ရိုက္ထည့္ေပးလိုက္တဲ႔တန္ဖိုးကို arr[0] အျဖစ္သိမ္းဆည္းသြားမွာျဖစ္ပါတယ္ ။
• cout<<"Your Array is : ";
for(int i=0;i<Count;i++)
{
cout<<arr[i]<<" ";
}
ကေတာ႔ User ထည့္ထားတဲ႔ elements ေတြကို Secreen မွာ ျပန္ျပေပးဖို႔ေရးေပးထားတာျဖစ္ပါတယ္ ။
ကၽြန္ေတာ္ေဆြးေႏြးတာ က အကုန္ျဖစ္ခ်င္မွျဖစ္မွာပါ ။ ဒါေပမဲ႔ဒီဥပမာ ၂ ခုနဲ႔ဆိုရင္ Pointer နဲ႔ Array ကိုအေျခခံ ေလာက္ေတာ႔ နားလည္လိမ္႔မယ္လို႔ထင္ပါတယ္ ။
Array And Functionတခါတရံမွာ array ေတြကို function ရဲ့ Parameter အျဖစ္ ေရးဖို႔လိုအပ္လာနိုင္ပါတယ္ ။ အဲလို array ေတြကို function မွာ parameter အျဖစ္သံုးမယ္ဆိုရင္ေတာ႔ function ေၾကျငာတဲ႔အခါမွာ void MyFunction(int arg[]) ဆိုၿပီး parameter ေနရာမွာ arg နဲ႔ [] (square bracket) ထည့္ေပးရမွာပါ ။ အဲဒီ arg[] ဟာ int MyArray[50]; စတဲ႔ Integer array မွာပါတဲ႔ elements အားလံုးကုိ pass လုပ္ေပးမွာျဖစ္ပါတယ္ ။ တကယ္လို႔ char arg[] အျဖစ္ ေၾကျငာတယ္ဆိုရင္ေတာ႔ character array ကို pass လုပ္ေပးမွာျဖစ္ပါတယ္ ။ arg ဆိုတာ argument ကိုဆိုလိုတာပါ ။ တကယ္လို႔ arg[] ေနရာမွာ x[] ဒါမွမဟုတ္ myarray [] ဆိုလည္း အလုပ္လုပ္မွာျဖစ္ပါတယ္ ။
Example
// arrays as parameters
#include <iostream>
using namespace std;
void printarray (int arg[], int length)
{
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}
int main ()
{
//Declare array
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8, 10};
//calling function
printarray (firstarray,3);
printarray (secondarray,5);
return 0;
}
ရွင္းလင္းခ်က္• Main Function ထဲမွာ
int firstarray[] = {5, 10, 15};
int secondarray[] = {2, 4, 6, 8, 10}; ဆိုၿပီး array ၂ ခုကို declare လုပ္ေပးထားပါတယ္ ။
• ၿပီးတဲ႔အခါမွာေတာ႔ printarray (firstarray,3); ဆိုၿပီး printarray ဆိုတဲ႔ Function ကုိ call ေခၚလိုက္ပါတယ္ ။ အဲလို call ေခၚလိုက္တဲ႔ အခါမွာ firstarray ထဲမွာရွိတဲ႔ elements အားလံုး ကို arg[] က ေကာ္ပီယူ ၊ 3 ကို length ဆိုတဲ႔ parameter ကေကာ္ပီ ယူၿပီး printarray ဖန္ရွင္မွာ passလုပ္ေပးပါတယ္ ။
• ဒါေၾကာင္႔ printarray ဖန္ရွင္မွာ for (int n=0; n<length; n++) လို႔ေျပာထားတဲ႔အတြက္ n တန္ဖို ၀ ကေန firstarray ရဲ့ length တန္ဖိုး ၃ ထိ looping ပတ္ေပးမွာျဖစ္ပါတယ္ ။ cout << arg[n] << " "; ဆိုတဲ႔အတြက္ firstarray မွာပါတဲ႔ elements ၃ ခုကို ထုတ္ေပးသြားမွာျဖစ္ပါတယ္ ။
• Secondarray ကမွာလည္း firstarray အလုပ္လုပ္တဲ႔အတုိင္းတူတူပဲျဖစ္ပါတယ္ ။ ဒီေလာက္ဆို နားလည္မယ္ထင္ပါတယ္ ။
Two-Dimensional Array (or) MatrixTwo-Dimensional Array ဒါမွမဟုတ္ Matrix ဆိုတာ Array တစ္ခုပါပဲ ။ ဥပမာ
Int TwoDimension [6][6];
One-dimension တုန္းကလို array မ်ိဳး ၆ ခုပါဝင္ပါမယ္ ။ [6][6] မွာ ပထမ 6 သည္ အတန္း (row)တန္ဖိုးျဖစ္ၿပီး ၊ ဒုတိယ 6 သည္ အတိုင္ (column) တန္ဖိုး ျဖစ္ပါတယ္ ။ ေနာက္တစ္မ်ိဳး အေနနဲ႔ဆိုရင္ေတာ႔ ေနာက္ကအေရတြက္သည္ element အေရတြက္ ၊ ေရွ့ကတန္ဖိုးသည္ အတန္းအေရတြက္တန္းဖိုး ၊ တစ္တန္းမွာ elements ၆ ခုပါဝင္မဲ႔ ၆ တန္းပါဝင္မယ္လို႔ဆိုလိုတာပါ ။ Matrix နဲ႔ပက္သက္လို႔ လုပ္ေဆာင္နိုင္မဲ႔ Process ေလးေတြကို ကၽြန္ေတာ္သိသေလာက္ေရးထားတာပါ တခါတည္းပဲ ေရးထားပါတယ္ ။ ေလ႔လာၾကည့္ပါ
Example#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j,k;
int Arr[6][6];
//***********************************************************************
//
Input your 2dimensional-array by keyboard//***********************************************************************
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
Arr[i][j]=(i+j)-2;
}
cout<<endl;
//Result your matrix
cout<<"1>Your Original Matrix : "<<endl;
for(i=0;i<6;i++)
{
cout<<endl;
for(j=0;j<6;j++)
{
cout<<Arr[i][j]<<" ";
}
}
cout<<endl;
//***********************************************************************
//
Sorting your Matrix//***********************************************************************
cout<<"\n2>After Sorting : "<<endl;
int tempElement;
for (i=0;i<6;i++)
for (j=0;j<6;j++)
for (k=0;k<6;k++)
if (Arr[i][j]>Arr[i][k])
{
tempElement=Arr[i][j];
Arr[i][j]=Arr[i][k];
Arr[i][k]=tempElement;
}
cout<<endl;
for(i=0;i<6;i++)
{
cout<<endl;
for(j=0;j<6;j++)
{
cout<<Arr[i][j]<<" ";
}
}
cout<<endl;
//***********************************************************************
//
Delete Column with Largest Element//***********************************************************************
cout<<"\n3>After Delete Column with Largest Element : "<<endl;
int jmax; // to store no of column with largest element
int max; //to store largest element
int b[6][5];
max=Arr[0][0];
jmax=0;
for (i=0;i<6;i++)
for (j=0;j<6;j++);
if (Arr[i][j]>max) // find largest number
{max=Arr[i][j];jmax=j;}
for (i=0;i<6;i++)
for (j=0;j<5;j++)
if (j>=jmax) //find no of column with largest number
b[i][j]=Arr[i][j+1];
else
b[i][j]=Arr[i][j];
cout<<endl;
for (i=0;i<6;i++)
{ cout<<endl;
for (j=0;j<5;j++)
cout<<b[i][j]<<" ";
}
cout<<endl;
//***********************************************************************
//
Delete Column with Largest Element//***********************************************************************
cout<<"\n4>After Changing Row with maximum and minimum element : "<<endl;
int c[6][6],min;
int imax, imin;
max=Arr[0][0];
imax=1;
min=Arr[0][0];
imin=1;
// Find maximum and minimum elements in row
for (i=0;i<6;i++)
for (j=0;j<6;j++)
{
if (Arr[i][j]>max) {max=Arr[i][j];imax=i;}
if (Arr[i][j]<min) {min=Arr[i][j];imin=i;}
}
// Change Row
if (imin!=imax)
{
for (j=0;j<6;j++)
{
tempElement=Arr[imin][j];
Arr[imin][j]=Arr[imax][j];
Arr[imax][j]=tempElement;
}
}
// Output Matrix
cout<<endl;
for (i=0;i<6;i++)
{ cout<<endl;
for (j=0;j<6;j++)
cout<<Arr[i][j]<<" ";
}
cout<<endl;
//***********************************************************************
//
Create next Matrix//***********************************************************************
cout<<"\n5>Next Matrix : "<<endl;
// Next Matrix
for (i=0;i<6;i++)
for (j=0;j<6;j++)
if (j<=i) c[i][j]=6-i+j; else c[i][j]=0;
// OutPut Next Matrix
cout<<endl;
for (i=0;i<6;i++)
{ cout<<endl;
for (j=0;j<6;j++)
cout<<c[i][j]<<" ";
}
cout<<endl;
//***********************************************************************
//
Multiplacation of original and next matrix//***********************************************************************
cout<<"\n6>Multiplication Matrix : "<<endl;
int d[6][6];
for (i=0;i<6;i++)
for (j=0;j<6;j++)
{
d[i][j]=0;
for (k=0;k<6;k++)
d[i][j]=d[i][j]+Arr[i][k]*c[k][j];
}
// Output Result
cout<<endl;
for (i=0;i<6;i++)
{ cout<<endl;
for (j=0;j<6;j++)
cout<<d[i][j]<<" ";
}
cout<<endl;
//***********************************************************************
//
Finding Num of Column with Maximum sum//***********************************************************************
cout<<"\n7>Finding Num of Column with Maximum sum : "<<endl;
int smax,s;
smax=0;
jmax=0;
for (i=0;i<6;i++)
{
smax=smax+d[i][0];
for (j=0;j<6;j++)
{
s=0;
for (i=0;i<6;i++)
{
s=s+d[i][j];
if (s>=smax)
{
smax=s;
jmax=j;
}
}
}
}
//Output No of Colimn
cout<<"j="<<jmax<<endl;
cout<<"Sum of elements in Column = "<<smax<<endl;
cout<<endl;
//***********************************************************************
//
Finding smallest elment from any Column//***********************************************************************
cout<<"\n8>Finding smallest elment from Column 3 and 5 : "<<endl;
int emin3, emin5;
emin3=d[0][2];
emin5=d[0][4];
for (i=1;i<6;i++)
{
if (emin3>d[i][2]) emin3=d[i][2];
if (emin5>d[i][4]) emin5=d[i][4];
}
// output
cout<<"3="<<emin3<<endl;
cout<<"5="<<emin5<<endl;
return 0;
}
Result
သူရဲ့အလုပ္လုပ္ပံုကေတာ႔ အေထြအထူးမရွိပါဘူး အပိုင္ေလးေတြလိုက္ ကြန္႔မန္႔ မွတ္ေပးထားပါတယ္ ။ ကိုယ္တိုင္ Run ၾကည့္ပီးေလ႔လာၾကည့္မယ္ဆိုရင္ အလြယ္တကူနားလည္နိုင္မွာပါ ။ အရင္ က ေဆြးေႏြးခ်က္ေတြကို ေသခ်ာနားလည္ခဲ႔တယ္ဆိုရင္ ပိုအဆင္ေျပမွာပါ ။ multidimensional array (Matrix) နဲ႔ပက္သက္လို႔လုပ္ေဆာင္နိုင္တဲ႔ ဟာေလးေတြကို တစ္ပုဒ္ထဲမွာေပါင္းေရးပီးဥပမာေပးထားတာပါ ။