Minggu, Juli 19, 2015

Programming in C - Part 13: Array multidimensi dalam bahasa C


Array multidimensi adalah array yang mengandung lebih dari satu baris data. Secara visual dapat dibayangkan array 2 dimensi adalah array yang terdiri dari baris dan kolom seperti pada sebuah tabel atau sebuah matrik.

Contoh:
Kita mempunyai data yang terdiri dari lima baris dimana masing-masing baris terdiri dari empat kolom sbb :
10,11,12,13
20,21,22,23
30,31,32,33
40,41,42,43
50,51,52,53

Tantangannya adalah bagaimana melakukan operasi aritmatika secara vertikal?. Misalnya anda diminta untuk menghitung jumlah dan rata-rata untuk kolom ke 3 ?  Bagaimana juga kalau harus menjumlahkan secara horizontal ?

Sebelum menjawab pertanyaan ini anda harus memahami dulu bagaimana membuat dan mengakses setiap elemen dalam tabel tersebut sehingga akan memudahkan manipulasinya.

Langkah pertama adalah bahwa anda harus memasukkan angka -angka tersebut ke dalam sebuah array 2 dimensi (baris -kolom) dengan cara sbb:


int data[5][4] =  { {10,11,12,13},
                    {20,21,22,23},
                    {30,31,32,33},
                    {40,41,42,43},
                    {50,51,52,53} }  ;

                  
Perintah ini akan menghasilkan array bertipe integer dengan nama 'data' dengan 5 baris data dan 4 kolom pada masing2 baris. Jumlah baris sebenarnya opsional, artinya anda dapat menuliskannya atau membiarkannya kosong. Jika anda membiarkan kosong berarti anda bebas untuk menambah elemen sesuai kebutuhan. Akan tetapi untuk indeks kolom harus ada karena menentukan alokasi memory yang dibutuhkan.

Untuk mengakses tiap elemen dilakukan dengan menyebutkan indeks BARIS dan indeks KOLOM yang diinginkan. perlu diingat bahwa penomoran indeks dalam komputer SELALU DIMULAI DARI ANGKA NOL dan bukan angka 1. Jadi, indeks baris 0 adalah baris data pertama, indeks 1 adalah baris data kedua dst. Demikian juga dengan indeks kolom, indeks kolom 0 berarti kolom pertama sedangkan indeks kolom 1 adalah data kolom 2.

untuk mengakses tiap elemen gunakan cara berikut ini

namaArray[indeks BARIS][indeks KOLOM]

dengan demikian :
data[0][0] isinya 10, data[0][3] isinya 13
data[2][1] isinya 31, data[4][2] isinya 52
dan seterusnya

Menampilkan dan mengakses Array 2 Dimensi


Salah satu trik yang biasa digunakan adalah dengan menggunakan dua kali looping. Looping pertama adalah untuk menampilkan setiap baris dan looping kedua menampilkan kolom.

perhatikan contoh berikut ini:

/* =======================================
 * Contoh Array multi dimensi dalam C
 * Created by: Sastrawan
 * Topik : Membuat dan menggunakan Array
 *         multidimensi tipe integer
 * ========================================
 */

  
 #include<stdio.h>

 int main( int argc, char *argv[])
 {

  
    int data[][4] = {   {10,11,12,13},
                        {20,21,22,23},
                        {30,31,32,33},
                        {40,41,42,43},
                        {50,51,52,53} }  ;

       // Mencetak isi array
       int panjang = sizeof(data)/16;        // dibagi 16 ( 4 kolom x 4 byte int)
    int jumlah0 =0;
    int kolomke;  
    printf("Panjang : %d \n\n",panjang);
       int i,j ;
 
    for(i=0; i<(panjang) ; i++) {         // loop baris
        printf("Baris %d = |",i);
        for (j=0; j<4; j++) {             // loop kolom
            printf("%d | ",data[i][j]);
        }
    printf("\n");
    }
  
    // Meminta user memasukkan nomor kolom untuk dijumlahkan
    // Jika user menulis angka < 0 atau >=4 maka program akan keluar

    while (kolomke <= 3) {      // loop untuk meminta masukan dari keyboard
    jumlah0 = 0 ;            //reset Jumlah
       printf("Hitung jumlah dan rata-rata kolom ke ? (mulai dari 0)") ;
       scanf("%d",&kolomke);
     
    if ((kolomke >= 4) || (kolomke<0)) break ;        // Memastikan program keluar jika tidak ada datanya
    //ulangi loop untuk menghitung rata-rata
       for(i=0; i<(panjang) ; i++) {       
        printf("Baris %d  = |",i);        // loop baris
        jumlah0 += data[i][kolomke] ;     // loop kolom tidak diperlukan karena sudah mengetahui indeks kolom
        printf("%d | ",data[i][kolomke]);
      
    printf("\n");
    }
     
      printf("Jumlah = %d  dengan rata-rata %.2f \n", jumlah0, (double)jumlah0/5);
    } ;
 
 return 0 ;
 }




 output dari program tersebut adalah sebagai berikut :

 Panjang : 5

Baris 0 = |10 | 11 | 12 | 13 |
Baris 1 = |20 | 21 | 22 | 23 |
Baris 2 = |30 | 31 | 32 | 33 |
Baris 3 = |40 | 41 | 42 | 43 |
Baris 4 = |50 | 51 | 52 | 53 |
Hitung jumlah dan rata-rata kolom ke ? (mulai dari 0)0
Baris 0  = |10 |
Baris 1  = |20 |
Baris 2  = |30 |
Baris 3  = |40 |
Baris 4  = |50 |
Jumlah = 150  dengan rata-rata 30.00
Hitung jumlah dan rata-rata kolom ke ? (mulai dari 0)1
Baris 0  = |11 |
Baris 1  = |21 |
Baris 2  = |31 |
Baris 3  = |41 |
Baris 4  = |51 |
Jumlah = 155  dengan rata-rata 31.00
Hitung jumlah dan rata-rata kolom ke ? (mulai dari 0)3
Baris 0  = |13 |
Baris 1  = |23 |
Baris 2  = |33 |
Baris 3  = |43 |
Baris 4  = |53 |
Jumlah = 165  dengan rata-rata 33.00
Hitung jumlah dan rata-rata kolom ke ? (mulai dari 0)5



Memberi nilai / mengisi array multidimensi


Untuk mengisi nilai ke dalam suatu array multidimensi dilakukan dengan cara yang sama dengan array tunggal, yaitu dengan menyebutkan indeksnya. Untuk array multi harus disebutkan indeks baris dan indeks barisnya. Misalnya untuk mengganti isi data deret pertama kolom kedua menjadi 100 dapat dilakukan dengan cara

data[0][1] = 100 ;

Sebagai latihan anda dapat memasukkan perintah di atas sebelum perintah untuk menampilkan array agar anda dapat melihat hasilnya. Silahkan juga anda coba untuk mengganti elemen lainnya dalam array data tersebut.

Array multidimensi tipe char


Sejauh ini kita sudah membahas array multidimensi bertipe integer. Sekarang saya ingin membahas lebih jauh mengenai array bertipe char, lebih spesifik lagi yaitu tentang string. Ingat bahwa String adalah array tipe character yang diakhiri dengan karakter null. Sekedar mengingatkan bahwa pemanggilan string pada array char dilakukan dengan placeholder %s. Elemen huruf individual tetap bisa diakses dengan menyebutkan indeks dan menggunakan placeholder %c.

Studi kasus:
Anda diminta untuk membuat program dimana user akan menuliskan angka 1 - 12 dan program akan menyebutkan nama bulan sesuai angka yang dimasukkan. Misalnya user memasukkan angka 12 maka program akan mencetak string 'Desember'. Program akan keluar jika user tidak memasukkan angka 1 -  12.

Tips : gunakan array 2 dimensi bertipe char untuk membuat deretan string sbb
Januari
Februari
Maret
April
Mei
Juni
Juli
Agustus
September
Oktober
November
Desember

Bayangkan secara mental bahwa indeks kolom 0 untuk masing - masing baris berisi charakter J F M A M dst, yaitu huruf awal dari setiap bulan. Dengan demikian jelas bahwa anda membutuhkan 12 baris data. Sedangkan jumlah kolomnya anda yang putuskan. Untuk menghemat memori, jika sudah mengetahui bahwa jumlah huruf terbanyak adalah pada nama bulan September yaitu 9 huruf, maka anda dapat menggunakan kolom sebanyak 9+1 = 10 (ingat bahwa array char yang membentuk string selalu diakhiri dengan character ekstra yaitu NULL).

Penyelesaian :

/* =======================================
 * Contoh Array multi dimensi dalam C
 * Created by: Sastrawan
 * Topik : Membuat dan menggunakan arraystring dengan lebih efisien
 * ========================================
 */
 
   
 #include<stdio.h>
 
 int main( int argc, char *argv[])
 {
    char bulan[][10] = {{"Januari"},{"Februari"},{"Maret"},
                        {"April"},{"Mei"},{"Juni"},
                        {"Juli"},{"Agustus"},{"September"},
                        {"Oktober"},{"November"},{"Desember"}}        ;

       // Mencetak isi array
       int panjang = sizeof(bulan);        //Menghitung jumlah byte  yang
                                        //dibutuhkan untuk bulN.
       int i ;
       
       for(i=0; i<(panjang/10) ; i++) {  // dibagi 10 karena panjang array kolom bulan 10
        printf("%d = ",i+1);
            printf("%s",bulan[i]);
        
    printf("\n");
    }
       
      printf("\n");

   //int bulanKe  ;
   int angkaBulan;
   
   // meminta user memasukkan angka kemudian disebutkan bulannya .
   
   while(angkaBulan <= 12)
   {   printf("Tulis bulan ke berapa (angka 1-12) : ") ;
       scanf("%d",&angkaBulan);
       if((angkaBulan > 12)||(angkaBulan<1))
       {
           printf("Mana ada bulan %d, Dodol!", angkaBulan);
           break;
       }

   printf("bulan : %s \n",bulan[angkaBulan-1]);       //array string dapat dicetak langsung dengan namanya
    }

   
 return 0 ;
 }
 
 Outputnya :
 
 1 = Januari
2 = Februari
3 = Maret
4 = April
5 = Mei
6 = Juni
7 = Juli
8 = Agustus
9 = September
10 = Oktober
11 = November
12 = Desember

Tulis bulan ke berapa (angka 1-12) : 2
bulan : Februari
Tulis bulan ke berapa (angka 1-12) : 3
bulan : Maret
Tulis bulan ke berapa (angka 1-12) : 4
bulan : April
Tulis bulan ke berapa (angka 1-12) : 5
bulan : Mei
Tulis bulan ke berapa (angka 1-12) : 12
bulan : Desember
Tulis bulan ke berapa (angka 1-12) : 13
Mana ada bulan 13, Dodol!

0 comments:

Posting Komentar

Write your comment here