Другие языки программирования и технологии

Программирование на VBA

Помогите, пожалуйста, не знакома с языком, но необходим макрос для лабораторной

Есть 4 ячейки с текстовыми значениями x (4 символа, например 0000), a (4 символа, например 1011), y(3 символа, например 001), b(3 символа, например 101). Мне нужно вывести результат формулы:

rez = (x[1] And a[1)] Xor (x[2] And a[2]) Xor (x[3] And a[3]) Xor (x[4] And a[4]) Xor (y[1] And b[1]) Xor (y[2] And b[2]) Xor (y[3] And b[3]) = 1.

В квадратных скобках место символа в строке.
rez=1 , см.рисунок

Код (проверьте по рисунку, т.к. может исказится в HTML):


Public Sub sample()
Dim x$, a$, y$, b$, rez&
'Есть 4 ячейки с текстовыми значениями x (4 символа, например 0000), a (4 символа, например 1011), y(3 символа, например 001), b(3 символа, например 101).
x = "0000"
a = "1011"
y = "001"
b = "101"
'Мне нужно вывести результат формулы:
'rez = (x[1] And a[1)] Xor (x[2] And a[2]) Xor (x[3] And a[3]) Xor (x[4] And a[4]) Xor (y[1] And b[1]) Xor (y[2] And b[2]) Xor (y[3] And b[3]) = 1)
rez = (getBit(x, 1) And getBit(a, 1) Xor (getBit(x, 2) And getBit(a, 2)) Xor (getBit(x, 3) And getBit(a, 3)) Xor (getBit(x, 4) _
And getBit(a, 4)) Xor (getBit(y, 1) And getBit(b, 1)) Xor (getBit(y, 2) And getBit(b, 2)) Xor (getBit(y, 3) And getBit(b, 3)) = 1)
Debug.Print "x='"; x; "'"
Debug.Print "a='"; a; "'"
Debug.Print "y='"; y; "'"
Debug.Print "b='"; b; "'"
Debug.Print "rez="; rez
End Sub

'Достает бит из strBinary-строкового представления Bin-числа. idx -индекс 0-бита = 1
Public Function getBit(strBinary$, ByVal idx%) As Integer
Dim aBuf() As Byte
idx = idx - 1 'индекс от 1
Debug.Assert (0 < Len(strBinary)) 'мы здесь если strBinary-строка пустая
aBuf = StrConv(StrReverse(strBinary), vbFromUnicode) 'строка в байтовый массив
Debug.Assert (0 <= idx And UBound(aBuf) >= idx) 'мы здесь если с idx-индексом не лады
getBit = IIf(48 = aBuf(idx), 0, 1) '48 -код символа "0"
End Function
Ильдар Галимуллин
Ильдар Галимуллин
4 442
Лучший ответ
Ильдар Галимуллин еще момент - младшие биты в числе (например) y="001" справа,
т.е. y[3] = 0, y[1] = 1
а суть вычислений какая