You are on page 1of 59
1 Les variables Lécriture d’un programme est une opération complexe qui requiert de nombreuses étapes. Le plus important est de comprendre 'objectif final et de le respecter. Pour cela, il est souvent préférable de _ décomposer Ie traitement souhaité en une succession d’opérations plus petites et plus simples. Un algorithme est constitué de Ia suite de ces opérations élémentaires. Elles devront étre décrites avec précision dans un ordre cohérent. Pour pouvoir représenter cette suite d’ opérations, nous allons intro- duire un langage algorithmique et une présentation précise. Structure d’un algorithme Les algorithmes ont pour vocation de nous faire réfiéchir, mais pas de s'exécuter sur un ordinateur pour cela, il sera nécessaite de traduire P’algorithme dans un langage de programmation. L’algo- rithme décrit sur papier un traitement : il est nécessaire d’en simuler le déroulement. Aigorlthmique simple ParTie | Notre langage structure un algorithme en deux parties + La premitre ligne indique le nom de l'algorithme. + Ladeuxitme partie, le traitement, située entre les mots clés Debut et Fin, contient le bloc d'instructions. La structure d'un algorithme est la suivante {] Algorithme nom-de-1*algorithme W/parie ene | Debut 1M pti sitemen, |] __ bloc 4" instructions; C Fin Chaque ligne comporte une seule instruction. L’exécution de Palgorithme correspond a la réalisation de toutes les instructions, ligne aprés ligne, de la premiére & la dernire, dans cet ordre. (Ces commentaires seront utiles aux programmeurs qui veulent comprendre ou modifier l’algorithme. La complexité des algorithmes impose de les commenter judicieusement : ni trop, ni trop peu, toujours de maniére utile. Ecrivons l'algorithme permettant d’afficher "bonjour tout 1e monde". Pour cela, nous avons besoin une fonction ecrire("phrase") permettant d’écrire dans le résultat la phrase écrite entre parenthé- ses, Soit P’algorithme suivant : Algorithme ai go-bonjour © debut | ecrire("bonjour tout le monde"); o Fin Pour résoudre un probléme, nous imaginons souvent plusieurs solutions. Dans notre exemple, l’algo- rithme suivant conviendra également, sachant que les lignes du traitement seront toutes exécutées de la premiére a la demniére, dans cet ordre, {Algorithme a1go-bonjour2 8 Debut ecrire("bonjour"); a ecrire(*tout le monde"); | rte feeeeueenesees Les variables Capras 1 Mais comme I’exécution de ces deux algorithmes fournit un résultat identique, il est souvent préféra: ble de choisir le plus simple (ici, le premier) Les données Déclaration et utilisation des variables La plupart des problémes nécessitent le traitement de valeurs : certaines sont données dans I’énoneé, autres sont le résultat des calculs issus de l'exécution de Palgorithme. Une troisime catégorie de valeurs intermédiaires nous servira pour calculer le résultat & partir des données : nous les introdui- rons dans le chapitre suivant, Les valeurs, pour pouvoir étre manipulées, sont stockées dans des variables. Dans tous les cas, les variables utilisées au cours de I’exécution de I’algorithme sont déclarées immé- diatement aprds le nom de Palgorithme. Il suffit d’indiquer le nom de la variable suivi de son type, séparés par deux points « :». La syntaxe La structure d’un algorithme (déclarant une variable nommeée indice et de type entier) est alors la suivante : Algorithme nom-de-1'algorithme if patie en-éte variables: indice: entier ‘ponte des Graton des vats Debut ‘Vamsi bloc d’ instructions; Iria La partie supplémentaire, placée nécessairement avant le bloc Debut ~ Fin, décrit les variables & déclarer pour arriver au résultat. Ici, une variable nommée indice de type entier a été déclarée, et pourra done étre initalisée et uilisée dans le bloc d’instructions. Le nom — Ie type ~ la valeur 6 Algorithmique sim _ - Paamig | Pour faciliter la lecture des algorithmes, il convient de respecter des regles (inspirées du langage Java) pour nommer les variables. > Lenom d’une variable commence par une minuscule, © Le nom d’une variable ne comporte pas d’espace. + Sile nom de la variable est composé de plusieurs mots, il faut faire commencer chacun deux par tune majuscule (par exemple : 1aV'tesse, val eurMaxOuliin) et ne pas faire figurer de traits d’union © Il faut également faire attention bien donner aux variables un nom explicite (proserire 2, 222...). Les variables peuvent appartenir 4 plusieurs domaines (entier, réel, caractére, booléen, etc.), chacun Gtant associé A des opérations spécifiques. Les différents domaines et leurs opérations sont étudiés au chapitre suivant. La valeur de la variable est la seule caractéristique qui soit modifige au cours de algorithme. Au début de 'algorithme, toutes les variables ont des valeurs inconnues. Les variables changent de valeur grace a Popération d’affectation Détermination des variables Lorsque le probléme a été décomposé en une suite d’opérations simples, il faut toutes les résoudre Pour écrire un algorithme, nous vous conseillons de commencer par définir l'ensemble des variables nécessaires & son traitement. Il peut sembler simple de définir les données et le résultat du probleme, mais la moindre erreur dans la détermination des bonnes variables 2 utiliser au cours d’un algorithme est lourde de conséquence. Soit le probléme suivant : calculer et écrire le double d’un nombre réel donné. Fudions ce probléme : il nous informe qu’un nombre réel nous est donné (par exemple 7), et qu’un autre nombre réel sera calculé (7 x 2 done 14) puis affiché. Introduisons donc deux variables asso- ciges respectivement & la donnée et au résultat. La structure de l’algorithme est alors la suivante : § Algorithme double | vartables: nombre, resuTtat: réel; | Debut nombre & 7; resultat nombre x 2; ecrire(resultat); O Fin Les varlabies Onaern Lalgorithme se déroule de maniére séquentielie et ligne aprés ligne, les variables changent parfois de valeurs & mesure du déroulement, Au départ, lors de la déclaration, les valeurs sont inconnues : leur valeur est indiquée par « ? ». L’existence des variables n'a de sens que le temps de J’exécution de Palgorithme. nombre <7; [Oresultat nombre x2; a x i Cet algorithme est constitué de trois instructions qui seront effectuées, dans le traitement du programme cortespondant, les unes apres les autres, Les variables nombre et résultat sont déclarées comme étant réelles. A la suite de ces déclarations, ces deux variables n’ont aucune valeur particuliéte. La premidze instruction consiste & affecter 2 la variable nonbre la valeur 7. A la fin de cette instruc- tion, done apres le point-virgule, la variable nombre vant 7. La seconde instruction resultat nombre x 2; est un peu plus complexe, C'est une affectation. ‘Mais Ia valeur & affecter n'est pas encore connue : elle doit étre évaluée. La valeut 7 de la variable nombre est multipliée par 2, et a pattie droite de expression est alors remplacée par le résultat 14. Cette valeur est ensuite affectée exactement comme si la ligne avait été resultat < 14:. La troisiéme instruction ne modifie pas la valeur des variables. On remarque que les deux premigres instructions de cet algorithme ne sont pas permutables, Les erreurs a éviter Les exreurs les plus courantes concerant l'utilisation des variables sont : * Une variable n'est déclarée qu’ une seule fois dans un algorithme. * Une variable est déclarée au début de I’algorithme et non dans la partie réservée aux instructions de traitement. ° Avant de pouvoir utiliser une variable, il faut I’avoir déclarée dans le bloc des variables. + Avant de pouvoir utiliser la valeur d’une variable, une valeur doit lui étre attribuée. Aigorithne variables-erreurs variables: nombre, resultat: réel; Debut resultat € nonbre X 2; /feneusonbe napus de aleer valeur @ 1; Meare eps dine Fin Dans Palgoritiame précédent, la premidre instruction ne peut pas etre exécutée, puisque la variable nombre n’a pas de valeur et qu’ainsi Pexpression & droite du signe affectation ne peut pas étre évaluée, Algorithmique aimpts PARTIE | Types des variabies Examinons les domaines de base, appelés aussi types de base ou types primitifs ou encore types simples, définis et utilisables dans le langage algorithmique : les entiers, les réels, les caractéres et les booléens. Le type réel et le type entier Description | Le type réei te type entior 5 Variables de type numérique uth | mathématiques :réel ou enter, If Algortthme type-rée? I pricenstie variables: nombrel, nonbre2, resultat: réel; ifpmiedes : varl: entiers ‘Acland asa | Debut } nombrel < 1.2; i nombre2 «15; fool’ | resultat © nombrel / nombre? x var; Wopémton: 12/15 x2 Fin Les opétations utilisables sur les éléments de ces domaines sont tous les opérateurs arithmeétiques classiques : addition (+), la soustraction (-~), le produit (x) et la division (/). ‘On pourra utiliser, sur les éléments de type entier ou réel, les opérateurs de comparaison classiques : >< # = 2s Deux opérations sont spécifiques aux entiers : la division entire DIV et le modulo MOD. L’opération DIV (respectivement MOD) entre deux entiers retourne le résultat (respectivement le reste) entier de leur division, Par exemple : 15 DIV 2 vaut 7 et 15 MOD 2 vaut 1, en effet, 15 =7x2+ 1 Ces deux opérations sont trés utiles pour savoir si un nombre est pair ou impair (avec MOD 2), et pour récupérer Ia valeur du dernier chiffre d'un nombre (avec MOD 10). Conversion Convertir un entier en réel est naturel : cette opération n’entraine pas de perte ¢’information, Par exemple, V’entier 15 deviendra 15,0. Convertir un réel en entier entraine une perte d'information : les chiffres décimaux sont perdus. Par exemple, le réel 15,75 deviendra 15, Cette conversion sera étudiée au chapitre 3, traitant des fonctions. Algorithme conversfon-numerique variables: nonbrel: entier; nombre2: réel; Debut nombrel € 18; ee Les variables ‘CHAPITRE T f nombre? <~ nonbrel; pombe vat 15,0 : nombrel < nonbre2 + 0,8; d encur: impossible Fin Le type caractére Description racleres alphabstiques, Lt agit du domaine constué ds ca On ne devra pas confondte le signe '3' (noté entre deux « simples quotes ») en tant que caractére et rentier 3. Les seules opérations élémentaires pour les éléments de type caractére sont les opérations de comparaison, ><# En fait, & chaque caractére est associé une unique valeur numérique entire (le code ASCII établit cette correspondance : par exemple, la lettre ‘A’ correspond a la valeur 65) et les comparaisons porte- ont sur ces valeurs numériques cohérentes avec I’ordre lexicographique. Les caractéres de ponctuation ne possédent ni majuscule, ni minuscule, Citons lespace tout d’abord, ainsi que le point, la virgule, le point-virgule... Pour écrire un algorithme, nous ne devons pas connaitre par cceur les valeurs de la table ASCII, Mais ‘nous utiliserons trois prineipes caractérisant ’ordre des valeurs entigres associées aux caractéres : * Les entiers correspondant aux caractéres ‘A’, 'B'... 'Z’ se suivent dans cet ordre. * Les entiers correspondant aux caractéres ‘a’, 'b’... 'z' se suivent dans cet ordre. 49! se suivent dans cet ordre. + Les entiers correspondant aux caractéres numériques Conversion Alors, pour convertir un caractére minuscule en majuscule, il suffit de lui ajouter la différence qui les sépare:'c' + (°A' = ‘a') vaut 'C'. La conversion de type caractére vers entier : pour convertir le caractére "3° en une valeur entiére 3, il suffit de caleuler la différence entre les deux caractéres : *3" — '0", qui vaut 3, La conversion de type entier vers caractére ; pour convertir Pentier 3 en une valeur caractére "3°, il suffit de calculer la somime pour obtenir le caractére : 3 + ‘0, qui vaut ‘3° Voici un exemple simple : Algorithme conversion-caractere-entier variables: car: caractere; nombre: entters Debut car © "3 nombre <= '3' = "0's pombe vau3 nombre < nombre + 2; norbre vases Algorithmique simple Paarie | ay car © "0" + nombre; seuvan's Fin Le type logique booléen Description Les opérations admissibles sur les éléments de ce domaine sont réalisées & l'aide de tous les connec- teurs logiques, notés : © ET: pour le « et logique » ; + OU: pour le « ou logique inclusif » (il est vrai si 'un des deux booléens testés vaut vrai) ; * NOW : pour le « non logique ». La table de vérité donne la réponse « Vrai » ou « Faux » des opérations logiques. (°)signife :« Vral OU Faux » vaut« Vral » Exemples { Mooritine type-dooteen variables: booleenl, booleen2: booléen; Debut E bootéent 5 <6 5 bolen! pred ta alee Vai [booteena WO booteen]: stoned panda nerf | booléenz & (5<7) OU (3>8)5. bone? pena vale Vi J, booteent & vrats ‘Woolen prea lave Vai 5 Fin Les erreurs & éviter Lors d’une affectation, la valeur de la partie droite doit obligatoirement étre du type de Ia variable dont la valeur est modifiée. Algorithme type-erreurs vartables: car: caractere; i i Debut car & 1.56: earn ea ns pas da ype car © 5 <8 5 Hearurcar w'extps du pe boolea Fin Les variables ‘Caritas 7 an Fonctions d’entrée-sortie Les algorithmes ont pour vocation de nous faire réfiéchir sur papier. II est néanmoins nécessaire de simuler le déroulement de notre algorithme. Les programmes utilisent fréquemment des instructions permettant ’affichage a I’écran et la saisie de valeurs au clavier par ’utilisateur. Nous allons nous munir de deux opérations analogues permettant de simuler : * Vaffichage d’une phrase avec l’instruction ecrire() ; la saisie d’une valeur par lutilisateur avec I’instruction 1ire() La fonction lire L'instruction de saisie de données par l'utilisateur est: f] 1ire(nombeLaVari able); L’exécution de cette instruction consiste & : 1, Demander 4 ’utilisateur de saisir une valeur sur le périphérique d’entrée ; 2. Modifier la valeur de Ia variable passée entre parenthdses, Avant Pexécution de cette instruction, la variable de la liste avait ou n’avait pas de valeur. Apres, elle ala valeur Ine au clavier (le périphérique dentrée).. La fonction ecrire ‘instruction d’affichage a I’écran (le périphérique de sortie) d’une expression est {] ecrire(expression) ; Cette instruction réalise simplement l'affichage de expression passée entre parenth’ses. Cette expression peut étre simplement une variable ou des commentaires écrits sous la forme dune suite de caracttres entre guillemets ou encore & la fois des phrases et des valeurs séparées par une virgule. x Algorithme exemple-lire-ecrine vartables: nb: réel: Debut Virecnb); 1) sitseur sas nombre a lave ecrire(*la valeur de nb"); ‘one passe est ache &éea0 ecrire(nb); axe valores affichée AIS | ecrire("la valeur de nb est: ", nb); dfonephase,suive ‘de a valeur est fiche B'tan Fin Le langage algorithmique nous permet dés présent de résoudre des petits problémes. Ecrivons un algorithme qui demande & utilisateur de saisir au clavier trois nombres réels et qui affiche & l’écran Ja somme de ces trois nombres, Lanalyse de I'énoncé nous montre utilisation de 3 données (les 3 nombres réels saisis) et d’un résultat (la somme). Introduisons 4 variables pour construire l'algorithme suivant : Algorit Paarie | ique simple J} Algorithme Sonme-de-3-reels variables: nb1, nb2, nb3, sommes réel; Debut Vire(nbl): listers premier nome au vir Tirecnb2); Virecnb3); sone < nbl + nb2 + nb3; ecrire(sonme) ; ‘ia somme est alee Aran Fin a Les types objet : une boite a outils Les ‘Nous avons introduit les types primitifs (entier, réel, caractére, booléen) avec les opérations usuelles associées, De la méme maniéte, introduisons une boite & outils définissant un nouveau type appelé de maniére générale type objet, permettant Ia manipulation de données : le type Chatne et le type Date. Chaque type de donnée est associé & des opérations particulidres. Nous pourrons alors gérer des chat- nes de caractéres et des dates de maniére simple, II s’agit d’une approche spécifiquement intuitive de la notion d’objet, l'approche profonde sera faite dans le chapitre 4. Le lecteur appréhende I’objet d’abord par la manipulation, f owt eae <~ — chaines de caractéres. ——_. f#aclii Présentation de la classe Chaine Une chaine de caractéres est composée de caractéres alphanumériques formant un mot ou une phrase. lest impossible de manipuler les chatnes de caractéres avec les opérations usuelles définies pour les réels ou les entiers : la classe Chaine nous fournit done des opérations spécifiques. Linterface utilisateur de la classe Chaine (V’ensemble des opérations définies pour les manipuler) est décrite dans le schéma suivant (figure 1-1). Y sont déclarées toutes les « opérations » que I’on peut effectuer sur n’importe quelle chaine. Ces « opérations » seront appelées des méthodes. La manipu- lation des objets se fait exclusivement & l’aide de ces méthodes. Figure 1-1 interface utilisatewr de la classe Chane. + Chaine(Chaine) + Chaine(suite de caractéres) + Chaine(entier) + ecrire(): vide + Vire(): vide + longueur(): entier . 5 . jemeCar(entier): caractére | | | | | | | | modi fierleme(entier, caractere): vide concatener(Chaine) Las variables Détaillons les méthodes de la classe Chaine (chaque méthode est par la suite expliquée gréce 4 un exemple d'utilisation) > Chaine() permet de créer une chaine en mémoire. * ecrire() permet d’écrire la chaine sur I’écran, * Vire() permet &'utilisateur de saisir le contenu de la chafine. * Jongueur) fourit le nombre de caractéres de la chafine. + seneCar(entier) fournit le caractére qui est & la position passée en paramétre (le premier caractére est & la position 0). + nodifiertene(entier, caractere) remplace le caractére situé @ la position donnée en paramatre (le premier caractére est 4 la position 0). + concatener(chaine) modifie la chaine en lui juxtaposant la chaine passée en mémoire. Utilisation d'une chaine Expliquons comment utiliser une chaine dans un algorithme & travers des exemples de déclaration et utilisation, La manipulation d’une chaine nécessite deux étapes : 1. Il faut créer la chaine. En effet, la simple déclaration dans le bloc variable ne suffit pas & la créer. 2. On peut alors utiliser la chaine grace aux méthodes de I’interface utilisateur. Déctaration On déclare une variable de type Chaine de la maniére suivante : J} vartables: nonDelavariadle: Chane: Ensuite, on construt effectivement l’objet (appelé aussi instance) dans le corps du programme avee Popérateur new : f] nomDelavariable < new Chaine(); ta varabicesinaiée Remarquons que l'on a utilisé, pour cette construction, la premigre méthode de construction Chaine qui initialise un texte a vide. On doit initialiser les chaines avant de les utiliser, Par exemple, les variables non, prenon et Frere sont initialisées par les trois méthodes suivantes : Aigortzhne creation-de-la-chaine variables: nom, prenom, frere: Chaine; Debut nom « new Chaine("Dupond"); 10 sarah oom et intii6e et cevint "Dupond” Frere new Chaine(nom) ; avril fere cones aussi "Dupond prenom < new Chatne(); ete nee nies, ms vide Fin Algorithmique simple Paamie | Chaque instruction new déclenche dans la mémoire la création d’une zone réservée schématisée par une case contenant la chaine créée, Représentons 1’état de la mémoire a la fin de I’exécution de Palgorithme précédent. { algo thme creation-de-la-Chaine ] Figure 1-2 Variables instances Etat de la mémoire, — « Dupond » nom frere [a] « Dupond » ses ee nea prenom | —9| oo Nous ne pouvons accéder au contenu d’une chaine qu'aprés l’avoir fabriquée. Nous pourrons alors utiliser & P’aide des méthodes suivantes que nous allons détailler & travers un exemple, Utilisation La méthode fonctionne en association avec une case spécifique (précisée lors de appel) du schéma mémoire. Algorithme utilisatton-de-Te-Chaine { variables: nom: Chaine; : 1g: entfer; i car: caractere: | Debut | nom < new Chaine(); {nom.11rec); ‘Vaile ssc ga ve [19 C now. Tongueur(); gamle dum [car € nom.temeCar(3): ifarcotenta $etve dma i 1 préesons qu In premire est indice 0 | nom.modifiertene(S, "t"): slasixme lee cage | nom.ecrire(); Won erie ao a Fin Devant chaque méthode, séparée par un point, il faut indiquer le nom de a chaine sur laquelle s’applique I’ opération. La méthode est déclenchée par l'objet spécifié devant le point. Représentons a ___Les variables CHAPITRE 1 Pétat de la mémoire a la fin de I’exécution de P algorithme précédent, en supposant que Patilisateur a saisi la chaine "Dupond” lors de la lecture au clavier (voir figure 1-3) Figure 1-3 eee aigorithme wtilisation-de-la-Chaine Variables instances nom | al oz6 « Dupont » Les erreurs a éviter ° ne pas oublier de créer la chafne avant de lui appliquer une opération ; + préciser sur quelle chafne est appliquée l’opération (ne pas oublier Je point « . » devant une méthode) ; * toujours metize des parenthdses ; * utiliser des paramstres convenables pour les opérations ‘eneCar et madifiertene ; * pour lire et écrire des chaines, utiliser les méthodes lire et ecrire et non les fonctions d’entrée- sortie lire et ecrire Voici un algorithme avec cing erreurs d'utilisation des méthodes : Algorithme uti 1isatfon-de-la~Chaine-avec-des-erreurs vartables: nom, prenom: Chain: Ig: entier; car: caractere; Debut | nom <= new Chaine(); Fin | Vg © prenom.longueur() ; //\schsie prenom n'a paid etée Ig © Tongueur(): ‘Ma longaear de quoi? Tg & nom. Tongueur; ‘AL manque ls penises car © mom.temeCar(); (it tau précsele mms de alee Vire(nom); 1 fat lise Popétion nomic) ecrire(nom); ‘il fut lise Popéation : nom etze) Algorithmique simple PaaiieT Les dates Présentation de la classe Date Une date est un type objet permettant de gérer les dates désignées par le jour, le mois et année. Avee la classe Date, il convient de fournir ensemble des opérations capables de gérer des dates, L’inter- face utilisateur de la classe Date est décrite dans la figure 1-4, Figure 1-4 cae Linterface uilisateur fone - de la classe Date. [+ pate() + Date(jour, mois, an: entier) + Date(d: Date) + dateEnChaine(): Chaine | + estissextile(): booléen 5 precede(d: Date): booléen * date() permet de créer une date en mémoire initialisée au 01/01/1970. * datetnchaine() retourne La date sous forme de chafne de caractares. + estBissextile() indique si l'année est bissextile (Vrai ou Faux). + precede(d: Date) indique sila date est antérieure ou non & celle passée entre parenth’ses, Utilisation de la classe Date On déclare une variable de type Date de la maniére suivante @ variables: identificateur: Date; Bton construit l'objet dans le corps du programme avec l’opérateur new : H Identificateur © new Date(2a, 4, 2003); i ‘a abe ie otto 2 a 20 On doit initialiser les dates avant de les utiliser. Par exemple, Jes variables di, 42 et 43 sont initialisées par les trois méthodes suivantes : Algorithme construction-de~la-Date vartables: dl, d2, d3: Date; Debut i di & new Date(23,4,2003); In variuble di est initiaisée ; 43 &— new Dated); ‘cote date est initalisée, mais au janvier 1970 Représentons I'état de la mémoire & la fin de l’exécution de Palgorithme précédent (figure 1-5). Figure 1-5 iat de la mémoire, Les variables CuapITRE 1 Variables a] d2 al 3 23/04/2003 ~~ | instances > 23/04/2003 -¥} 01/01/1970 On peut accéder au contenu d'une date et |’utiliser, a l'aide des méthodes : Algorithme uti lisation-de-la-Date | vartables: di, d2: Date; t | | Fin estBis, avant: booléen; Debut dl © new Date(7,3,1970 ); d2 © new Date(10,12,1970 ); estBis © d2.estBissextile(); /esBis vau Faux :a2 q avant © dl. precede(d2); d2.dateEnChaine().ecriret); test pas bissetile ‘A avant vat Ve: peso 2 ‘Mon aosfonne ha date en cine ‘econ ls méthode erie de Chalne Représentons |’état de la mémoire 8 la fin de ’exécution de l’algorithme précédent (figure 1-6). Figure 16 Etat de la mémoire, algorithme Utilisationde-la-Date Variables a [al a2 estBis = Faux instances >| 07/03/1970 — 10/42/1970 avant = Vrai Algorithmique simple Parmie | Les variables et les objets Date Deux variables pour un seul objet test possible que plusieurs variables référencent un méme objet date (une méme instance). 4 Mgorithme deux-variables-pour-une-Date | vartables: di, d2: Date; |) debut [ai © new Date(23, 4, 2003); sriaywisbled estnitinge (aed: (rated eect mc forts Liétat de la mémoire & la fin de ’exécution de Palgorithme précédent, montre qu'une seule instance peut posséder plusieurs noms dans |’algorithme. Apr’s I’instruction 2 < di, appliquer une méthode sur d] ou sur d2 est identique : c’est le méme objet qui sera manipuleé ! Figure 1-7 Etat de la mémoire, algorithme deuxvariablespourune-Date Variables instances a [et =| | 2a04i2003 @ Un objet sans variable Test possible qu'une instance ne soit plus référencée Algorithme une-date-sans-variable i | variables: di: Date; | Debut | 41 < new Date(23, 4, 2003); vied eine 1G mew Date(i3, 12, 2004); tradable dt em inate 4 Fin L état de fa mémoire & la fin de I’exécution de I’algorithme préeédent, montre que d1 permet de mani- puler la date du 13/12/2004 uniquement, I’instance du 23/04/2003 ne peut plus étre utilisée dans Talgorithme (voir figure 1-8). Figure 1-8 Euat de la mémoire. Variables instances 23/04/2003 di 43/12/2004 Les variables Les schémas mémoire I est primordial de connaitre I’état des variables en cours d’exécution d'un algorithme grace 8 un schéma mémoire. Un schéma mémoire délimite trois parties distinctes : + Lenom de Valgorithme. + La partie des variables od toutes les variables définies seront représentées par — une valeur (ou par « ? » si ta variable n'a pas encore de valeur) pour les variables de type primit ~ une fléche (pointant sur une case dessinée dans la partie droite du schéma) pour les variables de type objet Chaine ou Date. + La partie des instances o& chaque case aura été créée par Putilisation de l'opérateur new: ily a autant de cases & représenter qu'il y a de new dans Palgorithme. Des schémas mémoire ont été donnés tout au long de ce chapitre, d'autres seront systématiquement représentés pour illustrer le déroulement des algorithmes. Certaines erreurs courantes sont a éviter : + oublier de représenter une variable ; + donner une mauvaise valeur & une variable ; + représenter les chatnes ou les dates sans une case associée ; * oublier de préciser I’étape (au cours du déroulement de Palgorithme) représentée par le schéma mémoire. Le type tableau Le type tableau permet de stocker des valeurs de méme type griice & une seule variable. Déclaration d’un tableau Algorithmique simple ee ae PARTIE T Détinition Dimension, type et indice aun tableau Le nombre maximal déléments au tableau, aléments stanpolé Ie type du tableau, Pour velément, = ee Un tableau est défini en deux temps. Le tableau nommé tab est déclaré de la manidre suivante, ainsi que le type de base de ses éléments, C'est une déclaration de variable J varfable: tab: tableaut] de donaines Puis, instruction dans le corps du programme qui implémente effectivement le tableau, c*est-d-dire qui réserve de la place en mémoire, est construite avec un opérateur new agissant dans lenvironne- ment d’exécution du programme tab © new domaine(10]; setwbiea taba une dimension de 10 déments L’exemple suivant représente le tableau d'entiers tab (d’identificateur tab, de dimension 10 et dont le type est entiex). Les indices qui permettent d’y aceéder vont de 0 89. Notons que le premier indice des éléments d’un tableau vaut toujours 0. L'indice du demier élément vaut la dimension du tableau I (dans cet exemple, le tableau tab[91 est le dernier élément). A Vaide d’une seule variable de type tableau, il est possible de manipuler plusieurs valeurs différen- tes. Par exemple, tab{0] est vu comme une variable indépendante ayant la valeur 22, tab{1) est une autre variable de valeur -7... Utilisation d’un tableau Tableau 4 une dimension La manipulation des éléments du tableau tab est décrite dans exemple suivant : une seule variable permet de stocker 4 notes entires. {| Algorithme utiTisation-tableau variables: notes: tableaul] d’entiers; Debut notes © new entlerl4]; notesCO] < 12; sfon peut Geer valeur de élément dindce 0 notes(1] 14; notesl2] < 10; notes[3] < 18; Fin Représentons l'état de la mémoire & la fin de l'exécution de lalgorithme précédent (voir figure 1-9). Figure 1-9 Enat de la mémoive d'un tableau. Variables instances notes | al 42 | 14 | 10 | 18 Tableau a deux dimensions Si nous désirons écrire un programme qui travaille avec un damier de 3 cases sur 3 contenant des entiers, nous introduirons une instance damier sous forme d'un tableau de 3 cases sur3. Ecrivons Palgorithme modifiant trois éléments du tableau. 4 Algorithme damier variables: damier: tableau JC] d’entiers: Debut damter < new entier£3](31; | damiert0]¢0] < 0; | damier(13[1] © 0; | damlerCOJ[1] © 13 i Fin Figure 1-10 7 Etat de la mémoire. algorithme damier Variables instances . polo [2 [2 damier 1{o]e ale]? Comme pour toutes les variables, avant d’étte initialisés, les éléments du tableau ont des valeurs inconnues représentées par « ? » (figure 1-10). Echanger deux variables Savoir échanger le contenu de deux variables est une technique assez simple, dont la maitrise est nécessaire, Sp Imaginez que vous aver deux bouteille : Pune contient du vin, autre de eau. Comment échanger eur contenu ? Tout simplement en passant par l'intermédiaire d'une troisi¢me bouteille qui stockera temporairement Je vin, le temps de transvaser l'eau. Le principe est identique en algorithmique : il {fait introduire une variable temporaire (du méme type que les deux autres) qui stockera une valeur. ay Algorithimique simple / PARTIE T ¢ Echanger deux nombres Vous avez obtenu, au cours de Pexécution d'un algorithme, deux variables entidres valeurl et vsleur2. Vous voulez échanger leurs contenus respectifs Algorithne echange-deux-entiers vartables: valeurl, valeur2: entier; ‘tenporatre: entier; Debut valeurl © 155; | valeur? © 3; | tenporatre valeurl: j valeurl © valeur2; | valeure © temporaire: fein A la fin de lalgorithme précédent, valeurl vaut 3, valeur? vaut 185, et temporaire vaut 155, Pour ne pas commetire d’erreur, vérifiez toujours que vous avez bien sauvé la valeur avant de I’éeraser : 1a variable valeurl est sauvée dans la variable tenporaire juste avant d'étre écrasée par celle de valeur2. Echanger deux objets Le méme principe s'applique pour échanger deux chaines ou deux dates § Algorithme echange-deux-Chaines variables: valeurl, valeur2: Cheines temporaire: Chaines | pebut valeurt & new Chaine(*Dupond")s valeur? & new Chaine(*Durand"); temporaire @ valeurl: valeurl & valeur; valeur2 temporaire: Fin Un schéma mémoire (figure 1-11) permet de mieux comprendre le mécanisme d’échange en trois étapes, Les anciennes valeurs sont indiquées en pointillés 1. La variable temporaire vaut valeur 2. On modifie la valeur, 3. On modifie la valeur2 grace a la variable temporaire. Les variables Suet Figure 1-11 Echange de deux objets. | Variables instances Q)O valeurt — Ja « Dupond » valeur2 . = Duran temporaire | & : 7 aD Exercices de bilan Exercice 1.1 Indiquer les valeurs prises par les variables au cours de I’algorithme suivant. | Algorithme calcul -de-facture vartables: valeur, prix, prixtT0 : réets i nombres enters Debut | valeur © 7,50; i nombre <= 43 iter rokecom i eorire(prixt): prixTTC < prixkT x 1,196; ecrire(prixTTC); Fin Exercice 1.2 Ecrire un algorithme qui effectue la conversion de francs en euros (1 € = 6,56 francs). Exercice 1.3 Ecrire un algorithme qui prend une somme en euros et la décompose en billets de 10€, eten pidces de 2 €et de 1 € Exercice 1.4 Trouver les valeurs booléennes prises au cours de I’algorithme suivant, Algorithme calcul-de-facture variables: a, b: entier; bi, b2, b3, b4: booléen; Debut ae 10; bea bi © (1010) ET (555); b2 © (aml0) OU (b#5) OU (326); b3 @ (arb) ET ((5=5) OU (béa)); ba & (FAUX) ET (URAL) OU (a>b); | Fin Algorithmique simple _ Parmrie 7 Exertice 1.5 Faire lire une chaine 4 ’utilisateur, remplacer le dernier caractére par un ‘s* et ’afficher, Exercice 1.6 Lire une date et afficher si elle est bissextile. Exercice 1.7 Définir un tableau de 10 réels et échanger le premier et le dernier élément. Exereice 1.8 Définir un tableau de 6 éléments, dont les trois premiers pointent sur une méme instance de chaine de caractéres enfant. Les structures de contréle Nous allons introduire deux instructions extr8mement utilisées qui permettent de construire un algo- rithme au déroulement non linéaire, instruction conditionnelle permet d’exécuter ou non un bloc instructions. La boucle permet de revenir en arriére dans ’algorithme, pour réitérer un nombre de fois précis Pexécution d’un bloc. Ces deux instructions reposent sur I’évaluation, par I'algorithme, d’une variable de type booléenne (vrai ou faux), qui conditionne la suite de son déroulement. Instruction conditionnelle La syntaxe Un algorithme est constitué d'une suite d’instructions qui s’exécutent les unes apres les autres de la premigre & la demnitre, L'instruction conditionnelle nous autorise désormais & concevoir un algo- rithme qui n’exécutera pas certains blocs instructions. Algorithmique simple (Partie | La syntaxe de cette instruetion est si (condition) alors of | bloc d’instructions n°; i#exéeuté si contition égle Ve fo} | sinon Bot bloc d’instructions m°2; exssut i conttion égae Faux } Le bloc d’instructions exécuté dépend de la valeur booléenne de Ia condition. Si la condition vaut Yrai, seul le bloc numéro 1 est exécuté : le bloc numéro 2 ne sera pas exécuté, Si la condition vaut Faux, seul le bloc d’instructions numéro 2 est exécuté. Lun des deux blocs est obligatoirement exécuté, l'autre ne le sera pas. La mise en page doit permet- tre de visualiser les niveaux d’exécution des instructions de I’ algorithme. L'ensemble des instructions du bloc écrit entre les accolades est nécessairement décalé 4 droite d’une tabulation. Ecrivons Malgorithme qui lit deux entiers et affiche le plus grand des deux. L’analyse de cet énoncé fait ressortir deux données nécessaires (les deux entiers & lire) et un résultat (entier lui aussi). fj Algorithme Max-de-deux-entiers | variables: x, y, max: entier: | debut a Tire(x)s i lirety)s i { i i max & x; 3 i sinon 3 | max © y: i + ' ecrine("Te maximum est : ",max); Erin Analysons le déroulement de I"algorithme ligne par ligne : prenons pour cela un exemple, supposons que Putilisateur saisisse § pour x et 7 pour y. [wear lirety): st (x>y) alors max x: Ce bloc n'est pas exéouté ? Ge bice n'est pas exécuté “Ge bloc eat exéeuté max oy: ) ecrire(*naxinum : [ein Applications La conditionnelie simple Une version plus simple est utilisée si l’alternative n’a pas lieu. La syntaxe de cette instruction est alors {st (condition) ators { instructions: } Ecrivons un algorithme qui lit un entier et affiche sa valeur positive, Algorithme valeur-positive vartables: valeur, positif: entier: Debut Vire(valeur); positif & valeur; si (positif < 0) alors C positif < -i x positif; } ecrire(*la valeur positive est : *, positif); Fin Algorithmigue simple Panmie! Le méme algorithme peut se passer de la variable positif contenant le résultat, vartables: valeur: entier; i Algorithme valeur-positive-une-variable 4) Debut Fin Vire(valeur); si (valeur < 0) alors { valeur € -1 x valeur; t ecrire(*1a valeur positive est : *, valeur): On peut simplifier I'écriture de instruction en omettant les accolades de délimitation de bloc, lorsqu’il n’y a pas d’ambiguité (si le bloc ne se compose que dune seule instruction). | Algorithme Nax-de-deux-entiers variables: x, y, max: entier; Debut | Fin Vireo: Tirety)s st (x>y) alors max & x; sinon max & ys ecrire(*le maximum est : ",max) Remarquons bien que V'instruction s1 alors stnon est une seule instruction, composée d’une condition et de deux blocs instructions. Dans l’exemple, les deux blocs sont réduits chacun & une seule instruc- tion et les détimiteurs de blocs peuvent étre omis. Il est sinon nécessaire d’utiliser des accolades. Dans un premier temps, nous vous conseillons de toujours utiliser les accolades méme si le bloc instructions est réduit & une seule instruction. La présentation Les décalages dans I’écriture dun algorithme (ou d’un programme) sont nécessaires & sa bonne lisi- bilité. Savoir présenter wn algorithme, c'est montret qu’on a compris son exécution, La régle est assez simple : ds qu'un nouveau bloc dinstruetions commence par un Debut ou une accolade ouvrante « { », toutes les lignes suivantes sont décalées d’une tabulation. Dés qu’un bloc se termine par un Fin ou une accolade fermante « ) », toutes les lignes suivantes sont décalées d'une tabulation vers Ia gauche La différence entre les deux algorithmes identiques suivants est évidente : les blocs d’instructions ne sont pas visibles au premier coup d’ceil dans I’algorithme de gauche. ee Les structures de contrdle Caspr 2 Algorithme Nax-de-dew-entiers Algorithme Max-de-dew-entiers variables: x, y, max : entier; || variables: x, y, max : entier ; Debut Debut lire) 7 Tire) 7 Lire(y) + lime(y) 7 si Cx > y ) alors si (x>y ) alors { ( max © x} max © x = ) Jsinon sinon max © y ; max © y 3 Ecrize(«le maximum est :»,max); Ecrire(«le maximum est :,maK) 7 Fin Fin Figure 2-1 Algorithme illisible er algorithme bien présenté. Conditionnelles imbriquées usage Exemple Lest possible d’imbriquer des blocs de programme les uns dans les autres. Essayons de résoudre le probléme consistant a faire lire & Putilisateur une note et 2 afficher le commentaire associé 2 la note : * note de 088 inclus : "insuffisant” ; * note de 8 8 12 inclus : "moyen" ; * note de 12 416 inclus : "bien"; + note de 16 220 inclus : "tres ben” La premire solution utilise instruction conditionnelle classique introduite & la section précédente Algorithme connentaires-notes variables: note: entier: t | Debut Tire(nate); si (note <8) alors | ecrire(*insuffisant* si ((note > 8) ET (note < 12)) alors ecrire(*moyen"); si ((note > 12) ET (note < 16)) alors ecrine(*bien*); si (note > 16) alors ecrire(*tres bien"): Fin fe Algorithmique simple Paamie A chaque note saisie, quatre tests sont réalisés. Imaginons une solution plus élégante : Algorithme conmentaires-notes-mieux variables: note: entiers Debut : Vire(note); st (note < 8) alors ecrire("insuffisant"); sinon si (note $12) alors ecrire(*moyen"); sinon st (note < 16) alors ecrire(*bien"); sinon ecrire(*tres bien"); Fin En effet, dans tout le bloc sinon du premier test, nous sommes certains que la note (la valeur de la variable note) est strictement supérieure a 8, donc il est inutile de refaire ce test. Dans ce cas des conditionnelles imbriquées, il est possible de ne pas respecter la présentation avec les tabulations : f Algorithme conmentaires-notes-mieux-bis variables: note: entier: © pebut i Vire(note)s i si (note $ 8) alors ecrire(*insuffisant"); i sinon si (note < 12) alors | ecrire(“moyen"); a sinon st (note < 16) alors f ecrire(*bien"); : sinon i ecrive(*tres bien"); a Fin Erreur a éviter Test trds fiéquent chez les débutants d’oublier Jes instructions sinon intermédiaires. Analysons Valgorithime suivant (faux) pour ne pas commettre cette erreur, | Algortthme conmenta'ires-notes-faux | variables: note: entier; | Debut f Tire(note)s si (note <8) alors ecrire(*insuffisant"); sf (note $ 12) alors ecrtre(*moyen") ' si (note $ 16) alors i ecrire(*bien”); sinon eee _ Les structures de contréle CHAPITRE 2 a ecrire(*tres bien): fotn a Pour une note inférieure ou égale a 8, comme 6, l’algorithme précédent écrira effectivement « Insuffisant », mais aussi « moyen > et « bien », En effet, chacune des conditions est dans ce cas testée indépendamment des instructions précédentes, La présentation des conditionnelles Il est capital d’écrire un algorithme aussi lisible et clair que possible. st (condition) alors { bloc d"instructions n°1; y stnon t st (condition) alors { bloc d'instructions n'2; } sinon { bloc "instructions n°3; } } Dans un bloc délimité par debut et Fin (ou « { » et « } »), toutes les lignes s'exécuteront les unes aprés les autres : elles sont toutes décalées. Sans trop réfiéchir, si vous commencez un bloc avec «{ » les lignes suivantes sont décalées. Si vous terminez. un bloc avec un « } », vous revenez en atridre d’ume tabulation, screamer Instruction de répétition La boucle tant_que Définition Liinstruction de répétition du déroulement d'un bloc "instructions la plus classique est la boucle tant _que. Sa syntaxe est particuligrement simple. On veut contrdler la répétition de 'exécution d'un bloc. L'instruction précise une condition de répétition qui conduit la poursuite ou l'artét de l’exécution Algorithmique simple ParTie | du bloc d'instructions. Evidemment, on s’attend & ce que I’état des variables du bloc d’instructions. change & chaque tour de boucle et l’on devra faire en sorte qu’il en soit ainsi, tant_que (condi tion_de_poursuite) faire ie | bloc d”instructions: do? On utilisera une boucle tant_que quand lalgorithme doit effectuer plusieurs fois le méme traitement, lorsqu’il doit répéter un ensemble instructions. C'est la seule instruction qui permette en quelque sorte de revenir en arriére dans l’algorithme pour exécuter une méme série d’ instructions. Exemple Lalgorithme suivant présente une premire illustration de usage de la boucle tant_que. Il affiche & ’écran les entiers de 145. Cinq valeurs seront affichées : il n'y a qu’une seule donnée, qui évolue au cours de I’algorithme. En utilisant une boucle, cette donnée correspond a la variable conpteur indiquant le nombre de tours. 4 Algorithme aff chage-des-5-premiers-entiers |) vartables: compteur: entier; Debut | compteur = 1 Liaison | tant_que (conpteur < 5) faire sondton de pousuie eg ‘ dbut du bloe f ecrtre(conpteur); wit | compteur «= conpteur + 1; insénenaion du emptor BoD 1a. du be ote La variable compteur est initialisée avant la boucle pour que la condition de poursuite (conpteur < 5), systématiquement examinée en premier lors de I’exécution de la boucle, soit valide. Arvivé & la fin du bloc, Pexécution de l'algorithme reprend au niveau du tant_que, pour évaluer & nouveau la valeur booléenne de la condition, Représentons |’avancement des valeurs de la variable et de la condition booléenne. initialisation : avant de rentrer dans la boucle 1 1<5: Veal enter dans la boucle 2 255: Veal ‘encore un tour 3 955: Veal ‘encore un tour 4 455: Veal encore un tour 5 555:Vrai ‘encore un tour é 655: Faux sort de la boucle | Ily a toujours plusieurs maniéres décrire la condition de poursuite de la boucle pour obtenir exactement le méme ___Les structures de controle CHAPITRE 2 Plusieurs algorithmes équivalents Les conditions suivantes permettent de sortir de la boucle précédente : * Arrét de Ia boucle quand compteur =6, alors la condition tant_gue (compteur # 6) faire fonc- tionne. * Atrét de la boucle quand compteur2 6, alors la condition tant_que (conpteur < 6) faire fonc- tionne. * Arrét de la boucle quand compteur > 5, alors la condition tant_que (compteur < 5) faire fonctionne. compteur = 1 conpteur <1 tant_que (compteur < 5) faire tant_que (compteur # 6) fatre ‘ { ecrire(compteur) ; ecrine(compteur) conpteur < coapteur + 1; conpteur < compteur + 13 ) 1 compteur & 1; compteur <= 0; tant_que (compteur < 6) faire ‘tant_que (compteur < 5) faire ( { ecrire(compteur); compteur € conpteur + 1; compteur € compteur + 1 ecrire(conpteur) ; ) ) Figure 2-2 Quatre boucles identiques. La condition d’arrét Hest plus nature] de se demander « quand la boucle s’arréte-t-elle ? » que de déterminer la condition de continuité « tant que quoi la boucle continue-t-elle ? ». Pour écrire une boucle, prenez V’habitude : 1, De chercher la condition d’arrét ; 2. D’écrire sa négation & l'aide du tableau de correspondance des conditions d’arrét qui suit (a connaitre). ET ‘ou ou T Logique d’arrét = | + = | «< > Logique de continuité + | = < [2 Algorithmique simple Panne | Pour éorire une boucle, trois étapes sont obligatoires » Linitialisation des variables du compteur, et en général du bloc, avant d’entrer dans la boucle (ici compteur = 1). + La condition de poursuite, Il existe toujours différentes conditions de poursuite, qui sont toutes justes (€quivalentes).. + La modification d’au moins une valeur dans la boucle (celle que l'on a initialisée précédemment) pour que la répétition exprime une évolution des calculs. Cest une erreur grave de négliger I’un des points précédents : on risque de ne pas entrer dans Ia boucle (la condition de poursuite est fausse dés le début), ou de ne pas pouvoir en sortir (il s’agit alors dune « boucle infinie »). La syntaxe des autres boucles 1La boucle la plus naturelle est la boucle tant_que. Elle sera utilisée systématiquement dans tous les algorithmes. Mais les langages informatiques disposent de nombreuses syntaxes pour alléger I’ éeri- ture des programmes. Voici deux nouveaux types de boucles. La boucle pour-faire La boucle pour-faire est utilisée trés fréquemment en programmation pour réitérer une exécution un nombre de fois connu A l’avance. Cette écriture est pratique puisqu’elle désigne l'ensemble de la boucle en une seule ligne : l’incrémentation (de 1) de la variable est sous-entendve la fin de la boucle. ‘Voyons comment écrire !’affichage des nombres de 1 & 5. pour (compteur ¢ 1) jusqu’a 5) faire He ert re(conpteur); } ‘Voyons & travers un exemple comment passer dune écriture pour-fatre Ane écriture tant_que-faire: Algorithme boucle~tant-que-faire variables : compteur : entier; Debut compteur € 1; tant_que (compteur <= 5) faire { écrire (comptew ); compteur € compteur + 17 V// fin du bloe Fin Algorithme boucle-pour -faire variables : compteur : entier; Debut, pour compteur € 1 jusqu’a 5 faire { écrire (compter ); // Xe conptaus eat incrémenté da 2 }1/ #8 ds bloe Fin Figure 23 Deux écritures : le méme résultat ____ Las structures de contréte Cuapitag 2 La boule faire-tant_que La boucle faire-tant_que effectue l’évaluation de Ia condition booléenne aprés avoir effectué le premier tour de boucle. Dans certains cas, des algorithmes s’écrivent avec moins de lignes en utili sant ce type de boucle, Faites néanmoins attention a la condition de continuité. 4 compteur <= 1; ‘iiatstion faire 1 condon de poursite { ecrire(compteur) ; ‘teent compteur € conpteur + 1; ‘ineéoetatio dy comptour } tant_que (compteur < 4) 1 aveaton a condition 1 Liutilisation efficace de la boucle tant_que est nécessaire et suffisante pour savoir programmer, Elle n'est pas facile & mattriser, et c’est donc Ia seule boucle qui sera utilisée par la suite. Ceux qui veulent changer |'éoriture et utiliser les deux autres syntaxes de boucles peuvent le faire, & condition que ce soit toujours pertinent. Application en programmation Pour conerétiser P utilisation de ces boucles, voyons comment elles sont implémentées dans quelques langages courants. Voici, en programmation C+ et Java, un exemple (il s’agit en fait du méme code pour les deux langages !) d'utilisation de la bien utile boucle for et de la boucle do..whi Te. Boucle Tant-que-faire Boucle pour-faire [ Boucle falre-tant_que int ied; int ied while (4<=5)( pices; amitine | dof option eS fis iW opéeation ite fos ‘iW opéation és 5 fis icaeai: ) feaita ) } while (i <= 5); Voici le méme exemple en programmation Visual Basic : Boucle Tant-que-faire Boucle pour-aire Boucle faire-tant_que Dim i As Integer Dim i As Integer Dim 4 As Integer dea For i= 15 tea While (i <= 5) "Vopeztn ie fs Do "operation ite 5 fis Next "operation ie 5 fois araea anata End While Loop While (4 <= 5) Algorithmique simple ae EB oe ‘Vous voyez done que, selon les langages, la syntaxe peut étre identique ou completement différenie. Le langage algorithmique permettra de gommer les spécificités des langages de programmation, pour rester irs génétique et se focaliser sur les concepts. Applications Boucle et conditionnelle Lalgorithme suivant présente une illustration de usage de la conditionnelle et de Ia boucle tant_que. Il s’agit de faire lire & Vutilisateur cing nombres entiers et d’afficher le plus grand 2 la fin. L'idée consiste & éerire une boucle pour lite 5 entiers (les données) et comparer chaque lecture avec Ja valeur maximale (le résultat). Algorithme (e-plus-grand-de~S-entiers | vartables: compteur, valeur, max: entter: F debut i Vire(valeur); max © valeur; | compteur — 1; 1 tant_que (compteur < 5) faire seondiion de pousuie { (esata oe Vire(valeur): 1 tse chaque nelle ition q si (max < valeur) alors f { imax © valeur; 3 compteur < compteur + 1; ‘A inerémentation du compteut 3 ecrire(*max egale ", max); Fin Pour comprendre Ie déroulement de la boucle tant_que de cet algorithme, il est utile de dresser un escriptif des valeurs que prennent les variables an moment du test tant_que. Supposons pour cela que ’utilisateur saisisse les nombres suivants : (2 ;8 14:7) eM oe 2 1 1<5:Vral ‘Vai, premier tour (1) 8 2 2<5:Vrai ‘rai, encore un tour (2) 8 3 3<5: Veal Va, encore un tour (8) 8 4 455 Veal ‘Val, encore un tour (4) 3 5 <5: Faux Faun, sorte dela boucle A la sortie de la boucle, les valeurs des variables sont : max = 8, valeur = 7 et compteur = 5. La variable valeur représente le nombre saisi par l'utilisateur, il doit y avoir 5 lectures en tout : 1 lecture Les structures de contréle Onset 2 avant la boucle, plus 4 lectures dans la boucle de 1 84. La variable max représente le résultat caleulé par Valgorithme, Boucle et tableau Lalgorithme suivant permet de saisir les éléments d’un tableau grace & une boucle. La dimension du tableau est de 8 ct les indices des éléments sont numérotés de 0 47. Une boucle de lecture est néces- saire pour lire et mémoriser tous ses éléments. Les tableaux serviront a développer de nombreux exemples didactiques d'utilisation des boucles, fj Algorithme boucle-et-tableau variables : tab: tableaut] d’entiers; indice: enters | aoe | tab © new entiert); | indice os ‘itso de ince do | tant_que Cindice < 8) faire Aeontion de porte aoe car eines doom de rang inie tloger ct ver aie +e lice | Vrectabeindtce]): indice @ indice + 1s ‘ivsémenion de Vince po} Fin Représentons l'état de la mémoire a la fin de ’exécution de ’algorithme précédent (les valeurs des éléments du tableau sont supposées étre celles saisies par lutilisateur): voir figure 2-4. Figure 24 ‘aigorithme utilisation-Tableau Elamemive Voebes instances ta [J 5} 6 | 7} 9 | 7 | 0 | 20] 33 indice = 8 Les boucles imbriquées Lusage Tl n’y a qu’un bloc d’instructions & répéter lors dune boucle, Mais le bloc peut étre lui-méme composé d'une ou de plusieurs boucles. On parle alors de boucles imbriquées. Prenons comme exemple la saisie de notes, pour extraire la meilleure de toutes. Ajoutons comme contrainte supplémentaire qu’ une note doit étre comprise entre 0 et 20. Si ce n’est pas le cas, Palgo- rithme doit prévenir P’utilisateur pour qu’il recommence la saisie. Ex Algortthmigue simple a Paamie | uudions déja la saisie d'une note comprise entre 0 ct 20. La boucle s’arréte quand la note saisie est comprise entre Oet 20, c’est-d-dire ((nate 2 0) ET (note < 20)) ; lacondition de continuité s’écrit donc ((note < 0) OU (note > 20)). & Algorithme Saisir-note-entre-O-et-20 vartables: note: entier; | Debut t ecrire("Yous avez fait une erreur, essayez encore : "); lire(note); ‘ff on secommence la saisie, 3 Intégrons ce bloc dans la saisie de 5 notes pour determiner la plus grande : @ Algorithme La-plus-grande-de-S-notes J variables: compteur, max, note: entiers | Debut eorire(Entrez une note lire(note); 1 alsateur ete a note, tant_que ((note <0) OU (note > 20) faire ao i ecrire(" Vous avez fait une erreur, essayez encore : "): td lire(note): ao} | max © note; | compteur <= 15 | tant_que (conpteur <5) faire /fcondtion de pours. fos 1 ears de above ecrire(*Entrez une note :"); Vire(note); 1 itistes ete a ot i tant_que (note < 0) OU (note > 20)) faire j t : ecrine("Erreur, essayez encore i Tire(note) [si tou < mte store {max © notes | } | conpteur <= compteur + 1; /inesémetnion do comptes y i ecrire(*la note 1a plus grande est", max); 4 Fin Cet exemple pourrait étre judicieusement réécrit avec une boucle fatre-tant_cue vue précédemment. Boucle et tableau a deux dimensions Les structures de contrite Guapiras 2 Si nous désirons écrire un programme qui travaille avec un damier de 10 cases sur 10 contenant des entiers, nous introduirons une instance denier sous forme d’un tableau de 10 cases sur 10. Chaque €lément est alors repéré par deux indices ; le numéro de la ligne et de la colonne. Ecrivons I’algo- rithme permettant de mettre & zéro tous les éléments du damier § Algorithme mettre-a-zero-le-damier | variables: indLigne, indColonne: entier: damier: tableau(JE] d’entiers; oer arn debut damier © new entierf10](10]; indLigne — 0; ‘tant_que (indLigne < 10) faire { indColonne — 0; ‘tant_que (indColonne < 10) faire t damierLindLigneICindColonne] — 0; indColonne <= indCotonne + i; y indLigne = indLigne + 1; 7 Fin {prc ig pine 1 we ps oul tisaton ‘alone pr eolane ‘eioae sive ign sivane Lrerreur la plus fréquente dans les boucles imbriquées consiste & oublier d’initialiser I’indice de la boucle intermédiaire avant chaque passage. Conditionnelie, boucle et tableau Ecrivons un algorithme qui détermine la position d’une valeur dans un tableau d'entiers, Le tableau est initialisé par des valeurs lues au clavier, L'utilisateur cherche ensuite une valeur ; P’algorithme détermine la position du premier élément du tableau (méme s'il y en a plusieurs) ou il renvoie 1 sile tableau ne posséde pas cette valeur. Une boucle va permettre l'initialisation du tableau. Une autre boucle va comparer chaque élément du tableau a la valeur cherchée. La boucle s’arréte quand la valeur a été déterminée (la valeur de positionherchee ne vaut plus —1) ou quand tout le tableau a été parcourn. La condition d'arrét s’écrit (positionCherchee # -1) OU (indice 2 taille). | Algorithme cherche-valeur-dans-tableau variables: tab: tableau(] d’entiers; taille, indice: entier; positionCherchee : entier; valeur: entier; Debut Virectail tab & new entier(taille]; Ea Algorithmique simple __ - Paamie | g {inition da bese ‘ indice — 0: i tant_que (indice < taille) fatre {pcos Bie poligne t lire(tabLindt ce); indice & indice + y igoe suivante Warecberhe Tire(valeur); posttionCherchee «= -1; indice © 0; tant_que ((posttfonCherchee = -1) ET (indice < taille)) faire { st (tabLindice] = valeur) alors positionCherchee indice: } indice © indice + 1; HV ééoest svant ecrire(positionCherchee) ; Fin Crest une erreur algorithmique de parcourir tout le tableau si vous avez trouvé la valeur recherchée : jl faut absolument sortir de la boucle dés que la valeur est déterminée. Exercices de bilan Exercice 2.1. Une assurance propose trois tarifS (Vert, Orange et Rouge) selon Mage et le nombre @ accidents des automobilistes. acide Orange Ver Tau aosdens Rowe Orange 3.86 accidents Pas assuré Rouge T ade ou pas Pas sss [ Pas ass Ecrire un algorithme qui affiche le tarif aprés avoir saisi I’Age et le nombre d’accidents d’un automobiliste. Exercice 2.2 Vous désirez comparer deux offres d’abonnement téléphonique. La facture est calculée avec un fixe (somme & payer obligatoirement tous les mois) et une partie proportionnelle au temps passé & téléphoner (indiqué en minutes). Les structures de controle CHAPITRE 2 Ecrire algorithme qui indique Vopérateur le plus intéressant aprés avoir saisi la consommation moyenne mensuelle (en minutes). Exereice 2.3 Compléter le tableau suivant représentant Ja correspondance entre les conditions de continuité et les conditions d’arrét. Sarat = 4) ET (age < 25) 5) OU (nbCoup > 5) (det = 6ET (doe =6) OU (abCoup > 6) (det =6) OU (de2 =6) Exercice 2.4 Eerire un algorithme qui demande & Vutilisateur de saisir une série de nombres entiers entre 0 et 20 et les stocke dans un tableau de 50 éléments. La saisie s’arréte si l'utilisateur saisit-1 ou sile tableau est complet. Sinon, & chaque erreur de saisie, l'utilisateur doit recommencer, Exercice 2,5 Ecrire un algorithme qui permet de saisir un tableau contenant 3 x 4 dates postérieures au 1°" janvier 2000. Exercice 2.6 Ecrire un algorithme qui permet d’afficher les tables de multiplication de 1 2 10. Les fonctions Nous avons déja utilisé depuis le premier chapitre les fonctions 1re et ecrire pour saisir et afficher des valeurs. Une fonction fournit un service dans un algorithme isolé. Lorsque votre algorithme doit effectuer plusieurs fois la méme tAche, il est judicieux d’isoler cette tche dans une fonction et de Pappeler aux moments opportuns : votre algorithme n’en sera que plus facile & écrire et & modifier. Liimtérét de utilisation des fonctions est double. Il existe dans tous les langages informatiques des biblioth€ques de fonctions associées & des domaines de traitements particuliers (traitement des fichiers, des images, des animations, etc.). Pour maitriser un langage, un programmeur doit connaitre et utiliser les biblioth&ques de fonctions, La maittise des fonctions est une étape nécessaire & la compréhension ultérieure de la notion d’objet et de méthode. Il est raisonnable d’étre progressif dans I’étude d’un bloc de programme exécuté & Vextérieur d'un algorithme : la fonetion en est I’exemple le plus simple. Apprenons & utiliser et & créer des fonctions. Les fonctions simples Définition Algorithmique simple Paamie Bei nition. La structure d'une fonction est la suivante typeRetourne { fonction nomdeLafonction(liste des paramétres: Debut 1 bloc d’instructions; q Fin Trois étapes sont toujours nécessaires & l'exécution d’une fonction : 1. Le programme appelant interrompt son exécution, 2. La fonction appelée effectue son bloc d’instructions, Dés qu’une instruction retourne est exéou- t6e, la fonction s'arréte, 3. Le programme appelant reprend alors son exécution, Le programmeur doit penser & concevoir et écrire des fonctions pour améliorer son programme. Il y gagnera sur plusieurs points * Le code des algorithmes est plus simple, plus clair et plus court. Dans un algorithme, appeler une fonction se fait en une seule ligne et la fonction peut étre appelée & plusieurs reprises. * Une seule modification dans la fonction sera automatiquement répercutée sur tous les algorithmes gui utilisent cette fonction * Lutilisation de fonctions génériques dans des algorithmes différents permet dé réutiliser son travail et de gagner du temps Fonction sans valeur retournée Apprenons a écrire et utiliser une fonction simple qui doit afficher "bonjour*. Cette fonction ne retourne pas de valeur : ceci est signalé en précisant qu’elle retourne vide. fonction afficheBonjour(): vide Debut ecrie(*bonjour"): retourne; Fin Une fonction se termine toujours par instruction retourne. Cette fonction effectuera les instructions situées entre Debut et Fin,

You might also like