takis_tz Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Γιατί ο πιο κάτω κώδικας, για την τιμή της μεταβλητής α[8] εμφανίζει 1? for (i = 0; i < 10; i++) a = 9 - i; for (i = 0; i < 10; i++) a = a[a];
takis_tz Δημοσ. 7 Ιουνίου 2008 Μέλος Δημοσ. 7 Ιουνίου 2008 for (i = 0; i < 10; i++) a = 9 - i; for (i = 0; i < 10; i++) a = a[a];
takis_tz Δημοσ. 7 Ιουνίου 2008 Μέλος Δημοσ. 7 Ιουνίου 2008 for (i=0; i<10; i++) a=9-i; for (i=0; i<10; i++) a=a[a];
darth_revan Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Αν κατάλαβα καλά τι λέει ο κώδικας, μετά το 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)
parsifal Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Να περικλείεις τον κώδικά σου ανάμεσα σε >[/NOPARSE] [NOPARSE] ή >[/NOPARSE] [NOPARSE] tags για να αποφεύγονται τέτοια φαινόμενα. Υπάρχουν συγκεκριμένες ακολουθίες χαρακτήρων που δημιουργούν πρόβλημα στο parsing που κάνει το forum software...
takis_tz Δημοσ. 7 Ιουνίου 2008 Μέλος Δημοσ. 7 Ιουνίου 2008 > for (i = 0; i < 10; i++) a[i] = 9 - i; for (i = 0; i < 10; i++) a[i] = a[a[i]];
parsifal Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Άρα, ο darth_revan είχε δίκιο. Το 2ο for loop, μέχρι τα μισά του πίνακα κάνει αντιμετάθεση των τιμών. Από το 2ο μισό και μετά, κάνει «καθρέπτισμα» των πρώτων 5 θέσεων.
takis_tz Δημοσ. 7 Ιουνίου 2008 Μέλος Δημοσ. 7 Ιουνίου 2008 Πως προκύπτει αυτό "...Το 2ο for loop, μέχρι τα μισά του πίνακα κάνει αντιμετάθεση των τιμών. Από το 2ο μισό και μετά, κάνει «καθρέπτισμα» των πρώτων 5 θέσεων." Δεν μπορώ να το εξηγήσω λογικά. Κατάλαβα πως προκύπτει το αποτέλεσμα, αλλά δεν κατάλαβα το γιατί λειτουργεί κατά αυτό το τρόπο το δεύτερο loop. Από που προκύπτει αυτό δηλαδή;
parsifal Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Δες τί γίνεται: Το 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η...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.