あるブロックを繰り返し実行することができます。繰り返しのことをループ(loop)と呼んだりします。繰り返しを行う制御文は
などがあります。ここでは代表的なこの3文を取り上げます。
while文は
while ( 条件式 ) { ブロック };の形(読みやすいように改行・インデントしてます)をしています。条件式が真である限りブロックの内容を繰り返し実行します
例1 0からnまでの数字を出力するプログラム(while文)
「変数$iの値を0からnまで変化させてその都度変数$iの値を出力する」
ということをします。このような計算や問題を解決するための手順・方式をアルゴリズムといいます。アルゴリズムを考えることはプログラムを作る重要な一歩です。繰り返しごとに値が変化し、終了判定で使われる変数をループ変数と呼びます。この場合は変数$iがループ変数になります。
プログラム
#!/usr/local/bin/perl $n=5; # 変数$nの値を定義(任意) $i=0; # 変数$iを0に初期化 while ($i<=$n) { # 変数$iの値が変数$nの値より小さい間繰り返し print "$i\n"; # 変数$iの値を出力して改行 $i=$i+1; # 変数$iの値を1増やす };実行結果
0 1 2 3 4 5例2 nの階乗を計算するプログラム(while文)
nの階乗はn×(n-1)×…×2×1です。これを計算するために、
「nの数をひとつずつ1になるまで減らして行き、階乗を計算するために用意した変数にnの値を順にかけてゆく」
ということをします。
プログラム
#!/usr/local/bin/perl $n = 10; # 階乗を計算したい数 print "$nの階乗は"; $factorial = 1; # 変数$factorialの初期値を1にする while ( $n > 1 ) { # 変数$nが1より大きい間繰り返し $factorial = $factorial * $n ; # 変数$factorialに変数$nの値をかけて代入 $n = $n - 1; # 変数$nの値を1減らす }; print "$factorialです。";実行結果
10の階乗は3628800です。
for文は
for ( 繰り返しに入る前に実行する文; 条件式; 繰り返しごと最後に実行する文 ){ ブロック };の形(改行・インデント後)をしています。通常は
for ( ループ変数の初期化; 条件式; ループ変数の増減 ) { ブロック };という形で使われるのが普通です。
例1 0からnまでの数字を出力するプログラム(for文)
前出のプログラムをfor文で書き直したものです。
プログラム
#!/usr/local/bin/perl $n=5; # 変数$nの値を定義(任意) for ($i=0;$i<=$n;$i=$i+1) { # 変数$iの値が変数$nの値より小さい間繰り返し print "$i\n"; # 変数$iの値を出力 };実行結果
0 1 2 3 4 5例2 nの階乗を計算するプログラム
前出のプログラムをfor文で書き直したものです。
プログラム
#!/usr/local/bin/perl $n = 10; # 階乗を計算したい数 $factorial = 1; # 変数$factorialの初期値を1にする for ( $i = $n; $i > 1; $i = $i - 1) { # 変数$iが10から2までの間繰り返し $factorial = $factorial * $i ; }; print "$nの階乗は$factorialです。";実行結果
10の階乗は3628800です。
リストの各要素について繰り返しの処理にはforeach文を使うと便利です。foreach文は以下の形をしています。
foreach スカラー変数 (リスト) { ブロック }リストの各要素をスカラー変数に代入しながら、リストの要素の個数回、ブロックの実行を繰り返します。リストには配列や連想配列も使うことができます。スカラー変数は省略することができます。その場合には、各要素は変数$_に代入されます。
例 配列の要素を表示するプログラム
プログラム
@name = ("shio", "okajima", "fukuzawa"); # 配列@nameを定義 foreach $n (@name) { # 配列@nameの要素数だけ繰り返し print "$n\n"; # 変数$nの値を出力 }実行結果
shio okajima fukuzawa
入力された個数だけ"*"を出力するプログラムを作成せよ。
例 入力が3のとき…***、入力が5のとき…*****
練習問題の答