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
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
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