Перевод из двоичной в десятичную и обратно - VB

Узнай цену своей работы

Формулировка задачи:

Ребят, он переводит из десятичной в двоичную систему и обратно...но при переводе отрицательного десятичного числа, он переводит в двоичный вид, а обратно должен переводить дважды, как положительное и отрицательное..помогите..
Листинг программы
  1. Dim s, n, g As String
  2. Dim i, q As Integer
  3. Dim j As String
  4. Dim z As Double
  5. Private Sub Command1_Click()
  6. s = ""
  7. n = ""
  8. y = Text1.Text
  9. k = Abs(Text1.Text)
  10. For i = 0 To k
  11. If (k Mod 2) = 0 Then
  12. s = "0" + s
  13. n = " 0" + n
  14. Else
  15. If (k Mod 2) = 1 Then
  16. s = "1" + s
  17. n = " 1" + n
  18. End If
  19. End If
  20. k = Int(k / 2)
  21. If k < 1 Then
  22. r = i
  23. Exit For
  24. End If
  25. Next
  26. u = Split(n, " ")
  27. If y >= 0 Then
  28. Text2.Text = s
  29. ' ïåðåâîä èç 2-îé â 10óþ
  30. z = 0
  31. q = 0
  32. i = 0
  33. For q = UBound(u) To 1 Step -1
  34. z = z + (u(q) * (2 ^ i))
  35. i = i + 1
  36. Next q
  37. Text3.Text = z
  38. ElseIf y < 0 Then
  39. Text3.Text = ""
  40. For q = 1 To UBound(u)
  41. If u(q) = 0 Then
  42. u(q) = 1
  43. Else: If u(q) = 1 Then u(q) = 0
  44. End If
  45. Next
  46. u(UBound(u)) = u(UBound(u)) + 1
  47. n = ""
  48. For q = UBound(u) To 1 Step -1
  49. If u(q) > 1 Then
  50. u(q - 1) = 1 + u(q - 1)
  51. u(q) = 0
  52. End If
  53. n = u(q) + n
  54. Next
  55. Text2.Text = n
  56. u(UBound(u)) = u(UBound(u)) - 1
  57. q = 0
  58. For q = UBound(u) To 1 Step -1
  59. If u(q) < 0 Then
  60. u(q - 1) = u(q - 1) - 1
  61. u(q) = 1
  62. End If
  63. Next
  64. For q = 1 To UBound(u)
  65. If u(q) = 0 Then
  66. u(q) = 1
  67. Else: If u(q) = 1 Then u(q) = 0
  68. End If
  69. Next
  70. q = 0
  71. z = 0
  72. i = 0
  73. For q = UBound(u) To 1 Step -1
  74. z = z + (u(q) * (2 ^ i))
  75. i = i + 1
  76. Next q
  77. Text3.Text = "-" & z
  78. Text4.Text = i
  79. End If
  80. End Sub
  81.  
  82. Private Sub Command2_Click()
  83. End
  84. End Sub

Решение задачи: «Перевод из двоичной в десятичную и обратно»

textual
Листинг программы
  1. Private Sub Command1_Click()
  2. Dim dec
  3. dec = Val(Text1.Text)
  4. Text2.Text = Trim(d_b(Abs(dec), 2, Sgn(dec)))
  5. End Sub
  6. Private Sub Command2_Click()
  7. Text1.Text = b_d(Trim(Text2.Text))
  8. End Sub
  9.  
  10. Function d_b$(ByVal x, o%, zn)
  11. On Error GoTo er
  12.  
  13. Do While x > 0
  14.     d_b = CStr(x Mod o) + d_b
  15.     x = x \ o
  16. Loop
  17.  
  18. d_b = dop(d_b, zn)
  19.  
  20. Exit Function
  21.  
  22. er: MsgBox Err.Description: Err.Clear
  23. End Function
  24.  
  25. Function dop$(x$, zn)
  26. Dim dt$
  27. dt = "": dop = ""
  28.  
  29. For i = 1 To 32
  30.     dt = IIf(i > Len(x), 0, Mid(StrReverse(x), i, 1)) & dt
  31. Next i
  32.  
  33. If zn = -1 Then dt = x1(rev(Trim(dt)), 1)
  34.  
  35. For i = 1 To 32
  36.    dop = dop & Mid(dt, i, 1): If i Mod 4 = 0 Then dop = dop & " "
  37. Next i
  38.  
  39. End Function
  40.  
  41. Function b_d(ByVal x$)
  42. Dim i%, zn$
  43. On Error GoTo er
  44.  
  45. Do While InStr(1, x, " ") > 0
  46.    x = Replace(x, " ", "")
  47. Loop
  48.  
  49. zn = ""
  50. If Mid(x, 1, 1) = 1 Then
  51.    zn = "-"
  52.    x = rev(x1(x, 0))
  53. End If
  54.  
  55. b_d = 0
  56. For i = 1 To Len(x)
  57.      b_d = b_d + Val(Mid(x, 32 - i + 1, 1)) * 2 ^ (i - 1)
  58. Next i
  59. b_d = zn & b_d
  60.  
  61. Exit Function
  62. er: MsgBox Err.Description: Err.Clear
  63. End Function
  64. Function rev$(x$)
  65. Dim i%
  66. For i = 1 To 32
  67.    Mid(x, i, 1) = CStr(1 - Val(Mid(x, i, 1)))
  68. Next i
  69. rev = x
  70. End Function
  71. Function x1$(x$, u%)
  72. Dim i%
  73. i = 0
  74.    Do While Mid(x, 32 - i, 1) = u
  75.       Mid(x, 32 - i, 1) = 1 - u:
  76.       i = i + 1
  77.    Loop
  78.    Mid(x, 32 - i, 1) = u:
  79. x1 = x
  80. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы