Vous êtes sur la page 1sur 6

LYCEE DE TATAOUINE Classe : 4èmeSI

CORRECTION Dc1 (théorique) Epreuve: Algorithmique


Date : 08 novembre 2023
Prof. :Adel GAJA
Durée: 1 Heure 30 mn

EXERCICE N°1 : (4 PTS)

Soient les tableaux de déclaration des types et des objets suivants :

Type Objet Nat/Type


Article = Enregistrement T Tab
Code : entier E Article
Lib : chaîne F1 Fiche
Qte : réel F2 Fichier texte
Fin Test Booléen
Fiche= fichier de Article
Tab = tableau de 10 Article

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

Instruction Valide Non valide Justification (si 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

Test  T[1].Qte > T[2].Qte X


Test  Fin_fichier(F1) X

1
EXERCICE N°2 : (4 PTS)

Soit l’algortithme de la fonction suivante

Fonction inconnue (ch :chaine,c :caractère) :entier

Debut

Nb ← 0

Tant que pos( majus( c ), majus( ch ) ) ≠ -1 Faire

Nb ← Nb+1

ch ← sous_chaine(ch , pos( c , ch )+1 , long( ch ))

Fin Tant que

Retourner Nb

Fin

Questions :

1. Remplir le tableau de déclaration des objets locaux ci-dessous


objet Type

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

fonction inconnue(ch:chaîne,c:caractère) : entier


début
si ch="" alors
retourner 0
sinon si majus(ch[0])==majus(c) alors
retourner 1+inconnue(sous_chaîne(ch, 1, long(ch) ) ,c)
sinon
retourner inconnue(sous_chaîne(ch, 1, long(ch) ) ,c)
fin_si
fin

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 :

 La 1ère ligne contient le kilométrage initial (à chaque début d’année) de l’autobus


 Les lignes suivantes (une ligne pour chaque mois) contiennent les informations sur les trajets comme le mois
concerné puis le symbole : puis pour chaque trajet le nombre de passagers transportés et la valeur du
compteur à la fin du trajet séparés par le symbole #
il faut noter également que les informations de deux trajets seront séparées par le symbole -
Exemple :

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 :

Janvier : nombre de personnes tranportés=182 nombres de Km parcourus=1210

Février : nombre de personnes tranportés=77 nombres de Km parcourus=450

Mars : nombre de personnes tranportés=112 nombres de Km parcourus=740

Avril : nombre de personnes tranportés=116 nombres de Km parcourus=1003

Mai : nombre de personnes tranportés=184 nombres de Km parcourus=1139

Juin : nombre de personnes tranportés=235 nombres de Km parcourus=2023

Juillet : nombre de personnes tranportés=462 nombres de Km parcourus=3757

Aout : nombre de personnes tranportés=464 nombres de Km parcourus=3540

Septembre : nombre de personnes tranportés=146 nombres de Km parcourus=998

Octobre: nombre de personnes tranportés=124 nombres de Km parcourus=864

Novembre : nombre de personnes tranportés=112 nombres de Km parcourus=732

Décembre : nombre de personnes tranportés=294 nombres de Km parcourus=2112

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

si conso < mincper alors


mincper <-- conso
minmois <-- mois_courant
finsi

écrire(mois_courant," Nb de personnes transportés=",sper," Nb de Km parcourus=",skm)


mois_courant <-- E.mois
sper <-- 0
skm <-- 0
fin tant que
écrire("Le mois ",minmois,"est le plus faible à savoir ",mincper,"dt/persone")
écrire("Le mois ",maxmois," est le plus élevé à savoir ",maxcper,"dt/persone")
fermer(f2)
fin
┌─────────────────────────────┬───────────────────┐
│ Objet │ Nature / Type │
├─────────────────────────────┼───────────────────┤
│ f2 │ Ftrajet │
├─────────────────────────────┼───────────────────┤
│ E │ trajet │
├─────────────────────────────┼───────────────────┤
│ mois_courant,minmois,maxmois│ chaîne │
├─────────────────────────────┼───────────────────┤
│ sper,skm │ entier │
├─────────────────────────────┼───────────────────┤
│ maxcper,mincper │ réel │
└─────────────────────────────┴───────────────────┘

Vous aimerez peut-être aussi