Showing posts with label fungsi. Show all posts
Showing posts with label fungsi. Show all posts

Friday, March 19, 2010

Membuat Fungsi Berbentuk Template

Perhatikan contoh fungsi berikut :


int getNilaiTerkecil(int a, int b)
{
int hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

fungsi diatas digunakan untuk memilih nilai terkecil diantara dua nilai, a dan b. Jika a lebih kecil dari b maka nilai kembalian dari fungsi ini adalah a sebaliknya yang dikembalikan adalah nilai b.

Dari pendeklarasian fungsi tersebut, kita dapat melihat bahwa fungsi ini hanya bisa digunakan untuk tipe bilangan int, karena kedua parameternya, a & b, memiliki tipe int. Jika kita menggunakan tipe data yang lain, maka akan terjadi kesalahan kalkulasi.

int nilai_a = 5;
int nilai_b = 7;
int hasil = getNilaiTerkecil(nilai_a, nilai_b);
cout << hasil ; // akan tertampil 5

double nilai_a2 = 5.2;
double nilai_b2 = 7;
double hasil2 = getNilaiTerkecil(nilai_a2, nilai_b2);
cout << hasil2 ; // akan tertampil 5 <-- SALAH

salah satu teknik yang bisa kita pakai sebagai solusi dari masalah diatas adalah dengan membuat lagi sebuah fungsi baru dengan nama yang sama namun menggunakan parameter bertipe : double

double getNilaiTerkecil(double a, double b)
{
double hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

Kelemahan cara ini menurut saya, ukuran baris di dalam program kita menjadi lebih banyak. karena kita harus menuliskan ulang fungsi yang sama, namun yang diganti hanyalah bagian tipe data.

Untuk membuat program yang lebih ramping dan mampu menyelesaikan masalah diatas, kita bisa menggunakan template. Dengan menggunakan template, tipe data yang hendak dipakai bisa ditentukan oleh kita saat pemanggilan fungsi tersebut :

int nilai_a = 5;
int nilai_b = 7;
int hasil = getNilaiTerkecil<int>(nilai_a, nilai_b);
cout << hasil ; // akan tertampil 5

double nilai_a2 = 5.2;
double nilai_b2 = 7;
double hasil2 = getNilaiTerkecil<double>(nilai_a2, nilai_b2);
cout << hasil2 ; // akan tertampil 5.2 <-- BENAR

Berikut ini adalah bentuk fungsi getNilaiTerkecil(), jika dituliskan dalam bentuk template :

template <typename TIPEDATA>
TIPEDATA getNilaiTerkecil(TIPEDATA a, TIPEDATA b)
{
TIPEDATA hasil = b;
if (a<b)
{
hasil = a;
}
return hasil;
}

kata 'typename' bisa juga diganti dengan 'class'. Tidak ada beda, apakah kita menggunakan 'typename' atau menggunakan 'class'. Namun umumnya jika TIPEDATA yang akan dipakai adalah berupa class, maka yang digunakan adalah 'class' bukan 'typename'.

Thursday, March 4, 2010

Pemrograman Dengan Mouse

Pada tulisan kali ini akan diperkenalkan sebuah PUSTAKA yang dibuat oleh Cplusplusindonesia untuk menyimpan semua fungsi yang sudah pernah dibahas. Dengan adanya pustaka ini, program kita akan menjadi lebih rapih, karena fungsi-fungsi yang sering kita pakai sudah dipindahkan ke dalam pustaka ini. Nama dari pustaka ini adalah "cppindonesia" sehingga untuk menggunakan pustaka ini cukup menambahkan perintah berikut pada source code kita :

#include "cppindonesia.h"

Pada versinya yang pertama, sudah terdapat beberapa fungsi yang bisa digunakan. Beberapa diantaranya sudah kita pakai pada contoh program sebelumnya seperti gotoxy(), kbhit(), dll. Terdapat juga beberapa fungsi tambahan yang berhubungan dengan penggunaan Mouse. Silahkan membuka file cppindonesia.h untuk melihat semua daftar fungsi yang sudah diimplementasikan lengkap dengan penjelasannya.

Berikut ini adalah program kecil yang mendemokan penggunakan pustaka ini :




Pustaka "cppindonesia" terdiri dari 2 (dua) file penting dan diletakan dalam direktori pustaka pada project yang bisa didownload :

1. cppindonesia.h : Berisi informasi prototype semua fungsi (merupakan teks file)
2. libcppindonesia.a : Berisi implementasi prototype (bukan teks file)

Untuk mempermudah mencoba penggunaan dari pustaka ini, disarankan untuk menggunakan IDE QtCreator karena project yang didownload adalah project yang dibuat menggunakan IDE ini. Bagi teman-teman yang menggunakan IDE lain, perlu dicari bagaimana caranya mengabungkan file pustaka (*.a) yang tersedia dengan program yang akan dibuat.

Petunjuk penting untuk menjalankan project :
  1. Extractlah paket yang didownload, misalkan di : D:\Cppindonesia\Pustaka
  2. Jalankan Qt-Creator
  3. Pilih menu : File -> Open File or Project, masuk ke D:\Cppindonesia\Pustaka, kemudian bukalah file project : usepustaka.pro
  4. Pada sisi kiri dari project yang dibuka, bukalah file usepustaka.pro
  5. Pada file usepustaka.pro, kita akan menemukan baris seperti berikut : LIBS += "C:\Users\braveheart\Documents\QtCreatorProjects\usepustaka\pustaka\libcppindonesia.a" dan INCLUDEPATH += "C:\Users\braveheart\Documents\QtCreatorProjects\usepustaka\pustaka"
  6. Ubahlah baris tersebut menjadi : LIBS += "D:\Cppindonesia\Pustaka\pustaka\libcppindonesia.a" dan INCLUDEPATH += "D:\Cppindonesia\Pustaka\pustaka"
  7. Jalankan project




Thursday, February 4, 2010

Animasi Tulisan Maju-Mundur 2

Program ini adalah pengembangan dari program sebelumnya. Bagi yang baru belajar, disarankan untuk melihat dulu program sebelumnya untuk memahami konsep dasar. Seperti yang sudah dijelaskan sebelumnya, animasi ini menggunakan konsep sederhana "TULIS" dan "HAPUS", pada program kali ini saya perkenalkan juga teknik menghapus menggunakan kombinasi perintah cout.width() dan cout.fill() dan cout<<"".





Wednesday, February 3, 2010

Animasi Tulisan Maju-Mundur

Animasi tulisan Maju-Mundur adalah animasi sederhana membuat tulisan bergerak maju dan saat mencapai posisi tertentu tulisan tersebut akan bergerak mundur, begitu seterusnya. Program akan berakhir jika pemakai menekan tombol 'x'.





Program ini bisa dibuat dengan mudah menggunakan Turbo / Borland C++ for Dos, karena telah tersedia fungsi-fungsi yang cukup mudah untuk digunakan seperti GOTOXY, DELAY, KBHIT dan GETCH.
  1. delay(): digunakan untuk menunda proses eksekusi selama beberapa millisecond
  2. gotoxy(): digunakan untuk menempatkan kursor pada posisi KOLOM dan BARIS
  3. kbhit(): digunakan untuk mendeteksi terjadinya penekanan tombol. Jika terdapat tombol yang ditekan maka fungsi ini akan mengembalikan nilai TRUE sebaliknya FALSE
  4. getch(): digunakan untuk mengambil informasi tombol yang terakhir kali ditekan.

Yang perlu dilakukan hanyalah menggunakan pusataka, conio.h & dos.h.

#include <conio.h>
#include <dos.h>

Akan tetapi ketika kita menggunakan IDE lain yang tidak tersedia kedua pustaka diatas atau tidak terdapat fungsi yang diinginkan, maka proses pembuatan program ini akan menjadi sulit.

Program kali ini akan dikhususkan untuk teman-teman yang menggunakan sistem operasi Windows yang tidak menggunakan IDE Turbo / Borland C++ for DOS, karena kita akan menggunakan pustaka windows.h untuk membuat keempat fungsi diatas, setelah itu menggunakan fungsi buatan kita ini untuk membuat animasi Tulisan Maju-Mundur.


Sunday, October 11, 2009

Mengenal Fungsi Swap

Pengantar

Fungsi swap adalah fungsi yang digunakan untuk menukarkan dua buah nilai. Fungsi ini sangat dibutuhkan ketika kita hendak membuat aplikasi pengurutan data (sorting). Pada pemrograman C++, fungsi ini sudah tersedia dengan fleksibilitas yang tinggi. Artinya bisa digunakan untuk menukar dua buah nilai dengan tipe data yang bermacam-macam. Walaupun sudah tersedia dan tinggal pakai, tidak ada salahnya kita belajar bersama-sama bagaimana membuat fungsi ini. Contoh penggunaan fungsi swap yang sudah tersedia juga akan tersedia pada source code yang diberikan.

Sekilas Tentang Pointer

Pointer sudah pernah dibahas pada tulisan, pengenalan bahasa C++ (bagian 3). Pada bagian ini akan dijelaskan secara singkat penggunaan sederhana dari pointer.

Konsep penting yang perlu diingat adalah, pointer biasanya digunakan untuk menunjuk ke variabel yang lain. Untuk itu pointer membutuhkan alamat dari variabel yang ditunjuk. Setelah mengetahui alamat, dengan menggunakan pointer kita bisa mengubah nilai dari variabel yang ditunjuk.

Kita sudah tahu bahwa untuk membuat sebuah variabel, kita perlu menentukan tipe dari variabel dan kita juga perlu memperhatikan aturan pemberian nama dari variabel tersebut. Misal kita akan membuat variabel dengan nama data dan bertipe int, maka kita dapat menulisnya sebagai berikut:

int data;

Jika kita hendak membuat pointer. Kita cukup mendambahkan tanda bintang setelah tipe data.

int* myPointer;

pada deklarasi ini, kita membuat sebuah pointer dengan nama myPointer. Pointer ini hanya bisa menunjuk ke variabel yang bertipe int.

Seperti yang sudah dijelaskan sebelumnya, untuk menunjuk sebuah variabel, pointer membutuhkan alamat dari variabel yang hendak ditunjuk. Dengan menggunakan tanda '&' kita bisa mendapatkan alamat dari sebuah variabel. Berikut ini ditunjukkan bagaimana caranya myPointer bisa menunjuk ke alamat dari data.

myPointer = &data;

Variabel sebenarnya hanya merupakan nama lain dari alamat dimemori. Kita tentu akan lebih mudah mengingat nama seperti data dari pada sebuah alamat dimemori, 0x22ff5c.

Sekarang diandaikan kita memberikan nilai 10 (sepuluh) pada variabel data

data = 10;

pernyataan tersebut sebenarnya, kita menyimpan nilai 10 ke alamat tertentu dimemori yang diwakili dengan nama data. Karena myPointer telah menunjuk ke alamat dari data, ini berarti myPointer juga menunjuk ke nilai 10.

Untuk mengakses (misal membaca) nilai yang ditunjuk oleh pointer, kita bisa menggunakan tanda '*' didepan nama dari pointer.

cout<< *myPointer ;

Keluaran dari pernyataan ini adalah angka 10 akan tercetak ke layar. Keluaran ini akan sama jika kita menampilkan nilai dari variabel data.

cout<< data;

Kita juga bisa mengubah nilai yang ditunjuk oleh pointer, seperti berikut:

*myPointer = 15;

Setelah pernyataan diatas maka keluaran dari kedua pernyataan berikut akan sama persis yaitu menampilkan angka 15.

cout << data;
cout << *myPointer;

Membuat Fungsi Swap

Untuk membuat sebuah fungsi, kita bisa memulai dengan membayangkan bagaimana caranya kita memanggil fungsi yang akan kita pakai. Sebagai contoh fungsi swap yang akan kita buat dipanggil dengan cara sebagai berikut:

int a = 5;
int b= 7;
mySwap(&a,&b);
cout << a; // harapannya tertampil 7
cout << b; // harapannya tertampil 5

berangkat dari skenario di atas, tampak bahwa fungsi swap memiliki dua buah parameter pointer dengan tipe int. Untuk itu bentuk fungsi kita kira-kira seperti berikut:

void mySwap (int* x, int* y)
{
//body dari swap
...
}

pada kasus ini kita tidak membutuhkan nilai kembalian sehingga tipe data dari return value dibuat void. Kenapa tidak butuh ? Silahkan melihat lagi skenario yang kita buat di atas.

Karena fungsi kita hendak menukarkan nilai x dan nilai y (ingat x dan y adalah pointer, sehingga kita butuh tanda * untuk mengubah nilai), maka kita membutuhkan sebuah penampung (variabel tambahan) untuk melakukan proses penukaran ini.

Buf = *x;// buf bernilai x
*x = *y; // x bernilai y
*y = buf;// y bernilai x

pada contoh diatas, penampung yang kita pakai adalah Buf. Karena Buf dipakai untuk menampung nilai bertipe int, maka Buf juga harus dideklarasikan bertipe int.

int Buf;

Dengan demikian bentuk fungsi kita selengkapnya, kira-kira seperti berikut:

void swap (int* x, int* y)
{
//body dari swap
int Buf;
Buf = *x;
*x = *y;
*y = Buf;
}

Pemanggilan fungsi dengan cara mengirimkan alamat dari variabel, dikenal dengan istilah passing parameter by reference.

Di dalam bahasa C++, diperkenalkan teknik baru untuk pengiriman parameter berupa reference dengan menggunakan tanda '&'. Dengan menggunakan teknik ini, cara pemanggilan fungsi swap bisa diskenariokan sebagai berikut:

int a = 5;
int b= 7;
swap(a,b); // perhatikan tanda & dihilangkan
cout << a;
cout << b;

Perubahan juga perlu dilakukan pada fungsi kita sebagai berikut:

void swap (int& x, int& y) //perhatikan tanda &
{
//body dari swap
int Buf;
Buf = x;// tanda * juga dihilangkan
x = y;
y = Buf;
}


Monday, October 5, 2009

Pengenalan Bahasa C++ (Bagian 7)

Pada tulisan ini akan dibahas khusus tentang fungsi dan merupakan pelengkap penjelasan dari tulisan Pengenalan Bahasa C++ (bagian 2). Penjelasan disertai dengan ilustrasi berupa gambar dengan penekanan pada bagian-bagian penting yang perlu diperhatikan saat mengimplementasikan prototipe sebuah fungsi.