Ez, ha nyilatkozat beágyazott, vagy nem?

szavazat
0

bemenet 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
A kérdést 11/04/2009 00:47
a forrás felhasználó
Más nyelveken...                            


9 válasz

szavazat
-1

A szerkesztés: sebaj, én egyetértek én wronfg ez.

Nem, mert nem ifvizsgáljuk belül egy másik if, hogy a vizsgált true.

Különösen fontos, hogy például:

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

lehetne átírni:

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

Megjegyzés:

Egy, ha az állítás nem kell ágyazva egy másik, ha kell egymásba ágyazni. Meg lehet ágyazva egy else Bill a Lizard

Megértettem az álláspontodat; I agree tévedek ebben.

Válaszolt 11/04/2009 00:51
a forrás felhasználó

szavazat
8

Lehet gondolni rá, hogy a logikailag egyenértékű a következő:

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

Tehát ebben a tekintetben, akkor lehet nevezni beágyazott. A C és hasonló nyelven, ez pontosan hogyan működik, mivel nincs „elseif” nyilatkozatot elérhető. A kapcsos zárójelek opcionális bár én csak azokat is, hogy egyértelműbb legyen.

Válaszolt 11/04/2009 00:56
a forrás felhasználó

szavazat
0

Ez lehet vezetni, mint egy beágyazott hurok, attól függően, hogy a nyelvet. Azonban ahogy logikusan írta ki, hogy nem tekinthető az egyik.

Válaszolt 11/04/2009 01:11
a forrás felhasználó

szavazat
5

Ezek egymásba, de a formátuma nem azok.

A kód ugyanaz, mint:

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

Ez nem beágyazott:

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

Ez érvényes minden (?) Nyelveken, amelyek utasításból (figyelmen kívül hagyva a dolgok, mint a {} helyett endif)

Azonban egyes nyelvekben egy tényleges „elseif” (vagy „elif”) parancsot, amely esetben akkor sem fészket, de írt a „else if”, akkor feltételezhető, hogy ez csak egy eltérő formátumú fészket.

Válaszolt 11/04/2009 01:11
a forrás felhasználó

szavazat
3

Attól függ, hogy a tényleges nyelvi, és hogyan van írva.

Például az VB, ezek Ifaz állítások nem beágyazott:

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

Bár ezek a Ifkijelentések egymásba:

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
Válaszolt 11/04/2009 01:17
a forrás felhasználó

szavazat
3

Azt mondanám, hogy igen, vannak beágyazva. Az Ön kódja pontosan megegyezik

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

Figyeljük meg, hogy én már csak megváltoztatta a szóközöket. Ha egy nyelv értékeli if...else if...elsekikötések, tesztel mindegyiket, amíg megtalálja az igazi záradékot (vagy eléri a végleges else). A beágyazott ifs értékeli ugyanúgy. Szintén fontos megjegyezni, hogy ez nem feltétlenül van így, ha van egy explicit elsifkulcsszó.

Még egy dolog, amit észre, a következő nem egyenértékű a kódot:

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"

A fészkelő van szükség , hogy az összes szöveg a kimeneten, ha az összes feltétel igaz.

Válaszolt 11/04/2009 01:20
a forrás felhasználó

szavazat
1

Tekintettel a szintaxis látható, azt hiszem, a választ kellene adni a „Nem”, ellentétben a felhalmozott bölcsesség a többi választ.

Te mutatod:

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

Ez egyértelműen egy if... endifnyilatkozat, és ezért nincs fészkelő. Ha lenne több endifkimutatások lenne beágyazott:

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

Tehát, a nyelvet, úgy tűnik, hogy a kulcsszó elif(használt a Bourne shell) és elsif(használt Perl) és ElseIf(használt Visual Basic) írta else if.

Ha nem volt egyértelmű endif, hogy a végét a nyilatkozat, akkor lennék egyetértésben a többi választ, hogy - a ifnyilatkozatok (többes!) Vannak beágyazva, de az elrendezés teljesen ésszerű és ajánlott.

Válaszolt 11/04/2009 01:45
a forrás felhasználó

szavazat
0

Nem, ez nem.

A utasításra az egyik, hogy úgy tűnik, egy állítás, mint ha ... ha. Ha ... ElseIf mind ugyanabban a „nyilatkozat”.

Válaszolt 11/04/2009 01:54
a forrás felhasználó

szavazat
1

Ez egy kissé értelmetlen játék szemantikai; ez függ a szintaxis a nyelv szó.

Például egy C-szerű szintaxis általában úgy kellene tekinteni a beágyazott más záradékokat, a kapcsos zárójelek elhagyhatók eltakarni a tényt. Ebben az esetben Turnor példája is jobb.

Néhány más nyelveken, mint a Python és a VB „else-if” ez az atomi szerkezet saját. Ebben az esetben a „ha” nem tekinthető a belsejében a „más”, ezért nem lehet az úgynevezett „beágyazott”.

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

Még nem határozott a szintaxis az Ön pszeudokódokra kellően biztosat mondani, de a végén egy „endif” gyanús. Léte nem illik a C-merevítők-elhagyható stílusban; és az a tény, hogy ez csak az egyik, és nem több -

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

- azt jelenti, hogy nem egyezik a with-zárójelek (vagy kezdet / vég) modell sem. Így ítélve, hogy szintaxis azt tegye meg pszeudokódját nyelven a „atomi else-if” tábor, és azt mondják, elég önkényesen: Nem, a ha-állítás nem illesztjük.

(De akkor is mindig meghatározott egy nyelvet, ha endifs választhatók vagy szóközzel függ. Vagy lehet, hogy meghatározott egy nyelvet, ha a fenti program a „Hello világ”, akkor törli az összes fájlt. És van egy beépített levelező programja. )

Válaszolt 11/04/2009 02:50
a forrás felhasználó

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