Προς το περιεχόμενο

βοήθεια σε loop


takis_tz

Προτεινόμενες αναρτήσεις

Δημοσ.

Γιατί ο πιο κάτω κώδικας, για την τιμή της μεταβλητής α[8] εμφανίζει 1?

 

for (i = 0; i < 10; i++)

a = 9 - i;

for (i = 0; i < 10; i++)

a = a[a];

Δημοσ.

Αν κατάλαβα καλά τι λέει ο κώδικας, μετά το 1ο loop, ο πίνακάς σου θα έχει τις εξής τιμές:

a[0] = 9, a[1] = 8, a[2] = 7, a[3] = 6, a[4] = 5, a[5] = 4, a[6] = 3, a[7] = 2, a[8] = 1, a[9] = 0

 

Μέσα στο 2ο loop θα γίνονται τα εξής:

a[0] = a[ a[0] ] = a[9] = 0 (1)

a[1] = a[ a[1] ] = a[8] = 1 (2)

a[2] = a[ a[2] ] = a[7] = 2 (3)

a[3] = a[ a[3] ] = a[6] = 3 (4)

a[4] = a[ a[4] ] = a[5] = 4 (5)

a[5] = a[ a[5] ] = a[4] = 4, λόγω του (5)

a[6] = a[ a[6] ] = a[3] = 3, λόγω του (4)

a[7] = a[ a[7] ] = a[2] = 2, λόγω του (3)

a[8] = a[ a[8] ] = a[1] = 1, λόγω του (2)

a[9] = a[ a[9] ] = a[0] = 0, λόγω του (1)

Δημοσ.

Να περικλείεις τον κώδικά σου ανάμεσα σε

>[/NOPARSE] [NOPARSE]

ή

>[/NOPARSE] [NOPARSE]

tags για να αποφεύγονται τέτοια φαινόμενα. Υπάρχουν συγκεκριμένες ακολουθίες χαρακτήρων που δημιουργούν πρόβλημα στο parsing που κάνει το forum software...

Δημοσ.

Άρα, ο darth_revan είχε δίκιο. Το 2ο for loop, μέχρι τα μισά του πίνακα κάνει αντιμετάθεση των τιμών. Από το 2ο μισό και μετά, κάνει «καθρέπτισμα» των πρώτων 5 θέσεων.

Δημοσ.

Πως προκύπτει αυτό "...Το 2ο for loop, μέχρι τα μισά του πίνακα κάνει αντιμετάθεση των τιμών. Από το 2ο μισό και μετά, κάνει «καθρέπτισμα» των πρώτων 5 θέσεων."

Δεν μπορώ να το εξηγήσω λογικά. Κατάλαβα πως προκύπτει το αποτέλεσμα, αλλά δεν κατάλαβα το γιατί λειτουργεί κατά αυτό το τρόπο το δεύτερο loop. Από που προκύπτει αυτό δηλαδή;

Δημοσ.

Δες τί γίνεται: Το 1ο for loop γεμίζει τον πίνακα με την φθίνουσα ακολουθία 9, 8, 7, 6, 5, 4, 3, 2, 1, 0. Το 2ο for loop στην ουσία ξαναπαίρνει τις θέσεις του πίνακα με τη σειρά και: Στην θέση 0, βάζει την τιμή που βρίσκεται στην, κατοπτρική της 0, θέση (δηλαδή στην 9, άρα την τιμή 0). Στη θέση 1, βάζει την τιμή που βρίσκεται στην, κατοπτρική της 1, θέση (δηλαδή στην 8, άρα την τιμή 1) κ.ο.κ. Πάει δηλαδή να αντιστρέψει την ακολουθία και να την κάνει 0, 1, 2, 3...

 

Όμως, επειδή οι τιμές αλλάζουν και δεν κρατιούνται οι παλιές, μόλις το loop φτάσει στην middle+1 θέση (δηλαδή στην 5) τραβάει την τιμή της 4ης θέσης η οποία πλέον είναι η ίδια με αυτήν που έχει ήδη η 5η θέση. Γίνεται δηλαδή μία άχρηστη ανάθεση. Το ίδιο και για τις επόμενες θέσεις μέχρι την 9η...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...