Sie sind auf Seite 1von 18

PARTIE 1

Début

CORRIGES DES EXERCICES


D ← C
C ← B
Exercice 1.1 B ← A
Après La valeur des variables est : A ← D
A ← 1 A = 1 B = ? Fin
B ← A + 3 A = 1 B = 4 En fait, quel que soit le nombre de variables, une
A ← 3 A = 3 B = 4 seule variable temporaire suffit…
Exercice 1.2 Exercice 1.8
Après La valeur des variables est : Il ne peut produire qu’une erreur d’exécution,
A ← 5 A = 5 B = ?
puisqu’on ne peut pas additionner des caractères.
C = ?
Exercice 1.9
B ← 3 A = 5 B = 3
…En revanche, on peut les concaténer. A la fin de
C = ?
l’algorithme, C vaudra donc "42312".
C ← A + B A = 5 B = 3
C = 8
A ← 2 A = 2 B = 3
PARTIE 2
C = 8
C ← B – A A = 2 B = 3 C = 1
Exercice 1.3 Exercice 2.1
Après La valeur des variables est : On verra apparaître à l’écran 231, puis 462 (qui vaut
A ← 5 A = 5 B = ? 231 * 2)
B ← A + 4 A = 5 B = 9 Exercice 2.2
A ← A + 1 A = 6 B = 9 Variables nb, carr en Entier
B ← A – 4 A = 6 B = 2 Début
Ecrire "Entrez un nombre :"
Exercice 1.4
Après La valeur des variables est : Lire nb
A ← 3 A = 3 B = ? carr ← nb * nb
C = ? Ecrire "Son carré est : ", carr
B ← 10 A = 3 B = 10 Fin
C = ? En fait, on pourrait tout aussi bien économiser la
C ← A + B A = 3 B = 10 variable carr en remplaçant les deux avant-dernières
C = 13 lignes par :
B ← A + B A = 3 B = 13 Ecrire "Son carré est : ", nb*nb
C = 13 C'est une question de style ; dans un cas, on privilégie
A ← C A = 13 B = 13 C
la lisibilité de l'algorithme, dans l'autre, on privilégie
= 13
l'économie d'une variable.
Exercice 1.5
Après La valeur des variables est : Exercice 2.3
Variables nb, pht, ttva, pttc en Numérique
A ← 5 A = 5 B = ?
Début
B ← 2 A = 5 B = 2
Ecrire "Entrez le prix hors taxes :"
A ← B A = 2 B = 2
Lire pht
B ← A A = 2 B = 2
Ecrire "Entrez le nombre d’articles :"
Les deux dernières instructions ne permettent donc Lire nb
pas d’échanger les deux valeurs de B et A, puisque Ecrire "Entrez le taux de TVA :"
l’une des deux valeurs (celle de A) est ici écrasée. Lire ttva
Si l’on inverse les deux dernières instructions, cela ne pttc ← nb * pht * (1 + ttva)
changera rien du tout, hormis le fait que cette fois Ecrire "Le prix toutes taxes est : ", pttc
c’est la valeur de B qui sera écrasée. Fin
Exercice 1.6 Là aussi, on pourrait squeezer une variable et une
Début ligne en écrivant directement. :
… Ecrire "Le prix toutes taxes est : ", nb *
C ← A pht * (1 + ttva)
A ← B C'est plus rapide, plus léger en mémoire, mais un peu
B ← C
plus difficile à relire (et à écrire !)
Fin
Exercice 2.4
On est obligé de passer par une variable dite Variables t1, t2, t3, t4 en Caractère
temporaire (la variable C). Début
Exercice 1.7 t1 ← "belle Marquise"
t2 ← "vos beaux yeux" Exercice 3.5
t3 ← "me font mourir" Variables m, n en Entier
t4 ← "d’amour" Début
Ecrire t1 & " " & t2 & " " & t3 & " " & t4 Ecrire "Entrez deux nombres : "
Ecrire t3 & " " & t2 & " " & t4 & " " & t1 Lire m, n
Ecrire t2 & " " & t3 & " " & t1 & " " & t4 Si m = 0 OU n = 0 Alors
Ecrire t4 & " " & t1 & " " & t2 & " " & t3 Ecrire "Le produit est nul"
Fin SinonSi (m < 0 ET n < 0) OU (m > 0 ET n > 0)

PARTIE 3
Alors
Ecrire "Le produit est positif"
Sinon
Ecrire "Le produit est négatif"
Finsi
Exercice 3.1
Variable n en Entier Fin
Début Si on souhaite simplifier l’écriture de la condition
Ecrire "Entrez un nombre : " lourde du SinonSi, on peut toujours passer par des
Lire n variables booléennes intermédiaires. Une astuce de
Si n > 0 Alors sioux consiste également à employer un Xor (c'est l'un
Ecrire "Ce nombre est positif”
des rares cas dans lesquels il est pertinent)
Sinon
Exercice 3.6
Ecrire "Ce nombre est négatif" Variable age en Entier
Finsi Début
Fin Ecrire "Entrez l’âge de l’enfant : "
Exercice 3.2 Lire age
Variables m, n en Entier
Si age >= 12 Alors
Début
Ecrire "Catégorie Cadet"
Ecrire "Entrez deux nombres : "
SinonSi age >= 10 Alors
Lire m, n
Ecrire "Catégorie Minime"
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0)
SinonSi age >= 8 Alors
Alors
Ecrire "Catégorie Pupille"
Ecrire "Leur produit est positif"
SinonSi age >= 6 Alors
Sinon
Ecrire "Catégorie Poussin"
Ecrire "Leur produit est négatif"
Finsi
Finsi
Fin
Fin
On peut évidemment écrire cet algorithme de
Exercice 3.3
Variables a, b, c en Caractère différentes façons, ne serait-ce qu’en commençant
Début par la catégorie la plus jeune.
Ecrire "Entrez successivement trois noms : "
Lire a, b, c PARTIE 4
Si a < b ET b < c Alors
Ecrire "Ces noms sont classés
alphabétiquement" Exercice 4.1
Sinon Aucune difficulté, il suffit d’appliquer la règle de la
Ecrire "Ces noms ne sont pas classés" transformation du OU en ET vue en cours (loi de
Finsi Morgan). Attention toutefois à la rigueur dans la
Fin transformation des conditions en leur contraire...
Exercice 3.4 Si Tutu <= Toto + 4 ET Tata <> "OK" Alors
Variable n en Entier Tutu ← Tutu - 1
Début Sinon
Ecrire "Entrez un nombre : " Tutu ← Tutu + 1
Lire n Finsi
Si n < 0 Alors
Exercice 4.2
Ecrire "Ce nombre est négatif" Variables h, m en Numérique
SinonSi n = 0 Alors Début
Ecrire "Ce nombre est nul" Ecrire "Entrez les heures, puis les minutes
Sinon : "
Ecrire "Ce nombre est positif" Lire h, m
Finsi m ← m + 1
Fin Si m = 60 Alors
m ← 0
h ← h + 1 Exercice 4.6
FinSi Cet exercice, du pur point de vue algorithmique, n'est
Si h = 24 Alors pas très méchant. En revanche, il représente
h ← 0 dignement la catégorie des énoncés piégés.
FinSi
En effet, rien de plus facile que d'écrire : si le
Ecrire "Dans une minute il sera ", h,
candidat a plus de 50%, il est élu, sinon s'il a plus de
"heure(s) ", m, "minute(s)"
12,5 %, il est au deuxième tour, sinon il est éliminé.
Fin
Hé hé hé... mais il ne faut pas oublier que le candidat
Exercice 4.3
Variables h, m, s en Numérique peut très bien avoir eu 20 % mais être tout de même
Début éliminé, tout simplement parce que l'un des autres a
Ecrire "Entrez les heures, puis les minutes, fait plus de 50 % et donc qu'il n'y a pas de deuxième
puis les secondes : " tour !...
Lire h, m, s Moralité : ne jamais se jeter sur la programmation
s ← s + 1
avant d'avoir soigneusement mené l'analyse du
Si s = 60 Alors
problème à traiter.
s ← 0
Variables A, B, C, D en Numérique
m ← m + 1
Début
FinSi
Ecrire "Entrez les scores des quatre
Si m = 60 Alors
prétendants :"
m ← 0
Lire A, B, C, D
h ← h + 1
C1 ← A > 50
FinSi
C2 ← B > 50 ou C > 50 ou D > 50
Si h = 24 Alors
C3 ← A >= B et A >= C et A >= D
h ← 0
C4 ← A >= 12,5
FinSi
Si C1 Alors
Ecrire "Dans une seconde il sera ", h, "h",
Ecrire “Elu au premier tour"
m, "m et ", s, "s"
Sinonsi C2 ou Non(C4) Alors
Fin
Ecrire “Battu, éliminé, sorti !!!”
Exercice 4.4 SinonSi C3 Alors
Variables n, p en Numérique
Ecrire "Ballotage favorable"
Début
Sinon
Ecrire "Nombre de photocopies : "
Ecrire "Ballotage défavorable"
Lire n
FinSi
Si n <= 10 Alors
Fin
p ← n * 0,1
SinonSi n <= 30 Alors
p ← 10 * 0,1 + (n – 10) * 0,09 Exercice 4.7
Sinon Là encore, on illustre l'utilité d'une bonne analyse. Je
p ← 10 * 0,1 + 20 * 0,09 + (n – 30) * 0,08 propose deux corrigés différents. Le premier suit
FinSi l'énoncé pas à pas. C'est juste, mais c'est vraiment
Ecrire "Le prix total est: ", p lourd. La deuxième version s'appuie sur une vraie
Fin compréhension d'une situation pas si embrouillée
Exercice 4.5 qu'elle n'en a l'air.
Variable sex en Caractère
Dans les deux cas, un recours aux variables
Variable age en Numérique
booléennes aère sérieusement l'écriture.
Variables C1, C2 en Booléen
Début
Donc, premier corrigé, on suit le texte de l'énoncé
Ecrire "Entrez le sexe (M/F) : " pas à pas :
Lire sex Variables age, perm, acc, assur en Numérique
Ecrire "Entrez l’âge: " Variables C1, C2, C3 en Booléen
Lire age Variable situ en Caractère
C1 ← sex = "M" ET age > 20 Début
C2 ← sex = "F" ET (age > 18 ET age < 35) Ecrire "Entrez l’âge: "
Si C1 ou C2 Alors Lire age
Ecrire "Imposable" Ecrire "Entrez le nombre d'années de permis:
Sinon "
Ecrire "Non Imposable" Lire perm
FinSi Ecrire "Entrez le nombre d'accidents: "
Fin Lire acc
Ecrire "Entrez le nombre d'années
d'assurance: " FinSi
Lire assur Si P = -1 Alors
C1 ← age >= 25 situ ← "Bleu"
C2 ← perm >= 2 SinonSi P = 0 Alors
C3 ← assur > 1 situ ← "Vert"
Si Non(C1) et Non(C2) Alors SinonSi P = 1 Alors
Si acc = 0 Alors situ ← "Orange"
situ ← "Rouge" SinonSi P = 2 Alors
Sinon situ ← "Rouge"
situ ← "Refusé" Sinon
FinSi situ ← "Refusé"
Sinonsi ((Non(C1) et C2) ou (C1 et Non(C2)) FinSi
Alors Ecrire "Votre situation : ", situ
Si acc = 0 Alors Fin
situ ← "Orange" Cool, non ?
SinonSi acc = 1 Alors Exercice 4.8
situ ← "Rouge" En ce qui concerne le début de cet algorithme, il n’y
Sinon a aucune difficulté. C’est de la saisie bête et même
situ ← "Refusé"
pas méchante:
FinSi Variables J, M, A, JMax en Numérique
Sinon Variables VJ, VM, B en Booleen
Si acc = 0 Alors Début
situ ← "Vert" Ecrire "Entrez le numéro du jour"
SinonSi acc = 1 Alors Lire J
situ ← "Orange" Ecrire "Entrez le numéro du mois"
SinonSi acc = 2 Alors Lire M
situ ← "Rouge" Ecrire "Entrez l'année"
Sinon Lire A
situ ← "Refusé"
C'est évidemment ensuite que les ennuis
FinSi
commencent… La première manière d'aborder la
FinSi
Si C3 Alors chose consiste à se dire que fondamentalement, la
Si situ = "Rouge" Alors structure logique de ce problème est très simple. Si
situ ← "Orange" nous créons deux variables booléennes VJ et VM,
SinonSi situ = "Orange" Alors représentant respectivement la validité du jour et du
situ ← "Orange" mois entrés, la fin de l'algorithme sera d'une
SinonSi situ = "Vert" Alors simplicité biblique (l’année est valide par définition,
situ ← "Bleu" si on évacue le débat byzantin concernant l’existence
FinSi
de l’année zéro) :
FinSi
Si VJ et VM alors
Ecrire "Votre situation : ", situ
Ecrire "La date est valide"
Fin
Sinon
Vous trouvez cela compliqué ? Oh, certes oui, ça l'est Ecrire "La date n'est pas valide"
! Et d'autant plus qu'en lisant entre les lignes, on FinSi
pouvait s'apercevoir que ce galimatias de tarifs Toute la difficulté consiste à affecter correctement
recouvre en fait une logique très simple : un système les variables VJ et VM, selon les valeurs des variables
à points. Et il suffit de comptabiliser les points pour J, M et A. Dans l'absolu, VJ et VM pourraient être les
que tout s'éclaire... Reprenons juste après objets d'une affectation monstrueuse, avec des
l'affectation des trois variables booléennes C1, C2, et conditions atrocement composées. Mais franchement,
C3. On écrit : écrire ces conditions en une seule fois est un travail
P ← 0 de bénédictin sans grand intérêt. Pour éviter d'en
Si Non(C1) Alors
arriver à une telle extrémité, on peut sérier la
P ← P + 1
difficulté en créant deux variables supplémentaires :
FinSi
Si Non(C2) Alors
P ← P + 1 B : variable booléenne qui indique s'il s'agit d'une
FinSi année bissextile
P ← P + acc JMax : variable numérique qui indiquera le dernier
Si P < 3 et C3 Alors jour valable pour le mois entré.
P ← P - 1
Avec tout cela, on peut y aller et en ressortir vivant. Sinon
On commence par initialiser nos variables Si J < 1 ou J > 28 Alors
booléennes, puis on traite les années, puis les mois, Ecrire "Date Invalide"
Sinon
puis les jours.
Ecrire "Date Valide"
On note "dp" la condition "divisible par" :
FinSi
B ← A dp 400 ou (non(A dp 100) et A dp 4)
FinSi
Jmax ← 0
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11
VM ← M >= 1 et M =< 12
Alors
Si VM Alors
Si J < 1 ou J > 30 Alors
Si M = 2 et B Alors
Ecrire "Date Invalide"
JMax ← 29
Sinon
SinonSi M = 2 Alors
Ecrire "Date Valide"
JMax ← 28
FinSi
SinonSi M = 4 ou M = 6 ou M = 9 ou M = 11
Sinon
Alors
Si J < 1 ou J > 31 Alors
JMax ← 30
Ecrire "Date Invalide"
Sinon
Sinon
JMax ← 31
Ecrire "Date Valide"
FinSi
FinSi
VJ ← J >= 1 et J =< Jmax
FinSi
FinSi
On voit que dans ce cas, l'alternative finale (Date
Cette solution a le mérite de ne pas trop compliquer
valide ou invalide) se trouve répétée un grand
la structure des tests, et notamment de ne pas
nombre de fois. Ce n'est en soi ni une bonne, ni une
répéter l'écriture finale à l'écran. Les variables
mauvaise chose. C'est simplement une question de
booléennes intermédiaires nous épargnent des
choix stylistique.
conditions composées trop lourdes, mais celles-ci
Personnellement, j'avoue préférer assez nettement la
restent néanmoins sérieuses.
première solution, qui fait ressortir beaucoup plus
clairement la structure logique du problème (il n'y a
Une approche différente consisterait à limiter les
qu'une seule alternative, autant que cette alternative
conditions composées, quitte à le payer par une
ne soit écrite qu'une seule fois).
structure beaucoup plus exigeante de tests
imbriqués. Là encore, on évite de jouer les
Il convient enfin de citer une solution très simple et
extrémistes et l'on s'autorise quelques conditions
élégante, un peu plus difficile peut-être à imaginer
composées lorsque cela nous simplifie l'existence. On
du premier coup, mais qui avec le recul apparaît
pourrait aussi dire que la solution précédente "part
comme très immédiate. Sur le fond, cela consiste à
de la fin" du problème (la date est elle valide ou non
dire qu'il y a quatre cas pour qu'une date soit valide :
?), alors que celle qui suit "part du début" (quelles
celui d'un jour compris entre 1 et 31 dans un mois à
sont les données entrées au clavier ?) :
31 jours, celui d'un jour compris entre 1 et 30 dans un
Si M < 1 ou M > 12 Alors
Ecrire "Date Invalide" mois à 30 jours, celui d'un jour compris entre 1 et 29
SinonSi M = 2 Alors en février d'une année bissextile, et celui d'un jour de
Si A dp 400 Alors février compris entre 1 et 28. Ainsi :
Si J < 1 ou J > 29 Alors B ← (A dp 4 et Non(A dp 100)) ou A dp 400
Ecrire "Date Invalide" K1 ← (m=1 ou m=3 ou m=5 ou m=7 ou m=8 ou
Sinon m=10 ou m=12) et (J>=1 et J=<31)
Ecrire "Date Valide" K2 ← (m=4 ou m=6 ou m=9 ou m=11) et (J>=1 et
FinSi J=<30)
SinonSi A dp 100 Alors K3 ← m=2 et B et J>=1 et J=<29
Si J < 1 ou J > 28 Alors K4 ← m=2 et J>=1 et J=<28
Ecrire "Date Invalide" Si K1 ou K2 ou K3 ou K4 Alors
Sinon Ecrire "Date valide"
Ecrire "Date Valide" Sinon
FinSi Ecrire "Date non valide"
SinonSi A dp 4 Alors FinSi
Si J < 1 ou J > 28 Alors Fin
Ecrire "Date Invalide" Tout est alors réglé avec quelques variables
Sinon booléennes et quelques conditions composées, en un
Ecrire "Date Valide" minimum de lignes de code.
FinSi
La morale de ce long exercice - et non moins long Som ← 0
corrigé, c'est qu'un problème de test un peu Pour i ← 1 à N
compliqué admet une pléiade de solutions justes... Som ← Som + i
i Suivant
...Mais que certaines sont plus astucieuses que
Ecrire "La somme est : ", Som
d'autres !
Fin

PARTIE 5 Exercice 5.6


Variables N, i, F en Entier
Debut
Ecrire "Entrez un nombre : "
Exercice 5.1 Lire N
Variable N en Entier F ← 1
Debut Pour i ← 2 à N
N ← 0 F ← F * i
Ecrire "Entrez un nombre entre 1 et 3" i Suivant
TantQue N < 1 ou N > 3 Ecrire "La factorielle est : ", F
Lire N Fin
Si N < 1 ou N > 3 Alors
Exercice 5.7
Ecrire "Saisie erronée. Recommencez” Variables N, i, PG en Entier
FinSi Debut
FinTantQue PG ← 0
Fin Pour i ← 1 à 20
Exercice 5.2 Ecrire "Entrez un nombre : "
Variable N en Entier Lire N
Debut Si i = 1 ou N > PG Alors
N ← 0 PG ← N
Ecrire "Entrez un nombre entre 10 et 20" FinSi
TantQue N < 10 ou N > 20 i Suivant
Lire N Ecrire "Le nombre le plus grand était : ",
Si N < 10 Alors PG
Ecrire "Plus grand !" Fin
SinonSi N > 20 Alors
En ligne 3, on peut mettre n’importe quoi dans PG, il
Ecrire "Plus petit !"
suffit que cette variable soit affectée pour que le
FinSi
FinTantQue premier passage en ligne 7 ne provoque pas d'erreur.
Fin
Exercice 5.3 Pour la version améliorée, cela donne :
Variables N, i en Entier Variables N, i, PG, IPG en Entier
Debut Debut
Ecrire "Entrez un nombre : " PG ← 0
Lire N Pour i ← 1 à 20
Ecrire "Les 10 nombres suivants sont : " Ecrire "Entrez un nombre : "
Pour i ← N + 1 à N + 10 Lire N
Ecrire i Si i = 1 ou N > PG Alors
i Suivant PG ← N
Fin IPG ← i
Exercice 5.4 FinSi
Variables N, i en Entier i Suivant
Debut Ecrire "Le nombre le plus grand était : ",
Ecrire "Entrez un nombre : " PG
Lire N Ecrire "Il a été saisi en position numéro ",
Ecrire "La table de multiplication de ce IPG
nombre est : " Fin
Pour i ← 1 à 10 Exercice 5.8
Ecrire N, " x ", i, " = ", n*i Variables N, i, PG, IPG en Entier
i Suivant Debut
Fin N ← 1
Exercice 5.5 i ← 0
Variables N, i, Som en Entier PG ← 0
Debut TantQue N <> 0
Ecrire "Entrez un nombre : " Ecrire "Entrez un nombre : "
Lire N Lire N
i ← i + 1 Pour i ← 2 à P
Si i = 1 ou N > PG Alors Déno2 ← Déno2 * i
PG ← N i Suivant
IPG ← i Ecrire "Dans l’ordre, une chance sur ", Numé
FinSi / Déno1
FinTantQue Ecrire "Dans le désordre, une sur ", Numé /
Ecrire "Le nombre le plus grand était : ", (Déno1 * Déno2)
PG Fin
Ecrire "Il a été saisi en position numéro ", Cette version, formellement juste, comporte tout de
IPG même deux faiblesses.
Fin
Exercice 5.9 La première, et la plus grave, concerne la manière
Variables FF, somdue, M, IPG, Reste, Nb10F,
Nb5F En Entier
dont elle calcule le résultat final. Celui-ci est le
Debut quotient d'un nombre par un autre ; or, ces nombres
E ← 1 auront rapidement tendance à être très grands. En
somdue ← 0 calculant, comme on le fait ici, d'abord le
TantQue E <> 0 numérateur, puis ensuite le dénominateur, on prend
Ecrire "Entrez le montant : " le risque de demander à la machine de stocker des
Lire E nombres trop grands pour qu'elle soit capable de les
somdue ← somdue + E
coder (cf. le préambule). C'est d'autant plus bête que
FinTantQue
rien ne nous oblige à procéder ainsi : on n'est pas
Ecrire "Vous devez :", E, " euros"
obligé de passer par la division de deux très grands
Ecrire "Montant versé :"
Lire M nombres pour obtenir le résultat voulu.
Reste ← M - E
Nb10E ← 0 La deuxième remarque est qu'on a programmé ici
TantQue Reste >= 10 trois boucles successives. Or, en y regardant bien, on
Nb10E ← Nb10E + 1 peut voir qu'après simplification de la formule, ces
Reste ← Reste – 10 trois boucles comportent le même nombre de tours !
FinTantQue (si vous ne me croyez pas, écrivez un exemple de
Nb5E ← 0
calcul et biffez les nombres identiques au numérateur
Si Reste >= 5
et au dénominateur). Ce triple calcul (ces trois
Nb5E ← 1
Reste ← Reste – 5
boucles) peut donc être ramené(es) à un(e) seul(e).
FinSi Et voilà le travail, qui est non seulement bien plus
Ecrire "Rendu de la monnaie :" court, mais aussi plus performant :
Ecrire "Billets de 10 E : ", Nb10E Variables N, P, i, O, F en Entier
Ecrire "Billets de 5 E : ", Nb5E Debut
Ecrire "Pièces de 1 E : ", reste Ecrire "Entrez le nombre de chevaux partants
Fin : "
Exercice 5.10 Lire N
Spontanément, on est tenté d'écrire l'algorithme Ecrire "Entrez le nombre de chevaux joués :
suivant : "
Variables N, P, i, Numé, Déno1, Déno2 en Lire P
Entier A ← 1
Debut Ecrire "Entrez le nombre de chevaux B ← 1
partants : " Pour i ← 1 à P
Lire N A ← A * (i + N - P)
Ecrire "Entrez le nombre de chevaux joués : B ← B * i
" i Suivant
Lire P Ecrire "Dans l’ordre, une chance sur ", A
Numé ← 1 Ecrire "Dans le désordre, une chance sur ",
Pour i ← 2 à N A / B
Numé ← Numé * i Fin
i Suivant
Déno1 ← 1
Pour i ← 2 à N-P
Déno1 ← Déno1 * i
i Suivant
Déno2 ← 1
PARTIE 6 Exercice 6.7
Variable S en Numérique
Tableau Notes(8) en Numérique
Debut
s ← 0
Exercice 6.1
Tableau Truc(6) en Numérique Pour i ← 0 à 8
Variable i en Numérique Ecrire "Entrez la note n° ", i + 1
Debut Lire Notes(i)
Pour i ← 0 à 6 s ← s + Notes(i)
Truc(i) ← 0 i Suivant
i Suivant Ecrire "Moyenne :", s/9
Fin Fin
Exercice 6.2 Exercice 6.8
Tableau Truc(5) en Caractère Variables Nb, Nbpos, Nbneg en Numérique
Debut Tableau T() en Numérique
Truc(0) ← "a" Debut
Truc(1) ← "e" Ecrire "Entrez le nombre de valeurs :"
Truc(2) ← "i" Lire Nb
Truc(3) ← "o" Redim T(Nb-1)
Truc(4) ← "u" Nbpos ← 0
Truc(5) ← "y" Nbneg ← 0
Fin Pour i ← 0 à Nb - 1
Exercice 6.3 Ecrire "Entrez le nombre n° ", i + 1
Tableau Notes(8) en Numérique Lire T(i)
Variable i en Numérique Si T(i) > 0 alors
Pour i ← 0 à 8 Nbpos ← Nbpos + 1
Ecrire "Entrez la note numéro ", i + 1 Sinon
Lire Notes(i) Nbneg ← Nbneg + 1
i Suivant Finsi
Fin i Suivant
Exercice 6.4 Ecrire "Nombre de valeurs positives : ",
Cet algorithme remplit un tableau avec six valeurs : Nbpos
0, 1, 4, 9, 16, 25. Ecrire "Nombre de valeurs négatives : ",
Il les écrit ensuite à l’écran. Simplification : Nbneg
Tableau Nb(5) en Numérique Fin
Variable i en Numérique Exercice 6.9
Variables i, Som, N en Numérique
Début
Tableau T() en Numérique
Pour i ← 0 à 5
Debut
Nb(i) ← i * i
Ecrire Nb(i) … (on ne programme pas la saisie du tableau, dont on
i Suivant suppose qu’il compte N éléments)
Fin Redim T(N-1)
Exercice 6.5 …
Cet algorithme remplit un tableau avec les sept Som ← 0
valeurs : 1, 3, 5, 7, 9, 11, 13. Pour i ← 0 à N - 1
Som ← Som + T(i)
Il les écrit ensuite à l’écran. Simplification :
i Suivant
Tableau N(6) en Numérique
Ecrire "Somme des éléments du tableau : ",
Variables i, k en Numérique
Som
Début
Fin
N(0) ← 1
Ecrire N(0) Exercice 6.10
Variables i, N en Numérique
Pour k ← 1 à 6
Tableaux T1(), T2(), T3() en Numérique
N(k) ← N(k-1) + 2
Debut
Ecrire N(k)
k Suivant
… (on suppose que T1 et T2 comptent N éléments, et
Fin qu’ils sont déjà saisis)
Redim T3(N-1)
Exercice 6.6
Cet algorithme remplit un tableau de 8 valeurs : 1, 1, …
Pour i ← 0 à N - 1
2, 3, 5, 8, 13, 21
T3(i) ← T1(i) + T2(i)
i Suivant Ecrire "Entrez le nombre de notes à saisir :
Fin "
Exercice 6.11 Lire Nb
Variables i, j, N1, N2, S en Numérique Redim T(Nb-1)
Tableaux T1(), T2() en Numérique Pour i ← 0 à Nb - 1
Debut Ecrire "Entrez le nombre n° ", i + 1
… On ne programme pas la saisie des tableaux T1 et Lire T(i)
T2. i Suivant
On suppose que T1 possède N1 éléments, et que T2 Som ← 0
Pour i ← 0 à Nb - 1
en possède T2)
… Som ← Som + T(i)
S ← 0 i Suivant
Pour i ← 0 à N1 – 1 Moy ← Som / Nb
Pour j ← 0 à N2 – 1 NbSup ← 0
S ← S + T1(i) * T2(j) Pour i ← 0 à Nb - 1
j Suivant Si T(i) > Moy Alors
i Suivant NbSup ← NbSup + 1
Ecrire "Le schtroumpf est : ", S FinSi
Fin i Suivant
Ecrire NbSup, " élèves dépassent la moyenne
Exercice 6.12
Variables Nb, i en Numérique de la classe"
Tableau T() en Numérique Fin
Debut
Ecrire "Entrez le nombre de valeurs : " PARTIE 7
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1 Exercice 7.1
Ecrire "Entrez le nombre n° ", i + 1 Variables Nb, i en Entier
Lire T(i) Variable Flag en Booleen
i Suivant Tableau T() en Entier
Ecrire "Nouveau tableau : " Debut
Pour i ← 0 à Nb – 1 Ecrire "Entrez le nombre de valeurs :"
T(i) ← T(i) + 1 Lire Nb
Ecrire T(i) Redim T(Nb-1)
i Suivant Pour i ← 0 à Nb - 1
Fin Ecrire "Entrez le nombre n° ", i + 1
Exercice 6.13 Lire T(i)
Variables Nb, Posmaxi en Numérique i Suivant
Tableau T() en Numérique Flag ← Vrai
Ecrire "Entrez le nombre de valeurs :" Pour i ← 1 à Nb - 1
Lire Nb Si T(i) <> T(i – 1) + 1 Alors
Redim T(Nb-1) Flag ← Faux
Pour i ← 0 à Nb - 1 FinSi
Ecrire "Entrez le nombre n° ", i + 1 i Suivant
Lire T(i) Si Flag Alors
i Suivant Ecrire "Les nombres sont consécutifs"
Posmaxi ← 0 Sinon
Pour i ← 0 à Nb - 1 Ecrire "Les nombres ne sont pas
Si T(i) > T(Posmaxi) alors consécutifs"
Posmaxi ← i FinSi
Finsi Fin
i Suivant Cette programmation est sans doute la plus
Ecrire "Element le plus grand : ", spontanée, mais elle présente le défaut d'examiner la
T(Posmaxi) totalité du tableau, même lorsqu'on découvre dès le
Ecrire "Position de cet élément : ", Posmaxi départ deux éléments non consécutifs. Aussi, dans le
Fin
cas d'un grand tableau, est-elle dispendieuse en
Exercice 6.14
Variables Nb, i, Som, Moy, Nbsup en
temps de traitement. Une autre manière de procéder
Numérique serait de sortir de la boucle dès que deux éléments
Tableau T() en Numérique non consécutifs sont détectés. La deuxième partie de
Debut l'algorithme deviendrait donc :
i ← 1 Exercice 7.5
TantQue T(i) = T(i – 1) + 1 et i < Nb - 1 N est le nombre d'éléments du tableau Dico(),
i ← i + 1 contenant les mots du dictionnaire, tableau
FinTantQue préalablement rempli.
Si T(i) = T(i – 1) + 1 Alors Variables Sup, Inf, Comp en Entier
Ecrire "Les nombres sont consécutifs" Variables Fini en Booléen
Sinon Début
Ecrire "Les nombres ne sont pas Ecrire "Entrez le mot à vérifier"
consécutifs" Lire Mot
FinSi
On définit les bornes de la partie du tableau à
Exercice 7.2 considérer
On suppose que N est le nombre d’éléments du Sup ← N - 1
tableau. Tri par insertion : Inf ← 0
… Fini ← Faux
Pour i ← 0 à N - 2 TantQue Non Fini
posmaxi = i
Comp désigne l'indice de l'élément à comparer. En
Pour j ← i + 1 à N - 1
bonne rigueur, il faudra veiller à ce que Comp soit
Si t(j) > t(posmaxi) alors
posmaxi ← j bien un nombre entier, ce qui pourra s'effectuer de
Finsi différentes manières selon les langages.
j suivant Comp ← (Sup + Inf)/2
temp ← t(posmaxi) Si le mot se situe avant le point de comparaison,
t(posmaxi) ← t(i) alors la borne supérieure change, la borne inférieure
t(i) ← temp ne bouge pas.
i suivant Si Mot < Dico(Comp) Alors
Fin Sup ← Comp - 1
Tri à bulles : Sinon, c'est l'inverse
… Sinon
Yapermut ← Vrai Inf ← Comp + 1
TantQue Yapermut FinSi
Yapermut ← Faux Fini ← Mot = Dico(Comp) ou Sup < Inf
Pour i ← 0 à N - 2 FinTantQue
Si t(i) < t(i + 1) Alors Si Mot = Dico(Comp) Alors
temp ← t(i) Ecrire "le mot existe"
t(i) ← t(i + 1) Sinon
t(i + 1) ← temp Ecrire "Il n'existe pas"
Yapermut ← Vrai Finsi
Finsi Fin

PARTIE 8
i suivant
FinTantQue
Fin Exercice 8.1
Exercice 7.3 Tableau Truc(5, 12) en Entier
On suppose que n est le nombre d’éléments du Debut
tableau préalablement saisi Pour i ← 0 à 5
… Pour j ← 0 à 12
Pour i ← 0 à (N-1)/2 Truc(i, j) ← 0
Temp ← T(i) j Suivant
T(i) ← T(N-1-i) i Suivant
T(N-1-i) ← Temp Fin
i suivant Exercice 8.2
Fin Cet algorithme remplit un tableau de la manière
Exercice 7.4 suivante:
… X(0, 0) = 1
Ecrire "Rang de la valeur à supprimer ?" X(0, 1) = 2
Lire S X(0, 2) = 3
Pour i ← S à N-2 X(1, 0) = 4
T(i) ← T(i+1) X(1, 1) = 5
i suivant X(1, 2) = 6
Redim T(N–1) Il écrit ensuite ces valeurs à l’écran, dans cet ordre.
Fin
Exercice 8.3 Pour i ← 0 à 12
Cet algorithme remplit un tableau de la manière Pour j ← 0 à 8
suivante: Si T(i,j) > T(iMax,jMax) Alors
X(0, 0) = 1 iMax ← i
X(1, 0) = 4 jMax ← j
X(0, 1) = 2 FinSi
X(1, 1) = 5 j Suivant
X(0, 2) = 3 i Suivant
X(1, 2) = 6 Ecrire "Le plus grand élément est ", T(iMax,
Il écrit ensuite ces valeurs à l’écran, dans cet ordre. jMax)
Ecrire "Il se trouve aux indices ", iMax, ";
Exercice 8.4
Cet algorithme remplit un tableau de la manière ", jMax
Fin
suivante:
T(0, 0) = 0 Exercice 8.7
Variables i, j , posi, posj, i2, j2 en
T(0, 1) = 1
Entier
T(1, 0) = 1
Variables Correct, MoveOK en Booléen
T(1, 1) = 2
Tableau Damier(7, 7) en Booléen
T(2, 0) = 2
Tableau Mouv(3, 1) en Entier
T(2, 1) = 3
T(3, 0) = 3 Le damier contenant un seul pion, on choisit de le
T(3, 1) = 4 coder à l'économie, en le représentant par un tableau
Il écrit ensuite ces valeurs à l’écran, dans cet ordre. de booléens à deux dimensions. Dans chacun des
Exercice 8.5 emplacements de ce damier, Faux signifie l'absence
Version a : cet algorithme remplit un tableau de la du pion, Vrai sa présence.
manière suivante:
T(0, 0) = 1 Par ailleurs, on emploie une méchante astuce, pas
T(0, 1) = 2 obligatoire, mais bien pratique dans beaucoup de
T(1, 0) = 3 situations. L'idée est de faire correspondre les choix
T(1, 1) = 4
possibles de l'utilisateur avec les mouvements du
T(2, 0) = 5
pion. On entre donc dans un tableau Mouv à deux
T(2, 1) = 6
dimensions, les déplacements du pion selon les
T(3, 0) = 7
T(3, 1) = 8 quatre directions, en prenant soin que chaque ligne
Il écrit ensuite ces valeurs à l’écran, dans cet ordre. du tableau corresponde à une saisie de l’utilisateur.
La première valeur étant le déplacement en i, la
Version b : cet algorithme remplit un tableau de la seconde le déplacement en j. Ceci nous épargnera
manière suivante: par la suite de faire quatre fois les mêmes tests.
T(0, 0) = 1 Debut
T(0, 1) = 5 Choix 0 : pion en haut à droite
T(1, 0) = 2 Mouv(0, 0) ← -1
T(1, 1) = 6 Mouv(0, 1) ← -1
T(2, 0) = 3 Choix 1 : pion en haut à droite
T(2, 1) = 7 Mouv(1, 0) ← -1
T(3, 0) = 4 Mouv(1, 1) ← 1
T(3, 1) = 8 Choix 2 : pion en bas à gauche
Il écrit ensuite ces valeurs à l’écran, dans cet ordre. Mouv(2, 0) ← 1
Exercice 8.6 Mouv(2, 1) ← -1
Variables i, j, iMax, jMax en Numérique Choix 3 : pion en bas à droite
Tableau T(12, 8) en Numérique Mouv(3, 0) ← 1
Le principe de la recherche dans un tableau à deux Mouv(3, 1) ← 1
dimensions est strictement le même que dans un Initialisation du damier; le pion n’est pour le moment
tableau à une dimension, ce qui ne doit pas nous nulle part
étonner. La seule chose qui change, c'est qu'ici le Pour i ← 0 à 7
balayage requiert deux boucles imbriquées, au lieu Pour j ← 0 à 7
Damier(i, j) ← Faux
d'une seule.
Debut j suivant
... i suivant
iMax ← 0 Saisie de la coordonnée en i ("posi") avec contrôle de
jMax ← 0 saisie
PARTIE 9
Correct ← Faux
TantQue Non Correct
Ecrire "Entrez la ligne de votre pion: " Exercice 9.1
Lire posi A ← Sin(B) Aucun problème
Si posi >= 0 et posi <= 7 Alors A ← Sin(A + B * C) Aucun problème
Correct ← vrai B ← Sin(A) – Sin(D) Erreur ! D est en
Finsi caractère
Fintantque D ← Sin(A / B) Aucun problème… si B
Saisie de la coordonnée en j ("posj") avec contrôle de est différent de zéro
saisie C ← Cos(Sin(A) Erreur ! Il manque une
Correct ← Faux parenthèse fermante
TantQue Non Correct Exercice 9.2
Ecrire "Entrez la colonne de votre pion: " Vous étiez prévenus, c'est bête comme chou ! Il suffit
Lire posj de se servir de la fonction Len, et c'est réglé :
Si posj >= 0 et posj <= 7 Alors Variable Mot en Caractère
Correct ← Vrai Variable Nb en Entier
Finsi Debut
Fintantque Ecrire "Entrez un mot : "
Positionnement du pion sur le damier virtuel. Lire Mot
Damier(posi, posj) ← Vrai Nb ← Len(Mot)
Saisie du déplacement, avec contrôle Ecrire "Ce mot compte ", Nb, " lettres"
Ecrire "Quel déplacement ?" Fin
Ecrire " - 0: en haut à gauche" Exercice 9.3
Là, on est obligé de compter par une boucle
Ecrire " - 1: en haut à droite"
le nombre d'espaces de la phrase, et on en
Ecrire " - 2: en bas à gauche"
déduit le nombre de mots. La boucle examine
Ecrire " - 3: en bas à droite"
les caractères de la phrase un par un, du
Correct ← Faux
premier au dernier, et les compare à
TantQue Non Correct
l'espace.
Lire Dep
Variable Bla en Caractère
Si Dep >= 0 et Dep <= 3 Alors
Variables Nb, i en Entier
Correct ← Vrai
Debut
FinSi
Ecrire "Entrez une phrase : "
FinTantQue
Lire Bla
i2 et j2 sont les futures coordonnées du pion. La
Nb ← 0
variable booléenne MoveOK vérifie la validité de ce Pour i ← 1 à Len(Bla)
futur emplacement Si Mid(Bla, i , 1) = " " Alors
i2 ← posi + Mouv(Dep, 0) Nb ← Nb + 1
j2 ← posj + Mouv(Dep, 1) FinSi
MoveOK ← i2 >= 0 et i2 <= 7 et j2 >= 0 et j2 i suivant
<= 7 Ecrire "Cette phrase compte ", Nb + 1, "
Cas où le déplacement est valide mots"
Si MoveOK Alors Fin
Damier(posi, posj) ← Faux Exercice 9.4
Damier(i2, j2) ← Vrai Solution 1 : pour chaque caractère du mot, on pose
Affichage du nouveau damier une très douloureuse condition composée. Le moins
Pour i ← 0 à 7
que l'on puisse dire, c'est que ce choix ne se distingue
Pour j ← 0 à 7
pas par son élégance. Cela dit, il marche, donc après
Si Damier(i, j) Alors
tout, pourquoi pas.
Ecrire " O ";
Variable Bla en Caractère
Sinon
Variables Nb, i, j en Entier
Ecrire " X ";
Debut
FinSi
Ecrire "Entrez une phrase : "
j suivant
Lire Bla
Ecrire ""
Nb ← 0
i suivant
Pour i ← 1 à Len(Bla)
Sinon
Si Mid(Bla, i, 1) = "a" ou Mid(Bla, i, 1)
Cas où le déplacement n’est pas valide
= "e" ou Mid(Bla, i, 1) = "i" ou Mid(Bla, i,
Ecrire "Mouvement impossible"
1) = "o" ou Mid(Bla, i, 1) = "u" ou Mid(Bla,
FinSi
i, 1) = "y" Alors
Fin
Nb ← Nb + 1 Pour cet exercice, il y a une règle générale : pour
FinSi chaque lettre, on détecte sa position dans l'alphabet,
i suivant et on la remplace par la lettre occupant la position
Ecrire "Cette phrase compte ", Nb, "
suivante. Seul cas particulier, la vingt-sixième lettre
voyelles"
(le Z) doit être codée par la première (le A), et non
Fin
par la vingt-septième, qui n'existe pas !
Solution 2 : on stocke toutes les voyelles dans une
Variables Bla, Cod, Alpha en Caractère
chaîne. Grâce à la fonction Trouve, on détecte Variables i, Pos en Entier
immédiatement si le caractère examiné est une Début
voyelle ou non. C'est nettement plus sympathique... Ecrire "Entrez la phrase à coder : "
Variables Bla, Voy en Caractère Lire Bla
Variables Nb, i, j en Entier Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Debut Cod ← ""
Ecrire "Entrez une phrase : " Pour i ← 1 à Len(Bla)
Lire Bla Let ← Mid(Bla, i, 1)
Nb ← 0 Si Let <> "Z" Alors
Voy ← "aeiouy" Pos ← Trouve(Alpha, Let)
Pour i ← 1 à Len(Bla) Cod ← Cod & Mid(Alpha, Pos + 1, 1)
Si Trouve(Voy, Mid(Bla, i, 1)) <> 0 Alors Sinon
Nb ← Nb + 1 Cod ← Cod & "A"
FinSi FinSi
i suivant i Suivant
Ecrire "Cette phrase compte ", Nb, " Bla ← Cod
voyelles" Ecrire "La phrase codée est : ", Bla
Fin Fin
Exercice 9.5 Exercice 9.7
Il n'existe aucun moyen de supprimer directement un Cet algorithme est une généralisation du précédent.
caractère d'une chaîne… autrement qu'en procédant Mais là, comme on ne connaît pas d'avance le
par collage. Il faut donc concaténer ce qui se trouve décalage à appliquer, on ne sait pas a priori combien
à gauche du caractère à supprimer, avec ce qui se de "cas particuliers", à savoir de dépassements au-
trouve à sa droite. Attention aux paramètres des delà du Z, il va y avoir.
fonctions Mid, ils n'ont rien d'évident ! Il faut donc trouver un moyen simple de dire que si
Variable Bla en Caractère on obtient 27, il faut en réalité prendre la lettre
Variables Nb, i, j en Entier
numéro 1 de l'alphabet, que si on obtient 28, il faut
Début
en réalité prendre la numéro 2, etc. Ce moyen simple
Ecrire "Entrez une phrase : "
Lire Bla existe : il faut considérer le reste de la division par
Ecrire "Entrez le rang du caractère à 26, autrement dit le modulo.
supprimer : " Il y a une petite ruse supplémentaire à appliquer,
Lire Nb puisque 26 doit rester 26 et ne pas devenir 0.
L ← Len(Bla) Variable Bla, Cod, Alpha en Caractère
Bla ← Mid(Bla, 1, Nb – 1) & Mid(Bla, Nb + 1, Variables i, Pos, Décal en Entier
L – Nb) Début
Ecrire "La nouvelle phrase est : ", Bla Ecrire "Entrez le décalage à appliquer : "
Fin Lire Décal
Exercice 9.6 Ecrire "Entrez la phrase à coder : "
Sur l'ensemble des exercices de cryptographie, il y a Lire Bla
deux grandes stratégies possibles : Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Cod ← ""
Pour i ← 1 à Len(Bla)
- soit transformer les caractères en leurs codes ASCII.
Let ← Mid(Bla, i, 1)
L'algorithme revient donc ensuite à traiter des
Pos ← Trouve(Alpha, Let)
nombres. Une fois ces nombres transformés, il faut NouvPos ← Mod(Pos + Décal, 26)
les reconvertir en caractères. Si NouvPos = 0 Alors
NouvPos ← 26
- soit en rester au niveau des caractères, et procéder FinSi
directement aux transformations à ce niveau. C'est Cod ← Cod & Mid(Alpha, NouvPos, 1)
cette dernière option qui est choisie ici, et pour tous i Suivant
les exercices de cryptographie à venir. Bla ← Cod
Ecrire "La phrase codée est : ", Bla Let ← Mid(Bla, i, 1)
Fin Pos ← Trouve(Alpha, Let)
Exercice 9.8 NouvPos ← Pos + PosLetClé
Là, c'est assez direct. Si NouvPos > 26 Alors
Variable Bla, Cod, Alpha en Caractère NouvPos ← NouvPos – 26
Variables i, Pos, Décal en Entier FinSi
Début Cod ← Cod & Mid(Alpha, NouvPos, 1)
Ecrire "Entrez l’alphabet clé : " i Suivant
Lire Clé Bla ← Cod
Ecrire "Entrez la phrase à coder : " Ecrire "La phrase codée est : ", Bla
Lire Bla Fin
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Exercice 9.10
Cod ← "" On en revient à des choses plus simples...
Pour i ← 1 à Len(Bla) Variable Nb en Entier
Let ← Mid(Bla, i, 1) Ecrire "Entrez votre nombre : "
Pos ← Trouve(Alpha, Let) Lire Nb
Cod ← Cod & Mid(Clé, Pos, 1) Si Nb/2 = Ent(Nb/2) Alors
i Suivant Ecrire "Ce nombre est pair"
Bla ← Cod Sinon
Ecrire "La phrase codée est : ", Bla Ecrire "Ce nombre est pair"
Fin FinSi
Exercice 9.9 Fin
Le codage de Vigenère n’est pas seulement plus Exercice 9.11
difficile à briser; il est également un peu plus raide à a) Glup ← Alea() * 2
programmer. La difficulté essentielle est de b) Glup ← Alea() * 2 - 1
c) Glup ← Alea() * 0,30 + 1,35
comprendre qu’il faut deux boucles: l’une pour
d) Glup ← Ent(Alea() * 6) + 1
parcourir la phrase à coder, l’autre pour parcourir la
e) Glup ← Alea() * 17 – 10,5
clé. Mais quand on y réfléchit bien, ces deux boucles f) Glup ← Ent(Alea()*6) + Ent(Alea()*6) + 2
ne doivent surtout pas être imbriquées. Et en réalité,
quelle que soit la manière dont on l'écrit, elle n’en PARTIE 10
forment qu’une seule. Exercice 10.1
Variables Alpha, Bla, Cod, Clé, Let en Cet algorithme écrit l'intégralité du fichier
Caractère "Exemple.txt" à l'écran
Variables i, Pos, PosClé, Décal en Entier
Exercice 10.2
Début Variable Truc en Caractère
Ecrire "Entrez la clé : " Variable i en Entier
Lire Clé Debut
Ecrire "Entrez la phrase à coder : " Ouvrir "Exemple.txt" sur 5 en Lecture
Lire Bla Tantque Non EOF(5)
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" LireFichier 5, Truc
Cod ← "" Pour i ← 1 à Len(Truc)
PosClé ← 0 Si Mid(Truc, i, 1) = "/" Alors
Pour i ← 1 à Len(Bla) Ecrire " "
On gère la progression dans la clé. J’ai effectué cela Sinon
"à la main" par une boucle, mais un joli emploi de la Ecrire Mid(Truc, i, 1)
fonction Modulo aurait permis une programmation en FinSi
une seule ligne! i Suivant
Posclé ← Posclé + 1 FinTantQue
Si PosClé > Len(Clé) Alors Fermer 5
PosClé ← 1 Exercice 10.3
FinSi Variables Nom * 20, Prénom * 17, Tel * 10,
Mail * 20, Lig en Caractère
On détermine quelle est la lettre clé et sa position
Debut
dans l’alphabet
Ecrire "Entrez le nom : "
LetClé ← Mid(Clé, PosClé, 1)
Lire Nom
PosLetClé ← Trouve(Alpha, LetClé)
Ecrire "Entrez le prénom : "
On détermine la position de la lettre à coder et le Lire Prénom
décalage à appliquer. Là encore, une solution Ecrire "Entrez le téléphone : "
alternative aurait été d’employer Mod : cela nous Lire Tel
aurait épargné le Si… Ecrire "Entrez le nom : "
Lire Mail Exercice 10.5
Lig ← Nom & Prénom & Tel & Mail C'est un peu du même tonneau que ce qu'on vient de
Ouvrir "Adresse.txt" sur 1 pour Ajout faire, à quelques variantes près. Il y a
EcrireFichier 1, Lig essentiellement une petite gestion de flag pour faire
Fermer 1
bonne mesure.
Fin Structure Bottin
Exercice 10.4 Nom en Caractère * 20
Là, comme indiqué dans le cours, on passe par un Prénom en Caractère * 15
tableau de strutures en mémoire vive, ce qui est la Tel en caractère * 10
technique la plus fréquemment employée. Le tri - qui Mail en Caractère * 20
est en fait un simple test - sera effectué sur le Fin Structure
premier champ (nom). Tableau Mespotes() en Bottin
Structure Bottin Variables MonPote en Bottin
Nom en Caractère * 20 Variables Ancien, Nouveau en Caractère*20
Prénom en Caractère * 15 Variables i, j en Numérique
Tel en Caractère * 10 Variable Trouvé en Booléen
Mail en Caractère * 20 Debut
Fin Structure Ecrire "Entrez le nom à modifier : "
Tableau Mespotes() en Bottin Lire Ancien
Variables MonPote, Nouveau en Bottin Ecrire "Entrez le nouveau nom : "
Variables i, j en Numérique Lire Nouveau
Debut On recopie l'intégralité de "Adresses" dans Fic, tout
Ecrire "Entrez le nom : " en recherchant le clampin. Si on le trouve, on
Lire Nouveau.Nom procède à la modification.
Ecrire "Entrez le prénom : " Ouvrir “Adresse.txt” sur 1 pour Lecture
Lire Nouveau.Prénom i ← -1
Ecrire "Entrez le téléphone : " Trouvé ← Faux
Lire Nouveau.Tel Tantque Non EOF(1)
Ecrire "Entrez le mail : " i ← i + 1
Lire Nouveau.Mail Redim MesPotes(i)
On recopie l'intégralité de "Adresses" dans MesPotes(). LireFichier 1, MonPote
Et après tout, c'est l'occasion : quand on tombe au Si MonPote.Nom = Ancien.Nom Alors
bon endroit, on insère subrepticement notre nouveau Trouvé ← Vrai
copain dans le tableau. MonPote.Nom ← Nouveau
Ouvrir "Adresse.txt" sur 1 pour Lecture FinSi
i ← -1 MesPotes(i) ← MonPote
inséré ← Faux FinTantQue
Tantque Non EOF(1) Fermer 1
i ← i + 1 On recopie ensuite l'intégralité de Fic dans "Adresse"
Redim MesPotes(i) Ouvrir "Adresse.txt" sur 1 pour Ecriture
LireFichier 1, MonPote Pour j ← 0 à i
Si MonPote.Nom > Nouveau.Nom et Non Inséré EcrireFichier 1, MesPotes(j)
Alors j Suivant
MesPotes(i) ← Nouveau Fermer 1
Inséré ← Vrai Et un petit message pour finir !
i ← i + 1 Si Trouvé Alors
Redim MesPotes(i) Ecrire "Modification effectuée"
FinSi Sinon
MesPotes(i) ← MonPote Ecrire "Nom inconnu. Aucune modification
FinTantQue effectuée"
Fermer 1 FinSi
Et le tour est quasiment joué. Il ne reste plus qu'à Fin
rebalancer tel quel l'intégralité du tableau MesPotes Exercice 10.6
dans le fichier, en écrasant l'ancienne version. Là, c'est un tri sur un tableau de structures, rien de
Ouvrir "Adresse.txt" sur 1 pour Ecriture plus facile. Et on est bien content de disposer des
Pour j ← 0 à i structures, autrement dit de ne se coltiner qu'un seul
EcrireFichier 1, MesPotes(j) tableau...
j suivant Structure Bottin Nom en Caractère * 20
Fermer 1 Prénom en Caractère * 15
Fin Tel en caractère * 10
Mail en Caractère * 20 Exercice 10.8
Fin Structure On va éliminer les mauvaises entrées dès la recopie :
Tableau Mespotes() en Bottin si l'enregistrement ne présente pas un mail valide, on
Variables Mini en Bottin l'ignore, sinon on le copie dans le tableau.
Variables i, j en Numérique Structure Bottin
Debut Nom en Caractère * 20
On recopie l'intégralité de "Adresses" dans MesPotes... Prénom en Caractère * 15
Ouvrir "Adresse.txt" sur 1 pour Lecture Tel en caractère * 10
i ← -1 Mail en Caractère * 20
Tantque Non EOF(1) Fin Structure
i ← i + 1 Tableau Mespotes() en Bottin
Redim MesPotes(i) Variable MonPote en Bottin
LireFichier 1, MesPotes(i) Variables i, j en Numérique
FinTantQue Debut
Fermer 1 On recopie "Adresses" dans MesPotes en testant le
On trie le tableau selon l'algorithme de tri par mail...
insertion déjà étudié, en utilisant le champ Nom de la Ouvrir "Adresse.txt" sur 1 pour Lecture
structure : i ← -1
Pour j ← 0 à i - 1 Tantque Non EOF(1)
Mini ← MesPotes(j) LireFichier 1, MonPote
posmini ← j nb ← 0
Pour k ← j + 1 à i Pour i ← 1 à Len(MonPote.Mail)
Si MesPotes(k).Nom < Mini.Nom Alors Si Mid(MonPote.Mail, i, 1) = "@" Alors
mini ← MesPotes(k) nb ← nb + 1
posmini ← k FinSi
Finsi i suivant
k suivant Si nb = 1 Alors
MesPotes(posmini) ← MesPotes(j) i ← i + 1
MesPotes(j) ← Mini Redim MesPotes(i)
j suivant MesPotes(i) ← MonPote
On recopie ensuite l'intégralité du tableau dans FinSi
"Adresse" FinTantQue
Ouvrir "Adresse.txt" sur 1 pour Ecriture Fermer 1
Pour j ← 0 à i On recopie ensuite l'intégralité de Fic dans "Adresse"
EcrireFichier 1, MesPotes(j) Ouvrir "Adresse.txt" sur 1 pour Ecriture
j suivant Pour j ← 0 à i
Fermer 1 EcrireFichier 1, MesPotes(j)
Fin j Suivant
Exercice 10.7 Fermer 1
Bon, celui-là est tellement idiot qu'on n'a même pas Fin
besoin de passer par des tableaux en mémoire vive. Exercice 10.9
Variable Lig en Caractère Une fois de plus, le passage par un tableau de
Début structures est une stratégie commode. Attention
Ouvrir "Tutu.txt" sur 1 pour Ajout toutefois, comme il s'agit d'un fichier texte, tout est
Ouvrir “Toto.txt” sur 2 pour Lecture stocké en caractère. Il faudra donc convertir en
Tantque Non EOF(2) numérique les caractères représentant les ventes,
LireFichier 2, Lig
pour pouvoir effectuer les calculs demandés. Pour le
EcrireFichier 1, Lig
traitement, il y a deux possibilités. Soit on recopie le
FinTantQue
fichier à l'identique dans un premier tableau, et on
Fermer 2
Ouvrir “Tata.txt” sur 3 pour Lecture traite ensuite ce tableau pour faire la somme par
Tantque Non EOF(3) vendeur. Soit on fait le traitement directement, dès
LireFichier 2, Lig la lecture du fichier. C'est cette option qui est choisie
EcrireFichier 1, Lig dans ce corrigé.
FinTantQue Structure Vendeur
Fermer 3 Nom en Caractère * 20
Fermer 1 Montant en Numérique
Fin Fin Structure
Tableau MesVendeurs() en Vendeur
Variables NomPrec * 20, Lig, Nom en
caractère TantQue i < Len(a) - Len(b) et b <> Mid(a,
Variables Somme, Vente en Numérique i, Len(b))
On balaye le fichier en faisant nos additions. i ← i + 1
Dès que le nom a changé (on est passé au vendeur FinTantQue
suivant), on range le résultat et on remet tout à zéro Si b <> Mid(a, i, Len(b)) Alors
Debut Renvoyer 0
Ouvrir "Ventes.txt” sur 1 pour Lecture Sinon
i ← -1 Renvoyer i
Somme ← 0 FinFonction
NomPréc ← "" Fonction ChoixDuMot
Tantque Non EOF(1) Quelques explications : on lit intégralement le fichier
LireFichier 1, Lig contenant la liste des mots. Au fur et à mesure, on
Nom ← Mid(Lig, 1, 20) range ces mots dans le tableau Liste, qui est
Vente ← CNum(Mid(Lig, 21, 10) redimensionné à chaque tour de boucle. Un tirage
Si Nom = NomPrec Alors aléatoire intervient alors, qui permet de renvoyer un
Somme ← Somme + Vente des mots au hasard.
Sinon Fonction ChoixDuMot()
i ← i + 1 Tableau Liste() en Caractère
Redim MesVendeurs(i) Variables Nbmots, Choisi en Numérique
MesVendeurs(i).Nom ← NomPrec Ouvrir "Dico.txt" sur 1 en Lecture
MesVendeurs(i).Montant ← Somme Nbmots ← -1
Somme ← 0 Tantque Non EOF(1)
NomPrec ← Nom Nbmots ← Nbmots + 1
FinSi Redim Liste(Nbmots)
FinTantQue LireFichier 1, Liste(Nbmots)
Et n'oublions pas un petit tour de plus pour le dernier FinTantQue
de ces messieurs… Fermer 1
i ← i + 1 Choisi ← Ent(Alea() * Nbmots)
Redim MesVendeurs(i) Renvoyer Liste(Choisi)
MesVendeurs(i).Nom ← NomPrec FinFonction
MesVendeurs(i).Montant ← Somme Fonction PartieFinie
Fermer 1 On commence par vérifier le nombre de mauvaises
Pour terminer, on affiche le tableau à l'écran réponses, motif de défaite. Ensuite, on regarde si la
Pour j ← 0 à i partie est gagnée, traitement qui s’apparente à une
Ecrire MesVendeurs(j) gestion de Flag : il suffit que l’une des lettres du mot
j suivant
à deviner n’ait pas été trouvée pour que la partie ne
Fin
soit pas gagnée. La fonction aura besoin, comme
PARTIE 11 arguments, du tableau Verif, de son nombre
d’éléments et du nombre actuel de mauvaises
Exercice 11.1
Voilà un début en douceur... réponses.
Fonction Sum(a, b, c, d, e) Fonction PartieFinie(t() en Booleen, n, x en
Renvoyer a + b + c + d + e Numérique)
FinFonction Variables i, issue en Numerique
Si x = 10 Alors
Exercice 11.2
Fonction NbVoyelles(Mot en Caractère) Renvoyer 2
Variables i, nb en Numérique Sinon
Pour i ← 1 à Len(Mot) Issue ← 1
Si Trouve("aeiouy", Mid(Mot, i, 1)) <> 0 Pour i ← 0 à n
Alors Si Non t(i) Alors
nb ← nb + 1 Issue ← 0
FinSi FinSi
i suivant i suivant
Renvoyer nb Renvoyer Issue
FinFonction FinSi
FinFonction
Exercice 11.3
Fonction Trouve(a, b) Procédure AffichageMot
Variable i en Numérique Une même boucle nous permet de considérer une par
Début une les lettres du mot à trouver (variable m), et de
i ← 1 savoir si ces lettres ont été identifiées ou non.
Procédure AffichageMot(m en Caractère par Variable Correct en Booleen
Valeur, t() en Booléen par Valeur) Début
Variable Aff en Caractere Correct ← Faux
Variable i en Numerique Pour i ← 1 à Len(M)
Aff ← "" Si Mid(M, i, 1) = L Alors
Pour i ← 0 à len(m) - 1 Correct ← Vrai
Si Non t(i) Alors T(i - 1) ← Vrai
Aff ← Aff & "-" FinSi
Sinon FinTantQue
Aff ← Aff & Mid(mot, i + 1, 1) Si Non Correct Alors
FinSi N ← N + 1
i suivant FinSi
Ecrire Aff Fin Procédure
FinProcédure Procédure Epilogue
Remarque : cette procédure aurait également pu Procédure Epilogue(M en Caractère par
être écrite sous la forme d'une fonction, qui aurait Valeur, N en Numérique par Valeur)
Début
renvoyé vers la procédure principale la chaîne de
Si N = 2 Alors
caractères Aff. L'écriture à l'écran de cette chaîne Aff
Ecrire "Une mauvaise proposition de trop…
aurait alors été faite par la procédure principale. Partie terminée !"
Voilà donc une situation où on peut assez Ecrire "Le mot à deviner était : ", M
indifféremment opter pour une sous-procédure ou Sinon
pour une fonction. Ecrire "Bravo ! Vous avez trouvé !"
Procédure SaisieLettre FinSi
On vérifie que le signe entré (paramètre b) est bien Fin Procédure
une seule lettre, qui ne figure pas dans les Procédure Principale
propositions précédemment effectuées (paramètre a) Procédure Principale
Procédure SaisieLettre(a, b en Caractère par Variables Lettre, Mot, Propos en Caractere
Référence) Variables g i, MovRep en Numérique
Variable Correct en Booleen Tableau Verif() en Booleen
Variable Alpha en Caractere Début
Début Mot ← ChoixDuMot()
Correct ← Faux Propos ← ""
Alpha ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Lettre ← ""
TantQue Non Correct Redim Verif(Len(Mot)-1)
Ecrire "Entrez la lettre proposée : " Pour i ← 0 à Len(Mot)-1
Lire b Verif(i) ← Faux
Si Trouve(alpha, b) = 0 Ou len(b) <> 1 i suivant
Alors k ← 0
Ecrire "Ce n’est pas une lettre !" Tantque k = 0
SinonSi Trouve(a, b) <> 0 Alors AffichageMot(Mot, Verif())
Ecrire "Lettre déjà proposée !" SaisieLettre(Propos, Lettre)
Sinon VerifLettre(Lettre, Mot, Verif(), MovRep)
Correct ← Vrai k ← PartieFinie(Verif(), len(mot), MovRep)
a ← a & b FinTantQue
FinSi Epilogue(Mot, k)
FinTantQue Fin
Fin Procédure
Procédure VerifLettre
Les paramètres se multiplient… L est la lettre
proposée, t() le tableau de booléens, M le mot à
trouver et N le nombre de mauvaises propositions. Il
n’y a pas de difficulté majeure dans cette
procédure : on examine les lettres de M une à une, et
on en tire les conséquences. Le flag sert à savoir si la
lettre proposée faisait ou non partie 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)

Das könnte Ihnen auch gefallen