Microsoft Small Basic

Program Listing: JFW812
scale = "----+----1----+----2----+----3----+----4"
nines = "9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
For order = 1 To 100
a = Text.GetSubText(nines, 1, order)
b = 0
TextWindow.Clear()
TextWindow.WriteLine(scale)
TextWindow.WriteLine(a)
Expr()
If err Then
Goto error
EndIf
EndFor
Goto exit
error:
' order = 28
TextWindow.WriteLine("order=" + order)
c = Text.GetSubText(nines, 1, order - 1)
max = 6
Check()
' order = 27
max = 9
Check()
' order = 26
max = 2
Check()
' order = 25
max = 2
Check()
' order = 24
max = 8
Check()
' order = 23
max = 1
Check()
' order = 22
max = 6
Check()
' order = 21
max = 2
Check()
' order = 20
max = 5
Check()
' order = 19
max = 1
Check()
' order = 18
max = 4
Check()
' order = 17
max = 2
Check()
' order = 16
max = 6
Check()
' order = 15
max = 4
Check()
' order = 14
max = 3
Check()
' order = 13
max = 3
Check()
' order = 12
max = 7
Check()
' order = 11
max = 5
Check()
' order = 10
max = 9
Check()
' order = 9
max = 3
Check()
' order = 8
max = 5
Check()
' order = 7
max = 4
Check()
' order = 6
max = 3
Check()
' order = 5
max = 9
Check()
' order = 4
max = 5
Check()
' order = 3
max = 0
Check()
' order = 2
max = 4
Check()
' order = 1
max = 6
Check()
'
Goto exit
error2:
TextWindow.WriteLine("Limit for +/- is " + (a - 1))
exit:
TextWindow.WriteLine("Limit for +/- is " + c)
TextWindow.WriteLine("Limit for +/- is " + (c + 1))

Sub Check
' param max
TextWindow.WriteLine("")
order = order - 1
TextWindow.WriteLine("order=" + order)
b = Text.GetSubText(nines, 1, order)
TextWindow.WriteLine(scale)
TextWindow.WriteLine(b)
For times = 1 To max
a = c
TextWindow.Write(times + ": ")
TextWindow.Write(a + " + ")
TextWindow.WriteLine(b)
Expr()
If err Then
Goto error2
EndIf
EndFor
EndSub

Sub Expr
' param a, b
' return err - "True" if error
c = a + b
_a = c - b
If a <> _a Then
err = "True"
Else
err = "False"
EndIf
EndSub