Вложено это IF заявление, или нет?

голоса
0

вход X:

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
Задан 11/04/2009 в 00:47
источник пользователем
На других языках...                            


9 ответов

голоса
-1

На редактирование: никогда не возражаете, я согласен я wronfg на этом.

Это не так , потому что не ifтестируется внутри другого , ifчто испытания true.

В частности, ваш пример:

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 (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

Комментарий:

, Если оператор не должен быть вложен в другой, если быть вложенными. Он может быть вложен внутри еще -Билль Ящер

Дело принято; Я согласен, что я ошибаюсь в этом.

Ответил 11/04/2009 в 00:51
источник пользователем

голоса
8

Вы можете думать об этом как логически эквивалентно следующему:

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

Таким образом, в связи с этим, вы могли бы назвать это вкладываться. В C и подобных языках, это именно то, как это работает, так как нет «ElseIf» заявление доступной. Фигурные скобки не являются обязательными, хотя, я просто включил их, чтобы сделать его более четким.

Ответил 11/04/2009 в 00:56
источник пользователем

голоса
0

Он может быть реализован в виде вложенного цикла, в зависимости от языка. Однако, как вы логически написал его, он не будет считаться одним.

Ответил 11/04/2009 в 01:11
источник пользователем

голоса
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» команду (или «Элиф»), в этом случае вы не гнездятся, но написанный , как «еще , если» вы можете предположить , что это просто по- разному отформатированный гнездо.

Ответил 11/04/2009 в 01:11
источник пользователем

голоса
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
Ответил 11/04/2009 в 01:17
источник пользователем

голоса
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). Вложенные ifs оценить точно таким же образом. Также обратите внимание , что это не обязательно в случае , если существует явное 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"

Вложенности необходимо сохранить весь текст от того вывода , когда все условия истинны.

Ответил 11/04/2009 в 01:20
источник пользователем

голоса
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 заявления (! Множественное число) являются вложенными, хотя расположение совершенно разумно и рекомендуется.

Ответил 11/04/2009 в 01:45
источник пользователем

голоса
0

Нет.

Вложенный утверждение, которое появляется в одном операторе, как если бы ... если. Если ... ElseIf все в том же «заявление».

Ответил 11/04/2009 в 01:54
источник пользователем

голоса
1

Это несколько бессмысленно игра семантики; это зависит от синтаксиса языка, участвующих.

Например, в C-подобный синтаксис обычно они будут считаться вложенными в пунктах либо еще, с фигурными скобками опущены, чтобы скрыть этот факт. В этом случае пример Turnor является правильным.

В некоторых других языках, как Python и VB, «еще-если» является атомарным конструкт самостоятельно. В этом случае «если» не может рассматриваться как внутри «еще», поэтому он не может быть назван «вложенными».

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

- означает , что он не соответствует с-брекеты (или начать / конец) модель либо. Так , судя по этому синтаксису , я бы поставил язык псевдокода в «атомном еще-если» лагере, и говорю совершенно произвольно: Нет, ваш Условный оператор не вложен.

(Но вы всегда определили язык, где endifs являются необязательными или пробелами зависит. Или, вы могли бы определить язык, где выше программа печатает «Привет мир», а затем удаляет все файлы. И имеет встроенный чтения почты. )

Ответил 11/04/2009 в 02:50
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more