Join Us on Facebook Follow us on Twitter Add to Circles

Monday, December 29, 2014

C Program:មេរៀនទី៧: Array & Pointer



មេរៀនទី៧: Array & Pointer
7.1. Array
-ជាឈ្មោះនៃសំនុំដែលមានច្រើនធាតុ និង ធាតុនិមួយរបស់វាមានប្រភេទទិន្នន័យ
ដូចគ្នា និង អាចផ្ទុកតម្លៃបានរៀងៗខ្លួន។
-ការប្រកាស់អថេរប្រភេទ Array ក៌មានលក្ខណៈដូចការប្រកាសប្រភេទធម្មតាដែរ
តែត្រូវចាំថា ប្រភេទទិន្នន័យរបស់ Array គឺជាប្រភេទទិន្នន័យរបស់ធាតុនិមួយៗនៃ Array

ទំរង់
ប្រភេទទិន្នន័យ        ឈ្មោះរបស់ array[ចំនួនធាតុរបស់array]
Data type         VariableName[Size of array]

+បំណកស្រាយៈ
int a[5]
-ជា array​ប្រភេទ integer
-ឈ្មោះរបស់អថេរគឺ a
-ចំនួនវិមាត្រៈ ១
-ចំនួនធាតុ​មាន ៥​ គឺ: a[0], a[1], a[2], a[3], a[4]

int x[3][4]
-ជា array​ប្រភេទ integer
-ឈ្មោះរបស់អថេរគឺ x
-ចំនួនវិមាត្រៈ 2
-ចំនួនធាតុ​មាន 3x4=12​ គឺ:

X[0][0]            x[0][1]             x[0][2]             x[0][3]
X[1][0]            x[1][1]             x[1][2]             x[1][3]
X[2][0]            x[2][1]             x[2][2]             x[2][3]

ធាតុរបស់ array ផ្តើមពី 0 ដល់ n-1
Ex:យើងមាន a[10] នោះ
-ធាតុដំបូង(first element)គឹ a[0]
-ធាតុចុងក្រោយ(last element)គឺ a[9]

Ex:
#include<conio.h>
#include<stdio.h>
void main()
{
    int a[5]={2,3,1,5,6};
    printf(“a[2]=%d”,a[2]);
    getch();
}

Ex:ពិនិត្យមើលលទ្ធផលនៃផលបូករបស់ array
#include<stdio.h>
#include<conio.h>
void main()
{
     int a[]={2,5,7,9,2};
     int i,sum=0;
    for(i=0;i<5;i++)
     {
          sum=sum+a[i];        
     }
     printf(“ value of sum=%d”,sum);
     getch();
}

Ex:តំរៀបលំដាប់កើននៃ array
#include<stdio.h>
#include<conio.h>
void main()
{
​​​​    int x[]={2,5,3,9,2};
     int i,j,temp;
     
   printf(“ Array after sort:\n);
    for(i=0;i<5;i++)
       printf(“%3d”,x[i]);
    getch()
}

//Sort  Array
for(i=0;i<5;i++)
     {
          for(j=i;j<5;j++)
            {
                if(x[i]>x[j];
                {
                     temp=x[i];
                     x[i]=x[j];
                     x[j]=temp;
                }
            }
     }

-ការប្រកាស arrayប្រភេទ Character និង String
នៅក្នុងភាសា C​​ ការប្រកាស arrayប្រភេទ Character គឹដូចគ្នាទៅនឹង ការប្រកាស string
ដែរ ដោយធាតុចុងក្រោយមានផ្ទុកធាតុ Null
Ex:ពិនិត្យមើលការប្រកាសខាងក្រោម៖
A[5]={‘a’,’b’,’c’,’d’}
A[5]=“abcd”
A[]=“abcd”
ការប្រកាសទាំង៣ខាងលើនេះគឺដូចគ្នា
7.2. Array ច្រើនវិមាត្រ(Multidimensional Array)
ជា Array ដែលមានបណ្តាធាតុ ច្រើន rows និង ច្រើន columns
ការភ្ជាប់តំលៃចាប់ផ្តើមអោយ array ច្រើនវិមាត្រ
-Int a[3][4 ]={ {2,3,4,5} , {4,3,6,5} , {9,1,2,3} };
-Int a[3][4]={
                                    {2,3,4,5},
                                    {4,3,6,5},
                                    {9,1,2,3}
                              };
-char names[3][5] ={“koko”,”kaka”,”kiki”};

Ex:ពិនិត្យមើលលទ្ធផលនៃ array
#include<stdio.h>
#include<conio.h>
void main()
{
   char name[3][5]={“koko”,”kaka”,”kiki”};
   printf(“Name at name[2]=%s”,name[2]);
   printf(“Character at name[1][1]=%c”,name[1][1]);
   getch();
}

7.3. Pointer
-Pointer គឺជាអថេរមួយប្រភេទដែលត្រូវបានគេប្រើសម្រាប់ផ្ទុកអាសយដ្ឋានរបស់អថេរប្រភេទណាមួយ។
-ដោយសារតែអាសយដ្ឋានមានច្រើនប្រភេទ ដូច្នេះ Pointer ក៌មានច្រើនប្រភេទដែរ
ដែលប្រភេទនិមួយៗសមមួលទៅនឹងប្រភេទអាសយដ្ឋាននោះ។ មានន័យថាៈ
-Pointer ប្រភេទ int សម្រាប់ផ្ទុក address របស់ int
-Pointer ប្រភេទ float សម្រាប់ផ្ទុក address របស់ float
ទំរង់
DataType *variable_name

ការប្រើប្រាស់
int a, *p,*q; // ប្រកាសអថេរ a, pointer p, pointer q ជាប្រភេទ int
p=&a;  // ភា្ជប់អាសយដ្ឋាន a អោយទៅ pointer p p ចង្អុលទៅកាន់
អាសយដ្ឋានរបស់អថេរ a
q=p    // ភ្ជាប់តំលៃ p អោយទៅ q

Ex:
ចូរពិនិត្យ Address និង តំលៃ
#include<stdio.h>
#include<conio.h>
void main()
{
      int a,b,*pa,*pb;
      a=2;
      b=3;
      printf(" value a=%d\n value b=%d",a,b);
      pa=&a;
      pb=&b;
      printf("\n Memory using for pointer pa=%d, pb=%d",pa,pb);
      printf("\n Value for pointer  pa=%d, pb=%d",*pa,*pb);
     getch();
}
Ex:
#include<stdio.h>
#include<conio.h>
void main()
{
 float a[4],*pa, s=0 ;
int i;
pa=a;  // pa ចង្អុលទៅកាន់ធាតុដំបូងរបស់ array a
     for(i=0;i<4;i++)
       {
               printf("a[%d]-->",i);
               scanf("%f",&pa[i]);
               s+=a[i];
      }
      printf("sum of array=%f",s);
     getch();
}

Ex: swap(permute) value of 2 number ( ធ្វើការបំលាស់ប្តូរតំលៃនៃ ចំនួន)
#include<stdio.h>
#include<conio.h>
void swap(int *a, int *b)
{
 ​​​​   int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
void main()
{
    int m=20,n=30;
    printf("befor  swap : m=%d , n=%d \n",m,n);
       swap(&m,&n);
    printf("after swap : m=%d, n=%d \n",m,n);
   getch();
}

2 comments: