アプリ版:「スタンプのみでお礼する」機能のリリースについて

基本事項過ぎてすいません。

以下のコードですが、
処理結果が

1000を越えたので count = 45 で終了しますsum = 1035

なのですが、あってますでしょうか?
なぜ45で終了なんですか?


(1)まずcount は1なので
$sum += $count; のところで$sumは 1になり
1>1000なので、$count += 1; に飛び 1+1 で2

(2)count は2なので
$sum += $count; のところで$sumは 2になり
2>1000なので、$count += 1; に飛び 1+2で3

(3)count は3なので





という風に続けていくと999ぐらいまで行きませんか?


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>サンプル</title>
</head>
<body>

<p>PHPのテストです。</p>


<p>
<?php

$count = 1;
$sum = 0;

while ($count <= 100){
$sum += $count;

if ($sum > 1000){
print '1000を越えたので count = '.$count.' で終了します';
break;
}

$count += 1;
}
// breakが実行された時に処理が移る位置
print 'sum = '.$sum;

?>

</p>

</body>
</html>

A 回答 (6件)

コード通りに正常に動いていると思います。



countが45で終了する理由は、
whileループ中のif文に
「if ($sum > 1000)」と、
$sumの値でチェックをしているからです。
合計値$sumの値が1000を超えた時点でループを抜けるようになっています。

この回答への補足

>countが45で終了する理由は、
>whileループ中のif文に
>「if ($sum > 1000)」と、
>$sumの値でチェックをしているからです。

式のプロセスを細かく教えていただけませんか?

補足日時:2014/04/13 20:39
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございました!

お礼日時:2014/04/13 20:38

数学のお話です。



1+2+3+4+5+...+n = n(n+1)/2

という公式はご存知ですよね。中学校か高校ぐらいで習うはずです。

n=44 のとき 990
n=45 のとき 1035

となるので、45で終了することは自明です。

この回答への補足

式の提示有難うございます。この式の出し方についても教えていただけないでしょうか?

補足日時:2014/04/13 21:15
    • good
    • 0

> (2)count は2なので


> $sum += $count; のところで$sumは 2になり
1に2を足した結果は3です。
2ではありません。

この回答への補足

失礼しました。

補足日時:2014/04/13 21:15
    • good
    • 0

ここに色々な証明法が載っていますが、ベストアンサーのものが一番シンプルで分かりやすいと思います。


http://detail.chiebukuro.yahoo.co.jp/qa/question …

この回答への補足

難しすぎます(。>0<。)。でもプログラマーでもこのくらい知っておいた方がよいでしょうか?

補足日時:2014/04/16 20:45
    • good
    • 0

No.1です。

補足への回答です。

>>countが45で終了する理由は、
>>whileループ中のif文に
>>「if ($sum > 1000)」と、
>>$sumの値でチェックをしているからです。
>
>式のプロセスを細かく教えていただけませんか?

whileループ中に下記のif文があります。

if ($sum > 1000)
{
print '1000を越えたので count = '.$count.' で終了します';
break;
}

if文の判定条件は「$sum > 1000」ですので、変数$sumの値が1000を超えると真となり、
if文のかっこ{ }内を実行します。
今回の場合、print文で「1000を超えたので・・・」の部分のメッセージを表示して、
break文でwhileループを抜けます。

whileループを抜けた後はコメントとして
「// breakが実行された時に処理が移る位置」
とある部分に移動します。
ここに処理が移動する理由は、while文の範囲を表すかっこの後ろ側「}」が
このコメントの前の行にあるからです。


「式のプロセス」ということですが、こんな感じでよろしいでしょうか?

この回答への補足

いや、さすがにそっちのプロセスは分かります。ではなく回答No2の方のような数学的な話です。

補足日時:2014/04/16 20:44
    • good
    • 0

>式の提示有難うございます。

この式の出し方についても教えていただけないでしょうか?

http://ja.wikipedia.org/wiki/%E7%AD%89%E5%B7%AE% …
等差数列
です。

1+2+・・・10なら、
(1+10)*(10)/2=55
(最初+最後)*(間の距離)/2です。

この手の式は答えが最初からあるので、
実は計算する意味はなかったりもします。

等比が、掛け算タイプ。

この回答への補足

有難うございます。余裕があればこういう勉強もしてみます。数学がてんで駄目なんで。

補足日時:2014/04/16 20:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!