Τα πάντα για την C

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

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

Re: Τα πάντα για την C

Δημοσίευσηαπό c7p » 03 Μαρ 2013, 14:11

@vale2000

Δεν είδα διεξοδικά το πρόγραμμα πάντως εδώ εκχωρείς δεκαδικό (scanf("%d",..)) σε int (το n το έχεις δηλωμένο int).
Κώδικας: Επιλογή όλων
scanf ("%d", &n);

Το ίδιο λάθος κάνεις και με την μεταβλητή a, εκχωρείς σε αυτήν float τιμή ενώ είναι τύπου int.

Αφού θέλεις λεπτά του ευρώ (δεκαδικό αριθμό), δήλωσε τις μεταβλητές float.
Άβαταρ μέλους
c7p
powerTUX
powerTUX
 
Δημοσιεύσεις: 1849
Εγγραφή: 30 Μάιος 2009, 16:09
Τοποθεσία: Κατερίνη
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό moxsen » 04 Μαρ 2013, 01:19

Έλα φίλε μου...το ξέρω ότι στο δίνω έτοιμο, πρόσεχε τι θα παραδώσεις..μη μας κόψουν και τους 2!
Αμα έχεις κάνει την 4 την θέλω να δώ το σκεπτικό.. :geek:

Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
int load_menu(void);        //Συνάρτηση εμφάνισης επιλογών
int input_poso(float timh);       //Συνάρτηση εισαγωγής ποσού & υπολογισμού για τα ρέστα

//Κύρια συνάρτηση προγράμματος--------------------------------------------------------------------
main()
{
load_menu();    /*Καλεί την συνάρτηση εμφάνισης των επιλογών*/
system("pause");
}
//Τέλος κύριας συνάρτησης προγράμματος------------------------------------------------------------

//Συνάρτηση load_menu//--Εκτυπώνει τις επιλογές και ζητάει την επιλογή του χρήστη---------
int load_menu(void){
    int choice=0;
    float timh;
    do
    {
        printf("\nParakalw epilekste ena apo ta parakatw\n\n");
        printf("1. Kafe 1.5 euro\n");
        printf("2. Kafe me gala 1.8 euro\n");
        printf("3. Sokolata 2.1 euro\n");
        printf("4. Sokolata me gala 2.4 euro\n");
        printf("0. Exodos\n\n");
        printf("Parakalw eisagete tin epilogi sas: ");
        scanf("%d",&choice);               //Διαβάζει την επιλογή
        switch(choice)           
        {
/*Σε κάθε επιλογή καλεί την συνάρτηση εισαγωγής ποσού μεταβιβάζοντας την αντίστοιχη τιμή του προϊόντος*/
         case 1: input_poso(timh=1.5);
              break;
         case 2: input_poso(timh=1.8);
              break;
         case 3: input_poso(timh=2.1);
              break;
         case 4: input_poso(timh=2.4);
              break;
         case 0: printf("Exodos apo to programma\n");
              system("pause");
              exit(0);                    //Με την επιλογή 0 το πρόγραμμα τερματίζει//
              break;
         default: printf("\nLathos Epilogi!\n"); //Αμυντικός προγραμματισμός για την επιλογή//
              break;
          }
    }while(choice != 0); 
}
//Τέλος συνάρτησης load_menu//----------------------------------------------------------------------

//Συνάρτηση input_poso//--Εκτυπώνει την τιμή του προϊόν, ζητάει το ποσό πληρωμής από// //τον χρήστη και τυπώνει αφού κάνει τους υπολογισμούς τα ρέστα που θα επιστραφούν//
int input_poso(float timh)
{
     int Coins2euro, Coins1euro, Coins50cents, Coins20cents, Coins10cents, Coins5cents, change;
     float ypoloipo, poso, sinolo, resta;
     printf("\nPrepei na eisagete %1.1f euro synolika\n", timh);
     printf("Posa Eisagete? :");
     scanf("%f",&poso);
/* Εάν το ποσό εισαγωγής είναι ίδιο με την τιμή του προϊόντος, δεν υπάρχουν ρέστα. */
    if ( poso == timh )
    {
        printf("\nDen exeis resta\n");
    }   
/* Εάν το ποσό δεν επαρκεί, τυπώνεται αντίστοιχο μήνυμα και ζητείται επιπλέον ποσό. */
    else
         sinolo=poso;
         ypoloipo=timh-sinolo;
         if ( poso < timh ){
            do{ 
printf("\nDen symplironete to poso\n \nParakalw eisagete %1.1f euro epipleon\n",ypoloipo);
            scanf("%f",&poso);
            sinolo=sinolo+poso;
            ypoloipo=timh-sinolo;  //Για όσο το σύνολο των ποσών που έχουμε εισάγει είναι
         }            //είναι μικρότερο της τιμής του προϊόντος
         while(ypoloipo>0.0);   //επαναλαμβάνει την προσθήκη χρημάτων

         }


/*Εαν το ποσό είναι ίσο με την τιμή τότε δεν υπάρχουν ρέστα*/
         if(ypoloipo==0.0){
                   printf("\nDen exeis resta\n");
        }
/*Εάν υπάρχει αρνητική τιμή στο υπόλοιπο τότε υπάρχουν ρέστα*/
        else if (ypoloipo<0.0){
        resta = sinolo - timh;                            /*Υπολογισμός για τα ρέστα*/
        change = resta * 100;                             /*Μετατροπή σε λεπτά*/
        printf("\nEpistrofh: %1.1f euro\n",resta);  /*Τυπώνει το ποσό που θα επιστραφεί*/
        printf("\nParakalw parte : \n");
/*Υπολογίζει τα ρέστα που πρέπει να επιστρέψει*/       
        Coins2euro = change / 200;
        change = change % 200;
        if(Coins2euro != 0)               /*Εάν θα επιστραφούν δίευρα τυπώνει την ποσότητα*/
           printf("\n dieura : %d\n", Coins2euro);           
        Coins1euro = change / 100;
        change = change % 100;
        if(Coins1euro != 0)              /*Εαν θα επιστραφούν μονόευρα τυπώνει την ποσότητα*/
           printf("\n monoeura : %d\n", Coins1euro);
        Coins50cents = change / 50;
        change = change % 50;
        if(Coins50cents != 0)            /*Εαν θα επιστραφούν 50λεπτα τυπώνει την ποσότητα*/
           printf("\n penintalepta : %d\n", Coins50cents);
        Coins20cents = change / 20;
        change = change % 20;
        if(Coins20cents != 0)           /*Εαν θα επιστραφούν 20λεπτα τυπώνει την ποσότητα*/
           printf("\n eikosalepta : %d\n", Coins20cents);
        Coins10cents = change / 10;
        change = change % 10;
        if(Coins10cents != 0)             /*Εαν θα επιστραφούν 10λεπτα τυπώνει την ποσότητα*/
           printf("\n dekalepta : %d\n", Coins10cents);
        Coins5cents = change / 5;
        change = change % 5;
        if(Coins5cents != 0)               /*Εαν θα επιστραφούν 5λεπτα τυπώνει την ποσότητα*/
           printf("\n pentalepta : %d\n", Coins5cents);
    }
    system("pause");
}
//Τέλος της συνάρτησης εισαγωγής ποσού και υπολογισμού για τα ρέστα//---------------------     
moxsen
babeTUX
babeTUX
 
Δημοσιεύσεις: 2
Εγγραφή: 04 Μαρ 2013, 01:14
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό simosx » 04 Μαρ 2013, 13:38

moxsen έγραψε:system("pause");


Δεν υπάρχει pause σε Linux. Ο κώδικας είναι για χρήση σε Ubuntu;
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό moxsen » 04 Μαρ 2013, 13:46

simosx έγραψε:
moxsen έγραψε:system("pause");


Δεν υπάρχει pause σε Linux. Ο κώδικας είναι για χρήση σε Ubuntu;


Ο κώδικας είναι για χρηση στην γλώσσα C, τώρα για το αν τρέχει σε ubuntu δεν έχω ιδέα
moxsen
babeTUX
babeTUX
 
Δημοσιεύσεις: 2
Εγγραφή: 04 Μαρ 2013, 01:14
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 04 Μαρ 2013, 15:01

moxsen έγραψε:
simosx έγραψε:
moxsen έγραψε:system("pause");


Δεν υπάρχει pause σε Linux. Ο κώδικας είναι για χρήση σε Ubuntu;


Ο κώδικας είναι για χρηση στην γλώσσα C, τώρα για το αν τρέχει σε ubuntu δεν έχω ιδέα

Η συγκεκριμένη εντολή αναγνωρίζεται μόνο στα Windows και όχι στα unix-οειδή λειτουργικά.

Αν θέλετε κάτι cross-platform: http://www.insomnia.gr/topic/476485-%CE ... p=52177858
Ή εναλλακτικά μπορείτε να βάλετε μια getchar() στο τέλος.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό vale2000 » 04 Μαρ 2013, 22:22

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

Re: Τα πάντα για την C

Δημοσίευσηαπό konnn » 04 Μαρ 2013, 22:39

vale2000 έγραψε:τιποτα ε?????


εξέτασες τις απαντήσεις και δεν σε βοήθησε κάποια;
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
Εκτύπωση

Βοήθεια

Δημοσίευσηαπό 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ης Γραπτής Εργασίας. Στο σχέδιο προγράμματος να συμπληρωθεί ο κώδικας που υλοποιεί τις τέσσερις ανωτέρω συναρτήσεις.
vale2000
babeTUX
babeTUX
 
Δημοσιεύσεις: 7
Εγγραφή: 02 Μαρ 2013, 13:37
Εκτύπωση

Βοήθεια

Δημοσίευσηαπό vale2000 » 13 Μάιος 2013, 20:52

Κώδικας: Επιλογή όλων
#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

Δημοσίευσηαπό vale2000 » 13 Μάιος 2013, 20:52

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


Κώδικας: Επιλογή όλων
#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
Εκτύπωση

ΠροηγούμενηΕπόμενο

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