2009-04-10 6 views
0

入力X:編集でこのIF文はネストされているかどうか?

if (0 <= X and X < 49) 
    output "abc" 
else if (50 <= X and X < 70) 
    output "def" 
else if (70 <= X and X < 85) 
    output "ghi" 
else if (85 <= X and X < 100) 
    output "jkl" 
endif 
+0

これは何を求めているのですか?新しいifがelseにネストされているかどうかにかかわらず、本当の理由は何ですか? – Jorn

+0

@Jorn、何がポイントであるかを尋ねるポイントは何ですか?彼は明らかに知りたいと思っていました。それがネストされていなければ、プログラムのロジックは大きく異なるでしょう。それで、私はイントロプログラミングのクラスで宿題をたくさん見ました。 – mmcdole

答えて

-1

:気にしないで、私は、私はこの1つ上wronfgた同意します。

ifは、trueをテストした別のifの中でテストされていないため、そうではありません。特に

、あなたの例:文が別の場合内にネストする必要がない場合は

アン:

if (0 <= X and X < 49) output "abc"; return; end if 

if (50 <= X and X < 70) output "def"; return; end if 

if (70 <= X and X < 85) output "ghi"; return; end if 

if (85 <= X and X < 100) output "jkl"; return; end if 

// X < 0 or X >= 100 

コメント:

if (0 <= X and X < 49) output "abc" 

else if (50 <= X and X < 70) output "def" 

else if (70 <= X and X < 85) output "ghi" 

else if (85 <= X and X < 100) output "jkl" 

endif 

は、以下のように書き換えることができます入れ子にする。それは他の人の中に入れ子にすることができます - リザードをコードします

ポイントを取った;私はこれに間違っていることに同意するでしょう。

+0

ifステートメントは、ネストする場合、別のステートメント内でネストする必要はありません。 elseの中に入れ子にすることができます。 –

8

次へ論理的に等価であると考えることができます:

if(a) { 
    // code 
} else { 
    if(b) { 
     // code 
    } else { 
     // code 
    } 
} 

だから、この点では、ネストされた、それを呼び出すことができます。 C言語やそれに類する言語では、 "elseif"文が使えないので、これはまさにその動作です。中括弧はオプションですが、私はそれを明確にするためにそれらを含めました。

+0

あなたはまさに正しいです。これは入れ子に見えませんが、おそらくほとんどの言語にあります。 – Jorn

0

言語に応じてネストループとして実装される場合があります。しかし、あなたが論理的に書いたように、それは一つとは考えられません。

5

これらはネストされていますが、ネストされていないようにフォーマットされています。これは、ネストされていない

if (0 <= X and X < 49) 
    output "abc" 
else 
    if (50 <= X and X < 70) 
     output "def" 
    else 
     if (70 <= X and X < 85) 
      output "ghi" 
     else 
      if (85 <= X and X < 100) 
       output "jkl" 
      endif 
     endif 
    endif 
endif 

あなたのコードは同じです

if (0 <= X and X < 49) 
    output "abc" 
endif 
if (50 <= X and X < 70) 
    output "def" 
endif 
if (70 <= X and X < 85) 
    output "ghi" 
endif 
if (85 <= X and X < 100) 
    output "jkl" 
endif 

これは、文が(使用してのようなものを無視した場合持っているすべての言語で有効です{}(?) endifの代わりに)

しかし、一部の言語では実際の "elseif"(または "elif")コマンドがあります。この場合、ではなくがネストされますが、 "else if"と書かれていると、それはちょうど別の書式設定されたネストだとみなすことができます。

+0

最初の例と同じではありません。それは4つではなく、1つのendifを持っています! –

3

実際の言語とその書き方によって異なります。 VBを使用して例えば

は、これらのIf文はネストされていません。

If 0 <= x And x < 49 Then 
    output("abc") 
ElseIf 50 <= x And x < 70 Then 
    output("def") 
ElseIf 70 <= x And x < 85 Then 
    output("ghi") 
ElseIf 85 <= x And x < 100 Then 
    output("jkl") 
End If 

これらIf文がネストされているものの:

If 0 <= x And x < 49 Then 
    output("abc") 
Else 
    If 50 <= x And x < 70 Then 
     output("def") 
    Else 
     If 70 <= x And x < 85 Then 
      output("ghi") 
     Else 
      If 85 <= x And x < 100 Then 
       output("jkl") 
      End If 
     End If 
    End If 
End If 
+0

私はあなたの分析に同意します。 –

3

私は彼らが入れ子になっているそうだと思います。あなたのコードは全く同じです

if (0 <= X and X < 49) 
    output "abc" 
else 
    if (50 <= X and X < 70) 
     output "def" 
    else 
     if (70 <= X and X < 85) 
      output "ghi" 
     else 
      if (85 <= X and X < 100) 
       output "jkl" 
endif 

私は空白を変更したことに注意してください。言語がif...else if...else句を評価するとき、真の句が見つかるか(または最終的にelseになる)まで、それぞれをテストします。ネストされたifは全く同じ方法で評価されます。また、明示的なelsifキーワードがある場合、必ずしもそうであるとは限りません。私は気づく

もう一つ、次はあなたのコードにない同等です:

if (0 <= X and X < 49) 
    output "abc" 

if (50 <= X and X < 70) 
    output "def" 

if (70 <= X and X < 85) 
    output "ghi" 

if (85 <= X and X < 100) 
    output "jkl" 

ネストが条件のすべてに該当する場合に出力されてから、テキストのすべてを維持するために必要です。

+0

書かれた条件は相互に排他的ではないので、別々の条件として書き直すには、単一の入力に対して複数の出力がないことを保証するために魔法の注意が必要です。 –

1

表示されている構文を考えれば、回答は他の回答の蓄積された知恵とは逆に、「いいえ」でなければならないと思います。

あなたが示しています

if (0 <= X and X < 49) 
    output "abc" 
else if (50 <= X and X < 70) 
    output "def" 
else if (70 <= X and X < 85) 
    output "ghi" 
else if (85 <= X and X < 100) 
    output "jkl" 
endif 

は、これは明らかに、単一のif ... endif文ですので、何のネスティングはありません。複数endif文があった場合 は、入れ子にすることになります。

if (0 <= X and X < 49) 
    output "abc" 
else 
    if (50 <= X and X < 70) 
     output "def" 
    else 
     if (70 <= X and X < 85) 
      output "ghi" 
     else 
      if (85 <= X and X < 100) 
       output "jkl" 
      endif 
     endif 
    endif 
endif 

だから、あなたの言葉で、キーワードelif(Bourneシェルで使用される)とelsif(Perlので使用される)とElseIfを(使用していること表示されますVisual Basic)は、else ifという綴りです。

文の終わりを明示するための明示的なendifがない場合は、他の回答と一致します。ifステートメント(複数形)はネストされていますが、レイアウトは完全に賢明で推奨されます。

+0

その単一のendifは私を悩ませましたが、私はそれが擬似コードであることを許しました。 –

0

いいえ、そうではありません。

ネストされたステートメントは、If ... Ifのように同じステートメント内に表示されます。 If ... ElseIfはすべて同じ "ステートメント"にあります。

1

これは多少意味のないゲームです。それは関係する言語の構文に依存します。

たとえば、Cのような構文では、通常はelse節にネストされていると見なされますが、その事実を隠すために省略されています。この場合、Turnorの例は正しいです。

PythonやVBのような他の言語では、 'else-if'はそれ自身のアトム構造です。その場合、 'if'は 'else'の内部にあると見なすことができないので、「入れ子」と呼ぶことはできません。

if (0 <= X and X < 49) 
    output "abc" 
else if (50 <= X and X < 70) 
    output "def" 
endif 

あなたの疑似コードの構文を十分には定義していませんが、末尾の 'endif'は不審なものです。その存在は、C括弧を省略したスタイルには適合しません。そしていずれか一方のみではなく、よりがありますという事実 -

else 
    if (50 <= X and X < 70) 
     output "def" 
    endif 
endif 

は - それはどちらかとブレース(または開始/終了)のモデルと一致しないことを意味します。したがって、その文法で判断すると、あなたの擬似コード言語を 'atomic else-if'キャンプに入れ、かなり恣意的に言うでしょう:いいえ、あなたのif文は入れ子になっていません。

(ただし、endifがオプションまたは空白に依存する言語を定義している可能性があります。また、上記のプログラムが "Hello world"を出力してからすべてのファイルを削除する言語を定義しています。 -in mail reader)

関連する問題