Помогите разобраться с функцией

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
user334
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 15.03.2010 (Пн) 19:56

Помогите разобраться с функцией

Сообщение user334 » 15.03.2010 (Пн) 20:05

имеется функция
Код: Выделить всё
Private Sub Check_Click(Index As Integer)
If Check1(Index).Value = 1 Then
Dim Dex As Integer
Dim Bin As String
Bin = ""
   For n = 8 To 1 Step -1
    Bin = Bin & Check(n).Value
    If Check(n).Value = 1 Then Check(n).BackColor = vbGreen Else Check(n).BackColor = vbRed
   Next n
   For n = 1 To Len(Bin)
    Dex = Dex + CLng(Mid$(Bin, n, 1)) * 2 ^ (Len(Bin) - n)
   Next n
MsgBox(Dex)
End If
End Sub


ее мне надо перевести на другой язык но я не совсем понимаю некоторые действия а точнее при каком входном ее значении какое значение Dex она будет выдавать в MsgBox ?
сам я в VB новичок так что прошу помощи тут
заранее спасибо всем кто поможет !

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Помогите разобраться с функцией

Сообщение Antonariy » 15.03.2010 (Пн) 20:15

при каком входном ее значении какое значение Dex она будет выдавать в MsgBox ?
Значение dex не зависит от параметра процедуры.
Лучший способ понять что-то самому — объяснить это другому.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите разобраться с функцией

Сообщение iGrok » 15.03.2010 (Пн) 20:17

А ничего, что Dex зависит не от входного значения ф-ции(которое - просто индекс чекбокса, которому сменили состояние), а от состояния всех восьми чекбоксов?

А выдаёт она десятичное представление двоичного числа, единицы в котором представлены "отмеченными" чекбоксами, а нули - неотмеченными.

UPD: Хе.. Опередили. )
label:
cli
jmp label

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Помогите разобраться с функцией

Сообщение Alec » 15.03.2010 (Пн) 23:10

Antonariy писал(а):Значение dex не зависит от параметра процедуры.

iGrok писал(а):А ничего, что Dex зависит не от входного значения ф-ции(которое - просто индекс чекбокса, которому сменили состояние), а от состояния всех восьми чекбоксов?

Э, а это:
user334 писал(а):
Код: Выделить всё
If Check1(Index).Value = 1 Then


?
Иногда лучше вовремя остановиться...
И начать заново!

user334
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 15.03.2010 (Пн) 19:56

Re: Помогите разобраться с функцией

Сообщение user334 » 15.03.2010 (Пн) 23:39

да, я уже писал-Dex зависит от параметра функции которыми являются состояния нажатых\отжатых кнопок
что я хочу понять-как зависит значение Dex от этих самых кнопок и по какой формуле оно рассчитывается (в виде не стандартных операций а описанием на обычном языке)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Помогите разобраться с функцией

Сообщение Денис » 16.03.2010 (Вт) 12:26

user334 писал(а):я хочу понять-как зависит значение Dex от этих самых кнопок и по какой формуле оно рассчитывается (в виде не стандартных операций а описанием на обычном языке)


Функция такая замороченная и непонятная оттого, что в бейсике нет функции перевода из двоичной системы в десятичную. Вот такой простейший рефакторинг все упрощает:

Вот это очень желательно
Код: Выделить всё
Option Explicit


Вот Ваша процедура (убрано всё лишнее, а перевод вынесен в отдельную функцию)
Код: Выделить всё
Private Sub Check_Click(Index As Integer)
   
   Dim Dex As Integer
   Dim Bin As String
   Dim N As Long
   
      Bin = ""
     
      For N = 8 To 1 Step -1
         Bin = Bin & Check(N).Value       'Вот здесь собирается двоичное число
         If Check(N).Value = 1 Then
            Check(N).BackColor = vbGreen  'Попутно раскрашиваем галки в зеленый
         Else
            Check(N).BackColor = vbRed    'и красный цвет
         End If
      Next N
     
   Dex = BinToDec(Bin)                    'Здесь мы переводим двоичное число в десятичное
   
   Me.Caption = Dex                       'Я вывожу результат в заголовок окна

End Sub


если в языке на который Вы переводите, есть готовая функция, то функция ниже не нужна. Вместо нее, вместо вызова Dex = BinToDec(Bin) Вы пишете что-то типа ConvToDec[Bin; Dex])

Код: Выделить всё
Private Function BinToDec(strData As String) As Long

   Dim N As Long
   Dim D As Long
   
      'Классический перевод двоичного числа в десятичное
      'N это регистр. Регистр умножается на 2 в степени номера регистра
      For N = 1 To Len(strData)
         D = D + CLng(Mid$(strData, N, 1)) * 2 ^ (Len(strData) - N)
      Next N
   
   BinToDec = D
   
End Function
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Помогите разобраться с функцией

Сообщение Antonariy » 16.03.2010 (Вт) 13:00

Alec писал(а):Э, а это:
Это влияет на то, читать dex ли нет, а не на результат.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 101

    TopList