-2

I am trying to add up all the Shannon entropy of all the alphabetical characters in a word document. Instead of it adding the characters it gives me what I put for character(27) as an answer.

Dim characters(1 To 27) As Double
Dim x As Integer 'for looping
Dim tot As Double 'The final value

characters(1) = 0.1859 'Space
characters(2) = 0.0856 'A
characters(3) = 0.0139 'B
characters(4) = 0.0279 'C
characters(5) = 0.0378 'D
characters(6) = 0.1304 'E
characters(7) = 0.0289 'F
characters(8) = 0.0199 'G
characters(9) = 0.0528 'H
characters(10) = 0.0627 'I
characters(11) = 0.0013 'J
characters(12) = 0.0042 'K
characters(13) = 0.0339 'L
characters(14) = 0.0249 'M
characters(15) = 0.0707 'N
characters(16) = 0.0797 'O
characters(17) = 0.0199 'P
characters(18) = 0.0012 'Q
characters(19) = 0.0677 'R
characters(20) = 0.0607 'S
characters(21) = 0.1045 'T
characters(22) = 0.0249 'U
characters(23) = 0.0092 'V
characters(24) = 0.0149 'W
characters(25) = 0.0017 'X
characters(26) = 0.0199 'Y
characters(27) = 0.0008 'Z

For x = 1 To 27
    tot = tol + characters(x)
Next

MsgBox "The Shannon entropy of the alphabetic characters in this document is " & tot 

What I am getting

Today was a good day

The Shannon entropy of the characters in this document is 0.0008

What I am trying to get

Today was a good day

 The Shannon entropy of the characters in this document is 1.2798542258337
hue manny
  • 239
  • 2
  • 19
  • 1
    Third time with this question, so maybe try changing your approach a little? Your previous questions have code which seem a good place to start with this task: loop over the characters in the document's `Text` property. Maybe look at the output of `Asc(char)` for each character, and use that to key into your array: `Asc("A")` is 65, `Asc("B")` is 66, etc – Tim Williams Nov 30 '14 at 20:26
  • possible duplicate of [Word VBA Script for Shannon entropy of the alphabetic characters](http://stackoverflow.com/questions/27195372/word-vba-script-for-shannon-entropy-of-the-alphabetic-characters) – Kazimierz Jawor Nov 30 '14 at 21:17

1 Answers1

1

I don't know if you have noticed that you wrote this:

For x = 1 To 27
    tot = tol + characters(x)
Next

...while you might have wanted to write this:

For x = 1 To 27
    tot = tot + characters(x)
Next

In fact, what you want is that tot is iteratively summing to itself a new value. But if you write

tot = tol + characters(x)

...what happens is that tol is always = 0 (because it doesn't preserve it's value and gets its 0 value by default) and so tot will be obviously equal to 0 + the last element because it does not keep its changes either. It's a typo, just change tot = tol + characters(x) with tot = tot + characters(x) and the code will work.

Matteo NNZ
  • 11,930
  • 12
  • 52
  • 89