Subscribe

Powered By

Free XML Skins for Blogger

Powered by Blogger

..:: Perbuatan yang baik selalu dihasilkan oleh pikiran yang baik::..

"Kegagalan bukanlah untuk ditangisi,tetapi untuk di insyafi.
Manakala kejayaan bukan untuk dimegahi,tapi untuk disyukuri!"

الأربعاء، 26 مارس، 2008

Selengkapnya......

الأحد، 16 مارس، 2008

BAHASA PEMROGRAMAN BASIC dengan Quick BASIC

DASAR-DASAR QBASIC

Bahasa BASIC dibuat oleh John G.Kemmeny dan Thomas E.Kurtz lebih
dari 20 tahun yang lalu dan merupakan bahasa tingkat tinggi yang
relatif mudah dipelajari dan dimengerti.

Dalam perkembangannya , Bahasa BASIC dikembangkan dalam dua
jenis, yaitu interpreter dan compiler. Interpreter seperti GW-
BASIC pada sistem operasi MS-DOS, maupun BASICA pada sistem
operasi PC-DOS, sedangkan salah satu compilernya yang terkenal
adalah Quick BASIC yang dilengkapi dengan sistem
pemrograman
yang terstruktur, Quick Library, on-line help yang terpadu,
editor yang efisien (bisa merapikan teks serta memberitahukan
kesalahan syntax penulisan suatu perintah)


MENGAKTIFKAN QUICK BASIC

Untuk mengaktifkan Quick BASIC diperlukan sistem Quick BASIC yang
minimal terdiri dari file QB.EXE/QBasic.EXE. Jika kita telah
memiliki file tersebut tinggal diberi perintah QB pada Dos
Prompt.

Contoh

A>QB

atau

A>QBasic

Setelah pemberian perintah tersebut, pemakai akan dihadapkan
kepada suatu editor sebagai tempat pengetikan program yang akan
dikembangkan. Dibagian atas editor terdapat perintah menu yang
dapat diaktifkan dengan Tombol Alt disertai huruf depan dari
masing-masing pilihan.

File
/------------------\
| New Program | memulai program baru
| Open Program... | memuat program dari diskette ke RAM
| Save | menyimpan program ke diskette (file *.BAS)
| Save As... | menyimpan program ke nama yang lain
|------------------|
| Print... | mencetak program ke printer
|------------------|
| Exit | keluar ke Dos permanen
\------------------/

Edit
/----------------------\
| Undo Alt+Backspace | membatalkan perubahan terakhir
| Cut Shift+Del | memotong tulisan Blok ke ClipBoard
| Copy Ctrl+Ins | menduplikasi tulisan Blok ke ClipBoard
| Paste Shift+Ins | menyisip ClipBoard ke posisi Kursor
| Clear Del | menghapus tulisan yang di Blok
|----------------------|
| New SUB... |
| New FUNCTION... |
\----------------------/

Options
/-----------------\
| Display... | mengatur tampilan layar
| Help Set Path | mengatur default Dos Path
| Syntax Checking | mengatur keaktifan pemeriksaan Syntax
\-----------------/

Run
/---------------------\
| Start Shift+F5 | menjalankan program yang aktif
| Restart | mereset memory program
| Continue F5 | melanjutkan program yang terhenti
\---------------------/

MEMBUAT PROGRAM PADA QUICK BASIC

Apa yang dimaksud dengan pemrogram komputer ?

Pemrograman komputer berarti anda memberitahukan kepada komputer
ada yang anda ingin dia lakukan. Untuk memberitahukan komputer
apa yang harus dia lakukan, anda membutuhkan kata-kata khusus
(special words). Kata-kata ini disebut sebagai kata-kata kunci
(key words). Ketika anda menempatkan kata-kata kunci ini dalam
program anda sehingga kelihatan seperti kode khusus (special
code) yang disebut sebagai CODE dan pekerjaan menulis program
disebut CODING.


KATA, DATA, PERINTAH, dan FUNGSI BANTU merupakan komponen utama
suatu program yang saling berinteraksi. Pembuatan program dalam
Quick BASIC tidak terlepas dari keempat komponen di atas dalam
baris-baris perintah yang berkapasitas maksimum 256 character
yang mencakup identitas baris, perintah, dan kata-kata(Remark).
Identitas baris bisa berupa nomor baris (0-65529) [menjaga
kompatibilitas dengan GWBASIC maupun BASICA], dan bisa berupa
label dengan ketentuan :

- Maksimum 40 character, dimulai dengan huruf A..Z, diakhiri
dengan tanda :
- huruf besar/kecil sama, tidak sama dengan reserved word, dan
tidak pakai spasi

Setiap proses yang berhubungan dengan pengolahan data biasanya
memerlukan tempat penampung sementara dalam memory yang disebut
variabel dan dalam pengolahannya diperlukan operator dan fungsi
bantu.

Jenis Type Variabel pada Quick Basic :
/--------------------------------------------------------------------------\
|Data Type |Suffix|Maximum |Minimum | Size|
|--------------------------------------------------------------------------|
| | | |
|Strings | $ | 32,767 chars. | 0 chars. | |
|Integers | % | 32,767 |-32,768 | 2 |
|Long Integers | & | 2,147,483,647 |-2,147,483,648 | 4 |
|Single (7-digit) precision | ! |+3.402823 E+38 |+1.401298 E-45 | 4 |
_ _
|Double (15-digit) precision| # |+1.7976931 D+308|+4.940656 D-324 | 8 |
_ _
|User-Defined Data Types |----------------------------------------------/
\---------------------------/

Nama variabel juga memiliki ketentuan antara lain :
- Maksimum 40 character, diawali dengan huruf A..Z, diakhiri
dengan $, %, &, !, # untuk menunjukan type
- Tidak boleh sama dengan reserved word, tidak boleh pakai spasi
dan spesial character.

Operator pada Quick BASIC dibagi atas 5 jenis, antara lain :

1. Arithmetic operators : melakukan tugas perhitungan
/--------------------\ /----------------------------\
|Operator|Kegunaan | |Operator|Kegunaan |
|--------------------| |----------------------------|
| |
| ^ | Pangkat | | \ | Pembagian integer |
| - | Negatif | | MOD | Sisa bagi |
| * | Perkalian | | + | Penjumlahan |
| / | Pembagian | | - | Pengurangan |
\--------------------/ \----------------------------/

2. Relational operators : membandingkan strings dan nilai numerik
/--------------------------------------\
|Operator|Kegunaan |
|--------------------------------------|
| = | Sama dengan |
| <> | Tidak sama dengan |
| < | Lebih kecil |
| > | Lebih besar |
| <= | Lebih besar atau sama dengan|
| >= | Lebih kecil atau sama dengan|
\--------------------------------------/

Relational operators akan menghasilkan dua kemungkinan nilai
yaitu -1 jika benar dan 0 jika salah.

3. Logical operators : test kondisi dan manipulasi bits
/-----------------------------------------------------\
|Expresi1|Expresi2| NOT | AND | OR | XOR | EQV | IMP |
|-----------------------------------------------------|
| | | | | | |
| T | T | F | T | T | F | T | T |
| T | F | F | F | T | T | F | F |
| F | T | T | F | T | T | F | T |
| F | F | T | F | F | F | T | T |
\-----------------------------------------------------/

Functional operators : operator pelengkap
String operators : mengabung (+), dan membandingkan String

PERINTAH DASAR INPUT OUTPUT

Komputer hanya melaksanakan apa yang diperintahkan pemrogram.
Jadi, dalam membuat program untuk menyelesaikan suatu masalah,
kita harus tahu cara penyelesaiannya. Untuk itu diperlukan tahap-
tahap dalam menyelesaikan masalah tersebut.

INPUT dan OUTPUT merupakan awal dan akhir pengolahan suatu
data. Tanpa proses INPUT, kita tidak dapat memperoleh data untuk
diolah dan data-data yang telah selesai diolah tidak akan berarti
tanpa proses OUTPUT.

Syntax :
INPUT [;]["Prompt"{,|;}], Var list
PRINT [expresion list {,|;}]

Contoh 1 :
REM Program mencari Isi Bujursangkar
INPUT "MASUKKAN SISI BUJURSANGKAR :",S
ISI = S * S
PRINT "ISI DARI BUJURSANGKAR ADALAH :",ISI
END

Contoh 2 :
REM Program Isi Data
INPUT "MASUKKAN NAMA ANDA ";NM$
INPUT "MASUKKAN UMUR ANDA ";UR%
INPUT "MASUKKAN TGL,BLN,THN HARI INI ";TG%,BL%,TH%
PRINT "NAMA : ";NM$
PRINT "UMUR : ";UR%
PRINT "TANGGAL : ";TG%
PRINT "BULAN : ";BL%
PRINT "TAHUN : ";TH%
END

Catatan :
Untuk memberi keterangan pada program dapat digunakan REM atau '

LATIHAN

1. Aktifkan QBasic.EXE, dan anda akan dihadapkan pada suatu
WELCOME dialog box, tekan Esc untuk mengabaikannya. Selanjutnya
anda akan melihat lingkungan kerja QBasic yang terbagi atas dua
bagian : Bagian atas adalah "Jendela Editor" dan Bagian bawah
adalah "Jendela Immedietly".

2. Perhatikan letak kursor sekarang (pada Jendela Editor), tekan
function key (F6) untuk mengaktifkan Jendela Immedietly, dan (F6)
sekali lagi untuk sebaliknya.

3. Ketiklah ekspresi berikut pada jendela immedietly dengan
diawali perintah print (?).

Contoh :

1+2

diketik sebagai

? 1 + 2

Ekspresi : Hasilnya ?

1 + 2 _____ Penjumlahan
2 - 1 _____ Pengurangan
2 * 3 _____ Perkalian
5 / 2 _____ Pembagian
5 \ 2 _____ mengapa ? ____________ Pembagian bulat
5 Mod 2 _____ mengapa ? ____________ Sisa bagi
3^2 _____ Pangkat
1+2*6^2/4-1 _____ Urutan operasi
(1+2)*6^2/4-1 _____ Prioritas operasi

Tuliskan kesimpulan anda tentang :
1. Pembagian bulat ____________________________________________
2. Sisa bagi __________________________________________________
3. Urutan operasi _____________________________________________
4. Prioritas operasi __________________________________________

1 > 2 _____ lebih besar
1 < 1 _____ lebih kecil
2 = 2 _____ sama dengan
2 >= 2 _____ lebih besar atau sama
1 <= 2 _____ lebih kecil atau sama
3 <> 3 _____ tidak sama dengan

Mengapa True (-1) dan False (0) ?

(1 > 2) and (2 = 2) _____ Operasi And
(1 > 2) and (1 < 2) _____ Operasi And
(1 < 2) and (2 = 2) _____ Operasi And
(3 <> 2) and (1 > 2) _____ Operasi And

(1 > 2) and (2 = 2) _____ Operasi Or
(1 > 2) and (1 < 2) _____ Operasi Or
(1 < 2) and (2 = 2) _____ Operasi Or
(3 <> 2) and (1 > 2) _____ Operasi Or

(1 > 2) Xor (2 = 2) _____ Operasi Xor
(1 > 2) Xor (1 < 2) _____ Operasi Xor
(1 < 2) Xor (2 = 2) _____ Operasi Xor
(3 <> 2) Xor (1 > 2) _____ Operasi Xor

(1 > 2) Eqv (2 = 2) _____ Operasi Eqv
(1 > 2) Eqv (1 < 2) _____ Operasi Eqv
(1 < 2) Eqv (2 = 2) _____ Operasi Eqv
(3 <> 2) Eqv (1 > 2) _____ Operasi Eqv

(1 > 2) Imp (2 = 2) _____ Operasi Imp
(1 > 2) Imp (1 < 2) _____ Operasi Imp
(1 < 2) Imp (2 = 2) _____ Operasi Imp
(3 <> 2) Imp (1 > 2) _____ Operasi Imp

Not (1 > 2) _____ Operasi Imp
Not (2 > 2) _____ Operasi Imp

Not (1 > 2) Or (2 = 2) And (3 < 2) ______ Urutan operasi

Tuliskan kesimpulan anda tentang urutan operasi pada operator
logika.

4. Ketiklah ekspresi berikut pada jendela immedietly :

A = 123
B = 1234567890
C% = 32767
D% = 100000 Overflow, mengapa ?
D& = 100000
E$ = "Indoprog"
F$ = 123 Type mismatch, mengapa ?
G = "hendra" Type mismatch, mengapa ?
H_1 = 123 expected : end-of-statement, mengapa ?
nilai ujian = 90 Syntax error, mengapa ?
next = 5 expected : variable or end-of-statement ?
cls = 6 expected : variable or end-of-statement ?

A% = 1.2 Berapa nilai A% ?
A% = 1.5 Berapa nilai A% ?

Tuliskan kesimpulan anda tentang variabel dan nama variabel

5. Ketiklah ekspresi berikut pada jendela immedietly dengan
diawali perintah print (?).

1 + 1 ______
1 + "100" Type mismatch, mengapa ?
"A" + "B" ______

Tuliskan kesimpulan anda operator pada type data.

6. Ketiklah statement berikut pada jendela immedietly

Print "Untuk kemajuan Indonesia"

Hasilnya : __________________________________


Print "Untuk","kemajuan","Indonesia"

Hasilnya : __________________________________


Print "Untuk";"kemajuan";Indonesia"

Hasilnya : __________________________________


Print "Untuk"
Print "Kemajuan"
Print "Indonesia"
Hasilnya : _____________
_____________
_____________

Print "Untuk";
Print "Kemajuan";
Print "Indonesia"

Hasilnya : __________________________________


Print 1,2,3

Hasilnya : __________________________________, mengapa ?


Print 1;2;3

Hasilnya : __________________________________, mengapa ?


Print tab(10),"Hendra";tab(30);"Wijaya"

Hasilnya : __________________________________, mengapa ?



Input nama$
print nama$

Hasilnya :? Hendra
__________________________________


Input "Masukkan nama :", nama$
print nama$

Hasilnya :Masukkan nama : Hendra
__________________________________


Input "Masukkan nama "; nama$
print nama$

Hasilnya :Masukkan nama ? Hendra

__________________________________


Input "Masukkan nama "; nama
print nama

Hasilnya : Masukkan nama ? Hendra
Redo from start, mengapa ?

6. Program anda yang pertama.

Aktifkan ke jendela Editor
Ketiklah CODE berikut :

REM Program saya yang pertama
CLS
PRINT "Hello semua"
END

Simpan CODE diatas ke file Bab1F.Bas (gunakan menu File Save)

Jalankan program diatas (gunakan menu Run Start atau tekan F5)

7. Program dengan proses input/output

Gunakan menu File New untuk memulai program baru
Ketiklah CODE berikut :

REM Program menghitung luas persegi panjang
CLS
INPUT "Masukkan sisi panjang :", panjang
INPUT "Masukkan sisi lebar :", lebar
LUAS = panjang * lebar
PRINT "Luas persegi panjang :", LUAS
END

Simpan CODE diatas ke file Bab1G.Bas

8. Buatlah program menghitung luas lingkaran.

9. Buatlah program konversi suhu Celcius ke Farenheit, Kelvin,
Reamur.

10. Beberapa perintah pengaturan INPUT OUTPUT

Pada tulisan ini tidak diberikan contoh untuk memancing
pertanyaan pada forum diskusi :).

CLS
Membersihkan layar dengan warna latar belakang

COLOR textcolor[,textbackground[,border]]
Mengatur warna tulisan, warna latar belakang, dan
warna border layar. Adapun nomor warna yang disediakan :
/----------------\ /----------------\ /----------------\ /------------------\
| # | Warna | | # | Warna | | # | Warna | | # | Warna |
|----------------| |----------------| |----------------| |------------------|
| | | |
| 0 | Hitam | | 4 | Merah | | 8 | Abu-abu | | 12 | Merah muda |
| 1 | Biru | | 5 | Magenta | | 9 | Biru muda | | 13 | Magenta muda|
| 2 | Hijau | | 6 | Brown | | 10 | Hijau muda| | 14 | Kuning |
| 3 | Cyan | | 7 | Putih | | 11 | Cyan muda | | 15 | Putih terang|
\----------------/ \----------------/ \----------------/ \------------------/
Warna tulisan dapat dibuat berkedip dengan menambahkan 16 pada
nomor warna
Warna latar belakang hanya dapat dipilih nomor 0 s/d 7
Warna border dapat dipilih 0 s/d 15

PRINT USING formatstring; expressionlist[{,|;}]
Mencetak text dan variabel dengan format tertentu
formatstring, ekspresi string yang mengatur format pencetakkan
dengan picture sebagai berikut :
/------------Characters Picture untuk mengatur format data numerik ------------\
| # Menentukan posisi digit | - Diletakan sesudah posisi digit |
| . Menentukan posisi Desimal | mencetak tanda untuk negatif |
| , Memunculkan pemisah ribuan,jutaan | $$ Mencetak $ pada posisi kosong |
| + Menentukan posisi tanda numerik | ** Mencetak * pada posisi kosong |
|^^^^ Mencetak dalam bentuk eksponensial| **$ Combinasi $ dan ** |
|-------------------Characters Picture untuk mengatur format data string-------|
| & Mencetak seluruh string | \ \ Mencetak n+2 character, dimana|
| ! Mencetak huruf pertama dari String | n adalah jumlah spasi \ \ |
\------------------------------------------------------------------------------/

WIDTH kolom,baris
Mengatur lebar text layar 40 atau 80 kolom dan pada monitor EGA
atau VGA mengatur jumlah baris layar 25,43,50 atau 60 (tergantung
pada jenis monitor)

LOCATE [row] [,[col] [,[cursor] [,start [,stop]]]]
Memindahkan kursor pada layar ke posisi baris dan kolom tertentu.
cursor, nilai 0 cursor off, nilai 1 cursor on
start, baris awal kursor 0 s/d 31
stop, baris akhir kursor 0 s/d 31

SPC(n)
Meloncat sejumlah n spasi pada saat pencetakan dengan perintah
print.

TAB(n)
Mencetak output ke kolom n yang ditentukan.

VIEW PRINT baris_teratas To baris_terbawah
Membatasi baris teratas dan terbawah layar untuk memunculkan
tulisan.


Selengkapnya......

STRUKTUR KENDALI IF

Struktur Kendali memegang peranan yang sangat penting dalam
pembuatan program dengan komputer, tanpa adanya struktur kendali
kita hanya dapat membuat program yang sederhana dimana prosesnya
hanya dijalankan dari baris pertama sampai selesai. Pada kasus-
kasus tertentu, ada kalanya baris tertentu tidak boleh
dilaksanakan apabila kondisi tidak dipenuhi, ataupun baris-baris
tertentu harus diulang sampai suatu kondisi terpenuhi.

TEST PILIHAN

Dengan perintah test pilihan seorang programer dapat menentukan
jalur-jalur proses yang harus dikerjakan oleh komputer
berdasarkan logika tertentu.

1. Pilih Tambahan

If ekspresi logika Then
Statement
...
End If

Berfungsi menentukan apakah kondisi (ekspresi logika) memenuhi
syarat untuk melaksanakan Statement-Statement yang di samping IF
Then ataupun berada dalam Block IF Then-End If.

Contoh :

PTKP = 240000

If Nikah$ = "Y" Then
PTKP = PTKP + 120000
End If

Keterangan : Jika status nikah adalah "Y" (Ya), maka PTKP
(Penghasilan Tidak Kena Pajak) ditambah 120000


2. Pilih Antara Dua

IF ekspresi logika Then
Statement1
...
Else
Statement2
...
End If

Berfungsi menentukan Block Statement mana yang akan dilaksanakan
komputer, jika ekspresi logika menghasilkan nilai Benar maka
Statement1 akan dilaksanakan dan sebaliknya dengan Statement2.

Contoh :

If JlhAnak > 3 Then
PTKP = PTKP + (3 * 120000)
Else
PTKP = PTKP + (JlhAnak * 120000)
End If

Keterangan : Jika Jumlah Anak diatas 3 Orang, maka PTKP ditambah
360000, sebaliknya adalah JlhAnak dikali 120000.

3. Pilih Antara Banyak

IF ekspresi logika 1 Then
Statement1
...
ElseIF ekspresi logika 2 Then
Statement2
...
Else
Endif

Berfungsi menentukan Block statement yang mana akan dijalankan
oleh komputer sesuai dengan ekspresi logika yang menghasilkan
nilai benar.

Contoh :

PKP = Penghasilan - PTKP ' Penghasilan Kena Pajak 1 Bulan
PKPT = PKP * 12 ' Penghasilan Kena Pajak 1 Tahun

If PKPT <= Then
PPH = 0
ElseIF PKPT <= 25000000 Then
PPH = PKP * 0.05
ElseIF PKPT <= 50000000 Then
PPH = 1250000 + (PKPT-25000000)* 0.1
ElseIF PKPT <= 100000000 Then
PPH = 1250000 + 2500000 + (PKPT-50000000)*0.25
ElseIF PTKP <= 200000000 Then
PPH = 1250000 + 2500000 + 7500000 + (PKPT-100000000)*0.25
Else
PPH = 1250000 + 2500000 + 7500000 + 25000000 + (PKPT-
100000000)*0.35
End If

PPHB = PPH / 12 ' Pajak Penghasilan Bulan Tersebut

Keterangan : PPH dihitung berdasarkan PKPT

atau

Select Case Variabel
Case ekspresi 1
Statement1
...
Case ekspresi 2
Statement2
...
...
Case Else
...
End Select

Contoh :

Select Case PKPT
Case <= 0
PPH = 0
Case <= 25000000
PPH = PKP * 0.05
Case <= 50000000
PPH = 1250000 + (PKPT-25000000)* 0.1
Case <= 100000000
PPH = 1250000 + 2500000 + (PKPT-50000000)*0.15
Case <= 200000000
PPH = 1250000 + 2500000 + 7500000 + (PKPT-100000000)*0.25
Case ELSE
PPH = 1250000 + 2500000 + 7500000 + 25000000 + (PKPT-
100000000)*0.35
End Select

Contoh Lain :

Input "Masukkan Hari (1-7)", Hari

Select Case Hari
Case 1
Print "Senin"
Case 2
Print "Selasa"
Case 3
Print "Rabu"
Case 4
Print "Kamis"
Case 5
Print "Jumat"
Case 6
Print "Sabtu"
Case 7
Print "Minggu"
Case Else
Print "Tidak ada"
End Select

TUGAS

1. Buatlah program perhitungan Pajak Penghasilan Perorangan
untuk penghasilan bulanan !

http://www.pajak.go.id/UU/17-UU17TH00.doc


Selengkapnya......

STRUKTUR KENDALI PERULANGAN

LOOPING

Salah satu kelebihan komputer daripada manusia adalah ia tidak
pernah bosan terhadap tugas-tugas rutin. Inilah yang menyebabkan
komputerisasi selalu diterapkan terhadap tugas-tugas yang rutin.

1 Looping Counter

Digunakan untuk proses berulang yang
jumlah perulangannya
ditentukan berdasarkan perhitungan (sistem counter).

FOR counter = mulai TO selesai [STEP selisih]
Statement
...
NEXT [counter]

Contoh :

Mencetak nilai faktorial 7, dimana 7!=1x2x3x4x5x6x7

Fak = 1
For I = 2 To 7 Step 1
Fak = Fak * I ' Fak menjadi Fak * I
Next I
Print "Nilai faktorial 7 :", Fak
END

Mencetak 10 suku bilangan fibonanci yang pertama, dimana :
fibo(1) = 1
fibo(2) = 1
fibo(n) = fibo(n-1) + fibo(n-2)
sehingga hasilnya : 1,1,2,3,5,8,13,21,34,55

For I = 1 To 10 Step 1 ' Looping 10 kali
If I = 1 Then ' Jika suku ke 1
fKurangSatu = 1
Print 1
ElseIF I = 2 Then ' Jika suku ke 2
fKurangDua = 1
Print 1
Else ' Untuk suku ke n
fibo = fKurangSatu+fKurangDua
Print fibo
fKurangSatu = fKurangDua
fKurangDua = fibo
End IF
Next I
END

2 Looping Trapping

Perulangan jenis ini ditentukan berdasarkan kondisi tertentu.

Pemeriksaan diawal

DO [{WHILE | UNTIL} ekspresi logika]
Statement
...
LOOP

Contoh :

Mencari KPK dari dua bilangan

Input "Bilangan pertama :", pertama
Input "Bilangan kedua :", kedua

If pertama > kedua Then 'Jika bilangan pertama lebih besar
Lipat = pertama
Bagi = kedua
Else
Lipat = kedua
Bagi = pertama
End IF

N = 1

Do While ((Lipat*N) Mod Bagi) <> 0 'Kelipatan dinaikan jika
N = N + 1 'sisa bagi belum nol
Loop

Print "KPK kedua bilangan adalah :", (Lipat*N)
END

NB : operator matematika MOD adalah untuk sisa bagi


Pemeriksaan diakhir

DO
[statementblock]
LOOP [{WHILE | UNTIL} ekspresi logika]

Contoh :

Program password, program akan terus menanyakan password sampai
jawabannya benar.

password$ = "INDOPROG"
DO
Color 7,0
Print "Password";
Color 0,0
Input pass$

LOOP until pass$ = password$
Print "Selamat bergabung !"
END

Perintah EXIT DO dapat digunakan untuk meninggalkan proses DO -
LOOP

Contoh :

N = 1
password$ = "INDOPROG"
DO
Color 7,0
If N > 3 Then
EXIT DO
End IF
Print "Password";
Color 0,0
Input pass$
N = N + 1
LOOP until pass$ = password$
If N > 3 Then
Print "Akses ditolak !"
Else
Print "Selamat bergabung !"
End IF
END

TUGAS

1. Buatlah program menentukan bilangan yang dimasukkan merupakan
bilangan PRIMA atau tidak.

2. Buatlah program mencetak tabel pertumbuhan simpanan anda di
bank.

Jumlah simpanan ?
Suku bunga bank/tahun ?
Lama simpanan ?

Tabel pertumbuhan

------------------------------------------------------------
Tahun Awal Tahun Bunga/tahun Pajak Akhir Tahun
------------------------------------------------------------
1
2
.
.
.
Awal Tahun 1 = Jumlah simpanan
Bunga/tahun = Awal Tahun * Suku bunga bank/100
Pajak dihitung berdasarkan :
Jika Awal Tahun + Bunga/tahun > 7500000
Pajak = 20% dari Bunga/tahun
Jika tidak
Pajak = 0
Akhir Tahun = Awal Tahun + Bunga/tahun - Pajak
Awal Tahun ke n = Akhir Tahun n - 1

Selengkapnya......

VARIABEL ARRAY

Array adalah sekumpulan data yang menggunakan nama variabel yang
sama. Tiap-tiap nilai dari array disebut sebagai elemen dan memiliki
index. Setiap elemen array adalah sebuah variabel juga.


Menciptakan Variabel Array

Untuk menciptakan variabel array dapat menggunakan
perintah :

DIM variable[(subscripts)] [AS type]

Contoh :

DIM A(20) As Integer

Akan menciptakan variabel array yang bernama A yang memiliki 20
elemen (mulai dari index 0 s/d 19), yang masing-masing dapat
menampung data integer, dan memiliki nilai awal 0 (nol).


Menggunakan Variabel Array

Penggunakan Variabel Array sama saja dengan variabel biasa, cuma
kita perlu menyebutkan nomor index elemen yang diinginkan.

Contoh :

A(0) = 100
A(1) = 200
A(2) = 300

Akan mengisi nilai 100 ke elemen pertama, 200 ke elemen kedua,
dan 300 ke elemen ketiga.

Catatan : Elemen pertama dari array dimulai dengan nomor index 0

Contoh lain :

For I = 0 To 19 Step 1
Input "Masukkan Nilai :",A(I)
Next I

Akan menanyakan kepada pemakai untuk mengisi elemen pertama s/d
elemen keduapuluh.

Contoh lain :

Total = 0
For I = 0 To 19 Step 1
Total = Total + A(I) 'A(0), A(1), ..., A(19)
Next I
Print "Total :",Total

Akan menjumlahkan nilai elemen pertama s/d elemen keduapuluh ke
variabel total.

Dalam Quick Basic, kita mengenal dua jenis variabel array, yakni
dynamic array dan static array. Static array dapat kita bentuk
tanpa perintah khusus, tetapi terbatas sampai nomor index ke 10
saja tanpa dipengaruhi jumlah dimensi.

Contoh :

For I = 0 To 10 Step 1
Input "Masukkan Nilai :",B(I)
Next I
Total = 0
For I = 0 To 10 Step 1
Total = Total + B(I)
Next I
Print "Total :",Total

Program diatas dapat dijalankan tanpa kesalahan walaupun variabel
array B tidak dideklarasikan sebagai variabel array. Hal ini
karena kita menggunakan Static array yang otomatis disediakan
oleh Quick Basic, tetapi hanya terbatas sampai nomor index ke 10
saja.

Pada defaultnya index awal dari variabel array adalah dimulai
dari 0, tetapi hal ini bisa diubah dengan perintah OPTION BASE 1.

Contoh :

OPTION BASE 1
DIM A(30)

For I = 1 To 30
Input "Masukkan Nilai :",A(I)
Next I

Index awal dari variabel array dapat juga ditentukan pada saat
deklarasi.

Contoh :

DIM C(5 To 15)

For I = 5 To 15 Step 1
Input "Masukkan Nilai :",A(I)
Next I

Akan menghasilkan variabel array C, dengan elemen pertama
memiliki nomor index 5, dan elemen terakhir memiliki nomor index
15.

Anda dapat juga menggunakan fungsi LBound dan UBound untuk
mendapatkan index awal dan index akhir dari suatu array.

Contoh :

DIM C(5 To 15)

For I = LBound(C) To UBound(C) Step 1
Input "Masukkan Nilai :",A(I)
Next I


Static Array dan Dynamic Array

Pada QBasic, semua array yang dideklarasikan dengan numerik
adalah Static Array, dan array yang dideklarasikan dengan
variabel adalah Dynamic Array.

Contoh :

DIM D(30)

D adalah variabel Static Array

E = 30
DIM F(E)

F adalah variabel Dynamic Array, karena jumlah elemennya
ditentukan dengan menggunakan variabel E, dalam hal ini 30.

Perbedaan Static Array dan Dynamic Array :
1. Memory Static Array dialokasikan oleh QBasic pada awal
eksekusi program dimulai, sedangkan Memory Dynamic Array
dialokasikan secara dinamis pada saat eksekusi program
berlangsung.
2. Static Array tidak dapat dideklarasi ulang, sedangkan Dynamic
Array dapat dideklarasikan ulang dengan perintah REDIM

Contoh :

DIM A(10)
REDIM A(20)

Akan terjadi kesalahan, karena variabel A adalah Static Array.

B = 10
DIM C(B)
REDIM C(30)

Tidak terjadi kesalahan.

Catatan : REDIM akan menghapus isi array, dan mendimensi ulang
jumlah elemennya.


3. Static Array tidak dapat dihapus dari memory, sedangkan
Dynamic Array dapat dihapus dari memory dengan perintah ERASE.


OPTION BASE 1
DIM A(3)
A(1) = 1
A(2) = 2
A(3) = 3

ERASE A

Print A(1) ' akan tercetak 0
Print A(2) ' akan tercetak 0
Print A(3) ' akan tercetak 0

Karena perintah Erase hanya mereset isi variabel Static Array ke
0 (jenis numeric) atau "" (Null) (jenis string), sedangkan
Variabel dan dimensinya tetap dipertahankan.

Contoh Lain :

OPTION BASE 1
B = 3
DIM C(B)
C(1) = 1
C(2) = 2
C(3) = 3

ERASE C

Print C(1) ' terjadi kesalahan subscript out of range

Karena variabel array C telah dihapus dari memory.

Variabel Array Multi Dimensi

Anda dapat membentuk variabel array 2 atau 3 dimensi dengan
perintah dim.

Contoh :

DIM A(10,10)

Akan membentuk array 11 baris (0 s/d 10), 11 kolom (0 s/d 10)
(121 elemen)

Cara pemakaian array Multi Dimensi sama saja dengan array 1
dimensi yaitu perlu disebutkan nomor indexnya masing-masing.

Contoh :

A(2,2) = 5

Akan mengisi nilai 5 ke elemen baris 3 kolom 3 dari Array dua
dimensi A. (ingat index dimulai dari 0, kecuali dengan pernyataan
OPTION BASE 1)

Bahan Latihan

1. Susun sebuah program dengan ketentuan berikut :
- program menanyakan jumlah data
- program menerima data sesuai dengan jumlah data satu persatu
- program mengurut data tersebut secara ascending
- program menghitung :
1. data terbesar
2. data terkecil
3. rata-rata
4. median

2. Buatlah program faktur sederhana dengan ketentuan :
- program menanyakan Tanggal dan Penjual
- program menanyakan
1. Jumlah
2. Satuan
3. Nama barang
secara berulang sampai jumlah yang dimasukkan 0 (nol)
- hasil menghasilkan tampilan faktur berikut :

FAKTUR PENJUALAN

Tanggal : 01-Jan-1995
Penjual : Budianto
--------------------------------------------------------
No. Jlh Satuan Nama Barang Harga @ Jumlah
========================================================
1. 30 Kotak Diskette 3M 15,000.00 450,000.00
2. 10 Buah Pita printer 7,000.00 70,000.00
========================================================
Total : 520,000.00
--------------------------------------------------------


Selengkapnya......

FUNGSI BANTU BAWAAN

Fungsi bantu adalah fasilitas yang disediakan untuk membantu
programmer dalam mengembangkan program. Dengan adanya fungsi
bantu bawaan programmer tidak perlu mengembangkan program untuk
melakukan hal yang sama.

Contoh :
Pada Qbasic telah tersedia fungsi bantu Sinus yang
dapat
digunakan untuk mendapatkan nilai sinus dari suatu sudut dalam
radian.

Dim B As Double
B = Sin(30 * 3.14/180)

Akan mengisi nilai sinus sudut 30 derajat ke variabel B

Tanpa mengunakan fungsi bantu Sinus, programmer dapat
mengembangkan program sendiri untuk melakukan hal yang sama,
tetapi hal ini tentu saja menuntut pengetahuan yang lebih
mendalam.

Contoh :
Dengan menggunakan Ekspansi Trigonometris, suatu nilai Sinus
dapat diturunkan.

DIM S AS DOUBLE
DIM Sinus AS DOUBLE
S = 30 * 3.14 / 180 ' Sudut 30 derajat dalam radian
F = 1
Tanda = 1
Sinus = S
FOR I = 2 TO 11
F = F * I ' Menghitung nilai faktorial
IF I MOD 2 = 1 THEN ' Suku 3, 5, 7, 9, 11
Tanda = -Tanda ' Tanda -1, 1, -1, 1, dst
Sinus = Sinus + (S ^ I / F * Tanda)
END IF
NEXT I
B = Sinus

Potongan program diatas akan menghasilkan nilai Sinus 30 derajat
ke variabel B.

Dengan menggunakan fungsi bantu bawaan yang telah tersedia
pekerjaan programmer akan lebih terfokus pada program yang akan
dikembangkan.


FUNGSI BANTU STRING

LEFT$ (stringexpression,n)
Mengembalikan sejumlah karakter string dari suatu data string
dari sebelah kiri.

Contoh :
Print Left$("IndoProg",4) ' Akan mencetak Indo


RIGHT$ (stringexpression,n)
Mengembalikan sejumlah karakter string dari suatu data string
dari sebelah kanan.

Contoh :
Print Right$("IndoProg",4) ' Akan mencetak Prog


MID$(stringexpression,start[,length])
Mengembalikan sejumlah karakter string dari suatu string mulai
posisi tertentu.

Contoh :
Print Mid$("1234567890",3,4) ' Akan mencetak 3456
Print Mid$("1234567890",3) ' Akan mencetak 34567890


LTRIM$(stringexpression)
Mengembalikan string dengan menghilangkan spasi sebelah kiri.

Contoh :
A$ = " 100"
B$ = LTRIM$(A$)
Print A$ 'Akan mencetak 100
Print B$ 'Akan mencetak 100


RTRIM$(stringexpression)
Mengembalikan string dengan menghilangkan spasi sebelah kanan.

INSTR([start,]stringexpression1,stringexpression2)
Mencari posisi suatu string pada string lain (0 jika tidak
ditemukan).

Contoh :
Print INSTR("ABCD","B") 'Akan mencetak 2
Print INSTR(4,"ABCDABCD","A") 'Akan mencetak 5
Print INSTR("ABCD","a") 'Akan mencetak 0


LCASE$(stringexpression)
Mengembalikan suatu string yang telah diubah ke huruf kecil.

Contoh :
Print LCase$("IndoProg") 'Akan mencetak indoprog


UCASE$(stringexpression)
Mengembalikan string yang telah dibuat huruf besar.

Contoh :
Print UCase$("IndoProg") 'Akan mencetak INDOPROG


SPACE$(n)
Mengembalikan string yang berisi sejumlah spasi.

Contoh :
Print Space$(30), "IndoProg"


STRING$(m,n) atau STRING$(m,stringexpression)
Mengembalikan string yang mengandung sejumlah character yang
berulang.

Contoh :
Print String$(10,65) ' Akan mencetak AAAAAAAAAA
Print String$(10,"A") ' Akan mencetak AAAAAAAAAA


LEN(stringexpression)
Mengembalikan jumlah huruf suatu data string.

Contoh :
Print Len("Indonesia Programmer") ' Akan mencetak 20


FUNGSI BANTU KONVERSI

STR$(numeric-expression)
Mengembalikan string dari suatu expresi numeric

Contoh :
A = 100
B$ = Str$(A) 'B berisi "100"

VAL(stringexpression)
Mengembalikan numeric dari suatu expresi string

Contoh :
B$ = "100"
A = Val(B) 'A berisi 100
C = "IndoProg"
D = Val(C) 'D berisi 0

ASC(stringexpression)
Mengembalikan nilai ASCII dari suatu character.

Contoh :
Print Asc("A") 'Akan mencetak 65

CHR$(n)
Mengembalikan character ASCII n.

Contoh :
Print Chr$(65) 'Akan mencetak "A"


FUNGSI BANTU ARITMATIKA

SIN(numeric-expression)
COS(numeric-expression)
TAN(numeric-expression)
ATN(numeric-expression)
Mengembalikan nilai trigonometri.
numeric-expression dinyatakan dalam radian (sudut*3.14/180).

Cukup jelas


EXP(numeric-expression)
Mengembalikan nilai exponential.

Cukup jelas


LOG(numeric-expression)
Mengembalikan nilai logaritma natural.

Cukup jelas


SQR(numeric-expression)
Mengembalikan nilai akar pangkat dua.

Contoh :
Print Sqr(9) 'Akan mencetak 3

INT(numeric-expression)
Mengembalikan nilai bulat dari suatu desimal.

Contoh :
Print Int(3.5) 'Akan mencetak 3


FUNGSI BANTU RANDOM

RANDOMIZE [integer-expression]
RANDOMIZE TIMER
Memberikan bibit kepada nilai random.

RND
Mengembalikan nilai pseudo random antara 0 s/d < 1

Contoh :
Randomize Timer
Print Int(RND*100) 'Akan mencetak suatu bilangan
'random 0 s/d 99


FUNGSI BANTU WAKTU

DATE$
Mengembalikan tanggal system dalam string dengan format mm-dd-
yyyy.

TIME$
Mengembalikan waktu komputer dalam string dengan format hh:mm:ss.

TIMER
Mengembalikan jumlah detik sejak pukul 00:00:00
TIMER dapat digunakan pada perintah RANDOMIZE TIMER.

Contoh :
'PROGRAM TEBAK ANGKA
CLS
RANDOMIZE TIMER :HASIL = INT(RND*100)+1
N = 0
DO
N = N + 1
INPUT "MASUKKAN TEBAKAN ANDA (1-100)";TEBAK
IF TEBAK > HASIL THEN PRINT "TERLALU BESAR"
IF TEBAK < HASIL THEN PRINT "TERLALU KECIL"
LOOP UNTIL HASIL=TEBAK
PRINT "TEBAKAN ANDA SEBANYAK ";N;" KALI"
END

Latihan :
1. Bandingkan hasil Sinus dengan fungsi bantu Sin dan Ekspansi
Trigonometris.

2. Buatlah program putar String "Indonesia Programmer" dari kiri
ke kanan.

3. Bagaimana kalau putar dari kanan ke kiri.

4. Cobalah program tebak angka, berapa kali anda mampu
selesai menebaknya?



Selengkapnya......

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

Selengkapnya......

TYPE DATA RECORD

Record Type merupakan type ciptaan yang dibuat oleh pemakai
sesuai dengan tuntutan program. Record Type merupakan type
variabel yang terdiri dari kumpulan type-type standar Quick
Basic.


Mendeklarasikan suatu Record Type

Pada QBasic Record Type dapat dideklarasikan dengan
penulisan
berikut :

Syntax :
Type nama
AS
AS
...
End Type

Contoh :

Type PESERTA
Nomor AS String*10
Nama AS String*20
Email AS String*30
Umur AS Integer
End Type


Mendeklarasikan type data PESERTA yang merupakan kumpulan dari
data Nomor, Nama, Email, dan Umur.


Mendeklarasikan Variabel Record Type

Untuk mendeklarasikan variabel berdasarkan Record Type tertentu
dengan menggunakan perintah DIM.

Contoh :

Dim DataPeserta As PESERTA

Mendeklarasikan variabel DataPeserta yang memiliki type PESERTA,
sehingga variabel DataPeserta memiliki komponen Nomor, Nama,
Email dan Umur.


Menggunakan Variabel Record Type

Pemakaian variabel Record Type sama saja dengan variabel biasa,
dan kita juga dapat menyatakan masing-masing komponennya.

Contoh :

Dim Peserta1 As PESERTA
Dim Peserta2 As PESERTA
Dim Temp As PESERTA

Peserta1.Nomor = 9224 'komponen Nomor
Peserta1.Nama = "Hendra" 'komponen Nama
Peserta1.Email = "hendra@indoprog.com" 'Komponen Email
Peserta1.Umur = 27 'Komponen Umur

Peserta2.Nomor = 9241 'komponen Nomor
Peserta2.Nama = "Limada" 'komponen Nama
Peserta2.Email = "limada@hsbc.com" 'Komponen Email
Peserta2.Umur = 26 'Komponen Umur

Record Type banyak digunakan dalam pengolahan data, dan random
file karena menawarkan fleksibilitas dan kemudahan dalam
pemakaiannya.

Contoh :

Temp = Peserta1
Peserta1 = Peserta2
Peserta2 = Temp

atau

SWAP Peserta1, Peserta2

Menukar data Peserta1 dengan Peserta2 dan sebaliknya, tanpa perlu
menyebutkan sub komponennya. Dapatkah saudara bayangkan kalau hal
tersebut tidak menggunakan Record Type ?

Contoh :

'Program isi data siswa dan sortir

'DEKLARASI RECORD TYPE SISWA
Type SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
End Type

Input "Masukkan jumlah siswa ";JS

Dim DSiswa(JS) AS SISWA 'Deklarasi Array DSiswa
'berdasarkan Record Type SISWA
'MENGISI DATA
For I = 1 TO JS STEP 1
Print "RECORD KE -";I
Input "NO.INDUK :",DSISWA(I).NOINDUK
Input "NAMA :",DSISWA(I).NAMA
Input "TEORI :",DSISWA(I).TEORI
Input "PRAKTEK :",DSISWA(I).PRAKTEK
DSISWA(I).RATA = (DSISWA(I).TEORI+DSISWA(I).PRAKTEK)/2
NEXT I

'MENGURUT DATA BERDASARKAN NILAI RATA-RATA
For I = (JS-1) TO 1 STEP -1
Sempurna = 1
For J = 1 TO I
If DSISWA(J).RATA < DSISWA(J+1).RATA THEN
SWAP DSISWA(J),DSISWA(J+1)
Sempurna = 0
End If
Next J
If Sempurna = 1
I = 0
End If
Next I

CLS
Print " HASIL UJIAN SISWA"
Print " BASIC PROGRAMMING MEI 2001"
Print
Print "-------------------------------------------------------------------"
Print "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA LULUS "
Print "-------------------------------------------------------------------"
POLA$="\ \ \ \ ###.## ###.## ###.## \ \ "

VIEW PRINT 4 TO 23

For I = 1 TO JS
IF DSISWA(I).RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA"
PRINT USING POLA$;DSISWA(I).NOINDUK;DSISWA(I).NAMA;DSISWA(I).TEORI;
DSISWA(I).PRAKTEK;DSISWA(I).RATA;LULUS$
Next I

END


Selengkapnya......

PENGOLAHAN SEQUENTIAL FILE

File merupakan fasilitas penyimpanan data pada external storage
yang bersifat permanen, jika dibandingkan dengan penyimpanan ke
RAM yang sifatnya sementara. Dengan pemakaian file kita dapat
menghemat pemakaian RAM komputer yang memiliki jumlah yang
terbatas serta dapat melakukan dokumentasi
untuk jangka waktu
yang panjang.


Pada QBasic pengolahan file dapat dibagi atas tiga jenis, yaitu :
1. SEQUENTIAL FILE
2. RANDOM FILE
3. BINARY FILE


Pada Sequential file (file urut) proses pengolahannya dilakukan
secara linier dari awal sampai akhir, tanpa bisa kembali kebagian
sebelumnya, kecuali proses dimulai lagi dari awal. Jadi dalam
pengolahan datanya bersifat first in first out, artinya pembacaan
data dari file ini harus dimulai dari data yang paling awal.

Pada umumnya pengolahan data yang menggunakan file sebagai media
INPUT maupun OUTPUT memiliki tiga tahap, yaitu :
1. Tahap membuka file (OPEN)
2. Tahap memproses (INPUT/OUTPUT)
3. Dan yang terakhir adalah tahap menutup file (CLOSE)


Membuka File SEQUENTIAL

Untuk membuka file sequential yang akan diproses dapat digunakan
penulisan sebagai berikut :

Syntax :
Open filename [FOR mode] AS [#]filenum

dimana mode terdiri dari :
INPUT, membuka file untuk proses INPUT
OUTPUT, membuka file baru untuk proses OUTPUT
APPEND, membuka file untuk untuk proses OUTPUT dimana data baru
ditambahkan pada bagian akhir.

Contoh :
Open "Siswa.Dat" For Append AS #1

Akan membuka Siswa.Dat sebagai OUPUT dimana data baru ditambahkan
pada bagian akhir. Jika file Siswa.Dat belum ada, maka akan
dibuat yang baru.


Proses INPUT/OUTPUT

Perintah proses INPUT/OUTPUT pada sequential file sangat
tergantung kepada bentuk perlakuan terhadap data. Untuk penulisan
yang berorientasi pada baris, anda dapat menggunakan perintah
PRINT, dan pembacaanya dapat menggunakan LINEINPUT. Penulisan
yang berorientasi kepada data, anda dapat menggunakan perintah
WRITE dan INPUT untuk proses pembacaannya.

Syntax :
PRINT #filenumber,[USING stringexpressin;]expression list
WRITE #filenumber[,expressionlist]
INPUT #filenumber, variablelist
LINEINPUT #filenumber, variable-string

Contoh :

Write #1, "920403024","Hendra",80,90

menulis ke file nomor 1, dan data dapat dibaca kembali dengan
perintah :

Input #1,Nim$,Nama$,Teori,Praktek

Catatan :
Anda dapat menggunakan fungsi bantu EOF(filenumber) untuk
memeriksa apakah berada diposisi akhir file.


Proses CLOSE

Untuk menutup file dapat digunakan perintah CLOSE.

Syntax :
CLOSE #filenumber

Contoh :
CLOSE #1

menutup file nomor 1.

Contoh :

'PROGRAM MENGISI DATA KE FILE SISWA.DAT
OPEN "SISWA.DAT" FOR APPEND AS #1
DO
PRINT "DATA SISWA KE -";I
INPUT "NO.INDUK :",NOINDUK$
IF NOINDUK$ <> "" THEN
INPUT "NAMA :",NAMA$
INPUT "TEORI :",TEORI
INPUT "PRAKTEK :",PRAKTEK
WRITE #1,NOINDUK$,NAMA$,TEORI
ENDIF
LOOP UNTIL NOINDUK$ = ""
CLOSE #1
END

'PROGRAM BACA DATA DARI SISWA.DAT DAN MENCETAK KE LAYAR
CLS
OPEN "SISWA.DAT" FOR INPUT AS #1
PRINT "-------------------------------------------------------------------"
PRINT "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA LULUS "
PRINT "-------------------------------------------------------------------"
POLA$="\ \ \ \ ###.## ###.## ###.## \ \ "
VIEW PRINT 4 TO 23
WHILE NOT EOF(1)
INPUT #1, NO_INDUK$,NAMA$,TEORI,PRAKTEK
RATA = (TEORI+PRAKTEK)/2
IF RATA < 60 THEN
LULUS$="TIDAK"
ELSE
LULUS$ = "YA"
ENDIF
PRINT USING POLA$;NO_INDUK$;NAMA$;TEORI;PRAKTEK;RATA;LULUS$
WEND
CLOSE #1
END

Selengkapnya......

PENGOLAHAN FILE ACAK

Pada file sequential pengolahan datanya bersifat FIFO, tetapi
dalam pengolahan data kadang-kadang diperlukan proses pengolahan
yang sifatnya acak sehingga pengolahannya dapat dilakukan dengan
cepat dan sederhana.

File sequential banyak digunakan pada ekspor/impor data antar
sistem dimana format pada sistem yang satu tidak dikenali oleh
sistem lain, sehingga data dari suatu sistem perlu diekspor dalam
bentuk teks, kemudian diimpor kembali oleh sistem lain. Pada
pengolahan seperti ini tentu saja proses pengolahannya bersifat
FIFO.

Pengolahan data yang membutuhkan pencarian, pengurutan dan
perbaikan data tentu saja sulit menggunakan proses pengolahan
FIFO, karena akan menggunakan sumber daya yang besar dan menjadi
rumit. Pada pengolahan data seperti ini sangat dibutuhkan proses
pemasukan maupun pengambilannya berdasarkan alamat data tersebut.

Agar data dapat diambil dengan cepat, tentu saja dalam
penyimpannannya membutuhkan keteraturan, yaitu setiap data
memiliki ukuran yang sama, sehingga alamat data dapat didapatkan
dengan cepat.


FILE ACAK

File acak didalam pengolahannya data ditempatkan dalam bentuk
record yang memiliki panjang yang tertentu. Dengan sistem
pengolahan yang demikian suatu record data dapat langsung dibaca
ataupun ditulis tanpa harus memproses record sebelumnya. Dalam
hal ini type data record akan berperan.

Contoh :

TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
Dim DAT As SISWA

Perintah pengolahan file ACAK


1. Perintah membuka file ACAK

Sebelum suatu file randon dapat digunakan harus dibuka, jika file
tersebut belum ada, maka akan dibuat yang baru. Adapun perintah
membuka file ACAK adalah sebagai berikut :

OPEN namafile FOR RANDOM AS [#]filenum [LEN=reclen]

Contoh :

OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)

Membuka file "siswa.rec" untuk diolah secara acak sebagai file
nomor 1 dan ukuran tiap record adalah sama dengan ukuran variabel
DAT.


2. Mendapatkan jumlah record pada file ACAK yang telah terbuka.

JlhRec = LOF(1)/LEN(DAT)

Jumlah record dalam file ACAK adalah ukuran keseluruhan file ACAK
dibagi dengan ukuran tiap record.


3. Perintah input/output pada file ACAK

Perintah menulis data

PUT [#]filenum[,nomorrecord][,variable]

Contoh :

DAT.NOINDUK = "920403024"
DAT.NAMA = "Hendra"
DAT.TEORI = 70
DAT.PRAKTEK = 80
DAT.RATA = (DAT.TEORI+DAT.PRAKTEK)/2

PUT #1,JlhRec+1,DAT

Menyimpan data dari variabel DAT ke file ACAK nomor 1, sebagai
record baru pada akhir file (JlhRec+1).


Perintah membaca data

GET [#]filenum[,nomorrecord][,variabel]

Contoh :

GET #1,1,DAT

Membaca data record nomor 1 dari file ACAK nomor 1 ke variabel
DAT.


4. Perintah menutup file ACAK
Setelah selesai digunakan, file ACAK perlu ditutup untuk
memastikan semua data ditulis ke media penyimpanan, dan
memberikan indikator EOF.

Contoh :

CLOSE #1

Menutup file acak nomor 1.


Contoh sederhana program pengolahan data dengan file ACAK.

'PROGRAM MENGISI DATA KE FILE SISWA.REC
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT AS SISWA
DIM NOINDUK AS STRING
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
RECNO = LOF(1)/LEN(DAT)
DO
PRINT "DATA SISWA KE -";I
INPUT "NO.INDUK :",NOINDUK
IF NOINDUK <> "" THEN
DAT.NOINDUK = NOINDUK
INPUT "NAMA :",DAT.NAMA
INPUT "TEORI :",DAT.TEORI
INPUT "PRAKTEK :",DAT.PRAKTEK
DAT.RATA = (DAT.TEORI+DAT.PRAKTEK)/2
PUT #1,RECNO+1,DAT
RECNO = RECNO + 1
ENDIF
LOOP UNTIL NOINDUK = ""
CLOSE #1
END

'PROGRAM MENGURUT DATA DI FILE SISWA.REC
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT1 AS SISWA
DIM DAT2 AS SISWA
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
JD = LOF(1)/LEN(DAT)
FOR I = (JD-1) TO 1 STEP -1
Sempurna = 1
FOR J = 1 TO I STEP 1
GET #1,J,DAT1
GET #1,J+1,DAT2
IF DAT1.NAMA > DAT2.NAMA THEN
PUT #1,J,DAT2
PUT #1,J+1,DAT1
Sempurna = 0
ENDIF
NEXT J
If Sempurna = 1 Then
I = 0
End IF
NEXT I
CLOSE #1
END

'PROGRAM BACA DATA DARI SISWA.REC DAN MENCETAK KE LAYAR
CLS
TYPE SISWA
NOINDUK AS STRING * 10
NAMA AS STRING * 15
TEORI AS SINGLE
PRAKTEK AS SINGLE
RATA AS SINGLE
END TYPE
DIM DAT AS SISWA
OPEN "SISWA.REC" FOR RANDOM AS #1 LEN = LEN(DAT)
JD = LOF(1)/LEN(DAT)
PRINT -------------------------------------------------------------------"
PRINT "NO.INDUK NAMA TEORI PRAKTEK RATA-RATA ULUS "
PRINT "-------------------------------------------------------------------"
POLA$="\ \ \ \ ###.## ###.## ###.## \ \ "
VIEW PRINT 4 TO 23
FOR I = 1 TO JD STEP 1
GET #1,I,DAT
IF DAT.RATA < 60 THEN LULUS$="TIDAK" ELSE LULUS$ = "YA"
PRINT USING POLA$;DAT.NOINDUK;DAT.NAMA$;DAT.TEORI;
DAT.PRAKTEK;DAT.RATA;LULUS$
NEXT I
CLOSE #1
END


LATIHAN

1. Buatlah program untuk mengisi data ke file PEGAWAI.REC.

NAMA GOL JAM KERJA
SURYAJAYA A 50
SUTIMAN C 48
JUSMAN B 60
WIJAYA A 50
YUSNI B 48
TUTI A 45

2. Buatlah program mengurut data pada PEGEWAI.REC berdasarkan
nama.

3. Buatlah program membaca data dari file PEGAWAI.REC dan
menghasilkan laporan dengan ketentuan.

- Gaji Pokok PEGAWAI ditentukan sebagai berikut :
Golongan Gaji Pokok/Bulan
A Rp. 175.000,00
B Rp. 220.000,00
C Rp. 350.000,00
- jika jam kerja > 48 jam diberikan Bonus = (jam kerja - 48) * 5000/jam
- jika jam kerja < 48 jan dikenakan Potongan = (48 - jam kerja) * 1000/jam
- Total Gaji = Gaji Pokok + Bonus - Potongan
Output yang diharapkan :

P.T. JAYA WIJAYA
JL. Kemerdekaan Barat No. 12
============================

LAPORAN GAJI PEGAWAI
========================================================
Nama Gol Jam Gaji Bonus Potongan Total
Pegawai Kerja Pokok (Rp) (Rp) (Rp)
--------------------------------------------------------
Suryajaya C 50 350,000 10,000 - 360,000
Sutiman B 48 200,000 - - 200,000
========================================================
Total : 560,000
========================================================






Selengkapnya......

PENGOLAHAN FILE BINARY

Selain pengolahan data Sequential dan Random, QBasic juga
menyediakan pengolahan yang bersifat Binary. Pada pengolahan yang
bersifat Binary, file dapat dibaca/ditulis secara per-Byte pada
posisi yang diinginkan, sehingga tidak terikat kepada urutan
maupun struktur data.

Pengolahan yang bersifat Binary banyak digunakan untuk keperluan-
keperluan khusus yang membutuhkan akses langsung ke satuan data
di tingkat Byte. Misalnya membuat program Enkripsi dan Dekripsi
file, pada proses Enkripsi, isi suatu file disandikan byte-per-
byte sehingga tidak dapat dikenali lagi secara normal oleh sistem
yang membuatnya. Agar isi file tersebut dapat dikenali kembali,
maka diperlukan proses Dekripsi yang mengembalikannya ke keadaan
semula.

Pengolahan yang bersifat Binary juga banyak digunakan pada
pembuatan program AntiVirus, Crack, Game Cheat yang membutuhkan
akses ke byte level.


1. Perintah membuka file Binary

Seperti pada pengolahan file umumnya, sebelum digunakan file
binary harus dibuka dengan perintah sebagai berikut :

OPEN namafile FOR BINARY AS [#]filenum

Contoh :

OPEN "Sandi.bin" FOR BINARY AS #1

Membuka file "Sandi.bin" untuk diolah secara binary sebagai file
nomor 1.


2. Mendapatkan jumlah byte pada file binary yang telah terbuka.

JlhByte = LOF(1)

Fungsi LOF (Length Of File) akan mengembalikan ukuran file binary
dalam ukuran byte.

Catatan : 1 KB = 1024 Byte, 1 MB = 1024*1024


3. Perintah input/output pada file Binary

Perintah menulis data

PUT [#]filenum[,posisi][,variable]

Contoh :

MyData = 10
PUT #1, 101, MyData

Menulis karakter ASCII 10 (line feed) pada posisi byte ke 101
dalam file nomor 1.

Contoh Lain :

Dim MyChar As String*1
MyChar = Chr$(10)
Put #1, 101, MyChar


Perintah membaca data

GET [#]filenum[,posisi][,variabel]

Contoh :

Dim MyChar As String*1
GET #1, 101, MyChar

Membaca data byte posisi ke dari file nomor 1 ke variabel
MyChar.


4. Perintah menutup file Binary

Setelah selesai digunakan, file Binary perlu ditutup untuk
memastikan semua data ditulis ke media penyimpanan, dan
memberikan indikator EOF.

Nb. Untuk mempercepat proses I/O, sistem operasi menyediakan
memory buffer sebagai tempat pembacaan dan penulisan sementara.
Perintah Close untuk memastikan semua data dari buffer benar-
benar ditulis ke media penyimpanan.

Contoh :

CLOSE #1

Menutup file binary nomor 1.

Contoh :

'Program Enkripsi dan Dekripsi dengan kunci NOT

DIM Source AS STRING
DIM Target AS STRING
DIM FSize AS LONG
DIM MyChar AS STRING * 1
CLS
PRINT "Program Enkripsi/Dekripsi Data"
PRINT "Menggunakan operator NOT"
PRINT "------------------------"
INPUT "Masukkan Source :", Source
INPUT "Masukkan Target :", Target

IF Source = Target THEN
PRINT "Nama file source tidak boleh sama dengan target"
ELSE
OPEN Source FOR BINARY AS #1 'Buka source sebagai 1
OPEN Target FOR BINARY AS #2 'Buka target sebagai 2

FSize = LOF(1) 'Mendapatkan ukuran file 1

FOR I = 1 TO FSize
GET #1, I, MyChar 'Baca byte posisi ke i
'dari source
MyChar = CHR$(255 - ASC(MyChar)) 'Enkripsi dengan NOT

PUT #2, I, MyChar 'Tulis ke posisi ke i
'Pada Target
NEXT I
CLOSE #1
CLOSE #2
PRINT
PRINT "Proses Selesai"
END IF
END


'Program Menghilangkan Password file *.Mdb Microsoft Access 97

Dim nama As String
Dim huruf As String*1

INPUT "Masukkan nama file :",nama

IF Dir$(nama) = "" THEN

PRINT "File ";nama;" tidak ada !"

ELSE
OPEN nama FOR BINARY AS #1

huruf = Chr$(134)
PUT #1, 66, huruf

CLOSE #1

PRINT "Password ";nama;" telah dihilangkan !"

END IF
END

Selengkapnya......

PENGOLAHAN FILE KOMUNIKASI

Pada QBasic tersedia fasilitas untuk melakukan komunikasi data
melalui interface RS232 pada Serial Port COM1 dan COM2 yang
diperlakukan seperti pengolahan file.

Pada fasilitas perkantoran peralatan seperti PABX dapat
dihubungkan dengan PC melalui interface RS232 pada Serial Port
COM1 maupun COM2 untuk mendapatkan CMDR log dari pemakaian
telepon.

Dengan menggunakan fasilitas pada QBasic, anda dapat membuat
program untuk membaca data CMDR dari Serial Port COM1 maupun COM2
untuk disimpan maupun diolah menjadi informasi yang lebih baik,
misalnya perhitungan tarif pemakaian telepon tiap individu.


1. Perintah membuka dan menginisialisasi saluran komunikasi

Perintah OPEN COM harus dilakukan sebelum peralatan dapat
digunakan untuk komunikasi melalui interface RS232.

OPEN "COMn: list1 list2" FOR RANDOM AS [#]nomor]

dimana :
n adalah nomor port komunikasi yang ingin dibuka
(1 = COM1, 2 = COM2).

list1 adalah parameter komunikasi yang sering digunakan :
[baud] [,[parity] [,[data] [,[stop]]]]

baud adalah baud rate dari peralatan yang dibuka :
75, 110, 150, 300, 600, 1200, 2400, 4800, 9600

parity adalah metode dari pemeriksaan pariti :
N (none) E (even) O (odd)
S (space) M (mark) PE (enable error checking)

data adalah jumlah data bit setiap byte :
5, 6, 7, 8

stop adalah jumlah stop bit :
1, 1.5, 2

Defaultnya: 300 baud, even parity, 7 data bits, 1 stop bit.

list2 adalah parameter komunikasi yang jarang digunakan yang
dipisahkan dengan koma.

Option Description

ASC Opens the device in ASCII mode.
BIN Opens the device in binary mode.
CD[m] Sets the timeout period (in milliseconds) on the
Data Carrier Detect (DCD) line.
CS[m] Sets the timeout period (in milliseconds) on the
Clear to Send (CTS) line.
DS[m] Sets the timeout period (in milliseconds) on the
Data Set Ready (DS) line.
LF Sends a line-feed character after a carriage
return.
OP[m] Specifies how long (in milliseconds) OPEN COM
waits for all communications lines to become open.
RB[n] Sets the size (in bytes) of the receive buffer.
RS Suppresses detection of Request to Send (RTS).
TB[n] Sets the size (in bytes) of the transmit buffer.

Contoh :

OPEN "COM1:300,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1

Akan membuka Serial Port COM1 sebagai file nomor 1, mengenai
parameter komunikasi sangat bergantung kepada setting pabrik
peralatan tersebut.


Membaca dari peralatan yang terbuka

INPUT$(n,nomor)

dimana
n adalah jumlah karakter yang dibaca.
nomor adalah nomor file yang terbuka.

Contoh :

A$ = Input$(1,1)

Dimana akan menbaca 1 huruf dari file nomor 1


Mengirim data ke peralatan yang terbuka

Anda dapat menggunakan perintah print untuk mengirim data ke
peralatan yang terbuka.

Print #nomor, ekspresi

Contoh :

Print #1, "A"

Akan mengirim huruf "A" ke file nomor 1


Memeriksa keberadaan data pada Receive Buffer file komunikasi.

Anda dapat menggunakan fungsi LOC(nomorfile) untuk mengetahui
apakah input buffer dalam keadaan kosong atau berisi data.


Contoh :

OPEN "COM1:300,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1

DO

tekan$ = INKEY$
IF tekan$ <> "" THEN
PRINT #1, tekan$; 'Kirim apa yang ditekan
END IF
IF LOC(1) <> 0 THEN 'Jika ada data pada Recieve Buffer
baca$ = INPUT$(1, 1) 'Baca satu huruf
PRINT baca$;
END IF

LOOP

CLOSE #1


Program diatas adalah contoh Chatting sederhana melalui kabel
LapLink antara dua komputer yang dihubungkan melalui COM1.


Menutup file

Untuk menutup file, anda dapat menggunakan perintah close.

Close #nomor

Contoh :

Close #1


Contoh program komunikasi RS232 antara Pabx Rolm vscbx dengan PC
melalui COM1, untuk maintenance :

OPEN "COM1:300,E,7,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1

DO

tekan$ = INKEY$

IF tekan$ <> "" THEN
PRINT #1, tekan$; 'Kirim apa yang ditekan
END IF

IF LOC(1) <> 0 THEN 'Jika ada data pada Recieve Buffer
baca$ = INPUT$(1, 1) 'Baca satu huruf
PRINT baca$;
END IF

LOOP

CLOSE #1


Contoh program komunikasi RS232 antara Pabx Rolm vscbx dengan PC
melalui COM2, untuk CMDR Log :

OPEN "COM2:1200,E,7,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1
OPEN "CMDR.LOG" FOR BINARY AS #2

JlhByte = LOF(2)

DO

tekan$ = INKEY$

IF LOC(1) <> 0 THEN 'Jika ada data pada Recieve Buffer
baca$ = INPUT$(1, 1) 'Baca satu huruf
JlhByte = JlhByte + 1
PUT #2, JlhByte, Baca$
PRINT baca$;
END IF

LOOP UNTIL tekan$ <> ""

CLOSE #1

CLOSE #2


Selengkapnya......

PENANGANAN ERROR

Sebagai manusia normal tidak akan terlepas dari berbagai
kesilapan, demikian juga seorang programmer dalam pengembangan
program dapat saja berbuat berbagai kesalahan maupun kesilapan.

Berdasarkan jenisnya kesalahan dalam pemrograman terbagi menjadi
tiga yaitu :
1. Syntax Error, adalah kesalahan yang disebabkan oleh kesalahan
tata cara penulisan tanda baca, kesalahan pemakaian operator dan
nilai. Kesalahan jenis ini akan dengan mudah dideteksi oleh
kompiler maupun interpreter.

2. Logical Error, adalah kesalahan yang disebabkan oleh kesalahan
logika maupun model atau metode yang digunakan untuk pemrosesan
data, sehingga menyebabkan informasi yang dihasilkan menjadi
salah. Kesalahan ini tidak dapat dideteksi oleh kompiler maupun
interpreter, kesalahan ini disadari setelah melihat penyimpanan
pada saat proses maupun hasil proses.

Contoh :

N = 1
Do
Print N
N = N + 2
Loop Until N = 10

Program diatas tidak pernah berhenti, karena nilai N tidak pernah
sama dengan 10.

Kesalahan Logika dapat juga terjadi karena kesalahan pengetikan
nama variabel, dan ini merupakan salah satu kelemahan bahasa
pemrograman Basic, jika dibandingan dengan Pascal muapun C
Language dimana variabel harus dideklarasikan terlebih dahulu.

Contoh :

GajiPokok = 1000000
Bonus = 10000
GajiBersih = GajiPokol + Bonus
Print GajiBersih 'Hasilnya 10000, bukan 1010000

3. Runtime Error, adalah kesalahan yang disebabkan oleh tidak
tersedianya sumber daya atau kondisi yang normal bagi program
untuk berjalan dengan baik, misalnya kekurangan memori komputer,
disk full, atau pintu drive tidak terkunci, dll.

Sebagai programmer yang baik, tentu saja harus mampu menghasilkan
program dengan tingkat kesalahan yang minimal, dan usaha untuk
meminimalisasi tingkat kesalahan program disebut proses debug.

Pada QBasic tersedia berbagai fasilitas untuk menangani kesalahan
yang mungkin dilakukan oleh programmer, misalnya :

1. Fasilitas Syntax Checking pada menu Option yang sangat berguna
untuk mendeteksi kesalahan jenis "Syntax Error".

2. Menu Debug, yang memiliki fasilitas yang sangat bermanfaat
untuk melacak Logical Error, tetapi keberhasilannya sangat
tergantung kepada pemahaman programmer akan masalah yang terjadi.
Adapun fasilitas pada menu Debug adalah sebagai berikut :

a. Step atau F8, digunakan untuk menjalankan program baris per
baris, sehingga programmer dapat mengamati alur program secara
baris perbaris sambil mengevaluasi hasil output yang dihasilkan.

b. Procedure Step atau F10, digunakan untuk menjalankan program
baris per baris tanpa masuk ke bagian sub rutin, artinya sub
rutin dianggap sebagai satu baris dari program. Fasilitas ini
digunakan jika programmer telah yakin pada kebenaran sub rutin
yang dibuat, sehingga proses pencarian lebih terfokus pada bagian
tertentu.

c. Trace On, digunakan untuk memberikan sorotan pada baris yang
sedang dijalankan.

d. Toggle BreakPoint, digunakan untuk menandai baris dimana
proses eksekusi Pause dan masuk ke modus Step, fasilitas ini
dapat digunakan programmer untuk memperkecil jangkauan pencarian
kesalahan dengan modus Step karena tidak perlu melakukan Step
dari awal, tetapi Step dilakukan mulai pada baris dimana sumber
kesalahan dicurigai.

e. Clear Breakpoint, digunakan untuk menghapus semua Breakpoint.

f. On Error Goto label, digunakan untuk error handling, dimana
jika terjadi kesalahan, maka proses program dialihkan ke label
tertentu, dan jenis kesalahan dapat ditelusuri dari fungsi ERR
yang akan mengembalikan nomor kesalahan, dan proses dapat
diulangi dengan RESUME atau RESUME NEXT , dan anda dapat juga
menggunakan On Error Resume Next untuk mengabaikan kesalahan.
Fasilitas ini cocok untuk mengatasi Run Time Error,

Contoh :

ON ERROR GOTO Salah
OPEN "A:Sumber.Dat" FOR INPUT AS #1
DO WHILE NOT EOF(1)
LINE INPUT #1, Baris$
PRINT Baris$
LOOP
END
Salah:
SELECT CASE ERR
CASE 53

PRINT "File Sumber.Dat tidak ada"
END
CASE 71

PRINT "Drive tidak siap, [U]lang, [B]atal";
INPUT tanya$
IF tanya$ = "U" OR tanya$ = "u" THEN
RESUME
ELSE
END
END IF
END SELECT
END

Catatan : Nomor Error dapat dilihat pada bagian Help QBasic
"Runtime Error Code"


Selengkapnya......

AKSES LOW LEVEL

QBasic menyediakan beberapa perintah dan fungsi untuk akses Low
Level seperti akses memory langsung maupun akses ke nomor port
tertentu. Walaupun fasilitas Low Level yang disediakan sangat
terbatas jika dibandingkan dengan akses Low Level Turbo Pascal
maupun C Language.

Akses Low Level sangat menarik bagi programmer-programmer muda,
karena mampu menghasilkan proses-proses yang tidak mungkin
dilakukan dengan menggunakan pemrograman yang
yang normal.

Beberapa perintah QBasic yang berkaitan dengan akses Low Level
adalah :

DEF SEG = alamat_segment

PEEK(alamat_offset), digunakan untuk mengambil data byte yang
dari alamat memori segment:offset.

POKE alamat_offset, ekspresi, digunakan untuk mengisi ekspres
byte ke alamat memori segment:offset

OUT nomor_port, ekspresi, digunakan untuk mengakses port dengan
nilai ekspresi.

INP(nomor_port), digunakan untuk mengambil nilai dari port.

Contoh :

'Anda dapat mengetahui tanggal ROM BIOS anda dengan menggambil
'8 byte mulai dari alamat FFFF:0005

CLS
PRINT "Tanggal Bios komputer anda :";
'Set Data Segment ke hexa FFFFF
DEF SEG = &HFFFF
FOR i = 0 TO 7
'Mencetak byte per byte dari offset hexa 0005
PRINT CHR$(PEEK(i + 5));
NEXT i


'Anda dapat mengetahui jumlah RAM komputer anda dengan menggambil
'1 word (1 word = 2 byte) dari alamat 0040:0013
'Dalam hal ini RAM adalah konventional Memory

'Set Data Segment ke hexa 0040
DEF SEG = &H40
RAM = PEEK(&H13) + PEEK(&H14) * &H100
PRINT
PRINT "Jumlah konventional Memory :"; RAM; "KB"

'Pada jaman kejayaan DOS, dan diskete sebagai media penyimpanan,
'Virus Boot adalah Virus yang sangat terkenal misalnya Virus
'C Brain, Stoned, MichaelAngelo
'Salah satu metode melacak keberadaan Virus Boot di memory komputer
'kita adalah memeriksa konventional Memory komputer
'Jika jumlahnya < 640, maka komputer dicurigai mengandung Virus Boot


'Anda dapat menggambil Real Time Clock PC dengan memanfaatkan
'Port 70H dan 71H, pada register :
' 00 RTC seconds
' 02 RTC minutes
' 04 RTC hours
' 06 RTC day of week
' 07 RTC day of month
' 08 RTC month
' 09 RTC year
'Masukkan register yang akan dibaca/tulis ke port 70h
'baca/tulis pada port 71h

PRINT "Tanggal menurut RTC :";
OUT &H70, &H6
PRINT HEX$(INP(&H71)); "/";
OUT &H70, &H8
PRINT HEX$(INP(&H71)); "/";
OUT &H70, &H9
PRINT HEX$(INP(&H71))

DO
LOCATE 13, 35
OUT &H70, 0
PRINT HEX$(INP(&H71)); ":";
OUT &H70, 2
PRINT HEX$(INP(&H71)); ":";
OUT &H70, 4
PRINT HEX$(INP(&H71))
LOOP UNTIL INKEY$ <> ""


'Anda dapat Menghapus Setting BIOS dengan kode berikut
'Diambil dari software BIOS 3.1 Crack
'
'Catatan : Jangan mencoba program ini tanpa pengetahuan tentang
'setting BIOS, segala yang anda lakukan adalah resiko anda
'sendiri
'
'mov dx, 070h
'mov al, 02Eh
'out dx, al
'inc dx
'xor al, al
'out dx, al
'mov dx, 070h
'mov al, 02Fh
'out dx, al
'inc dx
'xor al, al
'out dx, al
'int 20h
'
'Adapun Kode QBasicnya adalah sebagai berikut :
'
PRINT "Program reset BIOS"
PRINT "Proses ..."
OUT &H70, &H2E
OUT &H71, &H00
OUT &H70, &H2F
OUT &H71, &H00
PRINT "Selesai !"
END

Selengkapnya......