62
PROSEDUR DAN FUNGSI Altien Jonathan Rindengan, S.Si., M.Kom

PROSEDUR DAN FUNGSI - altien.files.wordpress.com · program-program bagian yang lebih sederhana ... data/informasi antara prosedur ... Input/Output parameter

  • Upload
    haliem

  • View
    229

  • Download
    1

Embed Size (px)

Citation preview

PROSEDUR DAN FUNGSI

Altien Jonathan Rindengan, S.Si., M.Kom

PROSEDUR

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

Pemanggilan Prosedur ….

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.

Input Parameter ….

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.

Output Parameter ….

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 ….

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

Input/Output Parameter ….

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

FUNGSI

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.