質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.79%

単体のテストパターン(入れ子)が分かりません

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 379

hasune

score 17

単体でのテストパターンがイメージできません。
if文の入れ子でつまずいています。フローチャートを書いてみても途中で分からなくなりました。

条件が1~3あって、文1~3が処理結果として表示されるのでしょうか?
ご回答お待ちしています。よろしくお願いいたします。

if(●●==■■){            条件1
if(▲▲==(U2)0x70{     条件2
if((◆◆==OFF)            条件3
&&(〇〇〇<=◇◇◇)){
▽▽=(U1)ON;             文1
☆☆=(U1)ON;
}
else{
▽▽=(U1)OFF;           文2
☆☆=(U1)OFF;
}
}
else{
▽▽=(U1)ON;            文3
☆☆=(U1)OFF;
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

decision-table書きなされ。こんなの↓

式1    式2    式3
false  ----- -----  なにもしない
true   false -----  文3
true   true  false  文2
true   true  true   文1


※ ----- は 「true/false どっちでもいい」の意

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/08 21:45

    やはりそのテーブルが条件分岐を分かりやすくするのに適してるんですね・・・。
    紙に書いてみても途中からよく分からなくなってしまっている状態です。

    そもそもelseが2つあるのが謎です。
    elseというのは、「全ての条件式が偽の時に実行する処理」だと思います。
    これならelseはひとつあれば十分なのではないのでしょうか?

    if(●●==■■){ 条件1
    if(▲▲==(U2)0x70{ 条件2
    if((◆◆==OFF) 条件3
    &&(〇〇〇<=◇◇◇)){
    ▽▽=(U1)ON; ①
    ☆☆=(U1)ON;
    }
    else{
    ▽▽=(U1)OFF; ②
    ☆☆=(U1)OFF;
    }
    }
    else{
    ▽▽=(U1)ON; ③
    ☆☆=(U1)OFF;
    }

    キャンセル

  • 2019/05/08 22:01

    インデントつけてよーく見てみ。 if~else~else にはなってないよ。

    キャンセル

  • 2019/05/09 21:19

    Chironianさんがつけてくださったインデントありのコードを見てみて考えました。
    elseが2つあるのはおかしいと思ったのは、
    私の中で条件1に対して2つelseがあると思えたため違和感となっていました。
    インデントをつけたのを見るとそれぞれのifとセットになっているのですね。

    まだどのifとelseがセットなのかパッとひらめけませんが、
    インデントをつけることで少しだけ理解できました。
    ありがとうございます。

    キャンセル

checkベストアンサー

0

![イメージ説明説明](9e5ea8ee02eca3d1f435a1e50e6a7659.png)](f2f7879d941a58eafa81cbfb327bed61.png)

IF構文は、(a) IFで判断する条件、(b) 条件が成立した時(THEN)に行う処理、(c) 条件が成立しなかった時(ELSE)に行う処理、の3つから出来ていて、THENブロックやELSEブロックが無い場合もあります。

質問のコードのフローチャートを書いてみると上の図のようになります。
・最初のIF(条件1)には 条件が成立しない時(ELSE)の処理が無くて、条件が成立した時(①THEN)には、IF(条件2)に行きます。
・二つ目のIF(条件2)で条件が成立した時(②THEN)はIF(条件3)に行き、条件が成立しない時(②ELSE)は文3が実行されます。
・三つ目のIF(条件3)で条件が成立した時(③THEN)は文1が実行され、条件が成立しない時(③ELSE)には文1が実行されます。

分かりづらかったのは、最初のIFのELSEブロックが無いためではないかと思います。あるいは、THENブロックに"THEN"とは書かれていないからかも。

IFが3つあったら、THENブロックとELSEブロックも、それぞれ3つあるのが標準的な構成で、THENブロックやELSEブロックが無い(処理すべきものが無いので省略されている)場合もあるというふうに理解してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/09 21:48

    自分だと上手く作れなかったためフローチャートは非常に助かります。ありがとうございます!

    >分かりづらかったのは、最初のIFのELSEブロックが無いためではないかと思います。
    仰る通りで、ひとつ疑問が解決されました。
    最初のIF(条件1)elseが省略されているのは処理がないからなんですね。
    すごく合理的ですが、初心者の私にはそこまで考えが及びませんでした・・・。

    二つ目のIF(条件2)で条件が成立しない時(②ELSE)は文3にいくのは、
    そういう書き方だからなのでしょうか?
    すみません、 条件と文がどうセットになっているのかピンときていません。
    考え方としては、外から中に条件と文がセットになっていく感じでしょうか?

    キャンセル

  • 2019/05/12 20:37

    >分かりづらかったのは、最初のIFのELSEブロックが無いためではないかと思います。

    レスへのコメントをいただけませんでしたが、
    おそらくもうコメントはつかないと思われるので締め切らせていただきます。
    こちらのコメントが大きな手掛かりとなったためベストアンサーとさせていただきます。
    皆様、どうもありがとうございました。

    キャンセル

0

こんにちは。

インデントを付け直してみました。一目瞭然ではないでしょうか?

if(●●==■■)                              条件1
{
    if(▲▲==(U2)0x70                       条件2
    {
        if((◆◆==OFF) &&(〇〇〇<=◇◇◇))  条件3
        {
            ▽▽=(U1)ON;                    文1
            ☆☆=(U1)ON;
        }
        else
        {
            ▽▽=(U1)OFF;                   文2
            ☆☆=(U1)OFF;
        }
    }
    else
    {
        ▽▽=(U1)ON;                        文3
        ☆☆=(U1)OFF;
    }


ところで、最後の}が抜けてますね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/08 21:49 編集

    わざわざ見やすいようインデントをつけていただいたのに理解ができませんでした。
    大変申し訳ないです・・・。

    何が分からなくさせているのか考えてみたところ、
    「全ての条件式が偽の時に実行する処理をする」elseが2つもあることが一番の謎です。

    p.s.最後の}ご指摘ありがとうございます。
    ふつうは1つで十分なのではないのでしょうか?

    キャンセル

  • 2019/05/08 21:57

    「全ての条件式が偽の時に実行する処理をする」という判定式は存在していないですよ。
    if文についてもう一度学習されると良いと思います。
    ↓に良い例題があると思います。
    https://www.sejuku.net/blog/25214

    > ふつうは1つで十分なのではないのでしょうか?
    { と } は対応がとれていないといけません。

    キャンセル

  • 2019/05/09 21:30

    仰る通りif文への理解がまだまだ浅いです・・・。理解が足らず申し訳ないです。
    実はこちらのサイトは既に閲覧済みでしたが、
    やはり入れ子の場合のテストパターンがイメージできません・・。

    ただ、ifがどのelseとセットなのか分からないのですが、
    以下のコメントで何かつかみかけました。ありがとうございます!
    > ふつうは1つで十分なのではないのでしょうか?
    { と } は対応がとれていないといけません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る