繰り返し

あるブロックを繰り返し実行することができます。繰り返しのことをループ(loop)と呼んだりします。繰り返しを行う制御文は

などがあります。ここでは代表的なこの3文を取り上げます。

while文

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 ( 繰り返しに入る前に実行する文; 条件式; 繰り返しごと最後に実行する文 ){
             
      ブロック
             
};

の形(改行・インデント後)をしています。通常は

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文は以下の形をしています。

foreach スカラー変数 (リスト) { ブロック }

リストの各要素をスカラー変数に代入しながら、リストの要素の個数回、ブロックの実行を繰り返します。リストには配列や連想配列も使うことができます。スカラー変数は省略することができます。その場合には、各要素は変数$_に代入されます。

例 配列の要素を表示するプログラム

プログラム

@name = ("shio", "okajima", "fukuzawa"); # 配列@nameを定義

foreach $n (@name) {  # 配列@nameの要素数だけ繰り返し

	print "$n\n"; # 変数$nの値を出力

}

実行結果

shio

okajima

fukuzawa

練習問題

入力された個数だけ"*"を出力するプログラムを作成せよ。

例 入力が3のとき…***、入力が5のとき…*****

練習問題の答