LISTING PROGRAM. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ShowInputForm End Sub

dokumen-dokumen yang mirip
KARTU BIMBINGAN TUGAS AKHIR MAHASISWA

LAMPIRAN. Source Code Program Untuk MDI Utama

SURAT KETERANGAN Hasil Uji Program Tugas Akhir

Field Tipe Data Size Keterangan userid Text 12 Primary key namauser Text 30 - password Text 8 - akses Text 10 -

1. Rancangan Input Program Form Menu Utama Form Data Barang [ Input Barang ]

Me.Picture = LoadPicture(App.Path & "\pakar.jpg") App.HelpFile = App.Path & "\Help.hlp" End Sub

FORM LOGIN. Option Explicit. Private Sub cmdexit_click() End End Sub

1. Buka Visual Basic 6 sobat. Buat project baru, masukkan componen Microsoft Winsock Control 2. Masukkan coding berikut

KONEKSI VB DENGAN MYSQL (Wajib, S.Pd.)

PRAKTIKUM 4 ARRAY DAN SUB ROUTINE

Pertemuan III MENYIMPAN REKAMAN (RECORD) KE DALAM BASIS DATA

Tutorial, Source code, Request Program Visual Basic

DAFTAR PUSTAKA. Multimedia Control, Steven Holzner. Diakses pada tanggal 14/09/2011 Dari

Listing Program a. Form Login. Public LoginSucceeded As Boolean

L-2. Listing Program Form Utama. Private Sub Form_Activate() Option3.SetFocus End Sub. Private Sub MnuKeluar_Click() End End Sub

Praktekum VB 6.0 I. KOTAK PESAN. Contoh syntax kotak pesan

BAB IV IMPLEMENTASI DAN PENGUJIAN

BAB-2 : TIPE DATA, VARIABEL DAN OPERATOR

LISTING PROGRAM. Script Menu Utama Pada Game Tebak Kata

LISTING PROGRAM. lbljalan.caption = "Selamat Menggunakan Kamus Digital Istilahistilah

BAB IV IMPLEMENTASI DAN PENGUJIAN

Basic Programing Visual Basic

DAFTAR PUSTAKA. Azar, Betty Schrampfer Fundamental of English Grammar. New Jersey: Prentice- Hall, Inc.

BAB IV IMPLEMENTASI DAN PENGUJIAN

Cepat Mahir Visual Basic 6.0. Cepat Mahir Visual Basic 6.0. Bab 13 Penanganan Keyboard. Krisna D. Octovhiana

HandleError: MsgBox "Proses tidak bisa dikerjakan.", vbinformation, "Perhatian" On Error GoTo 0 End Sub

Listing Program. 1. Loading. 2. Home. Option Explicit. Dim isplash As Integer. Private Sub Timer1_Timer() On Error Resume Next. isplash = isplash + 5

DISUSUN OLEH : : Friska Rosalina NIM :

KODE PROGRAM FORM PENJUALAN

MODUL PRAKTEK PEMROGRAMAN VISUAL PRODI T. INFORMATIKA UNISLA SEMESTER VI Tanggal 8 Juni 2010 KALKULATOR

Kartu Bimbingan Tugas Akhir Mahhasiswa

BAB IV PERANCANGAN. Gambar diatas adalah tampilang awal ketika ingin memulai project baru. Pilih Standart EXE untuk memulai project.

Private Sub cmdprint_click() WebBrowser1.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DODEFAULT End Sub

Iman Adrianto

MetaMessage Desain Form MetaMessage

SURAT KETERANGAN. Hasil Uji Program Tugas Akhir

BAB IV IMPLEMENTASI DAN PENGUJIAN

KARTU BIMBINGAN TUGAS AKHIR MAHASISWA

Universitas Sumatera Utara

Koneksi Visual Basic 6.0 dengan SQL SERVER 2000


Program absen dengan menggunakan visual basic 6.0

VISUAL BASIC 6.0 SETYO BUDI, M.KOM

Gambar 1 Table Petugas. Gambar 2 Penambahan Komonen Pada Form

BAHASA PEMROGRAMAN (LISTING PROGRAM)

Tambahkan Form Baru untuk pengisian user login (password pemakaian) dan simpan dengan nama frmlogin

1. Kompetensi Memahami berbagai teknologi pemrograman basis data, khususnya MySQL, pada Visual Basic 6.0.

'...mengambil dan menjalankan perintah yang dituliskan oleh user...

PENGEMBANGAN PERANGKAT LUNAK UNTUK SIMULASI SCHNORR AUTHENTICATION DAN DIGITAL SIGNATURE SCHEME

PERTEMUAN KE-6 STRUKTUR PERULANGAN (menggunakan Loop dan Timer)

Membuat Form Input Barang (Untuk Server)

Visual Basic 6.0 For Beginners

BAB 4 : USER INTERFACE

Kode Program : Koneksi. Klik Kanan Adobrg Pilih ADODC Properties Maka akan muncul tampilan sbb: Instruktur : Nani Purwati

Praktikum 4 Program Aplikasi Bisnis Imam Gunawan, M. Kom 1. Tambahkan tabel berikut, pada database stockgudang :

LAMPIRAN A: LISTING PROGRAM

Pemrograman Database dengan perintah SQL

E-Trick Visual Basic 6.0

Langkah ke 2 yaitu buat database form bukunya seperti gambar dibawah ini

DATA. No Nama Bagian NRK Jabatan Golongan Pendidikan. 1 Ahmad Akbar PL Tukang Listrik Sounsistim IC/0 STM

Copyright by : ipi-leppindo jambi all reserved 2014 (japikinfo.com)

MEMBUAT LAPORAN (DATA REPORT)

MODUL D :// Mahasiswa memahami konsep pembuatan database. Mahasiswa memahami konsep pembuatan program dasar aplikasi database

Krisna D. Octovhiana

Pertemuan-1 TIPE DATA STRUKTUR

Keterangan : Integer Long : tipe data untuk angka bulat Single, Double : tipe data untuk angka pecahan/desimal Currency : tipe data untuk angka mata

BAB IV IMPLEMENTASI DAN PENGUJIAN


BAB 3 TOOLBAR CUSTOMIZE DAN CONTROL TOOLBOX

BAB V PROSEDUR DAN FUNGSI


Cropping_Merging_Transparent

Listing Program. Listing Form Login. Listing Form Menu Utama Private Sub MnDataPenerbangan_Click() FR_Penerbangan.Show 1 End Sub


LAMPIRAN WAWANCARA. Berikut adalah hasil selengkapnya wawancara dengan pihak perusahaan untuk

Praktikum-19 AMIK-STMIK JAYANUSA Imam Gunawan, M. Kom FORM BARANG MASUK

MODUL IV PERULANGAN ( LOOPING )

LISTING PROGRAM. tanya = MsgBox("Apakah Anda yakin akan menghapus. kata : " & txtword.text & "?", vbquestion + gadoconn.

Bab 7 Komponen Dasar Visual Basic 29 BAB VII KOMPONEN DASAR VISUAL BASIC TUJUAN PRAKTIKUM

P5 Variabel, Tipe Data dan Operator

OPERASI FILE Operasi File Dalam Visual Basic Membuka File

Pertemuan 7 Pelunasan Hutang

Coding : Coding : Oleh : Uus Rusmawan Hal - 1

Bahasa Pemrograman-1 (Visual Basic)

PROGRAM RENTAL VCD DENGAN MICROSOFT VISUAL BASIC 6.0

4. Lalu klik Worksheet List Car dan buat kolom seperti ini :

j = dengan menggunakan fungsi aktivasi untuk menghitung sinyal outputnya:

LISTING PROGRAM. Kode Form Splash Screen. Private Sub Form_Load() lblversion.caption = "Version " & App.Major & "." & App.Minor & "." & App.

SNIPTEK 2014 ISBN: SISTEM INFORMASI AKUNTANSI JURNAL UMUM TELKOMSEL SUKABUMI

BAB III PEMBAHASAN MASALAH

SISTEM INFORMASI PENJUALAN GROSIR BUKU DI TOKO PUSTAKA ILMU PONOROGO

Program Enkripsi & Dekripsi sederhana menggunakan Visual Basic 6.0

Form Pemasok. Interface. Listing Program. Form Pemasok. Dim koneksi As ADODB.Connection Dim rspemasok As ADODB.Recordset. Dim cari As String

Algoritma Pemrograman 2 B

RINGKASAN HASIL WAWANCARA

BAB 1 PENDAHULUAN. Sistem operasi merupakan suatu program yang bertindak sebagai interface antara user

BAB IV IMPLEMENTASI DAN PENGUJIAN

Modul Database dan Pengaksesannya dari FORM #1

LISTING PROGRAM. 1. Listing Flash Pembuka. Private Sub Timer1_Timer() ProgressBar1.Value = ProgressBar1.Value + 4. If ProgressBar1.

8. Leong, Marlon Dari Programer untuk Programer Visual Basic.

Transkripsi:

LISTING PROGRAM 1. Listing Menu Utama Option Explicit Private ntime As Integer Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ShowInputForm Private Sub Form_Load() ntime = 0 Private Sub Image1_Click() ShowInputForm Private Sub Timer1_Timer() ntime = ntime + 1 If ntime = 5 Then Timer1.Enabled = False ShowInputForm Private Sub ShowInputForm() Unload Me frminput.show 2. Listing Menu Input Option Explicit Private Sub cbosolusi_click() Select Case cbosolusi.listindex Case 0 lblsolusi = "Tidak menggunakan solusi untuk mencegah " &_ "kondisi deadlock." Case 1 lblsolusi = "SOLUSI-A : Mengijinkan paling banyak 4 filsuf_ " & "yang duduk bersama-sama pada satu meja." Case 2 lblsolusi = "SOLUSI-B : Mengijinkan seorang filsuf_ mengambil " & "sumpit hanya jika kedua sumpit itu ada."

Case 3 lblsolusi = "SOLUSI-C : Solusi asimetrik, yaitu filsuf pada_ nomor " & "ganjil mengambil sumpit kiri dulu baru sumpit_ kanan, sedangkan " & "filsuf pada nomor genap mengambil_ sumpit kanan dulu baru sumpit kiri." End Select Private Sub chkwaktu_click() txtwaktu.enabled = chkwaktu.value Private Sub cmdacak_click() Dim I As Integer Dim J1 As Integer Dim J2 As Integer 'Acak Properti filsuf With MProperti For I = 1 To 5 Next I End With 'Nilai acak minimum 2 detik, maks 12 detik 'WAKTU-A Randomize J1 = Int(Rnd * 10) + 2.TextMatrix(I, 1) = J1 'WAKTU-B Randomize J2 = Int(Rnd * 10) + 2.TextMatrix(I, 2) = J2 'Kondisi Awal Randomize J1 = Int(Rnd * (J1 + J2-3)) + 3.TextMatrix(I, 3) = J1 Private Sub cmdbuka_click() On Error GoTo errusercancel 'Simpan With CDialog.Flags = cdlofnpathmustexist Or cdlofnfilemustexist

.InitDir = App.Path & "\".ShowOpen copenlog =.FileName End With If copenlog = "" Then Exit Sub frmopenlog.show vbmodal errusercancel: Private Sub cmdkeluar_click() Unload Me Private Sub cmdsimulasi_click() Dim I As Integer 'Waktu Simulasi If chkwaktu.value Then If Val(txtWaktu.Text) = 0 Then MsgBox "Waktu simulasi belum diisi!", vbcritical Exit Sub nwaktusimulasi = Val(txtWaktu.Text) 'Waktu simulasi tidak terhingga nwaktusimulasi = -1 'Isi Properti filsuf For I = 1 To 5 'Filsuf - I With Filosof(I).nSumpitKiri = 0.nSumpitKanan = 0 'Cek minimal 2 detik If Val(MProperti.TextMatrix(I, 1)) < 2 Or _ Val(MProperti.TextMatrix(I, 2)) < 2 Or _ Val(MProperti.TextMatrix(I, 3)) < 2 Then MsgBox "Nilai properti filsuf minimal = 2 detik!", _ vbcritical Exit Sub 'Waktu-A & Waktu-B.nWaktuA = Val(MProperti.TextMatrix(I, 1)).nWaktuB = Val(MProperti.TextMatrix(I, 2)).nKondisi = Val(MProperti.TextMatrix(I, 3)) 'Get Aksi dan Kondisi If.nKondisi <=.nwaktub Then.Aksi = "CARI SUMPIT"

.Kondisi = "LAPAR".Aksi = "BERPIKIR".Kondisi = "KENYANG" 'Cek nkondisi -> tidak boleh lebih besar dari nwaktua dan_ nwaktub If.nKondisi >.nwaktua +.nwaktub Then MsgBox "Kondisi awal Filsuf harus berada di antara " & _ "range Waktu-A + Waktu-B!" & Chr(13) & "Kondisi awal_ Filsuf-" & I & " tidak memenuhi batas tersebut (Maks. _ " &.nwaktua +.nwaktub & " detik).", vbcritical Exit Sub 'Jika Solusi - A -> 4 orang filsuf 'Filsuf-5 dianggap mati If cbosolusi.listindex = 1 And I = 5 Then.nWaktuA = 0.nWaktuB = 0.Aksi = "".Kondisi = "MATI".nKondisi = -1 End With 'Variabel Sumpit Sumpit(I) = "1" Next I 'Waktu Simulasi (t) nwaktu = 0 'Solusi Pencegahan Deadlock nsolusi = cbosolusi.listindex 'Waktu Delay ndelay = Val(txtSekon) 'Dead Condition Available bmati = chkmati.value 'Hide Me.Hide 'Show frmsimulate.show Private Sub Form_Load() With MProperti.ColWidth(0) = 1612.ColWidth(1) = 2100.ColWidth(2) = 2100.ColWidth(3) = 2100

.ColAlignment(0) = 4.TextMatrix(0, 0) = "".TextMatrix(1, 0) = "Filsuf 1".TextMatrix(2, 0) = "Filsuf 2".TextMatrix(3, 0) = "Filsuf 3".TextMatrix(4, 0) = "Filsuf 4".TextMatrix(5, 0) = "Filsuf 5".ColAlignment(1) = 4.TextMatrix(0, 1) = "Waktu-A (detik)".colalignment(2) = 4.TextMatrix(0, 2) = "Waktu-B (detik)".colalignment(3) = 4.TextMatrix(0, 3) = "Kondisi Awal (detik)" End With cbosolusi.listindex = 0 Private Sub MProperti_KeyPress(KeyAscii As Integer) Dim ckey As String ckey = Chr(KeyAscii) With MProperti Select Case KeyAscii Case vbkeyreturn 'Enter Key - pindah kolom If.Col <.Cols - 1 Then.Col =.Col + 1 Case vbkeyback 'BackSpace - hapus satu karakter If Len(.Text) > 0 Then.Text = Left(.Text, Len(.Text) - 1) Case End Select End With 'Only Number Allowed If Len(.Text) >= 2 Then Exit Sub If ckey Like "#" Or ckey Like "-" Then.Text =.Text + ckey Private Sub txtsekon_keypress(keyascii As Integer) If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) And KeyAscii <>_ vbkeyback Then KeyAscii = 0

Private Sub txtwaktu_keypress(keyascii As Integer) If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) And KeyAscii <>_ vbkeyback Then KeyAscii = 0 3. Listing Menu Open Log Private Sub Form_Load() Text1.LoadFile copenlog Private Sub Form_Resize() Text1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight 4. Listing Menu Simulate Option Explicit Const npbar = 2010 Private I As Integer Private ntemp1 As Integer Private ntemp2 As Integer Private ntemp3 As Integer Private nsumpitkiri As Integer Private nsumpitkanan As Integer 'Private nrandom As Integer Private nd As Integer Private bdeadlock As Boolean Private Sub cmdcetak_click() On Error GoTo errcetak If MsgBox("Cetak log ke printer?", vbyesno + vbquestion, "Cetak") _ = vbyes Then Printer.FontName = "Courier New" Printer.FontSize = "9" Printer.PaperSize = vbprpsa4 Printer.Print txtlog.text Printer.EndDoc Exit Sub errcetak: MsgBox "Printer Device Error!", vbcritical, "Error" Private Sub cmdkeluar_click()

Unload Me frminput.show Private Sub cmdplay_click() If txtlog.text = "" Then txtlog.text = "DINING PHILOSOPHER LOG" & vbcrlf & _ "----------------------" If cmdplay.tag = "PLAY" Then 'Command Button cmdsimpan.enabled = False cmdcetak.enabled = False cmdkeluar.enabled = False 'Enable Timer Timer1.Enabled = True cmdplay.caption = "Hentik&an Simulasi" cmdplay.tag = "PAUSE" 'Disable Timer Timer1.Enabled = False cmdplay.caption = "Lanjutk&an Simulasi" cmdplay.tag = "PLAY" cmdsimpan.enabled = True cmdcetak.enabled = True cmdkeluar.enabled = True Private Sub cmdsimpan_click() Dim csimpan As String Dim cbaris As String Dim nb As Integer Dim nc As Integer On Error GoTo errusercancel 'Simpan With CDialog.Flags = cdlofnpathmustexist Or cdlofnoverwriteprompt.showsave csimpan =.FileName End With If csimpan = "" Then Exit Sub Open csimpan For Output As #1 'Header tabel Print #1, "TABEL KONDISI SIMULASI" Print #1, String(80, "-")

Print #1, "Filsuf " & vbtab & vbtab & _ "Waktu-A (s)" & vbtab & _ "Waktu-B (s)" & vbtab & _ "Masa Hidup (s)" & vbtab & _ "Kondisi Awal" Print #1, String(80, "-") 'Isi tabel For nb = 1 To MProperti.Rows - 1 cbaris = MProperti.TextMatrix(nB, 0) & vbtab For nc = 1 To MProperti.Cols - 1 cbaris = cbaris & vbtab & vbtab & MProperti.TextMatrix(nB,_ nc) Next nc Print #1, cbaris Next nb Print #1, String(80, "-") & vbcrlf 'Simpan Log Print #1, txtlog.text Close #1 errusercancel: Private Sub Form_Load() nd = 0 bdeadlock = False If nwaktusimulasi > 0 Then lblwaktusimulasi = "LAMA SIMULASI = " & nwaktusimulasi & " _ DETIK." lblwaktusimulasi = "LAMA SIMULASI TIDAK DITENTUKAN." 'Informasi Properti Filsuf With MProperti.ColWidth(0) = 1350.ColWidth(1) = 1450.ColWidth(2) = 1450.ColWidth(3) = 1450.ColWidth(4) = 1180.ColAlignment(0) = 4.TextMatrix(0, 0) = "Properti Filsuf".TextMatrix(1, 0) = "Filsuf 1".TextMatrix(2, 0) = "Filsuf 2".TextMatrix(3, 0) = "Filsuf 3".TextMatrix(4, 0) = "Filsuf 4".TextMatrix(5, 0) = "Filsuf 5".ColAlignment(1) = 4.TextMatrix(0, 1) = "Waktu-A (detik)"

.ColAlignment(2) = 4.TextMatrix(0, 2) = "Waktu-B (detik)".colalignment(3) = 4.TextMatrix(0, 3) = "Masa Hidup (s)".colalignment(4) = 4.TextMatrix(0, 4) = "Kondisi" For I = 1 To 5.TextMatrix(I, 1) = IIf(Filosof(I).nWaktuA = 0, "-", _ Filosof(I).nWaktuA).TextMatrix(I, 2) = IIf(Filosof(I).nWaktuB = 0, "-", _ Filosof(I).nWaktuB).TextMatrix(I, 3) = IIf(Filosof(I).nKondisi <= 0, "-", _ Filosof(I).nKondisi).TextMatrix(I, 4) = Filosof(I).Kondisi 'Update p-bar If Filosof(I).nKondisi > Filosof(I).nWaktuB Then ntemp2 = Filosof(I).nKondisi - Filosof(I).nWaktuB shpa(i).width = Int((nTemp2 * CDbl(nPBar)) / _ Filosof(I).nWaktuA) shpb(i).width = npbar shpa(i).width = 0 If Filosof(I).nKondisi <> -1 Then shpb(i).width = Int((Filosof(I).nKondisi * _ CDbl(nPBar)) / Filosof(I).nWaktuB) shpb(i).width = 0 'Tentukan Legend di Bagan-1 Select Case Filosof(I).Kondisi Case "KENYANG" shpfilosof(i).fillcolor = shpkenyang.fillcolor Case "LAPAR" shpfilosof(i).fillcolor = shplapar.fillcolor Case "MATI" shpfilosof(i).fillcolor = shpmati.fillcolor End Select 'Gambar di Bagan-2 Call LoadPict(imgFilosof(I), Filosof(I).Kondisi) Next I End With 'Pencegahan Deadlock If nsolusi = 0 Then lbldeadlock = "<TIDAK ADA>" lbldeadlock = "menggunakan Solusi-" & Chr(64 + nsolusi)

'Skala Waktu lblwaktu = "0" Timer1.Interval = ndelay lblskala = "Nb. 1 detik dalam program = " & ndelay & " milidetik." 'Dead Condition If bmati Then lbldead = "Dead Condition Available (Mengizinkan keadaan mati)." lbldead = "Dead Condition Disable (Tidak mengizinkan keadaan mati)." DoEvents Private Sub Timer1_Timer() '---------------------------- 'SIMULASI DINING PHILOSOPHER '---------------------------- 'Tambah Waktu nwaktu = nwaktu + 1 lblwaktu = nwaktu 'Filsuf - I For I = 1 To 5 With Filosof(I) 'Variabel sumpit kiri nsumpitkiri = I 'Variabel sumpit kanan If I - 1 = 0 Then nsumpitkanan = 5 nsumpitkanan = I - 1 'Update Kondisi Filsuf Select Case Filosof(I).Aksi Case "CARI SUMPIT" If.nKondisi > -1 Then 'Kurangi Kondisi.nKondisi =.nkondisi - 1 If.nKondisi >= 0 Then 'Update p-bar shpb(i).width = Int((.nKondisi * _ CDbl(nPBar)) /.nwaktub)

If.nKondisi = -1 Then 'Cek Dead Condition Available If bmati Then.Kondisi = "MATI".Aksi = "MATI" 'Log txtlog.text = txtlog.text & _ vbcrlf & "[t = " & nwaktu & "s] _ Filsuf-" & I & " MATI." Case "MAKAN" 'Tambah Kondisi.nKondisi =.nkondisi + 1 If.nKondisi =.nwaktua +.nwaktub Then 'Sekarang filsuf Kenyang, Mulai Berpikir ntemp2 =.nkondisi -.nwaktub shpa(i).width = Int((nTemp2 * _ CDbl(nPBar)) /.nwaktua).kondisi = "KENYANG".Aksi = "KENYANG" 'Log txtlog.text = txtlog.text & vbcrlf _ & "[t = " & nwaktu & "s] Filsuf-" _ & I & " kenyang dan mulai berpikir." If.nKondisi >.nwaktub Then 'Sekarang Filsuf Hampir Kenyang dan Tetap Makan ntemp2 =.nkondisi -.nwaktub shpa(i).width = Int((nTemp2 * _ CDbl(nPBar)) /.nwaktua).kondisi = "KENYANG" Randomize nrandom = Int(Rnd * 3) If nrandom = 2 Then.Aksi = "KENYANG".Aksi = "MAKAN" 'Filosof Masih Lapar dan Tetap Makan

shpb(i).width = Int((.nKondisi * _ CDbl(nPBar)) /.nwaktub).kondisi = "LAPAR".Aksi = "MAKAN" Case "BERPIKIR" 'Kurangi Kondisi.nKondisi =.nkondisi - 1 'Update p-bar ntemp2 =.nkondisi -.nwaktub shpa(i).width = Int((nTemp2 * _ CDbl(nPBar)) /.nwaktua) If.nKondisi =.nwaktub Then 'Sekarang Filsuf Lapar.Kondisi = "LAPAR".Aksi = "CARI SUMPIT" End Select 'Log txtlog.text = txtlog.text & vbcrlf _ & "[t = " & nwaktu & "s] Filsuf-" _ & I & " lapar dan mulai mencari _ sumpit." 'Lakukan Aksi Select Case Filosof(I).Aksi Case "MATI" 'Setelah mati, maka habis.nkondisi = -1.Aksi = "" Call LoadPict(imgFilosof(I), "MATI") 'Cek apakah sedang memegang sumpit di tangan kiri If.nSumpitKiri <> 0 Then 'Ada, maka lepaskan sumpit.nsumpitkiri = 0 Sumpit(nSumpitKiri) = 1 shpsumpit(nsumpitkiri).visible = True imgsumpit(nsumpitkiri).visible = True 'Cek apakah sedang memegang sumpit di tangan kanan If.nSumpitKanan <> 0 Then 'Ada, maka lepaskan sumpit.nsumpitkanan = 0 Sumpit(nSumpitKanan) = 1 shpsumpit(nsumpitkanan).visible = True

imgsumpit(nsumpitkanan).visible = True 'Update bagan-1 shpfilosof(i).fillcolor = shpmati.fillcolor Case "KENYANG" 'Filsuf tersenyum 'Setelah kenyang, maka filsuf mulai berpikir kembali.aksi = "BERPIKIR" Call LoadPict(imgFilosof(I), "KENYANG") 'Lepaskan sumpit kiri.nsumpitkiri = 0 Sumpit(nSumpitKiri) = 1 shpsumpit(nsumpitkiri).visible = True imgsumpit(nsumpitkiri).visible = True 'Lepaskan sumpit kanan.nsumpitkanan = 0 Sumpit(nSumpitKanan) = 1 shpsumpit(nsumpitkanan).visible = True imgsumpit(nsumpitkanan).visible = True 'Update bagan-1 shpfilosof(i).fillcolor = shpkenyang.fillcolor Case "CARI SUMPIT" 'Filosof Lapar & Mencari Sumpit If nsolusi = 2 Then 'SOLUSI - B -> SEKALI AMBIL DUA SUMPIT If Sumpit(nSumpitKiri) = 1 And _ Sumpit(nSumpitKanan) = 1 Then 'Hilangkan sumpit kiri Sumpit(nSumpitKiri) = 0 shpsumpit(nsumpitkiri).visible = False imgsumpit(nsumpitkiri).visible = False.nSumpitKiri = 1 'Hilangkan sumpit kanan Sumpit(nSumpitKanan) = 0 shpsumpit(nsumpitkanan).visible = False imgsumpit(nsumpitkanan).visible = False.nSumpitKanan = 1 If nsolusi = 3 And (I Mod 2) = 0 Then 'Solusi Asimetrik, No. Genap -> Kanan Baru Kiri 'Cek sumpit kanan - baru kiri If.nSumpitKanan = 0 And Sumpit(nSumpitKanan) = 1 Then 'Ambil & Hilangkan sumpit kanan

Sumpit(nSumpitKanan) = 0 shpsumpit(nsumpitkanan).visible = False imgsumpit(nsumpitkanan).visible = False.nSumpitKanan = 1 If.nSumpitKanan = 1 And.nSumpitKiri = 0 And _ Sumpit(nSumpitKiri) = 1 Then 'Ambil & Hilangkan sumpit kiri Sumpit(nSumpitKiri) = 0 shpsumpit(nsumpitkiri).visible = False imgsumpit(nsumpitkiri).visible = False.nSumpitKiri = 1 If nsolusi = 3 And (I Mod 2) = 1 Then 'Solusi Asimetrik, No. Ganjil -> Kiri Baru Kanan 'Cek sumpit kiri - baru kanan If.nSumpitKiri = 0 And Sumpit(nSumpitKiri) = 1 Then 'Ambil & Hilangkan sumpit kiri Sumpit(nSumpitKiri) = 0 shpsumpit(nsumpitkiri).visible = False imgsumpit(nsumpitkiri).visible = False.nSumpitKiri = 1 If.nSumpitKiri = 1 And.nSumpitKanan = 0 And _ Sumpit(nSumpitKanan) = 1 Then 'Ambil & Hilangkan sumpit kanan Sumpit(nSumpitKanan) = 0 shpsumpit(nsumpitkanan).visible = False imgsumpit(nsumpitkanan).visible = False.nSumpitKanan = 1 'Tidak ada solusi, ambil kiri dulu baru kanan 'Cek sumpit kiri - baru kanan If.nSumpitKiri = 0 And _ Sumpit(nSumpitKiri) = 1 Then 'Ambil & Hilangkan sumpit kiri Sumpit(nSumpitKiri) = 0 shpsumpit(nsumpitkiri).visible = False imgsumpit(nsumpitkiri).visible = False.nSumpitKiri = 1 If.nSumpitKanan = 0 And _ Sumpit(nSumpitKanan) = 1 Then 'Ambil & Hilangkan sumpit kanan

Sumpit(nSumpitKanan) = 0 shpsumpit(nsumpitkanan).visible = False imgsumpit(nsumpitkanan).visible = False.nSumpitKanan = 1 'Load Gambar If.nSumpitKiri = 0 And.nSumpitKanan = 0 Then If imgfilosof(i).tag <> "LAPAR" Then 'Tidak mendapatkan sumpit Call LoadPict(imgFilosof(I), "LAPAR") imgfilosof(i).tag = "LAPAR" If.nSumpitKiri = 1 And.nSumpitKanan = 0 Then If imgfilosof(i).tag <> "LAPAR-L" Then 'Mendapatkan sumpit di tangan kiri saja Call LoadPict(imgFilosof(I), "LAPAR-L") imgfilosof(i).tag = "LAPAR-L" 'Log txtlog.text = txtlog.text & vbcrlf & _ "[t = " & nwaktu & "s] Filsuf-" & _ I & " mendapatkan sumpit di tangan kiri." If.nSumpitKiri = 0 And.nSumpitKanan = 1 Then If imgfilosof(i).tag <> "LAPAR-R" Then 'Mendapatkan sumpit di tangan kanan saja Call LoadPict(imgFilosof(I), "LAPAR-R") imgfilosof(i).tag = "LAPAR-R" 'Log txtlog.text = txtlog.text & vbcrlf & _ "[t = " & nwaktu & "s] Filsuf-" & _ I & " mendapatkan sumpit di tangan kanan." 'Mendapatkan sumpit di kedua tangan Call LoadPict(imgFilosof(I), "SUKSES") 'Filosof mulai makan.aksi = "MAKAN" 'Log txtlog.text = txtlog.text & vbcrlf & _ "[t = " & nwaktu & "s] Filsuf-" & _ I & " mendapat 2 sumpit dan mulai makan." 'Update bagan-1 shpfilosof(i).fillcolor = shplapar.fillcolor

Case "MAKAN" 'Filosof Sedang Makan Next I If imgfilosof(i).tag = "MAKAN-1" Then Call LoadPict(imgFilosof(I), "MAKAN-2") imgfilosof(i).tag = "MAKAN-2" Call LoadPict(imgFilosof(I), "MAKAN-1") imgfilosof(i).tag = "MAKAN-1" 'Update bagan-1 shpfilosof(i).fillcolor = shpmakan.fillcolor Case "BERPIKIR" 'Filosof Sedang Berpikir End Select 'Load Gambar If imgfilosof(i).tag = "BERPIKIR-1" Then Call LoadPict(imgFilosof(I), "BERPIKIR-2") imgfilosof(i).tag = "BERPIKIR-2" Call LoadPict(imgFilosof(I), "BERPIKIR-1") imgfilosof(i).tag = "BERPIKIR-1" 'Tampil ke tabel MProperti.TextMatrix(I, 3) =.nkondisi MProperti.TextMatrix(I, 4) =.Kondisi End With 'Cek Kondisi Deadlock If bdeadlock = False Then Dim bd As Boolean bd = True For I = 1 To 5 If Filosof(I).nSumpitKiri = 0 And _ Filosof(I).nSumpitKanan = 1 Then bd = bd And True If Filosof(I).nSumpitKiri = 1 And _ Filosof(I).nSumpitKanan = 0 Then bd = bd And True 'Tidak Deadlock bd = bd And False Exit For Next I

'Hidupkan timer-2 If bd = True Then bdeadlock = True Timer2.Enabled = True 'Cek waktu simulasi If nwaktusimulasi > 0 Then If nwaktu = nwaktusimulasi Then 'Log txtlog.text = txtlog.text & vbcrlf & _ "[t = " & nwaktu & "s] " & _ "SIMULASI SELESAI." Timer1.Enabled = False cmdplay.enabled = False cmdsimpan.enabled = True cmdcetak.enabled = True cmdkeluar.enabled = True DoEvents Private Sub Timer2_Timer() nd = nd + 1 If nd = 5 Then 'Disable Timer1 If Timer1.Enabled Then Call cmdplay_click cmdplay.enabled = False 'Disable Timer2 Timer2.Enabled = False MsgBox "Telah terjadi kondisi DEADLOCK!", vbcritical 'Log txtlog.text = txtlog.text & vbcrlf & _ "[t = " & nwaktu & "s] Terjadi kondisi DEADLOCK!" Private Sub txtlog_change() txtlog.selstart = Len(txtLog.Text) Private Sub LoadPict(imgP As Image, pcgbr As String) imgp.picture = LoadPicture(App.Path & "\Image\" & pcgbr & ".gif")

5. Listing Module1 Option Explicit 'Properti Filsuf Public Type PropFilosof 'Waktu Kenyang -> Lapar nwaktua As Byte 'Waktu Lapar -> Mati nwaktub As Byte 'Kondisi Awal nkondisi As Integer 'Sumpit di Tangan Kiri nsumpitkiri As Byte 'Sumpit di Tangan Kanan nsumpitkanan As Byte 'Aksi Filsuf Aksi As String 'Kondisi Kondisi As String End Type 'Variabel Filsuf Public Filosof(5) As PropFilosof '0 = Kosong / 1 = Berisi Public Sumpit(5) As Byte 'Solusi Pencegahan Deadlock Public nsolusi As Byte 'Kecepatan Simulasi Public ndelay As Integer 'Filsuf bisa mati? Public bmati As Boolean 'Waktu Public nwaktu As Long 'Waktu Simulasi Public nwaktusimulasi As Integer 'Open File Public copenlog As String