I@n15 Δημοσ. 25 Απριλίου 2009 Δημοσ. 25 Απριλίου 2009 Γεια και χαρα σε ολους τους φιλους και Χριστος Ανεστη.Το αγιο πνευμα των ημερων μαλλον δεν με εκανε πιο σοφο απ οτι φαινεται γι αυτο και ανατρεχω παλι στην πολυτιμη βοηθεια σας. Λοιπον προσφατα εμαθα πως γινεται η ταξιμομηση ενος πινακα με αριθμους απο τον μεγαλυτερο αριθμο στον μικροτερο και το αντιστροφο. 1)Δινω π.χ εναν πινακα με ονοματα(strings) 2)Δινω την ημερομηνια γεννησης για καθε ατομο(π.χ 1971)σ εναν πινακα με ακεραιους. 4)Χρησιμοποιω τον αλγοριθμο ταξινομησης buble sort για να ταξιμομησω τον πινακα με τις ηλικιες απο την μεγαλυτερη στην μικροτερη.Μεχρι εδω ολα καλα.Το προβλημα ειναι οτι θα θελα να εμφανισω τον πινακα με τα ονοματα αναλογα με αυτον που εχει την μεγαλυτερη ηλικια.Πρεπει να ειμαι και 2 μερες εδω πανω με τιποτα δεν μπορω να το καταφερω αυτο,ισως να ειναι κατι που δεν γνωριζω.. > [color="Green"]#include[/color] <[color="DarkOrange"]stdio.h>[/color] [color="Green"]#include[/color] <[color="DarkOrange"]stdlib.h[/color]> [color="DarkGreen"]#define[/color] [color="Cyan"]ROWS[/color] 3 [color="DarkGreen"]#define [/color][color="Cyan"]COLS[/color] 3 [color="Blue"]struct [/color]mystruct{ [color="Blue"]char [/color]ch[20]; [color="Blue"]int [/color] Num[[color="Cyan"]ROWS[/color]]; }; [color="Blue"]void[/color] [color="Black"]func1[/color]([color="Blue"]struct[/color] mystruct *ptr1) { [color="Blue"] int[/color] rows = 0; [color="Blue"] for[/color](; rows <= [color="Cyan"]ROWS[/color]-1; rows++) { printf("[color="DarkOrange"]dose tin %i imerominia geniseos:\n[/color]",rows+1); scanf("%i",&ptr1->Num[rows]); printf("[color="DarkOrange"]dose to %io onoma:\n[/color]",rows+1); scanf("%s",(ptr1+rows)->ch); } } //------------------------------------------------------------------------------ [color="Blue"]void [/color]func2([color="Blue"]struct [/color]mystruct *ptr2) { func1(ptr2); [color="Blue"]int[/color] rows = 0; [color="Blue"]int[/color] cols = 0; [color="Blue"] int [/color]temp = 0; [color="Blue"] for[/color](; rows <= [color="Cyan"]ROWS[/color]-1; rows++) { [color="Blue"]for[/color](; cols <= [color="Cyan"]COLS[/color]-1; cols++) { [color="Blue"]if[/color](ptr2->Num[cols] > ptr2->Num[rows]) { temp = ptr2->Num[rows]; ptr2->Num[rows] = ptr2->Num[cols]; ptr2->Num[cols] = temp; } } } } //------------------------------------------------------------------------------ int main() { [color="Blue"] struct [/color]mystruct *ptr; [color="Blue"]struct[/color] mystruct data[[color="Cyan"]ROWS[/color]]; ptr = data; func2(ptr); }
ippo00 Δημοσ. 26 Απριλίου 2009 Δημοσ. 26 Απριλίου 2009 Βασικά αυτό που θέλετε μάλλον είναι να κάνετε sort τα nodes αντί να κάνετε sort το data σας. Αν και δεν είναι και τόσο ξεκάθαρο τι γράφετε. > struct mystruct *ptr; struct mystruct data[ROWS]; ptr = data; func2(ptr); Θα ήταν καλύτερα να το γράψετε > struct mystruct data[ROWS]; func2(data); Για πολλούς λόγους. Από κει και πέρα δεν μπορώ να φανταστώ, για αυτό που φαντάζομαι ότι κανετε, γιατι χρειάζεστε nested loop και γιατί τέλως πάντων είναι εντελώς ασσύμετρη η πρόσβαση σους πίνακς. Κάτι άλλο. Θα βοήθούσς να δώσετε καλύτερα ονόματα στα fields από ch και num... edit τώρα που το κοιτάζω καλύτερα μάλλον απλά πρέπει όποτε κάνετε swap τις ηλικίες να κάνετε swap καί τα onomata (ή καλύτερα όλη τη δομή)
I@n15 Δημοσ. 26 Απριλίου 2009 Μέλος Δημοσ. 26 Απριλίου 2009 Καλησπερα σας και σας ευχαριστω πολυ για το χρονο σας και την βοηθεια. απλά πρέπει όποτε κάνετε swap τις ηλικίες να κάνετε swap καί τα onomata (ή καλύτερα όλη τη δομή Αυτο αντιλαμβανομαι κ εγω οτι πρεπει να γινουν ταυτοχρονα απλα αδυνατω να το κανω με κωδικα,κατι δεν κανω σωστα προφανως.
ippo00 Δημοσ. 26 Απριλίου 2009 Δημοσ. 26 Απριλίου 2009 Θα ελέγχετε τις ηλικίες και όπου θέλει swap θα κάνετε κάτι σαν. > struct mystruct temp,structarr[2]; ---φτάνουμε στο σημείο για το swap--- temp = structarr[0]; stuctarr[0] = structarr[1]; structarr[1] = temp;
bxenos Δημοσ. 26 Απριλίου 2009 Δημοσ. 26 Απριλίου 2009 Αυτό σίγουρα πρέπει να είναι έτσι; > struct mystruct{ char ch[20]; int Num[ROWS]; }; Δεν βοηθούν βέβαια τα ονόματα των πεδίων (όπως είπε και ο ippo00) να καταλάβω τι θέλεις να κάνεις' date=' αλλά αν Num είναι έτος γέννησης, μου φαίνεται δύσκολο ο κάθε ένας data[i'] να έχει ένα όνομα, αλλά να έχει γεννηθεί ROWS φορές. Μήπως θέλεις να γράψεις > struct mystruct{ char ch[20]; int Num; }; ; Εκτός αν δεν κατάλαβα καλά
I@n15 Δημοσ. 26 Απριλίου 2009 Μέλος Δημοσ. 26 Απριλίου 2009 Ζητω συγνωμη αν ειναι λιγο χαλια η διατυπωση μου.Θα προσπαθησω να γινω πιο σαφης.Θελω να δωσω τα ονοματα 3 ανθρωπων,τις ημερομηνιες γεννησης και να εμφανισω τον πινακα με τα ονοματα αυτων απο τον πιο μεγαλο σε ηλικια μεχρι τον μικροτερο.
bxenos Δημοσ. 26 Απριλίου 2009 Δημοσ. 26 Απριλίου 2009 Αρα δεν θέλεις COLS, αλλα μόνο το ROWS. > #define ROWS 3 struct mystruct { char name[20]; int byear; }; .... struct mystruct data[ROWS]; ..... ανάγνωση δεδομένων μέσω scanf scanf("%s",data[i].name); scanf("%d",&data[i].byear); Το scanf για την data.name δεν ειναι ασφαλές και ίσως να μην είναι και λειτουργικό. π.χ. Τι θα κάνει αν δώσεις ΝΙΚΟΣ ΠΑΠΑΔΟΠΟΥΛΟΣ για όνομα; Θα διαβάσει μόνο το ΝΙΚΟΣ και το ΠΑΠΑΔΟΠΟΥΛΟΣ θα προσπαθήσει να το ερμηνεύσει σαν έτος γέννησης. Τι θα κάνει αν πληκτρολογήσεις ΣΠΑΝΟΒΑΓΓΕΛΟΔΗΜΗΤΡΑΚΟΜΑΝΟΛΟΠΟΥΛΟΣ; Θα σκάσει (υπέρβαση μνήμης της name).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.