
for文で特定の数字を出力したいです。
しかし、こちらの課題の解答を見ても理解ができなく困っています。
大変失礼な投稿かもしれませんがこちらのコードロジックを解説して頂きたいです。宜しくお願い致します。
もし、こういうソースを読みなさい等があれば叱咤激励も含め、教えて頂きたいです。
PHP
1<?php 2// 以下をfor文を使用して表示してください。 3 4// 1 5// 21 6// 321 7 8 9$ten = 10; 10$sum = 0; 11for($i = 0; $i < 3; $i++) { 12 $sum = (($i + 1) * $ten**$i) + $sum ; 13 echo $sum . "<br>\n"; 14}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答4件
2
ベストアンサー
PHP: 演算子の優先順位 - Manual
で演算される順序を確認できます。
$a + $b 加算 $a および $b の合計
$a * $b 乗算 $a および $b の積
$a ** $b 累乗 $a の $b 乗
$ten = 10; $sum = 0; $i = 0;
のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
は
$sum = ((0 + 1) * 10**0) + 0;
加算や乗算よりも累乗の方が優先順位が高いので、10**0が先に処理されて1になり、
$sum = ((0 + 1) * 1) + 0;
$sum = ((1) * 1) + 0;
$sum = 1 + 0;
$sum = 1;
となります。
続いて$ten = 10; $sum = 1; $i = 1;
のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
は
$sum = ((1 + 1) * 10**1) + 1;
$sum = ((2) * 10) + 1;
$sum = (20) + 1;
$sum = 21;
続いて$ten = 10; $sum = 21; $i = 2;
のとき、
$sum = (($i + 1) * $ten**$i) + $sum ;
は
$sum = ((2 + 1) * 10**2) + 21;
$sum = ((3) * 100) + 21;
$sum = 321;
実際に自分の手を動かして、変数の値を入れ込んでいけば、計算式の意味はどなたでも理解できるのではないでしょうか。
投稿2022/03/03 02:21
編集2022/03/03 02:23
退会済みユーザー
総合スコア0
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント
2
ベストアンサー
理解できるまではちょっとずつ分解して把握したほうがよいかもしれません
PHP
1$ten = 10; 2$sum = 0; 3for($i = 0; $i < 3; $i++) { 4 //$iが3未満の間は0から1ずつ増えていく 5 $tmp1=($i + 1); 6 //$tmp1に$i+1を投入、最初は0なので$tmp1は1 7 $tmp2=$ten**$i; 8 //$tmp2に$tenのi乗を投入、最初は0なので$tmp2は1 9 $tmp3=$tmp1 * $tmp2 10 //$tmp3に$tmp1と$tmp2をかけ合わせたものを投入 11 $sum += $tmp3; 12 //$sumに$tmp3を加算 13 echo $sum . "<br>\n"; 14 //$sumを表示して改行 15}
- 0のときは$tmp1=1,$tmp2=1,$tmp3=1,$sum=1;
- 1のときは$tmp1=2,$tmp2=10,$tmp3=20,$sum=21;
- 2のときは$tmp1=3,$tmp2=100,$tmp3=300,$sum=321;
投稿2022/03/03 00:52
総合スコア112597
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント
0
他の方が詳しく書いてくださっている、
ソースのロジックをまとめてみます。
考え方
得たい結果ですが、以下のように分解できます。
1 = {1 * 1}
21 = {2 * 10} + {1 * 1}
321 = {3 * 100} + {2 * 10} + {1 * 1}
また、
1 = 10 ** 0 (10の0乗)
10 = 10 ** 1 (10の1乗)
100 = 10 ** 2 (10の2乗)
であるため、上記は、
1 = {1 * (10 ** 0)}
21 = {2 * (10 ** 1)} + {1 * (10 ** 0)}
321 = {3 * (10 ** 2)} + {2 * (10 ** 1)} + {1 * (10 ** 0)}
となります。
上記の数字の「0,1,2」の部分をfor文で回したものが、
提示されておりますソースとなります。
「1,2,3」は「0,1,2」に1足したもの($i+1)で補っているようです。
その他
質問の趣旨から外れますが、
10までならば、以下の方法もあると思いました。
http://phptester.net/ で出力しました。
php
1$end = 10; 2$str = ""; 3for ($i = 1; $i <= $end; $i++) { 4 $str = (string)$i . $str; 5 echo (int)$str . "<br>\n"; 6} 7echo "<hr>"; 8 9$ten = 10; 10$sum = 0; 11for($i = 0; $i < $end; $i++) { 12 $sum = (($i + 1) * $ten**$i) + $sum ; 13 echo $sum . "<br>\n"; 14}
投稿2022/03/03 16:21
総合スコア48
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
0
php for
でgoogleで検索したら、上の方に以下のサイトが表示されました
参考)
https://techacademy.jp/magazine/4896
yamabejpさんやphp-gresさんの回答やこのサイトを見ても理解が厳しいでしょうか?
そうであればこの先も独学はちょっと厳しい気がするので、ある程度のお金払ったりしてでももう少し丁寧に教えてくれるサービスを利用するのもありかもしれませんね。
投稿2022/03/03 02:19
編集2022/03/03 02:28総合スコア4341
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
同じタグがついた質問を見る
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。