- ベストアンサー
PHPのテストで要素合計が1000を越えた時の処理について
- PHPのテストです。以下のコードでは、1から始まる$countと0から始まる$sumの2つの変数を用いてwhileループを実行します。
- ループ内では、$countを$sumに加算し、$sumが1000を超える場合は処理を終了して$countの値を表示します。
- ループが終了した後に$sumの値を表示し、コードの動作を確認します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ここに色々な証明法が載っていますが、ベストアンサーのものが一番シンプルで分かりやすいと思います。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1162036776
その他の回答 (5)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>式の提示有難うございます。この式の出し方についても教えていただけないでしょうか? http://ja.wikipedia.org/wiki/%E7%AD%89%E5%B7%AE%E6%95%B0%E5%88%97 等差数列 です。 1+2+・・・10なら、 (1+10)*(10)/2=55 (最初+最後)*(間の距離)/2です。 この手の式は答えが最初からあるので、 実は計算する意味はなかったりもします。 等比が、掛け算タイプ。
補足
有難うございます。余裕があればこういう勉強もしてみます。数学がてんで駄目なんで。
- vivace152
- ベストアンサー率55% (91/165)
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の方のような数学的な話です。
- Gotthold
- ベストアンサー率47% (396/832)
> (2)count は2なので > $sum += $count; のところで$sumは 2になり 1に2を足した結果は3です。 2ではありません。
補足
失礼しました。
数学のお話です。 1+2+3+4+5+...+n = n(n+1)/2 という公式はご存知ですよね。中学校か高校ぐらいで習うはずです。 n=44 のとき 990 n=45 のとき 1035 となるので、45で終了することは自明です。
補足
式の提示有難うございます。この式の出し方についても教えていただけないでしょうか?
- vivace152
- ベストアンサー率55% (91/165)
コード通りに正常に動いていると思います。 countが45で終了する理由は、 whileループ中のif文に 「if ($sum > 1000)」と、 $sumの値でチェックをしているからです。 合計値$sumの値が1000を超えた時点でループを抜けるようになっています。
お礼
早速のご返答ありがとうございました!
補足
>countが45で終了する理由は、 >whileループ中のif文に >「if ($sum > 1000)」と、 >$sumの値でチェックをしているからです。 式のプロセスを細かく教えていただけませんか?
補足
難しすぎます(。>0<。)。でもプログラマーでもこのくらい知っておいた方がよいでしょうか?