• 締切済み

Fizz-Buzz問題のソース

プログラミングの初心者です。 Fizz-Buzz問題をPHPで書いてみました。 <?php for ($i=1; $i<=100; $i++) { if ($i%3==0 && $i%5==0) { // 3でも5でも割り切れる数 echo "Fizz-Buzz"; } elseif ($i%3==0 && $i%5!==0) { // 3で割り切れる数 echo "Fizz<br>"; } elseif ($i%3!==0 && $i%5==0) { //5で割り切れる数 echo "Buzz<br>"; } else{ //3でも5でも割り切れない数 echo "$i<br>"; } } ?> こんな感じになったのですが、何か問題点はあるでしょうか? ちなみに、echo末尾に<br>を入れているのは、<br>なしで作ると、12Fizz4Buzz……と改行なしに表示されて読みにくかったからです。 インターネット上のソースを見ると、$i%3==0 && $i%5==0 ではなく $i%15==0 にしていたり、三項演算子を使ってバイト数を減らしたりと色々工夫がされているようですが、そちらのほうがよいのでしょうか。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

○ if 文などの説明をよく読んでください http://www.php.net/manual/ja/control-structures.if.php if()のかっこの中は「式」で、その評価結果が真か偽かで分岐します。 式ということは $a=式; という形で計算結果を変数に代入できるはずです。演算子の優先順位を考えれば $a=(式); が確実でしょう。 ○比較演算子の「等しい」には===と==があります。 それぞれの否定(等しくない)は!==と!=です。 この2つは意味が違います。 その違いを知らない人が、使い方を混同して、期待通りに動作してくれない、というのがよくあります。 http://www.php.net/manual/ja/language.operators.comparison.php

selfless
質問者

お礼

再び回答ありがとうございます。 式をfunctionの中に入れて、function()==trueとすればよいのでしょうか。 > 比較演算子 !=と<>には型の相互変換という意味があったんですね。知りませんでした。

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

このプログラムを見ると、初心者が書いたものだ、と感じます。 動作自体は問題はないでしょう。 > if ($i%3==0 && $i%5==0) { // 3でも5でも割り切れる数 が成立しなかった場合の > } elseif ($i%3==0 && $i%5!==0) { // 3で割り切れる数 なのですから、$i % 3 == 0 なら $i % 5 != 0 になるのは当たり前。 無駄な事をしている、と感じます。 それを解消しても $i % 3 == 0 を2回も計算しているのが無駄に感じます。 比較演算や論理値について理解が足りないのかも、と思います。 ==などは、TRUE/FALSEを返す「演算」です。値があるので、変数に保存することもできます。 また == と !== との組み合わせを見て、PHPの比較演算子の違いを理解していないのではないか、と感じます。 ==の否定は!==ではありません。

selfless
質問者

お礼

回答ありがとうございます。 > なのですから、$i % 3 == 0 なら $i % 5 != 0 になるのは当たり前。 elseif($i%3==0)だけ書いておけば十分、ということでしょうか。 > 値があるので、変数に保存することもできます。 ifの結果を変数に保存するにはどのように書けばよいのでしょうか。 > PHPの比較演算子の違い 「何」と比較演算子の違いですか? > ==の否定は!==ではありません。 調べてみると、!=か<>を使うようですね。

すると、全ての回答が全文表示されます。
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.1

縦に表示させるとスクロールさせなければなりません。横が見にくいのであれば空白を入れるとかでいいんじゃないですか? 計算機のやることなので結果が合っていれば細かい点はいいのですけど、多分プログラミングのセンス問われますよ。

selfless
質問者

お礼

回答ありがとうございます。 私はスクロールはさほど気にならなかったのですが、ないほうがよいでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A