Selasa, 18 Desember 2018


Pointer and Arrays 

Pendahuluan
Biasanya, ketika kita mau mengirim barang atau jasa, kita memerlukan sebuah alamat agar kita tahu tujuan akhir jasa atau barang yang akan dikirim. selain itu, kita pasti harus tau siapa pengirimnya juga.

Sama halnya dalam dunia programming, kita juga bisa memberikan sebuah data type suatu nilai sebagai outputnya melalui sebuah pengantara yang disebut sebagai Pointer.

Pointer
Awalnya banyak orang menganggap bahwa pointer tidak terlalu berguna dan tidak sering dipakai. Namun setiap fungsi yang terdapat dalam suatu programming semuanya sangat penting karena mereka memiliki tugas mereka sendiri termasuk pointer. Sebagai tips, pointer ini justru akan sangat berguna untuk mempermudah programming struct atau function.

Penggunaan pointer sangat mudah dimengerti. Biasanya, format pointer dibuat dengan syntax seperti berikut:
<data type> *nama pointer
Misalnya:
·     Int *point1
·     Char *name
·     Float *count_root

Cara pemakaian pointer adalah sebagai penerima alamat sebuah data type dan menyimpannya, misalnya seperti contoh programming sebagai berikut:
int x,y,*ptr;
ptr=&x;

scanf("%d",&*ptr);
for(int i=1;i<=x;i++)
{
for(y=1;y<=i;y++)
{
printf("%d",y);
}
printf("\n");
}

Dari contoh kita mempunyai “*ptr” sebagai pointer dan untuk “x” sebagai target pointer. Supaya poiner kita menerima alamat dari “int x” maka dibuat syntax berupa “ptr=&x” karena “&” biasanya digunakan untuk address sebuah variabel.

Untuk memberikan nilai pada variabel x maka kita tidak perlu scanf pada x tetapi kita bisa langsung scanf pada pointer. Sebab pointer sudah menerima alamat x maka syntax nya adalah:
“scanf(“%d”,&*ptr);”

Perlu diingatkan bahwa setiap kali kita ingin scanf pointer, jangan lupa tanda “*” yang artinya “content of”  karena ketika dijalankan, kita bisa menginput angka tapi tidak akan jalan sebab pada awalnya, data type pointer adalah “int*ptr”.

Pointer to Pointer
Selain menggunakan pointer ke variabel lain, kita juga bisa mengarahkan alamat baru ke pointer lain. Caranya adalah dengan membuat sebuah pointer baru dengan sedikit pembaharuan yaitu dengan menambahkan tanda ‘*’ pada pointer baru.
maka syntaxnya adalah seperti begini:
·     Int **point2
·     Char **fullname
·     Float **square

Sama seperti yang kita bahas sebelumnya, pointer hanya menyimpan alamat dan contohnya seperti berikut:

Int main
{
int x,y,*ptr,**pot;
ptr=&x;
pot=&ptr;
scanf("%d",&**pot);

for(int i=1;i<=x;i++)
{
for(y=1;y<=i;y++)
{
printf("%d",y);
}
printf("\n");
}
}
Program coding diatas akan membuat tangga angka secara beruntun,misalnya kita input angka 4 pada scanf(“%d”,&**pot) maka outputnya seperti ini:
1
12
123
1234

Dari contoh di atas, *ptr menyimpan alamat x sedangkan **pot menyimpan alamat *ptr. Oleh karena itu lah, ketika kita menginput 4 ke dalam scanf(“%d”,&**pot), x akan menerima value 4 dan berfungsi sebagai batas loop for yang akan mencetak 4 tangga angka beruntun.

Karena **pot mengirimkan value 4 melalui *ptr kepada x sehingga dapat disimpulkan bahwa tujuan awal berupa *ptr berubah menjadi **pot di program tersebut.

Bagaimana kalau kita ingin membuat lebih dari 2 pointer? Kita hanya perlu membuat pointer baru dan menambahkan jumlah “*” sebelum pointer baru. misalnya, Kita ingin membuat 4 pointer maka seperti contoh berikut:
1.*ptr
2.**pot
3.***pet
4.****pit
Akan tetapi disarankan agar menggunakan pointer sebaik mungkin dan jangan berlebihan agar tidak membingungkan diri sendiri saat membaca coding program.

Arrays
Dalam kehidupan kita sehari-hari, kita selalu menyimpan barang kita sesuai dengan jenisnya, misalnya baju dengan baju, buku dengan buku dan lain-lain. Supaya rapi dan dapat langsung digunakan, kita menyimpannya dalam lemari. Sama halnya dengan programming, biasanya banyak data yang perlu disimpan agar dapat digunakan lagi, untuk itu maka digunakan lah Array.

Array adalah sebuah alat khusus yang digunakan untuk menyimpan data yang sejenis dan bisa di akses secara individual atau sekelompok. Kita bisa menganggap konsep kerja array dan data yang disimpan seperti lemari dan barang-barang yang sejenis.

Syntax Array seperti berikut:
Data Type <name> [Dimension_value]

Contoh Array misalnya:
·       Int a[10];
·       Float percent[20]
·       Char name_id[100]

Skema Array misalnya int a[10] seperti berikut
0
1
2
3
4
5
6
7
8
9
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]
A[9]

Kenapa hanya sampai posisi kotak Array ke 9, bukan 10? Karena sistem Array selalu dimulai dari kotak Array posisi nol. Biasanya banyak orang melupakan posisi Array ke nol. Oleh karena itu, kita bisa menghafal konsepnya yaitu:
Array[10] = Array[0] - Array[value-1]

Selain memberikan value Array, kita bisa langsung diinisiasikan secara langsung tanpa value dimensinya, misalnya
Int A[]={1,2,3,4}

Dari contoh diatas, kita bisa menentukan isi valuenya yaitu 4. Contoh lainya:
Int B[8]={1,2,-4,8}
1
2
-4
8
0
0
0
0
B[0]
B[1]
B[2]
B[3]
B[4]
B[5]
B[6]
B[7]

Di array int B, array posisi 0 sampai 3 diisi sedangkan sisanya masih 0 karena kosong.

Biasanya, kesalahan yang terjadi dalam Array adalah inisiasi value yang berlebihan, misalnya:
Int A[3]={1,2,3,4,5}
Dari contoh diatas, dimensional value yang diisi adalah 3 sedangkan inisiasi value nya berisi 5 sehingga mengakibatkan error

Untuk mengakses Array, kita hanya perlu menyebutkan posisi dimension valuenya. ada 2 cara yang bisa dilakukan misalnya, kita ingin mencari value Array posisi ke-6 maka:
·       A[6]
·       *(A+6)

Contoh program codingnya seperti berikut:
int main()
{
    int A[10]={1,2,3,4,5,6,7,8,9,10};
    int a;   
   
    scanf("%d",&a);
    printf("the value of A[%d]=%d",a,A[a]);
}

Posisi Array ke 6 memiliki value 7 dan ketika kita menginput angka 6 ke dalam scanf maka akan diprint di layar berupa "the value of A[6]=7".

Sama halnya jika program seperti ini:
int main()
{
    int A[10]={1,2,3,4,5,6,7,8,9,10};
       
    printf("the value of A[6]=%d",*(A+6));
}

Hasilnya akan tetap sama yaitu output berupa "the value of A[6]=7". A yang terdapat dalam dimension valuenya bernilai 0 sehingga bisa ditambah.

Selain mengakses Array, kita juga bisa memberikan value Array melalui Array lain,misalnya
·       A[6]=17
·       A[4]=9
Maka di Array akan seperti berikut:
0
0
0
0
9
0
17
0
0
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]

Ditambah lagi, kita bisa memberikan value Array dengan sistem matematika biasa menggunakan array, misalnya:
int main()
{
    int n[10]={1,2,3,4,5,6,7,8,9,10};
    int a;   
   
    scanf("%d",&a);
    n[2]=n[9]*n[1];
    printf("the value of A[%d]=%d",a,n[a]);
}

Dari program tersebut, terjadi perkalian antara Array n ke 9 dan 1 yang hasilnya ditujukan kepada Array ke 2. Jika inputnya 2 maka, outputnya akan di print "the value of A[2]=20"

Multi Dimensional Array
Dimensi array bisa diatur sesuai dengan kebutuhan sang programmer. Untuk menambahkan dimensi array, kita hanya perlu mengaturnya sebagai berikut:
<data type> <name> [first dimension] [second dimension] [...]
Contohnya:
·       Int matrix[100][100];
·       Char table[15][20][25];

Contoh penggunaan Multi Dimensional Array bisa diterapkan misalnya untuk membuat matriks seperti berikut:

int mat[10][10] ;
int i, j, row, col ;

printf("Enter the order of the matrix : ") ;
scanf("%d %d", &row, &col) ;
printf("\nEnter the elements of the matrix : \n\n") ;

for(i = 0 ; i < row ; i++)
for(j = 0 ; j < col ; j++)
scanf("%d", &mat[i][j]) ;
printf("\n\nThe elements in the matrix are: \n\n") ;

for(i = 0 ; i < row ; i++){
for(j = 0 ; j < col ; j++){

printf("%d", mat[i][j]) ;
printf("\t");
 }
 printf("\n");
}

Pada program matriks tersebut, terdapat “int mat[10][10]” yang berfungsi sebagai array penampung valuenya. Selain berfungsi sebagai penampung data, kita juga menganggapnya sebagai penentu koordinat baris dan kolom.

Kita bisa menggambarkan array dua dimensi sebagai sebuah tabel. Misalnya, jika kita input 2 pada row dan col saat discanf, maka akan terbentuk gambaran tabel 23. Lalu kita input misalnya {1,2,3,1,4,5}, maka akan terbentuk matriks seperti berikut:
1
2
3
1
4
5




Seperti yang dijelaskan tadi, array dua dimensi sebagai penentu koordinat tabel dapat digambarkan sebagai berikut:
(0,0)
(0,1)
(0,2)
(1,0)
(1,1)
(1,2)
1
2
3
1
4
5

String
Dalam penggunaan array, kita pasti kenal dengan sebutan string. String adalah gabungan dari berbagai macam karakter,huruf dan angka. Data type string tidak diketahui oleh program c karena Syntaxnya sama dengan array biasa tapi cara memakainya sedikit berbeda. Perhatikan contoh berikut!

#include<stdio.h>

int  main()
{
          char word[]="Binus";
          printf("%s",word);
         
}

Pada array char word, kita mendeklarasikan isinya yaitu string berupa “Binus” lalu ketika diprintf, hasil outputnya akan menjadi “Binus”. Hal ini dikarenakan type string,“%s”  dipakai untuk mewakili string tersebut.

Bandingkan dengan program berikut!
#include<stdio.h>
#include<string.h>

#include<stdio.h>
#include<string.h>

int  main()
{
          char word[]={'B','i','n','u','s'};    
          for(int i=0;i<5;i++)
          {       
          printf("%c",word[i]);
          }       
}

Di program tersebut, kita mendeklarasikan isinya sama tapi per karakter. selain itu, kita harus menggunakan for supaya hasilnya di printf semua. Jika kita bandingkan, program yang menggunakan string justru lebih mudah daripada kita harus mendeklarasi kan isinya per karakter. Apalagi jika kalimatnya panjang, dengan string, kita bisa menghemat waktu dan ruang dalam program kita.

Library String.h
Untuk memanipulasi dan mempermudah kita mengelola string, terdapat library “string.h”. Dalam string.h ini, terdapat beberapa fungsi yang sangat membantu kita yaitu:
·     Strrev
·     Strlen
·     Strcmp
·     Dll

Strrev
Dalam library string.h, kita bisa memanipulasi string dengan syntax sttrev agar string yang kita pilih menjadi terbalik. Contoh programnya:
#include<stdio.h>
#include<string.h>

int  main()
{
          char word[]="rusak";
          strrev(word);
          printf("%s",word);
}
Dari program diatas, string “kasur” akan dibalikkan katanya menjadi “rusak”

Strlen
Dalam library string.h, kita bisa menghitung jumlah karakter yang ada dalam sebuah string dengan syntax strlen. Contoh programnya:
#include<stdio.h>
#include<string.h>

int  main()
{
          char word[]="Binus university";
          strlen(word);
          printf("%d",strlen(word));        
}
Dengan strlen, maka kita mengetahui bahwa jumlah karakter string tersebut adalah 16.

Strcmp
Untuk mengetahui kecocokan suatu string dengan yang lain, maka kita dapat membandingkan nya dengan syntax strcmp. Contohnya:
#include <stdio.h>
#include <string.h>

int main ()
{
  char key[] = "apple";
  char buffer[80];
  do {
     printf ("Guess my favorite fruit? ");
     fflush (stdout);
     scanf ("%79s",buffer);
  }
  while (strcmp (key,buffer) != 0);
  puts ("Correct answer!");
  return 0;
}
Pada program diatas, kita mendeklarasi kan string pertama adalah apple lalu jika kita input string yang berbeda dari string pertama, maka dia akan mencetak jumlah karakter yang tidak sesuai.

Lalu di while nya, kita membuat pernyataan jika hasil karakternya bukan nol, maka kita akan tetap input sampai hasilnya nol baru lah berhenti. Buktinya, ketika kita menginput apple, strcmp akan memberikan hasil nol karena kedua string sama barulah loop berhenti dan di puts “correct answer!”.

Maka, sampai situlah penjelasan kita sini.



Tidak ada komentar:

Posting Komentar