Académique Documents
Professionnel Documents
Culture Documents
Question :
Compléter le tableau suivant en mettant une croix ( X ) dans la 2ème colonne (si l’instruction donnée dans la 1ère
colonne est valide) ou la 3ème colonne (si l’instruction donnée dans la 1ère colonne est invalide), tout en justifiant la
réponse si l’instruction est non valide
Ecrire(F1, T[5]) X
Le champ code est de type entier et non
Ecrire(F2, E.Code) X de type convenable(chaine)
Lire_ligne(F2, T[2].Lib) X
F1 est un fichier d’enregistrements et
Lire(F1,T[2].Lib) X non un fichier texte
1
EXERCICE N°2 : (4 PTS)
Debut
Nb ← 0
Nb ← Nb+1
Retourner Nb
Fin
Questions :
Nb entier
2. Quel est le résultat retourné par cette fonction pour l’appel suivant
Inconnue( "Eventuellement" , "E" )
5
3. Quand un module est dit récursif
Un module est dit récursif s’il comporte dans sa définition un appel de lui même
4. Ecrire une version récursive de cette fonction
2
EXERCICE N°3 : (12 PTS)
Une agence de voyage, dans le cadre de mieux gérer les frais(dépenses) liées au
transport de ses clients, décide de charger chaque conducteur d’autobus de noter les
informations liées à ses trajets effectués durant l’année dans un fichier texte nommé
"carnet_de_bord.txt" dont la structure est la suivante :
Travail Demandé :
Afin de valoriser et exploiter les informations contenues dans le fichier "carnet_de_bord.txt" on se propose d’écrire
un algorithme qui permet de :
1. Générer à partir de ce fichier un autre fichier binaire "trajets.dat" qui récapitule tous les trajets réalisés et
dont chaque trajet est caractérisé par :
Mois : mois dans lequel le trajet est réalisé
Nbpr : nombre de personnes transportés
Dist : distance parcourue (depuis la dernière valeur du compteur)
Cper : coût par personne (sachant que la consommation moyenne d’un autobus est de 30L au 100 km
et que le litre de carburant coûte 1.985 dt)
2. Déterminer et afficher le cumul (total) de personnes transportées et celui des distances parcourues pour
chaque mois
3. Déterminer et afficher le mois ayant le plus faible coût de transport par personne et celui ayant le coût le plus
élevé
Développez l’algorithme du programme principal ainsi que ses modules associés en précisant les structures des
données utilisées
3
Exemple d’exécution :
Le mois de Février est celui ayant le cout de transport le plus faible à savoir 3.480 dt/personne
Le mois de Avril est celui ayant le cout de transport le plus élevé à savoir 5.149 dt/personne
algorithme Ex3
début
chm1 <-- "carnet_de_bord.txt"
chm2 <--"trajets.dat"
générer(chm2,chm1)
afficher_statistiques(chm2)
fin
┌─────────────────────────────────────────────────┐
│ Nouveaux Types │
├─────────────────────────────────────────────────┤
│ trajet = enregistrement │
│ mois : chaîne │
│ nbpr : entier │
│ dist : entier │
│ cper : réel │
│ fin │
├─────────────────────────────────────────────────┤
│ Ftrajet = fichier de trajet │
└─────────────────────────────────────────────────┘
4
┌───────────────────────────────┬───────────────────┐
│ Objet │ Nature / Type │
├───────────────────────────────┼───────────────────┤
│ chm1,chm2 │ chaîne │
├───────────────────────────────┼───────────────────┤
│ générer,afficher_statistiques │ procédure │
└───────────────────────────────┴───────────────────┘
procédure générer(chm2:chaîne,chm1:chaîne)
début
ouvrir(chm1, f1 , "r")
ouvrir(chm2, f2, "wb")
lire_ligne(f1, ligne)
km <-- valeur(ligne)
tant que non fin_fichier(f1) faire
lire_ligne(f1, ligne)
E.mois <-- sous_chaîne(ligne, 0, pos(":", ligne) )
Ligne <-- effacer(ligne, 0, pos(":", ligne)+1)
tant que pos("-", ligne)≠ -1 faire
E.nbpr <-- valeur(sous_chaîne(ligne, 0, pos("#", ligne) ) )
E.dist <-- valeur(sous_chaîne(ligne, pos("#", ligne)+1 , pos("-", ligne) ) ) -km
E.cper <-- E.dist*((1.985*30)/100)/E.nbpr
Km <-- valeur(sous_chaîne(ligne, pos("#", ligne)+1 , pos("-", ligne) ) )
Ligne <-- effacer(ligne, 0, pos("-", ligne)+1 )
écrire(f2,E)
fin tant que
E.nbpr <-- valeur(sous_chaîne(ligne, 0, pos("#", ligne) ) )
E.dist <-- valeur(sous_chaîne(ligne, pos("#", ligne)+1 , pos("-", ligne) ) ) -km
E.cper <-- E.dist*((1.985*30)/100)/E.nbpr
Km <-- valeur(sous_chaîne(ligne, pos("#", ligne)+1 , pos("-", ligne) ) )
écrire(f2,E)
fin tant que
fermer(f1) , fermer(f2)
fin
┌─────────────────────────────┬───────────────────┐
│ Objet │ Nature / Type │
├─────────────────────────────┼───────────────────┤
│ f1 │ fichier texte │
├─────────────────────────────┼───────────────────┤
│ f2 │ Ftrajet │
├─────────────────────────────┼───────────────────┤
│ km │ entier │
├─────────────────────────────┼───────────────────┤
│ ligne │ chaîne │
├─────────────────────────────┼───────────────────┤
│ E │ trajet │
└─────────────────────────────┴───────────────────┘
5
procédure afficher_statistiques(chm2:chaîne)
début
ouvrir(chm2, f2, "rb")
lire(f2,E)
mois_courant <-- E.mois
sper <-- 0
skm <-- 0
mincper <-- 100
maxcper <-- 0
tant que non fin_fichier(f2) faire
tant que E.mois=mois_courant faire
sper <-- sper+E.nbpr
skm <-- skm+E.dist
lire(f2,E)
fin tant que
conso <-- skm*((1.985*30)/100)/sper
si conso > maxcper alors
maxcper <-- conso
maxmois <-- mois_courant
finsi