2015年3月3日火曜日

Perlを学ぼう 5(1から100までを順番に足していくプログラム)

前回、1から100までを足すプログラムを書くための大体の基礎を勉強しました。今回は実際に1から100までを足すプログラムを書いてみましょう。

まず、何が必要なのかを考えてみます。必要な事と言えば次のようなものでしょう。

0、まずゼロからスタート。
一、1 を足す。(これを kaisuu としてカウントする)
二、1 だけ増えた kaisuu を今までの数字の合計 goukei と足す。(足した結果を goukei に上書きする)
三、この処理を繰り返す。
四、100回足したら(kaisuuのカウントが100になったら)計算を終える。
五、結果として goukei を表示する。

これをプログラミングでコンピュータに命令してあげればいいわけですね。
では、実際にやってみます。

1、今回はある命令を繰り返すことが求められるので、while という命令を使います。
while (条件) {
# 処理
}
こういう風に書くと、 ( ) 内に定められた条件で、処理の繰り返しをします。繰り返したい処理は { } ではさみます。
今回はこの処理を繰り返す while を使って、こんな風に書きます。

$kaisuu = 0;
$gokei = 0;

while( $kaisuu <= 100 ) {

print"$gokei\n";
$kaisuu++;
$gokei = $gokei + $kaisuu;

}

まず、
$kaisuu = 0;
$gokei = 0;
という風に、スカラー変数にゼロを代入しています。スカラー変数は、そのままだとめちゃくちゃな数字が入っているので、ゼロを代入して、変数内部の数字をゼロに変えてあげるのです。これを変数の初期化といいます。また、こういう風に、最初に「こんな変数を使うよ」とあらかじめ書いてあげることを、変数の宣言といいます。

while はさっき紹介したとおり、ある処理を繰り返すものですね。カッコ内の条件式は $kaisuu <= 100 と書いてあります。これは$kaisuuが100以下である限り、処理を繰り返すよ、という意味です。記号の書き方が若干数学と違います。以下の表を参考にしてください。

画像引用元:大町伸宏. 2009.「Perl入門5」大谷大学卒業論文「Python学習者のためのPerl入門教材について」添付資料. 

では、while でどういう処理を繰り返せと言っているのでしょうか。内部にはつぎのように書かれています。

print"$gokei\n";
$kaisuu++;
$gokei = $gokei + $kaisuu;

print は前回やりましたね。ダブルクオーテーション内の文字列を画面に表示しろという命令です。ダブルクオーテーション内には $gokei とありますから、処理の初めにまず $gokei という変数に格納されている数字を表示します。最初に $gokei = 0; としましたから、最初はゼロが格納されています。

次は $kaisuu++; です。++ は「 1 ずつ足せ」という意味です。だから、$kaisuu = $kaisuu + 1; と書いても同じです。ただ、++ と書いたほうが短くてすむので、めんどくさくないのです。
$kaisuu にも最初に 0 を代入したので、最初は 0 です。しかし、$kaisuu は処理を繰り返すたびに 1 ずつ増えていきます。

最後に $gokei に $gokei + $kaisuu を代入しています。$gokei も $kaisuu も最初は 0 ですが、$kaisuu は 1 ずつ増えていきます。よって、一番最初は 0 たす 1 という処理になります。この結果を $gokei という変数に格納します。

このプログラムを実行すると、結果を表示(0)、0+1を実行・結果を表示、1+2を実行・結果を表示、3+3を実行・結果を表示、という処理を100回繰り返します。最初に条件式として $kaisuu <= 100 を定めたので、 $kaisuu が100に到達するとストップします。

このプログラムの実行結果は・・・
0 から始まり・・・
計算は100回繰り返されます。結果は5050。
以上が1から100までのすべての数字を足すプログラムとなります。

それでは、練習問題として、1から10までの数字を全部足すプログラムを作ってみましょう。
最終結果が55になれば正解です。