Vous êtes sur la page 1sur 27

Algorithmique pour le BTS

Alexandre Mesl e 5 octobre 2012

Table des mati` eres


1 Notes de cours 1.1 Introduction . . . . . . . . . . . . . . . . . . . 1.1.1 Le principe . . . . . . . . . . . . . . . 1.1.2 Variables . . . . . . . . . . . . . . . . 1.1.3 Litt eraux . . . . . . . . . . . . . . . . 1.1.4 Convention d ecriture . . . . . . . . . 1.1.5 Entr ees-sorties . . . . . . . . . . . . . 1.1.6 Types num eriques et alphanum eriques 1.2 Traitements conditionnels . . . . . . . . . . . 1.2.1 SI ... ALORS . . . . . . . . . . . . . 1.2.2 Suivant cas . . . . . . . . . . . . . . . 1.2.3 Variables Bool eennes . . . . . . . . . . 1.3 Boucles . . . . . . . . . . . . . . . . . . . . . 1.3.1 Tant que . . . . . . . . . . . . . . . . 1.3.2 R ep eter ... jusqu` a . . . . . . . . . . . 1.3.3 Pour . . . . . . . . . . . . . . . . . . . 1.4 Tableaux . . . . . . . . . . . . . . . . . . . . 1.4.1 D enition . . . . . . . . . . . . . . . . 1.4.2 D eclaration . . . . . . . . . . . . . . . 1.4.3 Acc` es aux el ements . . . . . . . . . . . 1.4.4 Exemple . . . . . . . . . . . . . . . . . 2 Exercices 2.1 Introduction . . . . . . . . . . . . . . . . . . . 2.1.1 Aectations . . . . . . . . . . . . . . . 2.1.2 Saisie, achage, aectations . . . . . . 2.2 Traitements conditionnels . . . . . . . . . . . 2.2.1 Exercices de compr ehension . . . . . . 2.2.2 Conditions simples . . . . . . . . . . . 2.2.3 Conditions imbriqu ees . . . . . . . . . 2.2.4 L echiquier . . . . . . . . . . . . . . . 2.2.5 Suivant Cas . . . . . . . . . . . . . . . 2.3 Boucles . . . . . . . . . . . . . . . . . . . . . 2.3.1 Utilisation de toutes les boucles . . . . 2.3.2 Choix de la boucle la plus appropri ee 2.4 Tableaux . . . . . . . . . . . . . . . . . . . . 2 2 2 3 5 5 6 7 8 8 10 11 13 13 13 14 16 16 16 16 17 19 19 19 19 21 21 21 22 22 23 24 24 24 26

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

Chapitre 1

Notes de cours
1.1
1.1.1

Introduction
Le principe

Exemple 1 - La surprise du chef Consid erons la suite dinstructions suivante : 1. Faites chauer de leau dans une casserole 2. Une fois que leau boue, placez les p ates dans leau 3. Attendez dix minutes 4. Versez le tout dans un ecumoire 5. Vos p ates sont pr etes. Vous laurez devin e, il sagit des grandes lignes de la recette permettant de pr eparer des p ates (si vous les voulez al dente, attendez un petit peu moins de 10 minutes). Cette recette ne vous expose pas le d etail des r eactions chimiques qui font que les p ates cuisent en dix minutes, ni pourquoi il faut les egoutter. Il sagit seulement dune suite dinstructions devant etre ex ecut ees ` a la lettre. Si vous ne les suivez pas, vous prenez le risque que le r esultat ne soit pas celui que vous attendez. Si vous d ecidez de suivre une recette, vous d ecidez de vous conformer aux instructions sans poser de questions. Par opposition, vous pouvez d ecider de cr eer vous-m eme une recette, cela vous demandera davantage de r eexion, et vous serez amen e` a elaborer dune suite dinstructions qui vous permettra de retrouver le m eme r esultat. Exemple 2 - Ik ea Consid erons comme autre exemple une notice de montage. Elle est compos ee dun ensemble d etapes ` a respecter scrupuleusement. Il ne vous est pas demand e de vous interroger sur la validit e de ces instructions, on vous demande juste de les suivre. Si vous vous conformez aux indications de la notice, vous parviendrez ` a monter votre biblioth` eque Louis XV I . Si vous ne suivez pas la notice de montage, il vous restera probablement ` a la n une pi` ece entre les mains, et vous aurez beau chercher o` u la placer, aucun endroit ne conviendra. Vous aurez alors deux solutions : soit vous d emontez tout pour reprendre le montage depuis le d ebut, soit vous placez cette pi` ece dans lassiette qui est dans lentr ee en attendant le prochain d em enagement, et en sachant que la prochaine fois, vous suivrez la notice... Cet exemple est analogue au premier, vous avez entre vos mains une suite dinstructions ` a ex ecuter, si vous les suivez, vous obtenez le r esultat attendu, sinon, il y a de tr` es fortes chances que nobteniez pas le r esultat escompt e. De la m eme fa con, le but nest pas que vous vous demandiez pourquoi ou comment c a marche, la notice est faite pour que vous nayez pas ` a vous poser ce type de question. Si jamais vous d ecidez de cr eer un meuble (par exemple, une biblioth` eque Nicolas Premier) ` a monter soi-m eme, il vous faudra fournir avec une notice de montage. Cest-` a-dire une succession d etapes que lacqu ereur de ce meuble devra suivre ` a la lettre. 2

D enition On conclut de de la fa con suivante : nous avons vu quil existait des s equences dinstructions faites pour etre ex ecut ee ` a la lettre et sans se poser de questions, cest le principe de lalgorithme. Nous retiendrons donc que Un algorithme est une s equence dinstructions ex ecut ee de fa con logique mais non intelligente. Logique parce que la personne (ou la machine) qui ex ecute les instructions est capable de comprendre et ex ecuter sans erreur chacune delles. Non intelligente parce que la personne qui ex ecute lalgorithme nest pas suppos ee apte ` a comprendre pourquoi la succession d etapes d ecrite par lalgorithme donne bien un r esultat correct. Utilisation en informatique Les premiers algorithmes remontent ` a lantiquit e. Par exemple lalgorithme de calcul du plus grand commun diviseur de deux nombres, appel e maintenant algorithme dEuclide. Il sagissait en g en eral de m ethodes de calcul semblables ` a celle que vous utilisez depuis le cours el ementaire pour additionner deux nombres ` a plusieurs chires. Notez qu` a l epoque, on vous demandait juste dappliquer la m ethode sans vous tromper, on ne vous a pas expliqu e pourquoi cette m ethode marchait ` a tous les coups. Le principe etait donc le m eme, vous naviez pas le niveau en math ematiques pour comprendre pourquoi la succession d etapes quon vous donnait etait valide, mais vous etiez capable dex ecuter chaque etape de la m ethode. Avant m eme davoir dix ans, vous connaissiez donc d ej` a des algorithmes.

Le mot algorithme prend etymologiquement ses racines dans le nom dun math ematicien arabe du moyen age : Al-Kawarizmi. Les algorithmes sont extr emement puissants : en concevant un algorithme, vous pouvez d ecomposer un calcul compliqu e en une succession d etapes compr ehensibles, cest de cette fa con quon vous a fait faire des divisions (op eration compliqu ee) en cours moyen, ` a un age o` u votre niveau en math ematiques ne vous permettait pas de comprendre le fonctionnement dune division.

Contrairement aux mythe Matrix-Terminator-LOdyss ee de lespace-I, Robot-R2D2 (et jen passe) un ordinateur fonctionne de la m eme fa con quun monteur de biblioth` eque (rien ` a voir avec lalpinisme) ou votre cuisinier c elibataire (il y a quand m eme des exceptions), il est idiot et pour chaque chose que vous lui demanderez, il faudra lui dire comment faire. Vous aller donc lui donner des successions dinstructions ` a suivre, et lui les respectera ` a la lettre et sans jamais se tromper. Une suite dinstructions de la sorte est fournie ` a lordinateur sous la forme de programme. Pour coder un programme, on utilise un langage de programmation, par exemple C, Java, Pascal, VB... Selon le langage utilis e, une m eme instruction se code di eremment, nous ferons donc dans ce cours abstraction du langage utilis e. Nous nous int eresserons uniquement ` a la fa con de combiner des instructions pour former des programmes, ind ependamment des langages de programmation. Le but de ce cours est donc de vous apprendre ` a cr eer des algorithmes, cest-` a-dire ` a d ecomposer des calculs compliqu es en successions d etapes simples.

1.1.2

Variables

Une algorithme se pr esente comme une liste dinstructions, elles sont ecrites les unes au dessus des autres et elles sont ex ecut ees dans lordre, lorsque lon con coit une algorithme, il faut toujours avoir en t ete le fait que lordre des instructions est tr` es important. Le premier concept n ecessaire pour concevoir un algorithme est celui de variable. Une variable est un emplacement dans la m emoire o` u est stock ee une valeur. Une variable porte un nom, ce nom est laiss e au choix du concepteur de lalgorithme, il doit commencer par une lettre et ne pas comporter despace. On se sert du nom dune variable pour lire la valeur qui sy trouve ou bien pour la modier, une

variable ne peut contenir quune seule valeur ` a la fois. Une valeur est num erique sil sagit dun nombre, ou bien alphanum erique sil sagit dune succession de symboles, par exemple des mots. Toute variable a un type : si une variable est de type num erique, il nest possible dy mettre que des valeurs num eriques, si une variable est de type alphanum erique, il nest possible dy stocker que des valeurs alphanum eriques.

Laectation est une op eration permettant de modier la valeur dune variable. La syntaxe de laectation est la suivante : nomvariable valeur <nomvariable> est le nom de la variable dont on souhaite modier la valeur, <valeur> est la valeur que lon veut placer dans la variable. Notez bien que cette valeur doit etre de m eme type que la variable. Par exemple, A 5 place la valeur 5 dans la variable A. Si A contenait pr ealablement une valeur, celle-ci est ecras ee. Il est possible daecter ` a une variable le r esultat dune op eration arithm etique. A 5 + 2 On peut aussi aecter ` a une variable la valeur dune autre variable A B A B + 2 La premi` ere instruction lit la valeur de B et la recopie dans A. la deuxi` eme instruction, donc ex ecut ee apr` es la premi` ere, lit la valeur de B , lui additionne 2, et recopie le r esultat dans A. Le fait que lon aecte ` a A la valeur de B ne signie pas que ces deux variables auront dor enavant la m eme valeur. Cela signie que la valeur contenue dans B est ecras ee par la valeur que contient A au moment de laectation. Si la par la suite, la valeur de A est modi ee, alors la valeur de B restera inchang ee. Il est possible de faire gurer une variable simultan ement ` a gauche et ` a droite dune aectation : A A + 1 Cette instruction augmente de 1 la valeur contenue dans A, cela sappelle une incr ementation. Exemple Quelles sont les valeurs des variables apr` es lex ecution des instructions suivantes ? A 1 B 2 C 3 D A A C + 1 B D + C C D + 2 A Construisons un tableau nous montrant les valeurs des variables au l des aectations :

instruction A B C D d ebut n.i n.i n.i n.i A 1 1 n.i n.i n.i B 2 1 2 n.i n.i C 3 1 2 3 n.i D A 1 2 3 1 A C + 1 4 2 3 1 B D + C 4 4 3 1 C D + 2 A 4 4 9 1 n.i signie ici non initialis ee. Une variable est non initialis ee si aucune valeur ne lui a et e explicitement aect ee. A 1 modie la valeur contenue dans la variable A. A ce moment-l` a de lex ecution, les valeurs des autres variables sont inchang ees. B 2 modie la valeur de B , les deux variables A et B sont maintenant initialis ees. C 3 et D A initialisent les deux variables C et D, maintenant toutes les variables sont initialis ees. Vous remarquerez que D a et e initialis ee avec la valeur de A, comme A est une variable initialis ee, cela a un sens. Par contre, si lon avait aect e` a D le contenu dune variable non initialis ee, nous aurions ex ecut e une instruction qui na pas de sens. Vous noterez donc quil est interdit de faire gurer du cot e droit dune aectation une variable non initialis ee. Vous remarquez que linstruction D A aecte ` a D la valeur de A, et que laectation A C + 1 na pas de cons equence sur la variable D. Les deux variables A et D correspondent ` a deux emplacements distincts de la m emoire, modier lune naecte pas lautre.

1.1.3

Litt eraux

Un litt eral est la repr esentation de la valeur dune variable. Il sagit de la fa con dont on ecrit les valeurs des variables directement dans lalgorithme. num erique : 1, 2, 0, 4, . . . alphanum erique : toto, toto01, 04, ... Attention, 01 et 1 repr esentent les m emes valeurs num eriques, alors que 01 et 1 sont des valeurs alphanum eriques distinctes. Nous avons vu dans lexemple pr ec edent des litt eraux de type num erique, dans la section suivante il y a un exemple dutilisation dun variable de type alphanum erique.

1.1.4

Convention d ecriture

An que nous soyons certains de bien nous comprendre lorsque nous r edigeons des algorithmes, d enissons de fa con pr ecise des r` egles d ecriture. Un algorithme s ecrit en trois parties : 1. Le titre, tout algorithme porte un titre. Choisissez un titre qui permet de comprendre ce que fait lalgorithme. 2. La d eclaration de variables, vous pr eciserez dans cette partie quels noms vous avez d ecid e de donner ` a vos variables et de quel type est chacune delle. 3. Les instructions, aussi appel e le corps de lalgorithme, cette partie contient notre succession dinstructions.

Par exemple, Algorithme : Meanless Variables : num eriques : A, B, C alphanum eriques : t DEBUT A 1 B A + 1 C A A A + 1 t this algorithm is dumb FIN La lisibilit e des algorithmes est un crit` ere de qualit e pr epond erant. Un algorithme correct mais ind echirable est aussi ecace quun algorithme faux. Donc cest un algorithme faux. Vous devrez par cons equent soigner particuli` erement vos algorithmes, ils doivent etre faciles ` a lire, et r edig es de sorte quun lecteur soit non seulement capable de lex ecuter, mais aussi capable de le comprendre rapidement.

1.1.5

Entr ees-sorties

De nombreux algorithmes ont pour but de communiquer avec un utilisateur, cela se fait dans les deux sens, les sorties sont des envois de messages ` a lutilisateur, les entr ees sont des informations fournies par lutilisateur. Saisie Il est possible de demander ` a un utilisateur du programme de saisir une valeur. La syntaxe de la saisie est la suivante : Saisir < nomvariable > La saisie interrompt le programme jusqu` a ce que lutilisateur ait saisi une valeur au clavier. Une fois cela fait, la valeur saisie est plac ee dans la variable nomvariable. Il est possible de saisir plusieurs variables ` a la suite, Saisir A, B, C place trois valeurs saisies par lutilisateur dans les variables A, B et C. Achage Pour acher un message ` a destination de lutilisateur, on se sert de la commande Acher < message > Cette instruction ache le <message> ` a lutilisateur. Par exemple, Acher Hello World ache Hello World (les guillemets sont tr` es importantes !). Il est aussi possible dacher le contenu dune variable, Acher A ache l ecran le contenu de la variable A. On peut entrem eler les messages et les valeurs des variables. Par exemple, les instructions Acher La valeur de la variable A est ; Acher A;

ont le m eme eet que linstruction Acher La valeur de la variable A est, A Lorsque lon combine messages et variables dans les instruction dachage, on les s epare par des virgules. Notez bien que ce qui est d elimit e par des guillemets est ach e tel quel, alors tout ce qui nest pas d elimit e par des guillemets est consid er e comme des variables. Exemple Cet algorithme demande ` a lutilisateur de saisir une valeur num erique, ensuite il ache la valeur saisie puis la m eme valeur incr ement ee de 1. Algorithme : Achage incr ement Variables : num eriques : a, b DEBUT Acher Saisissez une valeur num erique Saisir a b a + 1 Acher Vous avez saisi la valeur , a, . Acher a, + 1 = , b FIN

1.1.6

Types num eriques et alphanum eriques

Types num eriques Nous mettrons maintenant de c ot e le type num erique pour privil egier les deux types suivants : entier, que nous utiliserons pour repr esenter des nombres entiers, eventuellement n egatifs. r eel, que nous utiliserons pour repr esenter des nombres r eels. Types alphanum eriques Nous anerons aussi les types alphanum eriques en leur substituant les deux types suivants : caract` ere, qui est un type permettant de repr esenter un symbole, et un seul. cha^ ne, que nous utiliserons lorsque lon voudra repr esenter z ero, un ou plusieurs caract` eres. Les litt eraux de type caract` eres seront d elimit es par des simples quotes (apostrophes) et les cha nes de caract` eres seront d elimit ees par des double-quotes (guillemets).

1.2

Traitements conditionnels

On appelle traitement conditionnel un bloc dinstructions dont lex ecution est soumise ` a la v erication dun test.

1.2.1

SI ... ALORS

La syntaxe dun traitement conditionnel est la suivante : Si < condition > alors < instructions > n si Les <instructions> ne sont ex ecut ees que si <condition> est v eri ee. Par exemple, Si A = 0 alors Acher La valeur de la variable A est nulle. n si Si la variable A, au moment du test, a une valeur nulle, alors linstruction Afficher "La valeur de la variable A est nulle." est ex ecut ee, sinon, elle est ignor ee. Conditions Une condition peut etre tout type de test. Par exemple, A=2 A=B B <> 7 2>7 La condition A = 2 est v eri ee si la valeur contenue dans A est 2. A = B est v eri ee si les valeurs contenues dans A et dans B sont les m emes. B <> 7 est v eri ee si B contient une valeur di erente de 7. 2 > 7 est v eri ee si 2 est sup erieur ` a 7, donc jamais, cette condition est donc fausse et ne d epend pas des valeurs des variables. Si etendu Le traitement conditionnel peut etre etendue de la sorte : Si < condition > alors < instructions > sinon < autresinstructions > n si Si <condition> est v eri ee, les <instructions> sont ex ecut ees. Dans le cas contraire, donc si <condition> nest pas v eri ee, alors ce sont les <autresinstructions> qui sont ex ecut ees. Par exemple,

Algorithme : Valeurs Distinctes Variables : entiers : a, b DEBUT Acher Saisissez deux valeurs enti` eres Saisir a, b Si a = b alors Acher Vous avez saisi deux fois la m eme valeur, ` a savoir , a, . sinon Acher Vous avez saisi deux valeurs di erentes, , a, et , b, . n si FIN Dans lexemple ci-dessus, la condition a = b est evalu ee. Si ` a ce moment-l` a les variables a et b contiennent la m eme valeur, alors la condition a = b sera v eri ee. Dans ce cas, linstruction Afficher "Vous avez saisi deux fois la m^ eme valeur, ` a savoir ", a, "." sera ex ecut ee. Si la condition a = b nest pas v eri ee, donc si les variables a et b ne contiennent pas la m eme valeur au moment de l evaluation de la condition, cest alors linstruction Afficher "Vous avez saisi deux valeurs diff erentes, ", a, " et ", b, "." qui sera ex ecut ee. Imbrication Il est possible dimbriquer les SI ` a volont e: Si a < 0 alors Si b < 0 alors Acher a sinon Acher a n si sinon Si b < 0 alors Acher b sinon Acher a n si n si

et b sont n egatifs est n egatif, b est positif

est n egatif, a est positif et b sont positifs

Si par exemple a et b sont tous deux positifs, alors aucun des deux tests ne sera v eri e, et cest donc le sinon du sinon qui sera ex ecut e, ` a savoir Afficher "a et b sont positifs". Connecteurs logiques Les connecteurs logiques permettent de d evaluer des conditions plus complexes. Deux sont disponibles : et : la condition <condition1> et <condition2> est v eri ee si les deux conditions <condition1> et <condition2> sont v eri ees simultan ement. ou : la condition <condition1> ou <condition2> est v eri e si au moins une des deux conditions <condition1> et <condition2> est v eri ee. Par exemple, ecrivons un algorithme qui demande ` a lutilisateur de saisir deux valeurs, et qui lui dit si le produit de ces deux valeurs est positif ou n egatif sans en calculer le produit.

Algorithme : Signe du produit Variables : entiers : a, b DEBUT Acher Saississez deux valeurs enti` eres Saisir a, b Acher Le produit de , a, par , b, est Si (a 0 et b 0) ou (a 0 et b 0) alors Acher positif ou nul sinon Acher n egatif n si FIN Linstruction Afficher "positif ou nul" sera ex ecut ee si au moins une des deux conditions suivantes est v eri ee : a 0 et b 0 a 0 et b 0

1.2.2

Suivant cas

Lorsque que lon souhaite conditionner lex ecution de plusieurs ensembles dinstructions par la valeur que prend une variable, plut ot que de faire des imbrications de si ` a outrance, on pr ef erera la forme suivante : Suivant < variable > faire cas < valeur1 > : < instructions1 > cas < valeur2 > : < instructions2 > ... cas < valeurn > : < instructionsn > autres cas < instructions > n Selon la valeur que prend la variable <variable>, le bloc dinstructions ` a ex ecuter est s electionn e. Par exemple, si la valeur de <variable> est <valeur 1>, alors le bloc <instructions 1> est ex ecut e. Le bloc <autres cas> est ex ecut e si la valeur de <variable> ne correspond ` a aucune des valeurs enum er ees. Exemple Ecrivons un algorithme demandant ` a lutilisateur le jour de la semaine. Achons ensuite le jour correspondant au lendemain.

10

Algorithme : Lendemain Variables : entier : erreur cha nes : jour, lendemain DEBUT Acher Saisissez un jour de la semaine Saisir jour erreur 0 Suivant jour faire cas lundi : lendemain mardi cas mardi : lendemain mercredi cas mercredi : lendemain jeudi cas jeudi : lendemain vendredi cas vendredi : lendemain samedi cas samedi : lendemain dimanche cas dimanche : lendemain lundi autres cas erreur 1 n Si erreur = 1 alors Acher Erreur de saisie sinon Acher Le lendemain du , jour, est , lendemain, . n si FIN Vous remarquez que si lon avait voulu ecrire le m eme algorithme avec des Si, des imbrications nombreuses et peu el egantes auraient et e n ecessaires.

1.2.3

Variables Bool eennes

Le type Bool een sera utilis e pour des variables ne pouvant prendre que deux valeurs : vrai et faux. Il serait tout ` a fait judicieux de se demander quel est lint er et dun tel type ? Observons tout dabord cet exemple :

11

Algorithme : Lendemain Variables : bool een : erreur cha nes : jour, lendemain DEBUT Acher Saisissez un jour de la semaine Saisir jour erreur f aux Suivant jour faire cas lundi : lendemain mardi cas mardi : lendemain mercredi cas mercredi : lendemain jeudi cas jeudi : lendemain vendredi cas vendredi : lendemain samedi cas samedi : lendemain dimanche cas dimanche : lendemain lundi autres cas erreur vrai n Si erreur alors Acher Erreur de saisie sinon Acher Le lendemain du , jour, est , lendemain, . n si FIN Le test op er e lors du Si ... alors est eectu e sur une expression pouvant prendre les valeurs vrai ou faux. Par cons equent, un test peut aussi sop erer sur une variable bool eenne. Si la variable erreur contient la valeur vrai, alors le test est v eri e et linstruction se trouvant sous la port ee du alors est ex ecut ee. Si par contre elle contient la valeur faux, alors le test nest pas v eri e et linstruction de trouvant sous la port ee du sinon est ex ecut ee.

12

1.3

Boucles

Une boucle permet dex ecuter plusieurs fois de suite une m eme s equence dinstructions. Cette ensemble dinstructions sappelle le corps de la boucle. Chaque ex ecution du corps dune boucle sappelle une it eration, ou encore un passage dans la boucle. Il existe trois types de boucle : Tant que R ep eter ... jusqu` a Pour Chacune de ces boucles a ses avantages et ses inconv enients. Nous les passerons en revue ult erieurement.

1.3.1

Tant que

La syntaxe dune boucle Tant que est la suivante. Tant que < condition > < instructions > n tant que La condition est evalu ee avant chaque passage dans la boucle, ` a chaque fois quelle est v eri ee, on ex ecute les instructions de la boucle. Un fois que la condition nest plus v eri ee, lex ecution se poursuit apr` es le fin tant que. Achons par exemple tous les nombres de 1 ` a 5 dans lordre croissant, Algorithme : 1 ` a 5 Tant que Variables : entier : i DEBUT i 1 Tant que i 5 Acher i i i + 1 n tant que FIN Cet algorithme initialise i ` a 1 et tant que la valeur de i nexc` ede pas 5, cette valeur est ach ee puis incr ement ee. Les instructions se trouvant dans le corps de la boucle sont donc ex ecut ees 5 fois de suite. La variable i sappelle un compteur, on g` ere la boucle par incr ementations successives de i et on sort de la boucle une fois que i a atteint une certaine valeur. Linitialisation du compteur est tr` es importante ! Si vous ninitialisez pas i explicitement, alors cette variable contiendra nimporte quelle valeur et votre algorithme ne se comportera pas du tout comme pr evu.

1.3.2

R ep eter ... jusqu` a

r ep eter < instructions > jusqu` a < condition > ; La fonctionnement est analogue ` a celui de la boucle tant que ` a quelques d etails pr` es : la condition est evalu ee apr` es chaque passage dans la boucle. On ex ecute le corps de la boucle jusqu` a ce que la condition soit v eri ee, donc tant que la condition est fausse. Une boucle R ep eter ... jusqu` a est donc ex ecut ee donc au moins une fois. Reprenons lexemple pr ec edent avec une boucle R ep eter ... jusqu` a:

13

Algorithme : 1 ` a 5 R ep eter . . . jusqu` a Variables : entier : i DEBUT i 1 r ep eter Acher i i i + 1 jusqu` ai>5 FIN De la m eme fa con que pour la boucle Tant que, le compteur est initialis e avant le premier passage dans la boucle. Par contre, la condition de sortie de la boucle nest pas la m eme, on ne sort de la boucle quun fois que la valeur 5 a et e ach ee. Or, i est incr ement ee apr` es lachage, par cons equent i aura la valeur 6 ` a la n de lit eration pendant laquelle la valeur 5 aura et e ach ee. Cest pour cela quon ne sort de la boucle quune fois que i a d epass e strictement la valeur 5. Un des usages les plus courant de la boucle R ep eter ... jusqu` a est le contr ole de saisie : r ep eter Acher Saisir un nombre strictement positif Saisir i Si i 0 alors Acher Jai dit STRICTEMENT POSITIF ! n si jusqu` ai>0

1.3.3

Pour

Pour < variable > allant de < premierevaleur > ` a < dernierevaleur > [par pas de < pas >] < instructions > n pour La boucle Pour fait varier la valeur du compteur <variable> entre <premi` ere valeur et <derni` ere valeur>. Le <pas> est optionnel et permet de pr eciser la variation du compteur entre chaque it eration, le pas par d efaut est 1 et correspond donc ` a une incr ementation. Toute boucle pour peut etre r e ecrite avec une boucle tant que. On r e ecrit de la fa con suivante : < variable >< premierevaleur > Tant que < variable ><>< dernierevaleur > + < pas > < instructions > < variable >< variable > + < pas > n tant que La boucle pour initialise le compteur <variable> ` a la <premi` ere valeur>, et tant que la derni` ere valeur na pas et e atteinte, les <instructions> sont ex ecut ees et le compteur incr ement e de <pas> si le pas est positif, et d ecr ement e de |<pas>| si le pas est n egatif.

14

Algorithme : 1 ` a 5 Pour Variables : entier : i DEBUT Pour i allant de 1 ` a5 Acher i n pour FIN Observez les similitudes entre cet algorithme et la version utilisant la boucle tant que. Notez bien que lon utilise une boucle pour quand on sait en rentrant dans la boucle combien dit erations devront etre faites. Par exemple, nutilisez pas une boucle pour pour contr oler une saisie !

15

1.4

Tableaux

Consid erons un algorithme dont lex ecution donnerait : Saisissez 10 valeurs : 4 90 5 -2 0 6 8 1 -7 39 Saisissez une valeur : -7 -7 est la 9-i` eme valeur saisie. Comment r ediger un tel algorithme sans utiliser dix variables pour stocker les 10 valeurs ?

1.4.1

D enition

Une tableau est un regroupement de variables de m eme type, il est identi e par un nom. Chacune des variables du tableau est num erot ee, ce num ero sappelle un indice. Chaque variable du tableau est donc caract eris ee par le nom du tableau et son indice. Si par exemple, T est un tableau de 10 variables, alors chacune delles sera num erot ee et il sera possible de la retrouver en utilisant simultan ement le nom du tableau et lindice de la variable. Les di erentes variables de T porteront des num eros de 1 ` a 10, et nous appellerons chacune de ces variables un el ement de T . Une variable n etant pas un tableau est appel ee variable scalaire, un tableau par opposition ` a une variable scalaire est une variable non scalaire.

1.4.2

D eclaration

Comme les variables dun tableau doivent etre de m eme type, il convient de pr eciser ce type au moment de la d eclaration du tableau. De m eme, on pr ecise lors de la d eclaration du tableau le nombre de variables quil contient. La syntaxe est : < type >:< nom > [< taille >] Par exemple, entier : T [4] d eclare un tableau T contenant 4 variables de type entier.

1.4.3

Acc` es aux el ements

Les el ements dun tableau ` an el ements sont indic es de 1 ` a n. On note T[i] l el ement dindice i du tableau T. Les quatre el ements du tableau de lexemple ci-avant sont donc not es T[1], T[2], T[3] et T[4].

16

1.4.4

Exemple

Nous pouvons maintenant r ediger lalgorithme dont le comportement est d ecrit au d ebut du cours. Il est n ecessaire de stocker 10 valeurs de type entier, nous allons donc d eclarer un tableau E de la sorte : entier : E [10] La d eclaration ci-dessus est celle dun tableau de 10 el ements de type entier appel e E. Il convient ensuite deectuer les saisies des 10 valeurs. On peut par exemple proc eder de la sorte : Acher Saisissez dix valeurs : Saisir E[1] Saisir E[2] Saisir E[3] Saisir E[4] Saisir E[5] Saisir E[6] Saisir E[7] Saisir E[8] Saisir E[9] Saisir E[10] La redondance des instructions de saisie de cet extrait sont dune laideur r edhibitoire. Nous proc ederons plus el egamment en faisant une boucle : Pour i allant de 1 ` a 10 Saisir E [i] n pour Ce type de boucle sappelle un parcours de tableau. En r` egle g en erale on utilise des boucles pour manier les tableaux, celles-ci permettent deectuer un traitement sur chaque el ement dun tableau. Ensuite, il faut saisir une valeur ` a rechercher dans le tableau : Acher Saisissez une valeur : Saisir t Nous allons maintenant rechercher la valeur t dans le tableau E. Consid erons pour ce faire la boucle suivante : i 1 Tant que E [i] <> t i i + 1 n tant que Cette boucle parcourt le tableau jusqu` a trouver un el ement de E qui ait la m eme valeur que t. Le probl` eme qui pourrait se poser est que si t ne se trouve pas dans le tableau E, alors la boucle pourrait ne pas sarr eter. Si i prend des valeurs strictement plus grandes que 10, alors il se produira ce que lon appelle un d ebordement dindice. Vous devez toujours veiller ` a ce quil ne se produise pas de d ebordement dindice ! Nous allons donc faire en sorte que la boucle sarr ete si i prend des valeurs strictement sup erieures ` a 10. i 1 Tant que i <= 10 et E [i] <> t i i + 1 n tant que Il existe donc deux fa cons de sortir de la boucle : En cas de d ebordement dindice, la condition i <= 10 ne sera pas v eri ee. Une fois sorti de la boucle, i aura la valeur 11.

17

Dans le cas o` u t se trouve dans le tableau ` a lindice i, alors la condition E[i] <> t ne sera pas v eri ee et on sortira de la boucle. Un fois sorti de la boucle, i aura comme valeur lindice de l el ement de E qui est egal ` a t, donc une valeur comprise entre 1 et 10. On identie donc la fa con dont on est sorti de la boucle en testant la valeur de i : Si i = 11 alors Acher t, ne fait pas partie des valeurs saisies. sinon Acher t, est la , i, -` eme valeur saisie. n si Si (i = 11), alors nous sommes sorti de la boucle parce que l el ement saisi par lutilisateur ne trouve pas dans le tableau. Dans le cas contraire, t est la i-` eme valeur saisie par lutilisateur. R ecapitulons : Algorithme : Exemple tableau Variables : entiers : E [10], i, t DEBUT Acher Saisissez dix valeurs : Pour i allant de 1 ` a 10 Saisir E [i] n pour Acher Saisissez une valeur : Saisir t i 1 Tant que i <= 10 et E [i] <> t i i + 1 n tant que Si i = 11 alors Acher t, ne fait pas partie des valeurs saisies. sinon Acher t, est la , i, -` eme valeur saisie. n si FIN

18

Chapitre 2

Exercices
2.1
2.1.1

Introduction
Aectations

Exercice 1 - Jeu dessai Apr` es les aectations suivantes : A B A B A B <<<<<<1 A B A B A + + + + + 1 2 2 3 3

Quelles sont les valeurs de A et de B ? Exercice 2 - Permutation des valeurs de 2 variables Quelle s erie dinstructions echange les valeurs des deux variables A et B d ej` a initialis ees ?

2.1.2

Saisie, achage, aectations

Exercice 3 - Nom et age Saisir le nom et l age de lutilisateur et acher Bonjour ..., tu as ... ans. en rempla cant les ... par respectivement le nom et l age. Exercice 4 - Permutation de 2 variables saisies Saisir deux variables et les permuter avant de les acher. Exercice 5 - Moyenne de 3 valeurs Saisir 3 valeurs, acher leur moyenne. Exercice 6 - Aire du rectangle Demander ` a lutilisateur de saisir les longueurs et largeurs dun rectangle, acher sa surface.

19

Exercice 7 - Permutation de 4 valeurs Ecrire un algorithme demandant ` a lutilisateur de saisir 4 valeurs A, B, C, D et qui permute les variables de la fa con suivante : noms des variables A B C D valeurs avant la permutation 1 2 3 4 valeurs apr` es la permutation 3 4 1 2 Dans lexemple ci-dessus, on suppose que lutilisateur a saisi les valeurs 1, 2, 3 et 4. Mais votre algorithme doit fonctionner quelles que soient les valeurs saisies par lutilisateur. Exercice 8 - Permutation de 5 valeurs On consid` ere la permutation qui modie cinq valeurs de la fa con suivante : noms des variables A B C D E valeurs avant la permutation 1 2 3 4 5 valeurs apr` es la permutation 4 3 5 1 2 Ecrire un algorithme demandant ` a lutilisateur de saisir 5 valeurs que vous placerez dans des variables appel ees A, B , C , D et E . Vous les permuterez ensuite de la fa con d ecrite ci-dessus. Exercice 9 - Permutation ultime M eme exercice avec : noms des variables valeurs avant la permutation valeurs apr` es la permutation A 1 3 B 2 4 C 3 5 D 4 1 E 5 6 F 6 2

Exercice 10 - Pi` eces de monnaie Nous disposons dun nombre illimit e de pi` eces de 0.5, 0.2, 0.1, 0.05, 0.02 et 0.01 euros. Nous souhaitons, etant donn e une somme S , savoir avec quelles pi` eces la payer de sorte que le nombre de pi` eces utilis ee soit minimal. Par exemple, la somme de 0.96 euros se paie avec une pi` ece de 0.5 euros, deux pi` eces de 0.2 euros, une pi` ece de 0.05 euros et une pi` ece de 0.01 euros. 1. Le fait que la solution donn ee pour lexemple est minimal est justi e par une id ee plut ot intuitive. Expliquez ce principe sans exc` es de formalisme. 2. Ecrire un algorithme demandant a ` lutilisateur de saisir une valeur positive ou nulle. Ensuite, achez le d etail des pi` eces ` a utiliser pour constituer la somme saisie avec un nombre minimal de pi` eces. Vous choisirez judicieusement les types de vos variables num eriques pour que les divisions donnent bien les r esultats escompt es.

20

2.2
2.2.1

Traitements conditionnels
Exercices de compr ehension

Exercice 1 Que font les suites daectations suivantes ? A 1; B 3; Si A B alors A B ; sinon B A; n si

Exercice 2 Pourriez-vous compl eter les instructions suivantes ? SI A = 0 ALORS SI B = 0 ALORS Afficher A, " et ", B, " sont nuls." SINON Afficher ... ...

2.2.2

Conditions simples

Exercice 3 - Majorit e Saisir l age de lutilisateur et lui dire sil est majeur. Exercice 4 - Valeur absolue Saisir une valeur, acher sa valeur absolue. On rappelle que la valeur absolue de x est la distance entre x et 0. Exercice 5 - Admissions Saisir une note, acher ajourn e si la note est inf erieure ` a 8, oral entre 8 et 10, admis dessus de 10. Exercice 6 - Assurances Une compagnie dassurance eectue des remboursements en laissant une somme, appel ee franchise, ` a la charge du client. La franchise repr esente 10% du montant des dommages sans toutefois pouvoir etre inf erieure ` a 15 euros ou sup erieure ` a 500 euros. Ecrire un algorithme demandant ` a lutilisateur de saisir le montant des dommages et lui achant le montant rembours e ainsi que le montant de la franchise. Exercice 7 - Plus petite valeur parmi 3 Acher sur trois valeurs saisies la plus petite. Exercice 8 - Recherche de doublons Ecrire un algorithme qui demande ` a lutilisateur de saisir trois valeurs et qui lui dit sil sy trouve un doublon. 21

Exercice 9 - Tri de 3 valeurs Ecrire un algorithme demandant ` a lutilisateur de saisir 3 valeurs et qui les ache dans lordre croissant.

2.2.3

Conditions imbriqu ees

Exercice 10 - Signe du produit Saisir deux nombres et acher le signe de leur produit sans les multiplier. Exercice 11 - Valeurs distinctes parmi 3 Acher sur trois valeurs saisies le nombre de valeurs distinctes. Exercice 12 - ax + b = 0 Saisir les coecients a et b et acher la solution de l equation ax + b = 0. Exercice 13 - ax2 + bx + c = 0 Saisir les coecients a, b et c, acher la solution de l equation ax2 + bx + c = 0. Exercice 14 - Op erations sur les heures Ecrire un algorithme qui demande ` a lutilisateur de saisir une heure de d ebut (heures + minutes) et une heure de n (heures + minutes aussi). Cet algorithme doit ensuite calculer en heures + minutes le temps ecoul e entre lheure de d ebut et lheure de n. Si lutilisateur saisit 10h30 et 12h15, lalgorithme doit lui acher que le temps ecoul e entre lheure de d ebut et celle de n est 1h45. On suppose que les deux heures se trouvent dans la m eme journ ee, si celle de d ebut se trouve apr` es celle de n, un message derreur doit sacher. Lors la saisie des heures, s eparez les heures des minutes en demandant ` a lutilisateur de saisir : heures de d ebut minutes de d ebut heures de n minutes de n Exercice 15 - Le jour dapr` es Ecrire un algorithme de saisir une date (jour, mois, ann ee), et achez la date du lendemain. Saisissez les trois donn ees s epar ement (comme dans lexercice pr ec edent). Prenez garde aux nombre de jours que comporte chaque mois, et au fait que le mois de f evrier comporte 29 jours les ann ees bissextiles. Une ann ee est bissextile si elle est divisible par 4 mais pas par 100 (http://fr.wikipedia.org/wiki/Ann\%C3\%A9e_bissextile). Vous utiliserez linstruction a mod b pour obtenir le reste de la division enti` ere de a par b.

2.2.4

L echiquier

On indice les cases dun echiquer avec deux indices i et j variant tous deux de 1 ` a 8. La case (i, j ) est sur la ligne i et la colonne j . Par convention, la case (1, 1) est noire. Exercice 16 - Couleurs Ecrire un programme demandant ` a lutilisateur de saisir les deux coordonn ees i et j dune case, et lui disant sil sagit dune case blanche ou noire.

22

Exercice 17 - Cavaliers Ecrire un programme demandant ` a lutilisateur de saisir les coordonn ees (i, j ) dune premi` ere case et les coordonn ees (i , j ) dune deuxi` eme case. Dites-lui ensuite sil est possible de d eplacer un cavalier de (i, j ) ` a (i , j ). Exercice 18 - Autres pi` eces Donner des conditions sur (i, j ) et (i , j ) permettant de tester la validit e dun mouvement de tour, de fou, de dame ou de roi.

2.2.5

Suivant Cas

Exercice 19 - Calculatrice Ecrire un algorithme demandant ` a lutilisateur de saisir deux valeurs num eriques a et b, un op erateur op (v erier quil sagit de lune des valeurs suivantes : +, , , /) de type caract` ere, et qui ache le r esultat de lop eration a op b.

23

2.3
2.3.1

Boucles
Utilisation de toutes les boucles

Les exercices suivants seront r edig es avec les trois types de boucle : tant que, r ep eter jusqu` a et pour. Exercice 1 - compte ` a rebours Ecrire un algorithme demandant ` a lutilisateur de saisir une valeur num erique positive n et achant toutes les valeurs n, n 1, . . . , 2, 1, 0. Exercice 2 - factorielle Ecrire un algorithme calculant la factorielle dun nombre saisi par lutilisateur. Exercice 3 Rep erer, dans les exercices de la section pr ec edente, les types de boucles les plus adapt ees au probl` eme.

2.3.2

Choix de la boucle la plus appropri ee

Pour les exercices suivants, vous choisirez la boucle la plus simple et la plus lisible. Exercice 4 Ecrire un algorithme demandant ` a lutilisateur de saisir la valeur dune variable n et qui ache la table de multiplication de n. Exercice 5 - puissance Ecrire un algorithme demandant ` a lutilisateur de saisir deux valeurs num eriques b et n (v erier que n est positif) et achant la valeur bn . Exercice 6 Ecrire un algorithme demandant ` a lutilisateur de saisir la valeur dune variable n et qui ache la valeur 1 + 2 + . . . + (n 1) + n. Exercice 7 - nombres premiers Ecrire un algorithme demandant ` a lutilisateur de saisir un nombre au clavier et lui disant si le nombre saisi est premier. Exercice 8 - somme des inverses Ecrivez un algorithme saisissant un nombre n et calculant la somme suivante : (1)n+1 1 1 1 1 + + ... + 1 2 3 4 n Vous remarquez quil sagit des inverses des n premiers nombres entiers. Si le d enominateur dun terme est impair, alors vous laditionnez aux autres, sinon vous le soutrairez aux autres. Exercice 9 - nn Ecrire un algorithme demandant la saisie dun nombre n et calculant nn . Par exemple, si lutilisateur saisit 3, lalgorithme lui ache 33 = 3 3 3 = 27. 24

Exercice 10 - racine carr ee par dichotomie Ecrire un algorithme demandant ` a lutilisateur de saisir deux valeurs num eriques x et p et achant x avec une pr ecision p. On utilisera une m ethode par dichotomie : ` a la k -` eme it eration, on cherche x dans lintervalle [min, sup], on calcule le milieu m de cet intervalle (` a vous de trouver comment la calculer). Si cet intervalle est susament petit (` a vous de trouver quel crit` ere utiliser), acher m. Sinon, v eriez si x se trouve dans [inf, m] ou dans [m, sup], et modiez les variables inf et sup en cons equence. Par exemple, calculons la racine carr ee de 10 avec une pr ecision 0.5, 2 Commen c ons par la chercher dans [0 , 10], on a m = 5, comme 5 > 10, alors 5 > 10, donc 10 se trouve dans lintervalle [0, 5]. 52 5 On recommence, m = 2.5, comme 2 = 25 10, on poursuit la recherche 4 < 10, alors 2 < dans [ 5 , 5] 2 On a m = 3.75, comme 3.752 > 10, alors 3.75 > 10 et 10 [2.5, 3.75] On a m = 3.125, comme 3.1252 < 10, alors 3.75 < 10 et 10 [3.125, 3.75] Comme l etendue de lintervalle erieure 2 0.5, alors m = 3.4375 est une [3.125, 3.75] est inf approximattion ` a 0.5 pr` es de 10.

25

2.4

Tableaux

Exercice 1 - Initialisation et achage Ecrire un algorithme les valeurs 1, 2, 3, . . . , 7 dans un tableau T ` a7 el ement, puis achant les el ements de T en partant de la n. Exercice 2 - Contr ole de saisie Ecrire un algorithme pla cant 20 valeurs positives saisies par lutilisateur dans un tableau ` a 20 el ements. Vous refuserez toutes les valeurs strictement n egatives. Exercice 3 - Choix des valeurs sup erieures ` at Ecrire un algorithme demandant ` a lutilisateur de saisir dix valeurs num eriques puis de saisir une valeur t. Il achera ensuite le nombre de valeurs strictement sup erieures ` a t. Par exemple, si lutilisateur saisit 4, 19, 3, 2, 8, 0, 2, 10, 34, 7 puis 3, alors le nombre de valeurs strictement sup erieures a 3 parmi les 10 premi` ` eres saisies est 6 (4, 19, 8, 10, 34 et 7).

26

Vous aimerez peut-être aussi