User:Klever: Difference between revisions
Content added Content deleted
(→VBA Examples: look-and-say sequence) |
|||
Line 15: | Line 15: | ||
In MS Office program (Word, Excel, Access...): open the Visual Basic window. Paste the code in a module. Execute it by typing a suitable command in the Immediate Window. Output will be directed to the Immediate Window unless stated otherwise... |
In MS Office program (Word, Excel, Access...): open the Visual Basic window. Paste the code in a module. Execute it by typing a suitable command in the Immediate Window. Output will be directed to the Immediate Window unless stated otherwise... |
||
==[[Look-and-say sequence]]== |
|||
<lang> |
|||
Public Sub LookAndSay(Optional Niter As Integer = 10) |
|||
'generate "Niter" members of the look-and-say sequence |
|||
'(argument is optional; default is 10) |
|||
Dim s As String 'look-and-say number |
|||
Dim news As String 'next number in sequence |
|||
Dim curdigit As String 'current digit in s |
|||
Dim newdigit As String 'next digit in s |
|||
Dim curlength As Integer 'length of current run |
|||
Dim p As Integer 'position in s |
|||
Dim L As Integer 'length of s |
|||
On Error GoTo Oops |
|||
'start with "1" |
|||
s = "1" |
|||
For i = 1 To Niter |
|||
'initialise |
|||
L = Len(s) |
|||
p = 1 |
|||
curdigit = Left$(s, 1) |
|||
curlength = 1 |
|||
news = "" |
|||
For p = 2 To L |
|||
'check next digit in s |
|||
newdigit = Mid$(s, p, 1) |
|||
If curdigit = newdigit Then 'extend current run |
|||
curlength = curlength + 1 |
|||
Else ' "output" run and start new run |
|||
news = news & CStr(curlength) & curdigit |
|||
curdigit = newdigit |
|||
curlength = 1 |
|||
End If |
|||
Next p |
|||
' "output" last run |
|||
news = news & CStr(curlength) & curdigit |
|||
Debug.Print news |
|||
s = news |
|||
Next i |
|||
Exit Sub |
|||
Oops: |
|||
Debug.Print |
|||
If Err.Number = 6 Then 'overflow |
|||
Debug.Print "Oops - number too long!" |
|||
Else |
|||
Debug.Print "Error: "; Err.Number, Err.Description |
|||
End If |
|||
End Sub |
|||
</lang> |
|||
Output: |
|||
<pre> |
|||
LookAndSay 7 |
|||
11 |
|||
21 |
|||
1211 |
|||
111221 |
|||
312211 |
|||
13112221 |
|||
1113213211 |
|||
</pre> |
|||
(Note: overflow occurs at 38th iteration!) |
|||
==[[Floyd-Warshall algorithm]]== |
==[[Floyd-Warshall algorithm]]== |