Pada artikel Pascal - Pemrograman Mudah Untuk Pemula pernah disinggung mengenai prosedur dan fungsi. Pada artikel itu juga dijelaskan sedikit pemahaman tentang prosedur dan fungsi. Masih ingat? Waktu itu saya katakan bahwa fungsi di Pascal mirip seperti fungsi di Matematika. Jadi yang kurang jago Matematika gak akan ngerti fungsi ya? Tentu saja bisa. Hanya sepintas mirip saja dengan fungsi di Matematika. Tapi, ya berbeda.
Lalu, Apa itu fungsi dan prosedur? Fungsi dan prosedur adalah kumpulan perintah yang perlu dideklarasikan sekali, dan kemudian dapat digunakan berulang-ulang di program utama tanpa perlu menulis ulang perintah-perintahnya. Got it? Nanti kamu akan mencobanya.
Dulu, waktu pertama kali kenal fungsi, saya bertanya-tanya begini, Lalu, buat apa ada fungsi kalau perintah-perintah dalam fungsi sebenarnya bisa dituliskan di dalam program utama?
Kalau untuk sekarang, memang belum terasa manfaatnya. Tapi, suatu saat kamu membuat program besar atau aplikasi besar dimana pasti akan ada kumpulan perintah dengan tugas/fungsi tertentu yang berulang-ulang. Tentu saja tidak efektif jika kumpulan perintah yang sama kita tulis ulang, padahal fungsi atau tugas kumpulan itu sama saja, hanya berbeda posisi.
Manfaat lainnya dari fungsi adalah menyusun program secara terstruktur. Saat kamu membuat program sampai berbaris-baris kode. Terkadang untuk membaca kembali apa sudah kamu tulis terasa sulit dan membutuhkan waktu. Misalnya saja kamu mau mencari kode di baris berapa yang mengatur percabangan ini atau itu, karena kamu mau merubahnya. Nah, dari banyak baris kode itu kamu harus mencarinya. Supaya lebih efisien, ubah program itu menjadi lebih terstruktur. Bagian yang mengatur pengecekan string, perulangan yang bercabang-cabang pula, masing-masing dapat kamu uraikan dengan membuat fungsi.
Jadi, kesimpulan dari manfaat fungsi itu adalah 2 kata yang di-bold dan berwarna merah pada 2 paragraf diatas. Fungsi juga menjadi alasan kenapa Pascal dikatakan terstruktur.
Kok, daritadi Fungsi mulu. Prosedur itu apa?
Karena memang yang paling utama dan umum pada bahasa pemrograman adalah fungsi. Bedanya adalah, setelah menjalankan perintah-perintah di dalam fungsi akan ada pengembalian nilai. Mungkin masih kurang dimengerti kalau belum sering latihan. Prosedur sama dengan fungsi hanya saja tidak ada pengembalian nilai. Seteah kamu mencoba nanti, kamu akan melihat perbedaannya.
Sekedar info, pada bahasa pemrograman lain, tidak ada namanya prosedur. Pada bahasa lain, prosedur itu sama saja dengan fungsi yang mengembalikan nilai kosong atau 0.
Nah, saatnya latihan tiba. Kita akan membuat program sederhana, yaitu program penghitung luas dan keliling bangun datar. Buat program baru bernama geometri.pas. Tulis kode dibawah ini. Tulis lho.... Bukan copy-paste! Semakin sering kamu menulis, semakin kamu mengerti dan ahli.
uses wincrt;
var
panjang, lebar : integer;
procedure intro;
begin
writeln; writeln;
writeln('Hai, aku Pascal!');
writeln('Aku butuh bantuanmu.');
writeln('Aku sedang membuat kandang burung.');
writeln('Aku butuh papan segiempat');
writeln('Jika kamu punya. Beritahu aku.');
end;
procedure input;
begin
write('Berapa panjang papannya (satuan meter)? '); readln(panjang);
write('Berapa lebar papannya (satuan meter)? '); readln(lebar);
end;
function luas (a, b : integer) : integer;
begin
luas := a * b;
end;
function keliling : integer;
begin
keliling := 2 * (panjang + lebar);
end;
BEGIN
intro;
writeln;
writeln('Tentang papan persegi milikmu.....');
input;
writeln;
writeln('Hmm... kalau aku hitung-hitung.');
writeln('Luas papanmu adalah ',luas(panjang, lebar),' meter persegi.');
writeln('Dan keliling papanmu adalah ',keliling,' meter.');
writeln('Terima kasih. Aku membutuhkannya.');
readln;
END.
var
panjang, lebar : integer;
procedure intro;
begin
writeln; writeln;
writeln('Hai, aku Pascal!');
writeln('Aku butuh bantuanmu.');
writeln('Aku sedang membuat kandang burung.');
writeln('Aku butuh papan segiempat');
writeln('Jika kamu punya. Beritahu aku.');
end;
procedure input;
begin
write('Berapa panjang papannya (satuan meter)? '); readln(panjang);
write('Berapa lebar papannya (satuan meter)? '); readln(lebar);
end;
function luas (a, b : integer) : integer;
begin
luas := a * b;
end;
function keliling : integer;
begin
keliling := 2 * (panjang + lebar);
end;
BEGIN
intro;
writeln;
writeln('Tentang papan persegi milikmu.....');
input;
writeln;
writeln('Hmm... kalau aku hitung-hitung.');
writeln('Luas papanmu adalah ',luas(panjang, lebar),' meter persegi.');
writeln('Dan keliling papanmu adalah ',keliling,' meter.');
writeln('Terima kasih. Aku membutuhkannya.');
readln;
END.
Sudah dicoba? Kalau gagal, periksa kembali tulisan mu. Coba lihat artikel Kenalan dengan Pascal - Input dan Output tentang kemungkinan kesalahan yang terjadi pada penulisan program Pascal. Sudah lihat bedanya prosedur dan fungsi?
Mari kita rinci hal-hal baru pada program diatas.
- Dari BEGIN ke END adalah program utama. Seperti variabel, sebelum digunakan prosedur dan fungsi harus dideklarasikan apa-apa saja perintahnya. Pendeklarasian terjadi sebelum program utama dan sesudah pendeklarasian variabel.
- Masing-masing fungsi dan prosedur bisa diberi nama. Nama itu berguna untuk memanggil fungsi/prosedur pada program utama. Coba lihat pada fungsi luas dan keliling. Kamu bisa lihat nama dari fungsi itu diberikan nilai, seperti luas := a * b dan keliling := 2 * (panjang + lebar). Itulah bagian dimana fungsi mengembalikan nilai nantinya.
- Fungsi itu mirip seperti variabel. Variabel hanya bisa dimasukan nilai, tapi fungsi bisa menjalankan perintah-peritah tertentu dan kemudian memiliki nilai. Oleh karena itu, pada nama fungsi, disertai juga tipe data, seperti pada function luas (a, b : integer) : integer. Lihat integer yang di bold berwarna merah, itu adalah penentuan tipe data dari fungsi luas.
- Bedakan dengan prosedur yang tidak mengembalikan nilai apa-apa. Prosedur hanya menjalankan kumpulan-kumpulan perintah.
- Coba kamu perhatikan fungsi luas dan keliling. Ada perbedaan? Saya sengaja membuat perbedaan itu supaya kamu dapat mengetahui variasi menulis fungsi. Pada fungsi luas, terdapat yang disebut parameter. Lihat, function luas (a, b : integer) : integer. Bagian berwarna merah disebut parameter. Pengertian mudahnya, parameter adalah pengambilan nilai. Coba lihat saat fungsi luas dipanggil, luas(panjang, lebar). Nah, sudah bisa menebak? Nilai a akan sama dengan nilai panjang, dan nilai b akan sama dengan nilai lebar. Seandainya kamu ganti seperti ini, luas(10, 12). Nilai a akan sama dengan 10 dan nilai b akan sama dengan 12. Got it?
- Kenapa fungsi keliling tidak menggunakan parameter? Manfaat menggunakan parameter, nilai asli variabel yang berhubungan tidak akan berganti nilai oleh karena menjalankan fungsi. Pada fungsi luas, variabel yang berhubungan adalah variabel panjang dan lebar. Terkadang, pada fungsi tertentu, nilai variabel itu perlu diubah-ubah, padahal kita masih butuh nilai aslinya. Oleh karena itu, variabel itu digantikan dengan variabel dalam parameter dengan mengambil nilai dari variabel panjang dan lebar. Tapi, jika tidak masalah menggunakan variabel aslinya, ya tidak perlu ada parameter.
- Terakhir, mengenai pemanggilan fungsi/prosedur. Memanggil fungsi/prosedur hanya tinggal menuliskan nama fungsi/prosedur itu. Oh iya, kamu bisa lho memanggil fungsi untuk mengisi nilai variabel, seperti ini: nilai := fungsi(3, 4); Variabel nilai nanti akan bernilai hasil dari pengembalian nilai fungsi.
Got it, brother?
Sekarang, kita coba yang lebih menantang. Pada program tadi, fungsi itu dipanggil di program utama. Tapi, bagaimana jika sebuah fungsi memanggil fungsinya sendiri dan terjadi berulang-ulang sampai kondisi tertentu. Terdengar agak rumit ya. Pola fungsi memanggil fungsinya sendiri disebut Rekursi. Mau coba? Yuk, supaya mudah, coba pahami konsepnya dulu.
Buat program bernama faktorial.pas. Tulis kode berikut:
uses wincrt;
var
angka : integer;
function faktorial (n : integer) : longint;
begin
if n > 1 then
begin
faktorial := n * faktorial(n - 1);
end else
faktorial := 1;
end;
BEGIN
write('Masukan angka: '); readln(angka);
writeln('Faktorial ',angka,' = ',faktorial(angka));
readln;
END.
var
angka : integer;
function faktorial (n : integer) : longint;
begin
if n > 1 then
begin
faktorial := n * faktorial(n - 1);
end else
faktorial := 1;
end;
BEGIN
write('Masukan angka: '); readln(angka);
writeln('Faktorial ',angka,' = ',faktorial(angka));
readln;
END.
Huh.... Gimana paham? Kamu harus sudah mengerti apa itu percabangan (Pascal - Mengenal Percababangan Operasi IF) dan tentang tipe data (Pascal - Apa itu variabel dan tipe data?). Agak sulit menjelaskannya. Tapi, saya akan coba. Begini alurnya:
- Kita memasukan (input) nilai pada variabel angka.
- Output writeln memanggil fungsi faktorial dengan memasukan nilai variabel angka sebagai parameter dan akan sama nilainya dengan variabel n.
- Misal nilai angka adalah 5, maka n juga 5.
- Mulai fungsi faktorial(5).
- Masuk ke percabangan fungsi faktorial. Program menjalankan cabang yang pertama, karena nilai n adalah 5 dan 5 nilainya lebih dari 1. Kemudian, fungsi faktorial mengembalikan nilai senilai 5 * faktorial(5 - 1). Artinya adalah 5 * faktorial(4).
- Fungsi faktorial dipanggil lagi. Kali ini dengan nilai n sama dengan 4. Program menjalankan cabang pertama lagi, karena nilai n masih lebih dari 1. Kemudian, fungsi faktorial mengembalikan nilai lagi senilai 4 * faktorial(4 - 1), yang artinya 4 * faktorial(3).
- Begitu seterusnya, fungsi faktorial dipanggil terus dengan nilai parameternya yang semakin berkurang.
- Hingga akhirnya pada saat nilai n sama dengan 2, fungsi faktorial akan mengembalikan nilai senilai 2 * faktorial(2 - 1), yang berarti 2 * faktorial(1).
- faktorial(1) dipanggil. Kali ini masuk ke cabang 2, karena nilai n tidak lebih dari 1, melainkan sama dengan 1. Kemudian, fungsi faktorial mengembalikan nilai 1.
- Apa kesimpulannya? Fungsi ini akan membentuk pola perkalian yang dalam Matematika disebut faktorial. Fungsi faktorial(5), menghasilkan: 5 x 4 x 3 x 2 x 1 = 120.
Got it, brother?
Seru ya! Hehehe......
Sampai disini dulu kita latihan. Oh iya, prosedur juga bisa memanggil fungsinya sendiri lho, tapi tanpa pengembalian nilai. Nah lho, gimana tuh? Silahkan sobat bereksperimen sendiri. Maaf, artikel kali ini belum ada final program. Sebagai gantinya, saya akan berikan kamu sebuah fakta, bahwa"
"Rasa ingin tahu adalah kekuatan hebat yang mendorong eksperimen dan yang menghasilkan pengetahuan. Rasa ingin tahu adalah hal penting meraih kesuksesan."





