Selasa, Agustus 04, 2015

Programming in C - Part 20: typedef

Kata kunci (keyword) typedef ini sangat sering dijumpai dalam pemrograman dalam bahas C. keyword ini digunakan untuk memberi nama baru pada tipe data tertentu, termasuk pada tipe data yang dibuat sendiri oleh user, misalnya structure. Untuk menggunakan keyword ini cukup dengan menambahkan keyword typedef di depan tipe data yang akan didefinisikan. 
 
Contoh :
typedef int BILANGAN ;
 
setelah perintah ini kita dapat menggunakan BILANGAN untuk deklarasi tipe data integer. Dengan kata lain kita mengganti nama int dengan BILANGAN.

BILANGAN i,j ;
Penggunaan typedef akan jauh lebih bermanfaat pada type data yang dibuat sendiri oleh user. SEbagai contoh, berikut ini adalah penggabunagan antara typedef dengan structure.

/* =======================================
 * Membuat dan menggunakan typedef dan STRUCTURE
 * Created by: Sastrawan
 * Topik :  Membuat dan memanfaatkan typedef dan structure
 * file : typedef1.c
 * ========================================
 */

#include <stdio.h>
#include <string.h>
typedef struct Buku
{
    char judul[50];
    char pengarang[50];
    char subject[100];
    int    kode;
} Bukuku;             // token ; di akhir struct

int main( )
{
    Bukuku Buku1 ;    // Ini cara menggunakan typedef yang dibuat
    Bukuku Buku2 ;

/* Mengisi data Buku 1 */
strcpy( Buku1.judul, "Programming in C" );
strcpy( Buku1.pengarang, "Sastrawan" );
strcpy( Buku1.subject, "C Programming Tutorial" );
Buku1.kode = 1;

/* Mengisi data Buku 2 */
strcpy( Buku2.judul, "Metode Penelitian" );
strcpy( Buku2.pengarang, "Sastrawan" );
strcpy( Buku2.subject, "Metlit Kesehatan" );
Buku2.kode = 2;

/* Menampilkan datanya */

printf( "Buku 1  Judul     :\t %s\n" , Buku1.judul);
printf( "Buku 1  Pengarang :\t %s\n" , Buku1.pengarang);
printf( "Buku 1  subject   :\t %s\n" , Buku1.subject);
printf( "Buku 1  Kode Buku :\t %d\n" , Buku1.kode);

putchar('\n');

printf( "Buku 2  Judul     :\t %s\n" , Buku2.judul);
printf( "Buku 2  Pengarang :\t %s\n" , Buku2.pengarang);
printf( "Buku 2  subject   :\t %s\n" , Buku2.subject);
printf( "Buku 2  Kode Buku :\t %d\n" , Buku2.kode);

return 0;
}


Jika program ini dikompilasi dan dijalankan maka akan menghasilkan output :
Buku 1  Judul     :     Programming in C
Buku 1  Pengarang :     Sastrawan
Buku 1  subject   :     C Programming Tutorial
Buku 1  Kode Buku :     1

Buku 2  Judul     :     Metode Penelitian
Buku 2  Pengarang :     Sastrawan
Buku 2  subject   :     Metlit Kesehatan
Buku 2  Kode Buku :     2


Cara yang lebih efisien adalah menggunakan structure dalam bentuk array. Contohnya adalah sbb:

/* =======================================
 * Membuat dan menggunakan typedef dan STRUCTURE
 * Created by: Sastrawan
 * Topik :  Membuat dan memanfaatkan typedef dan structure
 * file : typedef2.c
 * ========================================
 */

#include <stdio.h>
typedef struct Books
{
    char judul[50];
    char pengarang[50];
    char subject[100];
    int    kode;
} Bukuku;                   // token ; di akhir struct

int main( )
{
  
Bukuku bukumu[] = {{"Methode Penelitian","Amen allan","Hebat",1},
                    {"Programming In C","Amen Iyas","Hebat",2},
                    {"Rahasia Asmaul Husna","Amen Ubay","Hebat",3},
                    {"Tendangan dari langit","Inen allan","Hebat",4}};


int i;

for (i=0;i<4; i++) {
printf( "%s\t" , bukumu[i].pengarang);
printf( "%s\t" , bukumu[i].subject);
printf( "%d\t" , bukumu[i].kode);
printf( "%s\n" , bukumu[i].judul);

}
return 0;
}


Jika dikompilasi dan dijalankan akan menghasilkan output sbb :
Amen allan   Hebat    1    Methode Penelitian
Amen Iyas    Hebat    2    Programming In C
Amen Ubay    Hebat    3    Rahasia Asmaul Husna
Inen allan   Hebat    4    Tendangan dari langit



Sekarang kita akan membahas topik yang lebih menantang, yaitu alokasi memori dinamis untuk structure. Dalam program sebenarnya, katakanlah program pengolahan data base, teknik ini akan banyak digunakan. Database akan dibuat sebagai sebuah struktur. Adapun isi dari database tersebut tidak kita ketahui banyaknya. Untuk alasan inilah penggunaan alokasi memori secara dinamis dibutuhkan.

Untuk alokasi secara dinamis kali ini saya akan mendemonstrasikan penggunaan calloc. Perlu diingat bahwa alokasi memori secara dinamis juga dapat dilaksanakan dengan menggunaan keyword malloc

/* Alokasi memori dinamis untuk struktur
 * Created by     : Sastrawan
 * Topic        : Membuat dan akses array dengan alokasi memori dinamik
 * Nama File    : malloc4.c
 */
 
 #include<stdio.h>


struct Books
{
    char judul[50];
    char pengarang[50];
    char subject[100];
    int    kode;
} ;


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

 
typedef struct Books Bukuku;   //cara alternatif mendefinisikan typedef
Bukuku *bk ;
bk = (Bukuku*)calloc(2,sizeof(Bukuku));  
  
/* Perintah diatas adalah menciptakan pointer (bk) type Bukuku dam
 * pointer bk tersebut diarahkan ke lokasi memory yang dicadangkan dengan
 * perintah calloc sebanyak 4 memory blok sehingga mampu menampung
 * data untuk 4 buku
 *
 * Perintah (Bukuku*) sebenarnya adalah mengcasting type
 * void (dihasilkan oleh calloc) menjadi dtipe Bukuku yang sudah didefinisikan
 * dengan menggunakan typedef
 */

//blok memory I diisi informasi :

strcpy((*bk).judul , "Teguran Alam") ; 
strcpy((*bk).pengarang , "Joko Maulana") ;
strcpy((*bk).subject , "Religius") ;        
(*bk).kode = 245 ;      


// pointer to struc increment

(*(bk+1)).kode = 667 ;   
strcpy((*(bk+1)).judul , "Topeng Hukum Para Durjana") ; 
strcpy((*(bk+1)).pengarang , "M. Ardian") ;
strcpy((*(bk+1)).subject , "Hukum") ;

int i ;
for(i=0;i<2;i++)
{
printf("\n%s", (*(bk+i)).judul);
printf("\n%s", (*(bk+i)).pengarang);
printf("\n%s", (*(bk+i)).subject);
printf("\n%d\n", (*(bk+i)).kode);

}
 return 0 ;
 }
 


Jika program tersebut dikompilasi dan dijalankan akan menghasilkan output sbb :

Teguran Alam
Joko Maulana
Religius
245

Topeng Hukum Para Durjana
M. Ardian
Hukum
667


Hal yang dapat dipelajari dari kode diatas adalah antara lain :
  1. Deklarasi typedef dapat dibuat terpisah dengan deklarasi structure.
  2. Setelah definisi typedef, tipe data tersebut dapat diperlakukan sebagaimana tipe data lainnya yang sudah kita kenal sebelumnya, termasuk dapat digunakan untuk mendeklarasikan sebuah pointer
  3. Keyword calloc dapat digunakan untuk alokasi memori dinamis untuk structure dan juga array multidimensi
  4. Akses member untuk structure dalam pointer menggunakan tanda titik (.)
  5. Akses anggota array of structure dengan notasi pointer harus menggunakan () sebelum . namafield

Khusus untuk metode akses anggota dalam structure terdapat perbedaan antara satu structure dan array of structure. Untuk mengakses anggota structure pada structure tunggal digunakan notasi -> sedangankan untuk array of structure menggunakan tanda titik (.)

Pengembangan.


Penggunaan structure sangat luas. Sebagai contoh, anda dapat memiliki data dalam bentuk tabel dan dibuat dalam format teks yang dibatasi dengan separator tertentu, misalnya tanda koma seperti pada file csv. Tentu saja anda dapat mengolah data yang ada pada file tersebut. Algoritma yang dapat digunakan adalah sbb:
  1. Baca file tersebut
  2. Hitung berapa baris data yang ada, hasilnya anda gunakan untuk menghitung jumlah memori yang akan dialokasikan secara dinamis
  3. Buat array of structure
  4. Baca file baris demi baris dan parsing atau scan datanya
  5. Masukkan ke dalam structure
  6. Olah array of structure sesuai yang anda inginkan

Catatan : Pembuatan dan akses file akan dibahas pada tulisan lain. Silahkan cek terus blog ini.

0 comments:

Posting Komentar

Write your comment here