Dette IF-setning nestet, eller ikke?

stemmer
0

inngang 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
Publisert på 10/04/2009 klokken 23:47
kilden bruker
På andre språk...                            


9 svar

stemmer
-1

På Edit: never mind, jeg er enig jeg ble wronfg på denne.

Det er ikke, fordi ingen ifer testet i en annen ifsom testet true.

Spesielt ditt eksempel:

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 skrives som:

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

Kommentar:

En hvis setningen trenger ikke å være nestet i en annen om den skulle være nestet. Det kan nestes inne i et annet -Bill Lizard

Point tatt; Jeg er enig at jeg tar feil på dette.

Svarte 10/04/2009 kl. 23:51
kilden bruker

stemmer
8

Du kan tenke på det som logisk tilsvarer følgende:

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

Så i denne forbindelse, kan du kalle det nestet. I C og lignende språk, er dette nøyaktig hvordan det fungerer siden det er ingen "elseif" statement tilgjengelig. Klammeparentes er valgfritt om, jeg bare tatt dem for å gjøre det klarere.

Svarte 10/04/2009 kl. 23:56
kilden bruker

stemmer
0

Det kan bli gjennomført som en nestet sløyfe, avhengig av språket. Men måten du logisk skrev det ut, ville det ikke bli betraktet som en.

Svarte 11/04/2009 kl. 00:11
kilden bruker

stemmer
5

De er nestet, men formatert som de ikke er.

Koden er den samme som:

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

Dette er ikke nestet:

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

Dette gjelder i alle (?) Språk som har hvis uttalelser (ignorerer ting som å bruke {} i stedet for endif)

Men noen språk har en faktisk "elseif" (eller "elif") kommando, og da vil du ikke reir, men skrevet som "annet hvis" du kan anta det er bare et annerledes formatert reir.

Svarte 11/04/2009 kl. 00:11
kilden bruker

stemmer
3

Det avhenger av selve språket, og hvordan den er skrevet.

For eksempel ved hjelp av VB, disse Ifer uttalelsene ikke nestet:

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

Selv om disse Ifuttalelsene er nestet:

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
Svarte 11/04/2009 kl. 00:17
kilden bruker

stemmer
3

Jeg vil si ja de er nestet. Koden er nøyaktig lik

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

Legg merke til at jeg har bare endret mellomrom. Når et språk evaluerer if...else if...elsebestemmelser, det tester hver inntil den finner den egentlige leddet (eller den treffer den endelige else). Den nestede ifs evaluere på nøyaktig samme måte. Vær også oppmerksom på at dette ikke nødvendigvis er tilfelle hvis det ikke er en eksplisitt elsifsøkeord.

En ting jeg legger merke til, er følgende ikke tilsvarende til koden:

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"

Hekkende er nødvendig for å holde all teksten fra å være utgang når alle betingelsene er oppfylt.

Svarte 11/04/2009 kl. 00:20
kilden bruker

stemmer
1

Gitt syntaksen vist, tror jeg svaret skal være "Nei", i motsetning til den akkumulerte visdom av de andre svarene.

Du viser:

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

Dette er helt klart en enkelt if... endifuttalelse, og det er derfor ingen hekkende. Hvis det var flere endifuttalelser, ville det være nestet:

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

Så, i språket, ser det ut til at søkeordet elif(brukes av Bourne shell) og elsif(brukt av Perl) og ElseIf(brukt av Visual Basic) er stavet else if.

Hvis det var ingen eksplisitt endiffor å markere slutten av setningen, så ville jeg være enig med de andre svarene - at ifuttalelsene (! Flertall) er nestet, men oppsettet er helt fornuftig og anbefalt.

Svarte 11/04/2009 kl. 00:45
kilden bruker

stemmer
0

Nei det er ikke.

En nestet utsagn er en som vises i en samme setningen, som If ... If. Hvis ... ElseIf er alle i samme "statement".

Svarte 11/04/2009 kl. 00:54
kilden bruker

stemmer
1

Dette er en noe meningsløs parti med semantikk; det avhenger av syntaksen i språket involvert.

For eksempel i en C-lignende syntaks de vanligvis ville bli betraktet som nestet i annet klausuler, med bukseseler utelatt å skjule det faktum. I dette tilfellet Turnor Rens eksempel er riktig.

I enkelte andre språk, som Python og VB, 'else-if' er en atom konstruere sine egne. I så fall 'hvis' ikke kan anses å være inne i 'annet', så det kan ikke kalles “nestet”.

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

Du har ikke definert syntaksen av pseudo tilstrekkelig til å si sikkert, men den etterfølgende 'endif' er mistenkelig. Dens eksistens passer ikke med C-bukseseler-utelates stil; og det faktum at det er bare én av dem, og ikke mer -

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

- betyr at det ikke samsvarer med-seler (eller begin / end) modell heller. Så skal man dømme etter at syntaks jeg ville sette pseudo språket i 'atom else-if' leiren, og sier ganske vilkårlig: Nei, hvis-erklæringen ikke er nestet.

(Men du kan alltid har definert et språk der endifs er valgfrie eller mellomrom avhengig. Eller kanskje du har definert et språk der de ovennevnte programmet skriver “Hello world” sletter deretter alle filene dine. Og har en innebygd postleser. )

Svarte 11/04/2009 kl. 01:50
kilden bruker

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