Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2012, 00:02   #1
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию VBA перевод из десятичной системы счисления и наоборот

Доброго времени суток!
Подскажите пожалуйста, может кто сталкивался.

Как перевести вводимое число из десятичной системы счисления в двоичную? Может существует какая функция? Или реализовывать цикл?
И еще, каким образом реализовать сложение/вычитание двоичных чисел?

Делаю программу для шифрования/дешифрования методом гаммирования на основе Exсel.

Заранее благодарю
Akika вне форума Ответить с цитированием
Старый 03.12.2012, 01:09   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Поиск рулит по форуму
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 03.12.2012, 16:16   #3
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Благодарю ^^ Впредь буду осмотрительнее)
Akika вне форума Ответить с цитированием
Старый 07.01.2013, 16:21   #4
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Доброго времени суток!
Продолжаю работу по той же программе. С преподавателем встали в ступор. Ищу дружеского пенделя. Скажите, что по вашему мнению не так?
Функция должна складывать 2 двоичных числа (ch1 и ch2) которые берет с листа.
Проблема с самим алгоритмом сложения.

Код:
Function shif(ch1 As Variant, ch2 As Variant, nom As Variant)
Dim h, d, q As Integer
Dim ost, ost1 As Boolean
Dim t() As Integer

ReDim t(Len(ch1) + Len(ch2))
ost = False

If Len(ch1) >= Len(ch2) Then
    q = Len(ch1) + 1
Else
    q = Len(ch2) + 1
End If

For i = Len(ch1) + Len(ch2) To 2 Step -1
  If q > 0 Then
    h = Int(Mid(ch1, q, 1))
    d = Int(Mid(ch2, q, 1))

     If a = 1 And b = 1 Then
        t(i) = 0
        ost = True
      ElseIf a = 0 And b = 0 Then
        If ost = True Then
            t(i) = 1
            ost = False
       Else
            t(i) = 0
       End If
    Else
        If ost = True Then
            t(i) = 0
        Else
            t(i) = 1
            ost = False
        End If
    End If
    
    If ost = True Then t(i - 1) = 1
    q = q - 1
  Else
    Exit For
  End If
Next

'разворот
s = ""
For i = 1 To Len(ch1) + Len(ch2)
    Cells(i, 12) = t(i)
     s = s + Str(t(i))
    
Next
Cells(nom, 13) = s
'shif = t(1)
End Function
Заранее благодарю откликнувшихся)
Akika вне форума Ответить с цитированием
Старый 07.01.2013, 17:18   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Так пойдет?
Код:
Function shif(ch1 As String, ch2 As String)
    Dim c1 As Long, c2 As Long
    c1 = bin_to_dec(ch1)
    c2 = bin_to_dec(ch2)
    shif = Dec2Bin(c1 + c2)

End Function
Function bin_to_dec(a As String) As Long
    Dim b As Double, i As Long
    b = 0
    For i = Len(a) To 1 Step -1
        yyy = CInt(Mid(a, i, 1)) * 2 ^ (i - 1)

        b = b + CInt(Mid(a, i, 1)) * 2 ^ (i - 1)
    Next
    bin_to_dec = b
End Function

Function Dec2Bin(ByVal Dec As Long) As String
    Dim i As Integer
    Dim Dec1 As Double
    Dim a As String
    Dim BinW As String
    Dec1 = CDbl(Dec)
    Do
        BinW = BinW & Dec1 Mod 2
        Dec1 = Int(Dec1 / 2)
    Loop While Dec1 > 0
    For i = Len(BinW) To 1 Step -1
        Dec2Bin = Dec2Bin & Mid(BinW, i, 1)

    Next i
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 07.01.2013, 17:30   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

doober, Вы всю конструкцию порушили. )
Им же хотелось нолики с единичками как "строковые биты" складывать. Этакий бейсик-процессор создать.
EUGY вне форума Ответить с цитированием
Старый 07.01.2013, 19:35   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Пускай вместе с преподом ламают голову
Код:
Function shif(ch1 As String, ch2 As String)
    Dim h As Integer, d As Integer, q As Integer
    Dim Sl As String
    Dim t() As Integer, a() As Integer, b() As Integer
    q = IIf(Len(ch1) > Len(ch2), Len(ch1), Len(ch2))
    ReDim t(q)
    ReDim a(q): ReDim b(q)
    Sl = ""
    For n = 1 To Len(ch1)
        a(n - 1) = Mid(ch1, Len(ch1) - n + 1, 1)
    Next
    For n = 1 To Len(ch2)
        b(n - 1) = Mid(ch2, Len(ch2) - n + 1, 1)
    Next
    For n = 0 To q - 1
        d = CInt(a(n)) + CInt(b(n)) + t(n)
        If d = 2 Then
            t(n) = 0
            t(n + 1) = 1
        ElseIf d = 3 Then
            t(n) = 1
            t(n + 1) = 1
        Else
            t(n) = d
        End If
    Next
    q = IIf(t(q) = 1, q, q - 1)
    For n = q To 0 Step -1
        Sl = Sl & t(n)
    Next
    shif = Sl

End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 13.01.2013, 14:23   #8
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Спасибо doober! Выручили)
Akika вне форума Ответить с цитированием
Старый 13.01.2013, 15:00   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Делим число на основание системы.
100/2 = 50. = 0
50/2 - 25, остаток = 0
25/2 12,5 = остаток = 1
12/2 = 6 = 0
6/2 = 3
3/2= 1
итого , записываем с конца 1100100
Проверяем по системе 1,2,4,8..
64+32+4=100.
Задача решена.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 28.01.2013, 11:08   #10
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Эпопея продолжается ^^"
Шифрование получилось. За это еще одно отдельное спасибо doober!
Осталось дешифрование. Завтра сдача..
Теперь нужна функция вычитания двух двоичных чисел)
Akika вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа в С++ для перевод из десятичной системы счисления в двоичную. VladJAy Помощь студентам 3 23.10.2012 16:03
Перевод из римской системы счисления в десятичную и наоборот Александр77777 Помощь студентам 3 19.01.2012 15:42
Pascal. перевод из десятичной системы счисления в двоичную Xeon332 Помощь студентам 3 24.01.2011 13:54
Перевод из десятичной сист. счисления в любую другую(С++) lenk0belk0 Помощь студентам 0 08.10.2010 08:58