Senin, 22 November 2010
Pemrograman Qbasic 6
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) ' Call
Print Nilai ' Akan tercetak 10
Pengiriman argumen secara Value :
DIM Nilai As INTEGER
Nilai = 1
contoh(Nilai) ' Tanpa Call
Print Nilai ' 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, satu AS
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 milyar
juta = (x MOD 1E+09) \ 1000000 'Ambil bagian ratusan juta
ribu = (x MOD 1000000) \ 1000 'Ambil bagian ratusan ribu
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