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

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

Ερώτηση

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

4 απαντήσεις σε αυτή την ερώτηση

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

  • 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] προκαλεί ανεπιθύμητα αποτελέσματα 

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

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

}

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.