Function DecToP(inNum As Long, inOsnova As Integer)
' Функция перевода десятиричного целого числа в число по другому основанию (2<=P<=16)
' inNum - исходное целое десятиричное число
' inOsnova - основание, в котором преобразуем число
' Функция вернёт строку с числом в новой системе, при некорректных данных строку #Аргументы!
If 2 <= inOsnova And inOsnova <= 16 Then
T = "0123456789ABCDEF" ' Cимволы для записи числа
sss = ""
iii = Abs(inNum)
Do
j = iii Mod inOsnova
iii = Int(iii / inOsnova)
sss = Mid(T, j + 1, 1) + sss
Loop While iii <> 0
If inNum < 0 Then sss = "-" + sss
DecToP = sss
Else
DecToP = "#Аргументы!"
End If
End Function
Function PToDec(inString, inOsnova As Integer)
' Функция перевода целого числа по произвольному основанию (2<=P<=16) в десятиричное
' inString- исходная строка по указанному основанию
' inOsnova - основание, из которого преобразуем число в десятиричное
' Функция вернёт число в десятиричной системе, при некорректных данных строку #Аргументы!
PToDec = "#Аргументы!"
If 2 <= inOsnova And inOsnova <= 16 Then
T = "0123456789ABCDEF" ' Cимволы для записи числа
sss = 0
iii = Trim(inString)
Znak = Mid(iii, 1, 1)
LString = Len(iii)
If Znak = "-" Or Znak = "+" Then
LString = LString - 1
iii = Mid(iii, 2, LString)
End If
iii = UCase(iii)
jjj = 1
If LString > 0 Then
For j = LString To 1 Step -1
kkk = Mid(iii, j, 1)
nnn = InStr(1, T, kkk)
If 1 <= nnn And nnn <= inOsnova Then
sss = sss + jjj * (nnn - 1)
jjj = jjj * inOsnova
Else
Return
End If
Next
If Znak = "-" Then sss = -sss
PToDec = sss
End If
End If
End Function
Private Sub CommandButton1_Click()
Range("B3") = DecToP(Range("B1"), Range("B2"))
End Sub
Private Sub CommandButton1_Click()
Range("B3") = DecToP(Range("B1"), Range("B2"))
End Sub
Private Sub CommandButton2_Click()
Range("B7") = PToDec(Range("B5"), Range("B6"))
End Sub
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.