RosettaCodeData/Task/Set-right-adjacent-bits/FreeBASIC/set-right-adjacent-bits.basic

48 lines
1.3 KiB
Plaintext

Sub setRightBits(bits() As Integer, e As Integer, n As Integer)
Dim As Integer i, j
If e = 0 Or n <= 0 Then Exit Sub
Dim bits2(1 To e) As Integer
For i = 1 To e : bits2(i) = bits(i) : Next
For i = 1 To e - 1
If bits(i) = 1 Then
j = i + 1
While j <= i + n And j <= e
bits2(j) = 1
j += 1
Wend
End If
Next i
For i = 1 To e : bits(i) = bits2(i) : Next
End Sub
Dim As Integer i, k, ub, n
Dim As String b = "010000000000100000000010000000010000000100000010000010000100010010"
Dim tests(8, 2) As String
tests(1, 1) = "1000": tests(1, 2) = "2"
tests(2, 1) = "0100": tests(2, 2) = "2"
tests(3, 1) = "0010": tests(3, 2) = "2"
tests(4, 1) = "0000": tests(4, 2) = "2"
tests(5, 1) = b: tests(5, 2) = "0"
tests(6, 1) = b: tests(6, 2) = "1"
tests(7, 1) = b: tests(7, 2) = "2"
tests(8, 1) = b: tests(8, 2) = "3"
For k = 1 To 8
Dim bits(1 To Len(tests(k, 1))) As Integer
For i = 1 To Len(tests(k, 1))
bits(i) = Val(Mid(tests(k, 1), i, 1))
Next i
ub = Ubound(bits)
n = Val(tests(k, 2))
Print Using "n = #; Width e = ##:"; n; ub
Print " Input b: "; tests(k, 1)
setRightBits(bits(), ub, n)
Print " Result: ";
For i = 1 To ub
Print Str(bits(i));
Next i
Print Chr(10)
Next k
Sleep