PARTIE 1 Enonce des Exercices Exercice 1.

1 Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? 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 instructions suivantes ? Variables A, B, en Entier Début A←! B←3 ←A+B A←2 ←B"A Fin

après exécution des

Exercice 1.3 Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? Variables A, B en Entier Début A←! B←A+# A←A+1 B←A"# Fin Exercice 1.# Quelles seront les valeurs des variables A, B et instructions suivantes ? Variables A, B, en Entier Début A←3 B ← 1$ ←A+B B←A+B

après exécution des

1

A← Fin

Exercice 1.! Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? Variables A, B en Entier Début A←! B←2 A←B B←A Fin %oralité & les deux dernières instructions per'ettent(elles d)éc*an+er les deux valeurs de B et A ? ,i l)on inverse les deux dernières instructions, cela c*an+e(t(il -uel-ue c*ose ? Exercice 1.. /lus di00icile, 'ais c)est un classi-ue absolu, -u)il 0aut absolu'ent 'a1triser & écrire un al+orit*'e per'ettant d)éc*an+er les valeurs de deux variables A et B, et ce -uel -ue soit leur contenu préalable. Exercice 1.2 3ne variante du précédent & on dispose de trois variables A, B et . Ecrive4 un al+orit*'e trans0érant 5 B la valeur de A, 5 la valeur de B et 5 A la valeur de 6tou7ours -uels -ue soient les contenus préalables de ces variables8. Exercice 1.9 Que produit l)al+orit*'e suivant ? Variables A, B, en Caractères Début A ← :#23: B ← :12: ←A+B Fin Exercice 1.; Que produit l)al+orit*'e suivant ? Variables A, B, en Caractères Début A ← :#23: 2

B ← :12: ←A<B Fin

PARTIE 1 Corrigés des Exercices

Exercice 1.1 Après =a valeur des variables est & A←1 A>1 B>? B←A+3 A>1 B># A←3 A=3 =! Exercice 1.2 Après =a valeur des variables est & A←! A>! B>? >? B←3 A>! B>3 >? ←A+B A>! B>3 >9 A←2 A>2 B>3 >9 ←B"A A=" =3 C=1 Exercice 1.3 Après =a valeur des variables est & A←! A>! B>? B←A+# A>! B>; A←A+1 A>. B>; B←A"# A=# =" Exercice 1.# Après =a valeur des variables est & A←3 A>3 B>? >? B ← 1$ A>3 B > 1$ >? ←A+B A>3 B > 1$ > 13 B←A+B A>3 B > 13 > 13 A← A = 13 = 13 C = 13 Exercice 1.!

3

Après =a valeur des variables est & A←! A>! B>? B←2 A>! B>2 A←B A>2 B>2 B←A A=" =" =es deux dernières instructions ne per'ettent donc pas d)éc*an+er les deux valeurs de B et A, puis-ue l)une des deux valeurs 6celle de A8 est ici écrasée. ,i l)on inverse les deux dernières instructions, cela ne c*an+era rien du tout, *or'is le 0ait -ue cette 0ois c)est la valeur de B -ui sera écrasée.

Exercice 1.. Début ? ←A A←B B← Fin @n est obli+é de passer par une variable dite te'poraire 6la variable Exercice 1.2 Début ? A← ←B B←A A←A Fin En 0ait, -uel -ue soit le no'bre de variables, une seule variable te'poraire su00it? Exercice 1.9 Bl ne peut produire -u)une erreur d)exécution, puis-u)on ne peut pas additionner des caractères. Exercice 1.; ?En revanc*e, on peut les concaténer. A la 0in de l)al+orit*'e, donc :#2312:.

8.

vaudra

PARTIE " Enonce des Exercices

4

Exercice 2.1 Quel résultat produit le pro+ra''e suivant ? Cariables val, double nu'éri-ues Aébut Cal ← 231 Aouble ← Cal D 2 Ecrire Cal Ecrire Aouble Ein Exercice 2.2 Ecrire un pro+ra''e -ui de'ande un no'bre 5 l)utilisateur, puis -ui calcule et a00ic*e le carré de ce no'bre.

Exercice 2.3 Ecrire un pro+ra''e -ui lit le prix FG d)un article, le no'bre d)articles et le taux de GCA, et -ui 0ournit le prix total GG correspondant. Eaire en sorte -ue des libellés apparaissent claire'ent. Exercice 2.# Ecrire un al+orit*'e utilisant des variables de tHpe c*a1ne de caractères, et a00ic*ant -uatre variantes possibles de la célèbre I belle 'ar-uise, vos beaux Heux 'e 0ont 'ourir d)a'our J. @n ne se soucie pas de la ponctuation, ni des 'a7uscules. PARTIE " Corrigés des Exercices

Exercice 2.1 @n verra appara1tre 5 l)écran 231, puis #.2 6-ui vaut 231 D 28 Exercice 2.2 Variables nb, carr en Entier Début Ecrire :Entre4 un no'bre &: $ire nb carr ← nb D nb Ecrire :,on carré est & :, carr Fin

5

En 0ait, on pourrait tout aussi bien écono'iser la variable carr en re'plaKant les deux avant(dernières li+nes par & Ecrire :,on carré est & :, nbDnb Lest une -uestion de stHle M dans un cas, on privilé+ie la lisibilité de lLal+orit*'e, dans lLautre, on privilé+ie lLécono'ie dLune variable. Exercice 2.3 Variables nb, p*t, ttva, pttc en %u&éri'ue Début Ecrire :Entre4 le prix *ors taxes &: $ire p*t Ecrire :Entre4 le no'bre d)articles &: $ire nb Ecrire :Entre4 le taux de GCA &: $ire ttva pttc ← nb D p*t D 61 + ttva8 Ecrire :=e prix toutes taxes est & :, pttc Fin =5 aussi, on pourrait s-uee4er une variable et une li+ne en écrivant directe'ent. & Ecrire :=e prix toutes taxes est & :, nb D p*t D 61 + ttva8 Lest plus rapide, plus lé+er en 'é'oire, 'ais un peu plus di00icile 5 relire 6et 5 écrire N8 Exercice 2.# Variables t1, t2, t3, t# en Caractère Début t1 ← :belle %ar-uise: t2 ← :vos beaux Heux: t3 ← :'e 0ont 'ourir: t# ← :d)a'our: Ecrire t1 < : : < t2 < : : < t3 < : : < t# Ecrire t3 < : : < t2 < : : < t# < : : < t1 Ecrire t2 < : : < t3 < : : < t1 < : : < t# Ecrire t# < : : < t1 < : : < t2 < : : < t3 Fin PARTIE 3 Enonce des Exercices

Exercice 3.1 Ecrire un al+orit*'e -ui de'ande un no'bre 5 l)utilisateur, et l)in0or'e ensuite si ce no'bre est positi0 ou né+ati0 6on laisse de cOté le cas oP le no'bre vaut 4éro8.

6

Exercice 3.2 Ecrire un al+orit*'e -ui de'ande deux no'bres 5 l)utilisateur et l)in0or'e ensuite si leur produit est né+ati0 ou positi0 6on laisse de cOté le cas oP le produit est nul8. Attention toute0ois & on ne doit (as calculer le produit des deux no'bres. Exercice 3.3 Ecrire un al+orit*'e -ui de'ande trois no's 5 l)utilisateur et l)in0or'e ensuite s)ils sont ran+és ou non dans l)ordre alp*abéti-ue. Exercice 3.# Ecrire un al+orit*'e -ui de'ande un no'bre 5 l)utilisateur, et l)in0or'e ensuite si ce no'bre est positi0 ou né+ati0 6on inclut cette 0ois le traite'ent du cas oP le no'bre vaut 4éro8. Exercice 3.! Ecrire un al+orit*'e -ui de'ande deux no'bres 5 l)utilisateur et l)in0or'e ensuite si le produit est né+ati0 ou positi0 6on inclut cette 0ois le traite'ent du cas oP le produit peut Qtre nul8. Attention toute0ois, on ne doit pas calculer le produit N Exercice 3.. Ecrire un al+orit*'e -ui de'ande l)R+e d)un en0ant 5 l)utilisateur. Ensuite, il l)in0or'e de sa caté+orie &
• • • •

:/oussin: de . 5 2 ans :/upille: de 9 5 ; ans :%ini'e: de 1$ 5 11 ans : adet: après 12 ans

/eut(on concevoir plusieurs al+orit*'es é-uivalents 'enant 5 ce résultat ? PARTIE 3 Corrigés des Exercices

Exercice 3.1 Variable n en Entier Début Ecrire :Entre4 un no'bre & : $ire n )i n S $ Alors 7

Ecrire : e no'bre est positi0T )inon Ecrire : e no'bre est né+ati0: Finsi Ein Exercice 3.2 Variables ', n en Entier Début Ecrire :Entre4 deux no'bres & : $ire ', n )i 6' S $ EG n S $8 @3 6' U $ EG n U $8 Alors Ecrire :=eur produit est positi0: )inon Ecrire :=eur produit est né+ati0: Finsi Fin Exercice 3.3 Variables a, b, c en Caractère Début Ecrire :Entre4 successive'ent trois no's & : $ire a, b, c )i a U b EG b U c Alors Ecrire : es no's sont classés alp*abéti-ue'ent: )inon Ecrire : es no's ne sont pas classés: Finsi Fin

Exercice 3.# Variable n en Entier Début Ecrire :Entre4 un no'bre & : $ire n )i n U $ Alors Ecrire : e no'bre est né+ati0: )inon)i n > $ Alors Ecrire : e no'bre est nul: )inon Ecrire : e no'bre est positi0: Finsi Fin

8

Exercice 3.! Variables ', n en Entier Début Ecrire :Entre4 deux no'bres & : $ire ', n )i ' > $ @3 n > $ Alors Ecrire :=e produit est nul: )inon)i 6' U $ EG n U $8 @3 6' S $ EG n S $8 Alors Ecrire :=e produit est positi0: )inon Ecrire :=e produit est né+ati0: Finsi Fin ,i on sou*aite si'pli0ier l)écriture de la condition lourde du ,inon,i, on peut tou7ours passer par des variables booléennes inter'édiaires. 3ne astuce de sioux consiste é+ale'ent 5 e'ploHer un Vor 6cLest lLun des rares cas dans les-uels il est pertinent8 Exercice 3.. Variable a+e en Entier Début Ecrire :Entre4 l)R+e de l)en0ant & : $ire a+e )i a+e S> 12 Alors Ecrire : até+orie adet: )inon)i a+e S> 1$ Alors Ecrire : até+orie %ini'e: )inon)i a+e S> 9 Alors Ecrire : até+orie /upille: )inon)i a+e S> . Alors Ecrire : até+orie /oussin: Finsi Fin @n peut évide''ent écrire cet al+orit*'e de di00érentes 0aKons, ne serait( ce -u)en co''enKant par la caté+orie la plus 7eune. PARTIE ! Enonce des Exercices

Exercice #.1 Eor'ule4 un al+orit*'e é-uivalent 5 l)al+orit*'e suivant & )i Gutu S Goto + # @3 Gata > :@W: Alors Gutu ← Gutu + 1 )inon Gutu ← Gutu " 1 Finsi

9

Exercice #.2 et al+orit*'e est destiné 5 prédire lLavenir, et il doit Qtre in0aillible N Bl lira au clavier l)*eure et les 'inutes, et il a00ic*era l)*eure -u)il sera une 'inute plus tard. /ar exe'ple, si lLutilisateur tape 21 puis 32, lLal+orit*'e doit répondre & :Aans une 'inute, il sera 21 *eure6s8 33:. XB & on suppose -ue lLutilisateur entre une *eure valide. /as besoin donc de la véri0ier. Exercice #.3 Ae 'Q'e -ue le précédent, cet al+orit*'e doit de'ander une *eure et en a00ic*er une autre. %ais cette 0ois, il doit +érer é+ale'ent les secondes, et a00ic*er lL*eure -uLil sera une seconde plus tard. /ar exe'ple, si lLutilisateur tape 21, puis 32, puis 9, lLal+orit*'e doit répondre & :Aans une seconde, il sera 21 *eure6s8, 32 'inute6s8 et ; seconde6s8:. XB & l5 encore, on suppose -ue lLutilisateur entre une date valide. Exercice #.# 3n 'a+asin de repro+rap*ie 0acture $,1$ E les dix pre'ières p*otocopies, $,$; E les vin+t suivantes et $,$9 E au(del5. Ecrive4 un al+orit*'e -ui de'ande 5 l)utilisateur le no'bre de p*otocopies e00ectuées et -ui a00ic*e la 0acture correspondante. Exercice #.! =es *abitants de Yor+lub paient l)i'pOt selon les rè+les suivantes &
• • •

les *o''es de plus de 2$ ans paient l)i'pOt les 0e''es paient l)i'pOt si elles ont entre 19 et 3! ans les autres ne paient pas d)i'pOt

=e pro+ra''e de'andera donc l)R+e et le sexe du Yor+lubien, et se prononcera donc ensuite sur le 0ait -ue l)*abitant est i'posable. Exercice #.. =es élections lé+islatives, en Zui+nolerie ,eptentrionale, obéissent 5 la rè+le suivante &
• •

lors-ue lLun des candidats obtient plus de !$[ des su00ra+es, il est élu dès le pre'ier tour. en cas de deuxiè'e tour, peuvent participer uni-ue'ent les candidats aHant obtenu au 'oins 12,![ des voix au pre'ier tour.

Cous deve4 écrire un al+orit*'e -ui per'ette la saisie des scores de -uatre candidats au pre'ier tour. et al+orit*'e traitera ensuite le 10

candidat nu'éro 1 6et uni'ue&ent lui8 & il dira sLil est élu, battu, sLil se trouve en ballotta+e 0avorable 6il participe au second tour en étant arrivé en tQte 5 lLissue du pre'ier tour8 ou dé0avorable 6il participe au second tour sans avoir été en tQte au pre'ier tour8. Exercice #.2 3ne co'pa+nie dLassurance auto'obile propose 5 ses clients -uatre 0a'illes de tari0s identi0iables par une couleur, du 'oins au plus onéreux & tari0s bleu, vert, oran+e et rou+e. =e tari0 dépend de la situation du conducteur &

un conducteur de 'oins de 2! ans et titulaire du per'is depuis 'oins de deux ans, se voit attribuer le tari0 rou+e, si toute0ois il nLa 7a'ais été responsable dLaccident. ,inon, la co'pa+nie re0use de lLassurer. un conducteur de 'oins de 2! ans et titulaire du per'is depuis plus de deux ans, ou de plus de 2! ans 'ais titulaire du per'is depuis 'oins de deux ans a le droit au tari0 oran+e sLil nLa 7a'ais provo-ué dLaccident, au tari0 rou+e pour un accident, sinon il est re0usé. un conducteur de plus de 2! ans titulaire du per'is depuis plus de deux ans béné0icie du tari0 vert sLil nLest 5 lLori+ine dLaucun accident et du tari0 oran+e pour un accident, du tari0 rou+e pour deux accidents, et re0usé au(del5 Ae plus, pour encoura+er la 0idélité des clients acceptés, la co'pa+nie propose un contrat de la couleur i''édiate'ent la plus avanta+euse sLil est entré dans la 'aison depuis plus dLun an.

Ecrire lLal+orit*'e per'ettant de saisir les données nécessaires 6sans contrOle de saisie8 et de traiter ce problè'e. Avant de se lancer 5 corps perdu dans cet exercice, on pourra ré0léc*ir un peu et sLapercevoir -uLil est plus si'ple -uLil nLen a lLair 6cela sLappelle 0aire une analHse N8 Exercice #.9 Ecrive4 un al+orit*'e -ui a près avoir de'andé un nu'éro de 7our, de 'ois et dLannée 5 lLutilisateur, renvoie sLil sLa+it ou non dLune date valide. et exercice est certes d)un 'an-ue d)ori+inalité a00li+eant, 'ais après tout, en al+orit*'i-ue co''e ailleurs, il 0aut conna1tre ses classi-ues N Et -uand on a 0ait cela une 0ois dans sa vie, on apprécie pleine'ent l)existence d)un tHpe nu'éri-ue I date J dans certains lan+a+es?8. Bl nLest sans doute pas inutile de rappeler rapide'ent -ue le 'ois de 0évrier co'pte 29 7ours, sau0 si l)année est bissextile, au-uel cas il en co'pte 2;. =)année est bissextile si elle est divisible par -uatre. Goute0ois, les années divisibles par 1$$ ne sont pas bissextiles, 'ais les années divisibles par #$$ le sont. @u0 N 3n dernier petit détail & vous ne save4 pas, pour l)instant, expri'er correcte'ent en pseudo(code l)idée -u)un no'bre A est divisible par un no'bre B. Aussi, vous vous contentere4 d)écrire en bons télé+rap*istes -ue A divisible par B se dit I A dp B J. 11

PARTIE ! Corrigés des Exercices

Exercice #.1 Aucune di00iculté, il su00it d)appli-uer la rè+le de la trans0or'ation du @3 en EG vue en cours 6loi de %or+an8. Attention toute0ois 5 la ri+ueur dans la trans0or'ation des conditions en leur contraire... )i Gutu U> Goto + # EG Gata US :@W: Alors Gutu ← Gutu ( 1 )inon Gutu ← Gutu + 1 Finsi Exercice #.2 Variables *, ' en %u&éri'ue Début Ecrire :Entre4 les *eures, puis les 'inutes & : $ire *, ' '←'+1 )i ' > .$ Alors '←$ *←*+1 Fin)i )i * > 2# Alors *←$ Fin)i Ecrire :Aans une 'inute il sera :, *, :*eure6s8 :, ', :'inute6s8: Fin Exercice #.3 Variables *, ', s en %u&éri'ue Début Ecrire :Entre4 les *eures, puis les 'inutes, puis les secondes & : $ire *, ', s s←s+1 )i s > .$ Alors s←$ '←'+1 Fin)i )i ' > .$ Alors '←$ *←*+1 12

Fin)i )i * > 2# Alors *←$ Fin)i Ecrire :Aans une seconde il sera :, *, :*:, ', :' et :, s, :s: Fin Exercice #.# Variables n, p en %u&éri'ue Début Ecrire :Xo'bre de p*otocopies & : $ire n )i n U> 1$ Alors p ← n D $,1 )inon)i n U> 3$ Alors p ← 1$ D $,1 + 6n " 1$8 D $,$; )inon p ← 1$ D $,1 + 2$ D $,$; + 6n " 3$8 D $,$9 Fin)i Ecrire :=e prix total est& :, p Fin Exercice #.! Variable sex en Caractère Variable a+e en %u&éri'ue Variables 1, 2 en ooléen Début Ecrire :Entre4 le sexe 6%\E8 & : $ire sex Ecrire :Entre4 l)R+e& : $ire a+e 1 ← sex > :%: EG a+e S 2$ 2 ← sex > :E: EG 6a+e S 19 EG a+e U 3!8 )i 1 ou 2 Alors Ecrire :B'posable: )inon Ecrire :Xon B'posable: Fin)i Fin Exercice #.. et exercice, du pur point de vue al+orit*'i-ue, nLest pas très 'éc*ant. En revanc*e, il représente di+ne'ent la caté+orie des énoncés pié+és. En e00et, rien de plus 0acile -ue dLécrire & si le candidat a plus de !$[, il est élu, sinon sLil a plus de 12,! [, il est au deuxiè'e tour, sinon il est éli'iné. Fé *é *é... 'ais il ne 0aut pas oublier -ue le candidat peut très bien avoir eu 2$ [ 'ais Qtre tout de 'Q'e éli'iné, tout si'ple'ent parce -ue lLun des autres a 0ait plus de !$ [ et donc -uLil nLH a pas de deuxiè'e tour N... 13

%oralité & ne 7a'ais se 7eter sur la pro+ra''ation avant dLavoir soi+neuse'ent 'ené lLanalHse du problè'e 5 traiter. Variables A, B, , A en %u&éri'ue Début Ecrire :Entre4 les scores des -uatre prétendants &: $ire A, B, , A 1 ← A S !$ 2 ← B S !$ ou S !$ ou A S !$ 3 ← A S> B et A S> et A S> A # ← A S> 12,! )i 1 Alors Ecrire ]Elu au pre'ier tour: )inonsi 2 ou Xon6 #8 Alors Ecrire ]Battu, éli'iné, sorti NNNT )inon)i 3 Alors Ecrire :Ballota+e 0avorable: )inon Ecrire :Ballota+e dé0avorable: Fin)i Fin Exercice #.2 =5 encore, on illustre lLutilité dLune bonne analHse. ^e propose deux corri+és di00érents. =e pre'ier suit lLénoncé pas 5 pas. Lest 7uste, 'ais cLest vrai'ent lourd. =a deuxiè'e version sLappuie sur une vraie co'pré*ension dLune situation pas si e'brouillée -uLelle nLen a lLair. Aans les deux cas, un recours aux variables booléennes aère sérieuse'ent lLécriture. Aonc, pre'ier corri+é, on suit le texte de lLénoncé pas 5 pas & Variables a+e, per', acc, assur en %u&éri'ue Variables 1, 2, 3 en ooléen Variable situ en Caractère Début Ecrire :Entre4 l)R+e& : $ire a+e Ecrire :Entre4 le no'bre dLannées de per'is& : $ire per' Ecrire :Entre4 le no'bre dLaccidents& : $ire acc Ecrire :Entre4 le no'bre dLannées dLassurance& : $ire assur 1 ← a+e S> 2! 2 ← per' S> 2 3 ← assur S 1 )i Xon6 18 et Xon6 28 Alors )i acc > $ Alors situ ← :_ou+e: )inon situ ← :_e0usé: 14

Fin)i )inonsi 66Xon6 18 et 28 ou 6 1 et Xon6 288 Alors )i acc > $ Alors situ ← :@ran+e: )inon)i acc > 1 Alors situ ← :_ou+e: )inon situ ← :_e0usé: Fin)i )inon )i acc > $ Alors situ ← :Cert: )inon)i acc > 1 Alors situ ← :@ran+e: )inon)i acc > 2 Alors situ ← :_ou+e: )inon situ ← :_e0usé: Fin)i Fin)i )i 3 Alors )i situ > :_ou+e: Alors situ ← :@ran+e: )inon)i situ > :@ran+e: Alors situ ← :@ran+e: )inon)i situ > :Cert: Alors situ ← :Bleu: Fin)i Fin)i Ecrire :Cotre situation & :, situ Fin Cous trouve4 cela co'pli-ué ? @*, certes oui, Ka lLest N Et dLautant plus -uLen lisant entre les li+nes, on pouvait sLapercevoir -ue ce +ali'atias de tari0s recouvre en 0ait une lo+i-ue très si'ple & un sHstè'e 5 points. Et il su00it de co'ptabiliser les points pour -ue tout sLéclaire... _eprenons 7uste après lLa00ectation des trois variables booléennes 1, 2, et 3. @n écrit & /←$ )i Xon6 18 Alors /←/+1 Fin)i )i Xon6 28 Alors /←/+1 Fin)i / ← / + acc )i / U 3 et 3 Alors /←/(1 Fin)i )i / > (1 Alors situ ← :Bleu: )inon)i / > $ Alors 15

situ ← :Cert: )inon)i / > 1 Alors situ ← :@ran+e: )inon)i / > 2 Alors situ ← :_ou+e: )inon situ ← :_e0usé: Fin)i Ecrire :Cotre situation & :, situ Fin

Exercice #.9 En ce -ui concerne le début de cet al+orit*'e, il n)H a aucune di00iculté. )est de la saisie bQte et 'Q'e pas 'éc*ante& Variables ^, %, A, ^%ax en %u&éri'ue Variables C^, C%, B en ooleen Début Ecrire :Entre4 le nu'éro du 7our: $ire ^ Ecrire :Entre4 le nu'éro du 'ois: $ire % Ecrire :Entre4 lLannée: $ire A Lest évide''ent ensuite -ue les ennuis co''encent? =a pre'ière 'anière dLaborder la c*ose consiste 5 se dire -ue 0onda'entale'ent, la structure lo+i-ue de ce problè'e est très si'ple. ,i nous créons deux variables booléennes C^ et C%, représentant respective'ent la validité du 7our et du 'ois entrés, la 0in de lLal+orit*'e sera dLune si'plicité bibli-ue 6l)année est valide par dé0inition, si on évacue le débat bH4antin concernant l)existence de l)année 4éro8 & )i C^ et C% alors Ecrire :=a date est valide: )inon Ecrire :=a date nLest pas valide: Fin)i Goute la di00iculté consiste 5 a00ecter correcte'ent les variables C^ et C%, selon les valeurs des variables ^, % et A. Aans lLabsolu, C^ et C% pourraient Qtre les ob7ets dLune a00ectation 'onstrueuse, avec des conditions atroce'ent co'posées. %ais 0ranc*e'ent, écrire ces conditions en une seule 0ois est un travail de bénédictin sans +rand intérQt. /our éviter dLen arriver 5 une telle extré'ité, on peut sérier la di00iculté en créant deux variables supplé'entaires & & variable booléenne -ui indi-ue sLil sLa+it dLune année bissextile *+ax & variable nu'éri-ue -ui indi-uera le dernier 7our valable pour le 'ois entré.

16

Avec tout cela, on peut H aller et en ressortir vivant. @n co''ence par initialiser nos variables booléennes, puis on traite les années, puis les 'ois, puis les 7ours. @n note :dp: la condition :divisible par: & B ← A dp #$$ ou 6non6A dp 1$$8 et A dp #8 ^'ax ← $ C% ← % S> 1 et % >U 12 )i C% Alors )i % > 2 et B Alors ^%ax ← 2; )inon)i % > 2 Alors ^%ax ← 29 )inon)i % > # ou % > . ou % > ; ou % > 11 Alors ^%ax ← 3$ )inon ^%ax ← 31 Fin)i C^ ← ^ S> 1 et ^ >U ^'ax Fin)i ette solution a le 'érite de ne pas trop co'pli-uer la structure des tests, et nota''ent de ne pas répéter lLécriture 0inale 5 lLécran. =es variables booléennes inter'édiaires nous épar+nent des conditions co'posées trop lourdes, 'ais celles(ci restent néan'oins sérieuses. 3ne approc*e di00érente consisterait 5 li'iter les conditions co'posées, -uitte 5 le paHer par une structure beaucoup plus exi+eante de tests i'bri-ués. =5 encore, on évite de 7ouer les extré'istes et lLon sLautorise -uel-ues conditions co'posées lors-ue cela nous si'pli0ie lLexistence. @n pourrait aussi dire -ue la solution précédente :part de la 0in: du problè'e 6la date est elle valide ou non ?8, alors -ue celle -ui suit :part du début: 6-uelles sont les données entrées au clavier ?8 & )i % U 1 ou % S 12 Alors Ecrire :Aate Bnvalide: )inon)i % > 2 Alors )i A dp #$$ Alors )i ^ U 1 ou ^ S 2; Alors Ecrire :Aate Bnvalide: )inon Ecrire :Aate Calide: Fin)i )inon)i A dp 1$$ Alors )i ^ U 1 ou ^ S 29 Alors Ecrire :Aate Bnvalide: )inon Ecrire :Aate Calide: Fin)i )inon)i A dp # Alors )i ^ U 1 ou ^ S 29 Alors Ecrire :Aate Bnvalide: )inon 17

Ecrire :Aate Calide: Fin)i )inon )i ^ U 1 ou ^ S 29 Alors Ecrire :Aate Bnvalide: )inon Ecrire :Aate Calide: Fin)i Fin)i )inon)i % > # ou % > . ou % > ; ou % > 11 Alors )i ^ U 1 ou ^ S 3$ Alors Ecrire :Aate Bnvalide: )inon Ecrire :Aate Calide: Fin)i )inon )i ^ U 1 ou ^ S 31 Alors Ecrire :Aate Bnvalide: )inon Ecrire :Aate Calide: Fin)i Fin)i @n voit -ue dans ce cas, lLalternative 0inale 6Aate valide ou invalide8 se trouve répétée un +rand no'bre de 0ois. e nLest en soi ni une bonne, ni une 'auvaise c*ose. Lest si'ple'ent une -uestion de c*oix stHlisti-ue. /ersonnelle'ent, 7Lavoue pré0érer asse4 nette'ent la pre'ière solution, -ui 0ait ressortir beaucoup plus claire'ent la structure lo+i-ue du problè'e 6il nLH a -uLune seule alternative, autant -ue cette alternative ne soit écrite -uLune seule 0ois8. Bl convient en0in de citer une solution très si'ple et élé+ante, un peu plus di00icile peut(Qtre 5 i'a+iner du pre'ier coup, 'ais -ui avec le recul appara1t co''e très i''édiate. ,ur le 0ond, cela consiste 5 dire -uLil H a -uatre cas pour -uLune date soit valide & celui dLun 7our co'pris entre 1 et 31 dans un 'ois 5 31 7ours, celui dLun 7our co'pris entre 1 et 3$ dans un 'ois 5 3$ 7ours, celui dLun 7our co'pris entre 1 et 2; en 0évrier dLune année bissextile, et celui dLun 7our de 0évrier co'pris entre 1 et 29. Ainsi & B ← 6A dp # et Xon6A dp 1$$88 ou A dp #$$ W1 ← 6'>1 ou '>3 ou '>! ou '>2 ou '>9 ou '>1$ ou '>128 et 6^S>1 et ^>U318 W2 ← 6'># ou '>. ou '>; ou '>118 et 6^S>1 et ^>U3$8 W3 ← '>2 et B et ^S>1 et ^>U2; W# ← '>2 et ^S>1 et ^>U29 )i W1 ou W2 ou W3 ou W# Alors Ecrire :Aate valide: )inon Ecrire :Aate non valide: Fin)i Fin

18

Gout est alors ré+lé avec -uel-ues variables booléennes et -uel-ues conditions co'posées, en un 'ini'u' de li+nes de code. =a 'orale de ce lon+ exercice ( et non 'oins lon+ corri+é, cLest -uLun problè'e de test un peu co'pli-ué ad'et une pléiade de solutions 7ustes... ...%ais -ue certaines sont plus astucieuses -ue dLautres N PARTIE , Enonce des Exercices Exercice !.1 Ecrire un al+orit*'e -ui de'ande 5 l)utilisateur un no'bre co'pris entre 1 et 3 7us-u)5 ce -ue la réponse convienne. Exercice !.2 Ecrire un al+orit*'e -ui de'ande un no'bre co'pris entre 1$ et 2$, 7us-u)5 ce -ue la réponse convienne. En cas de réponse supérieure 5 2$, on 0era appara1tre un 'essa+e & I /lus petit N J, et inverse'ent, I /lus +rand N J si le no'bre est in0érieur 5 1$. Exercice !.3 Ecrire un al+orit*'e -ui de'ande un no'bre de départ, et -ui ensuite a00ic*e les dix no'bres suivants. /ar exe'ple, si lLutilisateur entre le no'bre 12, le pro+ra''e a00ic*era les no'bres de 19 5 22.

Exercice !.# Ecrire un al+orit*'e -ui de'ande un no'bre de départ, et -ui ensuite écrit la table de 'ultiplication de ce no'bre, présentée co''e suit 6cas oP lLutilisateur entre le no'bre 28 & Gable de 2 & 2x1>2 2 x 2 > 1# 2 x 3 > 21 ? 2 x 1$ > 2$ Exercice !.! Ecrire un al+orit*'e -ui de'ande un no'bre de départ, et -ui calcule la so''e des entiers 7us-u)5 ce no'bre. /ar exe'ple, si l)on entre !, le pro+ra''e doit calculer & 1 + 2 + 3 + # + ! > 1! XB & on sou*aite a00ic*er uni-ue'ent le résultat, pas la déco'position du calcul.

19

Exercice !.. Ecrire un al+orit*'e -ui de'ande un no'bre de départ, et -ui calcule sa 0actorielle. XB & la 0actorielle de 9, notée 9 N, vaut 1x2x3x#x!x.x2x9 Exercice !.2 Ecrire un al+orit*'e -ui de'ande successive'ent 2$ no'bres 5 l)utilisateur, et -ui lui dise ensuite -uel était le plus +rand par'i ces 2$ no'bres & Entre4 le no'bre nu'éro 1 & 12 Entre4 le no'bre nu'éro 2 & 1# etc. Entre4 le no'bre nu'éro 2$ & . =e plus +rand de ces no'bres est & 1# %odi0ie4 ensuite l)al+orit*'e pour -ue le pro+ra''e a00ic*e de surcro1t en -uelle position avait été saisie ce no'bre & )était le no'bre nu'éro 2 Exercice !.9 _éécrire l)al+orit*'e précédent, 'ais cette 0ois(ci on ne conna1t pas d)avance co'bien l)utilisateur sou*aite saisir de no'bres. =a saisie des no'bres s)arrQte lors-ue l)utilisateur entre un 4éro. Exercice !.; =ire la suite des prix 6en euros entiers et ter'inée par 4éro8 des ac*ats d)un client. alculer la so''e -u)il doit, lire la so''e -u)il paHe, et si'uler la re'ise de la 'onnaie en a00ic*ant les textes :1$ Euros:, :! Euros: et :1 Euro: autant de 0ois -u)il H a de coupures de c*a-ue sorte 5 rendre.

Exercice !.1$ `crire un al+orit*'e -ui per'ette de conna1tre ses c*ances de +a+ner au tiercé, -uarté, -uinté et autres i'pOts volontaires. @n de'ande 5 l)utilisateur le no'bre de c*evaux partants, et le no'bre de c*evaux 7oués. =es deux 'essa+es a00ic*és devront Qtre & Aans l)ordre & une c*ance sur V de +a+ner Aans le désordre & une c*ance sur a de +a+ner V et a nous sont donnés par la 0or'ule suivante, si n est le no'bre de c*evaux partants et p le no'bre de c*evaux 7oués 6on rappelle -ue le si+ne N si+ni0ie :0actorielle:, co''e dans lLexercice !.. ci(dessus8 & V > n N \ 6n ( p8 N a > n N \ 6p N D 6n " p8 N8

20

XB & cet al+orit*'e peut Qtre écrit d)une 'anière si'ple, 'ais relative'ent peu per0or'ante. ,es per0or'ances peuvent Qtre sin+ulière'ent au+'entées par une petite astuce. Cous co''encere4 par écrire la 'anière la plus si'ple, puis vous identi0iere4 le problè'e, et écrire4 une deuxiè'e version per'ettant de le résoudre. PARTIE , Corrigés des Exercices

Exercice !.1 Variable X en Entier Debut X←$ Ecrire :Entre4 un no'bre entre 1 et 3: Tant-ue X U 1 ou X S 3 $ire X )i X U 1 ou X S 3 Alors Ecrire :,aisie erronée. _eco''ence4T Fin)i FinTant-ue Fin Exercice !.2 Variable X en Entier Debut X←$ Ecrire :Entre4 un no'bre entre 1$ et 2$: Tant-ue X U 1$ ou X S 2$ $ire X )i X U 1$ Alors Ecrire :/lus +rand N: )inon)i X S 2$ Alors Ecrire :/lus petit N: Fin)i FinTant-ue Fin Exercice !.3 Variables X, i en Entier Debut Ecrire :Entre4 un no'bre & : $ire X Ecrire :=es 1$ no'bres suivants sont & : Pour i ← X + 1 5 X + 1$ Ecrire i

21

i )ui.ant Fin Exercice !.# Variables X, i en Entier Debut Ecrire :Entre4 un no'bre & : $ire X Ecrire :=a table de 'ultiplication de ce no'bre est & : Pour i ← 1 5 1$ Ecrire X, : x :, i, : > :, nDi i )ui.ant Fin Exercice !.! Variables X, i, ,o' en Entier Debut Ecrire :Entre4 un no'bre & : $ire X ,o' ← $ Pour i ← 1 5 X ,o' ← ,o' + i i )ui.ant Ecrire :=a so''e est & :, ,o' Fin Exercice !.. Variables X, i, E en Entier Debut Ecrire :Entre4 un no'bre & : $ire X E←1 Pour i ← 2 5 X E←EDi i )ui.ant Ecrire :=a 0actorielle est & :, E Fin

Exercice !.2 Variables X, i, /Z en Entier Debut /Z ← $ Pour i ← 1 5 2$ Ecrire :Entre4 un no'bre & : $ire X 22

)i i > 1 ou X S /Z Alors /Z ← X Fin)i i )ui.ant Ecrire :=e no'bre le plus +rand était & :, /Z Fin En li+ne 3, on peut 'ettre n)i'porte -uoi dans /Z, il su00it -ue cette variable soit a00ectée pour -ue le pre'ier passa+e en li+ne 2 ne provo-ue pas dLerreur. /our la version a'éliorée, cela donne & Variables X, i, /Z, B/Z en Entier Debut /Z ← $ Pour i ← 1 5 2$ Ecrire :Entre4 un no'bre & : $ire X )i i > 1 ou X S /Z Alors /Z ← X B/Z ← i Fin)i i )ui.ant Ecrire :=e no'bre le plus +rand était & :, /Z Ecrire :Bl a été saisi en position nu'éro :, B/Z Fin Exercice !.9 Variables X, i, /Z, B/Z en Entier Debut X←1 i←$ /Z ← $ Tant-ue X US $ Ecrire :Entre4 un no'bre & : $ire X i←i+1 )i i > 1 ou X S /Z Alors /Z ← X B/Z ← i Fin)i FinTant-ue Ecrire :=e no'bre le plus +rand était & :, /Z Ecrire :Bl a été saisi en position nu'éro :, B/Z Fin Exercice !.; Variables EE, so'due, %, B/Z, _este, Xb1$E, Xb!E En Entier Debut E←1 so'due ← $ 23

Tant-ue E US $ Ecrire :Entre4 le 'ontant & : $ire E so'due ← so'due + E FinTant-ue Ecrire :Cous deve4 &:, E, : euros: Ecrire :%ontant versé &: $ire % _este ← % ( E Xb1$E ← $ Tant-ue _este S> 1$ Xb1$E ← Xb1$E + 1 _este ← _este " 1$ FinTant-ue Xb!E ← $ )i _este S> ! Xb!E ← 1 _este ← _este " ! Fin)i Ecrire :_endu de la 'onnaie &: Ecrire :Billets de 1$ E & :, Xb1$E Ecrire :Billets de ! E & :, Xb!E Ecrire :/ièces de 1 E & :, reste Fin Exercice !.1$ ,pontané'ent, on est tenté dLécrire lLal+orit*'e suivant & Cariables X, /, i, Xu'é, Aéno1, Aéno2 en Entier Aebut Ecrire :Entre4 le no'bre de c*evaux partants & : $ire X Ecrire :Entre4 le no'bre de c*evaux 7oués & : $ire / Xu'é ← 1 Pour i ← 2 5 X Xu'é ← Xu'é D i i )ui.ant Aéno1 ← 1 Pour i ← 2 5 X(/ Aéno1 ← Aéno1 D i i )ui.ant Aéno2 ← 1 Pour i ← 2 5 / Aéno2 ← Aéno2 D i i )ui.ant Ecrire :Aans l)ordre, une c*ance sur :, Xu'é \ Aéno1 Ecrire :Aans le désordre, une sur :, Xu'é \ 6Aéno1 D Aéno28 Fin

24

ette version, 0or'elle'ent 7uste, co'porte tout de 'Q'e deux 0aiblesses. =a pre'ière, et la plus +rave, concerne la 'anière dont elle calcule le résultat 0inal. elui(ci est le -uotient dLun no'bre par un autre M or, ces no'bres auront rapide'ent tendance 5 Qtre très +rands. En calculant, co''e on le 0ait ici, dLabord le nu'érateur, puis ensuite le déno'inateur, on prend le ris-ue de de'ander 5 la 'ac*ine de stocber des no'bres trop +rands pour -uLelle soit capable de les coder 6c0. le préa'bule8. Lest dLautant plus bQte -ue rien ne nous obli+e 5 procéder ainsi & on nLest pas obli+é de passer par la division de deux très +rands no'bres pour obtenir le résultat voulu. =a deuxiè'e re'ar-ue est -uLon a pro+ra''é ici trois boucles successives. @r, en H re+ardant bien, on peut voir -uLaprès si'pli0ication de la 0or'ule, ces trois boucles co'portent le 'Q'e no'bre de tours N 6si vous ne 'e croHe4 pas, écrive4 un exe'ple de calcul et bi00e4 les no'bres identi-ues au nu'érateur et au déno'inateur8. e triple calcul 6ces trois boucles8 peut donc Qtre ra'ené6es8 5 un6e8 seul6e8. Et voil5 le travail, -ui est non seule'ent bien plus court, 'ais aussi plus per0or'ant & Variables X, /, i, @, E en Entier Debut Ecrire :Entre4 le no'bre de c*evaux partants & : $ire X Ecrire :Entre4 le no'bre de c*evaux 7oués & : $ire / A←1 B←1 Pour i ← 1 5 / A ← A D 6i + X ( /8 B←BDi i )ui.ant Ecrire :Aans l)ordre, une c*ance sur :, A Ecrire :Aans le désordre, une c*ance sur :, A \ B Fin PARTIE # Enonce des Exercices

Exercice ..1 Ecrire un al+orit*'e -ui déclare et re'plisse un tableau de 2 valeurs nu'éri-ues en les 'ettant toutes 5 4éro. Exercice ..2 Ecrire un al+orit*'e -ui déclare et re'plisse un tableau contenant les six voHelles de l)alp*abet latin. 25

Exercice ..3 Ecrire un al+orit*'e -ui déclare un tableau de ; notes, dont on 0ait ensuite saisir les valeurs par l)utilisateur. Exercice ..# Que produit l)al+orit*'e suivant ? Tableau Xb6!8 en Entier Variable i en Entier Début Pour i ← $ 5 ! Xb6i8 ← i D i i sui.ant Pour i ← $ 5 ! Ecrire Xb6i8 i sui.ant Fin /eut(on si'pli0ier cet al+orit*'e avec le 'Q'e résultat ? Exercice ..! Que produit l)al+orit*'e suivant ? Tableau X6.8 en Entier Variables i, b en Entier Début X6$8 ← 1 Pour b ← 1 5 . X6b8 ← X6b(18 + 2 b )ui.ant Pour i ← $ 5 . Ecrire X6i8 i sui.ant Fin /eut(on si'pli0ier cet al+orit*'e avec le 'Q'e résultat ? Exercice ... Que produit l)al+orit*'e suivant ? Tableau ,uite628 en Entier Variable i en Entier Début ,uite6$8 ← 1 ,uite618 ← 1 Pour i ← 2 5 2 ,uite6i8 ← ,uite6i(18 + ,uite6i(28 i sui.ant Pour i ← $ 5 2 26

Ecrire ,uite6i8 i sui.ant Fin Exercice ..2 Ecrive4 la 0in de l)al+orit*'e ..3 a0in -ue le calcul de la 'oHenne des notes soit e00ectué et a00ic*é 5 l)écran. Exercice ..9 Ecrive4 un al+orit*'e per'ettant 5 l)utilisateur de saisir un no'bre -uelcon-ue de valeurs, -ui devront Qtre stocbées dans un tableau. =)utilisateur doit donc co''encer par entrer le no'bre de valeurs -u)il co'pte saisir. Bl e00ectuera ensuite cette saisie. En0in, une 0ois la saisie ter'inée, le pro+ra''e a00ic*era le no'bre de valeurs né+atives et le no'bre de valeurs positives. Exercice ..; Ecrive4 un al+orit*'e calculant la so''e des valeurs d)un tableau 6on suppose -ue le tableau a été préalable'ent saisi8. Exercice ..1$ Ecrive4 un al+orit*'e constituant un tableau, 5 partir de deux tableaux de 'Q'e lon+ueur préalable'ent saisis. =e nouveau tableau sera la so''e des élé'ents des deux tableaux de départ. Gableau 1 & # Gableau 2 & 2 . ! 2 1 3 2 # 9 2 ; 1 ! # .

Gableau 5 constituer & 11 1# 12 11 2 9 11 1$

Exercice ..11 Gou7ours 5 partir de deux tableaux précéde''ent saisis, écrive4 un al+orit*'e -ui calcule le sc*trou'p0 des deux tableaux. /our calculer le sc*trou'p0, il 0aut 'ultiplier c*a-ue élé'ent du tableau 1 par c*a-ue élé'ent du tableau 2, et additionner le tout. /ar exe'ple si lLon a & Gableau 1 & # Gableau 2 & 9 2 12

27

3

.

=e ,c*trou'p0 sera & 3 D # + 3 D 9 + 3 D 2 + 3 D 12 + . D # + . D 9 + . D 2 + . D 12 > 22; Exercice ..12 Ecrive4 un al+orit*'e -ui per'ette la saisie d)un no'bre -uelcon-ue de valeurs, sur le principe de l)ex ..9. Goutes les valeurs doivent Qtre ensuite au+'entées de 1, et le nouveau tableau sera a00ic*é 5 l)écran. Exercice ..13 Ecrive4 un al+orit*'e per'ettant, tou7ours sur le 'Q'e principe, 5 l)utilisateur de saisir un no'bre déter'iné de valeurs. =e pro+ra''e, une 0ois la saisie ter'inée, renvoie la plus +rande valeur en précisant -uelle position elle occupe dans le tableau. @n prendra soin d)e00ectuer la saisie dans un pre'ier te'ps, et la rec*erc*e de la plus +rande valeur du tableau dans un second te'ps. Exercice ..1# Gou7ours et encore sur le 'Q'e principe, écrive4 un al+orit*'e per'ettant, 5 l)utilisateur de saisir les notes dLune classe. =e pro+ra''e, une 0ois la saisie ter'inée, renvoie le no'bre de ces notes supérieures 5 la 'oHenne de la classe. Partie # Corrigés des Exercices

Exercice ..1 Tableau Gruc6.8 en %u&éri'ue Variable i en %u&éri'ue Debut Pour i ← $ 5 . Gruc6i8 ← $ i )ui.ant Fin Exercice ..2 Tableau Gruc6!8 en Caractère Debut Gruc6$8 ← :a: Gruc618 ← :e: Gruc628 ← :i: Gruc638 ← :o:

28

Gruc6#8 ← :u: Gruc6!8 ← :H: Fin Exercice ..3 Tableau Xotes698 en %u&éri'ue Variable i en %u&éri'ue Pour i ← $ 5 9 Ecrire :Entre4 la note nu'éro :, i + 1 $ire Xotes6i8 i )ui.ant Fin

Exercice ..# et al+orit*'e re'plit un tableau avec six valeurs & $, 1, #, ;, 1., 2!. Bl les écrit ensuite 5 l)écran. ,i'pli0ication & Tableau Xb6!8 en %u&éri'ue Variable i en %u&éri'ue Début Pour i ← $ 5 ! Xb6i8 ← i D i Ecrire Xb6i8 i )ui.ant Fin Exercice ..! et al+orit*'e re'plit un tableau avec les sept valeurs & 1, 3, !, 2, ;, 11, 13. Bl les écrit ensuite 5 l)écran. ,i'pli0ication & Tableau X6.8 en %u&éri'ue Variables i, b en %u&éri'ue Début X6$8 ← 1 Ecrire X6$8 Pour b ← 1 5 . X6b8 ← X6b(18 + 2 Ecrire X6b8 b )ui.ant Fin Exercice ... et al+orit*'e re'plit un tableau de 9 valeurs & 1, 1, 2, 3, !, 9, 13, 21 Exercice ..2 29

Variable , en %u&éri'ue Tableau Xotes698 en %u&éri'ue Debut s←$ Pour i ← $ 5 9 Ecrire :Entre4 la note nc :, i + 1 $ire Xotes6i8 s ← s + Xotes6i8 i )ui.ant Ecrire :%oHenne &:, s\; Fin Exercice ..9 Variables Xb, Xbpos, Xbne+ en %u&éri'ue Tableau G68 en %u&éri'ue Debut Ecrire :Entre4 le no'bre de valeurs &: $ire Xb Redi& G6Xb(18 Xbpos ← $ Xbne+ ← $ Pour i ← $ 5 Xb ( 1 Ecrire :Entre4 le no'bre nc :, i + 1 $ire G6i8 )i G6i8 S $ alors Xbpos ← Xbpos + 1 )inon Xbne+ ← Xbne+ + 1 Finsi i )ui.ant Ecrire :Xo'bre de valeurs positives & :, Xbpos Ecrire :Xo'bre de valeurs né+atives & :, Xbne+ Fin Exercice ..; Variables i, ,o', X en %u&éri'ue Tableau G68 en %u&éri'ue Debut ? 6on ne pro+ra''e pas la saisie du tableau, dont on suppose -u)il co'pte X élé'ents8 Redi& G6X(18 ? ,o' ← $ Pour i ← $ 5 X ( 1 ,o' ← ,o' + G6i8 i )ui.ant Ecrire :,o''e des élé'ents du tableau & :, ,o' Fin 30

Exercice ..1$ Variables i, X en %u&éri'ue Tableaux G168, G268, G368 en %u&éri'ue Debut ? 6on suppose -ue G1 et G2 co'ptent X élé'ents, et -u)ils sont dé75 saisis8 Redi& G36X(18 ? Pour i ← $ 5 X ( 1 G36i8 ← G16i8 + G26i8 i )ui.ant Fin Exercice ..11 Variables i, 7, X1, X2, , en %u&éri'ue Tableaux G168, G268 en %u&éri'ue Debut ? @n ne pro+ra''e pas la saisie des tableaux G1 et G2. @n suppose -ue G1 possède X1 élé'ents, et -ue G2 en possède G28 ? ,←$ Pour i ← $ 5 X1 " 1 Pour 7 ← $ 5 X2 " 1 , ← , + G16i8 D G2678 7 )ui.ant i )ui.ant Ecrire :=e sc*trou'p0 est & :, , Fin Exercice ..12 Variables Xb, i en %u&éri'ue Tableau G68 en %u&éri'ue Debut Ecrire :Entre4 le no'bre de valeurs & : $ire Xb Redi& G6Xb(18 Pour i ← $ 5 Xb ( 1 Ecrire :Entre4 le no'bre nc :, i + 1 $ire G6i8 i )ui.ant Ecrire :Xouveau tableau & : Pour i ← $ 5 Xb " 1 G6i8 ← G6i8 + 1 Ecrire G6i8 i )ui.ant Fin 31

Exercice ..13 Variables Xb, /os'axi en %u&éri'ue Tableau G68 en %u&éri'ue Ecrire :Entre4 le no'bre de valeurs &: $ire Xb Redi& G6Xb(18 Pour i ← $ 5 Xb ( 1 Ecrire :Entre4 le no'bre nc :, i + 1 $ire G6i8 i )ui.ant /os'axi ← $ Pour i ← $ 5 Xb ( 1 )i G6i8 S G6/os'axi8 alors Pos&axi ← i Finsi i )ui.ant Ecrire :Ele'ent le plus +rand & :, G6/os'axi8 Ecrire :/osition de cet élé'ent & :, /os'axi Fin Exercice ..1# Variables Xb, i, ,o', %oH, Xbsup en %u&éri'ue Tableau G68 en %u&éri'ue Debut Ecrire :Entre4 le no'bre de notes 5 saisir & : $ire Xb Redi& G6Xb(18 Pour i ← $ 5 Xb ( 1 Ecrire :Entre4 le no'bre nc :, i + 1 $ire G6i8 i )ui.ant ,o' ← $ Pour i ← $ 5 Xb ( 1 ,o' ← ,o' + G6i8 i )ui.ant %oH ← ,o' \ Xb Xb,up ← $ Pour i ← $ 5 Xb ( 1 )i G6i8 S %oH Alors Xb,up ← Xb,up + 1 Fin)i i )ui.ant Ecrire Xb,up, : élèves dépassent la 'oHenne de la classe: Fin PARTIE / Enonce des Exercices

32

Exercice 2.1 Ecrive4 un al+orit*'e -ui per'ette de saisir un no'bre -uelcon-ue de valeurs, et -ui les ran+e au 0ur et 5 'esure dans un tableau. =e pro+ra''e, une 0ois la saisie ter'inée, doit dire si les élé'ents du tableau sont tous consécuti0s ou non. /ar exe'ple, si le tableau est & 12 13 1# 1! 1. 12 19

ses élé'ents sont tous consécuti0s. En revanc*e, si le tableau est & ; 1$ 11 1! 1. 12 19

ses élé'ents ne sont pas tous consécuti0s. Exercice 2.2 Ecrive4 un al+orit*'e -ui trie un tableau dans l)ordre décroissant. Cous écrire4 bien entendu deux versions de cet al+orit*'e, lLune e'ploHant le tri par insertion, lLautre le tri 5 bulles. Exercice 2.3 Ecrive4 un al+orit*'e -ui inverse l)ordre des élé'ents d)un tableau dont on suppose -uLil a été préalable'ent saisi 6I les pre'iers seront les derniers? J8 Exercice 2.# Ecrive4 un al+orit*'e -ui per'ette 5 l)utilisateur de suppri'er une valeur d)un tableau préalable'ent saisi. =)utilisateur donnera l)indice de la valeur -u)il sou*aite suppri'er. Attention, il ne s)a+it pas de re'ettre une valeur 5 4éro, 'ais bel et bien de la suppri'er du tableau lui('Q'e N ,i le tableau de départ était & 12 9 # #! .# ; 2

Et -ue l)utilisateur sou*aite suppri'er la valeur d)indice #, le nouveau tableau sera & 12 9 # #! ; 2

Exercice 2.!

33

Ecrive4 lLal+orit*'e -ui rec*erc*e un 'ot saisi au clavier dans un dictionnaire. =e dictionnaire est supposé Qtre codé dans un tableau préalable'ent re'pli et trié. PARTIE / Corrigés des Exercices

Exercice 2.1 Variables Xb, i en Entier Variable Ela+ en ooleen Tableau G68 en Entier Debut Ecrire :Entre4 le no'bre de valeurs &: $ire Xb Redi& G6Xb(18 Pour i ← $ 5 Xb ( 1 Ecrire :Entre4 le no'bre nc :, i + 1 $ire G6i8 i )ui.ant Ela+ ← Crai Pour i ← 1 5 Xb ( 1 )i G6i8 US G6i " 18 + 1 Alors Ela+ ← Eaux Fin)i i )ui.ant )i Ela+ Alors Ecrire :=es no'bres sont consécuti0s: )inon Ecrire :=es no'bres ne sont pas consécuti0s: Fin)i Fin ette pro+ra''ation est sans doute la plus spontanée, 'ais elle présente le dé0aut dLexa'iner la totalité du tableau, 'Q'e lors-uLon découvre dès le départ deux élé'ents non consécuti0s. Aussi, dans le cas dLun +rand tableau, est(elle dispendieuse en te'ps de traite'ent. 3ne autre 'anière de procéder serait de sortir de la boucle dès -ue deux élé'ents non consécuti0s sont détectés. =a deuxiè'e partie de lLal+orit*'e deviendrait donc & i←1 Tant-ue G6i8 > G6i " 18 + 1 et i U Xb ( 1 i←i+1 FinTant-ue )i G6i8 > G6i " 18 + 1 Alors Ecrire :=es no'bres sont consécuti0s: )inon Ecrire :=es no'bres ne sont pas consécuti0s: Fin)i 34

Exercice 2.2 @n suppose -ue X est le no'bre d)élé'ents du tableau. Gri par insertion & ? Pour i ← $ 5 X ( 2 pos'axi > i Pour 7 ← i + 1 5 X ( 1 )i t678 S t6pos'axi8 alors pos'axi ← 7 Finsi 7 sui.ant te'p ← t6pos'axi8 t6pos'axi8 ← t6i8 t6i8 ← te'p i sui.ant Fin Gri 5 bulles & ? aaper'ut ← Crai Tant-ue aaper'ut aaper'ut ← Eaux Pour i ← $ 5 X ( 2 )i t6i8 U t6i + 18 Alors te'p ← t6i8 t6i8 ← t6i + 18 t6i + 18 ← te'p aaper'ut ← Crai Finsi i sui.ant FinTant-ue Fin

Exercice 2.3 @n suppose -ue n est le no'bre d)élé'ents du tableau préalable'ent saisi ? Pour i ← $ 5 6X(18\2 Ge'p ← G6i8 G6i8 ← G6X(1(i8 G6X(1(i8 ← Ge'p i sui.ant Fin Exercice 2.# ? Ecrire :_an+ de la valeur 5 suppri'er ?: 35

$ire , Pour i ← , 5 X(2 G6i8 ← G6i+18 i sui.ant Redi& G6X"18 Fin Exercice 2.! X est le no'bre dLélé'ents du tableau Aico68, contenant les 'ots du dictionnaire, tableau préalable'ent re'pli. Variables ,up, Bn0, o'p en Entier Variables Eini en ooléen Début Ecrire :Entre4 le 'ot 5 véri0ier: $ire %ot @n dé0init les bornes de la partie du tableau 5 considérer ,up ← X ( 1 Bn0 ← $ Eini ← Eaux Tant-ue Xon Eini o'p dési+ne lLindice de lLélé'ent 5 co'parer. En bonne ri+ueur, il 0audra veiller 5 ce -ue o'p soit bien un no'bre entier, ce -ui pourra sLe00ectuer de di00érentes 'anières selon les lan+a+es. o'p ← 6,up + Bn08\2 ,i le 'ot se situe avant le point de co'paraison, alors la borne supérieure c*an+e, la borne in0érieure ne bou+e pas. )i %ot U Aico6 o'p8 Alors ,up ← o'p ( 1 ,inon, cLest lLinverse )inon Bn0 ← o'p + 1 Fin)i Eini ← %ot > Aico6 o'p8 ou ,up U Bn0 FinTant-ue )i %ot > Aico6 o'p8 Alors Ecrire :le 'ot existe: )inon Ecrire :Bl nLexiste pas: Finsi Fin PARTIE 0 Enonce des Exercices

Exercice 9.1 `crive4 un al+orit*'e re'plissant un tableau de . sur 13, avec des 4éros. 36

Exercice 9.2 Quel résultat produira cet al+orit*'e ? Tableau V61, 28 en Entier Variables i, 7, val en Entier Début Cal ← 1 Pour i ← $ 5 1 Pour 7 ← $ 5 2 V6i, 78 ← Cal Cal ← Cal + 1 7 )ui.ant i )ui.ant Pour i ← $ 5 1 Pour 7 ← $ 5 2 Ecrire V6i, 78 7 )ui.ant i )ui.ant Fin Exercice 9.3 Quel résultat produira cet al+orit*'e ? Tableau V61, 28 en Entier Variables i, 7, val en Entier Début Cal ← 1 Pour i ← $ 5 1 Pour 7 ← $ 5 2 V6i, 78 ← Cal Cal ← Cal + 1 7 )ui.ant i )ui.ant Pour 7 ← $ 5 2 Pour i ← $ 5 1 Ecrire V6i, 78 i )ui.ant 7 )ui.ant Fin Exercice 9.# Quel résultat produira cet al+orit*'e ? Tableau G63, 18 en Entier Variables b, ', en Entier Début Pour b ← $ 5 3 Pour ' ← $ 5 1 G6b, '8 ← b + ' ' )ui.ant b )ui.ant 37

Pour b ← $ 5 3 Pour ' ← $ 5 1 Ecrire G6b, '8 ' )ui.ant b )ui.ant Fin Exercice 9.! %Q'es -uestions, en re'plaKant la li+ne & G6b, '8 ← b + ' par G6b, '8 ← 2 D b + 6' + 18 puis par & G6b, '8 ← 6b + 18 + # D ' Exercice 9.. ,oit un tableau G 5 deux di'ensions 612, 98 préalable'ent re'pli de valeurs nu'éri-ues. `crire un al+orit*'e -ui rec*erc*e la plus +rande valeur au sein de ce tableau. Exercice 9.2 `crire un al+orit*'e de 7eu de da'es très si'pli0ié. =)ordinateur de'ande 5 l)utilisateur dans -uelle case se trouve son pion 6-uelle li+ne, -uelle colonne8. @n 'et en place un contrOle de saisie a0in de véri0ier la validité des valeurs entrées. Ensuite, on de'ande 5 l)utilisateur -uel 'ouve'ent il veut e00ectuer & $ 6en *aut 5 +auc*e8, 1 6en *aut 5 droite8, 2 6en bas 5 +auc*e8, 3 6en bas 5 droite8. ,i le 'ouve'ent est i'possible 6i.e. on sort du da'ier 8, on le si+nale 5 l)utilisateur et on s)arrQte l5 . ,inon, on déplace le pion et on a00ic*e le da'ier résultant, en a00ic*ant un I @ J pour une case vide et un I V J pour la case oP se trouve le pion.

PARTIE 0 Corrigés des Exercices

Exercice 9.1 Tableau Gruc6!, 128 en Entier Debut Pour i ← $ 5 ! Pour 7 ← $ 5 12 Gruc6i, 78 ← $ 38

7 )ui.ant i )ui.ant Fin Exercice 9.2 et al+orit*'e re'plit un tableau de la 'anière suivante& V6$, $8 > 1 V6$, 18 > 2 V6$, 28 > 3 V61, $8 > # V61, 18 > ! V61, 28 > . Bl écrit ensuite ces valeurs 5 l)écran, dans cet ordre. Exercice 9.3 et al+orit*'e re'plit un tableau de la 'anière suivante& V6$, $8 > 1 V61, $8 > # V6$, 18 > 2 V61, 18 > ! V6$, 28 > 3 V61, 28 > . Bl écrit ensuite ces valeurs 5 l)écran, dans cet ordre. Exercice 9.# et al+orit*'e re'plit un tableau de la 'anière suivante& G6$, $8 > $ G6$, 18 > 1 G61, $8 > 1 G61, 18 > 2 G62, $8 > 2 G62, 18 > 3 G63, $8 > 3 G63, 18 > # Bl écrit ensuite ces valeurs 5 l)écran, dans cet ordre. Exercice 9.! Cersion a & cet al+orit*'e re'plit un tableau de la 'anière suivante& G6$, $8 > 1 G6$, 18 > 2 G61, $8 > 3 G61, 18 > # G62, $8 > ! G62, 18 > . G63, $8 > 2 G63, 18 > 9 39

Bl écrit ensuite ces valeurs 5 l)écran, dans cet ordre. Cersion b & cet al+orit*'e re'plit un tableau de la 'anière suivante& G6$, $8 > 1 G6$, 18 > ! G61, $8 > 2 G61, 18 > . G62, $8 > 3 G62, 18 > 2 G63, $8 > # G63, 18 > 9 Bl écrit ensuite ces valeurs 5 l)écran, dans cet ordre. Exercice 9.. Variables i, 7, i%ax, 7%ax en %u&éri'ue Tableau G612, 98 en %u&éri'ue =e principe de la rec*erc*e dans un tableau 5 deux di'ensions est stricte'ent le 'Q'e -ue dans un tableau 5 une di'ension, ce -ui ne doit pas nous étonner. =a seule c*ose -ui c*an+e, cLest -uLici le balaHa+e re-uiert deux boucles i'bri-uées, au lieu dLune seule. Debut ... i%ax ← $ 7%ax ← $ Pour i ← $ 5 12 Pour 7 ← $ 5 9 )i G6i,78 S G6i%ax,7%ax8 Alors i%ax ← i 7%ax ← 7 Fin)i 7 )ui.ant i )ui.ant Ecrire :=e plus +rand élé'ent est :, G6i%ax, 7%ax8 Ecrire :Bl se trouve aux indices :, i%ax, :M :, 7%ax Fin Exercice 9.2 Variables i, 7 , posi, pos7, i2, 72 en Entier Variables orrect, %ove@W en ooléen Tableau Aa'ier62, 28 en ooléen Tableau %ouv63, 18 en Entier =e da'ier contenant un seul pion, on c*oisit de le coder 5 lLécono'ie, en le représentant par un tableau de booléens 5 deux di'ensions. Aans c*acun des e'place'ents de ce da'ier, Eaux si+ni0ie lLabsence du pion, Crai sa présence. /ar ailleurs, on e'ploie une 'éc*ante astuce, pas obli+atoire, 'ais bien prati-ue dans beaucoup de situations. =Lidée est de 0aire correspondre les 40

c*oix possibles de lLutilisateur avec les 'ouve'ents du pion. @n entre donc dans un tableau %ouv 5 deux di'ensions, les déplace'ents du pion selon les -uatre directions, en prenant soin -ue c*a-ue li+ne du tableau corresponde 5 une saisie de l)utilisateur. =a pre'ière valeur étant le déplace'ent en i, la seconde le déplace'ent en 7. eci nous épar+nera par la suite de 0aire -uatre 0ois les 'Q'es tests. Debut *oix $ & pion en *aut 5 droite %ouv6$, $8 ← (1 %ouv6$, 18 ← (1 *oix 1 & pion en *aut 5 droite %ouv61, $8 ← (1 %ouv61, 18 ← 1 *oix 2 & pion en bas 5 +auc*e %ouv62, $8 ← 1 %ouv62, 18 ← (1 *oix 3 & pion en bas 5 droite %ouv63, $8 ← 1 %ouv63, 18 ← 1 Bnitialisation du da'ierM le pion n)est pour le 'o'ent nulle part Pour i ← $ 5 2 Pour 7 ← $ 5 2 Aa'ier6i, 78 ← Eaux 7 sui.ant i sui.ant ,aisie de la coordonnée en i 6:posi:8 avec contrOle de saisie orrect ← Eaux Tant-ue Xon orrect Ecrire :Entre4 la li+ne de votre pion& : $ire posi )i posi S> $ et posi U> 2 Alors orrect ← vrai Finsi Fintant'ue ,aisie de la coordonnée en 7 6:pos7:8 avec contrOle de saisie orrect ← Eaux Tant-ue Xon orrect Ecrire :Entre4 la colonne de votre pion& : $ire pos7 )i pos7 S> $ et pos7 U> 2 Alors orrect ← Crai Finsi Fintant'ue /ositionne'ent du pion sur le da'ier virtuel. Aa'ier6posi, pos78 ← Crai ,aisie du déplace'ent, avec contrOle Ecrire :Quel déplace'ent ?: Ecrire : ( $& en *aut 5 +auc*e: Ecrire : ( 1& en *aut 5 droite: Ecrire : ( 2& en bas 5 +auc*e: 41

Ecrire : ( 3& en bas 5 droite: orrect ← Eaux Tant-ue Xon orrect $ire Aep )i Aep S> $ et Aep U> 3 Alors orrect ← Crai Fin)i FinTant-ue i2 et 72 sont les 0utures coordonnées du pion. =a variable booléenne %ove@W véri0ie la validité de ce 0utur e'place'ent i2 ← posi + %ouv6Aep, $8 72 ← pos7 + %ouv6Aep, 18 %ove@W ← i2 S> $ et i2 U> 2 et 72 S> $ et 72 U> 2 as oP le déplace'ent est valide )i %ove@W Alors Aa'ier6posi, pos78 ← Eaux Aa'ier6i2, 728 ← Crai A00ic*a+e du nouveau da'ier Pour i ← $ 5 2 Pour 7 ← $ 5 2 )i Aa'ier6i, 78 Alors Ecrire : @ :M )inon Ecrire : V :M Fin)i 7 sui.ant Ecrire :: i sui.ant )inon as oP le déplace'ent n)est pas valide Ecrire :%ouve'ent i'possible: Fin)i Fin PARTIE 1 Enoncé des Exercices

Exercice ;.1 /ar'i ces a00ectations 6considérées indépenda''ent les unes des autres8, les-uelles provo-ueront des erreurs, et pour-uoi ? Cariables A, B, en Xu'éri-ue Cariables A, E en aractère A ← ,in6B8 A ← ,in6A + B D 8 B ← ,in6A8 " ,in6A8 A ← ,in6A \ B8 ← os6,in6A8 42

Exercice ;.2 Ecrive4 un al+orit*'e -ui de'ande un 'ot 5 l)utilisateur et -ui a00ic*e 5 l)écran le no'bre de lettres de ce 'ot 6cLest vrai'ent tout bQte8. Exercice ;.3 Ecrive4 un al+orit*'e -ui de'ande une p*rase 5 l)utilisateur et -ui a00ic*e 5 l)écran le no'bre de 'ots de cette p*rase. @n suppose -ue les 'ots ne sont séparés -ue par des espaces 6et cLest dé75 un petit peu 'oins bQte8. Exercice ;.# Ecrive4 un al+orit*'e -ui de'ande une p*rase 5 l)utilisateur et -ui a00ic*e 5 l)écran le no'bre de voHelles contenues dans cette p*rase. @n pourra écrire deux solutions. =a pre'ière déploie une condition co'posée bien 0astidieuse. =a deuxiè'e, en utilisant la 0onction Grouve, allè+e considérable'ent lLal+orit*'e. Exercice ;.! Ecrive4 un al+orit*'e -ui de'ande une p*rase 5 l)utilisateur. elui(ci entrera ensuite le ran+ d)un caractère 5 suppri'er, et la nouvelle p*rase doit Qtre a00ic*ée 6on doit réelle'ent suppri'er le caractère dans la variable -ui stocbe la p*rase, et pas uni-ue'ent 5 l)écran8. Exercice ;.. ( rHpto+rap*ie 1 3n des plus anciens sHstè'es de crHpto+rap*ie 6aisé'ent déc*i00rable8 consiste 5 décaler les lettres d)un 'essa+e pour le rendre illisible. Ainsi, les A deviennent des B, les B des , etc. Ecrive4 un al+orit*'e -ui de'ande une p*rase 5 l)utilisateur et -ui la code selon ce principe. o''e dans le cas précédent, le coda+e doit s)e00ectuer au niveau de la variable stocbant la p*rase, et pas seule'ent 5 l)écran. Exercice ;.2 ( rHpto+rap*ie 2 ( le chiffre de César 3ne a'élioration 6relative8 du principe précédent consiste 5 opérer avec un décala+e non de 1, 'ais d)un no'bre -uelcon-ue de lettres. Ainsi, par exe'ple, si l)on c*oisit un décala+e de 12, les A deviennent des %, les B des X, etc. _éalise4 un al+orit*'e sur le 'Q'e principe -ue le précédent, 'ais -ui de'ande en plus -uel est le décala+e 5 utiliser. Cotre sens proverbial de lLélé+ance vous interdira bien sdr une série de vin+t(six :,i...Alors: Exercice ;.9 ( rHpto+rap*ie 3 3ne tec*ni-ue ultérieure de crHpto+rap*ie consista 5 opérer non avec un décala+e sHsté'ati-ue, 'ais par une substitution aléatoire. /our cela, on

43

utilise un alp*abet(clé, dans le-uel les lettres se succèdent de 'anière désordonnée, par exe'ple & Fa=3^/C_EAWBXA@E,QY e%ZBGV )est cette clé -ui va servir ensuite 5 coder le 'essa+e. ,elon notre exe'ple, les A deviendront des F, les B des a, les des =, etc. Ecrire un al+orit*'e -ui e00ectue ce crHpta+e 6l)alp*abet(clé sera saisi par l)utilisateur, et on suppose -uLil e00ectue une saisie correcte8. Exercice ;.; ( rHpto+rap*ie # ( le chiffre de Vigenère 3n sHstè'e de crHpto+rap*ie beaucoup plus di00icile 5 briser -ue les précédents 0ut inventé au VCBe siècle par le 0ranKais Ci+enère. Bl consistait en une co'binaison de di00érents c*i00res de ésar. @n peut en e00et écrire 2! alp*abets décalés par rapport 5 l)alp*abet nor'al &
• • •

l)alp*abet -ui co''ence par B et 0init par ?aYA l)alp*abet -ui co''ence par et 0init par ?YAB etc.

=e coda+e va s)e00ectuer sur le principe du c*i00re de ésar & on re'place la lettre d)ori+ine par la lettre occupant la 'Q'e place dans l)alp*abet décalé. %ais 5 la di00érence du c*i00re de ésar, un 'Q'e 'essa+e va utiliser non un, 'ais plusieurs alp*abets décalés. /our savoir -uels alp*abets doivent Qtre utilisés, et dans -uel ordre, on utilise une clé. ,i cette clé est :CBZEXE_E: et le 'essa+e :Bl 0aut coder cette p*rase:, on procèdera co''e suit & =a pre'ière lettre du 'essa+e, B, est la ;e lettre de l)alp*abet nor'al. Elle doit Qtre codée en utilisant l)alp*abet co''enKant par la pre'ière lettre de la clé, C. Aans cet alp*abet, la ;e lettre est le A. B devient donc A. =a deuxiè'e lettre du 'essa+e, =, est la 12e lettre de l)alp*abet nor'al. Elle doit Qtre codée en utilisant l)alp*abet co''enKant par la deuxiè'e lettre de la clé, B. Aans cet alp*abet, la 12e lettre est le ,. = devient donc ,, etc. Quand on arrive 5 la dernière lettre de la clé, on reco''ence 5 la pre'ière. Ecrire l)al+orit*'e -ui e00ectue un crHpta+e de Ci+enère, en de'andant bien sdr au départ la clé 5 l)utilisateur. Exercice ;.1$ Ecrive4 un al+orit*'e -ui de'ande un no'bre entier 5 l)utilisateur. =)ordinateur a00ic*e ensuite le 'essa+e : e no'bre est pair: ou : e no'bre est i'pair: selon le cas. Exercice ;.11 Ecrive4 les al+orit*'es -ui +énèrent un no'bre Zlup aléatoire tel -ue ?

44

• • • • • •

$ >U Zlup U 2 "1 >U Zlup U 1 1,3! >U Zlup U 1,.! Zlup é'ule un dé 5 six 0aces "1$,! >U Zlup U +.,! Zlup é'ule la so''e du 7et si'ultané de deux dés 5 six 0aces

PARTIE 1 Corrigés des Exercices

Exercice ;.1 A ← ,in6B8 Aucun problè'e A ← ,in6A + B D 8 Aucun problè'e B ← ,in6A8 " ,in6A8 Erreur N A est en caractère A ← ,in6A \ B8 Aucun problè'e? si B est di00érent de 4éro ← os6,in6A8 Erreur N Bl 'an-ue une parent*èse 0er'ante Exercice ;.2 Cous étie4 prévenus, cLest bQte co''e c*ou N Bl su00it de se servir de la 0onction =en, et cLest ré+lé & Variable %ot en Caractère Variable Xb en Entier Debut Ecrire :Entre4 un 'ot & : $ire %ot Xb ← =en6%ot8 Ecrire : e 'ot co'pte :, Xb, : lettres: Fin Exercice ;.3 =5, on est obli+é de co'pter par une boucle le no'bre dLespaces de la p*rase, et on en déduit le no'bre de 'ots. =a boucle exa'ine les caractères de la p*rase un par un, du pre'ier au dernier, et les co'pare 5 lLespace. Variable Bla en Caractère Variables Xb, i en Entier Debut Ecrire :Entre4 une p*rase & : $ire Bla Xb ← $ Pour i ← 1 5 =en6Bla8 )i %id6Bla, i , 18 > : : Alors Xb ← Xb + 1 Fin)i i sui.ant

45

Ecrire : ette p*rase co'pte :, Xb + 1, : 'ots: Fin Exercice ;.# ,olution 1 & pour c*a-ue caractère du 'ot, on pose une très douloureuse condition co'posée. =e 'oins -ue lLon puisse dire, cLest -ue ce c*oix ne se distin+ue pas par son élé+ance. ela dit, il 'arc*e, donc après tout, pour-uoi pas. Variable Bla en Caractère Variables Xb, i, 7 en Entier Debut Ecrire :Entre4 une p*rase & : $ire Bla Xb ← $ Pour i ← 1 5 =en6Bla8 )i %id6Bla, i, 18 > :a: ou %id6Bla, i, 18 > :e: ou %id6Bla, i, 18 > :i: ou %id6Bla, i, 18 > :o: ou %id6Bla, i, 18 > :u: ou %id6Bla, i, 18 > :H: Alors Xb ← Xb + 1 Fin)i i sui.ant Ecrire : ette p*rase co'pte :, Xb, : voHelles: Fin ,olution 2 & on stocbe toutes les voHelles dans une c*a1ne. ZrRce 5 la 0onction Grouve, on détecte i''édiate'ent si le caractère exa'iné est une voHelle ou non. Lest nette'ent plus sH'pat*i-ue... Variables Bla, CoH en Caractère Variables Xb, i, 7 en Entier Debut Ecrire :Entre4 une p*rase & : $ire Bla Xb ← $ CoH ← :aeiouH: Pour i ← 1 5 =en6Bla8 )i Grouve6CoH, %id6Bla, i, 188 US $ Alors Xb ← Xb + 1 Fin)i i sui.ant Ecrire : ette p*rase co'pte :, Xb, : voHelles: Fin Exercice ;.! Bl nLexiste aucun 'oHen de suppri'er directe'ent un caractère dLune c*a1ne? autre'ent -uLen procédant par colla+e. Bl 0aut donc concaténer ce -ui se trouve 5 +auc*e du caractère 5 suppri'er, avec ce -ui se trouve 5 sa droite. Attention aux para'ètres des 0onctions %id, ils nLont rien dLévident N Variable Bla en Caractère Variables Xb, i, 7 en Entier 46

Début Ecrire :Entre4 une p*rase & : $ire Bla Ecrire :Entre4 le ran+ du caractère 5 suppri'er & : $ire Xb = ← =en6Bla8 Bla ← %id6Bla, 1, Xb " 18 < %id6Bla, Xb + 1, = " Xb8 Ecrire :=a nouvelle p*rase est & :, Bla Fin Exercice ;.. ,ur lLense'ble des exercices de crHpto+rap*ie, il H a deux +randes straté+ies possibles & ( soit trans0or'er les caractères en leurs codes A, BB. =Lal+orit*'e revient donc ensuite 5 traiter des no'bres. 3ne 0ois ces no'bres trans0or'és, il 0aut les reconvertir en caractères. ( soit en rester au niveau des caractères, et procéder directe'ent aux trans0or'ations 5 ce niveau. Lest cette dernière option -ui est c*oisie ici, et pour tous les exercices de crHpto+rap*ie 5 venir. /our cet exercice, il H a une rè+le +énérale & pour c*a-ue lettre, on détecte sa position dans lLalp*abet, et on la re'place par la lettre occupant la position suivante. ,eul cas particulier, la vin+t(sixiè'e lettre 6le Y8 doit Qtre codée par la pre'ière 6le A8, et non par la vin+t(septiè'e, -ui nLexiste pas N Variables Bla, od, Alp*a en Caractère Variables i, /os en Entier Début Ecrire :Entre4 la p*rase 5 coder & : $ire Bla Alp*a ← :AB AEEZFB^W=%X@/Q_,G3CeVaY: od ← :: Pour i ← 1 5 =en6Bla8 =et ← %id6Bla, i, 18 )i =et US :Y: Alors /os ← Grouve6Alp*a, =et8 od ← od < %id6Alp*a, /os + 1, 18 )inon od ← od < :A: Fin)i i )ui.ant Bla ← od Ecrire :=a p*rase codée est & :, Bla Fin Exercice ;.2 47

et al+orit*'e est une +énéralisation du précédent. %ais l5, co''e on ne conna1t pas dLavance le décala+e 5 appli-uer, on ne sait pas a priori co'bien de :cas particuliers:, 5 savoir de dépasse'ents au(del5 du Y, il va H avoir. Bl 0aut donc trouver un 'oHen si'ple de dire -ue si on obtient 22, il 0aut en réalité prendre la lettre nu'éro 1 de lLalp*abet, -ue si on obtient 29, il 0aut en réalité prendre la nu'éro 2, etc. e 'oHen si'ple existe & il 0aut considérer le reste de la division par 2., autre'ent dit le 'odulo. Bl H a une petite ruse supplé'entaire 5 appli-uer, puis-ue 2. doit rester 2. et ne pas devenir $. Variable Bla, od, Alp*a en Caractère Variables i, /os, Aécal en Entier Début Ecrire :Entre4 le décala+e 5 appli-uer & : $ire Aécal Ecrire :Entre4 la p*rase 5 coder & : $ire Bla Alp*a ← :AB AEEZFB^W=%X@/Q_,G3CeVaY: od ← :: Pour i ← 1 5 =en6Bla8 =et ← %id6Bla, i, 18 /os ← Grouve6Alp*a, =et8 Xouv/os ← %od6/os + Aécal, 2.8 )i Xouv/os > $ Alors Xouv/os ← 2. Fin)i od ← od < %id6Alp*a, Xouv/os, 18 i )ui.ant Bla ← od Ecrire :=a p*rase codée est & :, Bla Fin Exercice ;.9 =5, cLest asse4 direct. Variable Bla, od, Alp*a en Caractère Variables i, /os, Aécal en Entier Début Ecrire :Entre4 l)alp*abet clé & : $ire lé Ecrire :Entre4 la p*rase 5 coder & : $ire Bla Alp*a ← :AB AEEZFB^W=%X@/Q_,G3CeVaY: od ← :: Pour i ← 1 5 =en6Bla8 =et ← %id6Bla, i, 18 /os ← Grouve6Alp*a, =et8 od ← od < %id6 lé, /os, 18 i )ui.ant Bla ← od

48

Ecrire :=a p*rase codée est & :, Bla Fin Exercice ;.; =e coda+e de Ci+enère n)est pas seule'ent plus di00icile 5 briserM il est é+ale'ent un peu plus raide 5 pro+ra''er. =a di00iculté essentielle est de co'prendre -u)il 0aut deux boucles& l)une pour parcourir la p*rase 5 coder, l)autre pour parcourir la clé. %ais -uand on H ré0léc*it bien, ces deux boucles ne doivent surtout pas Qtre i'bri-uées. Et en réalité, -uelle -ue soit la 'anière dont on lLécrit, elle n)en 0or'ent -u)une seule. Variables Alp*a, Bla, od, lé, =et en Caractère Variables i, /os, /os lé, Aécal en Entier Début Ecrire :Entre4 la clé & : $ire lé Ecrire :Entre4 la p*rase 5 coder & : $ire Bla Alp*a ← :AB AEEZFB^W=%X@/Q_,G3CeVaY: od ← :: /os lé ← $ Pour i ← 1 5 =en6Bla8 @n +ère la pro+ression dans la clé. ^)ai e00ectué cela :5 la 'ain: par une boucle, 'ais un 7oli e'ploi de la 0onction %odulo aurait per'is une pro+ra''ation en une seule li+neN /osclé ← /osclé + 1 )i /os lé S =en6 lé8 Alors /os lé ← 1 Fin)i @n déter'ine -uelle est la lettre clé et sa position dans l)alp*abet =et lé ← %id6 lé, /os lé, 18 /os=et lé ← Grouve6Alp*a, =et lé8 @n déter'ine la position de la lettre 5 coder et le décala+e 5 appli-uer. =5 encore, une solution alternative aurait été d)e'ploHer %od & cela nous aurait épar+né le ,i? =et ← %id6Bla, i, 18 /os ← Grouve6Alp*a, =et8 Xouv/os ← /os + /os=et lé )i Xouv/os S 2. Alors Xouv/os ← Xouv/os " 2. Fin)i od ← od < %id6Alp*a, Xouv/os, 18 i )ui.ant Bla ← od Ecrire :=a p*rase codée est & :, Bla Fin Exercice ;.1$ @n en revient 5 des c*oses plus si'ples... 49

Variable Xb en Entier Ecrire :Entre4 votre no'bre & : $ire Xb )i Xb\2 > Ent6Xb\28 Alors Ecrire : e no'bre est pair: )inon Ecrire : e no'bre est pair: Fin)i Fin Exercice ;.11 a8 Zlup ← Alea68 D 2 b8 Zlup ← Alea68 D 2 ( 1 c8 Zlup ← Alea68 D $,3$ + 1,3! d8 Zlup ← Ent6Alea68 D .8 + 1 e8 Zlup ← Alea68 D 12 " 1$,! 08 Zlup ← Ent6Alea68D.8 + Ent6Alea68D.8 + 2

PARTIE 12 Enoncé des Exercices

Exercice 1$.1 Quel résultat cet al+orit*'e produit(il ? Variable Gruc en Caractère Début 3u.rir :Exe'ple.txt: sur ! en $ecture Tant'ue Xon E@E6!8 $ireFic4ier !, Gruc Ecrire Gruc FinTant-ue Fer&er ! Fin Exercice 1$.2 Ecrive4 l)al+orit*'e -ui produit un résultat si'ilaire au précédent, 'ais le 0ic*ier texte :Exe'ple.txt: est cette 0ois de tHpe déli'ité 6caractère de déli'itation & \8. @n produira 5 lLécran un a00ic*a+e oP pour des raisons est*éti-ues, ce caractère sera re'placé avec des espaces. Exercice 1$.3 @n travaille avec le 0ic*ier du carnet d)adresses en c*a'ps de lar+eur 0ixe. Ecrive4 un al+orit*'e -ui per'et 5 l)utilisateur de saisir au clavier un nouvel individu -ui sera a7outé 5 ce carnet d)adresses. 50

Exercice 1$.# %Q'e -uestion, 'ais cette 0ois le carnet est supposé Qtre trié par ordre alp*abéti-ue. =)individu doit donc Qtre inséré au bon endroit dans le 0ic*ier. Exercice 1$.! Ecrive4 un al+orit*'e -ui per'ette de 'odi0ier un rensei+ne'ent 6pour si'pli0ier, disons uni-ue'ent le no' de 0a'ille8 d)un 'e'bre du carnet d)adresses. Bl 0aut donc de'ander 5 l)utilisateur -uel est le no' 5 'odi0ier, puis -uel est le nouveau no', et 'ettre 5 7our le 0ic*ier. ,i le no' rec*erc*é nLexiste pas, le pro+ra''e devra le si+naler. Exercice 1$.. Ecrive4 un al+orit*'e -ui trie les individus du carnet d)adresses par ordre alp*abéti-ue. Exercice 1$.2 ,oient Goto.txt et Gata.txt deux 0ic*iers dont les enre+istre'ents ont la 'Q'e structure. Ecrire un al+orit*'e -ui recopie tout le 0ic*ier Goto dans le 0ic*ier Gutu, puis 5 sa suite, tout le 0ic*ier Gata 6concaténation de 0ic*iers8. Exercice 1$.9 Ecrire un al+orit*'e -ui suppri'e dans notre carnet dLadresses tous les individus dont le 'ail est invalide 6pour e'ploHer un critère si'ple, on considèrera -ue sont invalides les 'ails ne co'portant aucune arobase, ou plus dLune arobase8. Exercice 1$.; =es enre+istre'ents d)un 0ic*ier contiennent les deux c*a'ps Xo' 6c*a1ne de caractères8 et %ontant 6Entier8. *a-ue enre+istre'ent correspond 5 une vente conclue par un co''ercial d)une société. @n veut 'é'oriser dans un tableau, puis a00ic*er 5 lLécran, le total de ventes par vendeur. /our si'pli0ier, on suppose -ue le 0ic*ier de départ est dé75 trié alp*abéti-ue'ent par vendeur.

PARTIE 12 Corrigés des Exercices

51

Exercice 1$.1 et al+orit*'e écrit lLinté+ralité du 0ic*ier :Exe'ple.txt: 5 lLécran Exercice 1$.2 Variable Gruc en Caractère Variable i en Entier Debut 3u.rir :Exe'ple.txt: sur ! en $ecture Tant'ue Xon E@E6!8 $ireFic4ier !, Gruc Pour i ← 1 5 =en6Gruc8 )i %id6Gruc, i, 18 > :\: Alors Ecrire : : )inon Ecrire %id6Gruc, i, 18 Fin)i i )ui.ant FinTant-ue Fer&er ! Exercice 1$.3 Variables Xo' D 2$, /réno' D 12, Gel D 1$, %ail D 2$, =i+ en Caractère Debut Ecrire :Entre4 le no' & : $ire Xo' Ecrire :Entre4 le préno' & : $ire /réno' Ecrire :Entre4 le télép*one & : $ire Gel Ecrire :Entre4 le no' & : $ire %ail =i+ ← Xo' < /réno' < Gel < %ail 3u.rir :Adresse.txt: sur 1 (our A5out EcrireFic4ier 1, =i+ Fer&er 1 Fin Exercice 1$.# =5, co''e indi-ué dans le cours, on passe par un tableau de strutures en 'é'oire vive, ce -ui est la tec*ni-ue la plus 0ré-ue''ent e'ploHée. =e tri ( -ui est en 0ait un si'ple test ( sera e00ectué sur le pre'ier c*a'p 6no'8. )tructure Bottin Xo' en Caractère D 2$ /réno' en Caractère D 1! 52

Gel en Caractère D 1$ %ail en Caractère D 2$ Fin )tructure Tableau %espotes68 en ottin Variables %on/ote, Xouveau en ottin Variables i, 7 en %u&éri'ue Debut Ecrire :Entre4 le no' & : $ire Xouveau.Xo' Ecrire :Entre4 le préno' & : $ire Xouveau./réno' Ecrire :Entre4 le télép*one & : $ire Xouveau.Gel Ecrire :Entre4 le 'ail & : =ire Xouveau.%ail @n recopie lLinté+ralité de :Adresses: dans %es/otes68. Et après tout, cLest lLoccasion & -uand on to'be au bon endroit, on insère subreptice'ent notre nouveau copain dans le tableau. 3u.rir :Adresse.txt: sur 1 (our $ecture i ← (1 inséré ← Eaux Tant'ue Xon E@E618 i←i+1 Redi& %es/otes6i8 $ireFic4ier 1, %on/ote )i %on/ote.Xo' S Xouveau.Xo' et Xon Bnséré Alors %es/otes6i8 ← Xouveau Bnséré ← Crai i←i+1 Redi& %es/otes6i8 Fin)i %es/otes6i8 ← %on/ote FinTant-ue Fer&er 1 Et le tour est -uasi'ent 7oué. Bl ne reste plus -uL5 rebalancer tel -uel lLinté+ralité du tableau %es/otes dans le 0ic*ier, en écrasant lLancienne version. 3u.rir :Adresse.txt: sur 1 (our Ecriture Pour 7 ← $ 5 i EcrireFic4ier 1, %es/otes678 7 sui.ant Fer&er 1 Fin Exercice 1$.! Lest un peu du 'Q'e tonneau -ue ce -uLon vient de 0aire, 5 -uel-ues variantes près. Bl H a essentielle'ent une petite +estion de 0la+ pour 0aire bonne 'esure.

53

)tructure Bottin Xo' en Caractère D 2$ /réno' en Caractère D 1! Gel en caractère D 1$ %ail en Caractère D 2$ Fin )tructure Tableau %espotes68 en ottin Variables %on/ote en ottin Variables Ancien, Xouveau en CaractèreD2$ Variables i, 7 en %u&éri'ue Variable Grouvé en ooléen Debut Ecrire :Entre4 le no' 5 'odi0ier & : $ire Ancien Ecrire :Entre4 le nouveau no' & : $ire Xouveau @n recopie lLinté+ralité de :Adresses: dans Eic, tout en rec*erc*ant le cla'pin. ,i on le trouve, on procède 5 la 'odi0ication. 3u.rir ]Adresse.txtT sur 1 (our $ecture i ← (1 Grouvé ← Eaux Tant'ue Xon E@E618 i←i+1 Redi& %es/otes6i8 $ireFic4ier 1, %on/ote )i %on/ote.Xo' > Ancien.Xo' Alors Grouvé ← Crai %on/ote.Xo' ← Xouveau Fin)i %es/otes6i8 ← %on/ote FinTant-ue Fer&er 1 @n recopie ensuite lLinté+ralité de Eic dans :Adresse: 3u.rir :Adresse.txt: sur 1 (our Ecriture Pour 7 ← $ 5 i EcrireFic4ier 1, %es/otes678 7 )ui.ant Fer&er 1 Et un petit 'essa+e pour 0inir N )i Grouvé Alors Ecrire :%odi0ication e00ectuée: )inon Ecrire :Xo' inconnu. Aucune 'odi0ication e00ectuée: Fin)i Fin Exercice 1$..

54

=5, cLest un tri sur un tableau de structures, rien de plus 0acile. Et on est bien content de disposer des structures, autre'ent dit de ne se coltiner -uLun seul tableau... )tructure Bottin Xo' en Caractère D 2$ /réno' en Caractère D 1! Gel en caractère D 1$ %ail en Caractère D 2$ Fin )tructure Tableau %espotes68 en ottin Variables %ini en ottin Variables i, 7 en %u&éri'ue Debut @n recopie lLinté+ralité de :Adresses: dans %es/otes... 3u.rir :Adresse.txt: sur 1 (our $ecture i ← (1 Tant'ue Xon E@E618 i←i+1 Redi& %es/otes6i8 $ireFic4ier 1, %es/otes6i8 FinTant-ue Fer&er 1 @n trie le tableau selon lLal+orit*'e de tri par insertion dé75 étudié, en utilisant le c*a'p Xo' de la structure & Pour 7 ← $ 5 i ( 1 %ini ← %es/otes678 pos'ini ← 7 Pour b ← 7 + 1 5 i )i %es/otes6b8.Xo' U %ini.Xo' Alors 'ini ← %es/otes6b8 pos'ini ← b Finsi b sui.ant %es/otes6pos'ini8 ← %es/otes678 %es/otes678 ← %ini 7 sui.ant @n recopie ensuite lLinté+ralité du tableau dans :Adresse: 3u.rir :Adresse.txt: sur 1 (our Ecriture Pour 7 ← $ 5 i EcrireFic4ier 1, %es/otes678 7 sui.ant Fer&er 1 Fin Exercice 1$.2 Bon, celui(l5 est telle'ent idiot -uLon nLa 'Q'e pas besoin de passer par des tableaux en 'é'oire vive. Variable =i+ en Caractère Début 3u.rir :Gutu.txt: sur 1 (our A5out 55

3u.rir ]Goto.txtT sur 2 (our $ecture Tant'ue Xon E@E628 $ireFic4ier 2, =i+ EcrireFic4ier 1, =i+ FinTant-ue Fer&er 2 3u.rir ]Gata.txtT sur 3 (our $ecture Tant'ue Xon E@E638 $ireFic4ier 2, =i+ EcrireFic4ier 1, =i+ FinTant-ue Fer&er 3 Fer&er 1 Fin Exercice 1$.9 @n va éli'iner les 'auvaises entrées dès la recopie & si lLenre+istre'ent ne présente pas un 'ail valide, on lLi+nore, sinon on le copie dans le tableau. )tructure Bottin Xo' en Caractère D 2$ /réno' en Caractère D 1! Gel en caractère D 1$ %ail en Caractère D 2$ Fin )tructure Tableau %espotes68 en ottin Variable %on/ote en ottin Variables i, 7 en %u&éri'ue Debut @n recopie :Adresses: dans %es/otes en testant le 'ail... 3u.rir :Adresse.txt: sur 1 (our $ecture i ← (1 Tant'ue Xon E@E618 $ireFic4ier 1, %on/ote nb ← $ Pour i ← 1 5 =en6%on/ote.%ail8 )i %id6%on/ote.%ail, i, 18 > :f: Alors nb ← nb + 1 Fin)i i sui.ant )i nb > 1 Alors i←i+1 Redi& %es/otes6i8 %es/otes6i8 ← %on/ote Fin)i FinTant-ue Fer&er 1 @n recopie ensuite lLinté+ralité de Eic dans :Adresse:

56

3u.rir :Adresse.txt: sur 1 (our Ecriture Pour 7 ← $ 5 i EcrireFic4ier 1, %es/otes678 7 )ui.ant Fer&er 1 Fin Exercice 1$.; 3ne 0ois de plus, le passa+e par un tableau de structures est une straté+ie co''ode. Attention toute0ois, co''e il sLa+it dLun 0ic*ier texte, tout est stocbé en caractère. Bl 0audra donc convertir en nu'éri-ue les caractères représentant les ventes, pour pouvoir e00ectuer les calculs de'andés. /our le traite'ent, il H a deux possibilités. ,oit on recopie le 0ic*ier 5 lLidenti-ue dans un pre'ier tableau, et on traite ensuite ce tableau pour 0aire la so''e par vendeur. ,oit on 0ait le traite'ent directe'ent, dès la lecture du 0ic*ier. Lest cette option -ui est c*oisie dans ce corri+é. )tructure Cendeur Xo' en Caractère D 2$ %ontant en %u&éri'ue Fin )tructure Tableau %esCendeurs68 en Vendeur Variables Xo'/rec D 2$, =i+, Xo' en caractère Variables ,o''e, Cente en %u&éri'ue @n balaHe le 0ic*ier en 0aisant nos additions. Aès -ue le no' a c*an+é 6on est passé au vendeur suivant8, on ran+e le résultat et on re'et tout 5 4éro Debut 3u.rir :Centes.txtT sur 1 (our $ecture i ← (1 ,o''e ← $ Xo'/réc ← :: Tant'ue Xon E@E618 $ireFic4ier 1, =i+ Xo' ← %id6=i+, 1, 2$8 Cente ← Xu'6%id6=i+, 21, 1$8 )i Xo' > Xo'/rec Alors ,o''e ← ,o''e + Cente )inon i←i+1 Redi& %esCendeurs6i8 %esCendeurs6i8.Xo' ← Xo'/rec %esCendeurs6i8.%ontant ← ,o''e ,o''e ← $ Xo'/rec ← Xo' Fin)i FinTant-ue Et nLoublions pas un petit tour de plus pour le dernier de ces 'essieurs? i←i+1 Redi& %esCendeurs6i8 57

%esCendeurs6i8.Xo' ← Xo'/rec %esCendeurs6i8.%ontant ← ,o''e Fer&er 1 /our ter'iner, on a00ic*e le tableau 5 lLécran Pour 7 ← $ 5 i Ecrire %esCendeurs678 7 sui.ant Fin PARTIE 11 Enoncé des Exercices

Exercice 11.1 `crive4 une 0onction -ui renvoie la so''e de cin- no'bres 0ournis en ar+u'ent. Exercice 11.2 `crive4 une 0onction -ui renvoie le no'bre de voHelles contenues dans une c*a1ne de caractères passée en ar+u'ent. Au passa+e, note4 -uLune 0onction a tout 5 0ait le droit dLappeler une autre 0onction. Exercice 11.3 _éécrive4 la 0onction Grouve, vue précéde''ent, 5 l)aide des 0onctions %id et =en 6co''e -uoi, Grouve, 5 la di00érence de %id et =en, n)est pas une 0onction indispensable dans un lan+a+e8. PARTIE 11 Corrigés des Exercices

Exercice 11.1 Coil5 un début en douceur... Fonction ,u'6a, b, c, d, e8 Ren.o6er a + b + c + d + e FinFonction Exercice 11.2 Fonction XbCoHelles6%ot en aractère8 Variables i, nb en %u&éri'ue Pour i ← 1 5 =en6%ot8 )i Grouve6:aeiouH:, %id6%ot, i, 188 US $ Alors nb ← nb + 1 Fin)i i sui.ant

58

Ren.o6er nb FinFonction Exercice 11.3 Fonction Grouve6a, b8 Variable i en %u&éri'ue Début i←1 Tant-ue i U =en6a8 ( =en6b8 et b US %id6a, i, =en6b88 i←i+1 FinTant-ue )i b US %id6a, i, =en6b88 Alors Ren.o6er $ )inon Ren.o6er i FinFonction

Eonction *oixAu%ot Quel-ues explications & on lit inté+rale'ent le 0ic*ier contenant la liste des 'ots. Au 0ur et 5 'esure, on ran+e ces 'ots dans le tableau =iste, -ui est redi'ensionné 5 c*a-ue tour de boucle. 3n tira+e aléatoire intervient alors, -ui per'et de renvoHer un des 'ots au *asard. Fonction *oixAu%ot68 Tableau =iste68 en Caractère Variables Xb'ots, *oisi en %u&éri'ue 3u.rir :Aico.txt: sur 1 en $ecture Xb'ots ← (1 Tant'ue Xon E@E618 Xb'ots ← Xb'ots + 1 Redi& =iste6Xb'ots8 $ireFic4ier 1, =iste6Xb'ots8 FinTant-ue Fer&er 1 *oisi ← Ent6Alea68 D Xb'ots8 Ren.o6er =iste6 *oisi8 FinFonction Eonction /artieEinie @n co''ence par véri0ier le no'bre de 'auvaises réponses, 'oti0 de dé0aite. Ensuite, on re+arde si la partie est +a+née, traite'ent -ui s)apparente 5 une +estion de Ela+ & il su00it -ue l)une des lettres du 'ot 5 deviner n)ait pas été trouvée pour -ue la partie ne soit pas +a+née. =a 0onction aura besoin, co''e ar+u'ents, du tableau Ceri0, de son no'bre d)élé'ents et du no'bre actuel de 'auvaises réponses. Fonction /artieEinie6t68 en ooleen, n, x en %u&éri'ue8 Variables i, issue en %u&eri'ue 59

)i x > 1$ Alors Ren.o6er 2 )inon Bssue ← 1 Pour i ← $ 5 n )i Xon t6i8 Alors Bssue ← $ Fin)i i sui.ant Ren.o6er Bssue Fin)i FinFonction /rocédure A00ic*a+e%ot 3ne 'Q'e boucle nous per'et de considérer une par une les lettres du 'ot 5 trouver 6variable '8, et de savoir si ces lettres ont été identi0iées ou non. Procédure A00ic*a+e%ot6' en Caractère (ar Valeur, t68 en ooléen (ar Valeur8 Variable A00 en Caractere Variable i en %u&eri'ue A00 ← :: Pour i ← $ 5 len6'8 ( 1 )i Xon t6i8 Alors A00 ← A00 < :(: )inon A00 ← A00 < %id6'ot, i + 1, 18 Fin)i i sui.ant Ecrire A00 FinProcédure Re&ar'ue & cette procédure aurait é+ale'ent pu Qtre écrite sous la 0or'e dLune 0onction, -ui aurait renvoHé vers la procédure principale la c*a1ne de caractères A00. =Lécriture 5 lLécran de cette c*a1ne A00 aurait alors été 0aite par la procédure principale. Coil5 donc une situation oP on peut asse4 indi00ére''ent opter pour une sous(procédure ou pour une 0onction. /rocédure ,aisie=ettre @n véri0ie -ue le si+ne entré 6para'ètre b8 est bien une seule lettre, -ui ne 0i+ure pas dans les propositions précéde''ent e00ectuées 6para'ètre a8 Procédure ,aisie=ettre6a, b en Caractère (ar Ré7érence8 Variable orrect en ooleen Variable Alp*a en Caractere Début orrect ← Eaux Alp*a ← :AB AEEZFB^W=%X@/Q_,G3CeVaY: 60

Tant-ue Xon orrect Ecrire :Entre4 la lettre proposée & : $ire b )i Grouve6alp*a, b8 > $ @u len6b8 US 1 Alors Ecrire : e n)est pas une lettre N: )inon)i Grouve6a, b8 US $ Alors Ecrire :=ettre dé75 proposée N: )inon orrect ← Crai a←a<b Fin)i FinTant-ue Fin Procédure /rocédure Ceri0=ettre =es para'ètres se 'ultiplient? = est la lettre proposée, t68 le tableau de booléens, % le 'ot 5 trouver et X le no'bre de 'auvaises propositions. Bl n)H a pas de di00iculté 'a7eure dans cette procédure & on exa'ine les lettres de % une 5 une, et on en tire les consé-uences. =e 0la+ sert 5 savoir si la lettre proposée 0aisait ou non partie du 'ot 5 deviner. Procédure Ceri0=ettre6=, % en Caractère (ar Valeur, t68 en ooléen (ar Ré7érence, X en %u&éri'ue (ar Ré7érence8 Variable orrect en ooleen Début orrect ← Eaux Pour i ← 1 5 =en6%8 )i %id6%, i, 18 > = Alors orrect ← Crai G6i ( 18 ← Crai Fin)i FinTant-ue )i Xon orrect Alors X←X+1 Fin)i Fin Procédure /rocédure Epilo+ue Procédure Epilo+ue6% en Caractère (ar Valeur, X en %u&éri'ue (ar Valeur8 Début )i X > 2 Alors Ecrire :3ne 'auvaise proposition de trop? /artie ter'inée N: Ecrire :=e 'ot 5 deviner était & :, % )inon Ecrire :Bravo N Cous ave4 trouvé N: Fin)i Fin Procédure /rocédure /rincipale 61

Procédure /rincipale Variables =ettre, %ot, /ropos en Caractere Variables + i, %ov_ep en %u&éri'ue Tableau Ceri068 en ooleen Début %ot ← *oixAu%ot68 /ropos ← :: =ettre ← :: Redi& Ceri06=en6%ot8(18 Pour i ← $ 5 =en6%ot8(1 Ceri06i8 ← Eaux i sui.ant b←$ Tant'ue b > $ A00ic*a+e%ot6%ot, Ceri0688 ,aisie=ettre6/ropos, =ettre8 Ceri0=ettre6=ettre, %ot, Ceri068, %ov_ep8 b ← /artieEinie6Ceri068, len6'ot8, %ov_ep8 FinTant-ue Epilo+ue6%ot, b8 Fin

62