/
ch-1.bas
executable file
·64 lines (44 loc) · 1.46 KB
/
ch-1.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Attribute VB_Name = "ModTask_01"
Option Explicit
Public Const strMyTitle As String = "Eric Cheung"
Function GetSumOfDigit(ByVal nNum As Integer) As Integer
Dim nSubLoop As Integer
For nSubLoop = 1 To Len(CStr(nNum))
GetSumOfDigit = GetSumOfDigit + CInt(Mid(CStr(nNum), nSubLoop, 1))
Next nSubLoop
End Function
Function IsInArray(nValToFind As Variant, nArr As Variant) As Boolean
'' Credit:
'' https://wellsr.com/vba/2016/excel/check-if-value-is-in-array-vba/
Dim nElem As Variant
IsInArray = False
For Each nElem In nArr
If nElem = nValToFind Then
IsInArray = True
Exit Function
End If
Next nElem
End Function
Sub Task_01()
Const MyNumMax As Integer = 20
Dim nLoop As Integer, nCount As Integer
Dim strMsg As String
Dim nFibArr(1 To MyNumMax) As Integer
nFibArr(1) = 0: nFibArr(2) = 1
For nLoop = 3 To MyNumMax
nFibArr(nLoop) = nFibArr(nLoop - 2) + nFibArr(nLoop - 1)
Next nLoop
nLoop = 0
nCount = 0
Do While (nCount < MyNumMax)
If IsInArray(GetSumOfDigit(nLoop), nFibArr) Then
nCount = nCount + 1
If strMsg <> "" Then
strMsg = strMsg & ", "
End If
strMsg = strMsg & CStr(nLoop)
End If
nLoop = nLoop + 1
Loop
MsgBox strMsg, vbOKOnly, strMyTitle
End Sub