Δημοσιεύτηκε: 03 Φεβ 2012, 00:49
Δεν εννοώ κάτι διαφορετικό από αυτό που έγραψα ρε συ... το ότι δηλαδή οι συναρτήσεις fill() & print() θα πρέπει να δουλεύουν με ένα κι όχι με 2 πίνακες.
Ένα άλλο τώρα, σου είχα πει από την αρχή να θεωρήσεις πως οι πίνακες μπορούν να έχουν διαφορετικό μήκος, για να μη χρειαστεί να αλλάζεις τον κώδικα. Σου έδειξα και με ποια δομή πρέπει να το κάνεις και με ποιο τρόπο θα δημιουργήσεις τους πίνακες, σου έδωσα έτοιμη ακόμα και τη συνάρτηση που δημιουργεί τους πίνακες μέσα στην κάθε δομή.
Παρόλα αυτά εσύ κάθεσαι 2η μέρα τώρα και κάνεις τα ακριβώς αντίθετα. Οκ no prob, αλλά ποστάρεις κι απορίες κιόλας
Αυτό που προσπαθείς να κάνεις με τον τρόπο που προσπαθείς να το κάνεις, για να στο πω απλά, δεν γίνεται! Και ο λόγος είναι πολύ απλός: οκ αντιμεταθέτεις τα στοιχεία του κοινού μήκους των 2 πινάκων, μετά όμως πως θα μικρύνεις τον μεγάλο και πως θα μεγαλώσεις τον μικρό, για να πάρει όσα στοιχεία περισσεύουν από τον πρώην μεγάλο;
Αυτά πολύ απλά δεν γίνονται σε στατικά ορισμένους πίνακες!
Αυτό που προσπαθείς να κάνεις σχεδόν 2 μέρες τώρα, δηλαδή αντιμετάθεση 2 πινάκων με το ίδιο μέγεθος, υλοποιείται σε 7 γραμμές κώδικα είτε το κάνεις μέσω δεικτών (όπως ο κώδικας που πόσταρα χτες, που όμως δεν είναι συμβατός με το ANSI πρότυπο) είτε το κάνεις χωρίς δείκτες (το δείχνω παρακάτω).
Η αντιμετάθεση 2 πινάκων με ίδιο μήκος έχει ΜΗΔΕΝΙΚΟ ενδιαφέρον σε ότι αφορά την εκμάθηση των δεικτών! Ένα malloc() κι ένα free() είναι όλο κι όλο, για τον προσωρινό πίνακα...
Αντίθετα αυτό που σου είπα εξαρχής να κάνεις και με δείκτες σε τρίβει, και πολύ χρήσιμο θα σου φανεί αν δεήσεις να ασχοληθείς ποτέ σοβαρά με προγραμματισμό, γιατί τώρα εγώ καταλαβαίνω πως παίζεις τις κουμπάρες (χωρίς παρεξήγηση, εννοώ πως δεν φαίνεται να σε ενδιαφέρει σοβαρά το άθλημα).
Εν πάσει περιπτώση, δημοκρατία έχουμε
Φυσικά δεν θα σου πω εγώ τι θα κάνεις, αλλά...
Ένα άλλο τώρα, σου είχα πει από την αρχή να θεωρήσεις πως οι πίνακες μπορούν να έχουν διαφορετικό μήκος, για να μη χρειαστεί να αλλάζεις τον κώδικα. Σου έδειξα και με ποια δομή πρέπει να το κάνεις και με ποιο τρόπο θα δημιουργήσεις τους πίνακες, σου έδωσα έτοιμη ακόμα και τη συνάρτηση που δημιουργεί τους πίνακες μέσα στην κάθε δομή.
Παρόλα αυτά εσύ κάθεσαι 2η μέρα τώρα και κάνεις τα ακριβώς αντίθετα. Οκ no prob, αλλά ποστάρεις κι απορίες κιόλας
Αυτό που προσπαθείς να κάνεις με τον τρόπο που προσπαθείς να το κάνεις, για να στο πω απλά, δεν γίνεται! Και ο λόγος είναι πολύ απλός: οκ αντιμεταθέτεις τα στοιχεία του κοινού μήκους των 2 πινάκων, μετά όμως πως θα μικρύνεις τον μεγάλο και πως θα μεγαλώσεις τον μικρό, για να πάρει όσα στοιχεία περισσεύουν από τον πρώην μεγάλο;
Αυτά πολύ απλά δεν γίνονται σε στατικά ορισμένους πίνακες!
Αυτό που προσπαθείς να κάνεις σχεδόν 2 μέρες τώρα, δηλαδή αντιμετάθεση 2 πινάκων με το ίδιο μέγεθος, υλοποιείται σε 7 γραμμές κώδικα είτε το κάνεις μέσω δεικτών (όπως ο κώδικας που πόσταρα χτες, που όμως δεν είναι συμβατός με το ANSI πρότυπο) είτε το κάνεις χωρίς δείκτες (το δείχνω παρακάτω).
Η αντιμετάθεση 2 πινάκων με ίδιο μήκος έχει ΜΗΔΕΝΙΚΟ ενδιαφέρον σε ότι αφορά την εκμάθηση των δεικτών! Ένα malloc() κι ένα free() είναι όλο κι όλο, για τον προσωρινό πίνακα...
- Κώδικας: Επιλογή όλων
Bool arrswap( int arr1[], int arr2[], const int len )
{
int *tmparr = NULL;
size_t size = len * sizeof(int);
if ( !arr1 || !arr2 || len < 1 || (tmparr=malloc(size)) == NULL )
return FALSE;
memcpy( tmparr, arr1, size );
memcpy( arr1, arr2, size );
memcpy( arr2, tmparr, size);
free( tmparr );
return TRUE;
}
Αντίθετα αυτό που σου είπα εξαρχής να κάνεις και με δείκτες σε τρίβει, και πολύ χρήσιμο θα σου φανεί αν δεήσεις να ασχοληθείς ποτέ σοβαρά με προγραμματισμό, γιατί τώρα εγώ καταλαβαίνω πως παίζεις τις κουμπάρες (χωρίς παρεξήγηση, εννοώ πως δεν φαίνεται να σε ενδιαφέρει σοβαρά το άθλημα).
Εν πάσει περιπτώση, δημοκρατία έχουμε
Φυσικά δεν θα σου πω εγώ τι θα κάνεις, αλλά...