next up previous contents index
次へ: スマートにいこう--条件分岐 戻る: いつも同じじゃつまらない--キーボードからの入力   目次   索引

単純な事は任せて--ループ処理

前節で、プログラムは先頭から一文ずつ順番に実行されて行くと書きました。実 際の処理では、このように単純に書けることはあまり多くありません。状況によっ て特定の文の実行を省略したり、幾つかの文を何度も繰りかえして実行したりす ることが必要になります。

たとえば、1+2+3+4+5 のように 1 から 5 までの数字の合計を計算したいとします。 Perl で書くと次のようになります。

01:  $s=1+2+3+4+5;

直接的にはこのように計算できます。しかし、5 までじゃなくて 10 までだった らまたプログラムを書換えないといけません。500 までだったら? コンピュータ はある種の馬鹿ですから、500 個の足し算をずらっと書いておいても、なんの文 句も言わずに実行してくれます。しかし、プログラムを書く人間のほうはそんな ことやってられませんね。

こういった同じような処理を繰り返す時に便利なように、繰り返し構造が プログラミング言語に用意されいます。繰り返し構造を利用するように処 理手順を書いてみると、以下のようになります。

  1. 変数 s を用意し、0 をいれておく。
  2. 変数 i を用意し、1 をいれておく。
  3. 変数 s の内容に 変数 i の内容を足し、結果をまた変数 s にいれる。
  4. 変数 i の内容を 1 増やす。
  5. 変数 i が 5 よりも小さいか等しいなら、3. へもどる。

これを Perl のプログラムにすると以下のようになります。

1:  $s=0;
2:  $i=1;	
3:  do{
4:    $s=$s+$i;
5:    $i=$i+1;
6:  }while($i<=5);

5 を別の数字に書換えれば、10 まででも 5000 まででも和を計算することがで きます。do{...}while(...); は Perl の繰り返し構造の書き方の一つで、 while(...) の括弧内に書いた条件を判定して、条件がなりたっていれば、 プログラムの制御を直前の do まで戻します。

4行目の記述は少し解りにくいかもしれません。Perl の = は普通の数学 記号の等号とは意味が違います。= の右側の式を計算して、その結果を 左側の変数に保存すると言う意味を持っています。普通の数式のように = の両側の $s がまったく同じものを表すと考えてしまうとこ の記述は理解できません。= がたとえば「←」のような記号だった らこんな誤解はないと思うのですが。

それでは、sample.pl の内容を以下のように書換えてみましょう。

01:  print "Hello!\n";
02:  print "Input any number:";
03:  $num=<>;
04:  print "Your number is $num";
05:
06:  $s=0;
07:  $i=1;	
08:  do{
09:    $s=$s+$i;
10:    $i=$i+1;
11:  }while($i<=$num);
12:
13:  print "1+2+..+$num = $s\n";

これで、このプログラムは利用者からの数字の入力を受けつけて、1 からその数 字までの合計を計算するものになりました。前回とおなじように kterm で perl sample.pl として実行してみてください。



NAGATO Yasushi 平成16年4月6日