PROSEDUR DAN FUNGSI
Altien Jonathan Rindengan, S.Si., M.Kom
PROSEDUR
Pendahuluan
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.
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
Pendefinisian Prosedur ….
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)
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}
Pendefinisian Prosedur ….
Contoh : Prosedur membaca panjang alas & tinggi segitiga, menghitung luas dan mencetak luas segitiga.
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;
variabel global
procedure hitung_luas_segitiga; var variabel lokal 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.
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 : NamaProsedur (parameter aktual)
Ketika prosedur dipanggil, parameter aktual berkorespondensi dengan parameter formal (global)
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
procedure Nama_prosedur (input_var:type)
Nilai ini digunakan dalam badan prosedur Karena yang dipentingkan nilainya, maka nama parameter aktual boleh berbeda dengan nama parameter formal yang bersesuaian
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 ….
Output Parameter
Prosedur mungkin menghasilkan satu/lebih output yg akan digunakan oleh program utama/pemanggil procedure Nama_prosedur (input_var:type;var output_var:type)
Nilai output tersebut ditampung dalam parameter output
Output Parameter ….
Misal : variabel luas pada prosedur hitung_luas_segitiga dicetak pada program utama (bukan dalam prosedur) maka luas dinyatakan sebagai varibel output
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/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 Parameter input 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.
Input/Output Parameter ….
Input/Output Parameter …. program tambah_empat1; uses crt; var a,b:integer; procedure tambah_empat(var begin x:=x+4; y:=y+4; writeln('Nilai x dan y writeln(' x = ',x); writeln(' y = ',y); end; begin clrscr; a:=15; b:=10; writeln('Nilai a dan b writeln(' a = ',a); writeln(' b = ',b); tambah_empat(a,b); writeln('Nilai a dan b writeln(' a = ',a); writeln(' b = ',b); readln; end.
Parameter output x,y:integer);
di akhir prosedur tambah_empat');
sebelum pemanggilan prosedur tambah_empat');
setelah pemanggilan prosedur tambah_empat');
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
Pendahuluan ….
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
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}
Notasi Fungsi
Contoh
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.