entrada 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
entrada 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
En edición: no importa, estaré de acuerdo en que fui rechazado en este caso.
No lo es, porque no ifse prueba dentro de otro ifque fue probado true.
En particular, tu ejemplo:
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
podría ser reescrito como:
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
Comentario:
Una instrucción if no tiene que estar anidada dentro de otra si se debe anidar. Se puede anidar dentro de otro -Bill the Lizard
Punto a favor; Estoy de acuerdo en que estoy equivocado en este caso.
Podría pensar que es lógicamente equivalente a lo siguiente:
if(a) {
// code
} else {
if(b) {
// code
} else {
// code
}
}
Entonces, a este respecto, podrías llamarlo anidado. En C y en lenguajes similares, así es exactamente como funciona, ya que no hay ninguna declaración "elseif" disponible. Sin embargo, las llaves son opcionales, solo las incluí para aclararlas.
Podría implementarse como un bucle anidado, según el idioma. Sin embargo, la forma en que lo escribió lógicamente, no sería considerado uno.
Están anidados, pero formateados como no lo son.
Tu código es el mismo que:
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
Esto no está anidado:
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
Esto es válido en todos los idiomas (?) Que tienen sentencias if (ignorando cosas como usar {} en lugar de endif)
Sin embargo, algunos lenguajes tienen un comando real "elseif" (o "elif"), en cuyo caso no anidará, pero escrito como "else if" puede suponer que se trata de un nido con un formato diferente.
Depende del idioma real y de cómo está escrito.
Por ejemplo, usando VB, estas Ifdeclaraciones no están anidadas:
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
Si bien estas Ifdeclaraciones están anidadas:
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
Yo diría que sí, están anidados. Tu código es exactamente equivalente a
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
Tenga en cuenta que solo he cambiado el espacio en blanco. Cuando un lenguaje evalúa if...else if...elsecláusulas, las prueba cada una hasta que encuentra la cláusula verdadera (o llega a la final else). Los ifs anidados se evalúan exactamente de la misma manera. También tenga en cuenta que este no es necesariamente el caso si hay una elsifpalabra clave explícita .
Una cosa más que noto, lo siguiente no es equivalente a tu código:
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"
La anidación es necesaria para evitar que todo el texto se emita cuando todas las condiciones son verdaderas.
Dada la sintaxis mostrada, creo que la respuesta debería ser "No", en contra de la sabiduría acumulada de las otras respuestas.
Mostrar:
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
Se trata claramente de una sola if... endifdeclaración, y por lo tanto no hay anidación. Si hubiera múltiples endifinstrucciones, estaría anidada:
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
Por lo tanto, en su idioma, parece que la palabra clave elif(utilizada por el shell Bourne) y elsif(utilizada por Perl) y ElseIf(utilizada por Visual Basic) está deletreada else if.
Si no hubiera un texto explícito endifpara marcar el final del enunciado, estaría de acuerdo con las otras respuestas: que las ifdeclaraciones (¡en plural!) Están anidadas, aunque el diseño es perfectamente razonable y recomendable.
No, no es.
Una declaración anidada es aquella que aparece dentro de una misma declaración, como If ... If. Si ... De lo contrario, está todo en la misma "declaración".
Este es un juego semántico sin sentido; depende de la sintaxis del idioma involucrado.
Por ejemplo, en una sintaxis similar a C, por lo general se considerarían anidados en las cláusulas else, con las llaves omitidas para ocultar ese hecho. En este caso, el ejemplo de Turnor es correcto.
En algunos otros lenguajes, como Python y VB, 'else-if' es una construcción atómica propia. En ese caso, no se puede considerar que el 'si' está dentro del 'else', por lo que no se puede llamar "anidado".
if (0 <= X and X < 49)
output "abc"
else if (50 <= X and X < 70)
output "def"
endif
No has definido la sintaxis de tu pseudocódigo lo suficiente como para decirlo con seguridad, pero el 'endif' final es sospechoso. Su existencia no encaja con el estilo C-llaves-omitido; y el hecho de que solo hay uno de ellos y no más,
else
if (50 <= X and X < 70)
output "def"
endif
endif
- significa que tampoco coincide con el modelo de llaves (o comenzar / finalizar). A juzgar por esa sintaxis, colocaría su lenguaje de pseudocódigo en el campo "atomic else-if", y diría bastante arbitrariamente: No, su instrucción if no está anidada.
(Pero siempre podría haber definido un idioma donde endifs son opcionales o dependientes del espacio en blanco. O bien, podría haber definido un idioma en el que el programa anterior imprime "Hello world", luego borrará todos sus archivos y tiene un lector de correo incorporado. )