Algorithmique
Algorithmique
ALGORITHMIQUE ExerciceS
Sommaire
PARTIE 1 Enonce des Exercices .............................................................................................. 2
Corrigés des Exercices ............................................................................................................ 3
PARTIE 2 Enonce des Exercices ............................................................................................... 6
Corrigés des Exercices ............................................................................................................ 6
PARTIE 3 Enonce des Exercices ............................................................................................... 7
Corrigés des Exercices ............................................................................................................ 8
PARTIE 4 Enonce des Exercices ............................................................................................. 10
Corrigés des Exercices .......................................................................................................... 12
PARTIE 5 Enonce des Exercices ............................................................................................. 18
Corrigés des Exercices .......................................................................................................... 20
PARTIE 6 Enonce des Exercices ............................................................................................. 24
Corrigés des Exercices .......................................................................................................... 27
PARTIE 7 Enonce des Exercices ............................................................................................. 31
Corrigés des Exercices .......................................................................................................... 32
PARTIE 8 Enonce des Exercices ............................................................................................. 35
Corrigés des Exercices .......................................................................................................... 37
PARTIE 9 Enoncé des Exercices ............................................................................................. 41
Corrigés des Exercices .......................................................................................................... 44
PARTIE 10 Enoncé des Exercices ........................................................................................... 48
Corrigés des Exercices .......................................................................................................... 50
PARTIE 11 Enoncé des Exercices ........................................................................................... 55
Corrigés des Exercices .......................................................................................................... 56
www.tri.on.ma
2
Quelles seront les valeurs des variables A et B après exécut ion des inst ruct ions suivant es ?
Variables A, B en Entier
Début
A ← 1
B ← A + 3
A ← 3
Fin
Exercice 1.2
Quelles seront les valeurs des variables A, B et C après exécut ion des inst ruct ions suivant es ?
Variables A, B, C en Entier
Début
A ← 5
B ← 3
C ← A + B
A ← 2
C ← B – A
Fin
Exercice 1.3
Quelles seront les valeurs des variables A et B après exécut ion des inst ruct ions suivant es ?
Variables A, B en Entier
Début
A ← 5
B ← A + 4
A ← A + 1
B ← A – 4
Fin
Exercice 1.4
Quelles seront les valeurs des variables A, B et C après exécut ion des inst ruct ions suivant es ?
Variables A, B, C en Entier
Début
A ← 3
B ← 10
C ← A + B
B ← A + B
A ← C
Fin
Exercice 1.5
Quelles seront les valeurs des variables A et B après exécut ion des inst ruct ions suivant es ?
www.tri.on.ma
3
Variables A, B en Entier
Début
A ← 5
B ← 2
A ← B
B ← A
Fin
Moralit é : les deux dernières inst ruct ions permet t ent -elles d’ échanger les deux valeurs de B et A ? Si
l’ on inverse les deux dernières inst ruct ions, cela change-t -il quelque chose ?
Exercice 1.6
Plus difficile, mais c’ est un classique absolu, qu’ il faut absolument maît riser : écrire un algorit hme
permet t ant d’ échanger les valeurs de deux variables A et B, et ce quel que soit leur cont enu
préalable.
Exercice 1.7
Exercice 1.8
Exercice 1.9
www.tri.on.ma
4
Exercice 1.1
Après La valeur des variables est :
A ← 1 A = 1 B = ?
B ← A + 3 A = 1 B = 4
A ← 3 A = 3 B = 4
Exercice 1.2
Après La valeur des variables est :
A ← 5 A = 5 B = ? C = ?
B ← 3 A = 5 B = 3 C = ?
C ← A + B A = 5 B = 3 C = 8
A ← 2 A = 2 B = 3 C = 8
C ← B – A A = 2 B = 3 C = 1
Exercice 1.3
Après La valeur des variables est :
A ← 5 A = 5 B = ?
B ← A + 4 A = 5 B = 9
A ← A + 1 A = 6 B = 9
B ← A – 4 A = 6 B = 2
Exercice 1.4
Après La valeur des variables est :
A ← 3 A = 3 B = ? C = ?
B ← 10 A = 3 B = 10 C = ?
C ← A + B A = 3 B = 10 C = 13
B ← A + B A = 3 B = 13 C = 13
A ← C A = 13 B = 13 C = 13
Exercice 1.5
Après La valeur des variables est :
A ← 5 A = 5 B = ?
B ← 2 A = 5 B = 2
A ← B A = 2 B = 2
B ← A A = 2 B = 2
Les deux dernières inst ruct ions ne permet t ent donc pas d’ échanger les deux valeurs de B et A,
puisque l’ une des deux valeurs (celle de A) est ici écrasée.
Si l’ on inverse les deux dernières inst ruct ions, cela ne changera rien du t out , hormis le fait que
cet t e fois c’ est la valeur de B qui sera écrasée.
Exercice 1.6
Début
…
C ← A
A ← B
B ← C
Fin
On est obligé de passer par une variable dit e t emporaire (la variable C).
Exercice 1.7
Début
…
D ← C
C ← B
www.tri.on.ma
5
B ← A
A ← D
Fin
En fait , quel que soit le nombre de variables, une seule variable t emporaire suffit …
Exercice 1.8
Il ne peut produire qu’ une erreur d’ exécut ion, puisqu’ on ne peut pas addit ionner des caract ères.
Exercice 1.9
…En revanche, on peut les concat éner. A la fin de l’ algorit hme, C vaudra donc "42312".
www.tri.on.ma
6
PARTIE 2
Enonce des Exercices
Exercice 2.1
Exercice 2.2
Ecrire un programme qui demande un nombre à l’ ut ilisat eur, puis qui calcule et affiche le carré de
ce nombre.
Exercice 2.3
Ecrire un programme qui lit le prix HT d’ un art icle, le nombre d’ art icles et le t aux de TVA, et qui
fournit le prix t ot al TTC correspondant . Faire en sort e que des libellés apparaissent clairement .
-
Exercice 2.4
Ecrire un algorit hme ut ilisant des variables de t ype chaîne de caract ères, et affichant quat re
variant es possibles de la célèbre « belle marquise, vos beaux yeux me font mourir d’ amour ». On ne
se soucie pas de la ponct uat ion, ni des maj uscules.
www.tri.on.ma
7
Exercice 2.2
Variables nb, carr en Entier
Début
Ecrire "Entrez un nombre :"
Lire nb
carr ← nb * nb
Ecrire "Son carré est : ", carr
Fin
En fait , on pourrait t out aussi bien économiser la variable carr en remplaçant les deux avant -
dernières lignes par :
Ecrire "Son carré est : ", nb*nb
C'est une quest ion de st yle ; dans un cas, on privilégie la lisibilit é de l'algorit hme, dans l'aut re, on
privilégie l'économie d'une variable.
Exercice 2.3
Variables nb, pht, ttva, pttc en Numérique
Début
Ecrire "Entrez le prix hors taxes :"
Lire pht
Ecrire "Entrez le nombre d’articles :"
Lire nb
Ecrire "Entrez le taux de TVA :"
Lire ttva
pttc ← nb * pht * (1 + ttva)
Ecrire "Le prix toutes taxes est : ", pttc
Fin
Là aussi, on pourrait squeezer une variable et une ligne en écrivant direct ement . :
Ecrire "Le prix toutes taxes est : ", nb * pht * (1 + ttva)
C'est plus rapide, plus léger en mémoire, mais un peu plus difficile à relire (et à écrire !)
Exercice 2.4
Variables t1, t2, t3, t4 en Caractère
Début
t1 ← "belle Marquise"
t2 ← "vos beaux yeux"
t3 ← "me font mourir"
t4 ← "d’amour"
Ecrire t1 & " " & t2 & " " & t3 & " " & t4
Ecrire t3 & " " & t2 & " " & t4 & " " & t1
Ecrire t2 & " " & t3 & " " & t1 & " " & t4
Ecrire t4 & " " & t1 & " " & t2 & " " & t3
Fin
PARTIE 3
Enonce des Exercices
Exercice 3.1
Ecrire un algorit hme qui demande un nombre à l’ ut ilisat eur, et l’ informe ensuit e si ce nombre est
posit if ou négat if (on laisse de côt é le cas où le nombre vaut zéro).
www.tri.on.ma
8
Exercice 3.2
Ecrire un algorit hme qui demande deux nombres à l’ ut ilisat eur et l’ informe ensuit e si leur produit
est négat if ou posit if (on laisse de côt é le cas où le produit est nul). At t ent ion t out efois : on ne doit
pas calculer le produit des deux nombres.
Exercice 3.3
Ecrire un algorit hme qui demande t rois noms à l’ ut ilisat eur et l’ informe ensuit e s’ ils sont rangés ou
non dans l’ ordre alphabét ique.
Exercice 3.4
Ecrire un algorit hme qui demande un nombre à l’ ut ilisat eur, et l’ informe ensuit e si ce nombre est
posit if ou négat if (on inclut cet t e fois le t rait ement du cas où le nombre vaut zéro).
Exercice 3.5
Ecrire un algorit hme qui demande deux nombres à l’ ut ilisat eur et l’ informe ensuit e si le produit est
négat if ou posit if (on inclut cet t e fois le t rait ement du cas où le produit peut êt re nul). At t ent ion
t out efois, on ne doit pas calculer le produit !
Exercice 3.6
Ecrire un algorit hme qui demande l’ âge d’ un enfant à l’ ut ilisat eur. Ensuit e, il l’ informe de sa
cat égorie :
• "Poussin" de 6 à 7 ans
• "Pupille" de 8 à 9 ans
• "Minime" de 10 à 11 ans
• "Cadet " après 12 ans
www.tri.on.ma
9
Sinon
Ecrire "Ce nombre est négatif"
Finsi
Fin
Exercice 3.2
Variables m, n en Entier
Début
Ecrire "Entrez deux nombres : "
Lire m, n
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors
Ecrire "Leur produit est positif"
Sinon
Ecrire "Leur produit est négatif"
Finsi
Fin
Exercice 3.3
Variables a, b, c en Caractère
Début
Ecrire "Entrez successivement trois noms : "
Lire a, b, c
Si a < b ET b < c Alors
Ecrire "Ces noms sont classés alphabétiquement"
Sinon
Ecrire "Ces noms ne sont pas classés"
Finsi
Fin
Exercice 3.4
Variable n en Entier
Début
Ecrire "Entrez un nombre : "
Lire n
Si n < 0 Alors
Ecrire "Ce nombre est négatif"
SinonSi n = 0 Alors
Ecrire "Ce nombre est nul"
Sinon
Ecrire "Ce nombre est positif"
Finsi
Fin
Exercice 3.5
Variables m, n en Entier
Début
Ecrire "Entrez deux nombres : "
Lire m, n
Si m = 0 OU n = 0 Alors
Ecrire "Le produit est nul"
SinonSi (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
Ecrire "Le produit est positif"
Sinon
Ecrire "Le produit est négatif"
www.tri.on.ma
10
Finsi
Fin
Si on souhait e simplifier l’ écrit ure de la condit ion lourde du SinonSi, on peut t ouj ours passer par des
variables booléennes int ermédiaires. Une ast uce de sioux consist e également à employer un Xor
(c'est l'un des rares cas dans lesquels il est pert inent )
Exercice 3.6
Variable age en Entier
Début
Ecrire "Entrez l’âge de l’enfant : "
Lire age
Si age >= 12 Alors
Ecrire "Catégorie Cadet"
SinonSi age >= 10 Alors
Ecrire "Catégorie Minime"
SinonSi age >= 8 Alors
Ecrire "Catégorie Pupille"
SinonSi age >= 6 Alors
Ecrire "Catégorie Poussin"
Finsi
Fin
On peut évidemment écrire cet algorit hme de différent es façons, ne serait -ce qu’ en commençant
par la cat égorie la plus j eune.
PARTIE 4
Enonce des Exercices
Exercice 4.1
www.tri.on.ma
11
Exercice 4.2
Cet algorit hme est dest iné à prédire l'avenir, et il doit êt re infaillible !
Il lira au clavier l’ heure et les minut es, et il aff ichera l’ heure qu’ il sera une minut e plus t ard. Par
exemple, si l'ut ilisat eur t ape 21 puis 32, l'algorit hme doit répondre :
"Dans une minut e, il sera 21 heure(s) 33".
NB : on suppose que l'ut ilisat eur ent re une heure valide. Pas besoin donc de la vérifier.
Exercice 4.3
De même que le précédent , cet algorit hme doit demander une heure et en afficher une aut re. Mais
cet t e fois, il doit gérer également les secondes, et afficher l'heure qu'il sera une seconde plus t ard.
Par exemple, si l'ut ilisat eur t ape 21, puis 32, puis 8, l'algorit hme doit répondre : "Dans une seconde,
il sera 21 heure(s), 32 minut e(s) et 9 seconde(s)".
NB : là encore, on suppose que l'ut ilisat eur ent re une dat e valide.
Exercice 4.4
Un magasin de reprographie fact ure 0,10 E les dix premières phot ocopies, 0,09 E les vingt suivant es
et 0,08 E au-delà. Ecrivez un algorit hme qui demande à l’ ut ilisat eur le nombre de phot ocopies
effect uées et qui affiche la fact ure correspondant e.
Exercice 4.5
Les habit ant s de Zorglub paient l’ impôt selon les règles suivant es :
Le programme demandera donc l’ âge et le sexe du Zorglubien, et se prononcera donc ensuit e sur le
fait que l’ habit ant est imposable.
Exercice 4.6
Les élect ions législat ives, en Guignolerie Sept ent rionale, obéissent à la règle suivant e :
• lorsque l'un des candidat s obt ient plus de 50%des suffrages, il est élu dès le premier t our.
• en cas de deuxième t our, peuvent part iciper uniquement les candidat s ayant obt enu au
moins 12,5%des voix au premier t our.
www.tri.on.ma
12
Vous devez écrire un algorit hme qui permet t e la saisie des scores de quat re candidat s au premier
t our. Cet algorit hme t rait era ensuit e le candidat numéro 1 (et uniquement lui) : il dira s'il est élu,
bat t u, s'il se t rouve en ballot t age favorable (il part icipe au second t our en ét ant arrivé en t êt e à
l'issue du premier t our) ou défavorable (il part icipe au second t our sans avoir ét é en t êt e au premier
t our).
Exercice 4.7
Une compagnie d'assurance aut omobile propose à ses client s quat re familles de t arifs ident ifiables
par une couleur, du moins au plus onéreux : t arifs bleu, vert , orange et rouge. Le t arif dépend de la
sit uat ion du conduct eur :
• un conduct eur de moins de 25 ans et t it ulaire du permis depuis moins de deux ans, se voit
at t ribuer le t arif rouge, si t out efois il n'a j amais ét é responsable d'accident . Sinon, la
compagnie refuse de l'assurer.
• un conduct eur de moins de 25 ans et t it ulaire du permis depuis plus de deux ans, ou de plus
de 25 ans mais t it ulaire du permis depuis moins de deux ans a le droit au t arif orange s'il n'a
j amais provoqué d'accident , au t arif rouge pour un accident , sinon il est refusé.
• un conduct eur de plus de 25 ans t it ulaire du permis depuis plus de deux ans bénéficie du
t arif vert s'il n'est à l'origine d'aucun accident et du t arif orange pour un accident , du t arif
rouge pour deux accident s, et refusé au-delà
• De plus, pour encourager la fidélit é des client s accept és, la compagnie propose un cont rat
de la couleur immédiat ement la plus avant ageuse s'il est ent ré dans la maison depuis plus
d'un an.
Ecrire l'algorit hme permet t ant de saisir les données nécessaires (sans cont rôle de saisie) et de
t rait er ce problème. Avant de se lancer à corps perdu dans cet exercice, on pourra réfléchir un peu
et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire une analyse !)
Exercice 4.8
Ecrivez un algorit hme qui a près avoir demandé un numéro de j our, de mois et d'année à
l'ut ilisat eur, renvoie s'il s'agit ou non d'une dat e valide.
Cet exercice est cert es d’ un manque d’ originalit é affligeant , mais après t out , en algorit hmique
comme ailleurs, il faut connaît re ses classiques ! Et quand on a fait cela une fois dans sa vie, on
apprécie pleinement l’ exist ence d’ un t ype numérique « dat e » dans cert ains langages…).
Il n'est sans dout e pas inut ile de rappeler rapidement que le mois de février compt e 28 j ours, sauf si
l’ année est bissext ile, auquel cas il en compt e 29. L’ année est bissext ile si elle est divisible par
quat re. Tout efois, les années divisibles par 100 ne sont pas bissext iles, mais les années divisibles
par 400 le sont . Ouf !
Un dernier pet it dét ail : vous ne savez pas, pour l’ inst ant , exprimer correct ement en pseudo-code
l’ idée qu’ un nombre A est divisible par un nombre B. Aussi, vous vous cont ent erez d’ écrire en bons
t élégraphist es que A divisible par B se dit « A dp B ».
www.tri.on.ma
13
Exercice 4.2
Variables h, m en Numérique
Début
Ecrire "Entrez les heures, puis les minutes : "
Lire h, m
m ← m + 1
Si m = 60 Alors
m ← 0
h ← h + 1
FinSi
Si h = 24 Alors
h ← 0
FinSi
Ecrire "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)"
Fin
Exercice 4.3
Variables h, m, s en Numérique
Début
Ecrire "Entrez les heures, puis les minutes, puis les secondes : "
Lire h, m, s
s ← s + 1
Si s = 60 Alors
s ← 0
m ← m + 1
FinSi
Si m = 60 Alors
m ← 0
h ← h + 1
FinSi
Si h = 24 Alors
h ← 0
FinSi
Ecrire "Dans une seconde il sera ", h, "h", m, "m et ", s, "s"
Fin
Exercice 4.4
Variables n, p en Numérique
Début
Ecrire "Nombre de photocopies : "
Lire n
Si n <= 10 Alors
p ← n * 0,1
SinonSi n <= 30 Alors
p ← 10 * 0,1 + (n – 10) * 0,09
Sinon
p ← 10 * 0,1 + 20 * 0,09 + (n – 30) * 0,08
FinSi
Ecrire "Le prix total est: ", p
Fin
www.tri.on.ma
14
Exercice 4.5
Variable sex en Caractère
Variable age en Numérique
Variables C1, C2 en Booléen
Début
Ecrire "Entrez le sexe (M/F) : "
Lire sex
Ecrire "Entrez l’âge: "
Lire age
C1 ← sex = "M" ET age > 20
C2 ← sex = "F" ET (age > 18 ET age < 35)
Si C1 ou C2 Alors
Ecrire "Imposable"
Sinon
Ecrire "Non Imposable"
FinSi
Fin
Exercice 4.6
Cet exercice, du pur point de vue algorit hmique, n'est pas t rès méchant . En revanche, il représent e
dignement la cat égorie des énoncés piégés.
En effet , rien de plus facile que d'écrire : si le candidat a plus de 50%, il est élu, sinon s'il a plus de
12,5 %, il est au deuxième t our, sinon il est éliminé. Hé hé hé... mais il ne faut pas oublier que le
candidat peut t rès bien avoir eu 20 %mais êt re t out de même éliminé, t out simplement parce que
l'un des aut res a fait plus de 50 %et donc qu'il n'y a pas de deuxième t our !...
Moralit é : ne j amais se j et er sur la programmat ion avant d'avoir soigneusement mené l'analyse du
problème à t rait er.
Variables A, B, C, D en Numérique
Début
Ecrire "Entrez les scores des quatre prétendants :"
Lire A, B, C, D
C1 ← A > 50
C2 ← B > 50 ou C > 50 ou D > 50
C3 ← A >= B et A >= C et A >= D
C4 ← A >= 12,5
Si C1 Alors
Ecrire “Elu au premier tour"
Sinonsi C2 ou Non(C4) Alors
Ecrire “Battu, éliminé, sorti !!!”
SinonSi C3 Alors
Ecrire "Ballotage favorable"
Sinon
Ecrire "Ballotage défavorable"
FinSi
Fin
Exercice 4.7
Là encore, on illust re l'ut ilit é d'une bonne analyse. Je propose deux corrigés différent s. Le premier
suit l'énoncé pas à pas. C'est j ust e, mais c'est vraiment lourd. La deuxième version s'appuie sur une
vraie compréhension d'une sit uat ion pas si embrouillée qu'elle n'en a l'air.
Dans les deux cas, un recours aux variables booléennes aère sérieusement l'écrit ure.
Donc, premier corrigé, on suit le t ext e de l'énoncé pas à pas :
www.tri.on.ma
15
www.tri.on.ma
16
P ← 0
Si Non(C1) Alors
P ← P + 1
FinSi
Si Non(C2) Alors
P ← P + 1
FinSi
P ← P + acc
Si P < 3 et C3 Alors
P ← P - 1
FinSi
Si P = -1 Alors
situ ← "Bleu"
SinonSi P = 0 Alors
situ ← "Vert"
SinonSi P = 1 Alors
situ ← "Orange"
SinonSi P = 2 Alors
situ ← "Rouge"
Sinon
situ ← "Refusé"
FinSi
Ecrire "Votre situation : ", situ
Fin
Cool, non ?
Exercice 4.8
En ce qui concerne le début de cet algorit hme, il n’ y a aucune difficult é. C’ est de la saisie bêt e et
même pas méchant e:
Variables J, M, A, JMax en Numérique
Variables VJ, VM, B en Booleen
Début
Ecrire "Entrez le numéro du jour"
Lire J
Ecrire "Entrez le numéro du mois"
Lire M
Ecrire "Entrez l'année"
Lire A
C'est évidemment ensuit e que les ennuis commencent … La première manière d'aborder la chose
consist e à se dire que fondament alement , la st ruct ure logique de ce problème est t rès simple. Si
nous créons deux variables booléennes VJ et VM, représent ant respect ivement la validit é du j our et
du mois ent rés, la fin de l'algorit hme sera d'une simplicit é biblique (l’ année est valide par
définit ion, si on évacue le débat byzant in concernant l’ exist ence de l’ année zéro) :
Si VJ et VM alors
Ecrire "La date est valide"
Sinon
Ecrire "La date n'est pas valide"
FinSi
Tout e la difficult é consist e à affect er correct ement les variables VJ et VM, selon les valeurs des
variables J, M et A. Dans l'absolu, VJ et VM pourraient êt re les obj et s d'une affect at ion
monst rueuse, avec des condit ions at rocement composées. Mais franchement , écrire ces condit ions
en une seule fois est un t ravail de bénédict in sans grand int érêt . Pour évit er d'en arriver à une t elle
ext rémit é, on peut sérier la difficult é en créant deux variables supplément aires :
www.tri.on.ma
17
B : variable booléenne qui indique s'il s'agit d'une année bissext ile
JMax : variable numérique qui indiquera le dernier j our valable pour le mois ent ré.
Une approche différent e consist erait à limit er les condit ions composées, quit t e à le payer par une
st ruct ure beaucoup plus exigeant e de t est s imbriqués. Là encore, on évit e de j ouer les ext rémist es
et l'on s'aut orise quelques condit ions composées lorsque cela nous simplifie l'exist ence. On pourrait
aussi dire que la solut ion précédent e "part de la fin" du problème (la dat e est elle valide ou non ?),
alors que celle qui suit "part du début " (quelles sont les données ent rées au clavier ?) :
Si M < 1 ou M > 12 Alors
Ecrire "Date Invalide"
SinonSi M = 2 Alors
Si A dp 400 Alors
Si J < 1 ou J > 29 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 100 Alors
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
SinonSi A dp 4 Alors
Si J < 1 ou J > 28 Alors
Ecrire "Date Invalide"
Sinon
Ecrire "Date Valide"
FinSi
Sinon
Si J < 1 ou J > 28 Alors
www.tri.on.ma
18
Il convient enfin de cit er une solut ion t rès simple et élégant e, un peu plus difficile peut -êt re à
imaginer du premier coup, mais qui avec le recul apparaît comme t rès immédiat e. Sur le fond, cela
consist e à dire qu'il y a quat re cas pour qu'une dat e soit valide : celui d'un j our compris ent re 1 et
31 dans un mois à 31 j ours, celui d'un j our compris ent re 1 et 30 dans un mois à 30 j ours, celui d'un
j our compris ent re 1 et 29 en février d'une année bissext ile, et celui d'un j our de février compris
ent re 1 et 28. Ainsi :
B ← (A dp 4 et Non(A dp 100)) ou A dp 400
K1 ← (m=1 ou m=3 ou m=5 ou m=7 ou m=8 ou m=10 ou m=12) et (J>=1 et J=<31)
K2 ← (m=4 ou m=6 ou m=9 ou m=11) et (J>=1 et J=<30)
K3 ← m=2 et B et J>=1 et J=<29
K4 ← m=2 et J>=1 et J=<28
Si K1 ou K2 ou K3 ou K4 Alors
Ecrire "Date valide"
Sinon
Ecrire "Date non valide"
FinSi
Fin
PARTIE 5
Enonce des Exercices
Exercice 5.1
Ecrire un algorit hme qui demande à l’ ut ilisat eur un nombre compris ent re 1 et 3 j usqu’ à ce que la
réponse convienne.
www.tri.on.ma
19
Exercice 5.2
Ecrire un algorit hme qui demande un nombre compris ent re 10 et 20, j usqu’ à ce que la réponse
convienne. En cas de réponse supérieure à 20, on fera apparaît re un message : « Plus pet it ! », et
inversement , « Plus grand ! » si le nombre est inférieur à 10.
Exercice 5.3
Ecrire un algorit hme qui demande un nombre de départ , et qui ensuit e affiche les dix nombres
suivant s. Par exemple, si l'ut ilisat eur ent re le nombre 17, le programme affichera les nombres de 18
à 27.
Exercice 5.4
Ecrire un algorit hme qui demande un nombre de départ , et qui ensuit e écrit la t able de
mult iplicat ion de ce nombre, présent ée comme suit (cas où l'ut ilisat eur ent re le nombre 7) :
Table de 7 :
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
…
7 x 10 = 70
Exercice 5.5
Ecrire un algorit hme qui demande un nombre de départ , et qui calcule la somme des ent iers j usqu’ à
ce nombre. Par exemple, si l’ on ent re 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
Exercice 5.6
Ecrire un algorit hme qui demande un nombre de départ , et qui calcule sa fact orielle.
NB : la fact orielle de 8, not ée 8 !, vaut
1x2x3x4x5x6x7x8
Exercice 5.7
Ecrire un algorit hme qui demande successivement 20 nombres à l’ ut ilisat eur, et qui lui dise ensuit e
quel ét ait le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
etc.
www.tri.on.ma
20
Modifiez ensuit e l’ algorit hme pour que le programme affiche de surcroît en quelle posit ion avait ét é
saisie ce nombre :
C’était le nombre numéro 2
Exercice 5.8
Réécrire l’ algorit hme précédent , mais cet t e fois-ci on ne connaît pas d’ avance combien l’ ut ilisat eur
souhait e saisir de nombres. La saisie des nombres s’ arrêt e lorsque l’ ut ilisat eur ent re un zéro.
Exercice 5.9
Lire la suit e des prix (en euros ent iers et t erminée par zéro) des achat s d’ un client . Calculer la
somme qu’ il doit , lire la somme qu’ il paye, et simuler la remise de la monnaie en affichant les
t ext es "10 Euros", "5 Euros" et "1 Euro" aut ant de fois qu’ il y a de coupures de chaque sort e à rendre.
Exercice 5.10
Écrire un algorit hme qui permet t e de connaît re ses chances de gagner au t iercé, quart é, quint é et
aut res impôt s volont aires.
On demande à l’ ut ilisat eur le nombre de chevaux part ant s, et le nombre de chevaux j oués. Les
deux messages affichés devront êt re :
Dans l’ordre : une chance sur X de gagner
Dans le désordre : une chance sur Y de gagner
X et Y nous sont donnés par la formule suivant e, si n est le nombre de chevaux part ant s et p le
nombre de chevaux j oués (on rappelle que le signe ! signifie "fact orielle", comme dans l'exercice 5.6
ci-dessus) :
X = n ! / (n - p) !
Y = n ! / (p ! * (n – p) !)
NB : cet algorit hme peut êt re écrit d’ une manière simple, mais relat ivement peu performant e. Ses
performances peuvent êt re singulièrement augment ées par une pet it e ast uce. Vous commencerez
par écrire la manière la plus simple, puis vous ident ifierez le problème, et écrirez une deuxième
version permet t ant de le résoudre.
www.tri.on.ma
21
Lire N
Si N < 1 ou N > 3 Alors
Ecrire "Saisie erronée. Recommencez”
FinSi
FinTantQue
Fin
Exercice 5.2
Variable N en Entier
Debut
N ← 0
Ecrire "Entrez un nombre entre 10 et 20"
TantQue N < 10 ou N > 20
Lire N
Si N < 10 Alors
Ecrire "Plus grand !"
SinonSi N > 20 Alors
Ecrire "Plus petit !"
FinSi
FinTantQue
Fin
Exercice 5.3
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Ecrire "Les 10 nombres suivants sont : "
Pour i ← N + 1 à N + 10
Ecrire i
i Suivant
Fin
Exercice 5.4
Variables N, i en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Ecrire "La table de multiplication de ce nombre est : "
Pour i ← 1 à 10
Ecrire N, " x ", i, " = ", n*i
i Suivant
Fin
Exercice 5.5
Variables N, i, Som en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
Som ← 0
Pour i ← 1 à N
Som ← Som + i
i Suivant
Ecrire "La somme est : ", Som
Fin
www.tri.on.ma
22
Exercice 5.6
Variables N, i, F en Entier
Debut
Ecrire "Entrez un nombre : "
Lire N
F ← 1
Pour i ← 2 à N
F ← F * i
i Suivant
Ecrire "La factorielle est : ", F
Fin
Exercice 5.7
Variables N, i, PG en Entier
Debut
PG ← 0
Pour i ← 1 à 20
Ecrire "Entrez un nombre : "
Lire N
Si i = 1 ou N > PG Alors
PG ← N
FinSi
i Suivant
Ecrire "Le nombre le plus grand était : ", PG
Fin
En ligne 3, on peut met t re n’ import e quoi dans PG, il suffit que cet t e variable soit affect ée pour
que le premier passage en ligne 7 ne provoque pas d'erreur.
Exercice 5.8
Variables N, i, PG, IPG en Entier
Debut
N ← 1
i ← 0
PG ← 0
TantQue N <> 0
Ecrire "Entrez un nombre : "
Lire N
i ← i + 1
www.tri.on.ma
23
Si i = 1 ou N > PG Alors
PG ← N
IPG ← i
FinSi
FinTantQue
Ecrire "Le nombre le plus grand était : ", PG
Ecrire "Il a été saisi en position numéro ", IPG
Fin
Exercice 5.9
Variables FF, somdue, M, IPG, Reste, Nb10F, Nb5F En Entier
Debut
E ← 1
somdue ← 0
TantQue E <> 0
Ecrire "Entrez le montant : "
Lire E
somdue ← somdue + E
FinTantQue
Ecrire "Vous devez :", E, " euros"
Ecrire "Montant versé :"
Lire M
Reste ← M - E
Nb10E ← 0
TantQue Reste >= 10
Nb10E ← Nb10E + 1
Reste ← Reste – 10
FinTantQue
Nb5E ← 0
Si Reste >= 5
Nb5E ← 1
Reste ← Reste – 5
FinSi
Ecrire "Rendu de la monnaie :"
Ecrire "Billets de 10 E : ", Nb10E
Ecrire "Billets de 5 E : ", Nb5E
Ecrire "Pièces de 1 E : ", reste
Fin
Exercice 5.10
Spont anément , on est t ent é d'écrire l'algorit hme suivant :
Variables N, P, i, Numé, Déno1, Déno2 en Entier
Debut Ecrire "Entrez le nombre de chevaux partants : "
Lire N
Ecrire "Entrez le nombre de chevaux joués : "
Lire P
Numé ← 1
Pour i ← 2 à N
Numé ← Numé * i
i Suivant
Déno1 ← 1
Pour i ← 2 à N-P
Déno1 ← Déno1 * i
i Suivant
Déno2 ← 1
www.tri.on.ma
24
Pour i ← 2 à P
Déno2 ← Déno2 * i
i Suivant
Ecrire "Dans l’ordre, une chance sur ", Numé / Déno1
Ecrire "Dans le désordre, une sur ", Numé / (Déno1 * Déno2)
Fin
Cet t e version, formellement j ust e, comport e t out de même deux faiblesses.
La première, et la plus grave, concerne la manière dont elle calcule le résult at final. Celui-ci est le
quot ient d'un nombre par un aut re ; or, ces nombres auront rapidement t endance à êt re t rès
grands. En calculant , comme on le fait ici, d'abord le numérat eur, puis ensuit e le dénominat eur, on
prend le risque de demander à la machine de st ocker des nombres t rop grands pour qu'elle soit
capable de les coder (cf. le préambule). C'est d'aut ant plus bêt e que rien ne nous oblige à procéder
ainsi : on n'est pas obligé de passer par la division de deux t rès grands nombres pour obt enir le
résult at voulu.
La deuxième remarque est qu'on a programmé ici t rois boucles successives. Or, en y regardant bien,
on peut voir qu'après simplificat ion de la formule, ces t rois boucles comport ent le même nombre de
t ours ! (si vous ne me croyez pas, écrivez un exemple de calcul et biffez les nombres ident iques au
numérat eur et au dénominat eur). Ce t riple calcul (ces t rois boucles) peut donc êt re ramené(es) à
un(e) seul(e). Et voilà le t ravail, qui est non seulement bien plus court , mais aussi plus performant :
Variables N, P, i, O, F en Entier
Debut
Ecrire "Entrez le nombre de chevaux partants : "
Lire N
Ecrire "Entrez le nombre de chevaux joués : "
Lire P
A ← 1
B ← 1
Pour i ← 1 à P
A ← A * (i + N - P)
B ← B * i
i Suivant
Ecrire "Dans l’ordre, une chance sur ", A
Ecrire "Dans le désordre, une chance sur ", A / B
Fin
PARTIE 6
Enonce des Exercices
Exercice 6.1
Ecrire un algorit hme qui déclare et remplisse un t ableau de 7 valeurs numériques en les met t ant
t out es à zéro.
Exercice 6.2
www.tri.on.ma
25
Ecrire un algorit hme qui déclare et remplisse un t ableau cont enant les six voyelles de l’ alphabet
lat in.
Exercice 6.3
Ecrire un algorit hme qui déclare un t ableau de 9 not es, dont on fait ensuit e saisir les valeurs par
l’ ut ilisat eur.
Exercice 6.4
Exercice 6.5
Exercice 6.6
www.tri.on.ma
26
Pour i ← 2 à 7
Suite(i) ← Suite(i-1) + Suite(i-2)
i suivant
Pour i ← 0 à 7
Ecrire Suite(i)
i suivant
Fin
Exercice 6.7
Ecrivez la fin de l’ algorit hme 6.3 afin que le calcul de la moyenne des not es soit effect ué et affiché
à l’ écran.
Exercice 6.8
Ecrivez un algorit hme permet t ant à l’ ut ilisat eur de saisir un nombre quelconque de valeurs, qui
devront êt re st ockées dans un t ableau. L’ ut ilisat eur doit donc commencer par ent rer le nombre de
valeurs qu’ il compt e saisir. Il effect uera ensuit e cet t e saisie. Enfin, une fois la saisie t erminée, le
programme affichera le nombre de valeurs négat ives et le nombre de valeurs posit ives.
Exercice 6.9
Ecrivez un algorit hme calculant la somme des valeurs d’ un t ableau (on suppose que le t ableau a ét é
préalablement saisi).
Exercice 6.10
Ecrivez un algorit hme const it uant un t ableau, à part ir de deux t ableaux de même longueur
préalablement saisis. Le nouveau t ableau sera la somme des élément s des deux t ableaux de départ .
Tableau 1 :
4 8 7 9 1 5 4 6
Tableau 2 :
7 6 5 2 1 3 7 4
11 14 12 11 2 8 11 10
Exercice 6.11
Touj ours à part ir de deux t ableaux précédemment saisis, écrivez un algorit hme qui calcule le
scht roumpf des deux t ableaux. Pour calculer le scht roumpf, il faut mult iplier chaque élément du
t ableau 1 par chaque élément du t ableau 2, et addit ionner le t out . Par exemple si l'on a :
www.tri.on.ma
27
Tableau 1 :
4 8 7 12
Tableau 2 :
3 6
Exercice 6.12
Ecrivez un algorit hme qui permet t e la saisie d’ un nombre quelconque de valeurs, sur le principe de
l’ ex 6.8. Tout es les valeurs doivent êt re ensuit e augment ées de 1, et le nouveau t ableau sera
affiché à l’ écran.
Exercice 6.13
Ecrivez un algorit hme permet t ant , t ouj ours sur le même principe, à l’ ut ilisat eur de saisir un nombre
dét erminé de valeurs. Le programme, une fois la saisie t erminée, renvoie la plus grande valeur en
précisant quelle posit ion elle occupe dans le t ableau. On prendra soin d’ effect uer la saisie dans un
premier t emps, et la recherche de la plus grande valeur du t ableau dans un second t emps.
Exercice 6.14
Touj ours et encore sur le même principe, écrivez un algorit hme permet t ant , à l’ ut ilisat eur de saisir
les not es d'une classe. Le programme, une fois la saisie t erminée, renvoie le nombre de ces not es
supérieures à la moyenne de la classe.
www.tri.on.ma
28
i Suivant
Fin
Exercice 6.2
Tableau Truc(5) en Caractère
Debut
Truc(0) ← "a"
Truc(1) ← "e"
Truc(2) ← "i"
Truc(3) ← "o"
Truc(4) ← "u"
Truc(5) ← "y"
Fin
Exercice 6.3
Tableau Notes(8) en Numérique
Variable i en Numérique
Pour i ← 0 à 8
Ecrire "Entrez la note numéro ", i + 1
Lire Notes(i)
i Suivant
Fin
Exercice 6.4
Cet algorit hme remplit un t ableau avec six valeurs : 0, 1, 4, 9, 16, 25.
Il les écrit ensuit e à l’ écran. Simplificat ion :
Tableau Nb(5) en Numérique
Variable i en Numérique
Début
Pour i ← 0 à 5
Nb(i) ← i * i
Ecrire Nb(i)
i Suivant
Fin
Exercice 6.5
Cet algorit hme remplit un t ableau avec les sept valeurs : 1, 3, 5, 7, 9, 11, 13.
Il les écrit ensuit e à l’ écran. Simplificat ion :
Tableau N(6) en Numérique
Variables i, k en Numérique
Début
N(0) ← 1
Ecrire N(0)
Pour k ← 1 à 6
N(k) ← N(k-1) + 2
Ecrire N(k)
k Suivant
Fin
Exercice 6.6
Cet algorit hme remplit un t ableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21
Exercice 6.7
Variable S en Numérique
Tableau Notes(8) en Numérique
www.tri.on.ma
29
Debut
s ← 0
Pour i ← 0 à 8
Ecrire "Entrez la note n° ", i + 1
Lire Notes(i)
s ← s + Notes(i)
i Suivant
Ecrire "Moyenne :", s/9
Fin
Exercice 6.8
Variables Nb, Nbpos, Nbneg en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de valeurs :"
Lire Nb
Redim T(Nb-1)
Nbpos ← 0
Nbneg ← 0
Pour i ← 0 à Nb - 1
Ecrire "Entrez le nombre n° ", i + 1
Lire T(i)
Si T(i) > 0 alors
Nbpos ← Nbpos + 1
Sinon
Nbneg ← Nbneg + 1
Finsi
i Suivant
Ecrire "Nombre de valeurs positives : ", Nbpos
Ecrire "Nombre de valeurs négatives : ", Nbneg
Fin
Exercice 6.9
Variables i, Som, N en Numérique
Tableau T() en Numérique
Debut
… (on ne programme pas la saisie du t ableau, dont on suppose qu’ il compt e N élément s)
Redim T(N-1)
…
Som ← 0
Pour i ← 0 à N - 1
Som ← Som + T(i)
i Suivant
Ecrire "Somme des éléments du tableau : ", Som
Fin
Exercice 6.10
Variables i, N en Numérique
Tableaux T1(), T2(), T3() en Numérique
Debut
… (on suppose que T1 et T2 compt ent N élément s, et qu’ ils sont déj à saisis)
Redim T3(N-1)
…
Pour i ← 0 à N - 1
T3(i) ← T1(i) + T2(i)
www.tri.on.ma
30
i Suivant
Fin
Exercice 6.11
Variables i, j, N1, N2, S en Numérique
Tableaux T1(), T2() en Numérique
Debut
… On ne programme pas la saisie des t ableaux T1 et T2.
On suppose que T1 possède N1 élément s, et que T2 en possède T2)
…
S ← 0
Pour i ← 0 à N1 – 1
Pour j ← 0 à N2 – 1
S ← S + T1(i) * T2(j)
j Suivant
i Suivant
Ecrire "Le schtroumpf est : ", S
Fin
Exercice 6.12
Variables Nb, i en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de valeurs : "
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
Ecrire "Entrez le nombre n° ", i + 1
Lire T(i)
i Suivant
Ecrire "Nouveau tableau : "
Pour i ← 0 à Nb – 1
T(i) ← T(i) + 1
Ecrire T(i)
i Suivant
Fin
Exercice 6.13
Variables Nb, Posmaxi en Numérique
Tableau T() en Numérique
Ecrire "Entrez le nombre de valeurs :"
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
Ecrire "Entrez le nombre n° ", i + 1
Lire T(i)
i Suivant
Posmaxi ← 0
Pour i ← 0 à Nb - 1
Si T(i) > T(Posmaxi) alors
Posmaxi ← i
Finsi
i Suivant
Ecrire "Element le plus grand : ", T(Posmaxi)
www.tri.on.ma
31
Exercice 6.14
Variables Nb, i, Som, Moy, Nbsup en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de notes à saisir : "
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
Ecrire "Entrez le nombre n° ", i + 1
Lire T(i)
i Suivant
Som ← 0
Pour i ← 0 à Nb - 1
Som ← Som + T(i)
i Suivant
Moy ← Som / Nb
NbSup ← 0
Pour i ← 0 à Nb - 1
Si T(i) > Moy Alors
NbSup ← NbSup + 1
FinSi
i Suivant
Ecrire NbSup, " élèves dépassent la moyenne de la classe"
Fin
PARTIE 7
Enonce des Exercices
Exercice 7.1
Ecrivez un algorit hme qui permet t e de saisir un nombre quelconque de valeurs, et qui les range au
fur et à mesure dans un t ableau. Le programme, une fois la saisie t erminée, doit dire si les
élément s du t ableau sont t ous consécut ifs ou non.
www.tri.on.ma
32
12 13 14 15 16 17 18
9 10 11 15 16 17 18
Exercice 7.2
Exercice 7.3
Ecrivez un algorit hme qui inverse l’ ordre des élément s d’ un t ableau dont on suppose qu'il a ét é
préalablement saisi (« les premiers seront les derniers…»)
Exercice 7.4
Ecrivez un algorit hme qui permet t e à l’ ut ilisat eur de supprimer une valeur d’ un t ableau
préalablement saisi. L’ ut ilisat eur donnera l’ indice de la valeur qu’ il souhait e supprimer. At t ent ion,
il ne s’ agit pas de remet t re une valeur à zéro, mais bel et bien de la supprimer du t ableau lui-même
! Si le t ableau de départ ét ait :
12 8 4 45 64 9 2
Et que l’ ut ilisat eur souhait e supprimer la valeur d’ indice 4, le nouveau t ableau sera :
12 8 4 45 9 2
Exercice 7.5
Ecrivez l'algorit hme qui recherche un mot saisi au clavier dans un dict ionnaire. Le dict ionnaire est
supposé êt re codé dans un t ableau préalablement rempli et t rié.
www.tri.on.ma
33
Exercice 7.2
On suppose que N est le nombre d’ élément s du t ableau. Tri par insert ion :
…
Pour i ← 0 à N - 2
posmaxi = i
Pour j ← i + 1 à N - 1
Si t(j) > t(posmaxi) alors
posmaxi ← j
Finsi
j suivant
temp ← t(posmaxi)
t(posmaxi) ← t(i)
t(i) ← temp
i suivant
Fin
Tri à bulles :
www.tri.on.ma
34
…
Yapermut ← Vrai
TantQue Yapermut
Yapermut ← Faux
Pour i ← 0 à N - 2
Si t(i) < t(i + 1) Alors
temp ← t(i)
t(i) ← t(i + 1)
t(i + 1) ← temp
Yapermut ← Vrai
Finsi
i suivant
FinTantQue
Fin
Exercice 7.3
On suppose que n est le nombre d’ élément s du t ableau préalablement saisi
…
Pour i ← 0 à (N-1)/2
Temp ← T(i)
T(i) ← T(N-1-i)
T(N-1-i) ← Temp
i suivant
Fin
Exercice 7.4
…
Ecrire "Rang de la valeur à supprimer ?"
Lire S
Pour i ← S à N-2
T(i) ← T(i+1)
i suivant
Redim T(N–1)
Fin
Exercice 7.5
N est le nombre d'élément s du t ableau Dico(), cont enant les mot s du dict ionnaire, t ableau
préalablement rempli.
Variables Sup, Inf, Comp en Entier
Variables Fini en Booléen
Début
Ecrire "Entrez le mot à vérifier"
Lire Mot
On définit les bornes de la part ie du t ableau à considérer
Sup ← N - 1
Inf ← 0
Fini ← Faux
TantQue Non Fini
Comp désigne l'indice de l'élément à comparer. En bonne rigueur, il faudra veiller à ce que Comp
soit bien un nombre ent ier, ce qui pourra s'effect uer de différent es manières selon les langages.
Comp ← (Sup + Inf)/2
Si le mot se sit ue avant le point de comparaison, alors la borne supérieure change, la borne
inférieure ne bouge pas.
www.tri.on.ma
35
PARTIE 8
Enonce des Exercices
Exercice 8.1
Écrivez un algorit hme remplissant un t ableau de 6 sur 13, avec des zéros.
www.tri.on.ma
36
Exercice 8.2
Exercice 8.3
Exercice 8.4
www.tri.on.ma
37
Ecrire T(k, m)
m Suivant
k Suivant
Fin
Exercice 8.5
par
T(k, m) ← 2 * k + (m + 1)
puis par :
T(k, m) ← (k + 1) + 4 * m
Exercice 8.6
Exercice 8.7
www.tri.on.ma
38
j Suivant
i Suivant
Fin
Exercice 8.2
Cet algorit hme remplit un t ableau de la manière suivant e:
X(0, 0) = 1
X(0, 1) = 2
X(0, 2) = 3
X(1, 0) = 4
X(1, 1) = 5
X(1, 2) = 6
Il écrit ensuit e ces valeurs à l’ écran, dans cet ordre.
Exercice 8.3
Cet algorit hme remplit un t ableau de la manière suivant e:
X(0, 0) = 1
X(1, 0) = 4
X(0, 1) = 2
X(1, 1) = 5
X(0, 2) = 3
X(1, 2) = 6
Il écrit ensuit e ces valeurs à l’ écran, dans cet ordre.
Exercice 8.4
Cet algorit hme remplit un t ableau de la manière suivant e:
T(0, 0) = 0
T(0, 1) = 1
T(1, 0) = 1
T(1, 1) = 2
T(2, 0) = 2
T(2, 1) = 3
T(3, 0) = 3
T(3, 1) = 4
Il écrit ensuit e ces valeurs à l’ écran, dans cet ordre.
Exercice 8.5
Version a : cet algorit hme remplit un t ableau de la manière suivant e:
T(0, 0) = 1
T(0, 1) = 2
T(1, 0) = 3
T(1, 1) = 4
T(2, 0) = 5
T(2, 1) = 6
T(3, 0) = 7
T(3, 1) = 8
Il écrit ensuit e ces valeurs à l’ écran, dans cet ordre.
www.tri.on.ma
39
T(2, 1) = 7
T(3, 0) = 4
T(3, 1) = 8
Il écrit ensuit e ces valeurs à l’ écran, dans cet ordre.
Exercice 8.6
Variables i, j, iMax, jMax en Numérique
Tableau T(12, 8) en Numérique
Le principe de la recherche dans un t ableau à deux dimensions est st rict ement le même que dans un
t ableau à une dimension, ce qui ne doit pas nous ét onner. La seule chose qui change, c'est qu'ici le
balayage requiert deux boucles imbriquées, au lieu d'une seule.
Debut
...
iMax ← 0
jMax ← 0
Pour i ← 0 à 12
Pour j ← 0 à 8
Si T(i,j) > T(iMax,jMax) Alors
iMax ← i
jMax ← j
FinSi
j Suivant
i Suivant
Ecrire "Le plus grand élément est ", T(iMax, jMax)
Ecrire "Il se trouve aux indices ", iMax, "; ", jMax
Fin
Exercice 8.7
Variables i, j , posi, posj, i2, j2 en Entier
Variables Correct, MoveOK en Booléen
Tableau Damier(7, 7) en Booléen
Tableau Mouv(3, 1) en Entier
Le damier cont enant un seul pion, on choisit de le coder à l'économie, en le représent ant par un
t ableau de booléens à deux dimensions. Dans chacun des emplacement s de ce damier, Faux signifie
l'absence du pion, Vrai sa présence.
Par ailleurs, on emploie une méchant e ast uce, pas obligat oire, mais bien prat ique dans beaucoup de
sit uat ions. L'idée est de faire correspondre les choix possibles de l'ut ilisat eur avec les mouvement s
du pion. On ent re donc dans un t ableau Mouv à deux dimensions, les déplacement s du pion selon les
quat re direct ions, en prenant soin que chaque ligne du t ableau corresponde à une saisie de
l’ ut ilisat eur. La première valeur ét ant le déplacement en i, la seconde le déplacement en j . Ceci
nous épargnera par la suit e de faire quat re fois les mêmes t est s.
Debut
Choix 0 : pion en haut à droit e
Mouv(0, 0) ← -1
Mouv(0, 1) ← -1
Choix 1 : pion en haut à droit e
Mouv(1, 0) ← -1
Mouv(1, 1) ← 1
Choix 2 : pion en bas à gauche
Mouv(2, 0) ← 1
Mouv(2, 1) ← -1
Choix 3 : pion en bas à droit e
www.tri.on.ma
40
Mouv(3, 0) ← 1
Mouv(3, 1) ← 1
Init ialisat ion du damier; le pion n’ est pour le moment nulle part
Pour i ← 0 à 7
Pour j ← 0 à 7
Damier(i, j) ← Faux
j suivant
i suivant
Saisie de la coordonnée en i ("posi") avec cont rôle de saisie
Correct ← Faux
TantQue Non Correct
Ecrire "Entrez la ligne de votre pion: "
Lire posi
Si posi >= 0 et posi <= 7 Alors
Correct ← vrai
Finsi
Fintantque
Saisie de la coordonnée en j ("posj ") avec cont rôle de saisie
Correct ← Faux
TantQue Non Correct
Ecrire "Entrez la colonne de votre pion: "
Lire posj
Si posj >= 0 et posj <= 7 Alors
Correct ← Vrai
Finsi
Fintantque
Posit ionnement du pion sur le damier virt uel.
Damier(posi, posj) ← Vrai
Saisie du déplacement , avec cont rôle
Ecrire "Quel déplacement ?"
Ecrire " - 0: en haut à gauche"
Ecrire " - 1: en haut à droite"
Ecrire " - 2: en bas à gauche"
Ecrire " - 3: en bas à droite"
Correct ← Faux
TantQue Non Correct
Lire Dep
Si Dep >= 0 et Dep <= 3 Alors
Correct ← Vrai
FinSi
FinTantQue
i2 et j 2 sont les fut ures coordonnées du pion. La variable booléenne MoveOK vérifie la validit é de ce
fut ur emplacement
i2 ← posi + Mouv(Dep, 0)
j2 ← posj + Mouv(Dep, 1)
MoveOK ← i2 >= 0 et i2 <= 7 et j2 >= 0 et j2 <= 7
Cas où le déplacement est valide
Si MoveOK Alors
Damier(posi, posj) ← Faux
Damier(i2, j2) ← Vrai
Affichage du nouveau damier
Pour i ← 0 à 7
Pour j ← 0 à 7
Si Damier(i, j) Alors
www.tri.on.ma
41
PARTIE 9
Enoncé des Exercices
Exercice 9.1
Parmi ces affect at ions (considérées indépendamment les unes des aut res), lesquelles provoqueront
des erreurs, et pourquoi ?
Variables A, B, C en Numérique
Variables D, E en Caractère
A ← Sin(B)
A ← Sin(A + B * C)
B ← Sin(A) – Sin(D)
www.tri.on.ma
42
D ← Sin(A / B)
C ← Cos(Sin(A)
Exercice 9.2
Ecrivez un algorit hme qui demande un mot à l’ ut ilisat eur et qui affiche à l’ écran le nombre de
let t res de ce mot (c'est vraiment t out bêt e).
Exercice 9.3
Ecrivez un algorit hme qui demande une phrase à l’ ut ilisat eur et qui affiche à l’ écran le nombre de
mot s de cet t e phrase. On suppose que les mot s ne sont séparés que par des espaces (et c'est déj à
un pet it peu moins bêt e).
Exercice 9.4
Ecrivez un algorit hme qui demande une phrase à l’ ut ilisat eur et qui affiche à l’ écran le nombre de
voyelles cont enues dans cet t e phrase.
On pourra écrire deux solut ions. La première déploie une condit ion composée bien fast idieuse. La
deuxième, en ut ilisant la fonct ion Trouve, allège considérablement l'algorit hme.
Exercice 9.5
Ecrivez un algorit hme qui demande une phrase à l’ ut ilisat eur. Celui-ci ent rera ensuit e le rang d’ un
caract ère à supprimer, et la nouvelle phrase doit êt re affichée (on doit réellement supprimer le
caract ère dans la variable qui st ocke la phrase, et pas uniquement à l’ écran).
Un des plus anciens syst èmes de crypt ographie (aisément déchiffrable) consist e à décaler les let t res
d’ un message pour le rendre illisible. Ainsi, les A deviennent des B, les B des C, et c. Ecrivez un
algorit hme qui demande une phrase à l’ ut ilisat eur et qui la code selon ce principe. Comme dans le
cas précédent , le codage doit s’ effect uer au niveau de la variable st ockant la phrase, et pas
seulement à l’ écran.
Une améliorat ion (relat ive) du principe précédent consist e à opérer avec un décalage non de 1,
mais d’ un nombre quelconque de let t res. Ainsi, par exemple, si l’ on choisit un décalage de 12, les A
deviennent des M, les B des N, et c.
Réalisez un algorit hme sur le même principe que le précédent , mais qui demande en plus quel est le
décalage à ut iliser. Vot re sens proverbial de l'élégance vous int erdira bien sûr une série de vingt -six
"Si...Alors"
www.tri.on.ma
43
Une t echnique ult érieure de crypt ographie consist a à opérer non avec un décalage syst émat ique,
mais par une subst it ut ion aléat oire. Pour cela, on ut ilise un alphabet -clé, dans lequel les let t res se
succèdent de manière désordonnée, par exemple :
HYLUJPVREAKBNDOFSQZCWMGITX
C’ est cet t e clé qui va servir ensuit e à coder le message. Selon not re exemple, les A deviendront des
H, les B des Y, les C des L, et c.
Ecrire un algorit hme qui effect ue ce crypt age (l’ alphabet -clé sera saisi par l’ ut ilisat eur, et on
suppose qu'il effect ue une saisie correct e).
Un syst ème de crypt ographie beaucoup plus difficile à briser que les précédent s fut invent é au XVIe
siècle par le français Vigenère. Il consist ait en une combinaison de différent s chiffres de César.
On peut en effet écrire 25 alphabet s décalés par rapport à l’ alphabet normal :
Le codage va s’ effect uer sur le principe du chiffre de César : on remplace la let t re d’ origine par la
let t re occupant la même place dans l’ alphabet décalé.
Mais à la différence du chiffre de César, un même message va ut iliser non un, mais plusieurs
alphabet s décalés. Pour savoir quels alphabet s doivent êt re ut ilisés, et dans quel ordre, on ut ilise
une clé.
Si cet t e clé est "VIGENERE" et le message "Il faut coder cet t e phrase", on procèdera comme suit :
La première let t re du message, I, est la 9e let t re de l’ alphabet normal. Elle doit êt re codée en
ut ilisant l’ alphabet commençant par la première let t re de la clé, V. Dans cet alphabet , la 9e let t re
est le D. I devient donc D.
La deuxième let t re du message, L, est la 12e let t re de l’ alphabet normal. Elle doit êt re codée en
ut ilisant l’ alphabet commençant par la deuxième let t re de la clé, I. Dans cet alphabet , la 12e let t re
est le S. L devient donc S, et c.
Quand on arrive à la dernière let t re de la clé, on recommence à la première.
Ecrire l’ algorit hme qui effect ue un crypt age de Vigenère, en demandant bien sûr au départ la clé à
l’ ut ilisat eur.
Exercice 9.10
Ecrivez un algorit hme qui demande un nombre ent ier à l’ ut ilisat eur. L’ ordinat eur affiche ensuit e le
message "Ce nombre est pair" ou "Ce nombre est impair" selon le cas.
Exercice 9.11
Ecrivez les algorit hmes qui génèrent un nombre Glup aléat oire t el que …
www.tri.on.ma
44
Exercice 9.2
Vous ét iez prévenus, c'est bêt e comme chou ! Il suffit de se servir de la fonct ion Len, et c'est réglé :
Variable Mot en Caractère
Variable Nb en Entier
Debut
Ecrire "Entrez un mot : "
Lire Mot
Nb ← Len(Mot)
Ecrire "Ce mot compte ", Nb, " lettres"
Fin
Exercice 9.3
Là, on est obligé de compter par une boucle le nombre d'espaces de la phrase, et on
en déduit le nombre de mots. La boucle examine les caractères de la phrase un par
un, du premier au dernier, et les compare à l'espace.
Variable Bla en Caractère
Variables Nb, i en Entier
Debut
Ecrire "Entrez une phrase : "
Lire Bla
Nb ← 0
Pour i ← 1 à Len(Bla)
Si Mid(Bla, i , 1) = " " Alors
Nb ← Nb + 1
FinSi
i suivant
Ecrire "Cette phrase compte ", Nb + 1, " mots"
Fin
Exercice 9.4
Solut ion 1 : pour chaque caract ère du mot , on pose une t rès douloureuse condit ion composée. Le
moins que l'on puisse dire, c'est que ce choix ne se dist ingue pas par son élégance. Cela dit , il
marche, donc après t out , pourquoi pas.
Variable Bla en Caractère
Variables Nb, i, j en Entier
Debut
Ecrire "Entrez une phrase : "
Lire Bla
Nb ← 0
Pour i ← 1 à Len(Bla)
www.tri.on.ma
45
Exercice 9.5
Il n'exist e aucun moyen de supprimer direct ement un caract ère d'une chaîne… aut rement qu'en
procédant par collage. Il faut donc concat éner ce qui se t rouve à gauche du caract ère à supprimer,
avec ce qui se t rouve à sa droit e. At t ent ion aux paramèt res des fonct ions Mid, ils n'ont rien
d'évident !
Variable Bla en Caractère
Variables Nb, i, j en Entier
Début
Ecrire "Entrez une phrase : "
Lire Bla
Ecrire "Entrez le rang du caractère à supprimer : "
Lire Nb
L ← Len(Bla)
Bla ← Mid(Bla, 1, Nb – 1) & Mid(Bla, Nb + 1, L – Nb)
Ecrire "La nouvelle phrase est : ", Bla
Fin
Exercice 9.6
Sur l'ensemble des exercices de crypt ographie, il y a deux grandes st rat égies possibles :
- soit t ransformer les caract ères en leurs codes ASCII. L'algorit hme revient donc ensuit e à t rait er des
nombres. Une fois ces nombres t ransformés, il faut les reconvert ir en caract ères.
- soit en rest er au niveau des caract ères, et procéder direct ement aux t ransformat ions à ce niveau.
C'est cet t e dernière opt ion qui est choisie ici, et pour t ous les exercices de crypt ographie à venir.
Pour cet exercice, il y a une règle générale : pour chaque let t re, on dét ect e sa posit ion dans
l'alphabet , et on la remplace par la let t re occupant la posit ion suivant e. Seul cas part iculier, la
www.tri.on.ma
46
vingt -sixième let t re (le Z) doit êt re codée par la première (le A), et non par la vingt -sept ième, qui
n'exist e pas !
Variables Bla, Cod, Alpha en Caractère
Variables i, Pos en Entier
Début
Ecrire "Entrez la phrase à coder : "
Lire Bla
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Cod ← ""
Pour i ← 1 à Len(Bla)
Let ← Mid(Bla, i, 1)
Si Let <> "Z" Alors
Pos ← Trouve(Alpha, Let)
Cod ← Cod & Mid(Alpha, Pos + 1, 1)
Sinon
Cod ← Cod & "A"
FinSi
i Suivant
Bla ← Cod
Ecrire "La phrase codée est : ", Bla
Fin
Exercice 9.7
Cet algorit hme est une généralisat ion du précédent . Mais là, comme on ne connaît pas d'avance le
décalage à appliquer, on ne sait pas a priori combien de "cas part iculiers", à savoir de dépassement s
au-delà du Z, il va y avoir.
Il faut donc t rouver un moyen simple de dire que si on obt ient 27, il faut en réalit é prendre la let t re
numéro 1 de l'alphabet , que si on obt ient 28, il faut en réalit é prendre la numéro 2, et c. Ce moyen
simple exist e : il faut considérer le rest e de la division par 26, aut rement dit le modulo.
Il y a une pet it e ruse supplément aire à appliquer, puisque 26 doit rest er 26 et ne pas devenir 0.
Variable Bla, Cod, Alpha en Caractère
Variables i, Pos, Décal en Entier
Début
Ecrire "Entrez le décalage à appliquer : "
Lire Décal
Ecrire "Entrez la phrase à coder : "
Lire Bla
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Cod ← ""
Pour i ← 1 à Len(Bla)
Let ← Mid(Bla, i, 1)
Pos ← Trouve(Alpha, Let)
NouvPos ← Mod(Pos + Décal, 26)
Si NouvPos = 0 Alors
NouvPos ← 26
FinSi
Cod ← Cod & Mid(Alpha, NouvPos, 1)
i Suivant
Bla ← Cod
Ecrire "La phrase codée est : ", Bla
Fin
Exercice 9.8
Là, c'est assez direct .
www.tri.on.ma
47
Exercice 9.9
Le codage de Vigenère n’ est pas seulement plus difficile à briser; il est également un peu plus raide
à programmer. La difficult é essent ielle est de comprendre qu’ il faut deux boucles: l’ une pour
parcourir la phrase à coder, l’ aut re pour parcourir la clé. Mais quand on y réfléchit bien, ces deux
boucles ne doivent surt out pas êt re imbriquées. Et en réalit é, quelle que soit la manière dont on
l'écrit , elle n’ en forment qu’ une seule.
Variables Alpha, Bla, Cod, Clé, Let en Caractère
Variables i, Pos, PosClé, Décal en Entier
Début
Ecrire "Entrez la clé : "
Lire Clé
Ecrire "Entrez la phrase à coder : "
Lire Bla
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Cod ← ""
PosClé ← 0
Pour i ← 1 à Len(Bla)
On gère la progression dans la clé. J’ ai effect ué cela "à la main" par une boucle, mais un j oli emploi
de la fonct ion Modulo aurait permis une programmat ion en une seule ligne!
Posclé ← Posclé + 1
Si PosClé > Len(Clé) Alors
PosClé ← 1
FinSi
On dét ermine quelle est la let t re clé et sa posit ion dans l’ alphabet
LetClé ← Mid(Clé, PosClé, 1)
PosLetClé ← Trouve(Alpha, LetClé)
On dét ermine la posit ion de la let t re à coder et le décalage à appliquer. Là encore, une solut ion
alt ernat ive aurait ét é d’ employer Mod : cela nous aurait épargné le Si…
Let ← Mid(Bla, i, 1)
Pos ← Trouve(Alpha, Let)
NouvPos ← Pos + PosLetClé
Si NouvPos > 26 Alors
NouvPos ← NouvPos – 26
FinSi
Cod ← Cod & Mid(Alpha, NouvPos, 1)
i Suivant
www.tri.on.ma
48
Bla ← Cod
Ecrire "La phrase codée est : ", Bla
Fin
Exercice 9.10
On en revient à des choses plus simples...
Variable Nb en Entier
Ecrire "Entrez votre nombre : "
Lire Nb
Si Nb/2 = Ent(Nb/2) Alors
Ecrire "Ce nombre est pair"
Sinon
Ecrire "Ce nombre est pair"
FinSi
Fin
Exercice 9.11
a) Glup ← Alea() * 2
b) Glup ← Alea() * 2 - 1
c) Glup ← Alea() * 0,30 + 1,35
d) Glup ← Ent(Alea() * 6) + 1
e) Glup ← Alea() * 17 – 10,5
f) Glup ← Ent(Alea()*6) + Ent(Alea()*6) + 2
PARTIE 10
Enoncé des Exercices
Exercice 10.1
www.tri.on.ma
49
FinTantQue
Fermer 5
Fin
Exercice 10.2
Ecrivez l’ algorit hme qui produit un résult at similaire au précédent , mais le fichier t ext e
"Exemple.t xt " est cet t e fois de t ype délimit é (caract ère de délimit at ion : / ). On produira à l'écran
un affichage où pour des raisons est hét iques, ce caract ère sera remplacé avec des espaces.
Exercice 10.3
Exercice 10.4
Même quest ion, mais cet t e fois le carnet est supposé êt re t rié par ordre alphabét ique. L’ individu
doit donc êt re inséré au bon endroit dans le fichier.
Exercice 10.5
Ecrivez un algorit hme qui permet t e de modifier un renseignement (pour simplifier, disons
uniquement le nom de famille) d’ un membre du carnet d’ adresses. Il faut donc demander à
l’ ut ilisat eur quel est le nom à modifier, puis quel est le nouveau nom, et met t re à j our le fichier. Si
le nom recherché n'exist e pas, le programme devra le signaler.
Exercice 10.6
Ecrivez un algorit hme qui t rie les individus du carnet d’ adresses par ordre alphabét ique.
Exercice 10.7
Soient Tot o.t xt et Tat a.t xt deux fichiers dont les enregist rement s ont la même st ruct ure. Ecrire un
algorit hme qui recopie t out le fichier Tot o dans le fichier Tut u, puis à sa suit e, t out le fichier Tat a
(concat énat ion de fichiers).
Exercice 10.8
Ecrire un algorit hme qui supprime dans not re carnet d'adresses t ous les individus dont le mail est
invalide (pour employer un crit ère simple, on considèrera que sont invalides les mails ne
comport ant aucune arobase, ou plus d'une arobase).
www.tri.on.ma
50
Exercice 10.9
Les enregist rement s d’ un fichier cont iennent les deux champs Nom (chaîne de caract ères) et
Mont ant (Ent ier). Chaque enregist rement correspond à une vent e conclue par un commercial d’ une
sociét é.
On veut mémoriser dans un t ableau, puis afficher à l'écran, le t ot al de vent es par vendeur. Pour
simplifier, on suppose que le fichier de départ est déj à t rié alphabét iquement par vendeur.
Exercice 10.2
Variable Truc en Caractère
Variable i en Entier
Debut
Ouvrir "Exemple.txt" sur 5 en Lecture
Tantque Non EOF(5)
LireFichier 5, Truc
Pour i ← 1 à Len(Truc)
Si Mid(Truc, i, 1) = "/" Alors
Ecrire " "
Sinon
Ecrire Mid(Truc, i, 1)
FinSi
i Suivant
FinTantQue
Fermer 5
Exercice 10.3
Variables Nom * 20, Prénom * 17, Tel * 10, Mail * 20, Lig en Caractère
Debut
Ecrire "Entrez le nom : "
Lire Nom
Ecrire "Entrez le prénom : "
Lire Prénom
Ecrire "Entrez le téléphone : "
Lire Tel
Ecrire "Entrez le nom : "
Lire Mail
Lig ← Nom & Prénom & Tel & Mail
Ouvrir "Adresse.txt" sur 1 pour Ajout
EcrireFichier 1, Lig
Fermer 1
Fin
Exercice 10.4
Là, comme indiqué dans le cours, on passe par un t ableau de st rut ures en mémoire vive, ce qui est
la t echnique la plus fréquemment employée. Le t ri - qui est en fait un simple t est - sera effect ué
sur le premier champ (nom).
Structure Bottin
Nom en Caractère * 20
www.tri.on.ma
51
Prénom en Caractère * 15
Tel en Caractère * 10
Mail en Caractère * 20
Fin Structure
Tableau Mespotes() en Bottin
Variables MonPote, Nouveau en Bottin
Variables i, j en Numérique
Debut
Ecrire "Entrez le nom : "
Lire Nouveau.Nom
Ecrire "Entrez le prénom : "
Lire Nouveau.Prénom
Ecrire "Entrez le téléphone : "
Lire Nouveau.Tel
Ecrire "Entrez le mail : "
Lire Nouveau.Mail
On recopie l'int égralit é de "Adresses" dans MesPot es(). Et après t out , c'est l'occasion : quand on
t ombe au bon endroit , on insère subrept icement not re nouveau copain dans le t ableau.
Ouvrir "Adresse.txt" sur 1 pour Lecture
i ← -1
inséré ← Faux
Tantque Non EOF(1)
i ← i + 1
Redim MesPotes(i)
LireFichier 1, MonPote
Si MonPote.Nom > Nouveau.Nom et Non Inséré Alors
MesPotes(i) ← Nouveau
Inséré ← Vrai
i ← i + 1
Redim MesPotes(i)
FinSi
MesPotes(i) ← MonPote
FinTantQue
Fermer 1
Et le t our est quasiment j oué. Il ne rest e plus qu'à rebalancer t el quel l'int égralit é du t ableau
MesPot es dans le fichier, en écrasant l'ancienne version.
Ouvrir "Adresse.txt" sur 1 pour Ecriture
Pour j ← 0 à i
EcrireFichier 1, MesPotes(j)
j suivant
Fermer 1
Fin
Exercice 10.5
C'est un peu du même t onneau que ce qu'on vient de faire, à quelques variant es près. Il y a
essent iellement une pet it e gest ion de flag pour faire bonne mesure.
Structure Bottin
Nom en Caractère * 20
Prénom en Caractère * 15
Tel en caractère * 10
Mail en Caractère * 20
Fin Structure
Tableau Mespotes() en Bottin
www.tri.on.ma
52
Exercice 10.6
Là, c'est un t ri sur un t ableau de st ruct ures, rien de plus facile. Et on est bien cont ent de disposer
des st ruct ures, aut rement dit de ne se colt iner qu'un seul t ableau...
Structure Bottin Nom en Caractère * 20
Prénom en Caractère * 15
Tel en caractère * 10
Mail en Caractère * 20
Fin Structure
Tableau Mespotes() en Bottin
Variables Mini en Bottin
Variables i, j en Numérique
Debut
www.tri.on.ma
53
Exercice 10.7
Bon, celui-là est t ellement idiot qu'on n'a même pas besoin de passer par des t ableaux en mémoire
vive.
Variable Lig en Caractère
Début
Ouvrir "Tutu.txt" sur 1 pour Ajout
Ouvrir “Toto.txt” sur 2 pour Lecture
Tantque Non EOF(2)
LireFichier 2, Lig
EcrireFichier 1, Lig
FinTantQue
Fermer 2
Ouvrir “Tata.txt” sur 3 pour Lecture
Tantque Non EOF(3)
LireFichier 2, Lig
EcrireFichier 1, Lig
FinTantQue
Fermer 3
Fermer 1
Fin
Exercice 10.8
On va éliminer les mauvaises ent rées dès la recopie : si l'enregist rement ne présent e pas un mail
valide, on l'ignore, sinon on le copie dans le t ableau.
www.tri.on.ma
54
Structure Bottin
Nom en Caractère * 20
Prénom en Caractère * 15
Tel en caractère * 10
Mail en Caractère * 20
Fin Structure
Tableau Mespotes() en Bottin
Variable MonPote en Bottin
Variables i, j en Numérique
Debut
On recopie "Adresses" dans MesPot es en t est ant le mail...
Ouvrir "Adresse.txt" sur 1 pour Lecture
i ← -1
Tantque Non EOF(1)
LireFichier 1, MonPote
nb ← 0
Pour i ← 1 à Len(MonPote.Mail)
Si Mid(MonPote.Mail, i, 1) = "@" Alors
nb ← nb + 1
FinSi
i suivant
Si nb = 1 Alors
i ← i + 1
Redim MesPotes(i)
MesPotes(i) ← MonPote
FinSi
FinTantQue
Fermer 1
On recopie ensuit e l'int égralit é de Fic dans "Adresse"
Ouvrir "Adresse.txt" sur 1 pour Ecriture
Pour j ← 0 à i
EcrireFichier 1, MesPotes(j)
j Suivant
Fermer 1
Fin
Exercice 10.9
Une fois de plus, le passage par un t ableau de st ruct ures est une st rat égie commode. At t ent ion
t out efois, comme il s'agit d'un fichier t ext e, t out est st ocké en caract ère. Il faudra donc convert ir
en numérique les caract ères représent ant les vent es, pour pouvoir effect uer les calculs demandés.
Pour le t rait ement , il y a deux possibilit és. Soit on recopie le fichier à l'ident ique dans un premier
t ableau, et on t rait e ensuit e ce t ableau pour faire la somme par vendeur. Soit on fait le t rait ement
direct ement , dès la lect ure du fichier. C'est cet t e opt ion qui est choisie dans ce corrigé.
Structure Vendeur
Nom en Caractère * 20
Montant en Numérique
Fin Structure
Tableau MesVendeurs() en Vendeur
Variables NomPrec * 20, Lig, Nom en caractère
Variables Somme, Vente en Numérique
On balaye le fichier en faisant nos addit ions.
Dès que le nom a changé (on est passé au vendeur suivant ), on range le résult at et on remet t out à
zéro
www.tri.on.ma
55
Debut
Ouvrir "Ventes.txt” sur 1 pour Lecture
i ← -1
Somme ← 0
NomPréc ← ""
Tantque Non EOF(1)
LireFichier 1, Lig
Nom ← Mid(Lig, 1, 20)
Vente ← CNum(Mid(Lig, 21, 10)
Si Nom = NomPrec Alors
Somme ← Somme + Vente
Sinon
i ← i + 1
Redim MesVendeurs(i)
MesVendeurs(i).Nom ← NomPrec
MesVendeurs(i).Montant ← Somme
Somme ← 0
NomPrec ← Nom
FinSi
FinTantQue
Et n'oublions pas un pet it t our de plus pour le dernier de ces messieurs…
i ← i + 1
Redim MesVendeurs(i)
MesVendeurs(i).Nom ← NomPrec
MesVendeurs(i).Montant ← Somme
Fermer 1
Pour t erminer, on affiche le t ableau à l'écran
Pour j ← 0 à i
Ecrire MesVendeurs(j)
j suivant
Fin
PARTIE 11
Enoncé des Exercices
Exercice 11.1
Écrivez une fonct ion qui renvoie la somme de cinq nombres fournis en argument .
Exercice 11.2
www.tri.on.ma
56
Écrivez une fonct ion qui renvoie le nombre de voyelles cont enues dans une chaîne de caract ères
passée en argument . Au passage, not ez qu'une fonct ion a t out à fait le droit d'appeler une aut re
fonct ion.
Exercice 11.3
Réécrivez la fonct ion Trouve, vue précédemment , à l’ aide des fonct ions Mid et Len (comme quoi,
Trouve, à la différence de Mid et Len, n’ est pas une fonct ion indispensable dans un langage).
Exercice 11.2
Fonction NbVoyelles(Mot en Caractère)
Variables i, nb en Numérique
Pour i ← 1 à Len(Mot)
Si Trouve("aeiouy", Mid(Mot, i, 1)) <> 0 Alors
nb ← nb + 1
FinSi
i suivant
Renvoyer nb
FinFonction
Exercice 11.3
Fonction Trouve(a, b)
Variable i en Numérique
Début
i ← 1
TantQue i < Len(a) - Len(b) et b <> Mid(a, i, Len(b))
i ← i + 1
FinTantQue
Si b <> Mid(a, i, Len(b)) Alors
Renvoyer 0
Sinon
Renvoyer i
FinFonction
Fonction ChoixDuMot
Quelques explicat ions : on lit int égralement le fichier cont enant la list e des mot s. Au fur et à
mesure, on range ces mot s dans le t ableau List e, qui est redimensionné à chaque t our de boucle. Un
t irage aléat oire int ervient alors, qui permet de renvoyer un des mot s au hasard.
Fonction ChoixDuMot()
Tableau Liste() en Caractère
Variables Nbmots, Choisi en Numérique
Ouvrir "Dico.txt" sur 1 en Lecture
Nbmots ← -1
Tantque Non EOF(1)
Nbmots ← Nbmots + 1
www.tri.on.ma
57
Redim Liste(Nbmots)
LireFichier 1, Liste(Nbmots)
FinTantQue
Fermer 1
Choisi ← Ent(Alea() * Nbmots)
Renvoyer Liste(Choisi)
FinFonction
Fonction PartieFinie
On commence par vérifier le nombre de mauvaises réponses, mot if de défait e. Ensuit e, on regarde
si la part ie est gagnée, t rait ement qui s’ apparent e à une gest ion de Flag : il suffit que l’ une des
let t res du mot à deviner n’ ait pas ét é t rouvée pour que la part ie ne soit pas gagnée. La fonct ion
aura besoin, comme argument s, du t ableau Verif, de son nombre d’ élément s et du nombre act uel
de mauvaises réponses.
Fonction PartieFinie(t() en Booleen, n, x en Numérique)
Variables i, issue en Numerique
Si x = 10 Alors
Renvoyer 2
Sinon
Issue ← 1
Pour i ← 0 à n
Si Non t(i) Alors
Issue ← 0
FinSi
i suivant
Renvoyer Issue
FinSi
FinFonction
Procédure AffichageMot
Une même boucle nous permet de considérer une par une les let t res du mot à t rouver (variable m),
et de savoir si ces let t res ont ét é ident ifiées ou non.
Procédure AffichageMot(m en Caractère par Valeur, t() en Booléen par Valeur)
Variable Aff en Caractere
Variable i en Numerique
Aff ← ""
Pour i ← 0 à len(m) - 1
Si Non t(i) Alors
Aff ← Aff & "-"
Sinon
Aff ← Aff & Mid(mot, i + 1, 1)
FinSi
i suivant
Ecrire Aff
FinProcédure
Remarque : cet t e procédure aurait également pu êt re écrit e sous la forme d'une fonct ion, qui
aurait renvoyé vers la procédure principale la chaîne de caract ères Aff. L'écrit ure à l'écran de cet t e
chaîne Aff aurait alors ét é fait e par la procédure principale.
Voilà donc une sit uat ion où on peut assez indifféremment opt er pour une sous-procédure ou pour
une fonct ion.
Procédure SaisieLettre
On vérifie que le signe ent ré (paramèt re b) est bien une seule let t re, qui ne figure pas dans les
proposit ions précédemment effect uées (paramèt re a)
www.tri.on.ma
58
Procédure VerifLettre
Les paramèt res se mult iplient … L est la let t re proposée, t () le t ableau de booléens, M le mot à
t rouver et N le nombre de mauvaises proposit ions. Il n’ y a pas de difficult é maj eure dans cet t e
procédure : on examine les let t res de M une à une, et on en t ire les conséquences. Le flag sert à
savoir si la let t re proposée faisait ou non part ie du mot à deviner.
Procédure VerifLettre(L, M en Caractère par Valeur, t() en Booléen par Référence, N
en Numérique par Référence)
Variable Correct en Booleen
Début
Correct ← Faux
Pour i ← 1 à Len(M)
Si Mid(M, i, 1) = L Alors
Correct ← Vrai
T(i - 1) ← Vrai
FinSi
FinTantQue
Si Non Correct Alors
N ← N + 1
FinSi
Fin Procédure
Procédure Epilogue
Procédure Epilogue(M en Caractère par Valeur, N en Numérique par Valeur)
Début
Si N = 2 Alors
Ecrire "Une mauvaise proposition de trop… Partie terminée !"
Ecrire "Le mot à deviner était : ", M
Sinon
Ecrire "Bravo ! Vous avez trouvé !"
FinSi
Fin Procédure
Procédure Principale
Procédure Principale
Variables Lettre, Mot, Propos en Caractere
www.tri.on.ma
59
www.tri.on.ma