Fungsi
Prototipe
Prototipe fungsi digunakan untuk mendeklarasikan ke kompiler
mengenai tipe data :
*) Tipe Data keluaran dari fungsi
*)Jumlah parameter yang digunakan
*)Tipe Data dari masing-masing parameter yang digunakan
Keuntungan Memakai Prototipe
-)Kompiler akan melakukan konversi antara tipe parameter dalam
definisi dan parameter fungsi
-)Jika Jumlah Parameter yang digunakan dalam definisi fungsi dan
pada saat pemanggilan fungsi berbeda
atau tidak sama maka akan menunjukkan kesalahan
Untuk membuat suatu function,
diperlukan suatu prototype dari function tersebut,Prototype function memiliki
sintaks sbb:
returned_value_data_type nama_function(argumen);
Seperti halnya dalam Pascal, suatu function dapat mengembalikan (return) suatu nilai (value) yang tergantung tipe datanya. Tipe data value yang dikembalikan inilah yang dimaksud dengan returned_value_data_type.
returned_value_data_type nama_function(argumen);
Seperti halnya dalam Pascal, suatu function dapat mengembalikan (return) suatu nilai (value) yang tergantung tipe datanya. Tipe data value yang dikembalikan inilah yang dimaksud dengan returned_value_data_type.
Sedangkan argumen merupakan
parameter-parameter yang akan diolah dalam function tersebut. Argumen boleh ada
boleh tidak, sesuai kebutuhan. Apabila parameter argumennya lebih dari satu,
cara penulisannya sbb:
tipe_data param1, tipe_data param2, ...
Contoh penulisan prototype function:
- double kuadrat(int x);
- float luas_segitiga(float alas, float tinggi);
- int jumlah_bil(int x, int y, int z);
Apabila suatu function tidak mengembalikan nilai, maka
returned_value_data_type nya diisi void.
Setelah prototype function dibuat, selanjutnya membuat function tersebut secara detail. Suatu function disebut juga subprogram, oleh karena itu strukturnya juga sama dengan struktur program utama. Pada contoh function garis() di atas, detail
dari function tersebut adalah:
tipe_data param1, tipe_data param2, ...
Contoh penulisan prototype function:
- double kuadrat(int x);
- float luas_segitiga(float alas, float tinggi);
- int jumlah_bil(int x, int y, int z);
Apabila suatu function tidak mengembalikan nilai, maka
returned_value_data_type nya diisi void.
Setelah prototype function dibuat, selanjutnya membuat function tersebut secara detail. Suatu function disebut juga subprogram, oleh karena itu strukturnya juga sama dengan struktur program utama. Pada contoh function garis() di atas, detail
dari function tersebut adalah:
DEFINISI FUNGSI
Fungsi adalah modul progam yang
memberikan/mengembalikan(return) sebuah nilai yang bertipe
sederhana(integer,Boolean,dan string).
Struktur Fungsi sama dengan struktur algoritma yang sudah
anda kenal ada bagian header yang berisi nama fungsi dan spesifikasi
fungsi,bagian deklarasi dan badan fungsi
Ada 2 Jenis Fungsi,
Fungsi yang mempunyai nilai kembalian (return value)
Seperti kita ketika menulis fungsi matematika y=f(x), kita
mempunyai sebuah fungsi dengan nama x yang memproses x untuk menghasilkan suatu
nilai yang isinya akan disimpan oleh y. Ketika dipanggil fungsi jenis ini
akan memberikan suatu hasil kembalian.
2. Fungsi yang tidak mempunya nilai kembalian.
Sering disebut sebagai prosedur. Berisi urutan proses yang
tidak memberikan suatu ouput yang dapat ditangkap oleh suatu variable.
Struktur umum:
Tipe_kembalian nama_fungsi ( argumen1, argumen2, … )
{
statement – statement;
return value;
}
Deklarasi dari fungsi ditulis tanpa dengan menyebutkan
argumen-argumen fungsinya. Sebenarnya argumen-argumen dari fungsi dan tipe
datanya dapat juga dituliskan. Deklarasi seperti ini disebut dengan prototype fungsi.
Suatu fungsi yang
memberikan hasil balik (return value) selain integer perlu
dideklarasikan sebelum digunakan. Deklarasi fungsi ditulis sebelum
fungsi tersebut digunakan. Akan tetapi sebaiknya setiap fungsi dideklarasikan
terlebih dahulu
Deklarasi Fungsi:
tipe nama_fungsi( argumen1, argumen2, … ); // (Tanpa
ada badan fungsi atau statement)
Jika suatu fungsi memberikan kembalian suatu nilai, maka
nilai hasil balik yang diberikan oleh fungsi dapat dilakukan oleh statement return yang diikuti oleh nilai hasil baliknya yang
ditulis tanda kurung. Contoh : return(F);
Semua pengenal
(identifiers) di C harus dideklarasikan sebelum digunakan. Hal ini berlaku
untuk fungsi serta variabel.Untuk fungsi deklarasi perlu sebelum panggilan
pertama dari fungsi tersebut dilakukan.Sebuah deklarasi penuh termasuk tipe
return (return type) dan nomor (jumlah) serta jenis argumen. Ini disebut
prototipe fungsi
Sebagai contoh
Fungsi untuk menentukan apakah sebuah bilangan bulat merupakan bilangan genap
atau ganjil
FUNGSI
Function GENAP( input
n: integer )-àboolean
{Mengembalikan nilai
true jika n adalah bilangan genap,false jika sebaliknya
Progam Pemanggil
Algoritma
Genap_Ganjil
Deklarasi
Bil:Integer
Function GENAP
(input n:integer)à
Boolean
{mengembalikan nilai
true jika n adalah bilangan genap false jika sebaliknya }
Deskripsi
Read(bil)
If GENAP (bil) then
Write(n, ‘adalah bilangan genap’
)
Else
Write (n, ‘ adalah bilangan
ganjil)
Endif
Tambahan: Versi yang lebih lama dari bahasa C tidak memiliki
prototipe, deklarasi fungsi hanya ditentukan jenis return (return type) dan
tidak mencantumkan jenis argumen. Setelah prototipe tersedia, sebelum
penggunaan pertama dari fungsi,memungkinkan compiler untuk memeriksa bahwa
jumlah yang benar dan jenis argumen yang digunakan dalam panggilan fungsi dan
nilai kembalian (return value), jika ada, yang digunakan sudah cukup.Definisi
fungsi itu sendiri dapat bertindak sebagai deklarasi fungsi implisit. Ini
digunakan dalam contoh di atas dan mengapa jumlah dimasukkan sebelum main
(fungsi utaman). Jika order terbalik compiler tidak akan mengakui jumlah
sebagai fungsi. Untuk memperbaiki ini, prototipe dapat ditambahkan sebelum main
(fungsi utama).
FUNGSI TANPA
NILAI BALIK(Void)
Bahasa pemrograman C++ harus memiliki fungsi
(funtion), minimal satu fungsi yaitu fungsi main(). Dalam C++, program
merupakan kumpulan dari fungsi-fungsi, baik itu fungsi yang didefenisikan
secara langsung dalam program maupun fungsi yang disimpan dalam suatu file
header.
C++ mempunyai fungi utama yang disebut fungsi main ( ). Fungsi utama ini selalu ada dalam setiap program C++ dan compiler akan menjalankan program melalui perintah-perintah yang terdapat dalam fungsi ini.
Fungsi merupakan subprogram yang berguna untuk membuat program dapat menjadi medular sehingga akan lebih mudah dipahami dan dapat digunakan kembali, baik untuk program itu sendiri maupun untuk program lain yang memiliki proses yang sama.
C++ mempunyai fungi utama yang disebut fungsi main ( ). Fungsi utama ini selalu ada dalam setiap program C++ dan compiler akan menjalankan program melalui perintah-perintah yang terdapat dalam fungsi ini.
Fungsi merupakan subprogram yang berguna untuk membuat program dapat menjadi medular sehingga akan lebih mudah dipahami dan dapat digunakan kembali, baik untuk program itu sendiri maupun untuk program lain yang memiliki proses yang sama.
-Tanpa Nilai Balik,
Dalam pemrograman C++ bukanlah bahasa prosedural, karena prosedur tidak mempunyai nilai balik. Untuk melakukan hal ini di dalam C++, maka harus membuat suatu fungsi dengan tipe void, yang berarti tidak memiliki nilai balik (return value). contoh:
void nama_fungsi (parameter)
{
Pernyataan_yang_akan_dilakukan;
……………
}
Dalam pemrograman C++ bukanlah bahasa prosedural, karena prosedur tidak mempunyai nilai balik. Untuk melakukan hal ini di dalam C++, maka harus membuat suatu fungsi dengan tipe void, yang berarti tidak memiliki nilai balik (return value). contoh:
void nama_fungsi (parameter)
{
Pernyataan_yang_akan_dilakukan;
……………
}
Ciri-ciri dari jenis fungsi
Void(Tanpa Nilai Balik) adalah sebagai berikut:
o
Tidak adanya keyword return.
o
Tidak adanya tipe data di dalam
deklarasi fungsi.
o
Menggunakan keyword void.
o
Tidak dapat langsung
ditampilkan hasilnya.
o
Tidak memiliki nilai kembalian
fungsi
o
Keyword
void juga digunakan jika suatu function tidak mengandung suatu parameter
apapun.
o
Void : void tampilkan_jml (int a, int b)
Contoh Penggunaan Void Dalam Progam
#include<iostream.h>
void tampilkan() // argumen kosong
{
cout<<"Terima Kasih telah mengunjungi blog saya"<<endl;
cout<<"Bla...Blaa..Bla.."<<endl;
cout<<"\t Silahkan tinggalkan komentar anda"<<endl;
}
void tampilkan() // argumen kosong
{
cout<<"Terima Kasih telah mengunjungi blog saya"<<endl;
cout<<"Bla...Blaa..Bla.."<<endl;
cout<<"\t Silahkan tinggalkan komentar anda"<<endl;
}
Lingkup Variabel
Pemahaman terhadap lingkup variable didalam penulisan fungsi
sangatlah penting, agar tidak salah dalam menggunakan suatu variable. Lingkup
variable menentukan keberadaan suatu variable tertentu didalam fungsi. Ada
variable yang hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain.
Namun ada juga variable yang dapat di akses oleh semua fungsi.
Jenis variable berdasarkan kelas penyimpanannya, yaitu :
v Variabel otomatis.
v Variable eksternal.
v Variable statis.
Variabel Otomatis.
Variabel yang didefinisikan didalam suatu fungsi berlaku
sebagai variabel lokal bagi fungsi. Artinya, variable tesebut hanya dikenal
didalam fungsi tempat variable didefinisikan.
/*…….Contoh untuk memperlihatkan efek variabel……….*/
/*…….otomatis (lokal)…………………………….*/
#include<iostream.h>
#include<conio.h>
void alpha(); //prototipe fungsi
void main()
{
int x = 22; //variable lokal pada main()
double y = 2.22; //begitu juga pada variable ini
clrscr();
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
alpha(); //panggil variable alpha
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
}
//definisi fungsi alpha()
void alpha()
{
int x = 20; //variable lokal pada main()
double y=3.14; //begitu juga pada variable ini
cout<<”Pada main(): x =”<<x
<<”y =”<< y <<endl;
}
Variable Eksternal.
Varibel eksternal merupakan kebalikan dari variable
otomatis. Variable eksternal adalah varibel yang didefinisikan diluar fungsi
manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini
dikenal di semua fungsi.
Guna memperjelas bahwa suatu variable didalam suatu fungsi
merupakan variable eksternal, didalam fungsi yang menggunakannya, kita dapat
mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori)
dengan menambahkan kata kunci extern didepan tipe data. Kata kunci
menyatakan bahwa variable tersebut didefinisikan di tempat lain.
/*……….Contoh variable eksternal………………*/
#include<iostream.h>
#include<conio.h>
int oblada = 550; //variable eksternal
void tambah(); //prototipe fungsi
void main()
{
clrscr(); //hapus layar
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
}
//definisi fungsi
void tambah()
{
oblada++; //variable eksternal dinaikkan
}
Variabel Statis.
Baik variable eksternal maupun otomatis dapat berkedudukan
sebagai variable statis. Suatu variable statis mempunyai sifat :
o Jika variable lokal berdiri sebagai variable statis,
maka :
ü Variabel tetap hanya dapat diakses pada fungsi yang
mendefinisikannya .
ü Variabel tidak hilang saat eksekusi fungsi berakhir.
Nilai akan tetap dipertahankan, sehingga akan dikenali pada pemanggilan fungsi
untuk tahap berikutnya.
ü Inisialisasi oleh pemrogram akan dilakukan sekali
saja selama program dijankan. Jika tidak ada inisialisasi secara eksplisit,
variable diisi dengan nol.
o Jika variable eksternal dijadikan sebagai variable
statis, variable ini dapat di akses oleh semua file yang didefinisikan pada
file yang sama dengan variable eksternal tesebut (hal ini bermanfaat pada
pemrogram file berganda atau kode program dituh pada beberapa file).
o Variable statis diperoleh dengan menamahkan kata
kunci static didepan tipe variable pada pernyataan pendefinisian.
/*………Contoh untuk menunjukkan efek…………….*/
/*…………….varible statis……………………*/
#include<iostream.h>
#include<conio.h>
void saya_ingat(); //prototipe fungsi
void main()
{
int mamamia = 50;
clrscr(); //hapus layar
saya_ingat();
saya_ingat();
saya_ingat();
cout<<”main() : mamamia
=”<<mamamia<<endl;
}
//pada fungsi berikut
//mamamia didefinisikan sebagai variabel statis
void saya_ingat()
{
static int mamamia = 77; //variable statis
mamamia++; //naikkan sebesar 1
cout<<”saya_ingat(): mamamia
=”<<mamamia<<endl;
}
Argumen Fungsi
Argumen Fungsi adalah nilai bawaan yang akan disertakan saat pemanggilan
fungsi
Inline Function
Fungsi digunakan di dalam program diantaranya adalah untuk
membentuk program yang terstruktur. Namun pemakaian fungsi kadang-kadang
berlebihan. Sebab argumen-argumen fungsi harus diletakkan didalam stack pada
saat pemanggilan fungsi. Kemudian pada saat fungsi berakhir, argumen-argumen
yang ada padastack perlu dikosongkan lagi. Sebagai akibat akan
memperlambat eksekusi, terutama kalau fungsi sering dipanggil (misalnya pada
pengulangan proses dengan while ).
Masalah seperti itu diatasi oleh C++ dengan menggunakan inline
function. Sebuah inline function dibentuk dengan cukup menyisipkan
kata kunci inline didepan tipe nilai balik fungsi dalam pendefisian
fungsi.
Inline function disarankan dipakai pada fungsi yang
sering dipanggil dan ukurannya kecil (terdiri satu atau dua pernyataan).
Terutama jika dilibatkan pada pernyataan pengulangan proses (while, for dan do-while).
/*……Contoh pembuatan fungsi inline…………..*/
#include<iostream.h>
#include<conio.h>
//definisi fungsi sebagai inline
inline int jumlah(int x,int y)
{
return(x + y);
}
void main ()
{
clrscr();
for (int i = 1; i <100; i++)
cout << i <<”.” << jumlah(i, 2*i) <<
endl;
}
Nilai Bawaan Untuk Argumen
Fungsi
Salah satu keistimewaan C++ yang sangat bermanfaat dalam
pemrograman adalah adanya kemampuan untuk menyetel nilai bawaan (default)
argumen fungsi. Argumen-argumen yang mempunyai nilai bawaan nantinya dapat
tidak disertakan didalam pemanggilan fungsi dan dengan sendirinya C++ akan
menggunakan nilai bawaan dari argumen yang tidak disertakan.Sebagai contoh liat
dua contoh progam di bawah ini:
Contoh 1
void tulis_cplus (int jum)
{
for (int i=0;i<jum;i++)</jum;i++)
cout<<”C++”<<endl;</endl;
cout<<”Selesai”;
}
Fungsi diatas akan menampilkan tulisan C++ sebanyak jum
kali. Setelah menampilkan tulisan tersebut, fungsi akan menampilkan tulisan
“Selesai”. Jika mau menampilkan tulisan C++ sepuluh kali, pemanggilamnya
berupa:
tulis_cplus(10);
Kalau hanya mau menampilkan sebuah tulisan C++, pemanggilanya
berupa:
tulis_cplus(1);
Contoh 2
/*…..Contoh mengatur nilai bawaan terhadap argumen……..*/
/* pada fungsi yang memiliki dua buah program */
#include<iostream.h>
#include<conio.h>
//prototipe fungsi dan penyetelan nilai bawaan
//pada argumen ke dua
void ulang(char karakter =’-',int jum =10);
void main()
{
ulang(‘*’,5); //tampilkan * sebanyak 5 kali
ulang(‘+’); //tampilkan + sebanyak 10 kali
ulang(); //tampilkan – sebanyak 10 kali
}
//definisi fungsi
void ulang(char karakter,int jum)
{
for (int i = 0;i<jum; i++)
cout<<karakter;
cout<<endl;
}
Argumen By Value
Jika sebelumnya membahas Argumen Fungsi kali ini membahas
Argumen by Value yaitu Argumen yang ditentukan oleh nilai sebagai contoh kita
mengambil konversi dari string ke angka atau sebaliknya
Membalik string dengan strrev()
//* contoh pemakaian strrev() untuk membalikstring
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char kompiler[ ] = “Borland C++”;
clrscr();
strrev(kompiler);
cout<< kompiler<<endl;
}
Contoh menyalin string dengan strcpy()
//* contoh pemakaian strrev() untuk membalikstring
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char teks[ ] = “C++ ok”;
char data[25];
clrscr();
strcpy(data, teks);
cout<<”isi data : “<< data<<endl;
}
Function Overloading
Function Overloading terjadi sewaktu anda mendefisinikan
kembali fungsi dengan sedemikian rupa sehingga fungsi itu bisa dipakai dalam
beberapa versi di dalam satu program. Dalam bahasa C dua fungsi tidak bisa
nemiliki scope yang sama. Dengan konsep function overloading itu C++ bisa
mengatasi problem yang ada di bahasa C.
Function overloading atau overloading terhadap fungsi
merupakan kemampuan C++ yang memungkinkan sebuah fungsi dapat menerima
bermacam-macam tipe dan mamberikan nilai balik yang bervariasi pula. Ada
beberapa alasan mengapa dilakukan funtion overloading:
· karena fungsi tertentu memiliki tugas generik (bisa
dipakai dimana mana) tapi pemakaian lainnya memerlukan sedikit perubahan.
· karena kita menginginkan hasil yang sama dari nilai
data yang bisa disajikan dalam berbagai format.
/*………contoh overloading terhadap fungsi…….*/
#include<iostream.h>
#include<conio.h>
//prototipe fungsi
int kuadrat (int i);
long kuadrat (long l);
double kuadrat (double d);
void main()
{
cout<<kuadrat(2)<<endl;
cout<<kuadrat(66666)<<endl;
cout<<kuadrat(1.2)<<endl;
}
//definisi fungsi
int kuadrat(int i)
{
return (i*i);
}
long kuadrat (long l)
{
return (l*l);
}
double kuadrat(double d)
{
return(d*d);
}
Contoh lain:
/*……Contoh overloading terhadap fungsi dengan…..*/
/*………jumlah argumen berlainan……………….*/
#include<iostream.h>
#include<conio.h>
void tampil(int i);
void tampil(int i,char *str);
void main()
{
clrscr();
tampil(5);
tampil(7,”Bintang”);
}
void tampil(int i)
{
cout<<i<<endl;
}
void tampil(int i,char * str)
{
cout<<i<<’ ‘<<str<<endl;
}
Rekursi
Rekursi adalah suatu proses dari fungsi yang memanggil
dirinya sendiri.Fungsi yang seperti ini disebut fungsi rekursif.Dalam fungsi
rekursif pemanggilan dapat terjadi berulang kali,Karena ada proses yang
berulang-ulang maka harus ada suatu kondisi yang mengakhiri prosesnya Jika
tidak maka proses tidak akan pernah berhenti sampai memori penuh.Pemecahan
masalah dengan pendekatan rekursif dapat dilakukan jika masalah tersebut dapat
didefinisikan secara rekursif yaitu masalah dapat diuraikan menjadi masalah
yang lebih sederhana.
Sebagai contoh :
2 pangkat 3
2 pangkat 1 = 2
2 pangkat 2 = 2 x
2 =
2 pangkat 1 x 2
2 pangkat 3 = 2 x 2 x
2 =
2 pangkat 2 x 2
berdasarkan contoh di atas, kita dapat menentukan
base case dan relative casenya. yang antara lain :
Base Case : x pangkat 1 = x
Relative Case : x pangkat n = x * x pangkat
(n-1)
kalau diterapkan dalam program
kalau diterapkan dalam program
int pangkat (int x,int n)
{
if(n==1)
return (x);
else
return(x * Pangkat(x,n-1);
}
setelah menulis program di atas,
kita tinggal mengambilnya dan memasukkannya ke dalam
void main, seperti
void main()
{
int x,y;
int x,y;
cout<<”Menghitung x pangkat y “<<endl;
cout<<”X : “;
cin >> x;
cout<<”Y : “;
cin >> y;
cout<<x<<”Pangkat”<<y<<”=”<<Pangkat(x,y)<<endl;
}
Fungsi Dengan jumlah Argumen
bervariasi
Fungsi dengan Argumen bervariasi pada kali ini membahas
tipe-tipe argument apa saja yang digunakan Sebagai contoh pada
Pengiriman Data
Konstanta ke Fungsi
Mengirimkan data konstanta ke fungsi lain dapat dilakukan
dengan cara mudah dapat dilihat dari progam berikut
Pengiriman Data
Variabel ke Fungsi
Bentuk Pengiriman data variable ke
fungsi sama halnya dengan pengiriman suatu nilai data ke konstanta ke suatu
fungsi hanya saja nilai yang dikirimkan tersebut selalu berubah-ubah.Bentuk
Pengiriman tersebut dapat dilihat dengan progam berikut.
Afrian
Anggara Putra 12410200080
Daftar Pustaka
Buku Algoritma & Pemrograman Dalam Bahasa
Pascal dan C Rinaldi Munir
No comments:
Post a Comment