• Aucun résultat trouvé

Notions de base de l’Algorithmique

N/A
N/A
Protected

Academic year: 2022

Partager "Notions de base de l’Algorithmique"

Copied!
16
0
0

Texte intégral

(1)

Jacques Duma 7 d´ ecembre 2006

Dans le dictionnaire on peut trouver la d´efinition suivante :

Un algorithme est une suite finie de r`egles `a appliquer dans un ordre d´etermin´e

`

a un nombre fini de donn´ees, pour arriver, en un nombre fini d’´etapes `a un certain r´esultat, et cela, ind´ependamment des donn´ees. (Encyclopædia Universalis)

Vous n’avez probablement rien compris. C’est normal !

Apr`es avoir lu ce document et fait de tr`es nombreux exercices, vous pourrez essayer de relire cette d´efinition, peut-ˆetre qu’elle prendra un peu de sens.

♣ ♦ ♥

(2)

Table des mati` eres

1 Au sujet de ce document 3

1.1 Il existe des ordinateurs . . . 3

1.2 Il existe des ˆetres humains . . . 3

1.3 Il existe des langages . . . 4

1.3.1 On va parler de . . . 4

1.3.2 On ne parlera pas de . . . 4

1.3.3 Tout ˆetre humain a le droit de parler . . . 4

1.4 Conventions typographiques . . . 5

2 D´efinition d’un langage algorithmique 5 3 S´equence d’instructions 6 4 Identificateurs 6 5 Proc´edures et Fonctions 7 5.1 Proc´edure . . . 7

5.2 Fonction . . . 8

5.3 En r´esum´e . . . 8

6 Variables Affectation Expression 9 7 Tests, Instructions conditionnelles 10 7.1 Instruction simple . . . 10

7.2 Instruction double . . . 10

7.3 Instruction multiple en cascade . . . 11

8 Boucles 12 8.1 Boucle ´ex´ecut´ee sous condition pr´ealable . . . 12

8.2 Boucle termin´ee sur condition finale . . . 12

8.3 Boucle `a nombre fixe d’it´erations . . . 13

9 Entr´ees Sorties 14 9.1 Entr´ees. . . 14

9.2 Sorties . . . 15

10 Exemples 15 10.1 Maximum dans une table. . . 15

10.2 Trac´e d’un arc de courbe . . . 16

(3)

1 Au sujet de ce document

Pour pouvoir parler d’algorithme, il est indispensable de parler d’autres choses avant.

1.1 Il existe des ordinateurs

L’ordinateur est une MACHINE form´ee d’unPROCESSEUR et d’une M ´EMOIRE

La m´emoire est constitu´ee d’un ensemble de CELLULES pouvant contenir des VALEURS (une seule valeur par cellule)

La m´emoire est un syst`eme `a ´etat :

Son ´etat, d´etermin´e par les contenus des cellules, peut changer au cours du temps.

Le processeur est capable d’ex´ecuter des ACTIONS qui changent l’´etat.

Les actions de base sont :

– mettre une valeur dans une cellule vide

– viderune cellule de sa valeur (la s´equence :vider puis mettre s’appelle affecter) – faire uneop´eration`a partir de valeurs, ´eventuellement prises dans d’autres cellules, puis

mettre ce r´esultat dans une cellule. (les op´erations possibles sont pr´ed´efinies).

1.2 Il existe des ˆ etres humains

Les ˆetres humains ont construit les ordinateurs avec l’intention de les utiliser.

Pour profiter des possibilit´es de la machine, il y a deux grands types de solutions :

– la commande directe : on rajoute `a la machine diff´erents dispositifs qui permettent `a un utilisateur de mettre des valeurs dans les cellules et de provoquer des actions du processeur. Exemple : les calculatrices non programmables.

– la programmation : on ajoute `a la machine diff´erents dispositifs qui permettent `a l’utili- sateur de proc´eder en trois ´etapes s´epar´ees dans le temps :

1. r´ediger ses souhaits sous forme d’un texte (un PROGRAMME) :

«voil`a ce que je veux que la machine fasse (plus tard)»

2. communiquer ces souhaits `a la machine et lui demander de les m´emoriser :

«machine, souviens-toi des instructions que je te donne»

3. demander `a la machine de r´ealiser ces souhaits :

«machine, vas-y, fais ce que je t’ai dit de faire»

L’´etape 1 s’appelle :EDITION´ ; L’´etape 2 s’appelle :COMPILATION.

L’´etape 3 s’appelle :EX ´ECUTION.

Concevoir un programme est une tˆache tr`es difficile parce que l’ˆetre humain n’agit vraiment qu’`a l’´etape 1 et qu’il doit pr´evoir et provoquer tout ce qui doit se passer `a l’´etape 3, o`u c’est seulement la machine qui agira.

Programmer, c’est r´efl´echir `a un univers (celui de la machine : cellules, valeurs) dans lequel on n’est pas au moment pr´esent, et, en plus, pr´evoir les ´ev´enements qui se produiront dans cet univers `a un instant qui n’est pas l’instant pr´esent.

Au moment o`u on ´ecrit le programme, tout est virtuel : les objets dont on parle n’existent pas encore. On ´ecrit le sc´enario d’un film, mais le film n’est pas encore tourn´e. On parle de personnages, mais il n’y a pas encore d’acteurs pour les incarner.

(4)

1.3 Il existe des langages

Pour r´ediger ses souhaits et les transmettre `a la machine, l’ˆetre humain a besoin d’un langage de d´efinition d’algorithme :

le langage de programmation

Ce langage doit pouvoir parler de cellules, de valeurs, d’op´erations et d’actions. Il doit aussi pouvoir parler de l’enchaˆınement des actions.

– pour parler de cellules, on utilise la notion de variable

– pour parler de valeurs et d’op´erations, on utilise la notion d’expression – pour parler d’action, on utilise la notion d’instruction ´el´ementaire

– pour parler de l’enchaˆınement des actions, on utilise la notion d’instruction compos´ee.

Une instruction compos´ee est une construction syntaxique obtenue en combinant des instructions (et ´eventuellement des expressions) `a l’aide de structure de contrˆole.

1.3.1 On va parler de . . .

L’objet de ce document est de d´efinir un langage de ce type.

Tous les langages de programmation sont des langages sp´ecialis´es de d´efinition d’algorithme.

Pour ne pas rester d´ependant d’un langage informatique particulier, on va d´efinir les ´el´ements de base n´ecessaires `a la d´efinition des algorithmes, et donc un nouveau langage g´en´eral, abs- trait, minimal, mais poss´edant malgr´e tout les propri´et´es fondamentales de tous les langages de programmation r´eels.

1.3.2 On ne parlera pas de . . .

Les tr`es nombreux langages de programmation r´eels actuels, sont en g´en´eral d’une grande complexit´e. On se limitera dans ce document aux principes de base de l’algorithmique.

Donc :

– on ne parlera pas du probl`eme de la nature des valeurs que l’on place dans les cellules.

Lesstructures de donn´ees ne seront pas trait´ees ici.

– on ne parlera pas des probl`emes techniques concernant les cellules de m´emoire.

Lecodage des donn´ees sera totalement ignor´e.

– on ne parlera pas des probl`emes d’´echange de donn´ees entre algorithmes.

Latransmission des param`etres est d´efinie dans lesLangages informatiques r´eels.

– on ne parlera pas de la communication homme machine.

Le probl`eme des entr´ees-sorties ne sera pas totalement ignor´e, mais sera simplifi´ee au maximum pour ´eviter les difficult´es techniques (§9 page 14).

1.3.3 Tout ˆetre humain a le droit de parler . . .

Le langage algorithmique d´efini ici sera minimal et pourra servir de tronc commun aux diff´erentes disciplines.

Chaque sp´ecialiste d’un domaine particulier est libre d’enrichir le langage selon ses besoins en respectant, si possible, les mˆemes principes : rigueur et pr´ecision dans toutes les d´efinitions.

Pour chaque notion d´efinie, on donnera des exemples pour faciliter la compr´ehension, et on indiquera, si possible, les diff´erentes traductions des notations dans certains Langages informatiques r´eels disponibles sur les ordinateurs comme C Pascal Maple ouBasic.

(5)

1.4 Conventions typographiques

Comme on va d´efinir diff´erentes notions et les nommer, on va pr´eciser les principales r`egles d’´ecriture de ce document.

Les mots de notre langage seront ´ecrits soulign´es dans une police de caract`eres sans s´erif, comme par exemple : Faire

Pour faciliter la compr´ehension, on se rapprochera le plus possible du fran¸cais et certains

«mots» de notre langage seront en fait, constitu´e de plusieurs mots fran¸cais regroup´es par le soulignement comme par exemple : Tant Que

Dans nos d´efinitions il sera n´ecessaire d’intercaler entre les mots du langages des ´el´ements d´efinis ailleurs plus en d´etail. Ces ´elments seront not´es avec une ´ecriture inclin´ee, comme par exemple : condition ou instruction si condition vraie dans la forme ci dessous :

Si condition Alors instruction si condition vraie Fin du Si

Pour d´efinir un algorithme, il sera aussi n´ecessaire de nommer certains ´el´ements `a l’aide d’identificateurs (§ 4page 6).

Tous ces identificateurs seront ´ecrits en italique, par exemple : X f(x) M aT able[5]. . . Les commentaires non ex´ecutables,indispensablespour rendre les algorithmes lisibles, seront not´e entre guillemets, ainsi : «ceci est du bla bla bla . . .»

Langages informatiques r´ eels

Un paragraphe Langages informatiques r´eels terminera chaque d´efinition en donnant quelques exemples des impl´ementations dans les langages de programmation usuels.

Les «commentaires» par exemples sont not´es : // apr`es deux slashs dans les langages Basic ou C { entre accolades dans le langage Pascal }

# apr`es un di`ese dans le langageMaple

2 D´ efinition d’un langage algorithmique

Programmer est une tˆache extrˆemement difficile.

De la mˆeme fa¸con qu’on ne r´edige pas directement au propre une dissertation en anglais (ou une autre langue), on ne tape pas directement un programme sur le clavier d’un ordinateur.

Il existe de tr`es nombreux langages de programmation. Ils poss`edent chacun des richesses particuli`eres, mais aussi des faiblesses.

Pourquoi d´efinir un langage de plus ? Comme il est impossible de connaˆıtre tous les langages, il faut se concentrer sur les notions les plus fondamentales. Notre langage est compos´e de ces notions, et d’elles seules.

De plus, il faut pouvoir :

– simplifier la r´eflexion. Notre langage est minimal.

– r´efl´echir sans avoir `a traduire en mˆeme temps. Notre langage est d´efini en fran¸cais.

– effectuer des tˆaches sans se pr´eoccuper des probl`eme techniques. Notre langage les ignore.

(6)

Conseils : Pour ´ecrire un programme, il est fortement conseill´e de proc´eder par ´etapes successives de la fa¸con suivante :

1. d´efinir avec soin en langage courant la tˆache `a effectuer.

2. r´ealiser des exemples simples de cette tˆache, `a la main, sur papier.

3. exprimer en fran¸cais le principe de l’algorithme `a cr´eer.

4. d´efinir cet l’algorithme `a l’aide de notre langage.

5. choisir un langage de programmation r´eel adapt´e `a la tˆache `a r´ealiser 6. traduire (coder) l’algorithme dans ce langage de programmation r´eel.

Cette derni`ere ´etape peut ˆetre tr`es technique, mais ce n’est pas la plus difficile quand on connaˆıt bien le langage de programmation r´eel.

Surtout, il ne faut pas esp´erer ´eviter les ´etapes pr´ec´edentes !

3 S´ equence d’instructions

Les instructions d’un algorithme sont prioritairement ex´ecut´ees s´equentiellement, c’est `a dire, l’une apr`es l’autre dans l’ordre o`u elles sont ´ecrites.

L’instruction fondamentale est l’instruction d’affectation (§6 page 9).

Certaines instructions sp´eciales, les structures de contrˆole, comme les tests (§ 7 page 10) ou les boucles (§ 8 page 12) permettent de modifier l’ordre s´equentiel normal d’ex´ecution des instructions.

Le d´ebut et la fin de toute s´equence d’instruction seront clairement indiqu´es de la fa¸con suivante :

D´ebut

premi`ere instruction seconde instruction

. . .

derni`ere instruction Fin

4 Identificateurs

Les identificateurs sont simplement des noms qui servent `a d´esigner, ´etiqueter, nommer.

On peut nommer les proc´edures, les fonctions (§ 5 page 7) et les variables (§ 6page 9).

Un identificateur est donc constitu´e d’un seul mot ´ecrit comme un suite de caract`eres.

On respectera la convention usuelle de la plupart des langages de programmation.

Un identificateur est un nom dont le premier caract`ere est une lettre et les suivants sont des lettres ou des chiffres

(7)

Langages informatiques r´ eels

Dans certains langages, il n’y a pas de diff´erence entre les lettres majuscules et minuscules pour les identificateurs, comme enPascal ou en Basic.

Pour d’autres langages comme enC ou enMaple le nom des identificateurs est sensible `a la casse (l’identificateurX ne d´esigne pas la mˆeme chose que l’identificateur x).

La plupart des langages autorisent aussi le trait de soulignement (underscore) comme caract`ere d’un identificateur, ce qui permet d’augmenter la lisibilit´e des noms.

Comparer par exemple : mavariable ; M aV ariable ou ma variable

5 Proc´ edures et Fonctions

Quand on d´esire programmer une action complexe ou claculer une expression complexe, il est n´ecessaire de regrouper les multiples instructions qui effectuent cette tache particuli`ere.

Pour pouvoir r´eutiliser facilement l’algorithme compos´e de ces multiples instructions, on peut nommer cet algorithme `a l’aide d’un identificateur (§ 4 page 6), et le r´eutiliser plus tard par simple appel de son nom.

Le regroupements abstraits des instructions d’un algorithme peut se faire sous deux formes, proc´edure oufonction :

– une proc´edure est l’abstraction d’une instruction – une fonction est l’abstraction d’une expression

Il est tr`es important de bien comprendre la diff´erence qu’il y a entre les proc´edures et les fonctions. H´elas ce n’est pas toujours facile, car les langages de programmation eux-mˆemes confondent parfois les deux notions.

– une proc´edure effectue une action.

– une fonction calcule une valeur et la rend pour une utilisation ult´erieure.

5.1 Proc´ edure

Par exemple : afficher(Bonjour) est une proc´edure qui effectue une action.

Cette proc´edure est une action qui«fait» quelque chose mais qui ne «vaut» rien.

L’algorithme de cette proc´edure produira des modifications de l’environnement, mais ne retournera pas (ne rendra pas) de valeur.

Le d´ebut et la fin d’une proc´edure est rep´er´e `a l’aide de l’identificateur nommant la proc´edure de la fa¸con suivante :

Proc´edureM aP rocedure premi`ere instruction seconde instruction

. . .

derni`ere instruction

Fin de la Proc´edureM aP rocedure

(8)

5.2 Fonction

Par contre : maximum(3,4) est une fonction qui calcule une valeur.

Cette expression est une fonction qui ne «fait» rien, mais qui «vaut» 4. L’algorithme de cette fonction effectuera un calcul et il retournera (rendra) comme r´esultat une valeur. Cette valeur pourra ˆetre utilis´ee dans l’algorithme, par exemple, dans une affectation.

Une fonction doit imp´erativement retourner (rendre) un r´esultat avant de se terminer. Une fonction est nomm´ee `a l’aide d’un identificateur sous la forme suivante :

Fonction M aF onction premi`ere instruction seconde instruction

. . .

Retourner la Valeur(r´esultat) Fin de la Fonction M aF onction

5.3 En r´ esum´ e

Voici par exemple un petit algorithme : D´ebut

X ← ValeurLue «on demande une valeur `a l’utilisateur» Y ← 3 +DoubleDe(X) «on effectue un calcul»

Afficher(Y) «on affiche le r´esultat» Fin

Un programme doit toujours ˆetre comment´e.

Chaque ligne doit ˆetre compr´ehensible `a la simple lecture.

Dans l’exemple ci-dessus,ValeurLueest une fonction pr´ed´efinie (§9page14) de notre langage qui rend une valeurvenue de l’ext´erieur. Cette valeur est affect´ee (§ 6page 9) `a la variable X.

Une autre fonction, DoubleDe, est utilis´ee aussi. Elle doit ˆetre d´efinie par ailleurs, mais son nom est suffisement clair pour qu’on devine ce qu’elle calcule.

Pour terminer Afficher() est une proc´edure pr´ed´efinie (§ 9 page 14) de notre langage dont l’action consiste `atransmettre le r´esultat `a l’ext´erieur.

Param`etres : Certaines proc´edures ou fonctions ont des param`etres. Il est important de d´efinir le rˆole de ces param`etres clairement dans chaque cas particulier.

Remarque au sujet des noms : Par association d’id´ees, dans le langage courant, on peut dire que les proc´edures correspondent aux verbes, les fonctions correspondent aux noms.

Evidement, ce n’est pas aussi simple, mais la correspondance est forte, et il est bon de s’en´ souvenir quand on choisit unidentificateur pour nommer une proc´edure ou une fonction.

(9)

Langages informatiques r´ eels

En langagePascal les proc´edures sont d´efinies avec le mot cl´e«procedure»et les fonctions sont d´efinies avec le mot cl´e «function». La valeur rendue par une fonction doit ˆetre affect´ee

`

a une pseudo variable dont l’identificateur est celui qui nomme la fonction.

En langage C il n’y a en principe que des fonctions. La valeur rendue par une fonction est transmise par l’instruction return.

Cependant, on peut d´eclarervoidcomme type de valeur rendue, ce qui signifie :rien. Dans ce cas la fonction n’en est pas une, c’est une proc´edure.

En langage Maple il n’y a que des proc´edures not´eesproc.

Cependant, une proc´edure peut rendre une valeur en ex´ecutant l’instruction RETURN. Dans ce cas la proc´edure n’en est pas une, c’est une fonction.

Dans les langages de typeBasic, une proc´edure est appel´eeroutineousubroutineet une fonctions est appel´ee function.

Dans les langages objets, on parle de m´ethode plutˆot que de proc´edure ou de fonction.

6 Variables Affectation Expression

Une variable est une des cellules de la m´emoire pouvant contenir une valeur. Une variable est nomm´ee (on dit aussi ´etiquet´ee ou r´ef´erenc´ee) `a l’aide d’un identificateur.

On peut affecter des valeurs `a une variable.

Affecter une valeur signifie : modifier le contenu de la cellule de m´emoire d´esign´eee par l’identificateur en y mettant cette valeur particuli`ere.

Dans notre langage algorithmique l’affectation sera not´ee : identificateur ← valeur La partie valeur est une expression ´evalu´ee, le r´esultat obtenu est affect´e `a la variable nomm´eeidentificateur. L’ancienne valeur de la variable est perdue.

Le contenue des variables change donc au cours du temps lors du d´eroulement de l’algo- rithme.

Une expression permet de calculer une valeur.

Elle est constitu´ee de constantes, de variables, d’op´erateurs et d’appels de fonctions, comme par exemple : 2 + sin(1) ; x+ 1/(x+ 1) ; maximum(A, B)> X + 3

Exemples : A ← 5

la valeur 5 est mise dans la variable nomm´ee A, l’ancienne valeur de A est perdue.

A ← A+ 1

1 est ajout´e `a la valeur de A et remis dans A, la valeur de A est maintenant 6.

Variables multiples

La plupart des langages de programmation permettent de nommer plusieurs cellules de m´emoire avec un nom unique, index´e par un nombre entier g´en´eralement plac´e entre crochets.

(10)

Ces variables sont appel´ees tables ou tableaux.

Exemples :

T[1] est ainsi le premier ´el´ement du tableau T. T[k] est de mˆeme l’´el´ement num´ero k du tableau T.

M[4,8] est l’´el´ement de la ligne 4 colonne 8 d’une table de dimension 2.

On ne se pr´eoccupera pas dans ce document de la repr´esentation informatique des tables (array) selon les diff´erents langages de programmation.

Langages informatiques r´ eels

L’affectation est not´ee diff´eremment selon les langages. x ← a+b est ainsi not´e : x:=a+b en Pascal ou en Maple.

x=a+b en C ou en Basic.

a+b→x ou a+b STO x sur les calculettes programmables.

On trouve aussi dans certains langages des expressions de la forme : SET x TO a+b

7 Tests, Instructions conditionnelles

On d´esire parfois ex´ecuter des instructions diff´erentes selon certaines conditions.

Notre langage algorithmique d´efinit trois formes diff´erentes d’instructions de test permettant de modifier l’ordre d’ex´ecution s´equentiel des instructions.

– une forme simple : Si . . . Alors

– une forme double : Si . . . Alors. . .Sinon

– une forme multiple en cascade : Si . . . Alors. . .Sinon Si . . .Sinon

7.1 Instruction simple

Si condition Alors

instructions `a effectuer uniquement si la condition est vraie Fin du Si

La condition est une expression qui donne une valeur bool´eenne (vrai ou faux).

Si la condition est fausse aucune instruction n’est ex´ecut´ee.

7.2 Instruction double

Si condition Alors

instructions `a effectuer si la condition est vraie Sinon

instructions `a effectuer si la condition est fausse Fin du Si

Dans tous les cas une instruction est ex´ecut´ee, soit la premi`eres si la condition est vraie, soit la seconde si lacondition est fausse.

(11)

7.3 Instruction multiple en cascade

Si condition n˚1 Alors

instructions `a effectuer si la condition n˚1 est vraie Sinon Si condition n˚2 Alors

instructions `a effectuer si la condition n˚ 2 est vraie . . .

Sinon Si condition n˚k Alors

instructions `a effectuer si la condition n˚k est vraie Sinon

instructions `a effectuer si les k conditions pr´ec´edentes sont fausses Fin du Si

La partie Sinon finale est optionnelle. En cas d’absence, aucune instruction n’est ex´ecut´ee si les k conditions sont toutes fausses.

Langages informatiques r´ eels

Dans le langage C et dans le langagePascal on dispose de deux formes de Si .

Pour les tests multiples en cascade, il existe en C une instruction switch et en Pascal une instruction case...of.

Ces instructions sont assez d´elicates `a utiliser.

Dans le langage Maple on dispose des trois formes duSi . Voici quelques exemples de tests selon les langages :

Si gain < 0 Alors perdu ← vrai gain ← 100 Fin du Si

C

if (gain < 0) {

perdu = 1 ; gain= 100 ; }

Maple

if gain < 0then perdu:=true; gain:= 100 fi

Pascal

if gain < 0then begin

perdu :=true; gain:= 100 end

Si x >0 Alors a ← x

Sinon a ← −x Fin du Si

C

if (x >0) a=x; else

a=−x;

Maple

if x >0 then a:=x else

a:=−x

Pascal

if x >0then a :=x else

a :=−x

(12)

Si c= 1 Alors r ← a+b

Sinon Si c= 2 Alors r ← a∗b

Sinon r ← 0 Fin du Si

C

switch (c){ case1 :

r=a+b; break; case2 :

r=a∗b; break; default:

r= 0 ; }

Maple

if c= 1 then r:=a+b elif c= 2 then

r:=a∗b else

r:= 0 fi

Pascal case cof

1 :

r:=a+b 2 :

r:=a∗b else

r= 0 end

8 Boucles

On d´esire parfois, sous certaines conditions, ex´ecuter plusieurs fois les mˆemes instructions, pour parcourir des tables de valeurs ou pour effectuer des tris, par exemple.

Notre langage algorithmique d´efinit trois formes diff´erentes d’instructions de boucles.

– la boucle ´ex´ecut´ee sous condition pr´ealable : Tant Que – la boucle termin´ee sur condition finale : R´ep´eter – la boucle `a nombre fixe d’it´erations : Pour

8.1 Boucle ´ ex´ ecut´ ee sous condition pr´ ealable

Tant Que condition Faire

instructions `a r´ep´eter tant que la condition est vraie Fin de la boucle Tant Que

La condition est une expression qui donne une valeur bool´eenne (vrai ou faux).

La condition est ´evalu´ee avant ex´ecution des instructions de la boucle.

Si la condition est fausse, les instructions de la boucle ne sont pas ´ex´ecut´ees du tout.

Remarque : Cette boucle est celle qui permet d’´ecrire les algorithmes de la fa¸con la plus sˆure. Il faut l’utiliser en priorit´e. Les autres boucles ne sont que des cas particuliers de celle-ci. On en donnera `a chaque fois la traduction en boucle Tant Que

8.2 Boucle termin´ ee sur condition finale

R´ep´eter

instructions `a r´ep´eter jusqu’`a ce que la condition soit vraie Jusqu’`a condition

(13)

Lacondition est ´evalu´ee apr`es ex´ecution des instructions de la boucle. Mˆeme si lacondition est fausse, les instructions de la boucle sont de toute fa¸con ´ex´ecut´ees au moins une fois.

On peut remplacer la boucle ci-dessus par une boucle Tant Que ´equivalente ainsi d´efinie : instructions `a r´ep´eter jusqu’`a ce que la condition soit vraie

Tant Que Non(condition) Faire

instructions `a r´ep´eter jusqu’`a ce que la condition soit vraie Fin de la boucle Tant Que

8.3 Boucle ` a nombre fixe d’it´ erations

Pour index variant de ValeurInitiale `a ValeurFinale avec un Pas de ValeurDuPas Faire

instructions `a r´ep´eter Fin de la boucle Pour

L’identificateurindexd´esigne une variable de contrˆole de boucle qui prendra, lors de l’ex´ecution des instructions `a r´ep´eter, successivement les valeurs : ValeurInitiale jusqu’`a ValeurFinale en incr´ementant index `a chaque tour de boucle par ValeurDuPas.

Si la ValeurDuPas n’est pas donn´ee, c’est la vaeur 1 qui est prise par d´efaut.

On peut remplacer la boucle ci-dessus par une boucle Tant Que ´equivalente ainsi d´efinie : index ← ValeurInitiale

Tant Que index6ValeurFinale Faire

instructions `a r´ep´eter

index ← index+ValeurDuPas Fin de la boucle Tant Que

Remarque : Il est fortement conseill´e d’utiliser la boucle Pour uniquement avec un pas de 1 pour parcourir des tables dont on connaˆıt le nombre d’´el´ements au d´ebut de la boucle.

Dans tous les autres cas on conseille d’utiliser plutˆot la boucle Tant Que .

Langages informatiques r´ eels

Voici quelques exemples de boucles selon les langages : Tant Que k < 50

Faire

k ← k+ 1

Fin de la boucle Tant Que

C

while (k <50) {

k+ + ; }

Maple

while k <50 do

k:=k+ 1 od

Pascal

while k <50 do begin

k:=k+ 1 end

(14)

R´ep´eter k ← k−1 Jusqu’`a k60 C

do

k− −; while (k > 0) ;

Pascal repeat

k :=k−1 until k <= 0

Pour k variant de 1 `a 10 Faire

T[k] ← k Fin de la boucle Pour

C

for(intk= 1;k <11;k++) {

T[k] =k; }

Maple

for k from 1 to 10 do

T[k] :=k od

Pascal

fork := 1 to 10 do begin

T[k] :=k end

Remarque : La boucle for du langage C peut ˆetre utilis´ee de diff´erentes fa¸cons, cer- taines tr`es compliqu´ees. Il est extr`emement facile d’´ecrire en C des instructions compl`etement illisibles.Ceci est fortement d´econseill´e. N’oubliez pas que c’est vous qui avez le plus de chance de relire un jour votre propre programme. Ayez piti´e de vous !

9 Entr´ ees Sorties

On ne d´efinira que tr`es peu d’instructions d’entr´ee-sortie. Juste ce qui est n´ecessaire pour communiquer avec l’ext´erieur.

Remarque : On ne se pr´eoccupera pas ici du type des valeurs. Les variables de notre langage th´eorique peuvent contenir ce que l’on veut. Il suffit de le dire.

Une valeur venue de l’ext´erieur peut donc ˆetre utilis´ee librement (sans conversion ni codage).

De mˆeme, en ce qui concerne les graphiques, on ne se pr´eoccupera pas ici des probl`emes techniques li´es aux p´eriph´eriques d’affichage.

9.1 Entr´ ees

Les entr´ees permettent `a l’algorithme de r´ecup´erer des donn´ees venant de l’ext´erieur.

Pour r´ecup´erer une valeur venue de l’ext´erieur on utilisera la fonction : ValeurLue Exemples : A ← ValeurLue

Cette fonction sera toujours utilis´ee dans une affectation, pour mettre dans une cellule m´emoire une valeur venant de l’ext´erieur.

(15)

9.2 Sorties

Les sorties permettent `a l’algorithme de transmettre des r´esultats `a l’ext´erieur.

Pour afficher un r´esultat ´ecrit on utilisera : Afficher(valeur)

Pour les r´esultats graphiques on pourra placer un point de coordonn´ees (X, Y) en utilisant : PlacerPoint(X , Y)

On pourra tracer un segment reliant les points de coordonn´ees (X0, Y0) et (X1, Y1) en utilisant :

TracerSegment(X0, Y0, X1, Y1)

On ne se pr´eoccupera pas ici des probl`emes li´es au p´eriph´erique de sortie.

Langages informatiques r´ eels

Les diff´erents langages de programmation ne proposent que tr`es peu d’entr´ees-sorties de base, mais de tr`es nombreuses biblioth`eques fournissent des proc´edures et des fonctions sp´ecifiques.

Attention : En g´en´eral, ces proc´edures et fonctions d’entr´ees-sorties sont souvent tr`es complexes et hybrides (m´elange de proc´edure et de fonction).

10 Exemples

10.1 Maximum dans une table

On suppose qu’on dispose d’un tableauT qui contient nnombres entiers. On veut cr´eer une fonction M aximumqui retourne (qui rende) le nombre le plus grand de ce tableau.

Exemple d’utilisation de cette fonction : D´ebut

T[1] ← 2 ; T[2] ← 5 ; T[3] ← 3 «remplissage d’une table `a 3 ´el´ements» X ← M aximum(T,3)

Afficher(X) «normalement ceci doit afficher 5» Fin

Algorithme de calcul du maximum Fonction M aximum (T, n)

k ← 1 «pour commencer»

max ← T[k] «T doit avoir au moins un ´el´ement» Tant Que k < n Faire

k ← k+ 1

Si T[k]> max Alors max ← T[k] Fin du Si «m´emorise si plus grand» Fin de la boucle Tant Que

Retourner la Valeur(max) Fin de la Fonction M aximum

(16)

10.2 Trac´ e d’un arc de courbe

Un arc de courbe peut ˆetre d´efini par des ´equations param´etriques o`u f et g sont des fonctions de la variable r´eelle t :

x = f(t)

y = g(t) avec : t ∈ R

Cette situation s’applique au cas d’un arc de courbe de B´ezier pour lequel f et g sont des polynˆomes de la variable r´eelle t avec : t ∈ [ 0, 1 ]

Repr´esentation graphique

Pour repr´esenter la courbe, on va tracer des segments `a l’aide de TracerSegment(), la proc´edure graphique d´efinie § 9 page 14.

Les extr´emit´es de ces segments seront des points suffisamment voisins pour obtenir une courbe assez lisse compte tenu du terminal d’affichage.

Pour cela, il faut partager l’intervalle de trac´e en un nombre suffisant de points.

Par exemple, on peut tracer un arc de courbe de B´ezier pour t ∈ [ 0, 1 ] en calculant les coordonn´ees de 100 points successifs, c’est `a dire pour des valeurs de t distantes de 0,01.

Pour pouvoir relier les points de la courbe deux par deux, il est n´ecessaire, `a chaque ´etape, de se souvenir du point pr´ec´edent.

Le point courant sera nomm´eM de coordonn´ees (X, Y) et le pointpr´ec´edent sera nomm´e Mp de coordonn´ees (Xp, Y p).

Algorithme de trac´e

Proc´edure T racerBezier

t ← 0 «valeur initiale du param`etre»

Xp ← f(0) «m´emorisation du point de d´epart» Y p ← g(0)

Tant Que t <1 Faire

t ← t+ 0,01 «valeur suivante du param`etre» X ← f(t) «coordonn´ees du point suivant» Y ← g(t)

TracerSegment(Xp, Y p, X, Y)

Xp ← X « m´emorisation du dernier point pour le lier au point suivant» Y p ← Y « lors du prochain tour de boucle »

Fin de la boucle Tant Que Fin de la Proc´edure T racerBezier

Remarque : Dans cet exemple, les fonctions polynˆomes f et g doivent ˆetre d´efinies `a l’ext´erieur de l’algorithme. On peut aussi remplacer f(t) et g(t) dans l’algorithme par leurs expressions polynomiales effectives.

Références

Documents relatifs

Universit´ e Pierre et Marie Curie – Paris 6 Examen de travaux pratiques Licence de Math´ ematiques MA380 – Analyse Hilbertienne et Num´ erique.. 18 janvier 2006 8h30 `

En Python (mais aussi dans bien d’autres langages : langage C, ………), l’instruction qui permet d’exécuter en boucle un nombre précis de fois une ou

Les instructions dans cette boucle sont répétées tant que la condition est vraie.. La condition est généralement un test d’égalité

 Calculer et afficher le nombre d’élèves admis.  Calculer et afficher le nombre d’élèves redoublants. 2- Traduire votre programme en Pascal et enregistrer-le dans le

On utilise une boucle for , appelée boucle itérative, pour exécuter une instruction (ou un bloc d’instructions) un nombre de fois

a) Modifier l’algorithme précédent pour qu’il affiche le nombre nb de fois où l’on obtient PILE à l’issue de ces n lancers. On ne demandera plus d’afficher la valeur de k.

[r]

Mais il est fort probable qu’il s’agisse d’une fraction de π , et donc considéré comme un nombre décimal par la machine.. On va donc diviser A par π , pour ne conserver que