« AppleScriptのAppleScript | メイン | Cocoaはじめの一歩+α 練習問題3 »

Cocoaはじめの一歩+α 練習問題2

Cocoaはじめの一歩というサイトの歩き方です。
Cocoaはじめの一歩にある練習問題を通じでXcodeとobjective-Cになじもうとする企画です。

では練習問題2をやって見ましょう。

この問題はC言語のループ処理をコーディングすることが目的です。
練習問題1と同様に、今まで何かの言語でプログラミングをしたことがあれば、問題なく解答ができると思います。そうでない場合も”C言語”、”ループ処理”でネット検索すればコードの書き方がわかると思います。

ところでべき乗って負の値があることをご存知ですか?
3のべき乗を考えてみましょう。
まずは正の値。
3の1乗=3
3の2乗=3*3=9
3の3乗=3*3*3=27

指数が1増えると数が3倍になっていますね。
3の1乗=3
3の2乗=3の1乗*3=9
3の3乗=3の2乗*3=27

これを逆に考えると、指数が1つ減るとその値は3分の1になると言えます。
3の1乗=3
3の0乗=3の1乗/3=1
3の−1乗=3の0乗/3=1/3
3の−2乗=3の−1乗/3=1/9
3の−3乗=3の−2乗/3=1/27

結果をみると、
nの0乗=1
nのマイナスm乗は、nのm乗の逆数
といえそうですね。

なぜこんなくどい説明をしたかというと、そうですマイナスの指数や0乗をプログラミングしてほしいからです。いろいろなロジックが考えられますがあなた自身で考えてみてください。
もちろんべき乗の基数が0やマイナスの場合も考えてね。

解答です。


- (IBAction)calculate:(id)sender {     int i,value1, value2;     float result;     value1=[value1Field intValue];     value2=[value2Field intValue];

    result = 1;
    if (value1 == 0 ) {
        result=0;
    }
    else if (value2 > 0) {
        for (i =1;i <= value2; i++) { result = result * value1; };
    }
    else if (value2 < 0) {
        for (i =-1;i >= value2; i--) {result = result / value1; };
    }
    
    [resultField setFloatValue: result];
}


ソースとしては、はじめに結果(result)を1とおきます。
基数がゼロの場合の結果はゼロとします。
正の累乗の場合は掛け算を、負の累乗の場合は割り算をそれぞれ繰り返すというロジックです。
ゼロ乗の場合ななにもしないので、はじめにセットした1が結果となります。
最後に計算した結果を表示させます。

Exercise2.zip

ところで0の0乗や0のマイナスm乗って不定というのが正解らしいのですが、xillionは数列
的に考えて0としました。0のマイナスm乗はゼロ割ではないかって?まあ数列的判断ですから。

ひとつ前の投稿は「AppleScriptのAppleScript」です。
次の投稿は「Cocoaはじめの一歩+α 練習問題3」です。

トラックバック

このエントリーのトラックバックURL:
http://www.xillion.net/mova/mt-tb.cgi/285

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年02月23日 14:21に投稿されたエントリーのページです。

メインページアーカイブページも見てください。

Powered by
Movable Type 3.34