Βοήθεια στο C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Βοήθεια στο C

Δημοσίευσηαπό vale2000 » 14 Μάιος 2013, 06:49

Καλημέρα σας....

Μπορεί κανεις να με βοηθήσει?????
δεν μπορώ να βγάλω αυτή την άσκηση.......

Άσκηση Β

Η Γενική Γραμματεία Πληροφοριακών Συστημάτων δημιούργησε εφαρμογή για τη διαχείριση των Τελών Κυκλοφορίας του έτους 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. Για λόγους απλότητας, υποθέστε ότι οι αριθμοί κυκλοφορίας μπορούν να έχουν οποιοδήποτε κεφαλαίο γράμμα του λατινικού αλφαβήτου και ότι κάθε όχημα μπορεί να έχει μόνο έναν ιδιοκτήτη.


Παρακάτω θα αναρτήσω και το C οποίο είναι ημι συμπληρωμένο .......

Σας ευχαριστώ πολύ

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20   

struct vehicle_element
{
   char afm[10];   
         
   int cc;         
   char plate_number[8];     
       
   float amount;   
} vehicle[N] = {
{"123456789",1000,"IHY1229",125},   {"123456789",1000,"IHY1210",125},
{"123456789",1000,"IHY1223",125},   {"123456789",1100,"IHY1212",125},
{"123456791",1200,"IHY1213",125},   {"123456792",1300,"IHY1218",125},
{"123456792",1300,"IHY1216",125},   {"123456793",1400,"IHY1221",240},
{"123456794",1500,"IHY1220",240},   {"123456795",1600,"IHY1219",240},
{"123456796",1700,"IHY1222",240},   {"123456796",1700,"IHY1211",240},
{"123456796",1700,"IHY1217",240},   {"123456797",1800,"IHY1227",240},
{"123456798",1900,"IHY1215",240},   {"123456800",2100,"IHY1224",450},
{"123456806",2700,"IHY1225",450},   {"123456808",2900,"IHY1214",450},
{"123456809",3000,"IHY1228",450},   {"123456809",3000,"IHY1226",450}   
};

struct vehicle_node {
   char afm[10];   
           
   int cc;       
   char plate_number[8];     
       
   float amount;   
   struct vehicle_node *prev;     
   struct vehicle_node *next;     
};


struct vehicle_node *create_vehicle_list();
void reverse_print(struct vehicle_node *head);
void afm_vehicles(struct vehicle_node *head, char *userAfm);
void stats_vehicles(struct vehicle_node *head);


int main()
{
   char userAfm[10];
   int answer, i;
   struct vehicle_node *v_list=NULL;

   
   v_list = create_vehicle_list();

   do
   {
      printf("\nPlease select:\n");
      printf(" 1. Display data in reverse order\n");
      printf(" 2. Display data according to AFM\n");
      printf(" 3. Display statistical data\n");
      printf("Enter your selection (1-3)");
      printf(" or press any other integer to exit: ");
      scanf("%d", &answer);

      switch (answer)
      {
         case 1:
                 reverse_print(v_list);
                 system("PAUSE");
                 break;

         case 2:
                 printf("\nEnter your AFM: ");
                 fflush(stdin);
                 scanf("%s", userAfm);
                 afm_vehicles(v_list, userAfm);
                 system("PAUSE");
                 break;

         case 3:
                 stats_vehicles(v_list);
                 system("PAUSE");
      }         
   } while ((answer >= 1) && (answer <= 3));     
     
   printf("\n\nProgram ended.\n\n");
   system("PAUSE");
}

struct vehicle_node *create_vehicle_list()

{


}

void reverse_print(struct vehicle_node *head)
{


}

void afm_vehicles(struct vehicle_node *head, char *userAfm)

{


}

void stats_vehicles(struct vehicle_node *head)
                                 */
{

 

}
vale2000
babeTUX
babeTUX
 
Δημοσιεύσεις: 7
Εγγραφή: 02 Μαρ 2013, 13:37
Εκτύπωση

Re: Βοήθεια στο C

Δημοσίευσηαπό konnn » 14 Μάιος 2013, 12:09

Σίγουρα κάπου έχετε μιλήσει για δομές δεδομένων, όπως οι λίστες ή οι ουρές. Φαίνεται από τη δήλωση των συναρτήσεων που είναι το σώμα τους κενό.Αν ενσωματώσεις τη φιλοσοφία δημιουργίας ενός κόμβου μιας δομής στη συνάρτησή σου θα είσαι σε θέση να φτιάξεις ένα νέο vehicle, κοκ.
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση


Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron