Averages/Simple moving average: Difference between revisions

m
m (reorder objeck and ocaml)
Line 1,931:
=={{header|Objective-C}}==
 
<lang objc>#import <Foundation/Foundation.h>
#import <Foundation/Foundation.h>
 
@interface MovingAverage : NSObject {
Line 1,939 ⟶ 1,938:
double sum;
}
- (instancetype)initWithPeriod:(unsigned int)thePeriod;
@end
 
Line 1,944:
 
// init with default period
- (idinstancetype)init {
self = [super init];
if(self) {
period = 10;
window = [[NSMutableArray alloc] init];
Line 1,955:
 
// init with specified period
- (idinstancetype)initWithPeriod:(unsigned int)thePeriod {
self = [super init];
if(self) {
period = thePeriod;
window = [[NSMutableArray alloc] init];
Line 1,963:
}
return self;
}
 
// clear
- (void)dealloc {
[window release];
[super dealloc];
}
 
Line 1,974 ⟶ 1,968:
- (void)add:(double)val {
sum += val;
[window addObject:[NSNumber numberWithDouble:@(val])];
if([window count] > period) {
NSNumber *n = [window objectAtIndex:[0];
sum -= [n doubleValue];
[window removeObjectAtIndex:0];
Line 1,995 ⟶ 1,989:
if(thePeriod < [window count]) {
for(int i = 0; i < thePeriod; ++i) {
NSNumber *n = [window objectAtIndex:[0];
sum -= [n doubleValue];
[window removeObjectAtIndex:0];
Line 2,015 ⟶ 2,009:
 
@end
</lang>
 
int main (int argc, const char * argv[]) {
Usage:
@autoreleasepool {
<lang objc>
double testData[10] = {1,2,3,4,5,5,4,3,2,1};
int periods[2] = {3,5};
for(int i = 0; i < 2; ++i) {
MovingAverage *ma = [[MovingAverage alloc] initWithPeriod:periods[i]];
for(int j = 0; j < 10; ++j) {
[ma add:testData[j]];
NSLog(@"Next number = %f, SMA = %f", testData[j], [ma avg]);
}
NSLog(@"\n");
}
}
return 0;
[ma release];
}</lang>
NSLog(@"\n");
}
</lang>
 
{{out}}
Output:
<pre>
Next number = 1.000000, SMA = 1.000000
Line 2,055 ⟶ 2,049:
Next number = 2.000000, SMA = 3.800000
Next number = 1.000000, SMA = 3.000000
 
</pre>
 
Anonymous user