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

Προβλημα με αλφαριθμητικά και δεικτες


georginos1989

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

Δημοσ.

Τι κάνω λάθος στην παρακατω συναρτηση και δεν τρεχει σωστά?

Η συνάρτηση παίρνει εναν δεικτη σε πινακα αλφαριθμητικών και το μεγεθος του πινακα και κανει ταξινομηση φυσαλίδας

Στη main δευσμευω δυναμικά εναν πινακα n αλφαριμητικων και 10 χαρακτηρων το καθενα...

Για πειτε τι πατατες κανω?

 

 

Επειδη δοκίμαζα διάφορα και δεν δουλευε τπτ αν δειτε καμια μεγάλη πατάτα μη πετάτε ντομάτες....

bubble3__.txt

Δημοσ.
Τι κάνω λάθος στην παρακατω συναρτηση και δεν τρεχει σωστά?

Η συνάρτηση παίρνει εναν δεικτη σε πινακα αλφαριθμητικών και το μεγεθος του πινακα και κανει ταξινομηση φυσαλίδας

Στη main δευσμευω δυναμικά εναν πινακα n αλφαριμητικων και 10 χαρακτηρων το καθενα...

Για πειτε τι πατατες κανω?

 

 

Επειδη δοκίμαζα διάφορα και δεν δουλευε τπτ αν δειτε καμια μεγάλη πατάτα μη πετάτε ντομάτες....

 

 

 

εφόσον λες ότι είναι όλα 10 χαρακτήρων γιατί βρίσκεις το length?

>if(strlen(p[j-1])>strlen(p[j]))
                               l=strlen(p[j-1]);
                       else
                               l=strlen(p[j]);

 

το inlude "bubble3.h" δεν χρειάζεται και που το τρέχεις;; που είδες ότι δεν δουλεύει σωστά;; προσπάθησε να μην έχεις πολλά πράγματα εφόσον είναι απλώς μία σύγκριση και μετά η αντικατάσταση δηλαδή το

>strcpy(temp,p[j-1]);
                                       strcpy(p[j-1],p[j]) ;
                                       strcpy(p[j],temp) ;

 

άμα θέλεις πάλι σου την φτιάχνω κ εγώ, αλλά καλύτερα είναι να προσπαθήσεις μόνος σου..

Δημοσ.

Εκανα το προγραμμα με header file... Στην main φτιαχνω δυναμικά τον πινακα και τον στελνω στην συναρτηση για να κανει ταξινόμηση..

 

Το strlen το δοκίμασα επειδη δεν έτρεχε μήπως τρέξει αλλά δεν....

 

Την έκανα την άσκηση αλλίως και δουλευει... Εβαλα να γίνονται όλα μεσα στην στη συνάρτηση... Να δημιουργεί πινακα να τον ταξινομει και να τον εμφανιζει

και απλως στη main να καλεις αυτη τη συνάρτηση

 

Αλλά θέλω να το κανω με δεικτες....

Δημοσ.
Εκανα το προγραμμα με header file... Στην main φτιαχνω δυναμικά τον πινακα και τον στελνω στην συναρτηση για να κανει ταξινόμηση..

 

Το strlen το δοκίμασα επειδη δεν έτρεχε μήπως τρέξει αλλά δεν....

 

Την έκανα την άσκηση αλλίως και δουλευει... Εβαλα να γίνονται όλα μεσα στην στη συνάρτηση... Να δημιουργεί πινακα να τον ταξινομει και να τον εμφανιζει

και απλως στη main να καλεις αυτη τη συνάρτηση

 

Αλλά θέλω να το κανω με δεικτες....

 

Γιατί δεν κάνεις επικόλληση μέσα σε spoiler και τη main ?

Δημοσ.
Εκανα το προγραμμα με header file... Στην main φτιαχνω δυναμικά τον πινακα και τον στελνω στην συναρτηση για να κανει ταξινόμηση..

 

Το strlen το δοκίμασα επειδη δεν έτρεχε μήπως τρέξει αλλά δεν....

 

Την έκανα την άσκηση αλλίως και δουλευει... Εβαλα να γίνονται όλα μεσα στην στη συνάρτηση... Να δημιουργεί πινακα να τον ταξινομει και να τον εμφανιζει

και απλως στη main να καλεις αυτη τη συνάρτηση

 

Αλλά θέλω να το κανω με δεικτες....

 

στειλε τον κώδικα που έχεις κάνει χωρίς δείκτες να στο μετατρέψω.

Δημοσ.
Να η άσκηση που δουλεύει... Τα αλφαριθμητικά είναι στο bubble3...

 

Παραβλέπω τα #pragma και γενικά την ποιότητα ή μη του κώδικα και πάω στο bubble3

 

Στο bubble3.cpp ορίζεις

>
void bubble3(char **p, int N)

ενώ στο bubble3.h ορίζεις

>
void bubble3(char *p, int N)

Οπότε έχεις δύο διαφορετικές δηλώσεις για το ίδιο πράγμα.

 

Στην main τώρα στο Unit1.cpp ο πίνακας σου ορίζεται ως

>
char c[n][10];

 

Το πρόβλημα σου είναι ότι ένας δισδιάστατος πίνακας είναι διαφορετικός

τύπος από ένα δείκτη σε δείκτη.

Είναι βέβαια γνωστό ότι όταν χρησιμοποιούμε ένα πίνακα ως παράμετρο συνάρτησης

τότε η C μετατρέπει αυτόματα την δήλωση σε δείκτη του τύπου του πίνακα.

>
void mitsos(char p[10])
void mitsos(char p[])
void mitsos(char *p)

Δηλαδή οι παραπάνω δηλώσεις είναι ισοδύναμες επειδή το p[10] είναι πίνακας

από 10 χαρακτήρες οπότε η δήλωση είναι ισοδύναμη με δείκτη σε χαρακτήρα.

 

Ας δούμε τώρα τι γίνεται στον δισδιάστατο πίνακα που έχεις. Το char[n][10]

δηλώνει ένα πίνακα με στοιχεία πίνακες από 10 χαρακτήρες οπότε ο ισοδύναμος

δείκτης δεν είναι char **p αλλά char (*p)[10]

 

Έτσι θα πρέπει να δηλώσεις την συνάρτηση ως

>
void bubble3(char (*p)[10], int N)

 

Και μετά να την καλέσεις ως

>
bubble3(c,N); (χωρίς τον αστερίσκο που έχεις τώρα δηλαδή)

 

Μετά από αυτήν την αλλαγή το πρόγραμμά σου παίζει σωστά.

Θέλει βέβαια βελτιώσεις αλλά εκείνες τις αφήνω σε σένα.

Δημοσ.

εε sorry αυτό που σας έστειλα είναι με τις αλλαγές που δοκίμαζα... Ο κωδικας σε σχόλια και αν αλλαξω την συνάρτηση με μονο ορισμα το Ν ειναι που το ειχα κανει χωρίς δείκτες και ετρεχε

 

---------- Προσθήκη στις 21:47 ---------- Προηγούμενο μήνυμα στις 21:42 ----------

 

Μόλις το δοκίμασα με τις αλλαγές που είπες και δουλευει... thanks..

 

Τι θες να πεις για το #pragma?

 

Δεν πρεπει να υπάρχει εκει?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...