Play Journal Entries

Petit computer 3

ゆっきF-YUKKY

09/23/2017 2:55 AM ·Spoilers

こういうIFの使い方でもOKということを初めて知りました!

Advertisement

Comment

This post has no comments.

  • その書き方だとエラーは出なくてもほとんどの場合思った通りに動きません。 その理由はコンピュータの気持ちになって考えれば分かります。 ……という冗談は置いといて コンピュータは式を左から順に計算します。 ==などは条件が成立すれば1、成立しなければ0という計算結果を返します。 なので、 まずA==Bが計算されて1もしくは0になります。 その後、A==Bの結果1もしくは0とCが比較されるため、変な結果になります。 テストで書くと無条件で不正解になるので気を付けましょう。

    Yeahs4
    Played
  • こういちさん>>あああああああああああああ!!!!(ブリュリ(以下割愛) …は置いといて、 駄目ではないです。 確かに予想と違う事になるかもしれませんが、 エラーも吐きませんし大丈夫です。 ちなみに投稿画像と、私のコメント画像は同じ動作をします。

    Yeahs1
    Played
  • 画像張り忘れた…

    Yeahs1
    Played
  • ご指摘ありがとうございます!

    Yeahs0
    Played
  • 変わったIF文の書き方、って捉えちゃうと難しいと思っちゃうかも知れませんが、所詮は式、って言う認識が身に付くと、プログラミングの仕方の幅が広がるというか、簡単になると思います。 算術演算も比較演算も論理演算もビット演算も変数も定数も戻り値1つの関数も全部式。式は代入文(=)の右側に書くことができて、IF文とかの条件のところにも書くことができると。 IF 1 THEN ~ IF F THEN ~ IF A%/2 THEN ~ IF B*(C==5)>D THEN ~ IF SPVAR(0,0) THEN ~

    Yeahs2
    Played
  • A==Bのような等号や不等号を行った比較演算はtrue(成立時)の場合は1の値を返しfalse(不成立)の場合は0を返します。そして、IFは条件式部分の値が0以外ならばTHEN以下を実行するためIF A==B==C==D==E==F THEN ~を見てみるとまずAとBを比較して0か1の値になりその値を変数Cと比較して・・・ということを行っています。 そのため仮に「変数A~Fの値が0もしくは1の値しか取らない場合でA~Fの値がすべて1になっているかどうかを判定したい」ならばこのIF文は正しく動作します。 私ならば「変数A~Fの値が0もしくは1の値しか取らない場合でA~Fの値がすべて1になっているかどうかを判定したい」という場合は IF A*B*C*D*E*F THEN ~と記述してしまいますが・・・。

    Yeahs0
    Played
  • どんな記述方法であっても自分が想定している通りに動けばそれは正解であり、いくらきれいな記述であっても自分が想定しているように動かなければそれは不正解です。 したがって、自分が何をしたいのかが分かっていれば記述方法は無数にあり正解も無数にあるということです。(つまり、そのIF A==B==C==D==E==F THEN ~という1文を見ても正解か不正解かの判断をすることはできない) 完全に動作原理を把握する必要はありませんが、もしも「ちゃんと思った通りに動いているかさえ分からない」というのであればその記述は避けた方がいいでしょう。 余談ですが、プチコン3号の演算は基本的に左側から順番に処理されますが、構文解析は右から行わるため自作関数を使ってIF A()==B()==C()==D()==E()==F() THEN ~という判定を行うと予想外の結果になる可能性もあるので注意しましょう

    Yeahs1
    Played
  • ありがとうございました!

    Yeahs0
    Played
  • おちゃめさん > プチコン3号の演算は基本的に左側から順番に処理されますが、 > 構文解析は右から行わる 構文解析については == は左結合つまり a==b==c は (a==b)==c と解釈される 実行順序というか評価順序は 構文木を作り時計回りで帰りがけ順に評価 になります。 この場合、 c を評価して b を評価して a を評価して 一個目の == を評価(演算)して 二個目の == を評価 となります。

    Yeahs0
    Played
  • MIKIさんへ 右から行われるのは「構文解析」ではなく「評価」でしたね。 プチコン3号では構文解析は実行した時点で中間コードへとコンパイルされるのでその際に行われています。 変数の評価は1つのIF文の中でどのような順番においても変わることはないのですが、関数の評価に関しては順番で変わる恐れがあるため注意が必要ということです。

    Yeahs0
    Played

Add a Comment

You must sign in to post a comment.

Sign in using a Nintendo Network ID to connect to users around the world by writing posts and comments and by giving Yeahs to other people's posts. You can create a Nintendo Network ID using your Wii U console or your system in the Nintendo 3DS family.

Use of Miiverse Details about Miiverse

Report Violation to Miiverse Administrators

You are about to report a post with content which violates the Miiverse Code of Conduct. This report will be sent to Nintendo's Miiverse administrators and not to the creator of the post.

Violation Type:

Post ID: 3DB-NBL7-DPU-2NL8-WTG-K4EJ

Report Violation to Miiverse Administrators

You cannot report posts made automatically by a software title.

Edit Post

Select an action: