Is dit IF statement genest, of niet?

stemmen
0

ingang 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
De vraag is gesteld op 11/04/2009 om 00:47
bron van user
In andere talen...                            


9 antwoorden

stemmen
-1

Op Edit: laat maar, ik zal het eens was ik wronfg op deze.

Het is niet, omdat er geen ifis getest in een ander ifdat getest true.

In het bijzonder, uw voorbeeld:

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

kan worden herschreven als:

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

Commentaar:

Een if-statement niet hoeft te worden genest binnen een ander als te worden genest. Het kan worden genest binnen een else -Bill de Lizard

Punt gemaakt; Ik ben het eens dat ik verkeerd ben op dit één.

antwoordde op 11/04/2009 om 00:51
bron van user

stemmen
8

Je zou kunnen denken aan het als logisch gelijk aan de volgende:

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

Dus in dit opzicht, zou je het noemen genest. In C en soortgelijke talen, dit is precies hoe het werkt omdat er geen "elseif" statement beschikbaar. De accolades zijn optioneel hoewel, ik begrepen ze gewoon om het duidelijker te maken.

antwoordde op 11/04/2009 om 00:56
bron van user

stemmen
0

Het kan worden uitgevoerd als een geneste lus, afhankelijk van de taal. Echter, de manier waarop je logisch schreef het uit, het zou niet worden beschouwd als een.

antwoordde op 11/04/2009 om 01:11
bron van user

stemmen
5

Ze zijn genest, maar opgemaakt alsof ze niet zijn.

De code is hetzelfde als:

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

Dit is niet genest:

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

Dit is geldig in alle (?) Talen die hebben als verklaringen (het negeren van dingen zoals het gebruik van {} in plaats van endif)

Echter, sommige talen hebben een echte "elseif" (of "Elif") commando, in welk geval u niet nest, maar geschreven als "anders als" kun je aannemen dat het gewoon een anders geformatteerde nest.

antwoordde op 11/04/2009 om 01:11
bron van user

stemmen
3

Het hangt af van de feitelijke taal, en hoe het is geschreven.

Bijvoorbeeld met behulp van VB, deze Ifzijn uitspraken niet genest:

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

Hoewel deze Ifverklaringen zijn genest:

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
antwoordde op 11/04/2009 om 01:17
bron van user

stemmen
3

Ik zou zeggen ja ze zijn genest. De code is precies gelijk aan

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

Merk op dat ik alleen ben veranderd de witruimte. Wanneer een taal evalueert if...else if...elseclausules, test het een ieder tot hij de ware clausule vindt (of het raakt de finale else). De geneste ifs evalueren op precies dezelfde manier. Merk ook op dat dit niet noodzakelijk het geval als er een expliciete elsifzoekwoord.

Nog één ding valt me op, de volgende is niet gelijk aan uw 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"

De nesten is nodig om alle tekst uit dat wordt uitgevoerd als aan alle voorwaarden wordt voldaan te houden.

antwoordde op 11/04/2009 om 01:20
bron van user

stemmen
1

Gezien de syntax getoond, ik denk dat het antwoord moet zijn "Nee", in tegenstelling tot de verzamelde wijsheid van de andere antwoorden.

U toont:

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

Dit is duidelijk een if... endifstatement, en daarom is er geen nesten. Als er meerdere endifverklaringen was het genest:

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

Dus, in uw taal, lijkt het erop dat het zoekwoord elif(gebruikt door de Bourne shell) en elsif(gebruikt door Perl) en ElseIf(gebruikt door Visual Basic) wordt gespeld else if.

Als er geen expliciete endifnaar het einde van de verklaring te markeren, dan zou ik in overleg met de andere antwoorden - dat de ifverklaringen (! Meervoud) zijn genest, hoewel de lay-out is perfect verstandig en aan te bevelen.

antwoordde op 11/04/2009 om 01:45
bron van user

stemmen
0

Nee dat is het niet.

Een geneste statement is er een die binnen een zelfde verklaring verschijnt, zoals If ... If. If ... ElseIf is allemaal in dezelfde "statement".

antwoordde op 11/04/2009 om 01:54
bron van user

stemmen
1

Dit is een enigszins zinloze spel van semantiek; het hangt af van de syntaxis van de taal betrokken.

Bijvoorbeeld in een C-achtige syntax zouden ze meestal geneste in de else clausules worden beschouwd, met de beugels weggelaten om dat feit te verdoezelen. In dit geval voorbeeld Turnor is gelijk.

In sommige andere talen, zoals Python en VB, 'anders-if' is een atomaire constructie van zijn eigen. In dat geval is de 'als' niet kan worden beschouwd als binnen het 'anders', dus het kan niet worden genoemd “genest”.

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

Je hebt niet gedefinieerd de syntaxis van uw pseudocode voldoende zekerheid te zeggen, maar de afsluitende 'endif' is verdacht. Het bestaan ​​ervan past niet bij de C-beugels-weggelaten stijl; en het feit dat er slechts één van hen en niet meer -

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

- betekent dat niet overeenkomt met het met beugels (of begin / eind) model niet. Dus oordelen dat syntax ik zou uw pseudocode taal zet in de 'atomaire anders-if' camp, en zegt heel willekeurig: Nee, je if-statement niet is genest.

(Maar je kunt altijd een taal waarin endifs zijn optioneel of witruimte-afhankelijk. Of gedefinieerd, kunt u een taal waar de bovenstaande programma print “Hello world” wist dan al uw bestanden hebt gedefinieerd. En heeft een ingebouwde e-mailprogramma. )

antwoordde op 11/04/2009 om 02:50
bron van user

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