Rabu, 17 Oktober 2018

Pointers and Array 17-10-2018

Algoritma dan Programming 17-10-2018

Pointers and Array:

     POINTERS:
          syntax:  <type> *ptr_name;

               dimana : <type>: Tipe data yang disesuai
                             *ptr_name: nama variable


          Pointers adalah variable yang menyimpan alamat dari variable lainnya 
          Analogi kirim paket A ke rumah Jojo.
               untuk mengirim paket A ke rumah Jojo, maka kurir harus menuju alamat
               rumah Jojo. Kurir mengetahui alamat rumah Jojo dari alamat yang ditulis di
               paket tersebut. Setelah mengetahui alamat rumah Jojo dari paket, Kurir dapat
               mengirim paket A ke rumah Jojo. Jika isi dalam paket tersebut diganti B maka 
               Jojo mendapat paket B.

          dalam hal ini: Jojo adalah nama variable
                                A adalah isi dari variable Jojo dan apa yang dikirim kurir
                                Alamat Jojo didapat dengan &Jojo
                                Kurir adalah variable pointer
                                Alamat yang dituju kurir adalah alamat Jojo 
                                Jika A diganti B oleh kurir maka Jojo mendapat B

          Dalam pointer terdapat 2 jenis operator yang sering digunakan:
                1. * (asterisk) : (isi dari)
                2. & (ampresand) : (alamat dari)
          contoh:
        int i, *ptr, **ptr2;
        ptr = &i;
        *ptr = 5; // berarti i = 5 *ptr artinya dereference atau get
         value at alamat yang ada di ptr
        // seperti int p, i; p = i = 5
     pointer juga dapat menunjuk pointer lain atau disebut PTP
                seperti Transit dari kurir pertama ke kurir kedua baru ke Jojo
                ptr2 = &ptr
        **ptr2 = 10; // nilai *ptr dan i juga 10
   
         contoh program:
                
                // Program for untuk mengetahui pointer
              #include <stdio.h>
                
        int main() {

            int **ptr2, *ptr1, target = 1;
                                      // alamat dapat sama maupun berbeda
                ptr1 = &target;
                ptr2 = &ptr1;

                printf("Alamat target: %d\n", &target);
                printf("Nilai target: %d\n", target);
                printf("Alamat ptr1: %d\n", &ptr1);
                printf("Nilai ptr1: %d\n", ptr1);
                printf("*ptr1: %d\n", *ptr1);
                printf("Alamat ptr2: %d\n", &ptr2);
                printf("Nilai ptr2: %d\n", ptr2);
                printf("**ptr2: %d\n", **ptr2); 
 
            return 0;
        } 


        Output:
            Alamat target: 6487612
            Nilai target: 1
            Alamat ptr1: 6487616
            Nilai ptr1: 6487612
            *ptr1: 1
            Alamat ptr2: 6487624
            Nilai ptr2: 6487616
            **ptr2: 1

        Proses:
                       1. int **ptr2, *ptr1, target = 1: inisialisasi **ptr2, *ptr1 , dan target
                       2. ptr1 = &target: menyimpan alamat target ke ptr1 
                       3. begitu pula ptr2 = &ptr1;
                       4. sisanya tertera pada output
                       5. sekarang lebih fokus pada **ptr2. ptr2 menunjuk alamat yang tertera 
                           pada ptr2 dimana itu adalah alamat ptr1.
                       6. lalu menunjuk kembali alamat yang tertera pada ptr1 dimana adalah 
                           alamat target lalu memunculkan nilai yang tersimpan di alamat target 
                           yakni 1.
                       7. untuk *ptr1 proses sama dengan proses ke 6.
          
    ARRAY:
     syntax:  <type> array_value [value_dim];

          dimana : <type>: Tipe data yang disesuai
                        array_value: nama variable
                        value_dim: jumlah variable dalam index
                
          Array adalah data yang tersimpan di dalam sesuatu susunan tertentu yang dapat  
          diakses secara individual maupun kelompok. Beberapa variable dalam array 
          disimpan dalam nama yang sama tetapi dalam index yang berbeda.

          contoh Array: 
               int a[10];
        /* berikut illustrasi array
           a[10];
           [   |    |    |    |    |    |    |    |    |    ]
           a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]*/
        int b[5] = {1,2,3,4,5};
        /* berikut illustrasi array b
           [ 1 |  2 |  3 |  4 |  5 ]
           a[0] a[1] a[2] a[3] a[4] */
        int c[5];
        c[5]= {1,2,3,4,5}; // error
        int d[4] = {1,2,3,4,5}; // error smaller dimension value
     isi Array dapat diakses melalui 2 cara:
                a[0] atau *(a+2) 
          isi array dapat diganti dengan memberi nilai pada array dengan index tersebut
                a[1] = 12;
         *(a + 1) = 12;
           Array dapat dibentuk menjadi 2 dimensi dan 3 dimensi dengan cara:
                int A[row][column]; //tinggal ditambah [];
           Array paling sering digunakan bersama for seperti:
                 int e[10]= {1,2,3,4,5,10,6,7,8,9};
             for(int i=0; i < 10; i++) {
                 
                  printf("%d\n", e[i]);

             }
      ini untuk mencetak setiap value yang tersimpan dalam e
            tidak hanya mencetak, dengan cara ini dapat mengganti value value juga 
            
            Dalam program C tidak mengenal tipe data string. Maka dari itu untuk digunakan
            array of char. yang membedakan string dan char dalam C adalah string diakhiri 
            dengan '\0' atau NULL <-- ini sangat krusial.  untuk membuat string dengan cara:
                     
          char f[11]= "HelloWorld";
      kenapa lebih, karena sesuai yang tertera di atas string diakhiri dengan '\0' 
            //backslash zero sehingga dapat menampung semua
            
            String dapat dimanipulasi dengan menggunakan string library
                    #include<string.h> isi seperti:
    strlen(kata)

                         mengembalikan jumlah huruf, kecuali '\0'

    strcpy(s1,s2)

                         mengduplikat s2 ke s1 -> strcpy("Hari","mau makan?") s1 = mau makan?

    strncpy(s1,s2,n)

                         menduplikat  n charakter pertama dari s2 menuju s1 

                  -> strncpy("Hari","maumakan?", 3) s1 =mau

    strcat(s1,s2)

                         menambah s2 pada ujung dari s1
                        -> strcat("Hari","Maumakan") s1 = HariMaumakan 

    strncat(s1,s2,n)

                          menambah s2 pada ujung dari s1 sebanyak n character pertama
                         -> strncat("Hari","Maumakan") s1 = HariMau  

    strcmp(s1,s2)

                         membandingkan nilai s1 dengan s2, kalau sama mengembalikan  0
                         -> strcmp("Hari","Hari") return 0;

  Challenge:

 1. mencetak setiap value int h[10] = {1,2,3,4,5,6,7,8,9,10}; dengan pointers
 2. membuat program untuk membalik kata "Welcome" menjadi "emocleW" ingat ini    
     STRING!!

- Stay curious -
    NIM: 2201762723
    binus.ac.id
    skyconnectiva.com
    Hubert Michael Sanyoto






       

         

Tidak ada komentar:

Posting Komentar