вход 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
вход 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
На редактирование: никогда не возражаете, я согласен я 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
Комментарий:
, Если оператор не должен быть вложен в другой, если быть вложенными. Он может быть вложен внутри еще -Билль Ящер
Дело принято; Я согласен, что я ошибаюсь в этом.
Вы можете думать об этом как логически эквивалентно следующему:
if(a) {
// code
} else {
if(b) {
// code
} else {
// code
}
}
Таким образом, в связи с этим, вы могли бы назвать это вкладываться. В C и подобных языках, это именно то, как это работает, так как нет «ElseIf» заявление доступной. Фигурные скобки не являются обязательными, хотя, я просто включил их, чтобы сделать его более четким.
Он может быть реализован в виде вложенного цикла, в зависимости от языка. Однако, как вы логически написал его, он не будет считаться одним.
Они являются вложенными, но отформатированы как они не являются.
Ваш код такой же, как:
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» команду (или «Элиф»), в этом случае вы не гнездятся, но написанный , как «еще , если» вы можете предположить , что это просто по- разному отформатированный гнездо.
Это зависит от конкретного языка, и как это написано.
Для примера , используя 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
Я бы сказал, да, они вложены друг в друга. Ваш код в точности эквивалентно
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"
Вложенности необходимо сохранить весь текст от того вывода , когда все условия истинны.
Учитывая синтаксис, показанный, я думаю, что ответ должен быть «Нет», в отличие от накопленной мудрости других ответов.
Ты показываешь:
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 заявления (! Множественное число) являются вложенными, хотя расположение совершенно разумно и рекомендуется.
Нет.
Вложенный утверждение, которое появляется в одном операторе, как если бы ... если. Если ... ElseIf все в том же «заявление».
Это несколько бессмысленно игра семантики; это зависит от синтаксиса языка, участвующих.
Например, в 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 являются необязательными или пробелами зависит. Или, вы могли бы определить язык, где выше программа печатает «Привет мир», а затем удаляет все файлы. И имеет встроенный чтения почты. )