rikos Δημοσ. 24 Ιανουαρίου 2013 Δημοσ. 24 Ιανουαρίου 2013 Εχω τον παρακατω κωδικα. Προσπαθω απλα να ταξινομησω εναν πινακα με 3 στοιχεια (ουαου) αλλα κατι κανω λαθος. Εβαλα καποιες printf συναρτησεις να δω τι παιρνουν οι ενδιαμεσες μεταβλητες και απο οτι φαινεται ο κωδικας αγνοει το στοιχειο array[0]. Γιατί ομως? #include <stdio.h> int main(void) { int array[] = {1, 3, 2}; for (int i = 0; i <= 2; i++ ) { if (array[i] > array[i+1]) { int z = array[i+1]; printf("z = %i\n", z); printf("array[i] = %i\n", array[i]); printf("array[i+1] = %i\n", array[i+1]); array[i] = array[i+1]; array[i+1] = z; } } for (int j = 0; j <= 2; j++) { printf("%i", array[j]); } printf("\n"); } Το output είναι : z = 2 array = 3 array[i+1] = 2 z = 0 array = 2 array[i+1] = 0 120 Δεν θα επρεπε να υπαρχει ενα z=1 και το array[0]? Ευχαριστώ!
Technology fan Δημοσ. 24 Ιανουαρίου 2013 Δημοσ. 24 Ιανουαρίου 2013 Χωρίς να δοκιμάσω τον κώδικα υποπτεύομαι οτι φταίει το οτι χρησιμοποιείς θέση του πίνακα που δεν έχει δεσμευτεί.. int array[] = {1, 3, 2}; //αρα ο πίνακας σου έχει τρία στοιχεία for (int i = 0; i <= 2; i++ ) { if (array[i] > array[i+1]) { // εδώ χρησιμοποιείς array[i+1] και όταν i=2 τότε το array[3] προκαλεί ανεπιθύμητα αποτελέσματα
parsifal Δημοσ. 24 Ιανουαρίου 2013 Δημοσ. 24 Ιανουαρίου 2013 1. Αυτό που λέει ο Technology fan: στο τελευταίο iteration του βρόχου επανάληψης, πας και προσπελαύνεις ένα array[3] από το υπερπέραν! 2. Ρωτάς γιατί δεν παίρνεις output για το στοιχείο με τιμή "1" του πίνακα. Αυτό συμβαίνει διότι για το συγκεκριμένο στοιχείο δεν βγαίνει αληθής η συνθήκη της if, οπότε δε μπαίνεις μέσα στο μπλοκ της if και ο βρόχος επανάληψης πηγαίνει παρακάτω 3. Ακόμη κι αν διορθώσεις τα 1 και 2, ο κώδικάς σου πάλι δε θα κάνει σωστή ταξινόμηση για τη γενική περίπτωση ακόμη και του πίνακα 3 στοιχείων. Παράδειγμα: είσοδος {1, 2, 0}. Ο κώδικάς σου θα συγκρίνει τα 1 και 2 και θα τα αφήσει στη θέση τους. Μετά θα συγκρίνει τα 2 και 0 και θα τους αλλάξει θέση. Και θα τερματίσει. Θα μείνεις δηλαδή με: {1, 0, 2}, που δεν είναι ταξινομημένος
Asterixx Δημοσ. 24 Ιανουαρίου 2013 Δημοσ. 24 Ιανουαρίου 2013 Δοκίμασε αυτό: #include <stdio.h> #include <stdlib.h> int main(void) { int i,z,j; int array[3] = {1,3,2}; for (int i=0; i<= 2; i++ ) { if (array[i] > array[i+1]) { z = array[i]; array[i] = array[i+1]; array[i+1] = z; } z=array[i]; printf("z = %i\n", z); printf("array[i] = %i\n", array[i]); if (i<2) { printf("array[i+1] = %i\n", array[i+1]); } } for (int j=0; j<= 2; j++) { printf("%i", array[j]); } printf("\n"); system("PAUSE") ; } * Δουλεύει σε αυτό το παράδειγμα, αλλά δεν είναι κώδικας ταξινόμησης
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα