Tempalte Class
Cetakan (template) adalah metode yang memberitahukan kepada kompiler tentang
algoritma mana yang digunakan untuk membentuk suatu fungsi. Dengan cetakan kita dapat
membuat suatu fungsi tertentu tetapi bisa untuk tipe data berbeda. Kompiler menanganni detil
fungsi untuk suatu tipe data yang sedang digunakan. Baik fungsi global maupun kelas dapat
diprogram sebagai cetakan.
Kemudahan template adalah penyesuaian tipe data yang kita input, dengan adanya
penyesuaian tipe data. Dengan satu fungsi bisa diinput dengan beberapa jenis data, sehingga
menghemat code program. Dalam penggunaanya template ada 2 macam yaitu fungsi template
dan class template.
Fungsi template adalah template yang diterapkan untuk fungsi, dimana kode kode
fungsi digunkan untuk beberapa tipe data yang berbeda. Template fungsi menggambarkan
sebuah kumpulan fungsi sejenis yang hanya dibedakan oleh tiap argument dan nilai balik.
Definisi fungsi template mirip dengan definisi fungsi biasa, hanya saja tipe parameter diberi
nama secara simbolik. Berikut implementasi pada praktikum.
Sedangkan Class template adalah template yang diterapkan pada kelas dimana
kumpulan class yang hanya dibedakan oleh tipenya seperti tipe numeris dan char, pointer dan
kombinasinya
Exception Handling
Dalam pembuatan sebuah program sering muncul error (kesalahan) dan bug, yang
sering disebut dengan istilah eksepsi (exception). Prioritas utama bagi seorang programmer
yang berpengalaman adalah membuat program yang terbebas dari kesalahan pada saat
runtime (waktu program dijalankan).
Hal ini bukanlah merupakan hal yang mudah karena disini kita harus pandai dalam
menentukan kemungkinan-kemungkinan yang akan menyebabkan terjadinya error pada
program kita. dengan begini kita sebagai programmer harus dapat mencegah terjadinya error
pada program, sehingga meskipun hal itu terjadi, maka error tersebut tidak akan menghambat
jalannya program. Proses seperti inilah yang disebut dengan penjebakan error atau yang lebih
dikenal dengan istilah "exception handling".
Pada bagian ini kita akan mempelajari bagaimana C++ dapat mencegah eksepsi-eksepsi
yang terjadi.dan perlu diperhatikan bahwa Exception Handling hanya terdapat pada compiler
C++ yang bahasanya telah memenuhi C++ standar atau versi C++ baru contohnya seperti
Dev-C ++ atau CodeBlock dll. Dan jika anda menggunakan compiler C++ lama (klasik)
contohnya seperti : Borland C++ dan Turbo C++, maka anda tidak dapat melakukan
kompilasi program ini.
Untuk melakukan penjebakan error di dalam C++, terdapat tiga buah kata kunci yang
akan digunakan yaitu try, catch, dan throw. Berikut bentuk umum dari penulisan sebuah
block yang dapat mencegah terjadinya error dalam C++.
Sintaknya : "try{
statemen_yang_mungkin_menyebabkan_error;}
catch(tipe_data parameter{
statement_yang_digunakan_untuk_mengatasi_error;}
Konsep kerjannya exception handling ini sederhana, mula-mula program akan
melakukan eksekusi terhadap statemen-statemen yang terdapat pada blok try. Jika eksekusi
berjalan baik (tidak terdapat error), maka statemen yang terdapat pada bagian catch akan
diabaikan. Namun jika terjadinya error, maka error tersebut akan dilempar dengan statemen
throw dan ditangkap dengan menggunakan statemen catch.
ANTRIAN / (QUEUE)
1. Pengertian Queue
Kaidah utama dalam konsep queue adalah FIFO yang merupakan singkatan dari First
In First Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data
tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan
antrian di sebuah loket pembelian tiket kereta, orang yang datang lebih dahulu, maka akan
dilayani terlbih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya.
Gambar di bawah ini mengilustrasikan kerja sebuah queue
2. Deklarasi queue dalam program
Sebuah queue di dalam program komputer dideklarasikan sebagai sebuah tipe bentukan baru,
di dalam Bahasa C, biasa disebut struct. Sebuah struktur data dari sebuah queue setidaknya
harus mengandung dua tiga variabel, yakni variabel HEAD yang akan berguna sebagai
penanda bagian depan antrian, variabel TAIL yang akan berguna sebagai penanda bagian
belakang antrian dan ARRAY DATA dari yang akan menyimpan data-data yang dimasukkan
ke dalam queue tersebut. Berikut adalah syntax untuk mendeklarasikan struktur data dari
sebuah queue menggunakan Bahasa C:
typedef struct
{
int HEAD, TAIL;
int data[max+1];
}Queue;
dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan
dalam queue. Setelah struktur data dari queue didefinisikan dengan syntax di atas, maka
setelah itu dapat dibuat variabel-variabel baru yang mengacu pada tipe data Queue di atas,
misalkan membuat sebuah variabel bernama antrian yang bertipe Queue:
Queue antrian; 8
Dalam tulisan ini, sebuah queue didefinisikan dengan array berukuran MAX + 1, maksudnya
adalah agar elemen array ke-0 tidak digunakan untuk menyimpan data, melainkan hanya
sebagai tempat „singgah‟ sementara untuk variabel HEAD dan TAIL. Sehingga, jika HEAD
dan TAIL berada pada elemen array ke-0, berarti queue tersebut dalam kondisi kosong (tidak
ada data yang disimpan). Berikut adalah ilustrasi dari sebuah queue kosong dengan ukuran
nilai MAX = 8:
a. Prosedur createEmpty
Sama pada stack, prosedur ini berfungsi untuk mengosongkan queue dengan cara meletakkan
HEAD dan TAIL pada indeks array ke-0. Berikut deklarasi prosedur createEmpty pada
queue dalam Bahasa C:
void createEmpty()
{
antrian.HEAD = 0;
antrian.TAIL = 0;
}
b. Prosedur enqueue
Prosedur ini digunakan untuk memasukkan sebuah data/ nilai ke dalam queue. Sebelum
sebuah data/ nilai dimasukkan ke dalam queue, maka prosedur ini terlebih dahulu melakukan
pengecekan terhadap posisi HEAD dan TAIL. Jika posisi HEAD dan TAIL masih berada
pada indeks ke-0 (artinya queue masih kosong), maka prosedur ini akan menempatkan
HEAD dan TAIL pada indeks ke-1 terlebih dahulu, baru setelah itu memasukkan data/ nilai
ke dalam array data queue. Namun, jika posisi HEAD dan TAIL tidak berada pada posisi ke-
0, maka posisi TAIL yang akan dinaikkan satu level. Jadi, pada proses enqueue, TAIL-lah
yang berjalan seiring masuknya data baru ke dalam antrian, sedangkan HEAD akan tetap
pada posisi ke-1. Berikut deklarasi prosedur enqueue dalam Bahasa C:
void enqueue(int x)
{
if ((antrian.HEAD == 0) && (antrian.TAIL == 0))
{
antrian.HEAD = 1;
antrian.TAIL = 1;
}
else
{
antrian.TAIL = antrian.TAIL + 1;
}
antrian.data[antrian.TAIL] = x;
}
Pada deklarasi prosedur enqueue di atas, prosedur memiliki sebuah parameter formal yang
bernama „x‟ yang bertipe integer. Parameter formal „x‟ ini berguna untuk menerima kiriman
nilai dari program utama (void main()) yakni berupa sebuah bilangan integer yang akan
dimasukkan ke dalam queue.
c. Prosedur dequeue
Prosedur ini digunakan untuk mengeluarkan atau membuang sebuah data/ nilai yang paling
awal masuk (yang berada pada posisi HEAD, yakni yang paling depan dari antrian) ke dalam
queue. Pekerjaan yang dilakukan oleh prosedur ini adalah menaikkan nilai HEAD satu level.
Jadi, setiap satu kali data dikeluarkan, maka posisi HEAD naik bertambah satu level.
Misalkan HEAD berada pada indeks ke-1, maka ketika akan mengeluarkan/ menghapus data
pada posisi paling depan (pada posisi HEAD), prosedur ini akan menaikkan posisi HEAD ke
indeks array ke-2.
Berikut deklarasi prosedur pop dalam Bahasa C:
void Dequeue(){
if (q.head > q.tail) {
q.head = 0;
q.tail = 0;
}
q.head = q.head + 1;
}
Ketika posisi HEAD sudah melewati posisi TAIL (HEAD > TAIL), berarti sudah tidak ada
lagi data/ nilai di dalam queue tersebut, maka saat itu terjadi, HEAD dan TAIL dikembalikan
ke posisi ke-0.
d. Fungsi IsEmpty
Sama seperti fungsinya pada stack, fungsi ini berfungsi untuk melakukan pengecekan
terhadap queue, apakah queue tersebut kosong atau tidak. Jika queue tersebut kosong
(artinya, HEAD dan TAIL berada pada posisi 0, atau bisa juga ketika HEAD > TAIL), maka
fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak kosong/ berisi
(artinya, HEAD dan TAIL tidak berada pada posisi 0), maka fungsi akan mengembalikan
nilai 0 (false). Berikut deklarasi fungsi IsEmpty dalam Bahasa C:
int IsEmpty()
{
if ((antrian.HEAD> antrian.TAIL) || (antrian.HEAD == 0) &&
(antrian.TAIL == 0))
return 1;
else
return 0;
}
e. Fungsi IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queue tersebut
penuh atau tidak. Jika queue tersebut penuh (artinya, TAIL berada pada posisi MAX), maka
fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak penuh (artinya,
TAIL tidak berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0 (false).
Berikut deklarasi fungsi IsFull dalam Bahasa C:
int IsFull()
{
if (antrian.TAIL == max)
return 1;
else
return 0;
}
SEARCHING / (PENCARIAN)
Pengertian Searching
Searching adalah mencari data yang dibutuhkan. Searching dalam pemrograman bisa
dilakukan untuk mencari data yang ada di dalam memory komputer.Dalam kehidupan sehari-
hari kita juga sering melakukan kegiatan searching seperti mencari data/informasi yang ada
dalam internet. Ada beberapa metode yang dapat digunakan untuk searching, ada yang
dinamakan:
Sequential Search
Binary Search
Sequential Search
Sequential Search merupakan metode pencarian data dalam array dengan cara
membandingkan data yang dicari dengan data yang ada di dalam array secara berurutan.
Pencarian data dengan Metode Sequential Search efektif untuk mencari data yang dalam posisi
yang tidak terurut atau acak.
Ilustrasi:
Ilustrasi Sequential Search
data yang dicari yaitu 7 disimpan di variabel x, kemudian akan dibanding satu per satu secara
sekuensial terhadap data yang ada dalam array. Jika ditemukan data di dalam array yang sama
dengan data yang dicari artinya data ditemukan.
Contoh Studi Kasus: Menemukan data yang dicari dalam sebuah array 1 dimensi yang
terdapat data di dalamnya dengan menggunakan Metode Sequential Searching. Jika data yang
dicari ditemukan di dalam array kemudian ditampilkan letak dari indexnya.
Binary Search
1. Pertama buat perulangan lalu menentukan posisi low yaitu posisi yang menandakan
index paling rendah kemudian menentukan posisi high. Kemudian mencari posisi mid
= (high + low)/2
2. Lalu membandingkan data yang dicari dengan nilai yang ada di posisi mid.
3. Jika data yang dicari sama dengan nilai yang ada di posisi mid berarti data ditemukan.
4. Jika data yang dicari lebih kecil dari nilai yang ada di posisi mid maka pencarian data
akan dilakukan dibagian kiri mid dengan melakukan pembandingan. dengan kondisi
posisi high berubah yaitu (mid - 1) dan posisi low tetap.
5. Jika data yang dicari lebih besar dari nilai yang ada mid maka pencarian data akan
dilakukan di bagian kanan dari mid dengan posisi low yang berubah yaitu (mid + 1)
dan posisi high tetap.
Contoh Ilustrasi:
Pencarian di bagian kiri mid masih dalam perulangan yang sama, namun indeksnya
yang dipersempit. Karena data yang dicari lebih kecil dari data mid yang sebelumnya maka
posisi high yang berubah yaitu (mid - 1) yang sebelumnya dan low tetap pada posisi yang sama.
Kemudian menentukan mid =(0+1)/2 = 0
artinya mid sekarang terletak di data[0]. lalu data yang dicari dibandingkan dengan mid. 7=7
artinya data telah ditemukan
1. Kelebihannya yaitu tidak perlu membandingkan data yang dicari dengan seluruh data
array yang ada, cukup melalui titik tengah kemudian kita bisa menentukan ke mana
selanjutnya mencari data yang ingin dicari.
2. Kekurangan implementasi agak sedikit lebih rumit karena tidak bisa digunakan pada
data array yang masih acak. Jadi harus melakukan sorting terlebih dahulu dalam
implementasinya.