PHP言語初心者です。どうぞよろしくお願い申し上げます。OSはmac os x 10.4.11です。


<pre>
<?php
$i = 1;
$sum = 0;

while($sum <= 10)
{
$sum = $sum + $i;
$i++;
echo "sum=".$sum."¥n";
echo "i = ".$i."¥n";
}
?>

</pre>

上記のコードを実行すると、
sum=1
i = 2
sum=3
i = 3
sum=6
i = 4
sum=10
i = 5
sum=15
i = 6

と表示されてしまい、$sum <= 10を満たしてくれません。

ところが、


<pre>
<?php
$i = 1;
$sum = 0;

while($sum >= 10)
{
$sum = $sum + $i;
$i++;
echo "sum=".$sum."¥n";
echo "i = ".$i."¥n";
}
?>

</pre>

を実行すると、何も表示されません。
なぜなのでしょうか?
できるだけ、分かりやすい説明でお願い申し上げます。
どうぞよろしくお願い申し上げます。

回答の条件
  • 1人5回まで
  • 登録:2009/05/18 15:57:25
  • 終了:2009/05/18 16:38:29

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/05/18 16:11:59

ポイント42pt

まず、ご質問の1番目のプログラムが、$sum <= 10を満たさないという件について――。

while ループは、その条件が書かれている位置を評価します。

ところが、echo で $sum の値を表示する前に $sum に対して演算を行っていますから、while 条件式の位置における $sum の値と、echo の位置における $sum の値が変わってしまいます。

これを表で表すと以下のようになります。while条件式は正しく働いており、6回目のループに入る前に while 条件式でループが終了するのです。

ループ回数 while の位置における $sumの値 echo の位置における $sum の値
1回目 0 1
2回目 1 3
3回目 3 6
4回目 6 10
5回目 10 15
6回目 15 21


次に、2番目のプログラムが、なぜ何も表示しないのかについて――。

while ループに入る前に $sum = 0 としています。したがって、最初に while ループの条件である $sum >= 10 の評価が FALSE になり、一度もループの中に入ることはありません。

ですから、一度も echo が実行されないのです。


それでは、どうすれば望ましいループ終了条件式になるかというと、下記のように、条件判断式の中に算術演算を加えるといいでしょう。

<?php
$i = 1;
$sum = 0;

while (($sum = $sum + $i) <= 10) {
    $i++;
    echo "sum=".$sum."¥n";
    echo "i = ".$i."¥n";
}
?>
id:gbs01

なるほど。

ありがとうございます。

とても助かりました。

2009/05/18 16:32:29

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/05/18 16:11:59ここでベストアンサー

ポイント42pt

まず、ご質問の1番目のプログラムが、$sum <= 10を満たさないという件について――。

while ループは、その条件が書かれている位置を評価します。

ところが、echo で $sum の値を表示する前に $sum に対して演算を行っていますから、while 条件式の位置における $sum の値と、echo の位置における $sum の値が変わってしまいます。

これを表で表すと以下のようになります。while条件式は正しく働いており、6回目のループに入る前に while 条件式でループが終了するのです。

ループ回数 while の位置における $sumの値 echo の位置における $sum の値
1回目 0 1
2回目 1 3
3回目 3 6
4回目 6 10
5回目 10 15
6回目 15 21


次に、2番目のプログラムが、なぜ何も表示しないのかについて――。

while ループに入る前に $sum = 0 としています。したがって、最初に while ループの条件である $sum >= 10 の評価が FALSE になり、一度もループの中に入ることはありません。

ですから、一度も echo が実行されないのです。


それでは、どうすれば望ましいループ終了条件式になるかというと、下記のように、条件判断式の中に算術演算を加えるといいでしょう。

<?php
$i = 1;
$sum = 0;

while (($sum = $sum + $i) <= 10) {
    $i++;
    echo "sum=".$sum."¥n";
    echo "i = ".$i."¥n";
}
?>
id:gbs01

なるほど。

ありがとうございます。

とても助かりました。

2009/05/18 16:32:29
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982009/05/18 16:20:30

ポイント28pt

whileは ループに入る前にチェックします。

なので最初のは

sum=10

i = 5

でループに入ったので ちゃんと $sum <= 10を満たして実行されています。

そのあと

$sum = $sum + $i;

$i++;

としたので

sum=15

i = 6

を表示したのです。


二番目のは

最初から $sum >= 10を満たしていないので

ループ内の処理はされません。

id:gbs01

なるほど。ありがとうございます。

2009/05/18 16:33:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません