PROSEDUR DAN FUNGSI - altien.files.wordpress.com · program-program bagian yang lebih sederhana ......
Transcript of PROSEDUR DAN FUNGSI - altien.files.wordpress.com · program-program bagian yang lebih sederhana ......
Merupakan penerapan konsep program modular,
yaitu memecah-mecah program yang rumit menjadi
program-program bagian yang lebih sederhana
dalam bentuk prosedur-prosedur.
untuk hal-hal yang sering dilakukan berulang-ulang,
cukup dituliskan sekali saja dalam prosedur dan
dapat dipanggil atau dipergunakan sewaktu-waktu
bila dipergunakan.
Pendahuluan
Pendefinisian Prosedur
Mendefinisikan prosedur, artinya :
menuliskan nama prosedur
mendeklarasikan nama-nama konstanta, variabel, tipe, label, dll
menjabarkan rangkaian aksi yang dilakukan
Struktur prosedur sama dengan struktur program
Judul/nama prosedur
Deklarasi parameter
Badan prosedur
Pendefinisian Prosedur ….
Nama prosedur sebaiknya diawali dengan
kata kerja, mis: hitung_luas, cari_maks
Parameter : nama-nama variabel yang
dideklarasikan pada bagian judul prosedur
Program memerlukan pertukaran
data/informasi antara prosedur(atau fungsi)
dan titik mana ia dipanggil
Tiap item data ditransfer antara parameter aktual
(argumen) dan parameter formal yang
bersesuaian.
Parameter aktual : parameter yang disertakan
pada waktu pemanggilan prosedur
Parameter formal : parameter yang dideklarasikan
di bagian judul program.
Pendefinisian Prosedur ….
Notasi prosedur (tanpa parameter)
Pendefinisian Prosedur ….
procedure NamaProsedur (deklarasi parameter, jika ada)
DEKLARASI
{semua nama konst, var, dll yang dipakai dan hanya
bersifat lokal di dalam prosedur ini}
ALGORITMA
{badan prosedur, berisi urutan instruksi}
Contoh : Prosedur membaca panjang alas & tinggi
segitiga, menghitung luas dan mencetak luas
segitiga.
Pendefinisian Prosedur ….
tinggi
alas
Pendefinisian Prosedur ….
procedure Hitung_Luas_Segitiga
DEKLARASI
alas,tinggi,luas : real
ALGORITMA
read(alas,tinggi)
luas (alas x tinggi)/2
write(luas)
Pemanggilan Prosedur
Prosedur bukan program yang berdiri sendiri
Tidak dapat dieksekusi secara langsung
Prosedur diakses/dipanggil dengan cara
memanggil namanya dari program pemanggil
(program utama atau modul program lain)
Prosedur tanpa parameter cukup dipanggil
dengan namanya saja
Pemanggilan Prosedur ….
Contoh :
Jika terdapat N buah segitiga dan ingin
dihitung luasnya.
(Menggunakan pengulangan for-to-do)
program segitiga;
uses crt;
var
i,n:integer;
procedure hitung_luas_segitiga;
var
alas,tinggi,luas:real;
begin
write('Panjang alas: ');readln(alas);
write('Tinggi: ');readln(tinggi);
luas:=alas*tinggi/2;
writeln('Luas segitiga ',i,' : ',luas:0:2);
end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n);
for i:=1 to n do
hitung_luas_segitiga;
readln;
end.
variabel global
variabel lokal
Deklarasi global & lokal
Deklarasi : konstanta, variabel, tipe dll
Global :
dideklarasi di program utama
dapat digunakan pada seluruh bagian program,
termasuk prosedur yang ada
Lokal:
Dideklarasi di dalam prosedur
hanya dapat digunakan dalam prosedur tersebut
Deklarasi global & lokal ….
Perhatikan kasus hitung_luas_segitiga
Bagaimana jika varibel alas dan tinggi dijadikan
variabel global
Prosedur hitung_luas_segitiga hanya menghitung
luas, tidak membaca input alas dan tinggi
Struktur output sama dengan kasus sebelumnya
Bagaimana programnya ?
Deklarasi global & lokal ….
Dalam pemrograman dengan prosedur:
Usahakan menggunakan variabel global sesedikit
mungkin
Penggunaan variabel lokal meminimumkan usaha
pencarian kesalahan yg disebabkan variabel tsb
Prosedur yang baik adalah prosedur yang
independen dari program pemanggilnya (utama)
Jika program utama perlu mengkomunikasikan nilai
var. global ke dalam prosedur akan menggunakan
parameter
Parameter
Prosedur dengan parameter diakses dengan cara
memanggil namanya dari program utama/
pemanggil
Parameter yang disertakan pada waktu
pemanggilan disebut parameter aktual
Model :
Ketika prosedur dipanggil, parameter aktual
berkorespondensi dengan parameter formal
(global)
NamaProsedur (parameter aktual)
Parameter ….
Aturan korespondensi parameter aktual dan formal:
Jumlah parameter aktual =parameter formal
Bertipe sama (yang bersesuaian)
Ekspresi parameter bersesuaian bergantung pada
jenis parameter formal:
Input parameter
Output parameter
Input/Output parameter
Input Parameter
Parameter input disebut juga parameter nilai
Nilai ini digunakan dalam badan prosedur
Karena yang dipentingkan nilainya, maka
nama parameter aktual boleh berbeda dengan
nama parameter formal yang bersesuaian
procedure Nama_prosedur (input_var:type)
Input Parameter ….
Perhatikan kasus hitung_luas_segitiga:
Misalkan variabel alas dan tinggi sebagai
parameter aktual (input parameter) pada
prosedur hitung_luas_segitiga
Variabel alas dan tinggi harus dideklarasikan
sebagai parameter formal
program segitiga_2;
uses crt;
var
i,n:integer;
a,t:real;
procedure hitung_luas_segitiga(alas,tinggi:real);
var
luas:real;
begin
luas:=alas*tinggi/2;
writeln('Luas segitiga ',i,' : ',luas:0:2);
end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n);
for i:=1 to n do
begin
write('Panjang alas: ');readln(a);
write('Tinggi : ');readln(t);
hitung_luas_segitiga(a,t);
end;
readln;
end.
Prosedur mungkin menghasilkan satu/lebih output
yg akan digunakan oleh program
utama/pemanggil
Nilai output tersebut ditampung dalam parameter
output
Output Parameter
procedure Nama_prosedur
(input_var:type;var output_var:type)
Misal : variabel luas pada prosedur
hitung_luas_segitiga dicetak pada program utama
(bukan dalam prosedur) maka luas dinyatakan
sebagai varibel output
Output Parameter ….
program segitiga_3;
uses crt;
var
i,n:integer;
a,t,L:real;
procedure hitung_luas_segitiga(alas,tinggi:real;var luas:real);
begin
luas:=alas*tinggi/2;
end;
begin
clrscr;
write('Banyaknya segitiga: ');readln(n);
for i:=1 to n do
begin
write('Panjang alas: ');readln(a);
write('Tinggi : ');readln(t);
hitung_luas_segitiga(a,t,L);
writeln('Luas segitiga ',i,' : ',L:0:2);
end;
readln;
end.
Input parameter digunakan pada situasi dimana
informasi dikirim hanya dari titik pemanggilan
prosedur ke prosedur itu sendiri
Output parameter hanya mengirim informasi dari
prosedur ke titik pemanggilan prosedur
Ada parameter yang berfungsi keduanya
(terutama jika ada looping perhitungan)
Input/Output Parameter
program tambah_empat;
uses crt;
var
a,b:integer;
procedure tambah_empat(x,y:integer);
begin
x:=x+4;
y:=y+4;
writeln('Nilai x dan y di akhir prosedur tambah_empat');
writeln(' x = ',x);
writeln(' y = ',y);
end;
begin
clrscr;
a:=15; b:=10;
writeln('Nilai a dan b sebelum pemanggilan prosedur tambah_empat');
writeln(' a = ',a);
writeln(' b = ',b);
tambah_empat(a,b);
writeln('Nilai a dan b setelah pemanggilan prosedur tambah_empat');
writeln(' a = ',a);
writeln(' b = ',b);
readln;
end.
Parameter input
Input/Output Parameter ….
program tambah_empat1;
uses crt;
var
a,b:integer;
procedure tambah_empat(var x,y:integer);
begin
x:=x+4;
y:=y+4;
writeln('Nilai x dan y di akhir prosedur tambah_empat');
writeln(' x = ',x);
writeln(' y = ',y);
end;
begin
clrscr;
a:=15; b:=10;
writeln('Nilai a dan b sebelum pemanggilan prosedur tambah_empat');
writeln(' a = ',a);
writeln(' b = ',b);
tambah_empat(a,b);
writeln('Nilai a dan b setelah pemanggilan prosedur tambah_empat');
writeln(' a = ',a);
writeln(' b = ',b);
readln;
end.
Input/Output Parameter ….
Parameter output
Program dengan Prosedur atau tidak?
Program dengan prosedur
Program yang dipecah menjadi beberapa prosedur
menunjukkan teknik pemrograman yang baik dan
terstruktur
Prosedur dengan Parameter atau tidak?
Prosedur dengan parameter
Parameter berfungsi sebagai media komunikasi
antara prosedur dengan program
utama/pemanggil
Parameter mengurangi kebutuhan penggunaan
variabel global
Parameter input atau output?
Bergantung pada masalah, apakah prosedur
menghasilkan output yang digunakan oleh program
utama/pemanggil atau tidak
Bila prosedur tidak menghasilkan output(atau
mengahilkan output tapi hanya digunakan prosedur itu
sendiri) gunakan parameter input
Bila prosedur menghasilkan output yang digunakan
program utama/pemanggil, gunakan parameter output
Bila prosedur menerima input sekaligus output pada
parameter yang sama, gunakan parameter input/output
Pendahuluan
Merupakan bagian program yang mempunyai
tujuan spesifik
Seperti prosedur, fungsi mempunyai tujuan yang
ekivalen
Pada beberapa masalah akan lebih tepat
menggunakan fungsi atau sebaliknya
Fungsi memberikan/mengembalikan sebuah nilai
dari tipe tertentu
Definisi fungsi dalam program bersesuaian dengan
definisi fungsi dalam matematika
Fungsi diakses dengan memanggil namanya
Fungsi juga mempunyai parameter formal
Parameter pada fungsi selalu merupakan
parameter masukan (input parameter)
Parameter masukan ini berarti masukan yang
digunakan oleh fungsi tersebut untuk menghasilkan
nilai
Pendahuluan ….
Notasi Fungsi
function Nama_Fungsi (input deklarasi parameter) tipe
Deklarasi
{semua nama yang dipakai dalam fungsi dan hanya berlaku
lokal di dalam fungsi yang didefinisikan disini}
Algoritma
{badan fungsi, berisikan instruksi-instruksi untuk
menghasilkan nilai yang akan dikembalikan oleh fungsi}
return ekspresi {pengembalian nilai yang dihasikan fungsi,
dapat berupa konstanta, variabel atau rumus}
Contoh
Notasi Fungsi
function F (input x:real) real
{mengembalikan nilai f(x)=2x2+5x-8,x R}
Deklarasi
{tidak ada}
Algoritma
return 2*x*x + 5*x -8
Pemanggilan Fungsi
Fungsi diakses dengan cara memanggil namanya
dari program pemanggil/utama, diikuti dengan
daftar parameter aktual (jika ada).
Karena fungsi menghasilkan nilai, maka nilai
tersebut dapat diperlakukan dengan 2 cara :
Nilai yang dikembalikan oleh fungsi ditampung dalam
sebuah variabel yang bertipe sama dengan fungsi
Nilai yang dikembalikan oleh fungsi dapat langsung
dimanipulasi
program fungsi1;
uses crt;
var
x,y:real;
function G (x:real):real;
begin
G:=sqr(x)+4*x-5;
end;
begin
clrscr;
write('Masukkan nilai x : ');readln(x);
y:=G(x);
writeln('Nilai y : ',y:0:2);
writeln('Nilai y + 3 : ',(y+3):0:2);
writeln('Nilai dari G : ',G(x):0:2);
writeln('Nilai dari G + 3 : ',(G(x)+3):0:2);
readln;
end.
program tabel_fungsi;
uses crt;
var
x:real;
function F (x:real):real;
begin
F:=2*x*x+5*x-8;
end;
begin
clrscr;
writeln('-------------------------');
writeln(' x f(x) ');
writeln('-------------------------');
x:=10.0;
while x<=15.0 do
begin
writeln(x:4:2,' ',F(x):10:3);
x:=x+0.3
end;
writeln('-------------------------');
readln;
end.
program fungsi2;
uses crt;
var
x:integer;
function Habis_Dibagi_3 (n:integer):boolean;
begin
Habis_Dibagi_3 := (n mod 3 = 0);
end;
begin
clrscr;
write('Masukkan sembarang integer : ');readln(x);
if Habis_Dibagi_3(x) then
writeln ('Bilangan ',x,' habis dibagi tiga')
else
writeln ('Bilangan ',x,' tidak habis dibagi tiga');
readln;
end.
Prosedur atau Fungsi ?
Fungsi digunakan apabila modul program
mengembalikan sebuah nilai
Prosedur digunakan bila modul menghasilkan efek
netto dari satu atau sekumpulan aksi
Namun sering pemilihan modul sebagai fungsi atau
prosedur bergantung pada kebutuhan dari
pemrogram
Prosedur atau Fungsi
Mengubah fungsi menjadi prosedur :
Menyatakan nilai yang dikembalikan oleh fungsi
sebagai output parameter (parameter keluaran)
pada prosedur)
Mengubah parameter menjadi fungsi:
Prosedur yang mempunyai satu buah output
parameter dapat ditulis menjadi fungsi dengan
cara menyatakan output parameter sebagai nilai
yang dikembalikan fungsi
program fungsi3;
uses crt;
var
x,y:integer;
function max (a,b:integer):integer;
begin
if a>=b then
writeln ('Nilai maks : ',a)
else
writeln ('Nilai maks : ',b);
end;
begin
clrscr;
write('Masukkan sembarang integer x : ');readln(x);
write('Masukkan sembarang integer y : ');readln(y);
max(x,y);
readln;
end.
program fungsi3_pro;
uses crt;
var
x,y,m:integer;
procedure max (a,b:integer;var maks:integer);
begin
if a>=b then
writeln ('Nilai maks : ',a)
else
writeln ('Nilai maks : ',b);
end;
begin
clrscr;
write('Masukkan sembarang integer x : ');readln(x);
write('Masukkan sembarang integer y : ');readln(y);
max(x,y,m);
readln;
end.
program fungsi4_pro;
uses crt;
var n_data:integer;
rataan:real;
procedure hitung_rataan (m_data:integer;var rata2:real);
var x,i,jumlah:integer;
begin
jumlah:=0;
for i:=1 to m_data do
begin
write('Data ke ',i,' : ');readln(x);
jumlah:=jumlah+x;
end;
rata2:=jumlah/m_data;
writeln('Rata-rata : ',rata2:0:2);
end;
begin
clrscr;
write('Banyaknya data : ');readln(n_data);
hitung_rataan(n_data,rataan);
readln;
end.
program fungsi4;
uses crt;
var
n_data:integer;
function hitung_rataan (m_data:integer):real;
var
x,i,jumlah:integer; rata2:real;
begin
jumlah:=0;
for i:=1 to m_data do
begin
write('Data ke ',i,' : ');readln(x);
jumlah:=jumlah+x;
end;
rata2:=jumlah/m_data;
writeln('Rata-rata : ',rata2:0:2);
end;
begin
clrscr;
write('Banyaknya data : ');readln(n_data);
hitung_rataan(n_data);
readln;
end.
Fungsi memanggil diri sendiri
Merupakan dasar dari program rekursif
function ulang (input deklarasi parameter): tipe;
Deklarasi
Algoritma
ulang;
program fungsi5;
uses crt;
var m:integer;
function faktorial(n:integer):real;
begin
if n=0 then
faktorial:=1
else
faktorial:=n*faktorial(n-1);
end;
begin
clrscr;
write('Berapa faktorial ? ');readln(m);
writeln(m,' faktorial = ',faktorial(m):0:0);
readln;
end.
Fungsi Tersarang
Fungsi tersarang (nested function) merupakan fungsi
yang letaknya berada di dalam fungsi yang
lainnya.
program fungsi_6;
uses crt;
var
z:integer;
function fungsi_a(x:integer):integer;
function fungsi_b(y:integer):integer;
begin
fungsi_b:=y*2;
end;
begin
fungsi_a:=fungsi_b(x)+5;
end;
begin
clrscr;
write('Masukkan nilai z: ');readln(z);
writeln('Nilainya : ',fungsi_a(z));
readln;
end.