Este această declarație, dacă imbricate, sau nu?

voturi
0

intrare 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
Întrebat 11/04/2009 la 00:47
sursa de către utilizator
În alte limbi...                            


9 răspunsuri

voturi
-1

Pe Editare: nu minte, voi de acord că a fost wronfg pe asta.

Nu e, pentru că nu ifeste testat în interiorul altui ifcare a testat true.

În special, exemplul dumneavoastră:

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

ar putea fi rescrisă ca:

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

Cometariu:

O declarație în cazul în care nu trebuie să fie încorporată în interiorul ei dacă să fie imbricate. Acesta poate fi imbricate în interiorul unui alt -Bill Lizard

Punctul luate; Sunt de acord că sunt greșit pe asta.

Publicat 11/04/2009 la 00:51
sursa de către utilizator

voturi
8

Ai putea gândi la ea ca fiind logic echivalentă cu următoarele:

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

Deci, în acest sens, ai putea numi imbricate. În C și limbi similare, acest lucru este exact modul în care funcționează, deoarece nu există nici un „elseif“ declarație disponibilă. Acolade sunt opționale, deși, doar le-am inclus pentru a face mai clar.

Publicat 11/04/2009 la 00:56
sursa de către utilizator

voturi
0

S-ar putea fi pus în aplicare ca o buclă imbricată, în funcție de limbă. Cu toate acestea, modul în care a scris-o din punct de vedere logic, nu ar fi considerat unul.

Publicat 11/04/2009 la 01:11
sursa de către utilizator

voturi
5

Ele sunt imbricate, dar formatate ca ei nu sunt.

Codul dvs. este la fel ca:

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

Acest lucru nu este imbricat:

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

Acest lucru este valabil în toate (?), Limbi care au în cazul în declarații (ignorând lucruri cum ar fi folosind {} în loc de endif)

Cu toate acestea, unele limbi au o „elseif“ reale (sau „Elif“) de comandă, caz în care va nu cuib, dar scris ca „altfel dacă“ se poate presupune că este doar un cuib diferit formatat.

Publicat 11/04/2009 la 01:11
sursa de către utilizator

voturi
3

Depinde de limba reală, și cum este scris.

De exemplu , folosind VB, aceste Ifdeclarații nu sunt imbricate:

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

În timp ce aceste Ifsunt imbricate declarații:

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
Publicat 11/04/2009 la 01:17
sursa de către utilizator

voturi
3

Aș spune că da, ei sunt imbricate. Codul dvs. este exact echivalent cu

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

Observați că m - am schimbat doar spațiul liber. Atunci când o limbă evaluează if...else if...elseclauze, se testează fiecare până când găsește clauza adevărată (sau lovește finală else). Cele imbricate ifs evalueze exact în același mod. De asemenea , rețineți că acest lucru nu este neapărat cazul în cazul în care există un explicit elsifcuvânt cheie.

Încă un lucru am observat, următorul text este nu echivalent cu codul dumneavoastră:

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"

Adăpostirea este necesară pentru a păstra tot textul de la a fi de ieșire atunci când toate condițiile sunt adevărate.

Publicat 11/04/2009 la 01:20
sursa de către utilizator

voturi
1

Având în vedere sintaxa arătat, cred că răspunsul ar trebui să fie „Nu“, spre deosebire de înțelepciunea acumulată a altor răspunsuri.

Tu arati:

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

Acest lucru este în mod clar o singură if... endifdeclarație, și , prin urmare , nu există nici o cuiburi. Dacă există mai multe endifsituații, ar fi imbricate:

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

Deci, în limba dvs., se pare că cuvântul cheie elif(utilizat de Bourne shell) și elsif(utilizat de Perl) și ElseIf(utilizat de Visual Basic) este scris else if.

În cazul în care nu a existat în mod explicit endifpentru a marca sfârșitul declarației, atunci aș fi în acord cu celelalte răspunsuri - că ifdeclarațiile (! Plural) sunt imbricate, deși aspectul este perfect sensibil și recomandat.

Publicat 11/04/2009 la 01:45
sursa de către utilizator

voturi
0

Nu Nu este.

O declarație imbricată este una care apare într-o aceeași declarație, cum ar fi dacă ... Dacă. Dacă ... elseif este tot în aceeași „declarație“.

Publicat 11/04/2009 la 01:54
sursa de către utilizator

voturi
1

Acesta este un joc oarecum inutil de semantica; depinde de sintaxa limbii implicate.

De exemplu, într-o sintaxă ca-C, de obicei, acestea vor fi considerate imbricat în clauzele altceva, cu acolade omis să ascundă acest fapt. În acest caz, de exemplu, tumorali este corect.

În alte limbi, cum ar fi Python și VB, „altceva-în cazul în care“ este un construct atomic al propriei sale. În acest caz, „în cazul în care“ nu poate fi considerată în interiorul „else“, așa că nu a putut fi numit „imbricate“.

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

Nu ați definit sintaxa pseudocod dvs. suficient pentru a spune sigur, dar terminația „endif“ este suspect. Existența sa nu se potrivește cu stilul C-acolade-omise; și faptul că există doar una dintre ele și nu mai mult -

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

- înseamnă că nu se potrivește cu contravântuiri (sau de a începe / final) , fie modelul. Deci , judecând după faptul că sintaxa aș pune limba pseudocod în „altceva dacă-atomic“ tabără, și spune destul de arbitrar: Nu, dacă-declarația nu este imbricate.

(Dar ai putea întotdeauna au definit o limbă în cazul în care endifs sunt opționale sau. Sau dependente de spațiu, este posibil să fi definit o limbă în care se imprimă programul de mai sus „Hello World“ șterge apoi toate fișierele. Și are încorporat un cititor de e-mail. )

Publicat 11/04/2009 la 02:50
sursa de către utilizator

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