Je toto prohlášení IF vnořené, nebo ne?

hlasů
0

vstup 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
Položena 11/04/2009 v 00:47
zdroj uživatelem
V jiných jazycích...                            


9 odpovědí

hlasů
-1

Na edit: nevadí, budu souhlasit jsem wronfg na tento jeden.

Není to, protože žádný ifse zkouší uvnitř jiného ifkterý testuje true.

Zejména vašeho příkladu:

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

by mohl být přepsán jako:

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

Komentář:

If nemusí být vnořená uvnitř jiný by chtěl být vnořené. To může být vnořená uvnitř else -Bill ještěrka

Východiskem; Budu souhlasit, že se mýlím na tento jeden.

Odpovězeno 11/04/2009 v 00:51
zdroj uživatelem

hlasů
8

Dalo by se uvažovat o tom, jak je logicky ekvivalentní k následujícímu:

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

Takže v tomto ohledu, můžete volat to vnořené. V C a podobnými jazyky, to je přesně to, jak to funguje, protože neexistuje žádný „elseif“ prohlášení k dispozici. Složené závorky jsou volitelné i když, jen jsem zahrnoval je, aby bylo jasnější.

Odpovězeno 11/04/2009 v 00:56
zdroj uživatelem

hlasů
0

To by mohlo být implementován jako vnořené smyčky v závislosti na jazyku. Nicméně způsob, jakým jste logicky napsal to, že by neměl být považován za jeden.

Odpovězeno 11/04/2009 v 01:11
zdroj uživatelem

hlasů
5

Jsou vnořené, ale formátované jako oni nejsou.

Váš kód je stejný jako:

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

To není vnořené:

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

To platí u všech (?) Jazyky, které mají if (ignorovat věci, jako je pomocí {} místo endif)

Nicméně, některé jazyky mají skutečný „ELSEIF“ příkaz (nebo „elif“), v takovém případě budete to hnízdo, ale zapsaný jako „else if“, můžete předpokládat, že je to jen různě formátovaný hnízdo.

Odpovězeno 11/04/2009 v 01:11
zdroj uživatelem

hlasů
3

Záleží na konkrétním jazyku, a jak je to napsáno.

Například pomocí VB, tyto Ifvýroky nejsou vnořené:

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

I když tato Ifprohlášení jsou vnořené:

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
Odpovězeno 11/04/2009 v 01:17
zdroj uživatelem

hlasů
3

Řekl bych, že ano, že jsou vnořené. Váš kód je přesně ekvivalentní

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

Všimněte si, že jsem jen změnil mezery. Když jazyk vyhodnocuje if...else if...elseklauzule, testuje každý z nich, dokud nenajde pravý klauzule (nebo to dopadne finále else). Vnořené ifs hodnotí stejným způsobem. Také si všimněte, že to není nutně případ, pokud existuje explicitní elsifklíčové slovo.

A ještě jedna věc, kterou jsem si všimnout, následující je to ekvivalentní ke kódu:

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"

Hnízdění je nutné , aby se celý text od bytí výstup, pokud jsou splněny všechny podmínky.

Odpovězeno 11/04/2009 v 01:20
zdroj uživatelem

hlasů
1

Vzhledem k syntaxi uvedenou, myslím, že odpověď by měla být „Ne“, na rozdíl od nahromaděné moudrosti ostatních odpovědí.

Ty ukaž:

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

To je jednoznačně jeden if... endiftvrzení, a proto není hnízdění. Kdyby bylo více endifprohlášení, by to být vnořené:

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

Takže ve vašem jazyce, zdá se, že klíčové slovo elif(používané Bourne shellu) a elsif(používaný Perl) a ElseIf(používaný Visual Basic) je napsána else if.

Kdyby nebylo výslovně endifoznačit konec příkazu, pak bych být v souladu s ostatními odpovědí -, že ifprohlášení (! Množné číslo) jsou vnořené, ale rozložení je naprosto rozumný a doporučené.

Odpovězeno 11/04/2009 v 01:45
zdroj uživatelem

hlasů
0

Ne to není.

Vnořené výrok je ten, který se objeví ve stejném příkazu, jako když ... Jestliže se. Jestliže ... ElseIf je vše v jednom „prohlášení“.

Odpovězeno 11/04/2009 v 01:54
zdroj uživatelem

hlasů
1

Toto poněkud nesmyslné hra sémantiky; Záleží na syntaxi jazyka zapojených.

Například v syntaxi C-jako obvykle by být považovány za vnořené v doložkách jinde s tím, že rovnátka opomenul zakrýt tento fakt. V tomto případě je příkladem Turnor má pravdu.

V některých jiných jazycích, jako je Python a VB, ‚else-if‘ je atomový konstrukt jeho vlastní. V takovém případě ‚kdyby‘ nemůže být považován za uvnitř ‚else‘, takže to nemohlo být nazýváno „vnořené“.

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

Nemáte-li definováno syntaxe svého pseudokódu natolik, aby s jistotou říci, ale trailing ‚endif‘ je podezřelý. Jeho existence nehodí se C-šle-vynechán stylu; a skutečnost, že tam je jen jeden z nich, a ne více -

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

- znamená, že se neshoduje s with-závorky (nebo začátek / konec) model, a to buď. Takže soudě podle této syntaxe bych dát své pseudokódu jazyka v ‚atomové jiný-li‘ táboře, a říci zcela libovolně: Ne, vaše if-příkaz není vnořené.

(Ale můžete vždy definovali jazyk kde endifs jsou volitelné nebo mezerami závislý. Nebo možná jste definovali jazyk, kde uvedený program vytiskne „Hello world“ pak odstraní všechny soubory. A má zabudovaný-in čtení pošty. )

Odpovězeno 11/04/2009 v 02:50
zdroj uživatelem

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