Selasa, Agustus 04, 2015

Programming in C - Part 18: Structure

Anda dapat mendeklarasikan dan menginisiasi sebuah variabel dalam bahasa C dengan menetapkan tipe datanya. Misalnya

int i = 0 ;

adalah perintah untuk mencadangkan sebuah lokasi blok memori yang diberi nama i dan akan berisi data bertipe integer, dalam hal ini diisi dengan 0.

int i[5] ;
adalah perintah yang sama dengan di atas hanya saja perintah ini mencadangkan 5 blok memori yang masing-masing blok akan diisi data bertipe integer. Anda pasti ingat bahwa perintah ini adalah untuk mendeklarasikan sebuah array bertipe integer. Dalam array tersebut anda hanya diperbolehkan menyimpan data bertipe yang sama yaitu integer. Bagaimana jika anda ingin menyimpan data tipe berbeda?.

Pada kehidupan nyata, anda pasti pernah melihat sebuah tabel yang terdiri dari beberapa kolom. Misalnya kolom pertama berisi nama, kolom kedua berisi alamat, kolom ke tiga berisi berat badan dst. Jelas bahwa kolom pertama dan kedua bertipe string (array of char) sedangkan tipe ke tiga bertipe integer, atau bisa juga double. Intinya bahwa terdapat perbedaan tipe data pada setiap kolom. Perhatikan tabel beriktu iniPengarang    Penerbit    No    Judul Buku
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


Setiap baris dari tabel di atas memiliki tipe data yang berbeda. Jika anda ingin memanipulasi tabel tersebut dengan menggunakan bahasa C, maka cara yang dapat digunakan adalah STRUCTURE.

Structure memungkinkan anda untuk membuat suatu variabel yang dapat menampung beberapa tipe data sekaligus, misalnya integer, string, dll. Structure sering digunakan untuk keperluan manipulasi tabel (database)

Cara penggunaan Structure


Untuk mendefinisikan structure anda harus menggunakan kata kunci struct sbb


struct Buku
{
    char     judul[50];
    char     pengarang[50];
    char     subject[100];
    int      kode;
};     // token ; di akhir struct

Perhatikan bahwa di akhir definisi HARUS diikuti tanda (token) ;

Perintah di atas mendefinisikan struktur data buku yang terdiri dari judul, pengarang dan subject yang semuanya menggunakan array of char, dan satu kode bertipe integer.

Untuk menginisiasi sebuah variabel tipe struct Buku, maka anda dapat memberikan perintah sbb :
struct Buku Buku1;
struct Buku Buku2;


Perintah ini mengalokasikan dua blok memori yang diberi nama Buku1 dan Buku2. Setiap blok dapat menampung 4 data, yaitu 3 bertipe char dan satu integer

Mengisi structure


Untuk memberikan nilai kepada structure dapat dilakukan dengan memanfaatkan strcpy untuk mengcopy string kepada hasil dari asal. Akses yang digunakan adalah dengan memisahkan nama struct dan variabel (fieldnya) dan dipisahkan dengan tanda titik (.)

strcpy( Buku1.judul, "Programming in C" );
strcpy( Buku1.pengarang, "Sastrawan" );
strcpy( Buku1.subject, "C Programming Tutorial" );


Untuk memberikan nilai yang bertipe integer dapat langsung diberikan sbb
Buku1.kode = 1;

Untuk menampilkan isi dari struct dapat digunakan prinf sbb

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);



Adapun program selengkapnya tampak sbb :

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

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

int main( )
{
struct Buku Buku1;
struct Buku 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 itu dicompile dan dijalankan, maka akan menjadi sbb :

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


Membuat Array of Structure


Sama halnya dengan tipe data lainnya, tipe structure juga dapat dibuat dalam bentuk array of structure. Adapun cara membuatnya adalah sebagai berikut :

struct Buku
{
    char judul[50];
    char pengarang[50];
    char subject[100];
    int    kode;
} bukuku[2];            // token ; di akhir struct


Perintah ini mencadangkan 2 lokasi blok memory yang langsung diberi nama bukuku

Anda juga dapat melakukan deklarasi dan inisiasi yang bersamaan untuk array tipe struct ini. Contohnya adalah sbb :

struct Brooks
{
    char judul[50];
    char pengarang[50];
    char subject[100];
    int    kode;
} bukumu[2] = {
    {"Judul1","Amen allan","Hebat",9},
    {"Judul2","Inen allan","Hebat",19}}; // token ; di akhir struct

Struktur sebagai argumen / parameter dari sebuah fungsi

Untuk 'mengirim' structure ke dalam suatu fungsi (sebagai argumen atau parameter dari fungsi), dapat menggunakan metode yang sama dengan argumen untuk tipe data lainnya. Sebagai contoh, jika program di atas dimodifikasi dan kita akan menampilkan isi dari database dengan menggunakan sebuah fungsi maka kita dapat membuat fungsi dan memasukkan structure ke dalam fungsi tersebut untuk selanjutkan dicetak atau proses lainnya.

/*** Membuat struct sebagai parameter fungsi
 * Created by     : Sastrawan
 * Topic        : Memasukkan / menggunakan array of structure
 *                   sebagai parameter / argumen sebuah fungsi
 * Nama File    : structure5.c
 */

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

void cetakDataBase(struct Buku bk) ;

int main( )
{

struct Buku bukuKita[]= {{"Teguran dari Langit", "Mr Amenallan","Religius",99},
                    {"Aku suka sate","Chef Marinka","Food",76},
                    {"Information Technology","Prof Simson","Science",23}};

int i;
for(i=0;i<3;i++) cetakDataBase(bukuKita[i]) ;

return 0;
}


void cetakDataBase(struct Buku bk) {
    printf( "Judul\t\t :\t %s\n" , bk.judul);
    printf( "Pengarang\t :\t %s\n" , bk.pengarang);
    printf( "Subject\t\t :\t %s\n" , bk.subject);
    printf( "Kode\t\t :\t %d\n" , bk.kode);
    }


JIka dikompilasi dan dijalankan akan menghasilkan output sbb :

Judul         :     Teguran dari Langit
Pengarang     :     Mr Amenallan
Subject       :     Religius
Kode          :     99
Judul         :     Aku suka sate
Pengarang     :     Chef Marinka
Subject       :     Food
Kode          :     76
Judul         :     Information Technology
Pengarang     :     Prof Simson
Subject       :     Science
Kode          :     23



Setelah kita mengetahui teknik mengumpankan structure ke dalam fungsi, maka sekarang kita akan maju satu langkah lagi untuk mempelajari hal yang lebih menantang, yaitu penggunaan pointer pada structure.

Pointer dan Structure


Menggunakan pointer pada structure tidak sesulit yang anda bayangkan. Saya kembali menggunakan contoh di atas untuk mendemonstrasikan penggunaan pointer pada structure sehingga dapat memudahkan anda untuk memahami bagaimana cara kerja pointer pada structure berikut ini:

/*** Pointer of Structure
 * Created by     : Sastrawan
 * Topic        : Membuat dan akses pointer of structure
 * Nama File    : structure7.c
 */

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

void cetakDataBasePtr(struct Buku *bk) ;


int main( )
{

struct Buku bukuKita[]= {{"Teguran dari Langit", "Mr Amenallan","Religius",99},
                    {"Aku suka sate","Chef Marinka","Food",76},
                    {"Information Technology","Prof Simson Bau","Science",23}};
                  
struct Buku *ptrBuku ;     // deklarasi pointer of struct
ptrBuku = &bukuKita[0] ;  // ingat pointer yg mengarah ke array selalu menunjuk ke awal array
int i;
for(i=0;i<3;i++) cetakDataBasePtr(ptrBuku+i) ;  //cara incrementak pointer structure

return 0;
}



void cetakDataBasePtr(struct Buku *bk) {
    printf( "Judul\t\t :\t %s\n" , bk->judul);  // Menggunakan tanda -> instead of tanda titik (.)
    printf( "Pengarang\t :\t %s\n" , bk->pengarang);
    printf( "Subject\t\t :\t %s\n" , bk->subject);
    printf( "Kode\t\t :\t %d\n" , bk->kode);
    }



Jika dijalankan, program ini juga akan menghasilkan output yang sama dengan di atas. Bedanya adalah bahwa yang kedua menggunakan pointer sebagai argumen dalam fungsi dan menggunakan tanda -> untuk mengakases element structure

Hal penting yang harus diketahui disini adalah bahwa untuk mengakses elemen dari structure dilakukan dengan cara :
  1. Menggunakan tanda titik (.) : contoh bk.judul untuk mengakses judul. Ini hanya bisa dilakukan jika mengakses structure secara langsung, artinya tidak menggunakan pointer. Jika menggunakan pointer untuk menjelajah isi array of structure maka caranya adalah seperti nomor 2.
  2. Menggunakan tanga minus dan lebih dari ( -> ) contoh : bk -> judul untuk mengakses judul

0 comments:

Posting Komentar

Write your comment here