Bien le bonjour/bonsoir;
J'ai récemment été confronté à un exercice dont l'énoncé est :

On s’intéresse à la gestion des véhicules d’un parc auto. Chaque véhicule est caractérisé par un matricule, une marque, un modèle, une couleur, le nombre de places, une puissance fiscale et l’état du véhicule.

1) Donner l’enregistrement permettant de décrire un véhicule ;

2) Décomposer le matricule en ses composants élémentaires puis donner la nouvelle structure de l’enregistrement ;

3) Ecrire un algorithme qui permet de :

a) stocker les informations du parc auto dans un fichier (FPARC.DAT) ;

b) établir la liste (matricule, marque, modèle, puissance) des véhicules d’une couleur donnée ;

c) établir un tableau statistique contenant le nombre de véhicules immatriculés par wilaya (par région) ;

d) établir l’âge moyen du parc auto des voitures non immobilisées.

Mon programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <fstream>
typedef struct Vehicule1 Vehicule1;
struct Vehicule1 // uniquement pour répondre à la question 1
{
char couleur[10],matricule[12],marque[10],modele[10];
int puissance,nbplaces;
char etat[10];
};
typedef struct matricule matricule; // question 2 première partie
struct matricule 
{char nb[7];
int annee ;
int wilaya;
};
typedef struct Vehicule Vehicule; // réponse à la question 2
struct Vehicule
{
char couleur[10],marque[10],modele[10];
matricule m;
int puissance,nbplaces;
char etat[10];
};
main ()
{
FILE *f=fopen("FPARC.dat","w");
int N;char couleur[10];
lecture:
printf ("donnez le nombre de vehicules \n");
while (1)
{
scanf ("%d",&N);
if (N > 0 && N < 21 ) break;
else printf ("ERREUR veuillez retaper le nombre");
}
Vehicule t[20],tmp;
int i;
for (i=0;i<N;i++)
{
printf ("donnez le premier champs du matricule du vehicule\n");
scanf ("%s",&tmp.m.nb);
fflush(stdin); //permet de libérer l'espace tampon pour ne pas avoir de bugs de lecture
printf ("donnez l'annee du vehicule \n");
scanf ("%d",&tmp.m.annee);
fflush(stdin);
printf ("donnez la wilaya du vehicule \n");
scanf ("%d",&tmp.m.wilaya);
fflush(stdin);
printf ("donnez le modele du vehicule\n");
scanf ("%s",&tmp.modele);
fflush(stdin);
printf ("donnez la marque du vehicule\n");
scanf ("%s",&tmp.marque);
fflush(stdin);
printf ("donnez la couleur du vehicule\n");
scanf ("%s",&tmp.couleur);
fflush(stdin);
printf ("donnez la puissance du vehicule\n");
scanf ("%d",&tmp.puissance);
fflush(stdin);
printf ("donnez le nombre de places dans le vehicule \n");
scanf ("%d",&tmp.nbplaces);
fflush(stdin);
printf ("decrivez l'état du vehicule \n");
fflush(stdin);
scanf ("%s",&tmp.etat);
fwrite(&tmp, sizeof (Vehicule), 1, f); // 3eme question
}
fclose (f);
f=fopen("FPARC.dat","r");if (f == NULL) printf ("fichier non cree");
system ("pause");
printf ("donnez la couleur voulue \n");
scanf ("%s",&couleur);
fflush (stdin);
while (1)
{
if (feof (f)) break;
fread(&tmp, sizeof (Vehicule), 1, f);
if (strcmp(tmp.couleur,couleur) == 0)
{
printf ("Vehicule %d : %s%d%d \n %s \n  %s \n %d \n",tmp.m.nb,tmp.m.annee,tmp.m.wilaya,tmp.marque,tmp.modele,tmp.puissance);
}
}
fclose (f);
f=fopen("FPARC.dat","r");
int tabstat[49];
for (i=0;i<N;i++) tabstat[i]=0;
while (!feof (f))
{
fread(&tmp, sizeof (Vehicule), 1, f);
tabstat[tmp.m.wilaya]++;
}
fclose (f);
system("pause");
for (i=1;i<=48;i++) // 4eme question
{
printf ("wilaya %d : %d \n",i,tabstat[i]);
}
f=fopen("FPARC.dat","r");
int somme=0;
for (i=0;i<N;i++)
{
fread(&tmp, sizeof (Vehicule), 1, f);
somme+=tmp.m.annee;
}
fclose (f);
printf ("age moyen du parc auto est : \n %d \n",2016-somme/N); // dernière question
system("pause");
return 0;
}

Le problème : C'est que mon algorithme bug dès qu'on arrive à la recherche par couleur.
J'aimerais bien avoir votre avis là-dessus, et quelques conseils pour régler ce problème tout en respectant les conditions imposées :-)

Merci.