Computer Science, University of Brawijaya Putra Pandu Adikara, S.Kom Algoritma dan Struktur Data SubAlgoritma (Prosedur & Fungsi) SubAlgoritma/SubProgram Masalah: program menjadi besar dan kompleks untuk melakukan pengecekan kesalahan menjadi sangat rumit. Program besar dipecah-pecah menjadi prosedurprosedur dan fungsi-fungsi . Memudahkan dalam pengecekan kesalahan dan juga program menjadi lebih mudah dimengerti dan menghindari penulisan kode program yang berulangulang. SubProgram Subroutine sinonim dgn "subprogram." Istilah ini ada krn terminologi di Fortan dan bhs assembly. Function dan Procedure juga sinonim dgn "subprogram“. Predicate fungsi dgn nilai balik boolean (misal sukses atau gagal) Method atau Member function subprogram yg digunakan dlm object-oriented programming (OOP) yg menggambarkan aksi dari suatu objek Event handler atau handler, subprogram yg dipanggil saat ada “event”, misal prosedur yg dijalankan ketika ada event mouse click Prosedur (Procedure) Subprogram yang dapat dipanggil di dalam program (atau subprogram lain). Tidak menghasilkan nilai balik. Deklarasi prosedur: procedure nama_procedure(); begin {proses} end; Contoh: procedure Hello(); begin WriteLn(‘Hello World'); end; Memanggil Prosedur Contoh pemanggilan procedure begin Hello(); end. Fungsi (Function) Subprogram yang menghasilkan nilai balik (seperti fungsi matematis) Deklarasi prosedur: function nama_function(): [tipedata_nilai_balik]; begin {proses} end; Contoh function pi(): double; begin pi := 3.14; end; Memanggil fungsi Contoh pemanggilan fungsi var nilai: real; begin nilai := pi(); WriteLn(nilai); end. Parameter adalah argumen berupa nilai yg diberikan ke dalam suatu prosedur/fungsi Prosedur bisa mempunyai parameter: Value parameter (parameter passing by value) • memasukkan nilai ke dalam parameter • nilai yg dimasukkan hanya bisa berubah di dalam prosedur Variable parameter (parameter passing by reference) • Memasukkan nilai ke dalam parameter • nilai yg dimasukkan berubah di dalam dan luar prosedur Prosedur dgn Value parameter Deklarasi prosedur: Diawali reserved word procedure kemudian nama prosedur Deklarasi parameter diapit/didalam "(" dan ")" setelah nama prosedur Deklarasi sintaks: procedure nama_procedure([nama_param]:[tipe_data] [;dst]); Contoh Value Parameter pada Prosedur Contoh deklarasi: procedure WriteValue(text:string; nilai: int); begin WriteLn(text,'=',nilai); end; Pemanggilan prosedur dgn value parameter: [nama_proc]([nilai/variable],[dst]); Misal: WriteValue('Isi nilai=',i); Fungsi dgn Value parameter Deklarasi fungsi: Diawali reserved word function kemudian nama fungsi Deklarasi parameter diapit "(" dan ")" setelah nama fungsi Antar parameter dipisah tanda titik koma ";" Deklarasi sintaks: Di Pascal function nama_procedure( [nama_param]:[tipe_data] [;dst]): [tipe_data]; begin {proses} [nama_procedure] := [nilai_balik]; end; Fungsi dgn Value parameter Deklarasi sintaks: Di Delphi function nama_procedure( [nama_param]:[tipe_data] [;dst]): [tipe_data]; begin {proses} result := [nilai_balik]; end; Contoh Value Parameter pada Fungsi Contoh deklarasi: function NilaiInteger(nilai: integer): integer; begin NilaiInteger:=nilai; //di Delphi result:=nilai end; Pemanggilan function dgn value parameter: NilaiInteger(i); Untuk mengisi nilai balik fungsi ke suatu variable: var a:integer; begin a = NilaiInteger(i); end; Reference Parameter Deklarasi prosedur/fungsi: Hampir sama dengan value parameter, tapi sebelum nama parameter ditambahi keyword var Bila memerlukan output seperti nilai balik lebih dari 2. Deklarasi sintaks: function nama_procedure(var [nama_param]:[tipe_data] [;dst]): [tipe_data]; begin {proses} end; Pemanggilan procedure dgn value parameter [nama_proc]([variable],[dst]); Contoh Prosedur dgn Ref Parameter Contoh deklarasi prosedur procedure WriteValue(text:string; var nilai:integer) begin nilai := 10; WriteLn(text, '=',nilai); end; Pemanggilan prosedur dgn ref parameter Misal: WriteValue('Isi nilai=',i); nilai i = ?? Contoh Fungsi dgn Ref Parameter Contoh deklarasi fungsi function NilaiInteger(var nilai:integer):integer; begin nilai := nilai*3; NilaiInteger := nilai; end; Pemanggilan function dgn reference parameter NilaiInteger(i); //tanpa assignment Untuk mengisi (assign) nilai balik fungsi ke suatu variable a = NilaiInteger(i); nilai i = ?? Prosedur/Fungsi Overloading Prosedur/Fungsi overloading prosedur/fungsi dengan nama yang sama tetapi dengan tipe data fungsi dan/atau parameter yang berbeda Diakhir deklarasi prosedur/fungsi ditambahkan identifier overload; Contoh Prosedur/Fungsi Overloading Contoh: function Convert (nilai:string; kali : integer ): integer; overload; var nilaiInt,errorCode:integer; begin Val(nilai,nilaiInt,errorCode); //di Delphi StrToInt Convert := nilaiInt * kali; end; function Convert (nilai: string):float; overload; var nilaiFloat:real; errorCode:integer; begin Val(nilai,nilaiFloat,errorCode); //di Delphi StrToFloat Convert := nilaiFloat; end; Prosedur/Fungsi Rekursif Prosedur/Fungsi rekursif prosedur/fungsi yang memanggil dirinya sendiri terus menerus di dalam badan prosedur/fungsi tsb. Pemanggilan akan berhenti saat suatu kondisi berhenti (tidak memanggil dirinya) ditentukan. Contoh Prosedur/Fungsi Rekursif Contoh f(n)=n! dimana n! = n *(n – 1)! Misal n = 2, maka: f(2) = 2! = 2 * (2-1)! = 2 * 1! = 2 * f(1) f(1) = 1! = 1 * (1-0)! = 1 * 0! = 1 * f(0) f(0) = 0! = 1 function Factorial(lNum:integer): LongInt; begin if (lNum < 2) then //contoh kondisi berhenti Factorial := 1 else //pemanggilan fungsi diri Factorial := lNum * Factorial(lNum - 1); end;