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
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
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.
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ší.
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.
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.
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
Ř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.
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é.
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í“.
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. )