Subprogram Program kecil yang melakukan tugas tertentu dan merupakan bagian dari program secara keseluruhan Keuntungan : Mudah dikodekan Mudah dipahami Penghematan kode program
Bentuk Subprogram Subrutin Prosedur subrutin (SUB Procedure) Prosedur fungsi (FUNCTION Procedure)
Subrutin Namalabel dapat berupa nomor baris Pernyataan1 Pernyataan2 … RETURN Namalabel dapat berupa nomor baris Untuk menjalankan subrutin, digunakan GOSUB GOSUB NamaLabel
Program Utama / Pemanggil Subrutin Subrutin … GOSUB NamaLabel PernyataanX NamaLabel : Pernyataan1 Pernyataan2 … RETURN 1 2 3
CLS GOSUB Garis FOR i = 1 TO 3 Print i NEXT i END Garis : PRINT STRING(80, “=”) RETURN Output : =============================== 1 2 3
Prosedur Fungsi (FUNCTION) Subprogram yang apabila dipanggil dalam suatu pernyataan akan memberikan nilai balik (return value) Fungsi Argumen/ Parameter Nilai Balik
Definisi Fungsi (FUNCTION) FUNCTION NamaFungsi[(DaftarParameter)] [BlokPernyataan] NamaFungsi = Ungkapan END FUNCTION NamaFungsi juga menentukan tipe nilai baliknya DaftarParameter bersifat optional Nilai balik dari fungsi sesuai dengan nilai Ungkapan
CLS Hasil = Pangkat(2, 3) PRINT “2 pangkat 3 = “; Hasil PRINT “2 pangkat 4 = “; Pangkat(2, 4) END FUNCTION Pangkat(a, b) Pangkat = a ^ b END FUNCTION Output : 2 pangkat 3 = 8 2 pangkat 4 = 16
Parameter Formal & Aktual FUNCTION Pangkat(a, b) Pangkat = a ^ b END FUNCTION Parameter Formal Parameter Aktual Pangkat(2, 3) Pangkat(x, y)
CLS INPUT a, b PRINT Maks(a, b) PRINT Maks(b, a) END FUNCTION Maks(x, y) IF x > y then Maks = x Else Maks = y END IF END FUNCTION
Prosedur Subrutin (SUB) Bisa memiliki parameter seperti pada fungsi (function) Tidak memerlukan perintah RETURN Setiap definisi prosedur subrutin akan diletakkan terpisah terhadap program utama pada saat diedit
Definisi Prosedur Subrutin SUB NamaProsedur[(DaftarParameter)] BlokPernyataan END SUB Pernyataan untuk memanggil prosedur subrutin menggunakan CALL CALL NamaProsedur[(DaftarArgumen)]
Program Utama / Pemanggil Subrutin Prosedur … CALL Pros1(2) PernyataanX SUB Pros1(x) Pernyataan1 Pernyataan2 … END SUB 1 2 3
Variabel Lokal, Statis dan Global Lokal, hanya berlaku dalam suatu prosedur Statis, hanya berlaku dalam suatu prosedur tetapi nilai yang tersimpan di dalamnya tetap dipertahankan seusai prosedur tersebut dipanggil Global, berlaku baik di program utama maupun di dalam suatu prosedur
CLS N$ = “Qbasic” PRINT Coba$(N$) PRINT N$ END FUNCTION Coba$(x$) N$ = X$ + “ Lokal” Coba$ = N$ END FUNCTION Output : QBasic Lokal Qbasic CLS PRINT Statis, N END FUNCTION Statis STATIC N N = N + 1 Statis = N END FUNCTION Output : 1 0 2 0 3 0
CLS N$ = “Qbasic” PRINT Coba$(N$) PRINT N$ END FUNCTION Coba$(x$) SHARED N$ N$ = X$ + “ Lokal” Coba$ = N$ END FUNCTION Output : QBasic Lokal
Melewatkan Parameter By Reference (secara referensi), parameter dapat diubah dari dalam prosedur By Value (secara nilai), parameter tidak dapat diubah dari dalam prosedur
By Reference CLS Nilai% = 256 PRINT “Nilai = “; Nilai% PRINT “Nilai + 1 = “; PlusSatu(Nilai%) FUNCTION PlusSatu(X%) X% = X% + 1 PlusSatu = X% END FUNCTION Nilai = 256 Nilai + 1 = 257 Nilai = 257 Nilai berubah
By Value CLS Nilai% = 256 PRINT “Nilai = “; Nilai% PRINT “Nilai + 1 = “; PlusSatu((Nilai%)) FUNCTION PlusSatu(X%) X% = X% + 1 PlusSatu = X% END FUNCTION Nilai = 256 Nilai + 1 = 257 Nilai tidak berubah
EXIT SUB dan EXIT FUNCTION EXIT SUB, keluar dari prosedur SUB EXIT FUNCTION, keluar dari prosedur FUNCTION
Rekursi Proses memanggil diri sendiri Diterapkan pada prosedur (SUB maupun FUNCTION)
CLS INPUT “Masukkan bilangan N = “, N% PRINT N%;”! = “; Faktorial(N%) END FUNCTION Faktorial(X%) IF X% = 0 THEN Faktorial = 1 ELSE Faktorial = X% * Faktorial(X% - 1) END IF END FUNCTION Masukkan bilangan N = 3 3! = 6