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

απορία στις δομές στην c


ampatielou

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

γεια σας 

έχω αυτή την εργασία σε ενα εργαστήριο και προσπαθώ να βγάλω άκρη αλλά έχω κολλησει

να κάνετε πρόγραμμα στη γλώσσα c το οποίο κάνε
1) να ορίζει μια struct student με το εξής πεδία, όνομα, επίθετο, αμ, ετος γεννησης
2) να δεσμεύει δυναμικά χώρο μνήμης για 100 struct student
3) να διαβάζει και να αποθηκευει τα 100 struct student
4) να τους εμφανίζει στην οθόνη
5) να τα ταξινομεί κατά αυξουσα σειρά ως προς το επίθετο
6) να τους εμφανίζει στην οθόνη
7) να τα ταξινομεί κατά αυξουσα σειρά
8) ν ατους εμφανίζει στην οθόνη
9) να τους αποηθκευει σε ενα αρχειο
10) να ελευθερωνει το χωρο μνήμης
 

 

LYSH

#include <stdio.h>
#define MAX 100
Struct 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 ελευθερωνω  το χωρο?   δεν ξερω εχω κολησει.  ευχαριστω εκ των προτερων

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

...

θα μπορούσα να χρησιμοποιησω την 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 */
}

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Συγνώμη ρε παιδιά, κάτι ψιλο-άσχετο!

 

Όλα τα τμήματα πληροφορικής το μάθημα που έχει να κάνει με Δομές Δεδομένων σε Εαρινό εξάμηνο το έχουν?

Και από τι βλέπω οι περισσότεροι κάνουν ΔΔ με C

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

χιλια ευχαριστώ κατ'αρχην για την αμεση ανταποκριση αλλα θα θελα να ρωτήσω.  Χωρίς functions δεν γινεται?

 

Γίνεται, αλλά αν την συγκεκριμένη άσκηση την κάνεις χωρίς συναρτήσεις μην εκπλαγείς μετά αν δεν κάτσει κανείς να την διαβάσει και προτιμήσει να την μηδενίσει (ή έστω να της βάλει χαριστικά ένα 2-αράκι) μέσα σε περίπου 45 δευτερόλεπτα :lol:

 

Πέρα από την πλάκα, αν έχετε καλύψει την ύλη που (λογικά) αντιπροσωπεύει αυτή η άσκηση κι εσύ ακόμα δεν ξέρεις καν να γράφεις συναρτήσεις, μάλλον πρέπει να αρχίσεις να συμβιβάζεσαι με την ιδέα πως πολύ απλά δεν πρόκειται να την λύσεις (και άρα να αρχίσεις να κάνεις τα πλάνα σου χωρίς να υπολογίζεις βαθμούς από αυτή την άσκηση).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γίνεται, αλλά αν την συγκεκριμένη άσκηση την κάνεις χωρίς συναρτήσεις μην εκπλαγείς μετά αν δεν κάτσει κανείς να την διαβάσει και προτιμήσει να την μηδενίσει (ή έστω να της βάλει χαριστικά ένα 2-αράκι) μέσα σε περίπου 45 δευτερόλεπτα :lol:

Μήπως γενικά δεν κάτσει την διαβάσει ? :P

 

Δεν το γνωρίζω στα σίγουρα εννοείται αλλά όταν διάβασα το "να διαβάζει και να αποθηκεύει" μου έδωσε την εντύπωση ότι την είσοδο δεν την θέλει με scanf όπως την έχει ο OP αλλά να την παίρνει κατευθείαν από το αρχείο. Ότι δηλαδή θα έχει ένα έτοιμο αρχείο και θα το πετάει στο πρόγραμμα του κάθε φοιτητή και θα βλέπει τι βγάζει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Απο τι κατάλαβα πρόκειται για την ίδια άσκηση με εδώ 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/ οποτε κάνε την πρώτη άσκηση του θέματος πρώτα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για να μην ανοιγω αλλο thread μπορει καποιος να μου πει πως περιπου ειναι η μορφη των παρακατω δομων

typedef struct elem {
  char *key;
  struct elem *next;
} *NODE;

struct table {
  int total;
  NODE hashtab[N];
};
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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