Anda di halaman 1dari 54

Prosedur dan Fungsi

Ledy Elsera Astrianty, S.Kom., M.Kom


Pemrograman Modular

■ Program dengan ukuran kode yang besar relatif sulit untuk


ditangani, dipahami, dan dilacak kesalahannya. Karenanya
program sebaiknya dipecah menjadi beberapa
subprogram yang lebih kecil, setiap sub-program
menangani tugasnya masing-masing. Teknik pemrograman
seperti ini disebut Pemrograman Modular.
■ Terdapat 2 bentuk subprogram yakni prosedur dan
fungsi.
Manfaat Modularisasi

■ Berkaitan dengan aktivitas yang dilakukan lebih dari satu kali


didalam algoritme, modularisasi menghindari penulisan teks
program yang sama berulangkali.
■ Modularisasi program membuat proses pemrograman
fleksibel. Persoalan dipecah menjadi beberapa persoalan yang
lebih kecil yang ditulis kedalam modul yang spesifik dan
dikerjakan oleh programer yang berbeda. (Berbagi tugas)
■ Kemudahan dalam melacak kesalahan dalam program
(debug)
Prosedur
Perhitungan luas bangun datar

17

13 19

27

Bagaimana programnya ?
Solusi 1: tanpa prosedur
Solusi 2: dengan prosedur
Konsep Prosedur

■ Kata “Prosedur” sering kita dengar dalam


kehidupan sehari-hari. Seorang mahasiswa
misalnya, setiap awal semester selalu melakukan
pendaftaran ulang (registrasi). Pihak kampus
telah mengumumkan langkah-langkah
pendaftaran ulang yang dinyatakan sebagai
prosedur daftar ulang.
■ Ketika sebuah prosedur dijalankan, maka
instruksi-instruksi di dalamnya dikerjakan satu
per satu. Pada kasus registrasi mahasiswa,
mahasiswalah yang menjalankan prosedur daftar
ulang.
Konsep dan Definisi Prosedur

■ Pada dasarnya struktur prosedur sama dengan struktur program biasa


yaitu ada bagian judul (header) yang terdiri atas nama prosedur, bagian
deklarasi untuk mendefinisikan nama peubah, nama tipe dan konstanta
dan bagian algoritma yang merupakan badan (body) prosedur.
■ Setiap prosedur mempunyai nama yang unik. Nama prosedur sebaiknya
diawali dengan kata kerja aktif karena prosedur berisi aktivitas
melakukan sesuatu, misalkan HitungLuas, Tukar, CariMaks, Inisialisasi, dll.
Contoh mendefinisikan Prosedur
Pemanggilan Prosedur
Prosedur bukan program yang berdiri sendiri, jadi ia tidak dapat dieksekusi secara
langsung. Ini berarti, instruksi-instruksi di dalam prosedur dapat dilaksanakan hanya
bila prosedur tersebut diakses. Prosedur diakses dengan cara memanggil namanya
dari program pemanggil (misalnya dari program utama atau dari modul program
lainnya).
Nama Lokal
Nama-nama (konstanta, peubah, tipe, dan lain-lain) yang dideklarasikan
di dalam prosedur (termasuk parameter, jika ada) hanya “dikenal” di
dalam badan prosedur yang bersangkutan. Nama_x0002_nama yang
dideklarasikan di dalam prosedur tersebut dikatakan lingkupnya “lokal”.
Nama-nama lokal hanya berlaku di dalam prosedur yang melingkupinya
saja.

Nama Lokal :
◼ Nama-nama di bagian deklarasi prosedur.
◼ Bersifat lokal, hanya dapat digunakan di dalam
prosedur yang melingkupinya.
Nama Global
■ Sebaliknya nama-nama yang dideklarasikan di dalam program utama
dikatakan lingkupnya “global”. Nama-nama global dapat digunakan dibagian
manapun di dalam program baik di dalam program utama maupun di dalam
prosedur yang dipanggil.
■ Keputusan apakah suatu peubah akan dideklarasikan secara global atau
lokal berggantung pada penggunaan nama tersebut. Bila suatu peubah
digunakan di seluruh bagian program, maka peubah tersebut harus
dideklarasikan secara global.

Nama Global :
◼ Nama-nama yang dideklarasikan di program utama.
◼ Bersifat global, dapat digunakan di bagian manapun dalam
program, baik di program utama maupun di prosedur.
Nama Lokal dan Nama Global

Menggunakan Nama Lokal atau Nama Global ?


◼ Jika nama (peubah, tipe, atau tetapan) digunakan
di seluruh bagian program, maka harus
dideklarasikan global.
◼ Jika nama tersebut hanya digunakan di dalam
prosedur, maka sebaiknya dideklarasikan lokal.
◼ Usahakan menggunakan nama global sedikit mungkin!
→ menyulitkan dalam pencarian kesalahan (debugging)
CONTOH NAMA LOKAL DAN
NAMA GLOBAL
CONTOH PROSEDUR TANPA
PARAMETER
Parameter
◼ Kebanyakan program memerlukan pertukaran
informasi antara prosedur (atau fungsi) dan titik di
mana ia dipanggil.
→ Parameter berfungsi sebagai media komunikasi
antara modul dengan program pemanggil.
◼ Tiap item data ditransferkan antara parameter aktual
dan parameter formal.
 Parameter aktual : parameter yang disertakan pada
waktu pemanggilan.
 Parameter formal : parameter yang dideklarasikan di
bagian header prosedur itu sendiri.
Parameter
■ Tiap-tiap parameter aktual berpasangan dengan parameter formal yang
bersesuaian.

■ Aturan yang harus diperhatikan dalam korespondensi satu-satu antara


parameter actual dan parameter formal adalah:

1. Jumlah parameter aktual pada pemanggilan prosedur harus sama


dengan jumlah parameter formal pada deklarasi prosedurnya.

2. Tiap parameter aktual harus bertipe sama dengan tipe parameter


formal yang bersesuaian.
Parameter

■ Parameter masukan adalah parameter yang nilainya berlaku sebagai


masukan untuk prosedur. Pada bahasa pemrograman, istilah
parameter masukan ini sering dinamakan parameter nilai (value
parameter atau parameter by value).

■ Parameter keluaran adalah parameter yang menampung keluaran


yang dihasilkan oleh prosedur,

■ Sedangkan parameter masukan/keluaran adalah parameter yang


berfungsi sebagai masukan sekaligus keluaran bagi prosedur
tersebut.
Contoh Parameter masukan
PROGRAM Segitiga
{Menghitung luas N buah segitiga}

DEKLARASI
I, N: integer
alas, tinggi: real
procedure HitungLuasSegitiga(input alas, tinggi: real)

ALGORITMA
read(N)
for i  1 to N do
read(alas, tinggi)
HitungLuasSegitiga(alas,tinggi)
end for
Contoh Parameter keluaran
PROGRAM Segitiga
{Menghitung luas N buah segitiga}
DEKLARASI
I, N: integer
a,t,L: real
procedure HitungLuasSegitiga(input alas, tinggi: real,
output luas: real)

ALGORITMA
read(N)
for i  1 to N do
read(a,t)
HitungLuasSegitiga(a,t,L)
write(L)
end for
Contoh Parameter
masukan/keluaran
PROGRAM PertukaranNilai
{Menghitung luas N buah segitiga}
DEKLARASI
m,n: integer
procedure Tukar(input/output A,B: integer)

ALGORITMA
m  8
n  5
write(m,n) {cetak nilai m dan n sebelum pertukaran}
Tukar(m,n)
write(m,n)
Konsep dan Definisi Prosedur

■ Parameter (media komunikasi antara


prosedur dengan program
pemanggilnya) : Formal dan Aktual
■ Posisi/letak prosedur dalam program
■ Pemanggilan prosedur
■ Prosedur tidak mengembalikan nilai
Fungsi
Fungsi merupakan suatu program terpisah dalam blok sendiri
yang berfungsi sebagai subprogram (program bagian). Sama
seperti halnya dengan prosedur, namun tetap ada
perbedaannya yaitu fungsi mempunyai pengembalian nilai /
mengembalikan sebuah nilai (memiliki return value) dari tipe
tertentu (tipe dasar atau tipe bentukan)
FORMAT PENULISAN
PROSEDUR & FUNGSI
Perbedaan Prosedur dan
Fungsi
Pada dasarnya tidak ada perbedaan yang begitu signifikan antar
prosedur dan fungsi keduanya merupakan sebuah sub program
yang dapat mengerjakan tugas tertentu, namun jika di cermati
fungsi dideklarasi dengan menggunakan tipe data misalnya int
penjumlahan(), fungsi tersebut wajib harus menghasilkan nilai
balik (return value). Sementara untuk prosedur di deklarasikan
biasanya dengan tipe void tipe void adalah salah satu jenis tipe
data yang tidak berarti apa-apa (Valueless) tipe void biasanya
digunakan untuk prosedur yang pada dasarnya tidak mempunyai
nilai balik. Karena tipe void bersifat valueless.
Rekursi dan Iterasi
Ledy Elsera Astrianty, S.Kom., M.Kom
Review Prosedur

tipe_data (tipe_data parameter1,


tipe_data parameter2, … tipe_data parameterN)
{
Deklarasi variabel lokal;
Badan prosedur;
}
Review Fungsi

tipe_data (tipe_data parameter1,


tipe_data parameter2, … tipe_data parameterN)
{
Deklarasi variabel lokal;
Badan fungsi;
return data;
}
Pemanggilan Prosedur dan Fungsi

public static void main(String[] args){

hitungLuasSegitiga(4.5 , 5);

}
Rekursi

• Rekursif merupakan alat/cara untuk memecahkan masalah


dalam suatu fungsi atau procedure yang memanggil dirinya
sendiri.

• Definisi menurut Niclaus Wirth :


“An object is said be recursive if it partially consist or is
defines in terms of itself”

• Perhitungan matematika ( contoh fungsi factorial dan


bilangan Fibonacci)
Konsep dan Definisi Rekursi

• Sebuah objek dikatakan rekursif (recursive) jika ia didefinisikan


dalam terminologi dirinya sendiri, mekanisme memanggil dirinya
sendiri

• Proses mendefinisikan objek dalam terminologi dirinya sendiri


disebut rekursi (recursion)

• Rekursif melibatkan sebuah prosedur atau fungsi yang memanggil


dirinya sendiri untuk mengulangi proses
Ilustrasi
Syarat Rekursi
Rekursif didefinisikan oleh dua bagian:

Basis Rekurens
Bagian yang berisi nilai fungsi yang Bagian ini mendefinisikan fungsi dalam
terdefinisi secara eksplisit. terminologi dirinya sendiri.

the entity are defined without


reference to the entity
Berisi kaidah untuk menemukan nilai fungsi
Bagian ini juga sekaligus menghentikan pada suatu input dari nilai-nilai lainnya pada
rekursif (dan memberikan sebuah nilai input yang lebih kecil.
yang terdefinisi pada fungsi rekursif).
Factorial

• Fungsi factorial dari bilangan bulat positif n didefinisikan


sebagai berikut:
n!= n.(n-1)! , jika n>1
n!= 1 , jika n=0, 1

• contoh :
3!= 3. 2!
3!= 3. 2. 1!
3!= 3. 2. 1
3!= 6
Factorial

1. int Faktorial(int n)
2. {
3. if ((n == 0) || (n == 1 ))
4. return (1);
5. else
6. return (n * Faktorial(n-1));
7. }

Pada baris 3 dari fungsi diatas, nilai n dicek sama dengan 0 atau 1,
jika ya, maka fungsi mengembalikan nilai 1 {baris 4}, jika tidak,
fungsi mengembalikan nilai n * Faktorial (n -1) {baris 6} disinilah
letak proses rekursif itu, perhatikan fungsi factorial ini memanggil
dirinya sendiri tetapi dengan parameter (n-1)
Fibonacci

• Fungsi lain yang dapat diubah ke bentuk rekursif adalah


perhitungan Fibonacci. Bilangan Fibonacci dapat didefinisikan
sebagai berikut:
fn = fn-1 + fn-2 untuk n > 2
f1 = 1
f2 = 1
Berikut ini adalah barisan bilangan Fibonacci mulai dari n=1
1 1 2 3 5 8 13 21 34
f(6) = f(6-1) + f(6-2)
=5 +3 =8
Algoritma Fibonacci

Function Fibonacci(input n:integer) → integer


Deklarasi Lokal
{tidak ada}
Deskripsi
If (n ==1 || n==2) Then
return (l)
Else
return (Fibonacci(n-1)+Fibonacci(n-2))
Endif
Contoh Fibonacci

• Untuk ukuran n= 4, proses perhitungan Fibonacci dapat


dilakukan sebagai berikut:
f4 = f3+f2
f4 = (f2+f1) + f2
f4 = (1+1) +1
f4 = 3
Penjelasan Fibonacci

• Jika n=0, maka F(0)=0 ……….base case


• Jika n=1, maka F(1)=1 ……….base case
• Jika n>1 berlaku rumus F(n-1) + F(n-2) ……….recursive case
• Jika n=2, maka F(2-1) + F(2-2) = F(1) + F(0) = 1 + 0 = 1 ……….recursive case
• Jika n=3 maka F(3-1) + F(3-2) = F(2) + F(1) =1+1=2
• Jika n=4 maka F(4-1) + F(4-2) = F(3) + F(2) = 2 + 1 = 3

• Hasil deret bilangan Fibonacci adalah: 0,1,1,2,3, dst


Kombinasi

Function Kombinasi (input n, r : integer) → real


Deklarasi
If (n < r) Then
return (0)
Else
return (Faktorial(n)/Faktorial(r)*Faktorial(n-r))
Endif
Permutasi

Function Permutasi (input n, r : integer) → real


Deklarasi
{tidak ada}
Deskripsi
If (n< r) Then
return (0)
Else
return (Faktorial(n) / Faktorial(n-r))
Endif
Latihan

1. Buat program untuk menghitung deret S =


1+2+3+4+5+...+n menggunakan function rekursi

2. Buat program untuk menghitung deret S =


2+4+6+8+10+...+2n menggunakan function rekursi
No.1 deret S=1+2+3+4+5+…+n (Pseudocode)

Function S(input n:integer) → integer


Deklarasi Lokal
{tidak ada}
Deskripsi
If (n==1) Then
return (l)
Else
return (n + S(n-1))
Endif
No.2 deret S=2+4+6+8+10+…+2n
(Pseudocode)

Function S(input n:integer) → integer


Deklarasi Lokal
{tidak ada}
Deskripsi
If (n==1) Then
return (2)
Else
return (2*n + S(n-1))
Endif
No. 1 dalam bhs Java (Sourcecode)

import java.util.Scanner;
public class no1{
static int S(int n){
if (n == 1)
return (1);
else
return (n + S(n-1));
}
public static void main(String[] args){
int n;
Scanner s=new Scanner(System.in);
System.out.print(“Masukkan n: “);
n=s.nextInt();
System.out.println(“Deret S = 1+2+3+4+5+...+n \n”);
System.out.println(“Jumlah deret S = “+S(n));
}
}
No. 2 dalam bhs Java (Sourcecode)

LATIHAN
Silahkan beri penjelasan setiap
baris code
Tujuan Rekursi

Menyederhanakan penulisan program

Menggantikan bentuk iterasi


Pertimbangan Penggunaan Rekursi

Meskipun penulisan program dengan cara rekursif bisa lebih pendek,


namun prosedur atau fungsi rekursif memerlukan:

• Memori yang lebih banyak

• Waktu lebih lama

• Pemborosan (Redundancy) dapat terjadi dalam penyelesaian


masalah secara rekursif.
Pertimbangan Penggunaan Rekursi

Secara umum, gunakan penyelesaian secara rekursif hanya jika:

• Penyelesaian sulit dilaksanakan secara iteratif

• Efisiensi dengan cara rekursif sudah memadai

• Efisiensi bukan masalah dibandingkan dengan kejelasan logika


program
Rekursi atau Riterasi ??

• Rekursi
• Tidak cocok ketika kinerja tinggi diperlukan, karena terjadi
overhead pemanggilan fungsi dalam jumlah yang relatif
besar
• Iterasi
• Cocok diterapkan ketika kinerja aplikasi
harus diterapkan (hanya ada satu kali pemanggilan fungsi)
Definisi Iterasi

Suatu proses perulangan yang dilaksanakan oleh suatu


prosedur atau fungsi atau sub program dengan cara
memasukan secara langsung nilai-nilai argumennya
Rekursi vs Iterasi
int perpangkatanIter(int bil, int pangkat){
int hasil;
hasil = 1;
for(int i = 0; i < pangkat; i++){
hasil *= bil ;
}
int perpangkatanRekur(int bil, int pangkat){ return hasil;
if(pangkat < 1){ }
return 1;
}else{
return bil * perpangkatanRekur(bil,
pangkat-1);
}
}
Rekursi vs Iterasi

int faktorialIter(int bil){


int hasil;
hasil = 1;
for(int i = 0; i < bil; i++){
hasil *= (bil – i); int faktorialRekur(int bil){
} if(bil < 1){
return hasil; return 1;
} }else{
return
}
}
Rekursi vs Iterasi

public static void main(String[] args){


int bil, pangkat;
Scanner s=new Scanner(System.in);
System.out.print("Silahkan masukkan bilangan : “);
bil=s.nextInt();
System.out.print("Silahkan masukkan pangkat : “);
pangkat=s.nextInt();

System.out.println(perpangkatanIter(bil,pangkat));
System.out.println(perpangkatanRekur(bil,pangkat));
System.out.println(faktorialIter(bil));
System.out.println(faktorialRekur(bil));
}

Anda mungkin juga menyukai