Είναι αυτή η δήλωση IF ένθετα, ή όχι;

ψήφοι
0

εισόδου 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
Δημοσιεύθηκε 11/04/2009 στις 00:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


9 απαντήσεις

ψήφοι
-1

Σε edit: δεν πειράζει, εγώ θα συμφωνώ ήμουν wronfg σε αυτό το σημείο.

Δεν είναι, επειδή δεν ifέχει δοκιμαστεί μέσα σε ένα άλλο ifπου δοκιμάζεται true.

Ειδικότερα, το παράδειγμα σας:

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

θα μπορούσε να γραφεί ως:

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

Σχόλιο:

Μια δήλωση if δεν πρέπει να φωλιάζει μέσα σε ένα άλλο, αν πρόκειται να φωλιάζει. Μπορεί να είναι ένθετα μέσα σε ένα άλλο -Bill η Σαύρα

Κατανοητό; Θα συμφωνήσουμε ότι είμαι λάθος σε αυτό το σημείο.

Απαντήθηκε 11/04/2009 στις 00:51
πηγή χρήστη

ψήφοι
8

Θα μπορούσατε να σκεφτείτε από το ως λογικά ισοδύναμη με την ακόλουθη:

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

Έτσι, στο πλαίσιο αυτό, θα μπορούσατε να το ονομάσουμε ένθετα. Στην C και παρόμοιες γλώσσες, αυτό είναι ακριβώς πώς λειτουργεί καθώς δεν υπάρχει «elseif» δήλωση διαθέσιμη. Τα άγκιστρα είναι προαιρετική όμως, εγώ τους περιλαμβάνεται μόνο για να καταστεί σαφέστερο.

Απαντήθηκε 11/04/2009 στις 00:56
πηγή χρήστη

ψήφοι
0

Θα μπορούσε να εφαρμοστεί ως μια ένθετη βρόχο, ανάλογα με τη γλώσσα. Ωστόσο, ο τρόπος που το έγραψε λογικά έξω, δεν θα πρέπει να θεωρείται μία.

Απαντήθηκε 11/04/2009 στις 01:11
πηγή χρήστη

ψήφοι
5

Είναι ένθετα, αλλά διαμορφωθεί σαν να μην είναι.

Ο κωδικός σας είναι το ίδιο:

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

Αυτό δεν είναι ένθετα:

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

Αυτό ισχύει σε όλες τις (;) τις γλώσσες που έχουν, αν δηλώσεις (αγνοώντας τα πράγματα όπως τη χρήση {} αντί για endif)

Ωστόσο, ορισμένες γλώσσες έχουν μια πραγματική «elseif» εντολή (ή «Elif»), στην οποία περίπτωση θα δεν φωλιά, αλλά γραμμένο ως «άλλο αν» μπορείτε να υποθέσετε ότι είναι απλά ένα διαφορετικό τρόπο διαμορφωμένη φωλιά.

Απαντήθηκε 11/04/2009 στις 01:11
πηγή χρήστη

ψήφοι
3

Εξαρτάται από την πραγματική γλώσσα, και πώς έχει γραφτεί.

Για παράδειγμα, χρησιμοποιώντας VB, αυτές Ifοι δηλώσεις δεν ένθετα:

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

Αν και αυτές Ifοι ένθετες δηλώσεις:

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
Απαντήθηκε 11/04/2009 στις 01:17
πηγή χρήστη

ψήφοι
3

Θα έλεγα ναι είναι ένθετα. Ο κωδικός σας είναι ακριβώς ισοδύναμο με

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

Παρατηρήστε ότι έχω αλλάξει μόνο το κενό. Όταν μια γλώσσα αξιολογεί if...else if...elseτις ρήτρες, που ελέγχει κάθε ένα μέχρι να βρει την πραγματική ρήτρα (ή να χτυπήσει τον τελικό else). Τα ένθετα ifs αξιολογούν με τον ίδιο ακριβώς τρόπο. Επίσης, σημειώστε ότι αυτό δεν είναι απαραιτήτως η περίπτωση εάν υπάρχει ρητή elsifλέξη-κλειδί.

Ένα ακόμα πράγμα που έχω παρατηρήσει, τα εξής είναι να μην ισοδυναμεί με τον κωδικό σας:

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"

Η ένθεση είναι απαραίτητη για να κρατήσει όλο το κείμενο από το να είναι έξοδο, όταν όλες οι συνθήκες είναι αληθής.

Απαντήθηκε 11/04/2009 στις 01:20
πηγή χρήστη

ψήφοι
1

Με δεδομένη τη σύνταξη φαίνεται, νομίζω ότι η απάντηση πρέπει να είναι «Όχι», σε αντίθεση με τη συσσωρευμένη σοφία των άλλων απαντήσεων.

Εσύ δείξε:

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

Πρόκειται σαφώς για μια ενιαία if... endifδήλωση, και ως εκ τούτου δεν υπάρχει ωοτοκίας. Αν υπήρχαν πολλαπλές endifδηλώσεις, θα ήταν ένθετα:

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

Έτσι, στη γλώσσα σας, φαίνεται ότι η λέξη-κλειδί elif(που χρησιμοποιείται από το Bourne shell) και elsif(χρησιμοποιείται από Perl) και ElseIf(που χρησιμοποιείται από τη Visual Basic) γράφεται else if.

Αν δεν υπήρχε ρητή endifγια να σηματοδοτήσει το τέλος της πρότασης, τότε θα είναι σε συμφωνία με τις άλλες απαντήσεις - ότι οι ifοι δηλώσεις (! Πληθυντικό) ένθετες, αν και η διάταξη είναι απόλυτα λογικό και συνιστάται.

Απαντήθηκε 11/04/2009 στις 01:45
πηγή χρήστη

ψήφοι
0

Οχι, δεν είναι.

Μια ένθετη δήλωση είναι αυτή που εμφανίζεται μέσα στην ίδια δήλωση, όπως και Αν ... Αν. Αν ... ElseIf είναι όλα στο ίδιο «δήλωση».

Απαντήθηκε 11/04/2009 στις 01:54
πηγή χρήστη

ψήφοι
1

Πρόκειται για ένα κάπως άσκοπο παιχνίδι της σημασιολογίας? εξαρτάται από τη σύνταξη της γλώσσας που εμπλέκονται.

Για παράδειγμα σε ένα C-σαν συντακτικό συνήθως θα θεωρούνταν ένθετη στις ρήτρες άλλο, με τα εγκάρσια στηρίγματα παραλειφθεί να συσκοτίσει το γεγονός αυτό. Σε αυτή την περίπτωση το παράδειγμα Turnor είναι σωστό.

Σε ορισμένες άλλες γλώσσες, όπως η Python και VB, «αλλιώς, αν είναι μια ατομική κατασκευή της δικής του. Στην περίπτωση αυτή, το «αν» δεν μπορεί να θεωρηθεί ότι είναι μέσα στο «άλλο», γι 'αυτό δεν θα μπορούσε να ονομαστεί «ένθετα».

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

Δεν έχουν οριστεί η σύνταξη του ψευδοκώδικα σας αρκετά για να πούμε με σιγουριά, αλλά το trailing «endif» είναι ύποπτη. Η ύπαρξή του δεν ταιριάζει με το C-τιράντες-παραλείπεται στυλ? και το γεγονός ότι υπάρχει μόνο ένας από αυτούς και όχι περισσότερο -

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

- σημαίνει ότι δεν ταιριάζει με τις με-τιράντες (ή έναρξης / λήξης) μοντέλο, είτε. Έτσι, αν κρίνουμε από την εν λόγω σύνταξη θα έβαζα γλώσσα ψευδοκώδικα σας στην «ατομική άλλο, αν κατασκήνωση, και να πω αρκετά αυθαίρετα: Όχι, το αν-δήλωση δεν ένθετα.

(Αλλά θα μπορούσατε πάντα να ορίζεται μια γλώσσα όπου endifs είναι προαιρετικές ή κενά που εξαρτώνται. Ή, μπορεί να έχετε καθορίσει μια γλώσσα όπου οι παραπάνω εκτυπώσεις πρόγραμμα «Hello world», στη συνέχεια, διαγράφει όλα τα αρχεία σας. Και έχει ένα ενσωματωμένο αναγνώστη ταχυδρομείου. )

Απαντήθηκε 11/04/2009 στις 02:50
πηγή χρήστη

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