重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

<!DOCTYPE html>
<html>
<head>
<title>P141 横に画像を一行目1枚二行目2枚・・・5行目が5枚、段階毎に出るコード </title>
</head>
<body>

<?php

※for($i=0; $i<5; $i++){
2) for($j=0; $j<$i+1; $j++){
print "<img src=\"Circle.jpg\"/>";
}
print "<br/>\n";
}

?>

</body>
</html>
 以上
 ※ $j<$i+1;のコードでは、段階毎の1行に1枚の画像~5行目は5枚の画像がでる仕組の肝心なコードだと思うのですが・・・まー それを使えば以上のようなプログラムになるよと馬鹿覚えでもいいのですが・・それではプログラムを勉強する意味がないので、仕組みをご教授で来るお方がおられましたらよろしくお願いたします。

質問者からの補足コメント

  • 皆様ご回答くださいまして誠にありがとうございました。
     さて、何かといじっていましたら
    for($i=0; $i<6; $i++){
    for($j=0; $j<$i+0; $j++){ が!
     ●
     ● ●
     ● ● ●
     ● ● ● ●
     ● ● ● ● ●
     ● ● ● ● ● ●
      当初の以下と
    for($i=0; $i<5; $i++){
    for($j=0; $j<$i+1; $j++){ と!
     同じ結果になりました。
     考え方としまして、どんな考え方なのでしょうか?
     やっとここまでたどり着くことができました^^
    $j<$i+1の絡繰りが解けません
     教えていただけないでしょうか
     よろしくお願いいたします。

      補足日時:2016/02/15 02:37
  • siffon9様 回答日時:6分前
     毎度ご回答いただき誠ありがとうございまます。
      お付き合いをいただきすみません。
     ループ事態が、のめりこむ性質ものか、私だけの特徴かさだけではないのですが、
    本日は、晩酌はしないで、合計、既に9時間以上取り込んでいます。
     ご回答を一通り読ませていただきます。
     解決に当たり、しばらくお待ちくださいませ。

      補足日時:2016/02/15 23:19
  • 新たな疑問で以下ですが?
    for($i=0; $i<1; $i++){ では表現方法は0~0の0回ではないでしょうか!?
    for($j=0; $j<$i+1; $j++){ これも上と同様で表現法要は0~0の0回ではないでしょうか?
    なので、
    ●が1個も出てこなと思いますが、実際に私のパソコンでは、●が1個出てきます。
    なぜ出てくるのでしょうか?私の得意の勘違いでしたら”すみません”
     よろしくお願いいたします。

      補足日時:2016/02/15 23:41
  • 皆様たくさんのご回答をいただきまして誠にありがとうございました。
    今まで一番面白いプログラムだと感じました
    $j<$i+1;では
     ●
     ● ●
     ● ● ●
     ● ● ● ●
     ● ● ● ● ●
     
     $j<$i;
     ●
     ● ●
     ● ● ●
     ● ● ● ●
    パターンはエトセトラ・・・
     以上はですが
     問題の$j<$iの絡繰りで、段階ごとに●が増えていく理由ですが!
     $Jが”列”を担当で、$iは”行”担当なので、$j<$iは$i++で段階ご
     とに数字が増えるのを利用して、段々となる・・・・
      ”そうだろう”というピントが合ったいない理解度のレベルです。
     やっぱり100%の理解は難しいです。
      最初から100%の理解を求めると息詰まるので徐々に理解していきたいと思います。
     まだわかりなくなったら質問いたしますのでよろしくお願いいたします。

      補足日時:2016/02/16 20:03

A 回答 (10件)

No.7です。



動いている仕様が事実です。
for($i=0; $i<1; $i++) という記述でIMAGEタグが送出されているということは「表現方法は0~0の0回」という理解は誤っているということです。
では、どう誤っているかというと、for文の終了判定は $i<1 です。そしてiの初期値(=for文の実行開始時の値)は $i=0 です。
ですから一回目のルールでは 0<1 となりこの評価結果は「真」となりループ内のロジックが実行されます。
ループの先頭に戻る際に $i++ でiはインクリメントされ2となります。するとループの先頭に戻っての終了条件の評価判定は 2<1 ですから結果は「偽」でループ内のロジックは実行されずforループを抜けます。
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
$i=0∴$i<1∴0<1が成立するので”評価結果は「真」となりループ内のロジックが実行される”・・・
なるほど、どこか勘違いしていた部分がありました、悪しからず。

お礼日時:2016/02/16 19:00

> for($i=0; $i<1; $i++){ では表現方法は0~0の0回ではないでしょうか!?



for文の動作を理解していないということです。
参考書の114~117ページ辺りをもう一度学習してください。

※動作に疑問が生じたら、参考書でその機能が最初に登場した箇所を読み直すべきです!
    • good
    • 0

> $j<$i+1の絡繰りが解けません



① for($j=0; $j<$i+1; $j++){……}が1回ループすると、●を一つ表示する。
② for($j=0; $j<$i+1; $j++){……}は、$i+1回ループする。
  従って●を$i+1個表示する。

③ for($i=0; $i<5; $i++){……}では、5回ループし、ループ毎に$iは0から4まで変化する。

④ $iが0のとき、for($j=0; $j<$i+1; $j++){……}は、1回ループする。
  従って●を1個表示する。
⑤ $iが1のとき、for($j=0; $j<$i+1; $j++){……}は、2回ループする。
  従って●を2個表示する。
⑥ $iが2のとき、for($j=0; $j<$i+1; $j++){……}は、3回ループする。
  従って●を3個表示する。
➆ $iが3のとき、for($j=0; $j<$i+1; $j++){……}は、4回ループする。
  従って●を4個表示する。
⑧ $iが4のとき、for($j=0; $j<$i+1; $j++){……}は、5回ループする。
  従って●を5個表示する。
    • good
    • 0

No.1です。


補足を拝見して。。。(_ _)

> > for($i=0; $i<6; $i++){
> > for($j=0; $j<$i+0; $j++){
>
> $j<$i+1の絡繰りが解けません

forの二重ループが立会できないということでしょうか?
では、、、

for($i=0; $i<6; $i++){
:
for($j=0; $j<$i+0; $j++){
:
}
}

こんな感じに書いてもイメージがわきませんか?
外側の変数iを使ったforループの一回目はiの値は0です。iの値が6未満ならforループ内の処理を行うので0の場合は処理に入ります。それは分かりますよね?

そうすると内側の変数jを使ったforループに行きます。この時、一回目のjの値は0です。jの値が「i+0」未満ならforループ内の処理を行うのですが、この時点でのiの値は0ですから0+0=0となり処理に入ります。そこでIMAGEタグが1つ送出されます。
で。内側の変数jを使ったforループの一回目を終わって二回目。jはカウントアップされて1になっています。一方iの方は外側のforループを回っていませんから0のままです。とすると内側のforループの脱出条件「$j<$i+0」はどうなりますか? 「1<0」となり成り立たなくなりますからループ内の処理を行わずループを抜けます。

そうすると外側の変数iを使ったforループの一回目を終わって二回目へ。iはカウントアップされて1になっています。iの値が6未満ならforループ内の処理を行うので1の場合は処理に入ります。これも分かりますよね?

そうすると内側の変数jを使ったforループに行きます。新たにfor文が出て来たので「$j=0」という初期条件により一回目もjの値は0です。
二重ループがよくわからないとするとたぶんここのところの理解ではないでしょうか? 内側のjを使ったforループは外側の一回目のループ内でも実行されていますが、一度終了条件に達して抜けています。ここでは新たにfor文が出て来てそれを実行しますので、初期条件の「$j=0」から実行されます。
ここを理解できると二重のforループがどう実行され結果的にIMAGEタグが幾つ送出されるかを頭の中で考えることが出来るようになると思います。

いかがでしょう?
    • good
    • 0

制御文 (for) が分からないのでしょうか。



for ($i = 0; $i < 5; $i++) {…}

$i = 0; { for ($j=0; $j < $i + 1; $j++) { … } print "<br/>\n"; }
$i = 1; { for ($j=0; $j < $i + 1; $j++) { … } print "<br/>\n"; }
$i = 2; { for ($j=0; $j < $i + 1; $j++) { … } print "<br/>\n"; }
$i = 3; { for ($j=0; $j < $i + 1; $j++) { … } print "<br/>\n"; }
$i = 4; { for ($j=0; $j < $i + 1; $j++) { … } print "<br/>\n"; }

for ($j=0; $j < 0 + 1; $j++) { … } print "<br/>\n";
for ($j=0; $j < 1 + 1; $j++) { … } print "<br/>\n";
for ($j=0; $j < 2 + 1; $j++) { … } print "<br/>\n";
for ($j=0; $j < 3 + 1; $j++) { … } print "<br/>\n";
for ($j=0; $j < 4 + 1; $j++) { … } print "<br/>\n";

    • good
    • 0

ここで聞く話じゃないですね。


何がわからないかわからないし、どこから話したらよいのか
もわからない。

PHPがどういうHTMLを吐くのかわからないのか?
PHPの吐くはずの HTML の内容が理解できないのか?

なんとなく解説してくれでは回答者が困ります。

ここで質問するなら疑問点を明確にしましょう。

基礎を知りたいなら自分に合った入門書や入門サイトを見ましょう。
    • good
    • 1
この回答へのお礼

基礎を知りたいなら・・・まーあなたは”神れべる”だとは存じますが!
「入門書や入門サイトを見ましょう。」はあなたの教えに勝るものはないと存じます^^
よろしくお願いいたします。

お礼日時:2016/02/12 21:10

No.1さんも仰っていますが



以下の様に、
プログラムが終了するまで、実行Line、各変数の値、出力の有無を書き出してみては如何ですか?
そうすれば多少とも理解が進むのではないかと思います。


Line01:for($i=0; $i<5; $i++){
Line02: for($j=0; $j<$i+1; $j++){
Line03:  print "<img src=\"Circle.jpg\"/>";
Line04: }
Line05: print "<br/>\n";
Line06:}


Step01 Line01実行 $iの値:0 $jの値:不定 $j+1:不定 出力: 無し
Step02 Line02実行 $iの値:0 $jの値:0  $j+1:1  出力: 無し
Step03 Line03実行 $iの値:0 $jの値:0  $j+1:1  出力: <img src="Circle.jpg"/>
Step04 Line04実行 $iの値:0 $jの値:1  $j+1:2  出力: 無し

Step05 Line02実行 $iの値:0 $jの値:1  $j+1:2  出力: 無し
Step06 Line05実行 ……
    • good
    • 0

プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識


http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82 …

 まずは落ち着いてガイドブックを読みながら基礎を習得する必要性がありそうです。
    • good
    • 0

プログラマーに向いている人とそうでない人


http://architect-wat.hatenablog.jp/entry/2014/12 …
    • good
    • 1
この回答へのお礼

なるほど面白い^^

お礼日時:2016/02/11 20:27

変数iを使ったforループと、変数jを使ったforループ。

この2重ループの中にprint分があり、そこでHTMLのIMGタグをアクセス元のWebブラウザに向かって送出しています。外側のループの際にはBRタグも送出しています。
それはわかりますよね?

では、この2重ループを頭の中で動かして、ループを抜けるまでにどういうIMGタグとBRタグがどういう順序で何個送出されるかを考えてみましょう。書き出してみるとよいですね。
最初はi=0、j=0からスタートします。1回まわるごとにカウントアップしてループの脱出条件まで回してみましょう。
    • good
    • 0

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