Averages/Simple moving average: Difference between revisions

Add Brat implementation
(→‎{{header|Perl}}: some more clarification and code clean-up)
(Add Brat implementation)
Line 324:
Number = 1 SMA3 = 2 SMA5 = 3
</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}}==