2015年3月3日火曜日

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

前回は
print "Hello World!\n";
というプログラムを実行しました。

今度はもっと複雑なプログラムを書いてみましょう。今回は、計算をするためのプログラムでも書いてみましょうか。

じゃあどんな計算をするか。。。それでは1から100までを順番に足していくプログラムを書いてみましょう。

1から100までを足す・・・というとふつうは人力でそんなことをしません。人力でやるとめんどうだからです。ふつうの人は計算機を使うか、あるいは少年時代のカール・フリードリヒ・ガウスなら計算を工夫して101×50と計算するでしょう(注1)

今回は自分でプログラムを書いて求めてみましょう。

1、まず、Perlで計算をするための基礎を学びましょう。数学や物理では計算に代数を使いますが、Perlではスカラー変数を使って計算します。変数名の頭には $ をつけ、 アルファベットから始めなくてはいけません。2文字目以降は数字、アルファベットおよびアンダースコア ( _ ) を使うことができます。ハイフン( - )は使えません。アルファベットの大文字・小文字は区別されます。
○ $abc
○ $abc5
○ $a_b
× $5abc
× $_abc
× $a-b


2、スカラー変数に代入します。
$a = 1;
$b = 2;
$c = 3;
こう記述すると、$a には 1 が、 $b には 2 が、 $c には 3 が代入されます。
printを使って、画面に表示してみましょう。
1~3行目でスカラー変数に代入しています。4行目でこの変数を文章と一緒に表示します。
このプログラムを実行してみます。

すると、上記のような結果になりました。プログラムは $a などのスカラー変数の場所に、代入された数字を表示していますね。

気をつけなくてはいけないのは、数学とは (=)イコール の扱いが若干違うことです。
$a = 1;
$a = 2;
$a = 3;
このように記述することは、数学ではできません。しかし、プログラミングではできます。では、 $a はいまどんな値が代入されているのでしょうか。
これを実行してみます。
これが実行結果です。$a には 3 が代入されていることがわかりました。
数学では (=)イコール は「等しい」という意味です。しかし、プログラミングでは、このように、等しいというよりは、「~を代入する」という意味合いが強くなります。

プログラミングでは、プログラムを実行すると、上の記述からから順に実行されていきます。そのため、上記のプログラムでは $a に 1 が代入され、次に 2 が代入され、最後に 3 が代入されました。そのため、 $a は最終的に 3 として扱われているのです。


続く・・・。

脚注

(注1) ふつうに計算すると、1+2+3+4+・・・+98+99+100=?です。しかし、この順番を並び替えてみると、(1+100)+(2+99)+(3+98)+・・・+(48+53)+(49+52)+(50+51)=?と、足すと101になる組み合わせが50個あるのだと考えることができます。だから、101×50で1から100までの総和が求められるわけですね。これがガウスの工夫です。今回は全く関係ないですが・・・。