από vale2000 » 13 Μάιος 2013, 20:48
χριάζομαι βοήθεια.........δεν τη καταλαβαίνω καθόλου την ερώτηση........μπορείτε ν α με βοηθήσετε επειδή άργησα και τώρα κινδυνεύω να μείνω την ενότητα......σας υπόσχομαι οτι θα διαβάσω μεταγενέστερα και θα σας αποδείξω ότι το κατάλαβα............
Β.
Η Γενική Γραμματεία Πληροφοριακών Συστημάτων δημιούργησε εφαρμογή για τη διαχείριση των Τελών Κυκλοφορίας του έτους 2013. Τα στοιχεία των οχημάτων και των τελών τους αποθηκεύονται σε πίνακα με όνομα vehicle, κάθε στοιχείο του οποίου αντιστοιχεί σε ένα όχημα και έχει την ακόλουθη δομή:
struct vehicle_element {
char afm[10]; /* 9 θέσεις για τον ΑΦΜ του ιδιοκτήτη του οχήματος και μία για τον τερματιστή συμβολοσειράς (χαρακτήρας ’\0’) */
int cc; /* κυβικά εκατοστά του οχήματος */
char plate_number[8]; /* 7 θέσεις για τους χαρακτήρες του αριθμού κυκλοφορίας και μία για τον τερματιστή συμβολοσειράς (χαρακτήρας ’\0’) */
float amount; /* ποσό του τέλους κυκλοφορίας (σε ευρώ) */
};
Οι αριθμοί κυκλοφορίας των οχημάτων αποτελούνται από 3 κεφαλαία γράμματα του λατινικού αλφαβήτου ακολουθούμενα από 4 ψηφία. Ο πίνακας vehicle αποτελεί καθολική μεταβλητή του προγράμματος και λαμβάνει τιμές κατά τη δήλωσή του.
Να γραφεί πρόγραμμα στη γλώσσα προγραμματισμού C, το οποίο θα επιτρέπει το χειρισμό των οχημάτων μέσω δυναμικής διπλά διασυνδεδεμένης γραμμικής λίστας με χρήση δεικτών, η οποία είναι ταξινομημένη ως προς τους αριθμούς κυκλοφορίας των οχημάτων σε αύξουσα λεξικογραφική σειρά. Πιο συγκεκριμένα, να υλοποιηθούν τα εξής:
1. Η συνάρτηση create_vehicle_list, η οποία για κάθε στοιχείο του πίνακα vehicle δημιουργεί κόμβο μιας διπλά διασυνδεδεμένης γραμμικής λίστας με την ακόλουθη δομή:
struct vehicle_node {
char afm[10]; /* 9 θέσεις για τον ΑΦΜ και μία για τον τερματιστή συμβολοσειράς (χαρακτήρας ’\0’) */
int cc; /* κυβικά εκατοστά */
char plate_number[8]; /* 7 θέσεις για τους χαρακτήρες του αριθμού κυκλοφορίας και μία για τον τερματιστή συμβολοσειράς (χαρακτήρας ’\0’) */
float amount; /* ποσό του τέλους κυκλοφορίας (σε ευρώ) */
struct vehicle_node *prev; /* δείκτης στον προηγούμενο κόμβο της λίστας */
struct vehicle_node *next; /* δείκτης στον επόμενο κόμβο της λίστας */
};
Η συνάρτηση create_vehicle_list εισάγει τους κόμβους στη λίστα έτσι ώστε αυτή να είναι ταξινομημένη κατά αύξουσα σειρά ως προς τους αριθμούς κυκλοφορίας των οχημάτων. Η συνάρτηση επιστρέφει δείκτη στον πρώτο κόμβο της τελικής λίστας οχημάτων.
2. Η συνάρτηση reverse_print που έχει ως παράμετρο δείκτη στον πρώτο κόμβο της λίστας των οχημάτων και τυπώνει τα στοιχεία των οχημάτων στη λίστα με τη σειρά που αυτά εμφανίζονται σε αυτήν από δεξιά προς τα αριστερά (συνεπώς, θα πρέπει να φτάσετε στο τέλος της λίστας και κατόπιν να κινηθείτε προς την αρχή της τυπώνοντας τα στοιχεία των οχημάτων).
3. Η συνάρτηση afm_vehicles που έχει ως παραμέτρους έναν ΑΦΜ και το δείκτη στον πρώτο κόμβο της λίστας των οχημάτων και τυπώνει τα στοιχεία των οχημάτων (από την αρχή προς το τέλος της λίστας) που είναι καταχωρημένα στο συγκεκριμένο ΑΦΜ ή κατάλληλο μήνυμα αν δε βρεθεί κανένα όχημα.
Σημείωση: Ενδέχεται να υπάρχουν πολλά οχήματα που ανήκουν στον ίδιο ιδιοκτήτη (με τον ίδιο ΑΦΜ). Δεν απαιτείται έλεγχος για την παράμετρο του ΑΦΜ.
4. Η συνάρτηση stats_vehicles που έχει ως παράμετρο το δείκτη στον πρώτο κόμβο της λίστας των οχημάτων και τυπώνει το συνολικό πλήθος των οχημάτων ανά κατηγορία κ.εκ. ή κατάλληλο μήνυμα αν η λίστα οχημάτων είναι κενή. Θεωρήστε ότι μας ενδιαφέρουν τρεις κατηγορίες οχημάτων: μικρά οχήματα (έως 1300 κ.εκ.), μεσαία (1301 – 1900 κ.εκ.) και μεγάλα (άνω των 1900 κ.εκ.).
Σημείωση:
1. Για τη σύγκριση αλφαριθμητικών και για την αντιγραφή τους μπορεί να χρησιμοποιηθούν οι συναρτήσεις strcmp και strcpy, αντίστοιχα, της βιβλιοθήκης <string.h>.
2. Για λόγους απλότητας, υποθέστε ότι οι αριθμοί κυκλοφορίας μπορούν να έχουν οποιοδήποτε κεφαλαίο γράμμα του λατινικού αλφαβήτου και ότι κάθε όχημα μπορεί να έχει μόνο έναν ιδιοκτήτη.
3. Θα πρέπει να χρησιμοποιηθεί το σχέδιο προγράμματος ypoergasia_2_code_template.c που είναι στον κατάλογο code_templates του συμπιεσμένου αρχείου στο οποίο υπάρχει η εκφώνηση της 4ης Γραπτής Εργασίας. Στο σχέδιο προγράμματος να συμπληρωθεί ο κώδικας που υλοποιεί τις τέσσερις ανωτέρω συναρτήσεις.