Transcript Materi 6

Fungsi dan Prosedur
Yan Puspitarani
Pemrograman Modular
• Memecah persoalan menjadi sub-sub
persoalan yaitu subprogram
• memungkinkan pemrogram memanggil
kembali subprogram yang telah
didefinisikannya setiap kali diperlukan
dalam program tersebut
• Pemrogram tidak perlu mendefinisikan
sekumpulan instruksi berulang-ulang
Ilustrasi
Program Utama
Subprogram 1
Subprogram 2
Subprogram 3
Penyimpanan Subprogram
• Dalam file yang sama dengan program
utama
• Dalam file yang terpisah
Tipe Subprogram
• Prosedur
• Fungsi
Variabel Lokal dan Variabel Global
• Variabel Lokal
– Dideklarasikan dalam subprogram
– Hanya dikenali secara lokal dalam sebuah
subprogram
– tidak dapat dipanggil, diakses dan diubah oleh
subprogram yang lain, bahkan oleh program utama
• Variabel Global
– Dideklarasikan dalam program utama
– dapat dipanggil, diakses dan diubah oleh subprogram
apapun yang terdapat dalam program tersebut
Parameter
•
Parameter formal
– parameter input
– parameter output
– parameter input/output
•
Parameter Aktual
Prosedur
Prosedur
• Sederetan instruksi algoritma yang diberi
nama yang akan melakukan tujuan
tertentu
• Struktur :
– Spesifikasi
– Deklarasi
– Badan Prosedur
Procedure terdefinisi
• Fungsi yang sudah diberikan oleh sistem
dan tinggal dipakai
• Contoh :
– Procedure date
Notasi Algoritma
PROCEDURE <nama_prosedur> (input <daftar parameter
input>, output <daftar parameter output>){parameter
formal}
{I.S.: [kondisi awal]
F.S.: [kondisi akhir/hasil yang diharapkan]}
BEGIN
{sekumpulan instruksi dalam prosedur}
ENDPROCEDURE
Pemanggilan Prosedur
<nama_prosedur>{parameter aktual}
Contoh 1 :
Procedure luas_segiempat
{Menghitung luas segiempat
IS : panjang dan lebar sembarang
FS : luas segiempat ditampilkan}
Kamus Data
panjang,luas,lebar : real
Begin
input(panjang,lebar)
luaspanjang*lebar
output(luas)
End
Contoh 2 :
Algoritma Panggil
Kamus Data
procedure luas_segiempat
{menghitung luas segiempat}
Begin
luas_segiempat {pemanggilan procedure}
End
Contoh 2
PROCEDURE luas_segiempat (input
p,l:integer, output hasil:integer)
{menghitung luas segi empat
I.S.: panjang dan lebar berisi bilangan
F.S.: luas berisi nilai luas segiempat}
BEGIN
hasil  p * l
ENDPROCEDURE
Contoh 2 :
VAR
panjang, lebar, luas: integer
BEGIN
Input (panjang, lebar) {meminta
inputan 2 nilai}
{pemanggilan prosedur
luas_segiempat}
luas_segiempat(panjang, lebar, luas)
Output(luas) {menampilkan luas}
END
Parameter Masukan
• Nilai parameter aktual diisikan ke dalam
parameter formal yang bersesuaian
Contoh Procedure dengan
Parameter Masukan:
Procedure Satu(input x,y : integer)
{contoh prosedur dengan parameter formal berupa parameter masukan
IS : nilai x dan y sudah terdefinisi
FS : nilai x dan ya masing-masing dinaikkan satu lalu
ditampilkan}
Kamus Data
{tidak ada}
Begin
xx+1
yy+1
output(x,y)
End
Program Utama
Algoritma X
{contoh program utama yang memanggil
prosedur Satu}
Kamus Data
a,b : real
procedure Satu(input x,y : integer)
Begin
Satu(4,10) {Satu dipanggil pertama kali}
input(a,b)
Satu(a,b) {Satu dipanggil kedua kali}
Satu(a+5,17) {Satu dipanggil ketiga kali}
End
Parameter Keluaran
• Nama parameter aktual di dalam program
pemanggil menggantikan nama parameter
formal yang bersesuaian di dalam
prosedur
Contoh Procedure dengan
Parameter Keluaran :
Procedure tiga(input x : integer,output y :
real)
{contoh prosedur dengan parameter formal berjenis
parameter keluaran
IS : nilai x sudah terdefinisi
FS : nilai x ditambah 1 lalu hasilnya dikali 3 dan
disimpan ke dalam y}
Kamus Data
{tidak ada}
Begin
xx+1
yx*3
End
Program Utama
Algoritma Y
Kamus data
a,b : integer
procedure tiga(input x : integer, output y : integer)
Begin
tiga(4,b)
{pemanggilan tiga pertama kali}
output(b)
input(a)
tiga(a,b)
output(b)
{pemanggilan tiga kedua kali}
tiga(a+5,b) {pemanggilan tiga ketiga kali}
output(b)
End
Parameter Masukan/Keluaran
• Mengakomodasi baik masukan dari dan
keluaran ke blok program pemanggil
• Informasi dikirim dua arah
• Bila parameter aktual diubah nilainyadi
dalam badan prosedur, maka sesudah
pemanggilan prosedur, nilai parameter di
aktual di titik pemanggilan pun berubah
Contoh Procedure dengan
Parameter Masukan/Keluaran :
Procedure Empat(input/output x,y : integer)
{menambahkan nilai x dan y masing-masing dengan 4
IS : x dan y sudah berisi nilai
FS : nilai x dan y bertambah masing-masing 4 lalu
ditampilkan}
Kamus Data
{tidak ada}
Begin
xx+5
yy+4
write(‘nilai x dan y di akhir prosedur
Empat:’)
write(‘x=‘,x)
write(‘y=‘,y)
End
Program Utama
Algoritma Y
Kamus data
a,b : integer
procedure Empat(input/output x,y : integer)
Begin
a15
b10
output(‘nilai a dan b sebelum pemanggilan :’)
output(‘ a = ‘,a)
output(‘ b = ‘,b)
Empat(a,b)
output(‘nilai a dan b sebelum pemanggilan :’)
output(‘ a = ‘,a)
output(‘ b = ‘,b)
End
Buatlah sebuah prosedur untuk
persoalan di bawah ini !
• Menentukan nilai maksimum diantara dua
buah bilangan
• Menentukan sebuah nilai termasuk ganjil
atau genap
• Menukar dua buah bilangan
• Menghitung rata-rata N buah bilangan
bulat
• Menghitung nilai diskon 20%
• Menentukan nilai mahasiswa (A-E)
Fungsi
Fungsi
• Modul program yang memberikan/mengembalikan
(return) sebuah nilai dari tipe tertentu (tipe dasar atau
tipe bentukan)
• Dalam pembuatan sebuah fungsi, pemrogram harus
mendefinisikan:
– Nama fungsi
– Tipe data yang dibuat/ dihasilkan oleh fungsi
– Daftar parameter yang menyatakan data yang diperlukan oleh
fungsi
– Satu atau lebih instruksi yang melakukan perhitungan
• Instruksi terakhir harus merupakan perintah untuk
mengirimkan nilai/data keluaran dari fungsi ke program
utama (bagian program yang memanggilnya).
Fungsi terdefinisi
• Fungsi yang sudah diberikan oleh sistem
dan tinggal dipakai
• Contoh :
– Fungsi konversi tipe data
– Fungsi matematik
Notasi Algoritma
FUNCTION nama_fungsi
(daftar_parameter) tipe_data_hasil
BEGIN
{instruksi dalam fungsi}
 hasil
ENDFUNCTION
Pemanggilan Fungsi
1. <nama_variabel> 
nama_fungsi(<daftar_parameter>)
2. Output(nama_fungsi(<daftar_paramet
er>))
3. If nama_fungsi(<daftar_parameter>)
< 0 then ...
4. z2*nama_fungsi(<daftar_parameter>
)
Contoh :
Buatlah fungsi untuk menghasilkan f(x)=2x2+5x-8
Function f(input x : real)real
{mengembalikan nilai f(x)=2x2+5x-8}
Kamus Data
{tidak ada}
Begin
(2*x*x) + (5*x) - 8
End
Contoh :
Algoritma Panggil
Kamus Data
x,y : real
Begin
input(x)
yf(x) {pemanggilan pertama}
output(y)
output(‘jika x=3 maka ‘,f(3))
{pemanggilan kedua}
End
Fungsi atau Prosedur ?
• Fungsi digunakan apabila modul program
mengembalikan sebuah nilai
• Prosedur digunakan bila modul
menghasilkan efek netto dari (satu atau)
sekumpulan aksi
Konversi Fungsi ke Prosedur dan
sebaliknya
• Fungsi dapat dikonversi menjadi prosedur
dengan cara menyatakan nilai yang
dikembalikan (return value) oleh fungsi
sebagai parameter keluaran pada
prosedur
• Prosedur yang memiliki sebuah parameter
keluaran dapat ditulis sebagai fungsi
dengan cara menyatakan parameter
keluaran sebagai return value dari fungsi
Fungsi ke Prosedur ???
Function maks(input a,b : integer)integer
{mencari nilai terbesar antara a dan b
IS : a dan b sudah ditentukan
FS : mengembalikan nilai terbesar antara a dan
b}
Kamus Data
{tidak ada}
Begin
if a > b then
a
else
b
endif
End
Prosedur ke Fungsi ???
Procedure tiga(input x : integer,output y :
real)
{contoh prosedur dengan parameter formal berjenis
parameter keluaran
IS : nilai x sudah terdefinisi
FS : nilai x ditambah 1 lalu hasilnya dikali 3 dan
disimpan ke dalam y}
Kamus Data
{tidak ada}
Begin
xx+1
yx*3
End
Buatlah fungsi untuk persoalan
berikut !
• F(x) = 5x2 + 10x + 6
• Menentukan nilai kuadrat diantara dua
buah bilangan
• Menentukan sebuah nilai termasuk ganjil
atau genap
• Menghitung rata-rata N buah bilangan
bulat
• Menghitung nilai diskon 20%
• Menentukan nilai mahasiswa (A-E)
Array
Array ???
• Struktur data yang dapat menyimpan
sekumpulan elemen bertipe sama dan
setiap elemen dapat diakses langsung
melalui indeksnya
• Indeks bertipe data yang menyatakan
keterurutan, misalnya integer atau
karakter
Deskripsi
1
A
157
2
158
3
168
4
170
5
155
6
172
7
163
Deklarasi Array
• Bersifat statik, artinya jumlah elemen array
harus sudah diketahui sebelum program
dieksekusi
• Mendefinisikan array berarti :
– Mendefinisikan banyaknya elemen array
– Mendefinisikan tipe elemen array
Cara definisi Array
• Sebagai variabel
L : array[1..50] of integer
namaMhs : array[‘a’..’j’] of string
nilaiUjian : array[0..74] of real
• Sebagai tipe data baru
type ArrayInt : array[1..100] of integer
P : ArrayInt
• Ukuran maksimum array sebagai konstanta
konstanta Nmaks = 1000
type ArrayInt : array[1..Nmaks] of integer
P : ArrayInt
Cara mengacu elemen array
L[4]  mengacu elemen keempat dari
array L
NamaMhs[‘b’]  mengacu elemen
kedua dari array NamaMhs
P[k]  mengacu elemen ke-k dari array
P, asalkan nilai k terdefinisi
harga[i+1]  mengacu elemen ke i+1
asalkan nilai i terdefinisi
Penggunaan Array
1. L[4]10
2. NamaMhs[‘b’]  ‘Fulan’
3. Input(P[k])
4. If harga[t] < 10000 then
output(‘Harga Murah’)
Else
…
Mengisi elemen Array
Procedure bacaArray(output A : ArrayInt, output N : integer)
{mengisi elemen array
IS : sembarang
FS : setelah pembacaan, sebanyak N buah elemen array A berisi
nilai-nilai yang dibaca dari inputan, N berisi banyaknya
elemen array yang digunakan}
Kamus Data
k : integer
jawab : char
Begin
k0
repeat
k k+1
input(A[k])
output(‘lagi ? (y/t)’)
input(jawab)
until jawab = ‘t’
N k
End.
Latihan
• Buatlah prosedur yang membaca nilai dari
5 orang mahasiswa !
• Buat fungsi yang akan menampilkan nilai
dari 5 mahasiswa tersebut !
• Buatlah program utama yang memanggil
fungsi dan prosedur di atas !