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

Προβλημα σε πολυ απλο κωδικα C


rikos

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

Εχω τον παρακατω κωδικα. Προσπαθω απλα να ταξινομησω εναν πινακα με 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]?
 
Ευχαριστώ!
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χωρίς να δοκιμάσω τον κώδικα υποπτεύομαι οτι φταίει το οτι χρησιμοποιείς θέση του πίνακα που δεν έχει δεσμευτεί..

 

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] προκαλεί ανεπιθύμητα αποτελέσματα 
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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}, που δεν είναι ταξινομημένος

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασε αυτό:

#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") ;   

}

* Δουλεύει σε αυτό το παράδειγμα, αλλά δεν είναι κώδικας ταξινόμησης

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...