Est-ce instruction IF imbriquée, ou non?

voix
0

entrée 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
Créé 11/04/2009 à 00:47
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
-1

En edit: never mind, je suis d'accord que je wronfg sur celui-ci.

Ce n'est pas, parce que personne ifn'est testé dans un autre ifqui a testé true.

, Votre exemple particulier:

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

pourrait être réécrite comme:

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

Commentaire:

Une instruction if ne doit pas être imbriqué dans un autre cas être imbriquées. Il peut être imbriqué dans un autre -Bill le lézard

Point de prise; Je suis d'accord que je me trompe sur celui-ci.

Créé 11/04/2009 à 00:51
source utilisateur

voix
8

Vous pourriez penser comme étant logiquement équivalent à ce qui suit:

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

Donc, à cet égard, vous pouvez l'appeler imbriquée. En C et langues similaires, c'est exactement comment cela fonctionne car il n'y a pas de déclaration « elseif » disponible. Les accolades sont facultatifs mais, je les inclus pour le rendre plus clair.

Créé 11/04/2009 à 00:56
source utilisateur

voix
0

Il pourrait être mis en œuvre comme une boucle imbriquée, selon la langue. Cependant, la façon dont vous ne serait pas écrit logiquement dehors, être considéré comme l'un.

Créé 11/04/2009 à 01:11
source utilisateur

voix
5

Ils sont imbriqués, mais comme ils sont formatés pas.

Votre code est le même 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

Ce n'est pas imbriqué:

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

Ceci est valable dans tous les (?) Langues qui ont si des déclarations (en ignorant des choses comme l'utilisation de {} au lieu de endif)

Cependant, certaines langues ont une commande réelle « elseif » (ou « Elif »), auquel cas vous ne nid, mais écrit comme « Sinon , si » vous pouvez supposer qu'il est juste un nid formaté différemment.

Créé 11/04/2009 à 01:11
source utilisateur

voix
3

Cela dépend de la langue réelle, et la façon dont il est écrit.

Par exemple en utilisant VB, ces Ifdéclarations ne sont pas imbriqués:

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

Bien que ces Ifdéclarations sont imbriquées:

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
Créé 11/04/2009 à 01:17
source utilisateur

voix
3

Je dirais que oui, ils sont imbriqués. Votre code est exactement équivalent à

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

Notez que je n'ai changé les espaces blancs. Quand une langue évalue les if...else if...elseclauses, il teste chacun jusqu'à ce qu'il trouve la vraie clause (ou elle touche la finale else). Les emboîtés ifs évaluent exactement de la même manière. A noter également que ce n'est pas nécessairement le cas s'il y a un explicite elsifmot - clé.

Encore une chose que je remarque, ce qui suit est pas équivalent à votre code:

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"

L'imbrication est nécessaire de garder tout le texte d'être émis lorsque toutes les conditions sont vraies.

Créé 11/04/2009 à 01:20
source utilisateur

voix
1

Compte tenu de la syntaxe indiquée, je pense que la réponse devrait être « Non », contrairement à la sagesse accumulée des autres réponses.

Tu montres:

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

Ceci est clairement une seule if... endifdéclaration, et donc il n'y a pas d' imbrication. S'il y avait plusieurs endifdéclarations, il serait imbriqué:

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

Donc, dans votre langue, il semble que le mot - clé elif(utilisé par le shell Bourne) et elsif(utilisé par Perl) et ElseIf(utilisé par Visual Basic) est orthographié else if.

S'il n'y avait pas explicite endifpour marquer la fin de la déclaration, alors je serais en accord avec les autres réponses - que les ifdéclarations (! De pluriel) sont imbriquées, bien que la mise en page est tout à fait raisonnable et recommandé.

Créé 11/04/2009 à 01:45
source utilisateur

voix
0

Non, ce n'est pas.

Une déclaration imbriquée est celui qui apparaît dans une même déclaration, comme si ... Si. Si ... ElseIf est tous dans le même « déclaration ».

Créé 11/04/2009 à 01:54
source utilisateur

voix
1

Ce jeu un peu inutile de la sémantique; cela dépend de la syntaxe de la langue concernée.

Par exemple, dans une syntaxe C comme ils seraient généralement considérés comme imbriquées dans les clauses d'autre, les accolades ont omis de masquer ce fait. Dans ce cas, l'exemple de Turnor est juste.

Dans d'autres langues, comme Python et VB, « else-if » est une construction atomique de son propre. Dans ce cas, le « si » ne peut pas être considéré comme à l'intérieur du « autre », il ne pouvait pas être appelé « imbriquées ».

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

Vous n'avez pas défini la syntaxe de votre pseudo-code suffisamment pour dire à coup sûr, mais la fuite « endif » est suspect. Son existence ne correspond pas avec le style omis C-accolades; et le fait qu'il n'y a qu'un seul d'entre eux et pas plus -

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

- signifie qu'il ne correspond pas au modèle avec des entretoises (ou début / fin) soit. Donc , à en juger par cette syntaxe je mettrais votre langage pseudo - code dans le « atomique d' autre, si » le camp, et dire tout à fait arbitraire: Non, votre instruction if est pas imbriqué.

(Mais vous pouvez toujours avoir défini une langue où endifs sont facultatifs ou dépendants-espaces. Ou bien, vous pourriez avoir défini une langue où le programme imprime ci-dessus « Bonjour tout le monde » supprime alors tous vos fichiers. Et a un lecteur de messagerie intégré. )

Créé 11/04/2009 à 02:50
source utilisateur

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