Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Перевод из различных систем исчисления в 2-ную


Автор: Voldemar2004 19.7.2005, 18:25
Код

Option Explicit

Private Sub Command1_Click()
Dim i As Long
Dim j As Long

i = Val(Text1.Text)

Text2.Text = ""
            
    Do While i > 0
        If i / 2 = i \ 2 Then
            Text2.Text = Text2.Text & "0"
            Else:
            Text2.Text = Text2.Text & "1"
        End If
        i = i \ 2
    Loop

    Text2.Text = StrReverse(Text2.Text)
    ' узнал из справочника
    ' до этого пользовался по старинке, как в Си :
    'a(0) = 12
    'a(1) = 13
    'a(2) = 0
    'a(3) = -43
    'For i = 3 To 0 Step -1
    ' вывод :)
    'Next i
    
    ' здесь проверяем: если битов не хватает до восьми (или их 8), то заполняем
    ' пустые регистры нулями, пока остаток от целочисленного деления не будет = 0 :
    
    If Len(Text2.Text) <= 8 Then
        For j = 0 To 7 - Len(Text2.Text)
        Text2.Text = "0" & Text2.Text
        Next j
        
    Else:
        Do
        Text2.Text = "0" & Text2.Text
        Loop While Len(Text2.Text) Mod 8 <> 0
    End If

End Sub


Написал программульку, которая переводит из 10-ной системы в двоичную. Вопрос, короче такой: какие есть способы перевода десятиричных чисел в 16-тиричные, восьмиричные - в основном-то я знаю, как это делается, просто нужны САМЫЕ ЭЛЕМЕНТАРНЫЕ способы типа того, который я на VB написал. Есть еще и метод табличной подстановки, но он, ИМХО, самый тупой из всех. И самый простой способ перевода дробных чисел в 2-ную систему, кто знает, расскажите.

P.S. Перелистывал древние книжки по бейсику (не Quick !) и нашел программку, делающую, то же, что и моя, но там было штук 100 Goto smile , поэтому ни фига не поняв, сделал по-нормальному. Я подумал: "а в бейсиках до QBasic, что вообще не было оператора Do ... loop While/Until/Wend? Просто валялся от смеха, когда читал исходники 20-летней давности smile "

Автор: Voldemar2004 20.7.2005, 20:13
Вот посмотри, то что тебе надо: http://www.codenet.ru/progr/vbasic/Convert-Dec-Hex-Bin-Oct.php.

Автор: cardinal 20.7.2005, 21:51
Раздвоение личности? smile

smile

Автор: S.A.P. 20.7.2005, 21:56
Ничего себе smile

Автор: Akina 21.7.2005, 08:31
1)
Код

Dim i As Long
...
If i / 2 = i \ 2 Then

Хотя и будет работать, но недопустимо (нет гарантии что не будет приведения обратно к Long). Правильно:
Код

if i mod 2 = 0 Then


2) Какой великий смысл в переводе ЧИСЛА в десятичной системе в СТРОКУ в двоичной???

Автор: Voldemar2004 21.7.2005, 10:08
Цитата(Akina @ 21.7.2005, 08:31)
Хотя и будет работать, но недопустимо (нет гарантии что не будет приведения обратно к Long). Правильно:
Меня это сейчас не волнует.

Цитата(Akina @ 21.7.2005, 08:31)
2) Какой великий смысл в переводе ЧИСЛА в десятичной системе в СТРОКУ в двоичной???
Да я просто наваял эти строки по-быстрому только и всего.

Автор: SOY 3.8.2005, 00:41
Код

'Функция преобразования Dec в Bin
Public Function DecBin(str As String)
Dim a
Dim b
Dim c
Dim d As String
a = str
Do
c = Int(a / 2) 'вычисление целого
b = 2 * c: b = a - b 'вычесление остатка
a = c
d = d & b
Loop While a >= 1
DecBin = StrReverse(d)
End Function

'функция преобразования Bin в Dec
Public Function BinDec(str As String)
Dim a: Dim b As String: Dim c: Dim count As Integer: Dim d: Dim j
d = 1
a = Len(str) 'число символов в строке
b = StrReverse(str) 'реверс строки
For count = 1 To a
c = Mid(b, count, 1) 'читаем символ с номером count
Select Case c
Case "1"
j = j + d
Case "0"
j = j
End Select
d = d * 2
Next
BinDec = j
End Function

Автор: cardinal 3.8.2005, 00:50
Модератор: Используйте теги для подсветки кода.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)