⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kanuotu.txt

📁 卡诺图化简的算法
💻 TXT
字号:
Private Sub Check1_Click(Index As Integer)
    qin
  If Check1(Index).Value = 1 Then
    Command1(Index).Caption = "1"
    Else: Command1(Index).Caption = "0"
 End If
    hj
End Sub
Private Sub Command1_Click(Index As Integer)
   qin
  If Command1(Index).Caption = "0" Or Command1(Index).Caption = " " Then
    Command1(Index).Caption = "1": Check1(Index).Value = 1
    Else: Command1(Index).Caption = "0": Check1(Index).Value = 0
      End If
End Sub
Public Sub qin()
Cls
Erase d: Erase c: Erase jilu
Text1.Text = ""
 m = 0: t = 0: l = 0: z = 0
End Sub
Public Sub hj()
   For Index = 0 To 15
    If Command1(Index).Caption = "1" Then
     c(m).dat = Check1(Index).Caption: c(m).l(0) = Index: jilu(0).l(m) = Index: jilu(0).n = m: m = m + 1
    End If
    Next Index
 If m = 0 Then
    Cls
  ElseIf m = 16 Then
    Text1.Text = "1": Line (720, 720)-(4560, 4560), QBColor(13), B
    Else: jian z
    End If
End Sub
Public Sub jian(z)
  Dim e As Integer: Dim b(40) As j: Dim x As Integer: Dim n As Integer: Dim s As Integer: Dim temp As String: Dim i As Integer: Dim j As Integer: Dim k As Integer
  e = m - 1: m = 0
    For i = 0 To e
      b(i).dat = c(i).dat
      For j = 0 To 2 ^ z - 1
      b(i).l(j) = c(i).l(j)
      Next j
     Next i
     Erase c
      For i = 0 To e
       For j = i + 1 To e
         For k = 1 To 4
            If Mid(b(i).dat, k, 1) <> Mid(b(j).dat, k, 1) Then
           b(j).n = b(j).n + 1: s = k
           End If
           Next k
             If b(j).n = 1 Then
               b(i).r = 1: b(j).r = 1: b(j).n = 0: temp = b(j).dat: Mid(b(j).dat, s, 1) = " "
                 For k = 0 To m
                    If c(k).dat <> b(j).dat Then
                    n = n + 1
                    End If
                    Next k
                   If n = m + 1 Then
                      n = 0: c(m).dat = b(j).dat: m = m + 1
                      For k = 0 To 2 ^ z - 1
                       c(m - 1).l(k) = b(i).l(k)
                       c(m - 1).l(k + 2 ^ z) = b(j).l(k)
                 Next k
                 End If
                  b(j).dat = temp
            End If
             b(j).n = 0
             n = 0
    Next j
      Next i
           For i = 0 To e
           If b(i).r = 0 Then
           d(t).dat = b(i).dat: t = t + 1
           For k = 0 To 2 ^ z - 1
           d(t - 1).l(k) = b(i).l(k)
           Next k
           d(t - 1).n = 2 ^ z
            End If
           Next i
        If m > 0 Then
        jian (z + 1)
        Else: rejian
        End If
End Sub
Public Sub rejian()
Dim n As Integer: Dim a As Integer: Dim i As Integer: Dim j As Integer: Dim k As Integer
  For i = 0 To t - 1
      d(i).s = 1
     For j = 0 To jilu(0).n
       For k = 0 To t - 1
        If d(k).s <> 1 Then
          For a = 0 To d(k).n - 1
               If jilu(0).l(j) = d(k).l(a) Then
                 a = d(k).n: k = t + 1
                 End If
                 Next a
                 End If
          Next k
          If k = t Then
            d(i).s = 0: j = jilu(0).n + 1
            End If
    Next j
    Next i
    daan
End Sub
Public Sub daan()
Dim result As String: Dim i As Integer: Dim j As Integer: Dim f As Integer
  For i = 0 To t - 1
  If d(i).s <> 1 Then Exit For
  Next i
  result = d(i).dat: f = i
  graph f
  For j = i + 1 To t - 1
  If d(j).s <> 1 Then
  result = result & "+" & d(j).dat: f = j: graph f
  End If
  Next j
  Text1.Text = result
End Sub
Public Sub graph(f)
  Dim s As Integer: Dim a As Integer: Dim a1 As Integer: Dim a2 As Integer: Dim n As Integer
  a1 = d(f).n - 1
  For a = 0 To a1 - 1
    s = a
  For a2 = a + 1 To a1
    If d(f).l(a2) < d(f).l(s) Then s = a2
    Next a2
    If a <> s Then
       n = d(f).l(a): d(f).l(a) = d(f).l(s): d(f).l(s) = n
      End If
      Next a
Select Case a1
Case 0:      Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-Step(960, 960), vbRed, B
Case 1
  If (d(f).l(0) + 1 = d(f).l(1)) Or (d(f).l(0) + 4 = d(f).l(1)) Then
    Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-(720 + (d(f).l(1) Mod 4 + 1) * 960, 720 + (d(f).l(1) \ 4 + 1) * 960), vbRed, B
     ElseIf d(f).l(0) + 3 = d(f).l(1) Then
       Line (720 + ((d(f).l(1)) Mod 4 + 1) * 960, 720 + ((d(f).l(1)) \ 4 + 1) * 960)-Step(-960, 0), vbRed: Line -Step(0, -960), vbRed: Line -Step(960, 0), vbRed: Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-Step(960, 0), vbRed: Line -Step(0, 960), vbRed: Line -Step(-960, 0), vbRed
       ElseIf d(f).l(0) + 12 = d(f).l(1) Then
       Line (720 + ((d(f).l(1) Mod 4) + 1) * 960, 720 + ((d(f).l(1) \ 4) + 1) * 960)-Step(0, -960), vbRed: Line -Step(-960, 0), vbRed: Line -Step(0, 960), vbRed: Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-Step(0, 960), vbRed: Line -Step(960, 0), vbRed: Line -Step(0, -960), vbRed
       End If
Case 3
   If (d(f).l(0) + 5 = d(f).l(3)) Or (d(f).l(0) + 3 = d(f).l(3)) Or (d(f).l(0) + 12 = d(f).l(3)) Then
     Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-(720 + (d(f).l(3) Mod 4 + 1) * 960, 720 + (d(f).l(3) \ 4 + 1) * 960), vbRed, B
     ElseIf d(f).l(0) + 13 = d(f).l(3) Then
       Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-Step(0, 960), vbRed: Line -Step(1920, 0), vbRed: Line -Step(0, -960), vbRed: Line (720 + (d(f).l(3) Mod 4 + 1) * 960, 720 + (d(f).l(3) \ 4 + 1) * 960)-Step(0, -960), vbRed: Line -Step(-1920, 0), vbRed: Line -Step(0, 960), vbRed
       ElseIf d(f).l(0) + 7 = d(f).l(3) Then
         Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-Step(960, 0), vbRed: Line -Step(0, 1920), vbRed: Line -Step(-960, 0), vbRed: Line (720 + (d(f).l(3) Mod 4 + 1) * 960, 720 + (d(f).l(3) \ 4 + 1) * 960)-Step(-960, 0), vbRed: Line -Step(0, -1920), vbRed: Line -Step(960, 0), vbRed
           Else: Line (720, 1680)-Step(960, 0), vbRed: Line -Step(0, -960), vbRed: Line (3600, 720)-Step(0, 960), vbRed: Line -Step(960, 0), vbRed: Line (720, 3600)-Step(960, 0), vbRed: Line -Step(0, 960), vbRed: Line (3600, 4560)-Step(0, -960), vbRed: Line -Step(960, 0), vbRed
           End If
Case 7
  If (d(f).l(0) + 5 = d(f).l(5)) Or (d(f).l(0) + 9 = d(f).l(5)) Then
      Line (720 + (d(f).l(0) Mod 4) * 960, 720 + (d(f).l(0) \ 4) * 960)-(720 + (d(f).l(7) Mod 4 + 1) * 960, 720 + (d(f).l(7) \ 4 + 1) * 960), vbRed, B
     ElseIf d(f).l(0) + 11 = d(f).l(5) Then
       Line (720, 720)-Step(960, 0), vbRed: Line -Step(0, 3840), vbRed: Line -Step(-960, 0), vbRed: Line (4560, 720)-Step(-960, 0), vbRed: Line -Step(0, 3840), vbRed: Line -Step(960, 0), vbRed
       ElseIf d(f).l(0) + 13 = d(f).l(5) Then
       Line (720, 720)-Step(0, 960), vbRed: Line -Step(3840, 0), vbRed: Line -Step(0, -960), vbRed: Line (720, 4560)-Step(0, -960), vbRed: Line -Step(3840, 0), vbRed: Line -Step(0, 960), vbRed
       End If
End Select
End Sub

Private Sub Form_Load()

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -