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