Wednesday, October 17, 2018

Pointers and Arrays


1. Pointer

  Apa itu Pointers? Pointers adalah sebuah variabel yang menyimpan alamat dari variabel yang lain.

Syntax Pointer:

<type> *ptr_name;


Minimal digunakan dua operator dalam Pointer : *(Pointer) dan &(Alamat)
Contoh:


Inisialisasi sebuah integer dalam bentuk data variabel:
int i, *ptr;
ptr = &i;
Untuk menentukan nilai baru untuk variabel yang ditunjuk Pointer:
*ptr = 5;  /* means i=5 */


Konsep Pointer :





  • Pointer to Pointer. "Pointer to Pointer" merupakan sebuah variabel yang menyimpan alamat sebuah pointer yang lain.
  • Syntax:

<type> **ptr_ptr ;

Contoh :
  int i, *ptr, **ptr_ptr;
  ptr = &i;
  ptr_ptr = &ptr;
  Untuk menentukan nilai baru untuk i:
  *ptr = 5;  // means i=5 ;
  **ptr_ptr = 9;   // means i=9; or *ptr=9;

Pointer to Pointer





2. Array
  • Array adalah sekumpulan data yang disimpan di dalam struktur tertentu untuk diakses sebagai sebuah grup atau individual. Sebagian variabel disimpan dengan nama yang sama dengan cara membedakan index mereka.
  • Karakteristik array ialah
         - Homogenus
            Semua element mempunyai tipe data yang sama.
         - Random Access
            Setiap element dapat digunakan secara individual, tidak harus dalam urutan.




  • Syntax:

type array_value [value_dim];

Example:

int A[10];

Definisi tersebut mengandung 4 komponent:
- Tipe spesific
- Identifier (Nama Array)
- Operator Index([])
- Nilai Dimensi di dalam operator [ ]

Contoh Array 1 Dimensi:

- Element sebuah Array dimulai dari 0.


  • Array dapat diinisialisasikan dengan jelas tanpa nilai dimensi.
Contoh : 

int B[ ]={1, 2, -4, 8};
     Array B has 4 elements






  int B[8]={1, 2, -4, 8};



Accesing Array

Ada 2 cara untuk mengakses sebuah element i=2;
*(A+2) or A[2]

A sebanding dengan &A[0] atau pointer kepada element pertama dari sebuah array

Untuk menunjukkan A[2] di layar:
printf(“%d”,A[2]) or
  printf(“%d\n”,*(A+2));

Assigning Values
Menentukan nilai sebuah element
Contoh :A[6] = 15;  A[3] = 27;

• Pernyataan A[2] = A[3] - A[6], hasilnya:

Pointer Constant dan Pointer Variabel
  • Pointer Constant adalah pointer yang dapat ditugaskan dengan nilai yang baru pada saat dijalankan.
  • Pointer Variabel adalah pointer yang tidak dapat ditugaskan dengan nilai yang baru pada saat dijalankan.

Accesing Array

Mengakses array dengan pointer :
int arr[10];
  int *ptr_arr;

  ptr_arr = arr; //or ptr_arr = &arr[0];

Untuk mengakses element tertentu dapat menggunakan :
ptr_arr[i];
  arr[i];
  *(ptr_arr + i);
  *(arr + i);
  ptr_arr = ptr_arr + i; *ptr_arr; 



One Dimensional Array

C compiler tidak membataskan jumlah dimensi yang dapat dibuat. Memori PC kita yang membatasi.


Two Dimensional Array
Syntax 2D Array:
  type name_array[row][col];
Contoh:
 int a[3][4];




Inisialisasi
dengan rmo (row major order)
Contoh :
:int b[2][2] = {1, 2, 3, 4 };
•int b[2][2] = { { 1, 2 }, { 3, 4 } };
•int b[2][2] = { { 1 }, { 3, 4 } };
•int x[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
•int x[3][4] = { {1, 2, 3, 4},
     {5, 6, 7, 8},
     {9, 10, 11, 12}
   };


Three Dimensional Array
•Syntax 3D Array :
  type name_array[row][col][depth];
• Contoh :
  int x[3][2][4] = {{{1,2,3,4}, {5,6,7,8}},
                          {{11,12,13,14}, {15,16,17,18}},
                          {{21,22,23,24}, {25,26,27,28}}
       };  
   void main() {
     int x[4][3][5] = {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}},
     {{9, 7, 5}, {5, 7, 2}, {9}},       
     {{3, 3, 5}, {2, 8, 9, 9}, {1, 2, 1}},
     {{0}, {1}, {0, 1, 9}}
    };
     printf(“%5d”, x[2][1][3]);
  } 


Array of Pointer
•Sebuah array dengan satu atau lebih pointer
Syntax :
    type *array_name [value_dim];
• Contoh :
  int i;
  int *ptr[4];
  int x=1, y=2,  z=3, w=5;
  ptr[0]=&x, ptr[1]=&y; ptr[2]=&z;  ptr[3]=&w;
  for(i=0;i<4;i++) printf("%d ",*ptr[i]);



String

String adalah sebuah kumpulan karakter yang diakhiri dengan null karakter('\0' atau di ASCII=0)
String konstant atau String Literal adalah sejumlah karakter diantara double quote.
- Contoh : "Welcome to Binus"

String konstant dapat dihubungkan pada compile-time:
"Hello" "World"
sama dengan
"Hello, World"

String sebagai tipe data tidak dikenal di C


Manipulasi String
•Di Standard Library Function (header file string.h) menyediakan fungsi untuk memanipulasi string
strlen()
  Menginput panjang string kecuali null char
strcpy(s1,s2)
  Mengcopy string2 ke string1
strncpy(s1,s2,n)
  Mengcopy n kata dari string 2 ke string 1
strcat(s1,s2)
  Menambah string2 diakhir string1
strncat(s1,s2,n)
 Menambah n kata dari string2 diakhir string1
strcmp(s1,s2)
  Membandingkan nilai string1 dan string2, jika sama balik ke 0

–etc.


Program Control : Repitition

           Repitition... Pernakah kalian dengar kata itu? Mungkin kata looping lebih familiar? Repitition dan looping adalah hal yang sama. Tapi sebenarnya apa itu repitition? Repitition atau Looping adalah satu atau lebih perintah yang diulang sebanyak jumlah yang telah ditentukan. Jumlah looping dapat ditentukan sebelum ataupun sesudah membuat perintah.

Apa saja operasi dalam looping? Ada for, while dan do-while.

1. For

Operasi syntax "for" adalah:

for(exp1; exp2; exp3) pernyataan;
atau:
for(exp1; exp2; exp3){
  pernyataan1;
  pernyataan2;
  …….
 }
exp1 :  inisialisasi
exp2 :  kondisi/syarat
exp3 :  kenaikan atau penurunan
exp1, exp2 dan exp3 dapat diubah

- exp1 dan exp2 dapat mengandung sejumlah pernyataan yang dapat dipisahkan menggunakan koma.

Contohnya:
void reverse(char ss[])
{
int c,i,j
for(i=0, j=strlen(ss)-1; i<j; i++, j--){
c=ss[i];
ss[i]=ss[j];
ss[j]=c;
    }
}

Flow chart untuk pernyataan For:




  • Dalam "For" ada yang dinamakan Infinite Loop. Infinite Loop adalah Loop dengan kondisi yang tak terhenti menggunakan "for-loop" dengan menghilangkan semua pernyataan (exp1, exp2, exp3). Untuk menghentikan Loop ini dapat menggunakan break.
  • Ada juga yang namanya "Nested Loop". Nested Loop adalah sebuah Loop didalam Loop. Pengulangan akan dilakukan dari loop yang didalam.
Contoh Nested Loop:


   for (int x=1;x<=5;x++)
        for (int y=5; y>=1; y--)
             printf(”%d %d ”,x,y);
   
2. While

Operasi Syntax "While" adalah:
while (exp) pernyataan;
or:
while(exp){
  pernyataan1;
  pernyataan2;
   …..
}

Contoh While:
int counter = 1;
while ( counter <= 10 ) {
     printf( "%d\n", counter );
     ++counter;
}

Flow Chart dari "While":

  • exp-nya merupakan sebuah expresi Boolean. Expresi itu akan menghasilkan True (Tidak Nol) atau False (Nol).
  • Pernyataan akan dijalankan ketika exp tidak sama dengan Nol (True).
  • Evaluasi exp selesai sebelum pernyataan dijalankan.
Contohnya :

while(product <= 1000) product = 2*product;









3. DO-While

Operasi Syntax dari "Do-While"
do{
    < pernyataan >;
} while(exp);


Pernyataan akan terus dijalankan ketika exp "True"
Evaluasi exp selesai ketika menjalankan element.


Flow Chart "Do-While"

Contoh :

do{
     printf(”%d\n”,counter);
} while(++counter <=10);

Dalam Looping, juga dikenal Break dan Continue.

a. Break

- Fungsi Break yaitu untuk mengakhiri suatu loop

b. Continue

- Fungsi Continue yaitu untuk melewatkan semua sisa pernyataan sebuah operasi di dalam looping, dan melanjutkan secara normal untuk loop selanjutnya.

Contoh Break dan Continue :

a. Continue
-#include <stdio.h>
int main() {
        int x;
        for(x=1; x<=10; x++) {
      if (x == 5) continue;
       printf("%d ", x);
        }
        return 0;
}
Output : 1 2 3 4 6 7 8 9 10

     b. Break
#include <stdio.h>
int main() {
        int x;
        for(x=1; x<=10; x++) {
      if (x == 5) break;
       printf("%d ", x);
        }
        return 0;
}
Output : 1 2 3 4