#include #include #define LONGUEUR_MARQUE 20 #define LONGUEUR_MODELE 30 #define LONGUEUR_NOM 20 typedef enum {Auto, Moto, Velo} type_vehicule ; typedef struct { char marque[LONGUEUR_MARQUE]; char modele[LONGUEUR_MODELE]; short puissance_fiscale; short nombre_de_portes; } automobile; typedef struct { char marque[LONGUEUR_MARQUE]; char modele[LONGUEUR_MODELE]; float poids_en_kg; int cylindree_en_cc; float puissance_en_cv; } motocyclette; typedef struct { char marque[LONGUEUR_MARQUE]; char modele[LONGUEUR_MODELE]; float poids_en_kg; int diametre_roue_en_mm; } velocipede; typedef struct { char nom_proprietaire[LONGUEUR_NOM] ; type_vehicule sorte_vehicule; union { automobile voiture; motocyclette moto; velocipede velo; } information_vehicule ; } vehicule ; void decrire_automobile(automobile a) { printf("Modele : %s Marque : %s, %dCV, %d Portes", a.modele, a.marque, a.puissance_fiscale, a.nombre_de_portes) ; } void decrire_motocyclette(motocyclette m) { printf("Modele : %s Marque : %s, %fkg %dcc %fcv", m.modele, m.marque, m.poids_en_kg, m.cylindree_en_cc, m.puissance_en_cv) ; } void decrire_velocipede(velocipede v) { printf("Modele : %s Marque : %s, %fkg %dmm", v.modele, v.marque, v.poids_en_kg, v.diametre_roue_en_mm) ; } void decrire_vehicule(vehicule v) { printf("\nProprietaire : %s\nType de vehicule : ", v.nom_proprietaire); switch (v.sorte_vehicule) { case Auto: printf("Automobile\n"); decrire_automobile(v.information_vehicule.voiture); break; case Moto: printf("Motocyclette\n"); decrire_motocyclette(v.information_vehicule.moto); break; case Velo: printf("Velocipede\n"); decrire_velocipede(v.information_vehicule.velo); } } int main() { velocipede mon_velo = {"Gauloise","vite++", 12.3,700} ; vehicule un_vehicule = {"martin",Auto,{{"Peunault","X24",12,4}}} ; decrire_vehicule (un_vehicule); strcpy (un_vehicule.nom_proprietaire, "Martin"); strcpy (un_vehicule.information_vehicule.velo.marque, "veloplus"); strcpy (un_vehicule.information_vehicule.velo.modele, "rando++"); un_vehicule.information_vehicule.velo.poids_en_kg = 14.2; un_vehicule.information_vehicule.velo.diametre_roue_en_mm = 700; un_vehicule.sorte_vehicule = Velo; decrire_vehicule (un_vehicule); un_vehicule.sorte_vehicule = Auto; decrire_vehicule (un_vehicule); un_vehicule.information_vehicule.velo = mon_velo; un_vehicule.sorte_vehicule = Velo; decrire_vehicule (un_vehicule); return EXIT_SUCCESS; }