自転車乗りプログラム Objective-C版

ようやく完成です 標準コンソール出力の NSLog()を使用すると、時刻とか色々な情報があわせて出力されるので、 Utility.hにおいて printf()を用いて結果のみ出力できるようにしました

///////////////////////////////////
//  Cyclist.h
///////////////////////////////////
#import <Foundation/Foundation.h>

@interface Cyclist : NSObject

@property (copy) NSString* name;
@property (assign) float power;

-(id) init;
-(id) initWithName:(NSString*)name:(float)power;
-(NSString*) run:(float) slope;
-(NSString*) description;

@end


///////////////////////////////////
//  GrowingCyclist.h
///////////////////////////////////
#import "Cyclist.h"

@interface GrowingCyclist : Cyclist

-(NSString*) run:(float) slope;
-(NSString*) description;

@end


///////////////////////////////////
//  Utility.h
///////////////////////////////////
#import <Foundation/Foundation.h>

int MyPrint(NSString*);


///////////////////////////////////
//  Cyclist.m
///////////////////////////////////
#import "Cyclist.h"

@implementation Cyclist
@synthesize name;
@synthesize power;

-(id) init{
    if(self = [super init]){
    }
    return self;
}

-(id) initWithName:(NSString *)_name:(float)_power{
    if(self = [super init]){
        name = _name;
        power = _power;
    }
    return self;
}

-(NSString*) run:(float) slope;{
    NSString* _temp;
    if(power >= slope) {
        _temp=[[NSString alloc]initWithFormat:@"%@ 登攀力 %.1fは、登れます!!", name, power];
    } else {
        _temp=[[NSString alloc]initWithFormat:@"%@ 登攀力 %.1fは、登れません", name, power];
    }
    return _temp;
}

-(NSString*) description{
    NSString* _temp=[[NSString alloc]
                     initWithFormat:@"%@, 力は%f", name, power];
    return _temp;
}

@end


///////////////////////////////////
//  GrowingCyclist.m
///////////////////////////////////
#import "GrowingCyclist.h"

@implementation GrowingCyclist:Cyclist

-(NSString*) run:(float)slope{
    NSString* _temp;
    if(self.power >= slope) {
        _temp=[[NSString alloc]initWithFormat:@"%@ 登攀力 %.1fは、登れます!!", self.name, self.power];
        self.power += 0.5;
    } else {
        _temp=[[NSString alloc]initWithFormat:@"%@ 登攀力 %.1fは、登れません", self.name, self.power];
        self.power += 0.5;
    }
    return _temp;
}

-(NSString*) description{
    NSString* _temp=[[NSString alloc]
                     initWithFormat:@"%@, 力はgowingで初期値%f", [self name], self.power];
    return _temp;
}

@end


///////////////////////////////////
//  Utility.m
///////////////////////////////////
#import "Utility.h"

int MyPrint(NSString* str){
    printf("%s\n", [str UTF8String]);
    return 0;
}


///////////////////////////////////
//  main.m
///////////////////////////////////
#import <Foundation/Foundation.h>
#import "Cyclist.h"
#import "GrowingCyclist.h"
#import "Utility.h"


int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Cyclist* cyclist1=[[Cyclist alloc] initWithName:@"成熟した齋藤":4];
        GrowingCyclist* cyclist2=[[GrowingCyclist alloc] initWithName:@"成長する齋藤":4];
        float slope = 3.0;
        int n = 3;
        printf("****今度の坂道は%.1f度です これから%i回練習します****\n", slope, n);

        MyPrint([[NSString alloc]initWithFormat:@"%@は、練習開始前の登攀力が%.1fです", cyclist1.name, cyclist1.power]);
        MyPrint([[NSString alloc]initWithFormat:@"%@は、練習開始前の登攀力が%.1fです", cyclist2.name, cyclist2.power]);
        for (int i=0; i<n; i++){
            MyPrint([[NSString alloc]initWithFormat:@"%@",[cyclist1 run:slope]]);
            MyPrint([[NSString alloc]initWithFormat:@"%@",[cyclist2 run:slope]]);
        }
        
        slope = 7.0;
        n = 5;
        printf("\n\n****今度の坂道は%.1f 度です これから%i回練習します****\n", slope, n); 
        MyPrint([[NSString alloc]initWithFormat:@"%@は、練習開始前の登攀力が%.1fです", cyclist1.name, cyclist1.power]);
        MyPrint([[NSString alloc]initWithFormat:@"%@は、練習開始前の登攀力が%.1fです", cyclist2.name, cyclist2.power]);
        for (int i=0; i<n; i++){
            MyPrint([[NSString alloc]initWithFormat:@"%@",[cyclist1 run:slope]]);
            MyPrint([[NSString alloc]initWithFormat:@"%@",[cyclist2 run:slope]]);
        }
    }
    return 0;
}

これで結果出力は以下の通り

****今度の坂道は3.0度です これから3回練習します****
成熟した齋藤は、練習開始前の登攀力が4.0です
成長する齋藤は、練習開始前の登攀力が4.0です
成熟した齋藤 登攀力 4.0は、登れます!!
成長する齋藤 登攀力 4.0は、登れます!!
成熟した齋藤 登攀力 4.0は、登れます!!
成長する齋藤 登攀力 4.5は、登れます!!
成熟した齋藤 登攀力 4.0は、登れます!!
成長する齋藤 登攀力 5.0は、登れます!!


****今度の坂道は7.0 度です これから5回練習します****
成熟した齋藤は、練習開始前の登攀力が4.0です
成長する齋藤は、練習開始前の登攀力が5.5です
成熟した齋藤 登攀力 4.0は、登れません
成長する齋藤 登攀力 5.5は、登れません
成熟した齋藤 登攀力 4.0は、登れません
成長する齋藤 登攀力 6.0は、登れません
成熟した齋藤 登攀力 4.0は、登れません
成長する齋藤 登攀力 6.5は、登れません
成熟した齋藤 登攀力 4.0は、登れません
成長する齋藤 登攀力 7.0は、登れます!!
成熟した齋藤 登攀力 4.0は、登れません
成長する齋藤 登攀力 7.5は、登れます!!

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です