My Little Daemon™

Middle, C ProgrammingAugust 27, 2007 1:58 pm

Union sebenarnya sama dengan struktur, hanya saja elemen yang bisa dipakai pada waktu yang bersamaan hanyalah satu walaupun dalam union tersebut terdapat lebih dari satu elemen. Akibatnya, ukuran dari suatu union adalah ukuran maksimum dari elemen secara individual sedangkan ukuran suatu struktur adalah jumlahan dari ukuran elemen-elemennya. Perhatikan contoh berikut :

File union.c

#include <stdio.h>

union contoh{
      int satu;
      int dua;
}misal;

main()
{
   int x;
   int y;

   x=2;
   y=1;

   misal.satu = x;
   misal.dua = y;

   printf(”Nilai unionnya = %d\n”, misal.satu);
   printf(”Nilai unionnya = %d\n”, misal.dua);
}

$ gcc -o union union.c
$ ./union
Nilai unionnya = 1
Nilai unionnya = 1
$

Biasanya union digunakan untuk menampung variabel yang tipenya tidak tentu dan juga ukurannya. Misalnya pada contoh berikut akan dicobakan untuk melakukan seleksi tipe data dari suatu variabel yang diinputkan via operator dan program kita ini akan berusaha menampungnya ke elemen union yang tepat. Dalam hal ini akan dipilihkan apakah integer bertanda atau signed integer atau biasa disebut integer saja (integer yang mengandung bilangan bulat negatif dan bilangan bulat positif, termasuk nol) ataukah unsigned integer yang biasa dikenal sebagai integer/bilangan bulat positif, disebut tak bertanda karena kita tidak memerlukan tanda +/- untuk menggunakannya.

File union2.c

#include <stdio.h>

union bulat{
      int bertanda;
      unsigned int  tak_bertanda;
}bilangan;

main()
{
   int x;

   printf(”Isikan sebuah bilangan bulat : “);
   scanf(”%d”, &x);
   if (x < 0){
      printf("x adalah bilangan bulat negatif\n");
      bilangan.bertanda = x;
      printf("Nilai unionnya = %d karena itu dimasukkan ke kategori integer
      bertanda\n", bilangan.bertanda);
      }
   else {
      printf("x adalah bilangan bulat nol atau positif\n");
      bilangan.tak_bertanda = x;
      printf("Nilai unionnya = %d karena itu dimasukkan ke kategori integer
      tak bertanda\n", bilangan.tak_bertanda);
      }
}

$ gcc -o union2 union2.c
$ ./union2
Isikan sebuah bilangan bulat : -2
x adalah bilangan bulat negatif
Nilai unionnya = -2 karena itu dimasukkan ke kategori integer bertanda
$ ./union2
Isikan sebuah bilangan bulat : 0
x adalah bilangan bulat nol atau positif
Nilai unionnya = 0 karena itu dimasukkan ke kategori integer tak bertanda
$ ./union2
Isikan sebuah bilangan bulat : 2
x adalah bilangan bulat nol atau positif
Nilai unionnya = 2 karena itu dimasukkan ke kategori integer tak bertanda
$

Tentu saja bisa saja kita menggunkan kata kunci struct sebagai ganti dari union, namun alokasi memori yang digunakan jelas lebih efisien jika digunakan union karena ukurannya lebih kecil jika dibandingkan dengan struct.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:56 pm

Dalam pemrograman C, kita bisa membuat array dari struktur. Untuk lebih jelasnya perhatikan contoh berikut :

File arraystruktur.c

#include <stdio.h>
#define MAX 5

struct personal
{
     char nip[9];
     char nama[45];
}pegawai[MAX] = {”20071234″, “Tarmijan”,
               “20071235″, “Mahayana”,
               “20071236″, “Sahbana”,
               “20071237″, “Permadi”,
               “20071238″, “Laksamana”
};

main()
{
     int i;

     for (i=0; i<MAX; i++)
     printf(”Nip dari %s adalah %s\n”, pegawai[i].nama, pegawai[i].nip);
}

$ gcc -o arraystruktur arraystruktur.c
$ ./arraystruktur
Nip dari Tarmijan adalah 20071234
Nip dari Mahayana adalah 20071235
Nip dari Sahbana adalah 20071236
Nip dari Permadi adalah 20071237
Nip dari Laksamana adalah 20071238
$

Variabel array pegawai terdiri dari 5 elemen, dengan masing-masing elemen mempunyai struktur personal.

Atau bisa pula seperti ini :

File arraystruktur2.c

#include <stdio.h>
#define MAX 5

struct personal
{
     char *nip;
     char *nama;
}pegawai[MAX];

main()
{
     int i;
     pegawai[0].nip = “20071234″;
     pegawai[0].nama = “Tarmijan”;
     pegawai[1].nip = “20071235″;
     pegawai[1].nama = “Mahayana”;
     pegawai[2].nip = “20071236″;
     pegawai[2].nama = “Sahbana”;
     pegawai[3].nip = “20071237″;
     pegawai[3].nama = “Permadi”;
     pegawai[4].nip = “20071238″;
     pegawai[4].nama = “Laksamana”;

     for (i=0; i<MAX; i++)
     printf(”Nip dari %s adalah %s\n”, pegawai[i].nama, pegawai[i].nip);
}

$ gcc -o arraystruktur2 arraystruktur2.c
$ ./arraystruktur2
Nip dari Tarmijan adalah 20071234
Nip dari Mahayana adalah 20071235
Nip dari Sahbana adalah 20071236
Nip dari Permadi adalah 20071237
Nip dari Laksamana adalah 20071238
$

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:55 pm

Berikut adalah contoh penggunaan struktur dalam suatu fungsi :

File strukturfungsi.c

#include <stdio.h>

struct total
{
    int gajine;
    int tunjangane;
};

struct pegawai
{
    char *nip;
    char *nama;
    char *alamat;
    char *telepon;
};

main()
{
  struct pegawai pegawai_kontrak;

  pegawai_kontrak.nip = “200612345″;
  pegawai_kontrak.nama = “Tarmijan”;
  pegawai_kontrak.alamat =  “Jl. Buritan Raya 44 Malang”;
  pegawai_kontrak.telepon =  “0341-7733445″;

  printf(”Total Gaji %s adalah %d\n”, pegawai_kontrak.nama,
  totalan(1250000, 250000));
}

totalan(int x, int y)
{
  struct total totale;
  int hasil;

  totale.gajine = x;
  totale.tunjangane = y;

  hasil = totale.gajine + totale.tunjangane;

  return(hasil);
}
$ gcc -o strukturfungsi strukturfungsi.c
$ ./strukturfungsi
Total Gaji Tarmijan adalah 1500000
$

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:52 pm

Konsep Dasar Struktur

Suatu struktur adalah kumpulan dari beberapa variabel, dimana tipe datanya dapat berbeda-beda. Struktur dideklarasikan dengan satu nama tunggal sehingga data dapat ditangani sebagai satu kesatuan. Tujuan dari penerapan struktur adalah untuk memudahkan manipulasi item-iten data. Struktur sangat berguna dalam menangani data yang kompleks, terutama dalam program-program besar. 

Contoh :

struct pegawai
{
    char nip[9];
    char nama[30];
    char alamat[64];
    char telepon[15];
    float gaji;
    float tunjangan;
};

Kata kunci struct menyatakan deklarasi suatu struktur. Nama yang mengikuti struct biasa disebut sebagai label, pada contoh di atas pegawai adalah label. Adapun nip, nama, alamat, telepon, gaji, dan tunjangan adalah elemen dari struktur itu. Label dapat digunakan untuk mendeklarasikan variabel lain dengan struktur yang sama, misalnya :

struct pegawai pegwai_kontrak;

mendefinisikan variabel pegawai_kontrak adalah suatu struktur dengan tipe pegawai. Suatu struktur dapat diberi nilai awal (inisialisasi) seperti berikut ini :

struct pegawai pegawai_kontrak = {”200612345″, “Tarmijan”, “Jl. Buritan Raya 44 Malang”, “0341-7733445″, 1250000, 250000};

Elemen dari suatu struktur dapat direferensikan dengan pernyataan berikut ini : 

label.elemen

Operator untuk elemen struktur (yaitu tanda titik) menghubungkan label dan elemennya. Jadi misalnya mendapatkan gaji total seorang pegawai_kontrak dapat dibuat dengan cara berikut :

gaji_total = pegawai_kontrak.gaji + pegawai_kontrak.tunjangan;

Contoh lengkap :

File struktur.c

#include <stdio.h>

struct pegawai
{
    char nip[9];
    char nama[30];
    char alamat[64];
    char telepon[15];
    float gaji;
    float tunjangan;
};

main()
{
  struct pegawai pegawai_kontrak = {”200612345″, “Tarmijan”, “Jl. Buritan Raya 44 Malang”,
  “0341-7733445″, 1250000, 250000};
  float gaji_total;

  gaji_total=pegawai_kontrak.gaji + pegawai_kontrak.tunjangan;

  printf(”Total Gaji %s adalah %.2f\n”, pegawai_kontrak.nama, gaji_total);
}

$ gcc -o struktur struktur.c
$ ./struktur
Total Gaji Tarmijan adalah 1500000.00
$

Suatu struktur dapat pula menrupakan elemen dari struktur yang lain. Sebagi contoh akan kita buat struktur tanggal yang nantinya bisa digunakan untuk membuat tanggal_lahir pegawai_kontrak.

Perhatikan contoh berikut :

File struktur2.c

#include <stdio.h>

struct tanggal
{
    char *tgl;
    char *bln;
    char *thn;
};

struct pegawai
{
    char *nip;
    char *nama;
    char *alamat;
    char *telepon;
    float gaji;
    float tunjangan;
    struct tanggal tanggal_lahir;
};

main()
{
  struct pegawai pegawai_kontrak;

  pegawai_kontrak.nip = “200612345″;
  pegawai_kontrak.nama = “Tarmijan”;
  pegawai_kontrak.alamat =  “Jl. Buritan Raya 44 Malang”;
  pegawai_kontrak.telepon =  “0341-7733445″;
  pegawai_kontrak.gaji =  1250000;
  pegawai_kontrak.tunjangan =  250000;

  pegawai_kontrak.tanggal_lahir.tgl = “02″;
  pegawai_kontrak.tanggal_lahir.bln = “01″;
  pegawai_kontrak.tanggal_lahir.thn = “1976″;

  printf(”Tanggal lahir %s adalah %s-%s-%s\n”, pegawai_kontrak.nama,
  pegawai_kontrak.tanggal_lahir.tgl,pegawai_kontrak.tanggal_lahir.bln,
  pegawai_kontrak.tanggal_lahir.thn);
}

$ gcc -o struktur2 struktur2.c
$ ./struktur2
Tanggal lahir Tarmijan adalah 02-01-1976
$

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:49 pm

Inisialisasi array yang tak berukuran dapat dilakukan untuk array berdimensi satu atau lebih. Untuk array berdimensi lebih dari satu, dimensi paling kiri yang boleh tak berukuran. Dengan cara ini tabel dalam array dapat diperluas atau dipersempit tanpa mengubah ukuran array.

Berikut ini merupakan contoh pendeklarasian arry berdimensi satu yang tak berukuran :

 

int skala[] = {1,2,4,6,8};

Maka secara otomatis :

skala[0] bernilai 1
skala[1] bernilai 2
skala[3] bernilai 4
skala[4] bernilai 6
skala[5] bernilai 8

Untuk array berdimensi lebih dari satu :

char konversi[][2] = {’A’,’B’,’C’,’D’,’E’,’F’};

Pada contoh di atas berlaku :

konversi[0][0] bernilai ‘A’
konversi[0][1] bernilai ‘B’
konversi[1][0] bernilai ‘C’
konversi[1][1] bernilai ‘D’
konversi[2][0] bernilai ‘E’
konversi[2][1] bernilai ‘F’

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:46 pm

C memungkinkan untuk membuat array dimensi lebih dari satu. Bentuk umum pendeklarasian array berdimensi banyak adalah :

tipe nama_array[ukuran_1][ukuran_2] . . . [ukuran_N];

File arraydb.c

#include <stdio.h>

static char barishari[2][13] = {
       {0,31,28,31,30,31,30,31,31,30,31,30,31},
       {0,31,29,31,30,31,30,31,31,30,31,30,31}
};

int hari_per_tahun();

int hari_per_tahun(int *tahun, int *bulan, int *hari)
{
  int i, kabisat;
  kabisat = *tahun % 4 == 0 && *tahun % 100 != 0 || *tahun % 400 == 0;
  for (i=1; i < *bulan; i++)
      *hari += barishari[kabisat][i];
  return *hari;
}

main()
{
  int a,b,c;

  a=1988;
  b=3;
  c=1;

  printf(”%d\n”, hari_per_tahun(&a, &b, &c));
}

$ gcc -o arraydb arraydb.c
$ ./arraydb
61
$

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, C Programming 1:39 am

Fungsi ini digunakan untuk mendapatkan nilai yang diinputkan oleh pemakai program. Untuk mendapatkan nilai yang diinputkan, fungsi ini menggunakan operator pengalamatan (”&“) di depan nama variabel yang akan menampungnya.

Format umumnya mirip dengan fungsi printf(). Namun demikian terdapat beberapa perbedaan :

Format printf() scanf()
karakter %c %c
string %s %s
integer %d %d
unsigned integer desimal %u %u
unsigned integer heksadesimal (menggunakan “ABCDEF”) %x %x
unsigned integer oktal %o %o
floating-point (notasi desimal) %f %f atau %e
floating-point (notasi eksponensial) %e %f atau %e
floating-point (%f atau %e yang terpendek) %g tidak ada

 

Pada scanf(), %e dapat digunakan sebagai pengganti %l, akibatnya sama saja. Kita dapat mengisikan input dengan notasi eksponensial maupun desimal, keduanya dapat diterima oleh %e dan %f. Penentu %g yang memungkinkan fungsi printf() memilih notasi eksponensial atau desimal tergantung mana yang terpendek, tidak dihiraukan oleh scanf() karena pada scanf() pemakailah yang menentukan hal tersebut.

Untuk menangani long integer fungsi scanf() menggunakan %D, %U, %X dan %O yang masing bersesuaian dengan %d, %u, %x dan %o

Fungsi scanf() dapat menerima input beberapa nilai untuk ditampung di beberapa variabel sekaligus.

File sekaligus.c

#include <stdio.h>

main(){
    char nim[7], nama[20];
    float nilai;

    printf(”ISIKAN DATA NIM, NAMA, NILAI : “);
    scanf(”%s %s %f”, &nim, &nama, &nilai);
    printf(”Mahasiswa dengan NIP = %s, NAMA = %s mempunyai NILAI =
    %f\n”, nim, nama, nilai);
}

$ gcc -o sekaligus sekaligus.c
$ ./sekaligus
ISIKAN DATA NIM, NAMA, NILAI : 200701002 dody 89.67
Mahasiswa dengan NIP = 200701002, NAMA = dody mempunyai NILAI = 89.669998
$

Untuk memisahkan nilai input antar variabel dapat digunakan karakter kosong (whitespace) yang meliputi spasi, tab dan enter

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, C Programming 1:33 am

Array atau larik merupakan koleksi data dengan setiap elemen data menggunakan nama yang sama dan masing-masing elemen data bertipe sama. Setiap elemen array dapat diakses dan dibedakan melalui indeks array.

Array dapat digolongkan menjadi :

  1. Array dimensi satu.
  2. Array dimensi banyak.

Array Dimensi Satu

Suatu array berdimensi satu dideklarasikan dengan bentuk umum :

tipe nama_array[ukuran];

dengan tipe menyatakan tipe data elemen array dan ukuran menyatakan jumlah maksimal elemen array. Contoh pendeklarasian array adalah seperti berikut ini :

float nilai[5];

yang menyatakan bahwa array nilai mengandung 5 elemen yang bertipe float

Pada C, data array akan disimpan dalam memori pada lokasi yang berurutan. Elemen pertama mempunyai indeks sama dengan nol. Apabila pada array nilai ada 5 buah elemen, maka elemen pertama memiliki indeks sama dengan nol, elemen kedua memiliki indeks sama dengan 1, dan seterusnya.

Bentu umum pengaksesan elemen array adalah :

nama_array[indeks];

Contoh :

File cobaarray.c

#include <stdio.h>
#define MAKS_TES 5

main()
{
  int i;
  float total_nilai, rata_rata;
  float nilai_tes[MAKS_TES]; /* deklarasi array */

  /* pemasukan data nilai tes */
  for (i=0; i < MAKS_TES; i++)
  {
    printf("Nilai tes ke - %d : ", i+1);
    scanf("%f", &nilai_tes[i]);
  }

  /* menghitung jumlah dari seluruh nilai tes */
  total_nilai=0;
  for (i=0; i < MAKS_TES; i++)
      total_nilai = total_nilai + nilai_tes[i];

  /* menghitung nilai rata-rata */
  rata_rata = total_nilai / MAKS_TES;

  /* cetak nilai rata-rata */
  printf(”Nilai rata-rata = %.2f\n”, rata_rata);
}

$ gcc -o cobaarray cobaarray.c
$ ./cobaarray
Nilai tes ke - 1 : 6
Nilai tes ke - 2 : 7
Nilai tes ke - 3 : 9
Nilai tes ke - 4 : 8
Nilai tes ke - 5 : 7
Nilai rata-rata = 7.40
$

Berikut ini adalah contoh program yang melakukan inisialisasi array :

File inisialarray.c

#include <stdio.h>

main()
{
  static int jum_hari[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int bulan, tahun, jhari;

  printf(”Masukkan bulan [1…12] : “);
  scanf(”%d”, &bulan);
  printf(”Masukkan tahunnya : “);
  scanf(”%d”, &tahun);

  if (bulan==2)
     if ((tahun % 4 == 0) && (tahun % 100 !=0) || (tahun % 400 ==0))
        jhari = 29;
     else
        jhari = 28;
  else
     jhari = jum_hari[bulan-1];
  printf(”Jumlah Hari pada bulan %d adalah  %d\n”, bulan,jhari);
}

$ gcc -o inisialarray inisialarray.c
$ ./inisialarray
Masukkan bulan [1…12] : 2
Masukkan tahunnya : 2004
Jumlah Hari pada bulan 2 adalah  29
$ ./inisialarray
Masukkan bulan [1…12] : 2
Masukkan tahunnya : 1600
Jumlah Hari pada bulan 2 adalah  28
$

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa