LISTING PROGRAM
Imports MySql.Data.MySqlClient Public Class Algoritma
Public x(), y() As Char Public p, t As String
Public m, n, i, j, result1, cocok1, mpNext(0 To 255) As Integer
Public result2, state, matched, matchMask, cocok2, flag, d, S(0 To 255) As Integer
Public t1, t2 As String Public t3, t4 As String
Dim conn As New MySqlConnection("server = localhost; user id = root; database = algo_pseudocode")
'Perhitungan Tabel Pergeseran preSA Public Sub preSA(p)
p = Cari.Text.ToUpper m = p.Length
Dim temp As Integer flag = 0 For i = 0 To 255 S(i) = 0 Next i For i = 0 To m - 1 temp = Asc(p(i)) S(temp) = S(temp) Or (1 << i) Next i End Sub 'Algoritma Shift-And Public Function SA(p, t) m = p.Length
n = t.Length t += "\0" preSA(p)
Dim temp As Integer d = 0
matchmask = 1 << m - 1 For i = 0 To n - 1 temp = Asc(t(i))
d = ((d << 1) Or 1) And (S(temp) Or 0) matched = (d And matchmask)
If (matched <> 0) Then state = (i - m + 1) flag = 1
Next i Return flag End Function
'Perhitungan Tabel Pergeseran mpNext Sub pre-MP(x) x = Cari.Text.ToUpper.ToCharArray m = x.Length i = 0 j = mpNext(0) mpNext(0) = -1 While (i < m)
While ((j > -1) AndAlso (x(i) <> x(j))) j = mpNext(j) End While i = (i + 1) j = (j + 1) mpNext(i) = j End While End Sub
'Algoritma Morris Pratt Public Function MP(x, y) m = x.Length n = y.Length y += "\0" pre-MP(x) j = 0 i = 0 result2 = 0 While (j < n)
Do While ((i > -1) AndAlso (x(i) <> y(j))) i = mpNext(i) Loop i = (i + 1) j = (j + 1) If (i >= m) Then result2 = 1 i = mpNext(i) End If End While Return result2 End Function
Private Sub Algoritma_Load(sender As Object, e As EventArgs) Handles MyBase.Load
conn.Open()
Dim cmd = New MySqlCommand("SELECT id, nama_algo from algoritma order by id ASC", conn)
Dim adapter = New MySqlDataAdapter(cmd) Dim dt As New DataTable
adapter.Fill(dt)
lb_SA.Items.Add("NO." & vbTab & "ALGORITMA") lb_MP.Items.Add("NO." & vbTab & "ALGORITMA")
lb_SA.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) lb_MP.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) Next
conn.Close() End Sub
'Jika user menekan Enter, maka sistem akan langsung melakukan proses pencarian walaupun button Cari tidak ditekan
Private Sub cari_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Cari.KeyPress If Asc(e.KeyChar) = 13 Then
b_cari.PerformClick() End If
End Sub
Public Sub b_cari_Click(sender As Object, e As EventArgs) Handles b_cari.Click
lb_SA.Items.Clear() lb_MP.Items.Clear()
lb_SA.Items.Add("NO." & vbTab & "ALGORITMA") lb_MP.Items.Add("NO." & vbTab & "ALGORITMA") cocok1 = 0 cocok2 = 0 Try p = Cari.Text.ToUpper x = Cari.Text.ToUpper.ToCharArray conn.Open()
Dim cmd = New MySqlCommand("SELECT * from algoritma order by id ASC", conn)
Dim adapter = New MySqlDataAdapter(cmd) Dim dt As New DataTable
adapter.Fill(dt)
t1 = ((Now.TimeOfDay.Milliseconds)) For i As Integer = 0 To dt.Rows.Count - 1 Dim temp As String
Dim ketemu1 As Integer
temp = dt.Rows(i)("nama_algo") t = temp.ToUpper
ketemu1 = SA(p, t) If (ketemu1 = 1) Then
lb_SA.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) cocok1 += 1 End If Next t2 = ((Now.TimeOfDay.Milliseconds) - t1) TextBox1.Text = t2.ToString t3 = ((Now.TimeOfDay.Milliseconds)) For i As Integer = 0 To dt.Rows.Count - 1 Dim temp As String
Dim ketemu2 As Integer
temp = dt.Rows(i)("nama_algo") y = temp.ToUpper.ToCharArray
ketemu2 = MP(x, y) If (ketemu2 = 1) Then
lb_MP.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) cocok2 += 1 End If Next t4 = ((Now.TimeOfDay.Milliseconds) - t3) TextBox3.Text = t4.ToString If (cocok2 = 0) Then
MessageBox.Show("Kata Tidak Ditemukan!" + Chr(13) + "Running Time Shift-And : " & t2 & " ms" + Chr(13) + "Running Time Morris-Pratt : " & t4 & " ms")
Else
MessageBox.Show("Kata Ditemukan !" + Chr(13) + "Total Hasil Pencarian : " & cocok2)
End If conn.Close()
Catch myError As MySqlException
MessageBox.Show("Koneksi Error" & myError.Message) End Try
End Sub
Private Sub reset_Click(sender As Object, e As EventArgs) Handles b_reset.Click
conn.Open()
Dim cmd = New MySqlCommand("SELECT id, nama_algo from algoritma order by id ASC", conn)
Dim adapter = New MySqlDataAdapter(cmd) Dim dt As New DataTable
adapter.Fill(dt) Cari.Clear() lb_SA.Items.Clear() lb_MP.Items.Clear() TextBox1.Clear() TextBox3.Clear()
lb_SA.Items.Add("NO." & vbTab & "ALGORITMA") lb_MP.Items.Add("NO." & vbTab & "ALGORITMA") For i As Integer = 0 To dt.Rows.Count - 1
lb_SA.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) lb_MP.Items.Add(dt.Rows(i)("id") & vbTab & dt.Rows(i)("nama_algo")) Next
conn.Close() End Sub
Private Sub lb_SA_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lb_SA.SelectedIndexChanged
conn.Open()
Dim cmd = New MySqlCommand("SELECT * from algoritma where id = " & Val(lb_SA.SelectedItem) & " order by id ASC", conn)
Dim adapter = New MySqlDataAdapter(cmd) Dim dt As New DataTable
adapter.Fill(dt) Try Pseudocode.nama_al.Text = dt.Rows(0)("nama_algo") Pseudocode.isi.Text = dt.Rows(0)("isi") Pseudocode.kata = Cari.Text Pseudocode.ShowDialog() Catch ex As Exception
MsgBox("Tidak ada nama algoritma yang cocok!") End Try
conn.Close() End Sub
Private Sub lb_MP_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lb_MP.SelectedIndexChanged
conn.Open()
Dim cmd = New MySqlCommand("SELECT * from algoritma where id = " & Val(lb_MP.SelectedItem) & " order by id ASC", conn)
Dim adapter = New MySqlDataAdapter(cmd) Dim dt As New DataTable
adapter.Fill(dt) Try Pseudocode.nama_al.Text = dt.Rows(0)("nama_algo") Pseudocode.isi.Text = dt.Rows(0)("isi") Pseudocode.kata = Cari.Text Pseudocode.ShowDialog() Catch ex As Exception
MsgBox("Tidak ada nama algoritma yang cocok!") End Try
conn.Close() End Sub