ampatielou Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 γεια σας έχω αυτή την εργασία σε ενα εργαστήριο και προσπαθώ να βγάλω άκρη αλλά έχω κολλησει να κάνετε πρόγραμμα στη γλώσσα c το οποίο κάνε1) να ορίζει μια struct student με το εξής πεδία, όνομα, επίθετο, αμ, ετος γεννησης2) να δεσμεύει δυναμικά χώρο μνήμης για 100 struct student3) να διαβάζει και να αποθηκευει τα 100 struct student4) να τους εμφανίζει στην οθόνη5) να τα ταξινομεί κατά αυξουσα σειρά ως προς το επίθετο6) να τους εμφανίζει στην οθόνη7) να τα ταξινομεί κατά αυξουσα σειρά8) ν ατους εμφανίζει στην οθόνη9) να τους αποηθκευει σε ενα αρχειο10) να ελευθερωνει το χωρο μνήμης LYSH#include <stdio.h>#define MAX 100Struct student {char onoma[20];char eponimo[25];int am;int year;};int main(){struct student *ptr;ptr=(struct student*)malloc(100*sizeof(struct student));int i,num;struct student studs[MAX];num = 0;for(i = 0; i < MAX, i++){printf("\Enter student data:\n");printf("onoma: ");scanf("%s",&(ptr+i)->onoma);printf("Last name: " eponimo);scanf("%s",&(ptr+i)-> eponimo);printf("Code: ");scanf("%d", &(ptr+i)-> am);printf("ilikia ");scanf("%f",&(ptr+i)-> year);} θα μπορούσα να χρησιμοποιησω την qsort σε structs για να κάνω την ταξινομηση που ζητά ή πρεπει καποιο αλλο τροπο (bubblesort) ας πουμε. με την free ελευθερωνω το χωρο? δεν ξερω εχω κολησει. ευχαριστω εκ των προτερων
migf1 Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 ... θα μπορούσα να χρησιμοποιησω την qsort σε structs για να κάνω την ταξινομηση που ζητά ή πρεπει καποιο αλλο τροπο (bubblesort) ας πουμε. με την free ελευθερωνω το χωρο? δεν ξερω εχω κολησει. ευχαριστω εκ των προτερων Αν η εκφώνηση δεν λέει κάτι άλλο και δεν έχει ζητηθεί κάτι συγκεκριμένο στο αμφιθέατρο, τότε ναι υποθέτω μπορείς να χρησιμοποιήσεις όποιον αλγόριθμο ταξινόμησης επιθυμείς... ίσως ακόμα και την στάνταρ συνάρτηση: qsort(). Σχετικά με τη free(), ναι ελευθερώνει τη μνήμη στην οποία δείχνει το όρισμά της (που είναι δείκτης). Όσο για τα υπόλοιπα, μια καλή ιδέα είναι υποθέτω να αρχίσεις να συμπληρώνεις τον σκελετό που σου έγραψα και παραθέτω παρακάτω, και όταν κολλήσεις κάπου να μας ξανα-ρωτήσεις (απλά σημείωσε πως αυτός ο σκελετός είναι ένας μονάχα τρόπος υλοποίησης από τους πολλούς και διάφορους που θα μπορούσες να κάνεις, μπορείς να τροποποιήσεις τη σύνταξή του, τη δομή του, και οτιδήποτε άλλο κατά το δοκούν)... #include <stdio.h> #include <stdlib.h> /* Constants */ #define FNAME "studsList.dat" #define MAX_STUDS 100 #define STRSIZE_ONOMA (20+1) #define STRSIZE_EPITHETO (25+1) /* Custom Types */ /* 1) να ορίζει μια struct student με το εξής πεδία, όνομα, επίθετο, αμ, ετος γεννησης */ struct Student { char onoma[ STRSIZE_ONOMA ]; char eponimo[ STRSIZE_EPITHETO ]; int am; int year; }; /* Function Prototypes */ struct Student *new_studsList( int maxStuds ); int student_read( struct Student *stud ); int studsList_print( const struct Student *studsList, int maxStuds ); int studsList_sort_by_epitheto( struct Student *studsList, int maxStuds ); int studsList_sort_by_onoma( struct Student *studsList, int maxStuds ); int studsList_save( const struct Student *studsList, int maxStuds, char *fname ); /* Function Definitions */ /* ----------------------------------------------- * program's entry point */ int main( void ) { int i=0; struct Student *studsList = NULL; /* 2) να δεσμεύει δυναμικά χώρο μνήμης για 100 struct student */ if ( NULL == (studsList = new_studsList(MAX_STUDS)) ) { fputs( "*** fatal error: possible memory shortage, aborting program...\n", stderr ); system( "pause" ); /* Windows only */ exit( FAILURE ); } /* 3) να διαβάζει και να αποθηκευει τα 100 struct student */ for (i=0; i < MAX_STUDS; i++ ) student_read( &studsList[i] ); /* 4) να τους εμφανίζει στην οθόνη */ studsList_print( studsList, MAX_STUDS ); /* 5) να τα ταξινομεί κατά αυξουσα σειρά ως προς το επίθετο */ studsList_sort_by_epitheto( studsList, MAX_STUDS ); /* 6) να τους εμφανίζει στην οθόνη */ studsList_print( studsList, MAX_STUDS ); /* 7) να τα ταξινομεί κατά αυξουσα σειρά */ studsList_sort_by_onoma( studsList, MAX_STUDS ); /* 8) να τους εμφανίζει στην οθόνη */ studsList_print( studsList, MAX_STUDS ); /* 9) να τους αποθηκευει σε ενα αρχειο */ studsList_save( studsList, MAX_STUDS, FNAME ); /* 10) να ελευθερωνει το χωρο μνήμης */ if ( studsList ) free( studsList ); studsList = NULL; system( "pause" ); /* Windows only */ exit( EXIT_SUCCES ); } /* ----------------------------------------------- * reserve contiguous memory for 'maxStuds' students and return a pointer to that memory */ struct Student *new_studsList( int maxStuds ) { /* sanity check */ if ( maxStuds < 1 ) return NULL; return calloc( maxStuds, sizeof(struct Student) ); } /* ----------------------------------------------- * read a student's data from stdin */ int student_read( struct Student *stud ) { /* sanity check */ if ( NULL == stud ) return 0; /* false */ /* * function's main logic goes here */ return 1; /* true */ } /* ----------------------------------------------- * print data of all the students contained in the specified 'studsList' */ int studsList_print( const struct Student *studsList, int maxStuds ); { if ( /* sanity check goes here */ ) return 0; /* false */ /* * function's main logic goes here */ return 1; /* true */ } /* ----------------------------------------------- * sort by 'epitheto' the data of all students contained in the specified 'studsList' */ int studsList_sort_by_epitheto( struct Student *studsList, int maxStuds ); { if ( /* sanity check goes here */ ) return 0; /* false */ /* * function's main logic goes here */ return 1; /* true */ } /* ----------------------------------------------- * sort by 'onoma' the data of all students contained in the specified 'studsList' */ int studsList_sort_by_onoma( struct Student *studsList, int maxStuds ); { if ( /* sanity check goes here */ ) return 0; /* false */ /* * function's main logic goes here */ return 1; /* true */ } /* ----------------------------------------------- * save all students of the specified 'studsList' to disk, under the specified 'fname' */ int studsList_save( const struct Student *studsList, int maxStuds, char *fname ); { if ( /* sanity check goes here */ ) return 0; /* false */ /* * function's main logic goes here */ return 1; /* true */ }
Downloadpercent Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 Συγνώμη ρε παιδιά, κάτι ψιλο-άσχετο! Όλα τα τμήματα πληροφορικής το μάθημα που έχει να κάνει με Δομές Δεδομένων σε Εαρινό εξάμηνο το έχουν? Και από τι βλέπω οι περισσότεροι κάνουν ΔΔ με C
ampatielou Δημοσ. 5 Απριλίου 2013 Μέλος Δημοσ. 5 Απριλίου 2013 χιλια ευχαριστώ κατ'αρχην για την αμεση ανταποκριση αλλα θα θελα να ρωτήσω. Χωρίς functions δεν γινεται?
migf1 Δημοσ. 5 Απριλίου 2013 Δημοσ. 5 Απριλίου 2013 χιλια ευχαριστώ κατ'αρχην για την αμεση ανταποκριση αλλα θα θελα να ρωτήσω. Χωρίς functions δεν γινεται? Γίνεται, αλλά αν την συγκεκριμένη άσκηση την κάνεις χωρίς συναρτήσεις μην εκπλαγείς μετά αν δεν κάτσει κανείς να την διαβάσει και προτιμήσει να την μηδενίσει (ή έστω να της βάλει χαριστικά ένα 2-αράκι) μέσα σε περίπου 45 δευτερόλεπτα Πέρα από την πλάκα, αν έχετε καλύψει την ύλη που (λογικά) αντιπροσωπεύει αυτή η άσκηση κι εσύ ακόμα δεν ξέρεις καν να γράφεις συναρτήσεις, μάλλον πρέπει να αρχίσεις να συμβιβάζεσαι με την ιδέα πως πολύ απλά δεν πρόκειται να την λύσεις (και άρα να αρχίσεις να κάνεις τα πλάνα σου χωρίς να υπολογίζεις βαθμούς από αυτή την άσκηση).
imitheos Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Γίνεται, αλλά αν την συγκεκριμένη άσκηση την κάνεις χωρίς συναρτήσεις μην εκπλαγείς μετά αν δεν κάτσει κανείς να την διαβάσει και προτιμήσει να την μηδενίσει (ή έστω να της βάλει χαριστικά ένα 2-αράκι) μέσα σε περίπου 45 δευτερόλεπτα Μήπως γενικά δεν κάτσει την διαβάσει ? Δεν το γνωρίζω στα σίγουρα εννοείται αλλά όταν διάβασα το "να διαβάζει και να αποθηκεύει" μου έδωσε την εντύπωση ότι την είσοδο δεν την θέλει με scanf όπως την έχει ο OP αλλά να την παίρνει κατευθείαν από το αρχείο. Ότι δηλαδή θα έχει ένα έτοιμο αρχείο και θα το πετάει στο πρόγραμμα του κάθε φοιτητή και θα βλέπει τι βγάζει.
Technology fan Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Απο τι κατάλαβα πρόκειται για την ίδια άσκηση με εδώ http://www.insomnia.gr/topic/481735-%CE%B1%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CF%84%CE%B7-c/ οποτε κάνε την πρώτη άσκηση του θέματος πρώτα...
nik324 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 Για να μην ανοιγω αλλο thread μπορει καποιος να μου πει πως περιπου ειναι η μορφη των παρακατω δομων typedef struct elem { char *key; struct elem *next; } *NODE; struct table { int total; NODE hashtab[N]; };
migf1 Δημοσ. 6 Απριλίου 2013 Δημοσ. 6 Απριλίου 2013 table->hashtab[0] = NODE -> NODE -> ... -> NULL table->hashtab[1] = NODE -> NODE -> ... -> NULL ... table->hashtab[n] = NODE -> NODE -> ... -> NULL
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα