95 lines
2.9 KiB
Text
95 lines
2.9 KiB
Text
Dim Shared As Byte dgs(0 To 9, 1 To 9, 0 To 2)
|
|
Dim As String c
|
|
Dim As Integer i, d
|
|
|
|
Restore SegmentData
|
|
For d = 0 To 9
|
|
For i = 1 To 9
|
|
Read dgs(d, i, 0), dgs(d, i, 1), c
|
|
If c <> "" Then dgs(d, i, 2) = Asc(c)
|
|
Next
|
|
Next
|
|
|
|
SegmentData:
|
|
Data 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 0
|
|
Data 0,0,"+", 0,1,"-", 0,2,"-", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 1
|
|
Data 2,0,"+", 2,1,"-", 2,2,"-", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 2
|
|
Data 0,0,"+", 1,1,"\", 2,2,"\", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 3
|
|
Data 2,0,"+", 1,1,"/", 0,2,"/", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 4
|
|
Data 2,0,"+", 1,1,"/", 0,2,"+", 0,0,"+", 0,1,"-", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 5
|
|
Data 0,2,"|", 1,2,"|", 2,2,"|", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 6
|
|
Data 0,0,"+", 0,1,"-", 0,2,"+", 1,2,"|", 2,2,"|", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 7
|
|
Data 2,0,"+", 2,1,"-", 2,2,"+", 1,2,"|", 0,2,"|", 0,0,"", 0,0,"", 0,0,"", 0,0,"" ' 8
|
|
Data 2,0,"+", 2,1,"-", 2,2,"+", 1,2,"|", 0,2,"+", 0,1,"-", 0,0,"+", 0,0,"", 0,0,"" ' 9
|
|
|
|
Sub DrawDigit(canvas() As String, digit As Integer, position As Integer)
|
|
If digit < 0 Or digit > 9 Then Exit Sub
|
|
|
|
Dim As Integer ud, lr, l, i
|
|
Select Case position
|
|
Case 1: ud = 1 : lr = 1 : l = 1
|
|
Case 2: ud = 1 : lr = -1 : l = 1
|
|
Case 3: ud = -1 : lr = 1 : l = 7
|
|
Case 4: ud = -1 : lr = -1 : l = 7
|
|
Case Else: Exit Sub
|
|
End Select
|
|
|
|
For i = 1 To 9
|
|
If dgs(digit, i, 0) = 0 And dgs(digit, i, 1) = 0 And dgs(digit, i, 2) = 0 Then Exit For
|
|
|
|
Dim As Integer row = l + ud * dgs(digit, i, 0)
|
|
Dim As Integer col = 3 + lr * dgs(digit, i, 1)
|
|
Dim As String ch = Chr(dgs(digit, i, 2))
|
|
|
|
If Instr("/\", ch) Then
|
|
If ud <> lr Then
|
|
If ch = "/" Then
|
|
ch = "\"
|
|
Elseif ch = "\" Then
|
|
ch = "/"
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If row >= 1 And row <= 7 And col >= 1 And col <= 5 Then Mid(canvas(row-1), col, 1) = Left(ch, 1)
|
|
Next
|
|
End Sub
|
|
|
|
Sub ShowCistercianNumber(n As Integer)
|
|
Dim As Byte i
|
|
|
|
Dim As String recanvas(0 To 7)
|
|
recanvas(0) = Right(" " & Str(n), 5) & ":"
|
|
Dim As String canvas(0 To 6)
|
|
For i = 0 To 6
|
|
canvas(i) = " "
|
|
Mid(canvas(i), 3, 1) = "|"
|
|
Next
|
|
|
|
Dim As Integer position = 1
|
|
Dim As Integer tmp = n
|
|
|
|
While tmp > 0 And position <= 4
|
|
DrawDigit(canvas(), tmp Mod 10, position)
|
|
position += 1
|
|
tmp \= 10
|
|
Wend
|
|
|
|
For i = 0 To 6
|
|
recanvas(i+1) = canvas(i)
|
|
Next
|
|
|
|
For i = 0 To 7
|
|
Print recanvas(i)
|
|
Next
|
|
End Sub
|
|
|
|
' Show example numbers
|
|
Dim As Integer nums(0 To 17) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 300, 4000, 5555, 6789, 9394, 7922, 9999}
|
|
|
|
For i = 0 To Ubound(nums)
|
|
ShowCistercianNumber(nums(i))
|
|
Print
|
|
Next
|
|
|
|
Sleep
|