You are on page 1of 5

BAHASA PEMROGRAMAN BASIC dengan Quick BASIC MODUL 6 FUNGSI CIPTAAN DAN SUB RUTIN Fungsi Ciptaan Fungsi-fungsi

bawaan yang disediakan oleh QBasic adalah bersifat umum, sehingga kadang-kadang programmer harus membuat fungsi sendiri sesuai dengan kebutuhannya. Misalnya : Dalam mengembangkan program keuangan, seorang programmer akan banyak membutuhkan fungsi-fungsi Time Value of Money seperti Present Value, Future Value, Depresiasi dll. QBasic menyediakan fasilitas bagi programmer yang ingin mengembangkan fungsi ciptaannya sendiri. Adapun tata cara penulisannya adalah sebagai berikut : FUNCTION namafungsi[(parameterlist)] [STATIC] [statementblock] namafungsi = expression [statementblock] END FUNCTION type data yang dikembalikan ditentukan oleh akhiran pada nama tersebut(%, &, !, #, atau $) yang masing-masing adalah INTEGER, LONG, SINGLE, DOUBLE dan STRING. Contoh : FUNCTION SLN#(cost AS double, salvage AS double, life AS single) SLN# = (cost-salvage)/life END FUNCTION Fungsi diatas adalah fungsi ciptaan untuk menghitung depresiasi dengan metode garis lulus. Contoh Lain : FUNCTION FV#(pv AS double, rate AS single, term AS integer) Dim npv as double, i as integer npv = pv FOR i = 1 TO term STEP 1 npv = npv + npv*rate 'nilai akhir = pokok + bunga NEXT i FV# = npv END FUNCTION atau dengan rumus pertumbuhan FUNCTION FV#(pv AS double, rate AS single, term AS integer) FV# = np*(1+rate)^term END FUNCTION Fungsi diatas adalah fungsi ciptaan untuk menghitung Future Value dari suatu nilai uang, jika diketahui suku bunga per periode dan jumlah periode yang diinginkan.

Contoh : Misalnya anda memiliki uang Rp. 1.000.000 (satu juta), anda menyimpannya ke Bank dengan suku bunga 10% per tahun, berapa uang anda setelah disimpan 3 tahun ? Catatan : Pada Qbasic, fungsi ciptaan disimpan pada lokasi yang berlainnan dengan program utama, untuk beralih ke program utama maupun fungsi ciptaan anda dapat menggunakan tombol F2 Anda dapat menggunakan perintah EXIT FUNCTION untuk keluar dari fungsi. Contoh : FUNCTION PRIMA! (bilangan AS LONG) DIM i AS INTEGER IF bilangan < 2 THEN PRIMA! = 0 'semua bilangan < 2 bukan prima ELSEIF bilangan < 4 THEN PRIMA! = 1 'bilangan 2 dan 3 adalah prima ELSE i = 2 'bagi bilangan tersebut mulai DO WHILE i <= SQR(bilangan) 'dari 2 s/d Akar dari bilangan IF (bilangan MOD i) = 0 THEN PRIMA! = 0 'jika habis dibagi, bukan prima EXIT FUNCTION END IF i = i + 1 LOOP PRIMA! = 1 'jika tidak habis dibagi, prima END IF END FUNCTION Menggunakan Fungsi Ciptaan Cara menggunakan fungsi ciptaan sama saja dengan fungsi bawaan, contoh : DIM I AS LONG FOR I = 1 To 30 If PRIMA!(I) = 1 Then Print I End If NEXT I Akan mencetak bilangan prima antara 1 s/d 30 Sub Rutin Sub Rutin merupakan sebagian dari program. Adapun keuntungan dari pembentukan adalah menghindari pengetikan yang berulang-ulang terhadap bagian program yang sama, dan membuat program lebih terstruktur. Pada QBasic tata cara penulisan Sub Rutin adalah sebagai berikut: SUB namasub [(Parameterlist)] [STATIC] [statementblock]

END SUB Contoh : Sub KOTAK(Y1%,X1%,Y2%,X2%) posisiX% = POS(0) 'Simpan posisi kursor sekarang posisiY% = CRSLIN LOCATE Y1%,X1% PRINT Chr$(218);String$(X2-X1-2,196);Chr$(191) FOR I%=Y1% TO Y2% STEP 1 LOCATE I%,X1% : PRINT Chr$(179) LOCATE I%,X2% : PRINT Chr$(179) NEXT I% LOCATE Y2%,X1% PRINT Chr$(192);String$(X2-X1-2,196);Chr$(217) LOCATE POSISIY%,POSISIX% END SUB Sub diatas akan mengambar suatu kotak ASCII single berdasarkan koordinat yang diberikan. Contoh : CALL KOTAK(5,10,20,70) pengiriman argumen pada Sub Procedure terdapat dua cara antara lain : 1. Secara referensi Argumen yang diberikan dengan cara ini kepada procedure dan diolah, kemudian hasil akhirnya akan didefinisikan pada variabel tersebut pada main program. 2. Dengan Value/Nilai Argumen ini hanya berupa nilai yang dipergunakan oleh procedure pada saat pengolahan. Contoh : SUB contoh(A as INTEGER) A = 10 END SUB Pengiriman argumen secara Referensi : DIM Nilai As INTEGER Nilai = 1 Call contoh(Nilai) Print Nilai

' Call ' Akan tercetak 10

Pengiriman argumen secara Value : DIM Nilai As INTEGER Nilai = 1 contoh(Nilai) Print Nilai

' Tanpa Call ' Akan tercetak 1

---------------------------------------------------------------Jadi anda perlu berhati-hati dalam pemakaian Variabel yang digunakan sebagai parameter pada saat pemanggilan SUB RUTIN. ---------------------------------------------------------------static, menyatakan nilai variabel local dalam function tidak dibuang ketika fungsi atau sub berakhir.

Dalam QBasic anda dapat menentukan tingkatan/sifat variabel yang mengatur dimana variabel itu digunakan(level of access). Inilah tingkatan tersebut : 1. Variabel Local, hanya bisa digunakan pada Sub Procedure atau function tersebut telah selesai dikerjakan, maka variabel lokal tersebut dibuang dari memory dan tidak lagi dipergunakan oleh bagian program lain. 2. Variabel Shared, atau variabel global bisa digunakan pada seluruh bagian program maupun Sub Procedure tertentu. Nilai variabel ini dapat berubah selama program tersebut berjalan. 3. Variabel Static, adalah variabel local, tetapi variabel ini nilainya tetap dipertahankan sampai pemanggilan berikutnya. Latihan : 1. Buatlah fungsi ciptaan terbilang, contoh 1250 akan dibaca sebagai "Seribu Duaratus limapuluh". 2. Buatlah sub kotak double. Bilang.Bas DECLARE FUNCTION angka$ (x AS INTEGER, posisi AS INTEGER) DECLARE FUNCTION ratus$ (x AS INTEGER, posisi AS INTEGER) DECLARE FUNCTION terbilang$ (x AS LONG) PRINT terbilang$(1234567890) FUNCTION angka$ (x AS INTEGER, posisi AS INTEGER) SELECT CASE x CASE 0: angka$ = "Nol" CASE 1: IF posisi = 1 THEN angka$ = "Satu" 'Posisi paling akhir dibaca ELSE 'Satu angka$ = "Se" END IF CASE 2: angka$ = "Dua" CASE 3: angka$ = "Tiga" CASE 4: angka$ = "Empat" CASE 5: angka$ = "Lima" CASE 6: angka$ = "Enam" CASE 7: angka$ = "Tujuh" CASE 8: angka$ = "Delapan" CASE 9: angka$ = "Sembilan" CASE 10: angka$ = "Sepuluh" CASE 11: angka$ = "Sebelas" CASE 12: angka$ = "Duabelas" CASE 13: angka$ = "Tigabelas" CASE 14: angka$ = "Empatbelas" CASE 15: angka$ = "Limabelas" CASE 16: angka$ = "Enambelas" CASE 17: angka$ = "Tujuhbelas" CASE 18: angka$ = "Delapanbelas" CASE 19: angka$ = "Sembilanbelas" END SELECT

END FUNCTION FUNCTION ratus$ (x AS INTEGER, posisi AS INTEGER) DIM a100 AS INTEGER, a10 AS INTEGER, a1 AS INTEGER DIM baca AS STRING a100 = x \ 100 'Ambil angka ratusan a10 = (x MOD 100) \ 10 'Ambil angka puluhan a1 = x MOD 10 'Ambil angka satuan IF a100 > 0 THEN baca = angka$(a100, posisi) + "ratus" END IF IF a10 = 1 THEN 'Sepuluh s/d Sembilanbelas baca = baca + angka$(a10 * 10 + a1, posisi) ELSE IF a10 > 0 THEN 'Duapuluh s/d Sembilanpuluh baca = baca + angka$(a10, posisi) + "puluh" END IF IF a1 > 0 THEN 'Satu s/d Sembilan baca = baca + angka$(a1, posisi) END IF END IF ratus$ = baca END FUNCTION FUNCTION terbilang$ (x AS LONG) DIM milyar AS INTEGER, juta AS INTEGER, ribu AS INTEGER, INTEGER DIM baca AS STRING IF x = 0 THEN 'Jika x = Nol baca$ = angka$(0, 1) 'Dibaca Nol ELSE milyar = x \ 1E+09 'Ambil bagian ratusan juta = (x MOD 1E+09) \ 1000000 'Ambil bagian ratusan ribu = (x MOD 1000000) \ 1000 'Ambil bagian ratusan satu = x MOD 1000 'Ambil bagian ratusan IF milyar > 0 THEN baca = ratus$(milyar, 4) + "milyar" END IF IF juta > 0 THEN baca = baca + ratus$(juta, 3) + "juta" END IF IF ribu > 0 THEN baca = baca + ratus$(ribu, 2) + "ribu" END IF IF satu > 0 THEN baca = baca + ratus$(satu, 1) END IF END IF terbilang$ = baca END FUNCTION satu AS

milyar juta ribu

You might also like