Averages/Simple moving average: Difference between revisions
Content added Content deleted
(→{{header|Perl}}: some more clarification and code clean-up) |
(Add Brat implementation) |
||
Line 324: | Line 324: | ||
Number = 1 SMA3 = 2 SMA5 = 3 |
Number = 1 SMA3 = 2 SMA5 = 3 |
||
</pre> |
</pre> |
||
=={{header|Brat}}== |
|||
Object version |
|||
<lang brat> |
|||
SMA = object.new |
|||
SMA.init = { period | |
|||
my.period = period |
|||
my.list = [] |
|||
my.average = 0 |
|||
} |
|||
SMA.prototype.add = { num | |
|||
true? my.list.length >= my.period |
|||
{ my.list.deq } |
|||
my.list << num |
|||
my.average = my.list.reduce(:+) / my.list.length |
|||
} |
|||
sma3 = SMA.new 3 |
|||
sma5 = SMA.new 5 |
|||
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1].each { n | |
|||
p n, " - SMA3: ", sma3.add(n), " SMA5: ", sma5.add(n) |
|||
}</lang> |
|||
Function version |
|||
<lang brat>sma = { period | |
|||
list = [] |
|||
{ num | |
|||
true? list.length >= period |
|||
{ list.deq } |
|||
list << num |
|||
list.reduce(:+) / list.length |
|||
} |
|||
} |
|||
sma3 = sma 3 |
|||
sma5 = sma 5 |
|||
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1].each { n | |
|||
p n, " - SMA3: ", sma3(n), " SMA5: ", sma5(n) |
|||
}</lang> |
|||
Output: |
|||
<pre>1 - SMA3: 1 SMA5: 1 |
|||
2 - SMA3: 1.5 SMA5: 1.5 |
|||
3 - SMA3: 2 SMA5: 2 |
|||
4 - SMA3: 3 SMA5: 2.5 |
|||
5 - SMA3: 4 SMA5: 3 |
|||
5 - SMA3: 4.6666666666667 SMA5: 3.8 |
|||
4 - SMA3: 4.6666666666667 SMA5: 4.2 |
|||
3 - SMA3: 4 SMA5: 4.2 |
|||
2 - SMA3: 3 SMA5: 3.8 |
|||
1 - SMA3: 2 SMA5: 3</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |