Vous êtes sur la page 1sur 232

REPUBLIQUE TUNISIENNE MINISTERE DE LEDUCATION

ALGORITHMIQUE ET PROGRAMMATION
3me anne de lenseignement secondaire Section : Sciences de linformatique

Les auteurs
Abdelhafidh ABIDI Inspecteur Principal Rym MAAROUFI Professeur dEnseignement secondaire Abdelhafidh SOLTANI Professeur Principal

Lvaluateur
Mohamed Salem SOUDANE Inspecteur

Centre National Pdagogique

TOUS DROIT RSRVS AU CENTRE NATIONAL PDAGOGIQUE

Prface
La programmation est lart dutiliser la puissance des ordinateurs, pour dguiser en intelligence leur extrme stupidit . Cette formule due B. Meyer et C. Baudoin est trs significative. Il est bien vrai que lordinateur nest rien dautre quun automate capable dexcuter des actions dites lmentaires et quun programme nest quun ensemble dinstructions pour commander et rsoudre des problmes. Lobjectif de ce manuel est de permettre ses utilisateurs dapprendre crire des algorithmes et des programmes sur des bases solides en appliquant une approche de rsolution descendante. Le langage de programmation utilis dans ce manuel est Pascal qui, par son aspect pdagogique, est aujourdhui le langage qui se prte le mieux lenseignement de la programmation. Le prsent manuel est conforme au programme de la matire Algorithmique et programmation au niveau de la 3me anne secondaire de la section Sciences d linformatique. Il comporte sept chapitres. Chaque chapitre est prcd de : 1- la liste des objectifs qui prcisent les savoirs et les savoir-faire permettant ainsi de dlimiter la porte de chaque notion tudie. 2- Le plan du chapitre. Chaque chapitre comporte : - des activits prliminaires - ltude de la notion (dfinition, syntaxe au niveau algorithmique et au niveau du langage de programmation Pascal) - des applications sous forme dexercices rsolus - une srie dexercices en fin de chapitre - une partie lecture pour renforcer le volet culture informatique chez les apprenants. Les activits prliminaires font travailler les apprenants sur des notions tudies antrieurement et utiles pour la prsentation et ltude des nouvelles notions. Certaines de ces activits font appel des traitements ncessitant lintroduction des nouvelles notions. Ltude des nouvelles notions comporte la dfinition de chaque nouvelle notion ainsi que la syntaxe au niveau algorithmique et au niveau Pascal, lorsquil sagit dune notion algorithmique.

Les applications sont parfois prsentes au cours du chapitre et parfois la fin. Elles sont conues de faon tablir le lien entre les nouvelles notions et les apprentissages antrieurs. Les exercices figurant la fin du chapitre suivent en gnral lavancement du cours et sont prsents en ordre de difficults croissantes. Ils sont conus de faon permettre lapprenant une meilleure assimilation des notions tudies. Le premier chapitre intitul Les structures de donnes et les structures simples est conu pour rappeler et renforcer lutilisation des structures de donnes prsentes au niveau de la 2me anne de la filire Technologies de linformatique. Un complment sur les types numrs, les types utilisateurs et les tableaux deux dimensions figure aussi dans ce chapitre. Le deuxime et le troisime chapitre prsentent respectivement les structures algorithmiques de contrle (les diffrentes formes de la structure conditionnelle et des itrations) ainsi que les sous programmes sous les deux formes : fonctions et procdures. Les quatre derniers chapitres prsentent les grandes familles dalgorithmes savoir : - les algorithmes de tri et de recherches - les algorithmes rcurrents - les algorithmes arithmtiques - les algorithmes doptimisation et dapproximation Nous invitons les utilisateurs de ce manuel nous faire part de leurs critiques et de leurs suggestions et nous les remercions davance.

Les auteurs

Sommaire ommaire S
Chapitre 1 Les structures de donnes et les structures simples 7 Les structures algorithmiques de contrle 50 Les sous programmes Les algorithmes de tri et de recherche Les algorithmes rcurrents Chapitre 2 Chapitre 3

106

Chapitre 4

128

Chapitre 5

152

Chapitre 6

Les algorithmes arithmtiques Les algorithmes dapproximation

180

Chapitre 7

207

Annexe 1

Codes ASCII

229

Chapitre pitre 1
Les structures de donnes et les structures simples

Objectif

- Identifier et utiliser les structures de donnes pour rsoudre un problme - Comprendre le droulement dun algorithme comportant des affectations et des oprations dentre/sortie.

I. Les constantes et les variables II. Les types standard III. Les oprations dentre/sortie IV.
Les types numrs

V. Les types utilisateurs VI. Les tableaux 1 et 2 dimensions


Retenons Exercices Lecture

Chapitre

Les structures de donnes et les structures algorithmiques simples


Les ordinateurs sont comme les dieux de lAncien Testament : avec beaucoup de rgles, et sans piti. Joseph Campbell Vous avez appris lanne dernire que le travail dun programme sarticule autour de la manipulation de valeurs contenues dans des objets qui peuvent tre des constantes ou des variables. Ce chapitre contient un rappel de ces notions en plus des types de donnes les plus utiliss. Nous aborderons par la suite de nouvelles structures qui sont ncessaires pour la rsolution de certains problmes.

I. Les constantes et les variables


I.1.

Les constantes
Activit 1 :
Citez 3 constantes connues et utilises dans diffrentes disciplines.

Constante

Valeur

Quest ce quune une constante ? Par quoi est caractrise une constante ?

I.1.1

Dfinition:

Une constante est un objet dont la valeur reste fixe durant lexcution dun programme.

1.1.2

Caractristiques :

Une constante est caractrise par un nom qui est son identificateur unique en plus par une valeur inchangeable qui nous permet de dterminer implicitement le type de cette dernire.

1.1.3

Dclaration :

1.1.3.1 Dclaration algorithmique

Activit 2 :
Copiez sur votre cahier puis compltez le tableau de dclaration des objets suivants pour dclarer une constante:

Objet

Type / Nature

Rle

Exemple

Gnral

En algorithmique, on dclare une constante comme suit :

Objet Gnral
Nom

Type / Nature
Constante = Valeur de la constante

Rle
Rle

Exemple

P1

Constance = 9.8

Les Structures de Donnes

Chapitre

1
I.1.3.2 Dclaration en Pascal

Activit 3 :
Donnez la forme gnrale de la dclaration dune constante en Turbo Pascal. Dclarez (pi) en Pascal.

En Pascal, on dclare une constante comme suit : Const nom = valeur de la constante ;

Exemple :
Const Pi = 3.14 ;

1.1.4

Application:

On se propose de calculer lallongement L dun ressort de raideur K auquel est accroche une masse m. Sachant que : m * g = K * L et g = 9.8. Prsentez la spcification de ce problme. Dduisez lalgorithme correspondant. Traduisez la solution en Pascal et lexcutez pour m = 150 et k = 10.

I.2.

Les Variables
Activit 4 :
Lors des diffrentes excutions du programme prcdent, quelles sont les donnes qui ont t fixes et celles qui ont t changes ? Quappelle-t-on les donnes changeables ?

10

I.2.1

Dfinition:

Une variable est un nom qui sert reprer un emplacement donn de la mmoire centrale dont on peut faire voluer la valeur au fil de droulement du programme.

I.2.2

Caractristiques :
Activit 5 :

Soit le schma suivant : Dans cette case rserve pour une variable, on peut attribuer une valeur mais tout en respectant le type de la variable

Nom

Mmoire centrale

A partir de ce schma, dgagez les caractristiques dune variable. Une variable est caractrise par : - Un nom (identificateur unique) - Un contenu - Un type

Remarque :
Il est prfrable que le nom donn une variable soit vocateur de linformation quil dsigne . Cependant certaines rgles doivent tre respectes lors du choix de cet identificateur, savoir : - Le nom dune variable doit commencer obligatoirement par une lettre. - Le nom dune variable peut tre form dune ou de plusieurs lettres, les chiffres sont galement autoriss. - Aucun espace ne doit figurer dans le nom dune variable.

11

Les Structures de Donnes

Chapitre

1
I.2.3 Dclaration

I.2.3.1 Dclaration algorithmique

Activit 6 :

Compltez le tableau de dclaration des objets suivants pour dclarer une variable:

Objet Gnral

Type / Nature

Rle

Exemple

En algorithmique, on dclare une variable comme suit :

Objet Gnral Exemple


Nom

Type / Nature
Type de la variable

Rle
Rle jou par la variable dans le programme masse

rel

I.1.3.2 Dclaration en Pascal

Activit 7 :
Donnez la forme gnrale de la dclaration dune variable en Pascal. Dclarez la raideur k dun ressort en Pascal.

En Pascal, on dclare une variable comme suit : Var nom : type ; Exemple : Var K : real ;
12

II. Les types standard


Activit 8
A quoi sert le type dune donne ? Quels sont les types de donnes que vous connaissez ?

Contrairement aux constantes, les variables ont des contenus changeables. Pour dfinir quelle valeur attribuer une variable, il suffit de savoir le type de cette dernire. En plus, la connaissance du type informe sur lensemble des oprations quon peut appliquer sur la variable en question. Il existe plusieurs types de donnes standard : les types numriques, le type boolen, les types caractre et chanes de caractres.

II.1

Les types numriques


Les types numriques sont les plus utiliss en programmation. En fait beaucoup de problmes proposent des traitements sur des donnes numriques. Les types numriques les plus connus sont lentier et le rel qui eux mmes sont dcomposs en dautres sous types que nous allons dtailler dans la suite de ce chapitre.

II.1.1

Le type entier
Activit 9
Quelles sont les valeurs possibles quon peut accorder une variable de type entier ? Quels sont les oprateurs applicables sur une variable de type entier ?

a. Prsentation Ce type recouvre les entiers de lintervalle [-maxint, maxint], o maxint est une constante (nombre entier maximum). Comme tout ce qui rside en mmoire, ces entiers sont stocks sous forme binaire, c'est--dire en base 2 o les seuls chiffres permis sont 0 et 1. Ils occupent gnralement deux octets, soit 2 fois 8 bits. Le bit dentte (le plus gauche) tant rserv au signe (le code est 0 pour le signe +, et 1 pour le signe -), il reste 15 bits pour reprsenter lensemble des nombres entiers.
13

Les Structures de Donnes

Chapitre

1
Exemple Le nombre 19666 sera stock en mmoire sous la forme suivante : 01001100 11010010

Signe + En effet, 214 + 211 + 210 + 27 + 26 + 24 + 21 = 19 666 Il est facile de dterminer la valeur de Maxint, qui correspond au nombre 01111111 11111111 soit Maxint = 215 1 = 32 767 Lensemble des nombres de type entier est compris exactement dans lintervalle [-32 768, 32 767] Un calcul utilisant des entiers en dehors de cet intervalle conduira des erreurs traduisant un dpassement de capacit. Exemple Le calcul de 8 ! (factorielle 8) donnera un rsultat rron car 8 ! = 40 320 est en dehors de lintervalle permis.

Domaine de dfinition Oprateurs arithmtiques Oprateurs relationnels

Sous-ensemble de Z -32768.32767 +, - , *, / , DIV , MOD Notation algorithmique < , >, = , , , Notation en Pascal < , >, = , <= , >= , <>

14

b. Dclaration Au niveau de lalgorithme

Objet
Nom Au niveau du Pascal

Type / Nature
entier

Rle
Rle

Var Nom : integer ; c. Application Copiez le tableau suivant sur votre cahier puis remplissez la colonne intitule Rsultat par le rsultat de chaque opration.

Opration 7+2 7-2 4*5 7 mod 2 7 div 2 7/2

Rsultat

d. Quelques sous types du type entier Le type entier admet des sous types utiliss lors de la rsolution de quelques problmes dans le cas o le domaine de dfinition de la variable est une variante du type entier. Dans cette partie, vous allez dcouvrir quelques sous types les plus utiliss. En effet, il existe des sous types non signs (qui contiennent uniquement des valeurs positives) et des sous types signs (qui contiennent des entiers positifs et ngatifs).

15

Les Structures de Donnes

Chapitre

1
1. Les sous types non signs :
- Le type octet ou Byte Le type octet est cod sur un seul octet non sign. Son domaine varie de 0 255. - Le type mot ou Word Le type mot est cod sur deux octets non sign. Son domaine varie de 0 65535. - Le type mot long ou Longword Le type mot long est cod sur quatre octets non sign. Son domaine varie de 0 4294967295.

2.

Les sous types signs :


- Le type entier court ou Shortint Le type entier court est cod sur un seul octet sign. Son domaine varie de -128 127. - Le type entier ou Integer Le type entier est cod sur deux octets signs. Son domaine varie de -32768 32767. - Le type entier long ou Longint Le type entier long est cod sur quatre octets signs. Son domaine varie de -2147483648 2147483647.

Remarques :
Quand le rsultat calcul dpasse les bornes de lintervalle choisi, on va avoir un dbordement ce qui entrane un rsultat erron. Il est conseill dutiliser le type convenable et dviter de faire appel tout le temps au type Entier.

II.1.2

Le type rel
Activit 10
Quelles sont les valeurs possibles quon peut accorder une variable de type rel ? Quels sont les oprateurs applicables sur une variable de type rel ?

16

a. Prsentation Le type rel recouvre un ensemble de nombres rels qui ne correspond pas exactement aux nombres rels que lon rencontre en Mathmatiques. En effet, la ncessit de stocker ces nombres sur un certain nombre doctets impose des limites non seulement au niveau de la grandeur de ces nombres (comme pour les entiers) mais aussi au niveau de leur prcision. Le type REEL ( Real, en Pascal) est un sous ensemble de cardinal fini, de lensemble des nombres rels positifs ou ngatifs. Ce type permet deffectuer des calculs non seulement sur des nombres dcimaux, mais aussi sur des entiers plus grands que ceux qui sont disponibles sur le type entier. Il est possible de rentrer sur ordinateur des nombres rels sous une forme dcimale comme par exemple : -0.007 , 3.04159 , 105 , -15.408 Le traitement et laffichage des donnes de ce type se font en virgule flottante1, dans une notation dite scientifique normalise base 10.

Domaine de dfinition Oprateurs arithmtiques Oprateurs relationnels

Sous-ensemble de IR +, - , *, / Notation algorithmique < , >, = , , , Notation en Pascal < , > , = , <= , >= , <>

1Les

nombres virgule flottante (ou point flottant) sont appels ainsi parcequil est possible de les crire en dplaant le point volont et en utilisant une puissance approprie dans la base choisie. Exemple 145.25 = 0.14525 x 103 = 14525 x 10-2

17

Les Structures de Donnes

Chapitre

1
b. Dclaration Au niveau de lalgorithme

Objet
Nom Au niveau du Pascal

Type / Nature
rel

Rle
Rle

Var Nom : Real ; c. Application Soit la squence dinstructions suivante : X 5 Y X/2 Z X MOD 2 WX+Y T Y DIV 3

Questions : Prsentez le tableau de dclaration des objets utiliss dans cette squence et justifiez le choix du type. Traduisez ces dclarations en Pascal. Lors de lcriture de ces instructions une erreur a t commise, donnez linstruction qui comporte cette erreur puis proposez une solution pour la corriger. d. Les fonctions arithmtiques standard Vous avez vu lanne dernire que le langage Pascal comme tout autre langage dispose dune bibliothque riche en fonctions arithmtiques dont voici quelques unes :

18

Algorithmique Trunc (x)

Pascal Trunc (x)

Rle
Permet dextraire la partie entire de x. Arrondit une valeur relle lentier le plus proche. Renvoie la valeur absolue de x. Renvoie le carr de x. Renvoie la racine carre de x sil est positif sinon elle provoque une erreur. Renvoie la partie entire de x Renvoie la partie dcimale de x Renvoie le cosinus de x (x en radians) Renvoie le sinus de x (x en radians)

Exemples
Trunc (5, 2) vaut 5 Trunc (5, 9) vaut 5 ROUND (10.23) vaut 10 ROUND (10 .5) vaut 11 ROUND (10.83) vaut 11 ABS (-10) vaut 10 SQR (6) vaut 36 SQRT(5) vaut 2.236 INT(10.23) vaut 10.00 FRAC (10.23) vaut 0.23 COS (PI) vaut -1.00 SIN (PI) vaut 0.00

Arrondi (x) ROUND (x) ABS (x) Carr (x) Racine Carr (x) INT (x) FRAC (x) Cos (x) Sin (x) ABS (x) SQR (x) SQRT (x) INT (x) FRAC (x) Cos (x) Sin (x)

Activit 11
Recopiez puis ajoutez au tableau prcdent deux colonnes : Une premire colonne pour exprimer le type du paramtre x. Une seconde pour le type du rsultat

Activit 12
Ecrivez les formules suivantes en Pascal : f(x) = x4 3x2 + 1 g(x) = x3 - sin(x) h(x) = E(x) - 5

19

Les Structures de Donnes

Chapitre

1
e. Quelques sous types du type rel Comme le type entier, le type rel admet aussi des sous types utiliss lors de la rsolution de quelques problmes dont le domaine de dfinition de la variable est une variante du type rel. Dans cette partie, vous allez dcouvrir quelques sous types les plus utiliss. - Le type simple ou Single Le type single est cod sur quatre octets. Son domaine varie de 1.5 x 10-45 3.4 x 1038. Ce type comporte de 7 8 chiffres significatifs. - Le type double ou Double Le type double est cod sur huit octets. Son domaine varie de 5.0 x 10-324 1.7 x 10308. Ce type comporte de 15 16 chiffres significatifs. - Le type tendu ou Extended Le type extended est cod sur dix octets. Son domaine varie de 3.6 x 10-4951 1.1 x 104932. Ce type comporte de 19 20 chiffres significatifs.

II.1.3

Le type boolen:

a. Prsentation Le type boolen est trs souvent nglig par les programmeurs, tort. Il est vrai qu'il n'est pas proprement parler indispensable et qu'on pourrait crire peu prs nimporte quel programme en l'ignorant compltement. Pourtant, si le type boolen est mis disposition des programmeurs dans tous les langages, ce n'est pas pour rien. Le recours aux variables boolennes s'avre trs souvent un puissant instrument de lisibilit des algorithmes : il peut faciliter la tche de celui qui crit l'algorithme, comme de celui qui le relit pour le corriger. Une donne ou une variable de type boolen ne peut prendre que deux valeurs reprsentes par les identificateurs VRAI (TRUE) ou FAUX (FALSE). On obtient un rsultat de type boolen quand on est amen comparer des expressions entre elles, au moyen des oprateurs de comparaison, tel que : < , > , = , , , NON , ET , OU , etc.

20

Exemple Le rsultat de 14 > 5 est VRAI celui de 14 < 5 est FAUX et celui de 5 = 9 est FAUX Le rsultat de (14 > 5) ET (5 < 3) est FAUX car (14 > 5) est VRAI et (5 < 3) est FAUX Domaine de dfinition Vrai et Faux Notation algorithmique Non ( Ngation) Oprateurs Logiques Et (Conjonction) Ou (Disjonction) Ouex (Ou exclusif) Exemples Notation en Pascal NOT AND OR XOR

Activit 12
Copiez sur votre cahier puis compltez les tables de vrits suivantes : Valeur de Valeur de lexpression lexpression Logique A Logique B Vrai Vrai Faux Faux Vrai Faux Vrai Faux

Non(A)

A ET B

A OU B

A OUex B

Activit 13
Sachant que a = 4, b = 5, c = 1 et d = 0, valuez les expressions logiques suivantes : 1. (a < b) et (c >= d) 2. Non (a < b) ou (c b)

3.

Non (a b2) ou (a * c < d))

21

Les Structures de Donnes

Chapitre

1
b. Dclaration Au niveau du tableau de codification des variables

Objet
Nom Au niveau du Pascal

Type / Nature
boolen

Rle
Rle

Var Nom : Boolean ;

Remarque :
Lors de lvaluation dune expression, il faut tenir compte des rgles de priorit entre les oprateurs utiliss.

II.1.4

Le type caractre

a. Prsentation Le type caractre appartient lune des catgories suivantes : i) les chiffres de 0 9 ii) les lettres de lalphabet (de A Z) majuscules et minuscules iii) les caractres spciaux +, -, * , / , ; , etc. qui correspondent aux autres touches du clavier, y compris les touches fonctions telles que la barre despace et la touche <Entre> (ou retour chariot) 4i) les caractres non imprimables Une variable caractre occupe un octet en mmoire. A chaque caractre correspond un code (appel code ASCII) qui est un entier entre 0 et 255, puisque le remplissage 1 de tout octet quivaut 11111111 = 28 1 = 255. Exemple Exemple de caractres Chiffres de 0 9 Lettres de A Z Lettres de a z Le retour chariot La barre despace Code ASCII de 48 57 de 65 90 de 97 122 13 32

22

NB. Une liste donnant la correspondance du code ASCII est fournie en annexe la fin de ce manuel. Lettres alphabtiques minuscules et majuscules. Les chiffres de 0 9 Les symboles Les caractres non imprimables

Domaine de dfinition

Oprateurs Relationnels < , >, = , , ,

Remarques :
Un caractre est prsent par le caractre lui mme plac entre 2 guillemets exemple : A, z, 1, $, Un caractre vide est reprsent par deux paires de guillemets () Tous les caractres sont ordonns selon leurs codes ASCII variant de 0 255. Une variable de type caractre ne peut contenir quun et un seul caractre. b. Dclaration Au niveau de lalgorithme

Objet
Nom Au niveau du Pascal

Type / Nature
caractre

Rle
Rle

Var Nom : CHAR ; c. Fonctions prdfinies relatives au type caractre Soient c et n deux variables de type respectif caractre et entier.

Algorithmique ORD (c) CHR (n) PRED (c) SUCC (c)

Pascal ORD (c) CHR (n) PRED (c) SUCC (c)

Rle
Renvoie le code ASCII du caractre c. Renvoie le caractre dont le code ASCII est n. Renvoie le prdcesseur de c. Renvoie le successeur de c. Convertit le caractre c en majuscule si cest possible.
23

Exemples
ORD (A) vaut 65

CHR (65) vaut A PRED (B) vaut A SUCC (A) vaut B UPCASE (a) vaut A

MAJUS (c) UPCASE (c)

Les Structures de Donnes

Chapitre

1
d. Application Soit lalgorithme suivant : 0) Dbut inconnu 1) Ecrire ( Entrer un caractre :), lire (c1) 2) Si ( (ORD (c1) 97) et (ORD (c1) 122)) Alors c2 CHR (ORD (c1)-32) Sinon c2 c1 Fin SI 3) Ecrire (c2) 4) Fin inconnu a) Excutez cet algorithme pour c1 = A b) Refaites lexcution pour c1 = s c) Dduisez le rle de cet algorithme.

II.1.5

Le type chane de caractres

a. Prsentation Une chane de caractres est un regroupement de n caractres. n tant comprise entre 0 et 255. Si n est nulle on parle dune chane vide. Les caractres relatifs une chane sont reprsents entre guillemets. On peut accder au ime caractre dune chane ch en utilisant la notation ch[i] avec 1 i Long (ch). Exemple Soit linstruction suivante : Section Sciences informatiques

La variable Section qui est de type chane va recevoir Sciences informatiques 1 S 2 c 3 i 4 e 5 n 6 c 7 e 8 s 9 10 11 12 13 14 15 16 17 18 19 20 21 22 i n f o r m a t i q u e s

Section

Section[5]

Section[9]

Section[22]

Section[5] qui est le cinquime caractre de la chane Section est la lettre n alors que Section[9] est le caractre espace . Le dernier caractre de cette chane qui est le caractre n22 (Section[22]) est la lettre s.

24

b. Dclaration Au niveau de lalgorithme

Objet
Nom

Type / Nature
Chane

Rle
Rle

Dans ce cas la chane peut atteindre 256 caractres. Il est possible dopter pour la dclaration suivante :

Objet
Nom

Type / Nature
Chane [ L ]

Rle
Rle

Dans ce cas la chane peut avoir une taille maximale gale l (qui est la longueur de cette chane). Au niveau du Pascal Var Nom : String ; Ou bien Var Nom : String [ L ] Exemple Donnez les dclarations des variables de type chane de caractres suivantes : Un nom de 50 caractres au maximum Une adresse Un code postal de 5 caractres Le nom dun pays de 30 caractres.

25

Les Structures de Donnes

Chapitre

c. Les Fonctions et les procdures prdfinies sur les chanes Rle Exemples

Nom Algorithmique Pascal Long (ch) Length (ch)

position (ch1,ch2) pos (ch1 ,ch2)

Sous_chane (ch,p,n)

Copy (ch,p,n)

Renvoie le nombre de caractres de ch. Renvoie la position de la 1re occurrence de ch1 dans ch2. si ch1 nest pas dans ch2 elle retourne la valeur 0. Renvoie une sous -chane de n caractres partir de la position p de ch.

Concat (ch1,ch2chn)

Concat (ch1,ch2chn)

Length(technologie) vaut 12 Pos (i,Informatique) vaut 9 Pos (I, Informatique) vaut 1. Pos (Formation, Informatique) vaut 0 Copy (informatique,3,6) vaut format Soit ch1 := Ecole ; ch2 :=Sup ; permet la concatnation de ch1, ch2, Linstruction Concat (ch1, ,ch2) et chn renvoie la chane Ecole Sup.

26

Efface (ch,p,n)

Delete (ch,p,n)

Insre (ch1,ch2,p)

Convch (n, ch)

Valeur (ch,n,e)

Enlve n caractres de la chane ch Delete(Turbo Pascal,6,7) vaut partir de la position p. Le rsultat se Turbo trouvera dans la chane ch. Ch1 :=mation ; Ch2 :=program ; Insre la chane ch1 dans la chane ch2 Aprs excution de linstruction Insert (ch1,ch2,p) la position p. Insert (ch1,ch2,8) la chane ch2 va contenir programmation n :=20; Convertit le nombre n en une chane ch Str (n, ch) Aprs excution de linstruction STR(n,ch) la chane ch va contenir 20 ch := 20; Aprs excution de linstruction Val (ch,n,e) Convertit la chane ch en un nombre n. VAL(ch,n,e) n va contenir 20 et e sera gale 0 (pas derreur)

Activit 14
Soit la squence dinstructions suivante : Ch1 Ch2 Ch3 L1 L2 L3 L R1 LR1 R2 LR2 programmation de Langages Long (ch1) Long (ch2) Long (ch3) L1 + L2 + L3 concat(ch1,ch2,ch3) Long (R1) ch1 + ch2 + ch3 Long (R2)

1) Excutez manuellement cette squence 2) comparez les chanes de caractres R1 et R2 3) Comparez les valeurs des variables L, LR1 et LR2. Que pouvez vous dduire ? d. Applications 1) Quelles seront les valeurs des variables x1 et y1 aprs lexcution de la squence dinstructions suivante : T1 T2 x1 y1 procdure dur Position (T2,T1) Position (roche,T1)

2) Quelles seront les valeurs des variables x2 et y2 aprs lexcution de la squence dinstructions suivante : T1 T2 x2 y2 langage Mohamed Sous_chane (T1, 4, 2) Sous_chane (T2, 3, 5)

3) Quelles seront les valeurs des variables x3 et y3 aprs lexcution de la squence dinstructions suivante : T1 T2 T3 x3 y3 Mohamed Turbo Pascal Pascal Position (Hamed, T1) Position (T3, T2)
27

Les Structures de Donnes

Chapitre

III. Les structures simples


III.1

Activits
Activit 1
Quappelle-t-on une structure simple ? Une structure est dite simple si elle est rduite : - une entre de donnes (saisie, lecture) - une affectation - une sortie de rsultats (affichage, criture)

Activit 2
En 2me anne, vous avez manipul ces oprations . Donnez la forme gnrale de chacune dentre elles . Dans la suite, nous allons utiliser ces trois oprations pour rsoudre des problmes simples.

III.2

Dfinition
Une structure est dite simple (appele encore une squence), si elle ne contient que des instructions - dentre de donnes, - daffectation - de sortie de rsultats.

Remarques :
la source de lecture par dfaut est le clavier, cest le moyen le plus utilis, mais elle peut tre aussi une mmoire auxiliaire, La destination dcriture est par dfaut lcran, elle peut tre aussi une imprimante, un support de stockage,

28

III.3

Lopration dentre

Une entre est une opration de lecture de donnes. Cest une opration qui permet daffecter, une variable, une donne introduite partir dun priphrique dentre tel que le clavier. Les valeurs lues seront recopies dans des variables en mmoire centrale de lordinateur. a. Dclaration

Syntaxe en algorithmique
Lire (variable) b.Exemples

Syntaxe en Pascal
Read (variable) ; ou bien Readln (variable) ;

Algorithmique
Lire (x) Lire (a,b,c)

Pascal
Read (x) ; ou bien Readln (x); Read (a,b,c) ; ou bien Readln (a,b,c);

Remarques
Il doit y avoir correspondance de type (ou compatibilit) entre les donnes qui sont lues et les variables rserves en mmoire et qui vont recevoir les valeurs lues. Linstruction Readln force le passage la ligne suivante aprs la lecture des diffrentes variables figurant dans linstruction.

III.4

Lopration de sortie
Une sortie est une opration dcriture de donnes (souvent des rsultats de traitements). Cest une opration qui permet dcrire, sur un priphrique de sortie, les contenus de variables en mmoire centrale.

a. Dclaration Syntaxe en algorithmique Affichage dun texte Affichage du contenu dune variable Affichage dun texte + contenu dune variable Ecrire ( texte ) Ecrire (variable) Ecrire ("texte", variable) Syntaxe en Pascal Write ( texte ); Write (variable) ; ou Writeln (variable) ; Write (texte, variable) ; ou Writeln (texte, variable) ;

29

Les Structures de Donnes

Chapitre

1
b. Exemples Algorithmique Ecrire (x) Ecrire (a,b,c) Ecrire("La valeur de a est ", a) Ecrire("Llve ", nom, " a une moyenne",moy, " / 20") Write (x) ; Write (a,b,c) ; Write(La valeur de a est, a); Write(Llve, nom, a une moyenne,moy, / 20) ; Pascal

c- Remarques
En Pascal les commentaires sont placs entre apostrophes. Linstruction Writeln permet de passer la ligne suivante aprs lcriture des diffrentes variables et textes figurant dans linstruction

III.5

Lopration daffectation
Lopration daffectation permet daffecter une valeur une variable. Elle est reprsente par une flche oriente vers la gauche .

a. Vocabulaire et syntaxe

Syntaxe en algorithmique
Variable b. Exemples valeur

Syntaxe en Pascal
Variable := valeur ;

Algorithmique
x a a 5 x+3 x2

Pascal
x := 5 ; a := x + 3 ; x := x 2 ;

Commentaires
x reoit 5 a reoit la valeur de lexpression x + 3 x reoit la valeur de lexpression x 2

Rsultats
x=5 a=5+3 =8 x=52=3

30

Remarques

Dans la premire affectation la variable x prend la valeur 5. Quel que soit le contenu de x, il sera remplac par 5. La variable intitule a, aura pour valeur la somme de 5 et 3 donc 8. La variable x aura pour valeur la diffrence entre la valeur actuelle de x (qui est 5) et 2. donc la nouvelle valeur de x est 3 (3 = 5 - 2)

III.6

Applications
Soit la squence dinstructions suivante : 1. 2. 3. 4. 5. A B A B A 5 7 A+B AB AB

a. Application 1

- Dressez un tableau pour dterminer les valeurs des variables A et B aprs lexcution des instructions prcdentes. - Quel est le rle des instructions 3,4 et 5 ? N instruction 1 2 3 4 5 A 5 5 12 12 7 7 7 5 5 B

Cette squence dinstructions permet de permuter les contenus des deux variables A et B. Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1_V1.0 . On se propose maintenant de trouver une autre mthode pour raliser une permutation.

31

Les Structures de Donnes

Chapitre

1
Spcification du problme Rsultat : Ecrire (A , B)

Traitement : Pour pouvoir permuter les valeurs des deux variables A et B, nous pouvons faire recours une variable intermdiaire que nous allons appeler C. Les actions faire dans lordre sont : C A B A B C

A , B = donnes Algorithme : 0) DEBUT Algorithme Permutation // cet algorithme permet de permuter les valeurs de deux variables A et B // 1) Ecrire("A = "), Lire(A) 2) Ecrire("B = "), Lire(B) 3) C A 4) A B 5) B C 6) Ecrire( A, B ) 7) FIN Permutation Codification des objets : Nom A B C Type Entier Entier Entier Rle Une variable contenant la premire valeur Une variable contenant la deuxime valeur Une variable intermdiaire

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1_V2.0 . b. Application 2 Calculer et afficher le quotient et le reste de la division Euclidienne de A par B.

32

Spcification du problme Rsultat : Ecrire (q , r)

Traitement : Pour avoir le quotient (q)et le reste (r) de la division Euclidienne (ou entire) de A par B, il suffit dutiliser les fonctions prdfinies DIV et MOD. En effet : q r A DIV B A MOD B
exemple si A = 8 et B = 5 alors q
r

8 DIV 5 = 1
8 MOD 5 = 3

A , B = donnes Algorithme : 0) DEBUT Algorithme Euclide // cet algorithme permet de calculer puis dafficher le quotient et le reste de la division Euclidienne de deux variables A par B // 1) Ecrire("A = "), Lire(A) 2) Ecrire("B = "), Lire(B) 3) q A DIV B 4) r A MOD B 5) Ecrire( "Le quotient est ",q, " et le reste est ",r ) 6) FIN Euclide Codification des objets : Nom A B q r Type Entier Entier Entier Entier Rle Une variable contenant la premire valeur Une variable contenant la deuxime valeur Une variable qui va contenir la valeur du quotient Une variable qui va contenir la valeur du reste

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap2_V1.0 . c. Application 3 Utilisez le mme principe pour convertir en heures, minutes et secondes un temps donn en secondes. Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap3 .

33

Les Structures de Donnes

Chapitre

1
d. Application 4 deux points M et N du plan ayant pour coordonnes respectives (XM, YM) et (XN,YN). On se propose de calculer la distance (d) entre M et N sachant quelle est gale : d(M,N) = Spcification du problme Rsultat : Ecrire (d)

v(XM-XN)2+(YM-YN)2)

Traitement : Pour calculer la valeur de la distance entre M et N que nous allons appeler d, il suffit dappliquer la formule approprie. Notez bien que les fonctions prdfinies qui permettent de calculer la racine carre et le carr dun nombre sont respectivement : racine ( en Pascal SQRT ) et carre ( en Pascal SQR ). d Racine (carre(XM - XN) + carre (YM - YN) )

XM, YM, XN,YN = donnes Algorithme : 0) DEBUT Algorithme distance // cet algorithme permet de calculer puis dafficher la distance entre deux points M et N // 1) Ecrire("Les coordonnes de M = "), Lire (XM, YM) 2) Ecrire("Les coordonnes de N = "), Lire (XN, YN) 3) d Racine (carre(XM - XN) + carre (YM - YN) ) 4) Ecrire( "La distance est de ",d ) 5) FIN distance Codification des objets Nom Type XM rel YM rel XN rel YN d rel rel : Une Une Une Une Une variable variable variable variable variable contenant contenant contenant contenant contenant Rle labscisse du point M lordonne du point M labscisse du point N lordonne du point N la distance entre M et N

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap4. e. Application 5 On se propose dcrire un programme qui demande le nom, le prnom, lge, la taille en cm dune personne puis rpond comme suit : Bonjour Nom prnom !, tu as dj Age ans et tu mesures taille bientt !!
34

Exemple si le nom est Oueslati, le prnom Atef, lge 5 ans et la taille 120 cm alors le programme affichera : Bonjour Oueslati Atef !, Tu as dj 5 ans et tu mesures 1m et 20cm bientt !! Spcification du problme Rsultat : Ecrire (Nom, prnom, age, taille_m, taille_cm)

Traitement : Dans ce problme daffichage, la difficult rside dans la conversion de la taille donne en cm en son quivalent exprim en mtres et centimtres. Les autres informations objet de laffichage sont des donnes (le nom, le prnom et lage). Pour convertir la taille en mtres (Taille_m) et en centimtres (Taille_cm), nous allons faire appel aux deux fonctions prdfinies DIV et MOD. En effet Taille_m Taille_cm Algorithme : 0) DEBUT Algorithme Informations // cet algorithme permet dafficher des informations relatives une personne donne // Ecrire("Nom = "), Lire(Nom) Ecrire("Prnom = "), Lire(Prenom) Ecrire("Age = "), Lire(Age) Ecrire("Taille = "), Lire(Taille) Taille_m Taille DIV 100 Taille_cm Taille MOD 100 Ecrire("Bonjour ", Nom,Prnom, " !, Tu as dj ", Age, " ans et tu mesures ", Taille_m, " m et ",Taille_cm, " cm bientt !! ") FIN Informations Taille DIV 100 Taille MOD 100 (puisque 1m = 100 cm)

nom , prnom, age, taille = donnes

1) 2) 3) 4) 5) 6) 7) 8)

Codification des objets : Nom Nom Prenom ge Taille Taille_m Taille_cm Type Rle Chane de cararactres Une variable contenant le nom Chane de cararactres Une variable contenant le prnom Rel Une variable contenant lge Entier Une variable contenant la taille en cm Entier Une variable contenant la taille en m Entier Une variable contenant la taille en cm

35

Les Structures de Donnes

Chapitre

1
Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap5 .

IV. Les types numrs


a. Prsentation Les types numrs permettent de reprsenter des valeurs en les numrant au moyen de leurs noms. En effet, un type numr est un type dont les variables associes n'auront qu'un nombre limit de valeurs. En Pascal, cette valeur est dau maximum 256. La dfinition d'un type numr consiste dclarer une liste de valeurs possibles associes un type, c'est--dire qu'une variable de type numr aura l'une et une seule de ces valeurs et pas une autre. Exemple Semaine = (Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi) Type_couleur = (Rouge, Bleu, Vert, Jaune, Blanc, Noir)

Semaine

Dimanche Lundi Bleu

Mardi Mercredi Jeudi Vendredi Samedi Vert Jaune Blanc Noir

Type_couleur Rouge

Remarques :
La partie dclarative de cet exemple Semaine = (Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi) aurait bien pu tre raccourcie en : Jour :(Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi) b. Dclaration Au niveau de lalgorithme

Objet
Nom Au niveau de Pascal

Type / Nature
Liste de valeurs

Rle
Rle

Type Nom_type = (valeur1, valeur2, valeur3, ) ; Var Nom : Nom_type ; Ou bien Var Nom : (valeur1, valeur2, valeur3, ) ;
36

Exemple Donnez les dclarations des types numrs suivants : a) Matire comportant les noms de cinq matires de votre choix b) Sens comportant les quatre sens de direction qui sont haut, bas, gauche et droite c) Boolen pouvant tre vrai ou faux c. Les Fonctions prdfinies sur les types numrs Avant de prsenter les fonctions et les procdures susceptibles dtre utilises avec les types numrs, il est utile de donner les deux constations suivantes : a) Les valeurs dun type numr sont ordonnes selon leur ordre de dclaration. Pour le type Semaine, nous avons : Dimanche < Lundi < Mardi < Mercredi < b) Les types numrs font partie des types scalaires, en effet chaque valeur numre correspond un numro dordre (nombre entier). La premire valeur porte le numro 0, la seconde le numro 1, etc. Dans notre exemple, le type semaine est un type numr compos de 7 lments reprsentant les jours de la semaine. Remarquez que les lments sont uniquement des identifiants qui n'ont aucune valeur intrinsque. On peut juste les reprer par leur index (l'ordre dans lequel ils apparaissent dans la dclaration. Dimanche porte le numro 0 Lundi porte le numro 1 et Samedi porte le numro 6. 1) Les oprations possibles (en plus de laffectation et du passage en paramtre) sur les valeurs dun type numr sont : = 2) Fonction Rle Exemples Succ (exp_type_numr) Fournit le successeur de la Succ(Lundi) donne Mardi valeur donne par exp_type_numr (erreur si cette expression dsigne la dernire valeur numre) Pred (exp_type_numr) Fournit le prdcesseur de Pred(Lundi) donne la valeur donne par Dimanche exp_type_numr (erreur si cette expression dsigne la premire valeur numre) Ord (exp_type_numr) Fournit le numro dordre de la valeur donne par exp_type_numr
37

<

>

>

Ord(Dimanche) donne 0 Ord(Jeudi) donne 4

Les Structures de Donnes

Chapitre

V. Les types utilisateurs


a) Activit
Supposez que vous devriez crire un programme pour un distributeur automatique de jus de fruits. Remarquez que lensemble des fruits nest pas un type prdfini. Il est demand de chercher une solution. Solution 1 : Dsigner pour chaque fruit une valeur numrique ou caractre. exemple orange = 1, fraise = 2, etc. Ou bien orange = o, fraise=f Problme : Il faut se rappeler de ce codage par exemple par lajout de commentaire ce qui rend le programme difficile suivre. Solution 2 : Le programmeur a la possibilit de dfinir lui-mme et suivant son choix de nouveaux types. Donc on peut dfinir un type Fruits qui contiendra des noms de fruits. Il sagit dun nouveau type dit type utilisateur.

b) Dclaration
Au niveau de lalgorithme Tableau de dclaration de nouveaux types (T.D.N.T)

Type
Nom type = (val1, val2,, valn)

Objet
Nom variable Au niveau de Pascal

Type/Nature
Nom type

Rle
Rle

Type Nom type = ( val1,val2,,valn); Var Nom variable : nom type;

38

Remarque

Si lensemble de valeurs que peut prendre ce nouveau type forme un intervalle, on peut les reprsenter sous la forme gnrale suivante Binf ..Bsup

c) Application
Dclarez les types suivants : Un type intitul mention qui nacceptera que les mentions attribues une moyenne dun lve (Passable, assez bien, bien, trs bien) Un type saison comportant les quatre saisons (Automne, Hiver, Printemps, Et).

VI. Les tableaux


VI.1

Les tableaux une dimension


Activit
En 2me anne, vous avez rsolu des problmes utilisant la structure tableau. 1- Quest ce quune structure tableau ? 2- Pourquoi a-t-on recours cette structure ? 3- Comment dclarer un tableau destin contenir les moyennes dun groupe de 10 lves ? On obtient le tableau suivant :

Moyenne 12.50 1

8.56 2

13.22 3

10.89 4

14.58 5

7.89 6

16.58 7

10.08 8

14.58 9

15.09 10

Moyenne[4] correspond au 4me lment du tableau Moyenne et a la valeur 10.89. Moyenne[10] correspond au dernier lment du tableau Moyenne et a la valeur 15.09. Pour accder un lment du tableau Moyenne, il suffit de donner lidentificateur du tableau (ou son nom) et lindice de cet lment (ou son numro).

39

Les Structures de Donnes

Chapitre

1
Que devient le contenu du tableau Moyenne vantes ? Moyenne [1] Moyenne [2] Moyenne [5] Moyenne [10] Moyenne [7] Moyenne [4] aprs lexcution des affectations suiMoyenne [10] 2*Moyenne [1]/3 (Moyenne [10] + Moyenne [2]) / 2 (4* Moyenne [2]) / 3 Moyenne [7] + 2.57 Moyenne [6] - 2.11

Dfinition

Un tableau est un regroupement de valeurs portant le mme nom de variable et repres par un numro. Il permet de ranger un nombre fini dlments de mme type et selon une disposition bien dfinie. Le numro qui permet de reprer chaque valeur sappelle lindice. Chaque fois que lon veut dsigner un lment du tableau, on fait figurer le nom du tableau, suivi de lindice de llment, entre crochets.

Dclaration
Premire formulation Au niveau de lalgorithme

Objet
Nom tableau Au niveau de Pascal Var

Type/Nature
Tableau de taille de type

Rle
Rle

Nom : Array [Binf..Bsup] of type;

Identificateur du tableau

borne inferieur

borne suprieur

type des lements du tableau

40

Exemple var Moyenne : Array [1..10] of real; Deuxime formulation Au niveau de lalgorithme Tableau de dclaration de nouveaux types

Type
Nom type = tableau de taille et de type T. D. O

Objet
Nom tableau Au niveau de Pascal

Type/Nature
Nom type

Rle
Rle

Type Nom_type = Array [Binf..Bsup] of type ; Var Nom tableau : Nom_type ;

Application
Ecrivez un programme qui permet la saisie de 6 valeurs puis dafficher leurs carrs Le dialogue avec lutilisateur se prsente comme suit : Donnez 6 nombres entiers : 12 4 8 58 - 9 11

Nombre 12 4 8 58 -9 11

Carr 144 16 64 3364 81 121

41

Les Structures de Donnes

Chapitre

1
VI.2

Les tableaux deux dimensions


a) Activit
Supposez que vous deviez crire un programme pour la modlisation du jeu de dames et le dplacement de pions sur le damier. Proposez une solution. Solution 1 : Avec les outils que nous avons vu jusque l, le plus simple serait videmment de modliser le damier sous la forme dun tableau. Chaque case est un emplacement du tableau, qui contient par exemple 0 si elle est vide, et 1 sil y a un pion. On attribue comme indices aux cases les numros 1 8 pour la premire ligne, 9 16 pour la deuxime ligne, et ainsi de suite jusqu 64. Problme : La rgle du jeu dit quun pion dune case i donne ne doit tre dplacer que vers les cases adjacentes cette dernire ce qui va engendrer une complexit dans le reprage de ces cases. Solution 2 : Dans le domaine de linformatique, il est possible de reprer une valeur par deux coordonnes grce aux tableaux 2 dimensions. De ce fait le damier sera reprsent par un tableau 8*8 : cest dire 8 lignes et 8 colonnes et pour reprer un pion il suffit de donner le nom de ce tableau puis le n de la ligne et celui de la colonne auquel il appartient. Ce qui facilitera normment lopration du reprage.

b) Dclaration
Premire formulation Au niveau de lalgorithme

Objet
Nom tableau Au niveau de Pascal Var

Type/Nature
Tableau de taille de type

Rle
Rle

Nom : Array [Binf1..Bsup1, Binf2..Bsup2 ] of type;

Identificateur du tableau

intervalle des lignes

intervalle des colonnes

type des lments

42

Deuxime formulation Au niveau de lalgorithme Tableau de dclaration de nouveaux types

Type
Nom type = tableau de taille et de type Tableau de dclaration des objets

Objet
Nom tableau Au niveau de Pascal

Type/Nature
Nom type

Rle
Rle

Type Nom_type = Array [Binf1..Bsup1, Binf2..Bsup2] of type ; Var Nom tableau : Nom_type; Exemple Echec : Array [1.8,1..8] of integer;

Echec [2,2] 1 1 2 3 4 5 6 7 8 Echec [8,8] Echec [6,5] 2 3 4 5 6 7 8

43

Les Structures de Donnes

Chapitre

1
Echec[2,2] correspond llment de la ligne n2 et de la colonne n2 autrement dit, il sagit du 2me lment de la 2me ligne. Echec[5,6] correspond au 6me lment de la ligne n5. Echec[8,8] correspond llment n8 de la colonne n8 Pour accder un lment du tableau Echec, il suffit de donner lidentificateur du tableau (ou son nom) et les deux indices de cet lment (son numro de ligne et son numro de colonne).

c) application
On se propose dcrire un programme qui permet de calculer la moyenne de n lves relativement aux notes de 5 matires. Sachant que le coefficient de chaque matire est de 1. a) Ecrivez une spcification pour ce problme. b) Dduisez lalgorithme correspondant. c) Traduisez cet algorithme en Pascal .

44

Retenons
Les types numriques
Tous les langages de programmation offrent un bouquet de types numriques, dont le dtail est susceptible de varier lgrement dun langage lautre. Grosso modo, on retrouve cependant les types les plus utiliss suivants :

Type Numrique
Byte (octet) Entier Entierlong Rel Rel double

Plage
0 255 -32 768 32 767 -2 147 483 648 2 147 483 64 -3,40x1038 -1,40x1045 pour les valeurs ngatives 1,40x10-45 3,40x1038 pour les valeurs positives -1,79x10308 -4,94x10-324 pour les valeurs ngatives 4,94x10-324 1,79x10308 pour les valeurs positives

Les autres types


a) le type boolen : une donne ou une variable de type boolen ne peut prendre que deux valeurs qui sont reprsentes par les identificateurs vrai ou faux. b) Le type caractre : ce type travaille sur un jeu de caractres couvrant les chiffres de 0 9, les lettres de A Z, majuscules et minuscules et les caractres spciaux. c) Le type chane de caractres : tant dfinie comme un ensemble de caractres, ce type est surtout connu par ses fonctions et procdures prdfinies . d) Les types numrs : constituent un apport de taille pour ceux qui conoivent des programmes avec le soucis de bien grer les ressources disponibles. e) Les types tableaux : ce type permet de ranger dans une mme structure plusieurs donnes de mme type.

Les structures simples


a) Lopration dentre : cette opration permet de lire ou de saisir une valeur provenant du clavier ou dun autre priphrique. b) Lopration daffectation : cette opration consiste attribuer une valeur une variable pralablement dclare. c) Lopration de sortie : cette opration permet dafficher ou dcrire le contenu dune variable ou la valeur dune expression.
45

Exercices
Exercice 1 :
Parmi les nombres suivants, lesquels sont des entiers ? a) 15 b) 15.245 d) 15 mod 5 e) 1.5 E-100 g) 14.75 h) 1.0x14 c) -15.00 f) 17 mod 7 i) -15

Exercice 2 :
Parmi les nombres suivants, lesquels sont des rels ? a) -2.8 b) 1.5 x 245 d) 150 div 5 e) -4..5 E-100 g) 12.8 h) -5.08 x 14 c) 14/8 f) 78 mod 11 i) -15.8

Exercice 3 :
Compltez le tableau suivant par la syntaxe, le rle et deux exemples de chaque fonction ou procdure prdfinie sur les chanes de caractres :

Nom Long Concat Sous_chane Position Efface Insre Convch Valeur

Syntaxe

Rle

Exemple

46

Exercices
Exercice 4 :
Donnez les dclarations suivantes en algorithmique et en Pascal : a) une chane de caractres intitule nom et de longueur maximale 20 b) un entier de lintervalle [0,100] et intitul ent c) un caractre alphabtique intitul c d) un tableau T_Nombre capable de contenir 100 rels numrots de -50 49 e) un tableau T_NOM deux dimensions contenant 50 lignes et 10 colonnes et contenant des chanes de longueur maximale 50 caractres chacune. f) Une variable boolenne appel V_BOOL

Exercice 5 :
Soit un tableau TAB une dimension contenant les 10 entiers suivants :

TAB

14

10

-8

20

-8

-10

1) Donnez un exemple de dclaration de ce tableau. 2) Trouvez les erreurs daffectation dans la squence suivante : TAB[1] 2 x TAB[1] TAB[10] 12 - TAB[9] TAB[6] 2 / TAB[8] TAB[8] 3 + TAB[11] TAB[5] TAB[1] + TAB[5] TAB[2] TAB[1] div 3 TAB[1] TAB[1] + 5 3) Donnez, quand cest possible, les valeurs finales des lments de TAB

Exercice 6 :
Ecrivez une analyse puis un programme en Pascal permettant de dterminer et dafficher le taux de consommation de carburant dune voiture.

Exercice 7 :
Ecrivez une analyse puis un programme en Pascal permettant de dterminer et dafficher la conversion en mile marin dune distance mesure en kilomtres. On rappelle que 1 mile marin = 1.852 Km

47

Exercices
Exercice 8 :
a) Ecrivez une analyse puis un programme en Pascal permettant de dterminer et dafficher le successeur et le prdcesseur dun entier m donn. b) Faites le mme travail pour un caractre c donn.

48

Lecture
Structure de donnes
Un article de Wikipdia, l'encyclopdie libre. En informatique, une structure de donnes est une structure logique destine contenir des donnes, afin de leur donner une organisation permettant de simplifier leur traitement. Une structure de donnes implmente concrtement un type abstrait. Pourquoi organiser les donnes? Pour prendre un exemple de la vie quotidienne, on peut prsenter des numros de tlphone par dpartement, par nom, par profession (comme les Pages jaunes), par numro tlphonique (comme les annuaires destins au tlmarketing), par rue et/ou une combinaison quelconque de ces classements. chaque usage correspondra une structure d'annuaire approprie. En organisant d'une certaines manire les donnes, on permet un traitement automatique de ces dernires plus efficace et rapide. Le fait d'utiliser une structure de donnes appropri un traitement peut galement faire baisser de manire significative la complexit d'une application et ainsi participer faire baisser le taux d'erreurs. Types de collections : Collections squentielles Une collection squentielle permet de ranger des objets dans un ordre arbitraire. On parle de collection indexe quand on peut accder chaque lment de la collection par un numro d'ordre (l'index). Le choix d'une implmentation particulire dpend d'un certain nombre de compromis, comme l'occupation mmoire ou les performances requises pour diverses oprations de base : itration, ajout d'un lment (au dbut, la fin ou encore dans un emplacement quelconque de la collection), indexation, suppression d'un lment, dcompte du nombre d'lments, etc. Il existe deux grands types de collections squentielles : les listes les tableaux ou vecteurs

49

pitre 2 Chapitre
Les structures algorithmiques de contrle

Objectif

Savoir choisir les structures de donnes adquates pour rsoudre un problme donn.

I. Les structures conditionnelles


1 Lalternative 2 La structure conditionnelle gnralise 3 La structure choix

II. Les structures itratives


1 La structure complte 1 La structure condition darrt

Retenons Exercices

Chapitre

Les structures algorithmiques de contrle


Il est assez difficile de trouver une erreur dans son code quand on la cherche. Cest encore bien plus dur quand on est convaincu que le code est juste. Steve McConnell Ce chapitre prsente un rappel des structures algorithmiques de base prsentes en 2me anne. Les applications prsenteront les nouvelles structures de donnes traites dans le chapitre prcdent.

I. Les structures de contrle conditionnelles


I.1.

Introduction
Vous avez vu en 2me anne que les structures de contrle conditionnelles permettent un programme de modifier son traitement en fonction dune ou de plusieurs conditions. Ces structures sont de trois types : - la structure conditionnelle simple - la structure conditionnelle gnralise - la structure choix. Dans la suite du cours, vous allez vous rappeler et appliquer ces structures dans la rsolution de quelques problmes.

I.2.

La structure conditionnelle simple


Activits
a) Activit 1
a) Quest ce quune condition ? b) Quelle est la forme gnrale de la structure conditionnelle simple ? Vous avez vu dans le cours de 2me anne quune condition est une expression boolenne qui peut prendre la valeur vraie ou la valeur fausse.

I.2.1

51

La structure conditionnelle simple peut tre reprsente comme suit : Syntaxe en algorithmique Si conditions alors Syntaxe en Pascal If conditions Then Begin Traitement1 Traitement1; Sinon Traitement2 Fin si End Else Begin Traitement2; End;

b) Activit 2
Rsoudre un problme qui demande un nombre lutilisateur et linforme ensuite si ce nombre est pair ou impair. Spcification du problme Rsultat : Ecrire (nature)

Traitement : La dtermination de la nature du nombre saisi (quon appellera x) se fait en testant le reste de la division (r) de ce nombre par 2. En effet, sil est gal 0, la valeur de la variable nature est Paire, sinon la valeur de la variable nature est Impaire. Si r = 0 alors Nature sinon Nature Fin si r x MOD 2 x = donne Algorithme : 0) DEBUT Algorithme nombre // cet algorithme permet dafficher la nature dun nombre saisi // 1) Ecrire("x = "), Lire(x) 2) r x MOD 2 3) Si (r = 0) alors Nature "Paire" Sinon Nature "Impaire" Fin si 4) Ecrire(x, " est ", Nature) 5) FIN Nombre
52

" Paire" " Impaire "

Les Structures de contrle

Chapitre

2
Codification des objets : Nom x r Type Entier Entier Rle Une variable contenant un nombre. Une variable qui recevra le reste de la division de x par 2. Une variable contenant la nature de x (pair ou impair).

Nature Chane de caractres

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Act2 .

I.2.2

Dfinition
La structure conditionnelle simple est une structure algorithmique qui fait appel au maximum deux traitements suivant le rsultat de lvaluation de la condition. Si conditions alors Traitement1 Sinon Traitement2 Fin si Remarquons, tout dabord, que traitement1 et traitement2 peuvent tre form chacun dune seule ou de plusieurs instructions. Lexcution dune telle structure commence par lvaluation de la condition qui donne un rsultat de type boolen. Si ce boolen a pour valeur VRAI, alors Traitement_1 sera excut, dans le cas contraire cest Traitement_2 qui sera excut.

Si conditions alors Traitement1 Sinon Fin si Traitement2

Excut si la condition est vrifie Excut si la condition est fausse

Remarques :
1- La condition peut tre compose 2- Si Traitement_2 est vide, on parle de structure conditionnelle simple rduite qui a la syntaxe suivante : Si conditions alors Fin si
53

Traitement1

I.2.3

Applications

a. Application1 Excutez manuellement lalgorithme suivant et dduisez les valeurs finales des variables a,b et c pour chacune des valeurs initiales suivantes de a : i) a = 10 ii) a = 3 iii) a = 0 0) 1) 2) 3) 4) DEBUT Algorithme Application Ecrire("a = ") Lire(a) b 2a c b-4 Si a > 2c alors b a 2c Sinon b a+c Fin si 5) Ecrire(a,b,c) 6) FIN Application

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1 . b. Application2 Ecrivez un programme qui permet de calculer y =( -1)n + n Spcification du problme Rsultat : Ecrire (y)

Traitement : Le calcul de y dpend de la parit de n. En effet, si n est pair, la valeur de la variable y est (1 + n), sinon la valeur de la variable y est (1 + n). Si n MOD 2 =0 alors y 1+n sinon y -1 + n n = donne

54

Les Structures de contrle

Chapitre

2
Algorithme : 0) DEBUT Algorithme GRP // cet algorithme permet de calculer (-1)n +n 1) Ecrire("n = ") Lire(n) 2) Si n MOD 2 = 0 alors y 1+n Sinon y -1 + n Fin si 3) Ecrire(y) 4) FIN GRP Codification des objets : Nom n y Type Entier Entier Rle Une variable contenant le nombre objet du test Une variable contenant le rsultat de calcul de lexpression donne.

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap2 . b. Application3 Soit le circuit suivant :
a b

Analysez puis donnez un algorithme solution au problme qui donne ltat du circuit (ouvert ou ferm) sachant que : Si a = 1 : linterrupteur a est ferm Si a = 0 : linterrupteur a est ouvert Si b = 1 : linterrupteur b est ferm Si b = 0 : linterrupteur b est ouvert Spcification du problme Rsultat : Ecrire (Etat)

Traitement : La dtermination de ltat du circuit se fait en fonction de la valeur des interrupteurs a et b. En effet, si a = 1 et b = 1 alors la valeur de la variable qui va contenir ltat du circuit est " ferm " sinon ltat du circuit est " ouvert " . a, b sont deux entiers donns.

55

Algorithme : 0) DEBUT Algorithme circuit // cet algorithme permet dafficher ltat dun circuit // 1) Ecrire("Donner ltat de linterrupteur a : "), Lire(a) 2) Ecrire("Donner ltat de linterrupteur b : "), Lire(b) 3) Si ( a= 1 ) et ( b=1 ) alors Etat Sinon Etat Fin si 4) Ecrire( Etat) 5) FIN circuit Codification des objets : Nom a b Type Entier Entier Chane de caractres Rle Une variable contenant ltat de linterrupteur a. Une variable contenant ltat de linterrupteur b. Une variable contenant ltat du circuit (ouvert ou ferm) "Ferm" "Ouvert"

Etat

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap3 . d. Application4 Saisir deux entiers et vrifier si le premier est un multiple du second. Spcification du problme Rsultat : Ecrire (multiple)

Traitement : Pour vrifier que le premier entier que nous appelons a est un multiple du second entier que nous appelons b, il suffit de tester la valeur de la division entire de a par b. Si le reste vaut 0 alors a est un multiple de b sinon a nest pas un multiple de b. a, b sont deux entiers donns.

56

Les Structures de contrle

Chapitre

2
Algorithme : 0) DEBUT Algorithme Multiple // cet algorithme permet de dterminer si un entier a donn est multiple dun entier b donn // 1) Ecrire("a = "), Lire(a) 2) Ecrire("b = "), Lire(b) 3) Reste a MOD b 4) Si (Reste = 0) alors m Sinon m Fin si 5) Ecrire( m) 6) FIN Multiple faux vrai

Remarque :
Il est possible dutiliser ultrieurement la variable m dans dautres tests puisquelle est boolenne. Codification des objets : Nom a b Reste m Type Entier Entier Entier boolen Rle Une variable contenant le premier entier Une variable contenant le deuxime entier Une variable contenant le reste de la division entire de a par b Une variable contenant vrai si a est multiple de b sinon elle contient faux

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap4. e. Application5 Ecrivez un programme qui saisit un mot et affiche si un caractre c existe dans ce mot.

57

Spcification du problme Rsultat : Ecrire (c, message, mot)

Traitement : Lexistence dun caractre dans un mot se fait en testant la valeur de la variable (p) renvoye par lapplication de la fonction prdfinie POS sur le mot et le caractre. En effet si p = 0 alors le caractre nexiste pas dans le mot sinon le caractre est existant dans le mot. p POS (c , mot)

c et mot sont des donns. Algorithme : 0) DEBUT Algorithme Existence // cet algorithme permet de vrifier si un caractre existe dans un mot ou non// 1) Ecrire("Donner le mot ") Lire(mot) 2) Ecrire("Donner le caractre ") Lire(c) 3) P POS (c , mot) 4) Si p = 0 alors message " nexiste pas dans " Sinon message "existe dans " Fin si 5) Ecrire(c ,meesage, mot) 6) FIN Existence Codification des objets : Nom c p Mot Type Caractre Entier Chane de caractres Chane de caractres Rle Une variable contenant un caractre. Une variable contenant la position. Une variable contenant un mot. Une variable contenant existe dans si c est dans mot et nexiste pas dans sinon

Message

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap5 . f. Application6 Saisissez deux entiers et vrifiez si le second est un diviseur du premier.
58

Les Structures de contrle

Chapitre

2
Spcification du problme Rsultat : Ecrire (a, d , b)

Traitement : Pour vrifier que le second entier que nous appelons b est un diviseur du premier entier que nous appelons a, il suffit de tester la valeur du reste de la division entire de a par b. Si le reste vaut 0 alors b est un diviseur de a sinon b nest pas un diviseur de a. a et b sont deux entiers donns Algorithme : 0) DEBUT Algorithme diviseur // cet algorithme permet de dterminer si un entier b donn est un diviseur dun entier a donn // 1) Ecrire("a = "), Lire(a) 2) Ecrire("b = "), Lire(b) 3) Reste a MOD b 4) Si Reste = 0 alors d " est un diviseur de " Sinon d " nest pas un diviseur de " Fin si 5) Ecrire(a,d,b) 6) FIN diviseur Codification des objets : Nom a b Reste d Type Entier Entier Entier Chane de caractres Rle Une variable contenant le premier entier Une variable contenant le deuxime entier Une variable contenant le reste de la division entire de a par b Une variable contenant un commentaire indiquant la divisibilit de a par b

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap6.

59

I.3.

La structure conditionnelle gnralise


Activits
a) Activit 1
a) b) Quest ce quune structure conditionnelle gnralise ? Quelle est la forme gnrale de la structure conditionnelle gnralise ?

I.3.1

Vous avez vu dans le cours de 2me anne que la structure conditionnelle gnralise est utilise dans le cas o la solution dun traitement conditionnel fait appel plus que deux situations. La structure conditionnelle gnralis peut tre reprsente comme suit : Syntaxe en algorithmique
Si condition_1 alors Traitement_1 sinon Si Condition_2 alors Traitement_2 sinon Si Condition_3 alors sinon Si ....... sinon si condition_n alors Traitement_n sinon Traitement_n+1 Fin si

Syntaxe en Pascal If condition_1 then Traitement_1 else if Condition_2 then Traitement_2 else if Condition_3 Traitement_3 else if .... else if Condition_n then Traitement_n else Traitement_n+1 ;
60

Les Structures de contrle

Chapitre

2
b) Activit 2
Analysez puis dduisez un algorithme dun problme qui consiste demander un nombre lutilisateur, et linformer ensuite si ce nombre est positif ou ngatif ou nul. Spcification du problme Rsultat : Ecrire (nature)

Traitement : La dtermination de la nature du nombre saisi (quon appellera x) se fait en testant le signe de ce nombre. En effet, si x est gal 0, la valeur de la variable nature est Nul sinon deux cas se prsente. Si x est strictement suprieur 0, la valeur de la variable nature est Positif , sinon la valeur de la variable nature est Ngatif . Si x = 0 alors Nature sinon Si x > 0 alors sinon Nature x = donne Algorithme : 0) DEBUT Algorithme nombre // cet algorithme permet dafficher la nature dun nombre rel saisi // 1) Ecrire("x = ") Lire(x) 2) Si x = 0 alors Nature "Nul" Sinon Si x > 0 alors Nature "Positif" Sinon Nature "Negatif" Fin si 3) Ecrire(x, " est ", Nature) 4) FIN Nombre Codification du problme : Nom Type x Rel Nature Chane de caractres Rle Une variable contenant le nombre objet du test Une variable contenant la nature de x (positif ou ngatif) " Ngatif" " Nul" Nature " Positif "

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Act2 .
61

I.3.2

Dfinition

La structure conditionnelle gnralise est une structure algorithmique qui fait appel plus que deux traitements. Lexcution dun traitement entrane automatiquement la non excution des autres traitements.

Si condition_1 alors Traitement_1 sinon Si Condition_2 alors Traitement_2 sinon Si Condition_3 alors Traitement_3 sinon si condition_n alors traitement_n sinon Traitement_n+1 Fin si

Comme dans le cas dune structure conditionnelle simple, chaque traitement peut comporter une ou plusieurs instructions. Lexcution dune telle structure commence par lvaluation de condition_1 qui donne un rsultat de type boolen. Si ce boolen a pour valeur VRAI, alors traitement_1 sera excut et lexcution continue avec linstruction qui suit la structure conditionnelle. Dans le cas contraire cest condition_2 qui sera value, si elle est vrifie alors traitement_2 sera excut et on quitte la condition, sinon lexcution continue de la mme faon avec les autres conditions. Si aucune condition nest vrifie alors cest traitement_(n+1) qui sera excut.

62

Les Structures de contrle

Chapitre

2
Si condition_1 alors Traitement_1 sinon Si Condition_2 alors Traitement_2 sinon Si Condition_3 alors Traitement_3 sinon si condition_n alors Traitement_n sinon Traitement_n+1

I.3.3

Application
Excutez manuellement lalgorithme suivant et dduisez les valeurs finales des variables a, b et c pour chacune des valeurs initiales suivantes de a : 1 a = 10 2) a = 3 3) a = -5 0) 1) 2) 3) 4) DEBUT Algorithme Application Ecrire("a = ") Lire(a) b 2a c b-4 Si a > 2c alors b a 2c Sinon Si a > c alors b a+c Sinon b c Fin si 5) Ecrire(a,b,c) 6) FIN Application Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1 .

a. Application1

63

b. Application2

Rsoudre un problme qui demande lge dun enfant , puis linforme de sa catgorie : "Papillon " moins que 6 ans " Poussin " de 6 7 ans " Pupille " de 8 9 ans " Minime " de 10 11 ans " Cadet " de 12 14 ans " Junior " de 15 17 ans "Senior " de 18 20 ans "Tu as dpass lge de lenfance " plus que 20 ans

Spcification du problme Rsultat : Ecrire (CAT)

Traitement : Pour afficher la catgorie relative lge (quon appelle age) dun enfant donn, on teste la validit de la valeur de lage. On ne se soucie pas de la validit de lage saisi en effet, on suppose que lutilisateur saisit un age correct. Suivant la valeur de lage, on affecte une variable intermdiaire (quon appelle CAT) le nom de la catgorie approprie. Ce quon peut traduire par la reprsentation suivante :

" Tu as dj dpass lge de lenfance " > 20 age < 6 " Papillon " 6 ou 5 8 ou 9 " Poussin " " Pupille " 10 ou 11 " Minime " Age 15 17 12 14 " Cadet " " Junior " 18 20 " Espoire "

age = Donne

64

Les Structures de contrle

Chapitre

2
Algorithme 0) DEBUT Algorithme Cat_age // cet algorithme dtermine et affiche la catgorie dun enfant suivant son age// 1) Ecrire("Age = ") Lire(age) 2) Si (age <6 ) alors CAT " Papillon" sinon si (age = 6) ou (age = 7) alors CAT " Poussin " Sinon si (age dans [8..9]) alors CAT " Pupille " Sinon si (age dans [10..11]) alors CAT " Minime " Sinon si (age dans [12 .. 14]) alors CAT " Cadet " Sinon si (age dans [15 .. 17]) alors CAT " Junior " Sinon si (age dans [18..20])alors CAT " Espoir " Sinon CAT "Tu as dpass lge de lenfance ! " Fin si 3) Ecrire(CAT) 4) FIN Cat_age Codification du problme : Nom Type age entier CAT Chane de caractres Rle Une variable contenant lage de lenfant Une variable contenant la catgorie qui correspond lage de lenfant

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap2 . c. Application3 Lire une temprature de leau comme une variable de type entier, puis afficher son tat. Les trois formes de leau sont : - " gaz " si la temprature dpasse 100 - " liquide " si la temprature est entre 0 et 100 - " glace " si la temprature est infrieure 0.

65

Spcification du problme Rsultat : Ecrire (Etat)

Traitement : Ltat de leau dpend de la valeur de la temprature (quon appelle T) en effet trois cas de figure se prsentent comme mentionn dans les noncs du problme. Suivant la valeur de la temprature, on affecte une variable ntermdiaire (quon appelle Etat) ltat appropri de leau. Ce quon peut traduire par la reprsentation suivante :

Temprature T<0 0 T 100 T > 100

" Glace " " Liquide " T = Donn Algorithme :

" Gaz "

0) DEBUT Algorithme Eau // cet algorithme dtermine et affiche ltat de leau suivant la temprature donne // 1) Ecrire("Temprature = ") Lire(T) 2) si (T < 0) alors Etat " Glace " Sinon si (T < 101) alors Etat sinon Etat Fin si 3) Ecrire("Etat = ", Etat) 4) FIN Eau

" Liquide " " Gaz "

66

Les Structures de contrle

Chapitre

2
Codification du problme : Nom Type T entier Etat Chane de caractres Rle Une variable contenant la valeur de la temprature Une variable contenant ltat de leau en fonction de la temprature

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap3 . d. Application4 Ecrivez un programme qui saisit successivement un rel r1 , un oprateur op et un deuxime rel r2 puis affiche le rsultat de lapplication de loprateur op sur r1 et r2. Spcification du problme Rsultat : affichage

Traitement : Laffichage dpend de la valeur de loprateur (op) saisi. Une solution qui permettra de dterminer cet affichage est la suivante : - Utiliser une structure conditionnelle gnralise puisquil existe cinq affichages possibles. - Tester et afficher le message correspondant en fonction de la valeur de la variable op. Op, r1,r2 sont tous des donnes. Algorithme : 0) DEBUT Algorithme operation // cet algorithme dtermine et affiche un message en fonction de la valeur dun oprateur quon appliquera sur deux rels donns // 1) Ecrire("Donner le premier rel : ") Lire(r1) 2) Ecrire("Donner loprateur appliquer : ") Lire(op) 3) Ecrire("Donner le deuxime rel ") Lire(r2) 4) si (op = "+") alors Ecrire (r1 ,op, r2 , "=", r1+r2) sinon si (op = "-") alors Ecrire (r1 ,op, r2 , "=", r1-r2) sinon si (op = "*") alors Ecrire (r1 ,op, r2 , "=", r1*r2) Sinon si(op = "*") alors si ( r2 0) alors Ecrire (r1 ,op, r2 , "=", r1/r2) Sinon ecrire ("Erreur") Fin si Sinon Ecrire ("Oprateur non valide") Fin si 5) FIN Operation
67

Codification des objets : Nom Type Rle Une variable contenant le premier oprande r1 rel r2 op rel caractre Une variable contenant le deuxime oprande Une variable contenant la valeur de loprateur appliquer.

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap4 . e. Application5 Ecrivez un programme qui permet de lire une lettre (suppose majuscule) et afficher "Groupe A" si la lettre est "A", "Groupe B" si la lettre est "B" ; dans tous les autres cas afficher le message "Erreur de saisie". Spcification du problme Rsultat : Ecrire (Groupe)

Traitement : La valeur de la chane afficher (quon appelle Groupe) dpend de la valeur de la lettre saisie ( quon appelle Lettre). Une solution qui permettra de dterminer la valeur de Groupe est la suivante : - Utiliser une structure conditionnelle gnralise puisquil existe trois valeurs possibles de la variable Groupe. - Tester et affecter la variable Groupe le nom du groupe dans le cas o la lettre est "A" ou "B" sinon le message derreur. Lettre = Donne Algorithme : 0) DEBUT Algorithme Groupes // cet algorithme dtermine et affiche un message en fonction de la valeur dune lettre saisie // 1) Ecrire("Lettre = ") Lire(Lettre) 2) si (Lettre = "A") alors Groupe "Groupe A" sinon si (Lettre = "B") alors Groupe "Groupe B" sinon Groupe "Erreur de saisie" Fin si 3) Ecrire("Message = ", Groupe) 4) FIN Groupes

68

Les Structures de contrle

Chapitre

2
Codification du problme : Type caractre Chane de Groupe caractres Nom Lettre Rle Une variable contenant une lettre majuscule Une variable contenant le message en fonction de la valeur de la variable lettre.

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap5 .

I.4.

La structure conditionnelle choix


Activits
a) Activit 1
a. Quest ce quune condition choix ? b. Quelle est la forme gnrale de la structure conditionnelle choix ? Vous avez vu dans le cours de 2me anne que la structure conditionnelle choix permet de faire un choix parmi plusieurs choix proposs. Le slecteur permet de dfinir le choix du traitement effecteur. La structure conditionnelle choix peut tre reprsente comme suit :

I.4.1

Syntaxe en algorithmique
Selon slecteur faire Valeur_1 : Traitement_1 Valeur_2 : Traitement_2 Valeur_3 : Traitement_3 . . . Valeur_n : Traitement_n sinon Traitement_m Fin selon

Syntaxe en Pascal
Case selecteur of Valeur_1 : Traitement_1 ; Valeur_2 : Traitement_2 ; Valeur_3 : Traitement_3 ; . . . Valeur_n : Traitement_n else Traitement_m ; end ;

b) Activit 2
Reprenons lapplication 4 de la page 67 et reprsentons la solution par le biais dune structure conditionnelle choix. Le problme consiste crire un programme qui saisit successivement un rel r1 , un oprateur op et un deuxime rel r2 puis affiche le rsultat de lapplication de loprateur op sur r1 et r2.
69

Spcification du problme Rsultat : affichage

Traitement : Laffichage effectuer dpend de la valeur de loprateur saisi( quon appelle op). - Utiliser une structure conditionnelle choix avec comme slecteur la variable op. - Tester et afficher le message correspondant suivant la valeur de la variable op. Op , r1 et r2 sont des donnes Algorithme : 0) DEBUT Algorithme Operation // cet algorithme affiche le rsultat de lapplication dun oprateur sur deux oprandes // 1) Ecrire("Donner le premier rel : ") Lire(r1) 2) Ecrire("Donner loprateur appliquer : ") Lire(op) 3) Ecrire("Donner le deuxime rel ") Lire(r2) 4) Selon op faire "+" : Ecrire (r1 ,op, r2 , "=", r1+r2) "-" : Ecrire (r1 ,op, r2 "=", r1-r2) "*" : Ecrire (r1 ,op, r2 , "=", r1*r2) "/" : Si (r2 0) alors Ecrire (r1 ,op, r2 , "=", r1/r2) Sinon Ecrire ("Erreur") Fin si Sinon Ecrire ("Oprateur non valide") Fin selon 5) FIN Operation Codification des objets : Nom type Rle Une variable contenant le premier oprande r1 rel r2 op rel caractre Une variable contenant le deuxime oprande Une variable contenant la valeur de loprateur appliquer.

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Act2 .

70

Les Structures de contrle

Chapitre

2
I.4.2 Dfinition
La structure conditionnelle choix est une structure algorithmique utilise de prfrence dans des structures plusieurs traitements selon des conditions. Comme le cas dune structure conditionnelle gnralise, lexcution dun traitement entrane automatiquement la non excution des autres. Le choix dun traitement se fait suivant la valeur dun slecteur. Cette structure permet dviter le recours une longue structure conditionnelle gnralise et offre une meilleure lisibilit de la solution.

Selon slecteur faire Valeur_1 : Traitement_1 Valeur_2 : Traitement_2 Valeur_3 : Traitement_3 . . Valeur_n : Traitement_n sinon Traitement_m Fin Selon

Remarques
1) Le slecteur doit tre de type scalaire discret et non rel. 2) Comme dans le cas des autres structures conditionnelles, chaque traitement peut comporter une ou plusieurs instructions. 3) Valeur_i peut tre un ensemble de valeurs qui seront spares par des virgules ou un intervalle de valeurs (vi .. vf) 4) Si la valeur du slecteur est diffrente des valeurs proposes alors cest le traitement qui suit la clause sinon qui sera excut. 5) La clause sinon et son traitement sont facultatifs dans la structure.

71

Selon slecteur faire Valeur_1 : Traitement_1 Valeur_2 : Traitement_2 .............................. Valeur_n : Traitement_n sinon Traitement_m Fin Selon

I.4.3

Applications

a. Application1 Excutez manuellement lalgorithme suivant et dduisez les valeurs finales des variables a, b et c pour chacune des valeurs initiales suivantes de a : 1 a = 10 2) a = 3 3) a = -5 0) 1) 2) 3) 4) DEBUT Algorithme Application Ecrire("a = ") Lire(a) b 2a c b-4 Selon c faire 2:a b - 10 16 : b a + 10 Sinon c - 10

c Fin selon 5) Ecrire(a,b,c) 6) FIN Application

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom App1 .

72

Les Structures de contrle

Chapitre

2
b. Application2 Reprenez lapplication 2 de la page 64, et cherchez une solution en utilisant la structure conditionnelle choix. Lapplication consiste demander lge dun enfant, puis cherche sa catgorie : " " " " " " " Poussin " de 6 7 ans Pupille " de 8 9 ans Minime " de 10 11 ans Cadet " de 12 14 ans Junior " de 15 17 ans Espoir " de 18 20 ans tu as dpass lge de lenfance plus que 20 ans .

Spcification du problme Rsultat : Ecrire (catgorie)

Traitement : Pour afficher la catgorie relatif lage (quon appelle a) dun enfant donn, on teste sur la valeur de lage qui est de type entier donc scalaire. Pour cela, on fait appel la structure conditionnelle choix avec lage comme slecteur. Pour chaque intervalle de valeurs, on affecte une variable quon appelle CAT la valeur de la catgorie adquate. age = Donne Algorithme : 0) DEBUT Algorithme Cat_age // cet algorithme dtermine et affiche la catgorie dun enfant suivant son age en utilisant la structure conditionnelle choix // 1) Ecrire("Age = ") Lire(age) 2) Selon age faire 6..7 : CAT " Poussin " 8..9 : CAT " Pupille " 10..11 : CAT " Minime " 12 .. 14 : CAT " Cadet " 15 .. 17 : CAT " Junior " 18..20 : CAT " Espoir " Sinon CAT Fin selon 3) Ecrire("Catgorie ", CAT) 4) FIN Cat_age
73

" Tu as dpass lage de lenfance "

Codification du problme : Nom age cat Type Rle Une variable contenant lage de lenfant entier Chane de Une variable contenant la catgorie qui corcaractres respond lage de lenfant

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom App2 . c. Application3 Ecrivez une analyse puis un programme dun problme qui saisit une date en introduisant successivement le n du jour, le n du mois et le n de lanne puis affiche cette date en remplaant le n du mois par son quivalent en toute lettre. Exemple Si njour =1 , n du mois = 5 et n de lanne =2005 le programme affichera 1 mai 2005. Spcification du problme Rsultat : Ecrire (jour, mois, an)

Traitement : Le problme consiste transformer le code du mois (mm) en mois en toutes lettres. Puisquil existe douze cas possibles et que le critre de slection est de type entier (en effet la variable mm est un entier dont la valeur doit appartenir lintervalle [1..12]), la structure conditionnelle utiliser est la structure conditionnelle choix. La forme gnrale de la structure sera : Selon mm faire 1 : mois "Janvier " 2 : mois "Fvrier" .. 12 : mois "Dcembre" jj, mm, aaaa = Donne Algorithme : 0) DEBUT Algorithme date // cet algorithme saisit successivement un n de jour, un n de mois et un n danne puis les affiche en remplaant le n du mois par son quivalent en toute lettre //

74

Les Structures de contrle

Chapitre

2
1) Ecrire("date = ") Lire(jj,mm,aaaa) 2) Selon mm faire 1 : mois " janvier " 2 : mois " fvrier " 3 : mois " mars " 4 : mois " avril " 5 : mois " mai " 6 : mois " juin " 7 : mois " juillet " 8 : mois " aot " 9 : mois " septembre " 10 : mois " octobre " 11 : mois " novembre " 12 : mois " dcembre " Fin selon 3) Ecrire ("date = ", jj, mois, aaaa) 4) FIN date Codification des objets : Nom Type Rle Une contenant le nombre de jour jj entier mm aaaa mois entier entier Une variable contenant le numro du mois Une variable contenant la valeur de lanne

Chane de Une variable contenant le nom du mois n mm caractres (janvier pour 1, fvrier pour 2, etc.)

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom App3 . d. Application4 Ecrivez une analyse puis un algorithme dun problme qui saisit un chiffre et affiche son nom, si la donne saisie nest pas un chiffre alors afficher "Ce nest pas un chiffre".

75

Spcification du problme Rsultat : Ecrire (nom)

Traitement : La valeur de la chane afficher (quon appelle nom) dpend de la valeur de la variable saisie ( quon appelle chiffre). Une solution qui permettra de dterminer la valeur de nom est la suivante : - Utiliser une structure conditionnelle choix puisque le critre de slection est la variable chiffre qui est un entier dont la valeur varie de 0 9 (sauf dans une erreur de saisie o on affiche un message derreur). - Pour chacune des valeurs de 0 9, affecter la variable nom le nom du chiffre "Zro", "un", , "neuf" sinon le message derreur. La forme gnrale de la solution est : Selon chiffre faire 0 : nom 1 : nom .. 9 : nom sinon nom Chiffre = Donnes

"Zro" "un" "neuf" "Ce nest pas un chiffre"

Algorithme :
0) DEBUT ALGOTITHME Non chiffre // cet algorithme dtermine et affiche le nom dun chiffre saisi // 1) Ecrire("chiffre = ") lire(chiffre) 2) Selon chiffre 0 : nom " Zro " 1 : nom " un " 2 : nom " deux " 3 : nom " trois " 4 : nom " quatre " 5 : nom " cinq " 6 : nom " six " 7 : nom " sept " 8 : nom " huit" 9 : nom " neuf " sinon nom " Ce nest pas un chiffre " Fin selon 3) Ecrire("nom = ", nom) 4) FIN Nom_chiffre
76

Les Structures de contrle

Chapitre

2
Codification des objets : Nom chiffre nom Type entier Chane de caractres Rle Une variable contenant la valeur du chiffre Une variable contenant le nom du chiffre ou le message derreur si chiffre nest pas dans lintervalle [0,9].

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source

II. Les structures de contrle itratives


II.1. Introduction
Vous avez vu en 2me anne quen plus des structures de contrle conditionnelles qui permettent un programme de modifier son traitement en fonction dune ou de plusieurs conditions, il existe des structures de contrles qui permettent de rpter une squence dinstructions plusieurs fois, on parle de structures de contrle itratives ou rptitives ou simplement de boucles. De ce fait, on appelle boucle une structure o un ensemble d'instructions qui sera excut plusieurs fois. La boucle permet d'appliquer une opration (c'est--dire un ensemble d'instructions) chaque lment d'une liste. Le nombre de rptitions peut tre connu ou inconnu lavance. Cest en fonction de ce critre que se fera le choix de la structure itrative. En effet, on distingue deux sortes de structures de contrle itratives : 1- les boucles dans lesquelles le nombre dexcutions est connu de prime abord : itrations. 2- Les boucles dans lesquelles le nombre dexcutions est inconnu au dpart : rptitions. Les structures de contrle itratives sont de deux types : La structure itrative complte ou la structure POUR Faire les structures rptitives condition darrt, composes de deux structures : la structure REPETER Jusqu la structure TANT QUE Faire Dans la suite du cours, vous allez vous rappeler et appliquer ces structures dans la rsolution de quelques problmes.

77

II.2

La structure itrative complte


Activit
a. Quest ce qui caractrise la structure de contrle itrative complte ? b. Quelle est la forme gnrale de la structure itrative complte ?

Vous avez vu dans le cours de 2me anne que la structure de contrle itrative complte est utilise dans le cas o le traitement faire ncessite une rptition avec le nombre des itrations connu lavance. C'est, donc, la structure que l'on utilise lorsqu'on veut rpter plusieurs instructions un nombre connu de fois.

II.2.1

Syntaxe de la structure itrative complte


Au niveau de lalgorithme Au niveau de Pascal
---------; Initialisation (s) ---------; FOR Cp := Vi TO Vf DO Begin Instruction 1; Instruction 2; .; .; Instruction n; End;

La structure de contrle itrative complte est reprsente comme suit :

-------------------------

Initialisation (s)

POUR Cp de Vi Vf FAIRE Instruction 1 Instruction 2 . . Instruction n FINPOUR

Activit
Comment sexcute cette boucle ? Implicitement la boucle POUR FAIRE ralise successivement les actions suivantes : Action 1 : initialise le compteur de la boucle (Cp) la borne infrieure (Vi) Action 2 : incrmente de 1 le compteur chaque rptition Action 3 : excute les instructions du traitement rptitif Action 4 : vrifie que la valeur du compteur ne dpasse pas la valeur finale (Vf). Attention: Evitez que le traitement modifie la valeur du compteur de la boucle.

78

Les Structures de contrle

Chapitre

Les expressions Vi et Vf sont values une fois pour toutes lentre de la boucle. On affecte Cp la valeur de Vi. Tant que Cp est infrieur ou gal Vf on effectuer le traitement puis Cp est incrment de 1.

Remarques
1. Le compteur de la boucle est de type scalaire. 2. Le pas est par dfaut de 1. 3. Si le pas est de (-1), la syntaxe en Pascal devient : For Cp := Vi Downto Vf do 4. La partie Initialisations comporte : i. les initialisations des variables utilises dans le traitement rptitif. ii. un message dont la suite se trouve au niveau du traitement rptitif 5. Le changement de la valeur du compteur est automatique ; le pas est de 1 ou de -1.

II.2.1

Application

a. Application1 Excutez manuellement lalgorithme suivant et dduisez les valeurs finales des variables x, y et i pour chacune des valeurs initiales suivantes de n : 1) n = 5 2) n = 1 3) n = 0 0) 1) 2) 3) DEBUT Algorithme Application1 Ecrire("n = ") Lire(n) x 0 ,y 1 Pour i de 1 n Faire x x+i y y*i Fin POUR 4) Ecrire (x,y,i) 5) FIN Application1

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1 .

79

b. Application2 Un nombre est dit parfait sil est gal la somme de ses diviseurs sauf lui mme. Lalgorithme suivant permet de dterminer si un entier m est parfait. Soit l'algorithme suivant : Dbut Algorithme Parfait Lire (m) S 0 Pour i de 1 m-1 Faire Si m mod i = 0 Alors S Fin Si Fin Pour 4) Si m = S Alors Mess Sinon Mess Fin Si 5) Ecrire (m, Mess) 6) Fin Parfait Questions : 0) 1) 2) 3)

S+i

"est parfait" "n'est pas parfait"

1) Excutez cet algorithme pour m = 6 ; m = 5 et pour m = 8 2) Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap2 . c. Application3 Cherchez puis affichez le nombre de lettres Nl, le nombre de chiffres Nc et le nombre de symboles Ns dune chane de caractres CH saisie au clavier. Spcification du problme Rsultat : Ecrire (Nl, Nc, Ns)

Traitement : Le calcul des valeurs des variables Nl, Nc et Ns sobtient en parcourant la chane CH et en testant la valeur de chaque caractre. Ce parcours est un traitement rptitif avec un nombre ditrations connu et gal au nombre de caractres de la chane CH (le nombre ditrations est gal la longueur de CH). La structure itrative utiliser est POUR .. Faire Pour chaque caractre de CH, on suivra la dmarche suivante : Si le caractre est une lettre alors incrmenter la valeur de NL sinon sil sagit dun chiffre alors incrmenter la valeur de Nc sinon incrmenter la valeur de Ns
80

Les Structures de contrle

Chapitre

2
La phase dinitialisation comporte la remise zro des compteurs Nl, Ncet Ns.

CH = donne Algorithme : 0) DEBUT Algorithme Types_car // Cet algorithme permet de dterminer le nombre de lettres, de chiffres et de symboles dans une chane donne // 1) Ecrire("Donner une chane") Lire(CH) 2) Nl 0 , Nc 0 , Ns 0 3) Pour i de 1 Long(CH) Faire Si (Maj(CH[i]) dans ["A".."Z"]) alors Nl Nl + 1 Sinon Si CH[i] dans ["0".."9"]) alors Nc Nc + 1 Sinon Ns Ns + 1 Fin si Fin si Fin Pour 4) Ecrire(Nl,Nc,Ns) 5) FIN Types_car

Nom CH NI Nc Ns i

Type Chane de caractres Entier Entier Entier Entier

Rle Une variable contenant la chane de caractres Une variable contenant le nombre de lettres dans CH Une variable contenant le nombre de chiffres dans CH Une variable contenant le nombre de symboles dans CH Le compteur de la boucle POUR

81

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap3 . d. Application4

Ecrivez programme qui permet deffectuer la multiplication de deux entiers positifs (nots p et q) donns en utilisant uniquement laddition entire. Spcification du problme Rsultat : Ecrire (Produit)

Traitement : Le calcul du produit sans recours la multiplication nous amne utiliser plusieurs fois laddition. En effet p x q = p + p + p + + p (q fois). Il sagit, donc, dun traitement rptitif avec un nombre de fois connu lavance (q fois). La boucle POUR permet de raliser un tel traitement. p, q sont deux entiers donns. Algorithme : 0) DEBUT Algorithme Produit_somme // Cet algorithme permet de calculer le produit de deux entiers sans effectuer de multiplication. // 1) Ecrire("p = "), Lire(p) 2) Ecrire("q = "), Lire(q) 3) S 0 POUR c de 1 q faire S S+p Fin POUR 4) Ecrire( S) 5) FIN Produit_somme Nom p q S c Type Entier Entier Entier Entier Rle Une variable contenant la valeur du premier entier Une variable contenant la valeur du second entier Une variable contenant le rsultat des sommations Compteur de la boucle POUR

82

Les Structures de contrle

Chapitre

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap4 . e. Application5 Ecrivez un programme Pascal intitul Predsucc permettant de remplir un tableau T par N chiffres et d'afficher tous les lments de T encadrs par leurs prdcesseurs et leurs successeurs. N. B. Le premier lment sera affich s'il est seulement succd par son successeur. Le dernier lment sera affich s'il est prcd par son prdcesseur. Exemple : Pour le tableau T suivant :

2 1

3 2

3 3

5 4

6 5

7 6

2 7

8 8

9 9

8 10

7 12

0 13

Le programme affiche les valeurs 2, 6 Examen pratique dinformatique Mai 2005 Spcification du problme Rsultat : Pred_Succ

Traitement : Il sagit dun problme daffichage des lments du tableau T vrifiant les proprits cites au niveau de lnonc. On distingue trois cas : Cas 1 : Le premier lment du tableau est affich sil est succd par son successeur. Autrement dit T[1] est affich si (T[1] = T[2]-1) Cas 2 : Les lments du tableau sauf le premier et le dernier. Un lment est affich sil est encadr par son prdcesseur et son successeur. Autrement dit T[i] est affich si (T[i] = T[i-1]+1 ) et (T[i] = T[i+1]-1) Cas 3 : Le dernier lment du tableau est affich sil est prcd par son prdcesseur. Autrement dit T[n] est affich si (T[n] = T[n-1] + 1) T est une donne ( Le remplissage du tableau T avec n chiffres est une action rptitive avec un nombre connu de fois (n fois). Il suffit, donc, dutiliser une boucle POUR. n = donne
83

Algorithme : 0) DEBUT Algorithme PRED_SUCC // Cet algorithme permet de dterminer et dafficher les lments dun tableau T qui sont encadrs par leur prdcesseur et leur successeur. // 1) Ecrire("n = ") Lire(n) 2) Pour i de 1 n Faire Lire(T[i]) Fin POUR 3) Si T[1] = T[2]-1 alors Ecrire(T[1]) 4) Pour i de 2 (n-1) FAIRE Si( T[i] = T[i-1]+1) et ( T[i] = T[i+1]-1) alors Ecrire(T[i]) Fin POUR 5) Si T[n] = T[n-1]+1 alors Ecrire(T[n]) 6) FIN PRED_SUCC Codification des objets : Nom Type n T i Entier Tableau Entier

Rle Une variable contenant le nombre dlments du tableau T Une variable de type tableau contenant n chiffres Une variable compteur de la boucle POUR

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap5.

II.3

Les structures de contrle itrative condition darrt


Introduction
Activit
a) b) Quelles sont les structures de contrle itratives condition darrt ? Quelle est la forme gnrale de chacune de ces structures ?

II.3.1

Vous avez vu dans le cours de 2me anne quil existe deux structures de contrle itratives condition darrt. Il sagit de la structure REPETER JUSQU'A et de la structure TANT QUE FAIRE . Ces structures sont utilises lorsquil sagit dun problme rptitif dont on ne connat pas le nombre de rptitions.

84

Les Structures de contrle

Chapitre

2
II.3.2 La structure REPETER JUSQU'A
Activit
On se propose de saisir au clavier la rponse une question laquelle lutilisateur doit rpondre par "O" (Oui) ou "N" (Non). Il est possible dessayer avec une structure conditionnelle. Voyons ce que a donne : 0) Dbut algorithme Choix 1) Ecrire ("Voulez vous tlphoner un ami ? (O/N)" ) 2) Lire (Rep) 3) Si (Rep <> "O") ET (Rep <> "N") Alors Ecrire ("Saisie erronne. Recommencez") Lire (Rep) FinSi 4) Fin choix A premire vue, cest impeccable. Du moins tant que lutilisateur a le bon got de ne se tromper quune seule fois, et dentrer une valeur correcte la deuxime demande. Mais lutilisateur, risque fort tt ou tard de taper autre chose. Ds lors, le programme peut soit planter par une erreur dexcution ou bien sexcuter jusquau bout, mais en produisant des rsultats faux. Il est donc obligatoire que tout programme prvoie ce quon appelle un contrle de saisie pour vrifier que les donnes entres correspondent bien celles attendues par lalgorithme. La boucle la mieux place pour raliser cette action est REPETER JUSQU'A Evidemment, cette boucle est utilise dans dautres contextes de rsolution de problmes. Notez que le nombre de rptitions est inconnu avant le traitement et par consquent, il est impossible dutiliser la boucle que nous avons vu prcdemment savoir la boucle POUR FAIRE

a. Dfinition La structure REPETERJUSQU'A est utilise quand il sagit de rpter un traitement un nombre de fois inconnu lavance et quon est sr que le traitement itratif sexcutera au moins une fois. Le traitement est toujours excut au moins une fois. Ds que la condition darrt devient vraie, la boucle est abandonne et le programme continue en squence. b. Syntaxe La structure REPETER JUSQU'A est reprsente comme suit :
85

Au niveau de lalgorithme
Initialisation (s) REPETER Instruction 1 Instruction 2 . . Instruction n JUSQUA condition(s) darrt

Au niveau de Pascal
---------; ---------; Repeat Instruction 1; Instruction 2; .; .; Instruction n; Until condition(s) darrt;

Remarques
1) La condition darrt est considre comme une condition de sortie car, une fois elle est vrifie, on quitte la boucle sinon on itre encore jusqu sa vrification (sa valeur est gale vrai). 2) La condition darrt peut tre simple ou compose. 3) Les caractristiques de la boucle REPETERJUSQU'A en font une structure adapte pour le contrle de la saisie des donnes. On rpte la saisie jusqu ce que les contraintes spcifies dans lnonc du problme soient respectes. c. Applications Application 1 Excutez manuellement lalgorithme suivant pour chacune des valeurs suivantes de la variable choix : 1) choix = 10 2) choix = 0 3) choix = 1 0) DEBUT Algorithme saisie 1) Rpter Ecrire("Choix = ") Lire(Choix) Jusqu (choix dans [1..3]) 2) Ecrire(Choix) 3) FIN Saisie Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1 .

86

Les Structures de contrle

Chapitre

2
Application 2 Revenons lapplication 3 de la partie Structure conditionnelle choix , qui consiste raliser une application informatique qui saisit une date en introduisant successivement le n du jour, le n du mos et le n de lanne puis afficher cette date en remplaant le n du mois par son nom. Exemple Si n jour =1 , n du mois = 5 et n de lanne =2005 le programme affichera 1 mai 2005. Spcification du problme Rsultat : Ecrire ( jour, mois, an )

Traitement : Le problme consiste transformer le code du mois (mm) en mois en toutes lettres. Puisquil existe douze cas possibles et que le critre de slection est de type entier (en effet la variable mm est un entier dont la valeur doit appartenir lintervalle [1..12]), la structure conditionnelle utiliser est la structure conditionnelle choix. Jusqu maintenant, nous navons pas prvu le fait que le n du mois doit tre un entier de lintervalle [1,12] pour pouvoir le transformer en un nom de mois. Cette contrainte sera vrifie en utilisant la boucle REPETER JUSQU'A La forme gnrale de la structure sera : REPETER mm = donne (" Mois = ") Jusqu (mm dans [1..12]) jour, mois, an = Donnes Algorithme : 0) DEBUT Algorithme date // cet algorithme saisit successivement un n de jour, un n de mois et un n danne puis les affiche en remplaant le n du mois par son quivalent en toute lettre // 1) Ecrire("jj = ") Lire(jour) 2) REPETER Ecrire("mois = ") Lire(mm) Jusqu (mm dans [1..12]) 3) Ecrire("aa = ") Lire(an) 4) Selon mm faire
87

1 : mois 2 : mois 3 : mois 4 : mois 5 : mois 6 : mois 7 : mois 8 : mois 9 : mois 10 : mois 11 : mois 12 : mois

" janvier " " fvrier " " mars " " avril " " mai " " juin " " juillet " " aot " " septembre " " octobre " " novembre " " dcembre "

Fin selon 5) Ecrire("date = ", jour, mois, an) 6) FIN date

Codification des objets : Nom jour mm an mois Type entier entier entier Rle Une contenant le nombre de jour Une variable contenant le numro du mois Une variable contenant la valeur de lanne

Chane de Une variable contenant le nom du mois n mm caractres (janvier pour 1, fvrier pour 2, etc.)

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom App2 . Application 3 Stockez une srie d'lments dans un vecteur de 100 lments au maximum compris entre 1 et 50. Le zro est admis comme fin de saisie. Recherchez ensuite et affichez le minimum et le maximum des nombres entrs.
Bac pratique Session 2005

88

Les Structures de contrle

Chapitre

Spcification du problme Rsultat : Ecrire ( min, max )

Traitement : Pour afficher les valeurs des variables min et max, il suffit de 1- parcourir le tableau quon appelle T et de chercher les valeurs du minimum et du maximum. Cette recherche doit se faire sur tous les lments de T, il sagit donc dun traitement rptitif qui ncessite une structure itrative complte. La variable appel ns reprsente le nombre rel de valeurs saisies (cest une valeur qui sera dtermine la fin de laction de saisie). Pour cp de 2 ns faire Si t[cp] < min alors min t[cp] Si t[cp] > max alors max t[cp] Linitialisation des valeurs des variables min et max T[1] est obligatoire. 2- remplir le tableau T par une srie de valeurs comprises entre 1 et 100, la valeur 0 servira comme fin de saisie. Il sagit aussi dun traitement rptitif condition darrt que nous allons rsoudre laide de la boucle REPETER JUSQU'A ns 0
REPETER REPETER v = donne (" Donner une valeur entre 0 et 50") JUSQUA ( v dans [0..50] ) Si v <> 0 alors ns ns + 1 T[ns] v Fin si JUSQUA ( v =0 )

Algorithme : 0) DEBUT Algorithme Recherche // Cet algorithme dtermine et affiche le minimum et le maximum dun tableau T // 1) ns 0 REPETER REPETER Ecrire (" Donner une valeur entre 0 et 50") Lire (v) JUSQUA ( v dans [0..50] ) Si v <> 0 alors ns ns + 1 T[ns] v Fin si JUSQUA ( v=0 )
89

2) min

T[1] max T[1] Pour cp de 2 ns faire Si t[cp] < min alors min t[cp] Si t[cp] > max alors max t[cp] Fin Pour 3) Ecrire("Minimum = ", min, " Maximum = ", max ) 4) FIN recherche Codification des objets : Nom ns v T min max cp Type 1.100 0..50 Rle Une variable contenant le nombre rel de valeurs saisies Une variable contenant la variable saisie

tableau Une variable tableau pouvant contenir 100 100 entiers valeurs entires 0..50 0..50 1.100 Une variable contenant la valeur minimale Une variable contenant la valeur maximale Une variable compteur de la boucle POUR

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap3 .

Application 4 crivez un programme Pascal intitul Nbr_3, permettant de : - saisir les lments d'un tableau T de n entiers forms chacun de trois chiffres (5 n 20) - afficher les lments du tableau T dont la permutation des chiffres donne la valeur du premier lment du tableau T
Bac pratique Session 2005

90

Les Structures de contrle

Chapitre

Spcification du problme Rsultat : Affichage

Traitement : Pour rsoudre ce problme, on peut prvoir les traitements suivants : 1- La recherche et laffichage des lments de T dont la permutation des chiffres est gale T [1] Ce traitement porte sur tous les lments du tableau T, il sagit donc dutiliser la structure de contrle itrative complte. Pour chaque lment, effectuer les reprsentations possibles et comparer chacune delles la valeur de T [1], puis afficher celle qui sont gales T [1]. 2- Saisir les n lments du tableau T Cette action est aussi classique. La nouveaut rside dans le fait de vrifier que chaque entier saisi est form de trois chiffres. Pour quun entier soit form de trois chiffres, il faut quil appartienne lintervalle [100,999]. 3- Saisir la valeur de n avec 5 n 20 Il suffit dutiliser la boucle REPETER JUSQU'A avec 5 n 20 comme condition darrt. Algorithme : 0) DEBUT Algorithme Nbr_3 1) REPETER Ecrire (" Donner une valeur n entre 5 et 20") Lire (n) JUSQUA ( n dans [5..20] ) 2) Pour cp de 1 n faire REPETER Ecrire (" Donner un entier form de trois chiffres") Lire (T[cp]) JUSQUA ( T[cp] dans [100..999]) Fin Pour

91

3) Pour cp de 1 n Faire u T[cp] MOD 10 d T[cp] MOD 100 DIV 10 c T[cp] DIV 100 r1 u + 10c+ 100d r2 d + 10u+ 100c r3 d + 10c+ 100u r4 c + 10d+ 100u r5 c + 10u+ 100d Si T[1] dans [ T[cp],r1, r2,r3, r4, r5] alors Ecrire (T[cp]) Fin POUR 4) FIN Nbr_3

Codification des objets : Nom n T Cp u d c r1 r2 Type 5..20 Tableau 5..20 0..9 0..9 0..9 Entier Entier Rle le nombre dlments du tableau tableau de n lments compteur de la boucle POUR le chiffre des units le chiffre des dizaines Variable contenant le chiffre des centaines Une reprsentation dun entier Une reprsentation dun entier

92

es Structures de contrle

Chapitre

2
r3 r4 r5 Entier Entier Entier Une reprsentation dun entier Une reprsentation dun entier Une reprsentation dun entier

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap4 .

II.3.3

La structure TANT QUE FAIRE


Activit
1) On se propose de chercher le PGCD (plus grand commun diviseurs) de deux entiers m et n en utilisant un algorithme classique appel lalgorithme de recherche de PGCD par la mthode de la diffrence. Lalgorithme consiste rpter de chercher la diffrence des deux valeurs en valeur absolue et la ranger dans la variable ayant la plus grande valeur jusqu obtenir la mme valeur dans les deux variables.

Pour mieux comprendre la mthode, prenons un exemple. Si m=10 et n=16, PGCD (10,16) = PGCD (10,6) (16-10=6 quon range dans la variable n = PGCD (4,6) qui a la valeur maximale) = PGCD (4,2) = PGCD (2,2) Il sagit tout dabord dun traitement rptitif dont le nombre ditrations est inconnu au pralable. Il est donc impossible dopter pour la structure POUR FAIRE 2) Voyons sil est possible dutiliser la structure REPETER JUSQU'A La solution comportera les tapes de saisie des variables m et n, la recherche du PGCD et enfin laffichage du rsultat. Lalgorithme solution est le suivant :

93

0) 1) 2) 3)

Dbut algorithme PGCD Ecrire ("m = " )Lire (m) Ecrire ("n = " )Lire (n) REPETER Si m > n alors m Sinon n Jusqu (m = n) 4) Ecrire ("PGCD = ", m) 5) Fin PGCD

m-n n-m

3) Excutez cet algorithme pour m=16 et n=10. 4) Excutez le mme algorithme pour m=6 et n=6. Que remarquez- vous ? Dans le cas particulier o les valeurs saisies des variables m et n sont gales, nous sommes amens vers une boucle infinie. Dans ce cas le traitement ne va pas avoir lieu et par consquent le nombre de rptitions est gal zro. Il est donc incorrect dopter aussi pour la structure REPETER JUSQU'A Retenons donc, quil sagit dun traitement rptitif qui peut ne pas avoir lieu. 5) Dans ce cas prcis, la structure itrative utiliser est la structure TANT QUE FAIRE Lalgorithme solution est le suivant : 0) 1) 2) 3) Dbut algorithme PGCD Ecrire ("m = " )Lire (m) Ecrire ("n = " )Lire (n) TANT QUE (m n) FAIRE Si m > n alors m Sinon n Fin TANT QUE 4) Ecrire ("PGCD = ", m) 5) Fin PGCD

m-n n-m

Remarques :
1- Si ds le dpart, m et n ont la mme valeur alors le traitement rptitif naura pas lieu et lexcution passe directement laffichage du rsultat. 2- Ltape 4 permet laffichage du rsultat qui peut tre la valeur de la variable m ou celle de n (m et n tant gales).

94

es Structures de contrle

Chapitre

2
a. Dfinition La structure TANT QUEFAIRE est utilise quand il sagit de rpter un traitement un nombre de fois inconnu lavance et que le traitement itratif peut ne pas sexcuter. Le principe de fonctionnement de cette boucle est simple : Quand le programme atteint la ligne du TANT QUE. Il examine alors la valeur de la condition. Si cette valeur est VRAIE, le programme excute les instructions qui suivent, jusqu ce quil rencontre la ligne FIN TANTQUE. Il retourne ensuite sur la ligne du TANTQUE, procde au mme examen, et ainsi de suite. Le traitement ne sarrte que lorsque la condition prend la valeur FAUSSE. b. Syntaxe La structure TANT QUE FAIRE est reprsente comme suit :

Au niveau de lalgorithme
Initialisation (s) TANT QUE condition(s) FAIRE Instruction 1 Instruction 2 . . Instruction n Fin TANT QUE

Au niveau du Pascal
---------; ---------; WHILLE condition(s) DO Begin Instruction 1; Instruction 2; .; .; Instruction n; End;

Remarques :
1) La condition darrt est considre comme une condition dentre dans la boucle car, une fois quelle nest pas vrifie, on quitte la boucle sinon on itre encore jusqu sa non vrification. 2) La condition dentre dans la boucle peut tre simple ou compose. c. Application Application 1 Excutez manuellement lalgorithme suivant pour chacune des valeurs suivantes de la variable c : 1) c = 7 2) c = 4 3) c = 5
95

0) DEBUT Algorithme choix 1) Lire (c) 2) Tant que (c=5) Faire Si (c MOD 2 = 0) alors Ecrire( 2*c) sinon Ecrire (c*c) Fin si Lire(c) Fin Tant Que 3) FIN Saisie

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom Ap1 . Application 2 On se propose dcrire un algorithme qui permet de saisir une suite dentiers qui se termine par -1 puis de calculer et dafficher la somme de ces valeurs sauf la dernire. Exemple Si la suite saisie est 5, 6, 7, -4, -1 la valeur affiche est 14

Spcification du problme Rsultat : Ecrire ( Somme )

Traitement : Le problme consiste calculer la somme des entiers saisis sauf le dernier qui est connu au pralable et dont la valeur est -1. Il est remarquer que si la liste se limite une seule valeur celle ci sera -1 et par consquent le calcul de la somme ne sera pas ncessaire. On peut dduire que le traitement rptitif peut ne pas avoir lieu et par consquent la boucle utiliser est TANT QUE FAIRE La forme gnrale de la structure sera : Lire (nombre) TANT QUE (nombre -1) FAIRE Somme Somme + nombre Lire (nombre) FIN TANT QUE La variable Somme doit tre initialise zro et une premire lecture (ou une lecture initiale) dune valeur de la variable nombre est obligatoire.

96

Les Structures de contrle

Chapitre

Algorithme : 0) DEBUT Algorithme Compte // cet algorithme saisit une suite dentiers qui se termine par la valeur -1 puis calcule et affiche la somme sauf le dernier // 1) Somme 0 2) Ecrire("nombre = ") Lire(nombre) 3) Tant que (nombre -1) FAIRE Somme Somme + nombre Lire(nombre) Fin Tant Que 4) Ecrire("Somme = ", Somme) 5) FIN Compte Nom Somme nombre Type Entier Entier Rle Une variable contenant la somme des entiers saisis Une variable contenant la valeur dun entier saisi

Mettez votre micro-ordinateur sous tension et, avec laide de lenseignant, traduisez cet algorithme en Pascal et enregistrez le programme source sous le nom App2 .

97

Retenons
1) Les structures de contrles conditionnelles permettent lutilisateur du
programme de choisir entre plusieurs alternatives. Il existe trois structures de ce genre :

Nom

Forme en algorithmique

Forme en Pascal

Conditionnelle simple

Si (condition(s)) If (condition(s)) alors then Traitement1 Traitement1 sinon else Traitement2 Traitement2 ; Fin si

Si (condition1) If (condition1) alors then Traitement1 Traitement1 sinon else Si (condition2) if (condition2) alors then Conditionnelle gnralise Traitement2 Traitement2 sinon else Fin si . . else Traitementn ; Selon (Slecteur) Faire Val1 : Traitement 1 Val2 : Traitement 2 . . . sinon Traitement n Case (Selecteur) of Val1 : Traitement 1 ; Val2 : Traitement 2 ; . . . else Traitement n ;

Conditionnelle choix

Fin selon ;

End ;

98

Retenons
2) Les structures de contrles rptitives
permettent lutilisateur du programme de rpter un traitement un ensemble de fois. Il existe trois structures de ce genre :

Nom

Forme en algorithmique

Forme en Pascal
For c := vi to vf DO

La boucle POUR

POUR c de vi vf FAIRE Begin

< Cette boucle est utilise Traitement si le nombre de rptitions est connu lavance > FIN POUR La boucle REPETER REPETER < Cette boucle est utilise si 1- le nombre de rptiTraitement tions est inconnu lavance Jusqu (condition(s) 2- le traitement rptitif doit tre excut au moins darrt ) une fois > La boucle TANT QUE Cette boucle est utilise si TANT QUE (condition(s)) FAIRE

Traitement ; End;

REPEAT Traitement ; Until (condition(s)) ;

WHILE (Condition(s) DO Begin Traitement ; End ;

1- le nombre de rptitions Traitement est inconnu lavance 2- le traitement rptitif Fin Tant Que peut ne pas tre excut

99

Exercices
A) Structures conditionnelles Exercice 1 :
a) Ecrivez un algorithme intitul MULTIPLE_5 permettant de dterminer et d'afficher si un entier n saisi est un multiple de 5. b) Modifiez ce programme pour vrifier si n est un diviseur de 100. c) Modifiez le programme obtenu en b) pour afficher si n est la fois multiple de 5 et diviseur de 100.

Exercice 2 :
Ecrivez un algorithme intitul AFFICHE_OP permettant d'afficher en toutes lettres les quatre oprateurs arithmthique , Somme,diffrence, produit,quotient .

Exercice 3 :
Ecrivez un algorithme intitul SIGNE permettant d'afficher le signe en toutes lettres dun entier saisi au clavier. Le signe est soit Plus soit Moins .

B) Structures itratives Exercice 1 :


Ecrivez un algorithme intitul K_ppe permettant de dterminer et d'afficher le Kime plus petit lment (1 k N), s'il existe, et lindice de sa premire apparition dans un tableau T de N entiers (N>=2).

Remarques :
Si le Kime plus petit lment ne figure pas dans le tableau T, le programme doit afficher le message suivant : "pas de kime petit lment" Exemple Soit le tableau T suivant :

100

Exercices
5 1
Pour k = 3 Le 3ime plus petit lment est 4 et l'indice de sa premire apparition est 6.

2 2

7 3

2 4

1 5

4 6

9 7

4 8

1 9

1 10

Exercice 2 :
Ecrivez un algorithme intitul Mult_Div, permettant de dterminer et d'afficher tous les diviseurs ainsi de tous les multiples d'un entier p donn, dans une partie d'un tableau T de N entiers donns. Cette partie est dlimite par deux indices Ind_inf et Ind_sup. avec (0 < Ind_inf < Ind_sup N). Exemple

25 1

32 2

43 3

4 4

32 5

72 6

80 7

15 8

24 9

2 10

48 11

56 12

10 13

14 14

Ind_inf Pour Ind_inf = 3, Ind_sup = 11 et p = 8 Lalgorithme affichera : - Les diviseurs de 8 sont : 4 2 - Les multiples de 8 sont : 32 72 80 24 48

Ind_sup

Exercice 3 :
L'une des mthodes de calcul du Plus Petit Commun Multiple (PPCM) de deux entiers positifs a et b, tel que a>b est de trouver le plus petit multiple de a qui est aussi multiple de b. Ecrivez un algorithme qui saisit deux entiers positifs non nuls a et b avec a>b, dtermine et affiche leur PPCM.

101

Exercices
Exercice 4 :
Ecrivez un algorithme intitul chez_la_fourmi permettant de simuler un jeu entre un utilisateur et l'ordinateur rgi par le principe suivant : dix reprises : L'utilisateur choisi entre Pair et Impair. tour de rle, lordinateur et l'utilisateur proposent chacun un chiffre compris entre 1 5. Si la somme des deux chiffres proposs a la mme parit que celle choisie par l'utilisateur, ce dernier marque un point sinon c'est lordinateur qui marque un point. A la fin des dix reprises, si le score de l'utilisateur est suprieur celui de l'ordinateur, alors l'utilisateur sera dclar gagnant, sinon il est perdant.

Exercice 5 :
Rappelons qu'un entier naturel non nul est dit parfait s'il est gal la somme de ses diviseurs sauf lui mme. 0) Dbut Parfait 1) Lire (m) 2) S 0 Pour i de 1 m div 2 Rpter Si m mod i = 0 Alors S S+i Fin Si Fin Pour 3) Mess " n'est pas parfait" Si m = S Alors Mess " est parfait" Fin Si 4) Ecrire (m, Mess) 5) Fin Parfait

Questions
1. Excutez cet algorithme pour m = 6, m=16 et m=32 2. Transformez cet algorithme pour qu'il permette de dterminer et d'afficher tous les nombres parfaits compris entre 1 et 1000.

102

Exercices
Exercice 6:
Ecrivez un algorithme permettant de dterminer et d'afficher la frquence de chaque lment d'un tableau V de N entiers compris entre 0 et 9.

Exercice 7 :
Ecrivez un algorithme intitul Nb_Seq, qui partir dun tableau T de N entiers, affiche toutes les squences strictement croissantes, de ce tableau, ainsi que leur nombre. Pour un tableau T de 15 lments :

1 1

2 2

5 3

3 4

12 5

25 6

13 7

8 8

4 9

7 10

24 11

28 12

32 13

11 14

14 15

Les squences strictement croissantes sont : (1,2,5),(3,12,25),(13),(8),(4,7,24,28,32),(11,14). Le nombre de squences est 6.

Exercice 8 :
Le matricule d'un employ dans une entreprise est compose de trois parties dfinies comme suit: Un entier donn de 4 chiffres, reprsentant le numro d'ordre de l'employ. Un sparateur "-" Une cl calcule selon le principe suivant : si le numro d'ordre de l'employ n'est pas divisible par 97, la cl sera gale au reste de la division entire de ce numro d'ordre par 97, sinon la cl sera gale 97. Exemple Nom Numro dordre M. Hamdi 1574 S. Fourati 2570 R. Snoussi 2619 M. Seddik 1854

Lalgorithme affichera les noms et les matricules sous la forme suivante :

103

Exercices
M. Hamdi a pour matricule 1574-22 S. Fourati a pour matricule 2570-48 R. Snoussi a pour matricule 2619-97 M. Seddik a pour matricule 1854-11 Ecrivez un algorithme, permettant de saisir les noms et les numros d'ordre de N employs dans deux tableaux Tnoms et Tnum, de remplir un tableau Tmat par les numros de matricules des employs et d'afficher les deux tableaux Tnoms et Tmat.

Exercice 9 :

Soit lalgorithme suivant : 0) Dbut Algorithme quoi ? 1) Val 1 2) Pour i de 0 1 Faire Pour j de 0 2 Faire X[i, j] Val Val Val + 1 Fin Pour Fin Pour 3) Pour i de 0 1 Faire Pour j de 0 2 Faire Ecrire X(i, j) Fin Pour Fin Pour 4) Fin Quoi ?

Questions
1) 2) Quel rsultat produira cet algorithme ? Traduisez cet algorithme en Pascal et vrifiez votre rponse.

104

Exercices
Exercice 10 :
Soit lalgorithme suivant : 0) Dbut Algorithme quoi_2 1) Pour k de 0 3 Faire Pour m de 0 1 Faire T[k, m] k+m Fin Pour Fin Pour 2) Pour k de 0 3 Faire Pour m de 0 1 faire Ecrire T[k, m] Fin Pour Fin Pour 3) Fin Quoi_2

Questions
1) Quel rsultat produira cet algorithme ? 2) Traduisez cet algorithme en Pascal et vrifiez votre rponse.

105

Chapitre pitre 3
Les sous programmes

Objectif

Acqurir des habilits de rsolution de problmes par une varit de stratgies.

I. Rappels II. Procdure III. Fonction IV. Applications


Retenons Exercices

Chapitre

Les sous programmes


L'erreur est humaine, mais pardonner est hors des capacits du systme d'exploitation Vous avez vu lanne dernire que dans certaines situations, il est prfrable de subdiviser le problme en sous problmes de difficults moindres dits des modules. Ces modules peuvent tre des fonctions ou des procdures. Dans ce chapitre, on va appliquer cette mthode pour la rsolution de certains problmes.

I. Rappel
Activit 1 :
Lanalyse modulaire permet de dcomposer un problme en modules. 1) Quels sont les types de modules que vous avez utiliss en 2me anne ? 2) Quest ce qui diffrencie une fonction dune procdure ? 3) Deux entiers m et n sont dits amis si et seulement si la somme des diviseurs de m sauf lui mme est gale n et la somme des diviseurs de n sauf lui mme est gale m. Proposez une dcomposition modulaire de ce problme en justifiant le choix du type du module (procdure ou fonction). Spcifiez le programme principal et dressez lalgorithme correspondant. Une procdure est un sous programme qui permet deffectuer des traitements sur des donnes et renvoyer des rsultats au programme appelant. Une fonction est un sous programme qui permet la rsolution dun problme prcis et doit avoir un seul rsultat de type simple (entier, rel, boolen, caractre ou chane). Il sagit dun cas particulier des procdures. Les procdures et les fonctions sont des sortes de sous programmes appeles depuis le programme principal, dune autre procdure ou mme dune autre fonction. Plusieurs modles de dcomposition peuvent tre proposs pour la rsolution de ce problme. En voici une proposition :

107

Ami

Module de saisie : Procdure Saisie

Module de calcul de la somme de diviseurs: Fonction Diviseurs

Spcification du problme Rsultat : Afficher si n et m sont amis ou non.

Traitement : Pour vrifier si n et m sont amis, il suffit de comparer la somme de diviseurs de m (quon va appeler sdm) n et la somme de diviseurs de n (quon appelle aussi sdn) m. Deux cas se prsentent : Si sdm = n et sdn = m alors m et n sont amis Sinon ils ne sont pas amis. Pour le calcul de la somme de diviseurs de n et m, on fera appel la fonction Diviseurs. m et n doivent tre deux entiers strictement positifs, il sagit donc dune saisie contrle. Cette tche a t accorde la procdure Saisie. Algorithme du programme principal : 0) Dbut algorithme Ami // Cet algorithme permet dafficher si deux entiers sont amis ou non // 1) 2) 3) 4) 5) Saisie (n) Saisie (m) Sdn diviseurs(n) Sdm diviseurs(m) Si ((Sdm = n ) et (Sdn = m)) Alors Ecrire(n, et ,m, sont amis) Sinon Ecrire(n, et ,m, ne sont pas amis) Fin si 6) FIN Ami

108

Les Sous Programmes

Chapitre

3
Codification des objets dits globaux : Les objets utiliss par le programme principal et qui peuvent tre utiliss par les diffrents modules sont dits objets globaux (publics). Nom n m Sdm Sdn Type Entier Entier Entier boolen Rle Variable strictement positive. Variable strictement positive. Variable qui fait le cumul des diviseurs de m. Variable qui fait le cumul des diviseurs de n.

II. Les procdures


Activit 2 :
Reprenez lnonc de lactivit 1 et dveloppez la procdure de saisie. 0) Procdure Saisie (VAR x : entier) // Cette procdure permet de saisir un entier strictement positif// 1) Rpter Ecrire (?Donner un entier strictement positif?) Lire(x) Jusqu (x > 0) 2) FIN Saisie

II.1

Dfinition
Une procdure est un sous programme qui permet la rsolution dun problme prcis et qui peut avoir plusieurs rsultats. Lors de lappel dun module, il y aura des changes dinformations entre le module et le programme appelant. Cet change est assur par ce quon appelle des paramtres. N.B. 1- Une procdure peut avoir des variables dfinies par le programme principal, cest ce quon appelle variables globales. Ces variables sont accessibles par tous les modules existants dans ce programme. 2- Une procdure, ou un module dune faon gnrale, peut avoir ses propres variables locales qui seront rinitialises chaque appel ; Ces variables nexistent alors que dans la procdure. 3- Etant un sous programme complet, une procdure peut contenir ses propres procdures et fonctions qui nexistent alors que lorsque la procdure principale est en cours.
109

Les Sous programmes

II.2

Caractristiques

Il existe deux types de paramtres : les paramtres formels (fictifs) et les paramtres effectifs (rels). En effet les paramtres formels sont les paramtres avec les quels on dfinit le module (ils figurent dans len tte de la dclaration de la procdure) et les paramtres effectifs sont ceux qui sont utiliss dans linstruction dappel du module. Par exemple la procdure saisie a t dfinie pour la saisie de nimporte quel entier x strictement positif donc x reprsente un paramtre formel par contre lorsquon la appel ctait une fois pour la saisie de n et une autre fois pour la saisie de m donc m et n sont des paramtres effectifs. Pour appeler une procdure, il suffit dcrire son nom suivi des paramtres effectifs qui se substitueront aux paramtres formels lors de lexcution de la procdure en respectant la syntaxe suivante : Nom-procdure (Peffec1 , Peffec2..) Lors de lappel, il faut respecter le nombre, lordre et les types des paramtres effectifs par rapport aux paramtres formels. En Pascal, un paramtre dune procdure peut tre de type simple ou structurs. Attention nanmoins dclarer des types spcifiques de tableau laide de la clause TYPE car le passage dun tableau en tant que type Array est impossible.

II.3

Modes de passages des paramtres


La substitution des paramtres effectifs aux paramtres formels sappelle passage de paramtres. En effet le passage de paramtres consiste dfinir le mode de transfert de donnes entre le programme appelant et le programme appel. On distingue deux modes de passage de paramtres : 1) Passage par valeur : Dans ce mode de passage le programme appelant assure le transfert dune valeur au programme appel mais si ce paramtre subit une modification de sa valeur dans le programme appel, cette modification ne doit pas tre transmise au programme appelant donc le transfert dans ce mode se fait dune manire unidirectionnelle : Appelant Appel 2) Passage par variable : Dans ce mode de passage, le programme appelant et le programme appel font un change de donnes. En effet, toute modification de la valeur dun paramtre au sein du programme appel doit tre communique au programme appelant, donc le transfert dans ce mode se fait dans les deux sens : Appelant Appel Dans len tte de la procdure, il faut prcder les paramtres formels qui seront transmis par variable par le mot VAR. Exemple le paramtre x qui sera transmis par variable a t prcd par le mot VAR dans len tte de la procdure Saisie.
110

Les Sous programmes

Chapitre

3
II.4

Syntaxe

La dfinition dune procdure est constitue de trois parties : a) Len tte : Cette partie comporte le nom de la procdure suivie de lensemble des paramtres formels qui sont mis entre parenthses. Chaque paramtre sera prcd par son mode de passage et suivi du type qui lui correspond. b) La dclaration : Cette partie sera rserve la dclaration des objets locaux propre la procdure. c) Le corps : qui contient lensemble des instructions de dveloppement de la procdure. En voici la syntaxe algorithmique et en Pascal de la dfinition dune procdure :

Syntaxe algorithmique
0) Procdure Nom-procdure (paramtres formels ) 1) Instruction 1 2) Instruction 2 . . n) Fin Nom-procdure

Syntaxe en Pascal
Procedure Nom-procdure (paramtres formels ) ; {Dclaration des objets locaux} Begin Instruction 1 ; Instruction 2 ; . . End ;

II.5

Applications

a. Application1 Ecrivez un algorithme dune procdure intitule REMPLIR qui permet de remplir un vecteur T_NOM avec les 30 noms des lves dune classe.

111

Les Sous programmes

Rsultat :

Remplir T_NOM

Traitement : Le remplissage du vecteur T_NOM est une action rptitive dont on connat le nombre ditrations ; en effet le traitement sera excut 30 fois. La boucle utiliser est donc POUR FAIRE - la procdure admet un seul paramtre qui est le vecteur T_NOM qui doit tre considr comme paramtre variable puisque les valeurs qui y seront ranges seront utilises ultrieurement par dautres modules ou par le programme principal (pour un affichage, par exemple). Algorithme : 0) Dbut algorithme Procdure Saisie (Var T_NOM : TAB_NOM) // Cet algorithme permet de remplir un tableau de 30 noms // 1) Pour c de 1 30 Faire Ecrire (Donnez un nom) Lire (T_NOM[c]) Fin POUR 2) Fin Saisie Codification des objets locaux : Nom c T_Nom b. Application2 On dispose dun tableau T_MOY comportant les moyennes des lves de lactivit 1. Ecrivez un algorithme dune procdure intitule Excellent qui permet dafficher toutes les moyennes strictement suprieures 15. Rsultat : Afficher_moyenne Type Entier TAB_Nom Rle Compteur de la boucle POUR Tableau contenant les 30 noms

Traitement : - Laffichage des moyennes strictement suprieures 15 se fera en parcourant tous les lments du tableau T_MOY et en testant pour nafficher que les moyennes respectant la condition (T_MOY[c] > 15). Cest une action rptitive dont on connat le nombre ditrations ; en effet le traitement sera excut 30 fois. La boucle utiliser est donc POUR FAIRE - la procdure admet un seul paramtre qui est le vecteur T_MOY qui sera considr comme paramtre valeur puisque les valeurs qui y seront ranges ne vont subir aucun changement.
112

Les Sous programmes

Chapitre

3
Algorithme : 0) Dbut algorithme Procdure Excellent ( T_MOY : TAB_MOY) // Cet algorithme permet dafficher les moyennes de T_MOY strictement suprieures 15 // 1) Pour c de 1 30 Faire Si T_MOY[c] > 15 Alors Ecrire (T_MOY[c]) Fin POUR 2) Fin Excellent Codification des objets locaux : Nom c Nom Entier Rle Compteur de la boucle POUR Tableau contenant les 30 moyennes

T_MOY TAB_MOY c. Application3

On se propose dutiliser les tableaux T_NOM de lactivit 1 et T_MOY de lactivit 2 pour afficher les rsultats des lves de cette classe (nom, moyenne et rang). Ecrire une procdure qui ralise cette tche. Rsultat : Afficher_Elve , Traitement : - Laffichage des rsultats des lves comporte une valeur calculer qui est le rang dun lve. Les deux autres informations afficher qui sont le nom et la moyenne sont deux donnes figurant respectivement dans les tableaux T_NOM et T_MOY. - Pour avoir le rang dun lve donn, il suffit de chercher le nombre dlves qui ont une moyenne strictement suprieure la sienne. Il sagit donc, dun traitement rptitif avec un nombre connu de fois, do le recours la structure POUR FAIRE - La procdure admet deux paramtres qui sont T_NOM et T_MOY qui seront considrs comme paramtre valeur puisque les valeurs qui y sont ranges ne vont subir aucun changement. Algorithme : 0) Dbut algorithme Procdure Afficher ( T_NOM : TAB_NOM ;T_MOY : TAB_MOY) // Cet algorithme permet dafficher les noms, les moyennes et les rangs des 30 lves dune classe // 1) Pour c de 1 30 Faire n 1 Pour d de 1 30 Faire Si T_MOY[d] > T_MOY[c]
113

Alors n Fin Si

n+1

Fin Pour Ecrire (T_NOM[c], T_MOY[c], n) Fin POUR 2) Fin Afficher Codification des objets locaux : Nom c d n Type Entier Entier Entier Rle Compteur de la boucle POUR Compteur de la boucle POUR Variable utilise pour faire le cumul Tableau contenant les 30 noms Tableau contenant les 30 moyennes

T_NOM TAB_NOM T_MOY TAB_MOY

III. Les fonctions


Activit 3 :
Reprenez lnonc de lactivit 1 et dveloppez la fonction Diviseurs. 0) Fonction Diviseurs (k : entier) : entier // Cette fonction permet de renvoyer la somme des diviseurs dun entier strictement positif donn// 1) Sdx 1 Pour i de 2 (x div 2) faire Si (x MOD i = 0) Alors sdx sdx+ i Fin si Fin pour 2) Diviseurs sdx 3) FIN Diviseurs Codification des objets locaux : Nom i Type Entier Rle compteur de la boucle Pour .

114

Les Sous programmes

Chapitre

3
III.1 Dfinition
Une fonction est un sous programme qui permet la rsolution dun problme prcis et doit avoir un seul rsultat de type simple (entier, rel, boolen, caractre ou chane). Il sagit dun cas particulier des procdures. Lappel dune fonction engendre le retour dune valeur quon peut affecter dans une variable ou bien la faire figurer dans une expression arithmtique ou logique ou bien lafficher directement. Exemple lorsquon a appel la fonction Diviseurs pour le calcul de la somme de diviseurs de n, on a affect la valeur quelle a retourn dans la variable sdn : sdn Diviseurs (n)

III.2

Caractristiques
- Pour appeler une fonction, il suffit dcrire son nom suivi des paramtres effectifs qui se substitueront aux paramtres formels lors de lexcution de la fonction en respectant la syntaxe suivante : Nom-fonction (Peffec1 , Peffec2..) - Les paramtres effectifs et les paramtres formels doivent se correspondre de point de vue nombre, ordre et type. - Une fonction possde un type qui est celui de son rsultat. Par exemple la fonction Diviseurs est de type entier. - Tous les paramtres formels dune fonction ont un mode de passage par valeur. - Au niveau de lalgorithme de dfinition dune fonction, il faut veiller ce que le rsultat renvoy par cette fonction sera affect la fonction elle mme et ceci grce linstruction de laffectation suivante : Nom-fonction resultat

III.3

Syntaxe
La dfinition dune fonction est constitue de trois parties :

115

a) Len tte : Cette partie comporte le nom de la fonction suivi de lensemble des paramtres formels qui sont mis entre parenthses. Chaque paramtre sera suivi du type qui lui correspond. Puis le type du rsultat renvoy par cette fonction. b) La dclaration : Cette partie sera rserve la dclaration des objets locaux propre la fonction. c) Le corps : qui contient lensemble des instructions de dveloppement de la fonction. En voici la syntaxe algorithmique et en Pascal de la dfinition dune fonction :

Syntaxe algorithmique
0) Fonction Nom_fonction (paramtres formels ) : type rsultat 1) Instruction 1 2) Instruction 2 . . n-1) Nom-fonction rsultat n) Fin Nom-fonction

Syntaxe en Pascal
Function Nom_fonction (paramtres formels ) : type resultat ; {Dclaration des objets locaux} Begin Instruction 1 ; Instruction 2 ; . . Nom-fonction := Resultat ; End ;

III.4

Applications

a. Application1 Ecrirvez un algorithme dune fonction intitule SOMME10 qui calcule la somme des lments dun vecteur comportant 10 entiers.
116

Les Sous programmes

Chapitre

3
Rsultat : calcul_somme Traitement : - Il sagit dune fonction de type entier qui calcule la somme de 10 nombres contenus dans un tableau. - Pour calculer la somme des 10 lments du vecteur (quon appelle VECT et on admet quil est de type VECT_NB), il suffit de parcourir ce vecteur et de faire le cumul des valeurs. Cette action ncessite une variable locale que nous devons linitialiser 0. - La fonction SOMME admet un seul paramtre valeur VECT Algorithme : 0) Dbut algorithme Fonction SOMME10 ( VECTEUR : VCT_NB) : Entier // Cet algorithme permet denvoyer dans la fonction SOMME10 de type entier la somme des lments du tableau VECTEUR // 1) S 0 2) Pour c de 1 10 Faire S S + VECTEUR[c] Fin Pour SOMME10 S 3) Fin SOMME10

Codification des objets locaux :

Nom c s

Nom Entier Entier

Rle Compteur de la boucle POUR Variable utilise pour faire le cumul

b. Application2 Ecrivez un algorithme dune fonction qui calcule la somme des 50 premiers entiers naturels non nuls. c. Application3 Ecrivez un algorithme dune fonction qui vrifie lexistence dun entier c dans un tableau de n entiers.

117

d. Application4

Ecrivez un algorithme dune fonction qui calcule la moyenne de trois notes de coefficients respectifs 1, 2 et 3.

IV. Applications
IV.1 Application 1
Ecrivez un programme qui permet dafficher tous les entiers de lintervalle [1, 999] dont la somme des chiffres est gale 5. Spcification du problme Rsultat : Afficher les entiers de lintervalle [1, 999] dont la somme de leurs chiffres est gale 5.

Traitement :

Pour afficher les entiers de lintervalle [1, 999] dont la somme de leurs chiffres est gale 5 , on doit utiliser une structure de contrle itrative dfinition complte : i. On parcourt tous les entiers de lintervalle [1, 999] ii. On dissocie chaque fois lentier en cours en centaine, dizaine et unit. Ce traitement de dcomposition sera accord une procdure quon appellera Decompose. iii. On teste si la somme des chiffre de centaine, des dizaines et de lunit est gale 5 dans ce cas on affichera cet entier Donnes : Aucune donne ne sera fournit par lutilisateur.

Algorithme du programme principal: 0) Dbut algorithme chiffre // Cet algorithme permet dafficher tous les entiers de lintervalle [1, 999]dont la somme de leurs chiffres est gale 5 // 1) Pour i de 1 999 faire Decompose (i, c, d, u) Si( c+d+u =5) Alors Ecrire(i) Fin si Fin Pour 2) FIN chiffre

118

Les Sous programmes

Chapitre

3
Codification des objets locaux : Nom i c d u Decompose Type Entier Entier Entier Entier Procdure compteur. Variable qui reprsente le chiffre de centaine. Variable qui reprsente le chiffre de dizaine. Variable qui reprsente le chiffre dunit. Permet la dcomposition dun entier en centaine, dizaine et unit Rle

Spcification de la procdure dcompose Rsultat : Decomposer un entier donn en centaine, dizaine et unit. Traitement : Pour dcomposer un entier n donn en centaine (x), dizaine (y) et unit (z) , on procde comme suit : x n DIV 100 y n MOD 100 DIV 10 z n MOD 10

Algorithme de la procdure dcompose : 0) Procdure Decompose(n : entier ;VAR x,y,z : entier) // Cette procdure permet de dcomposer un entier donn en centaine, dizaine et unit // 1) x n DIV 100 2) y n MOD 100 DIV 10 3) z n MOD 10 4) FIN Dcompose Mettez votre ordinateur sous tension et traduisez cet algorithme en un programme Pascal que vous enregistrez sous le nom Application 1

IV.2

Application 2
Ecrivez un programme qui permet dafficher si le triangle form par trois points A, B et C est quilatral ou non.

119

Spcification du problme Rsultat :

Afficher un message qui dtermine si le triangle est quilatral ou non Traitement : - Pour afficher le message qui indique si le triangle est quilatral ou non, on doit comparer les distances entre les trois points A, B et C . d1 la distance qui spare A de B d2 la distance qui spare A de C d3 la distance qui spare B de C - Si d1= d2 et d2 = d3 alors on affichera le triangle est quilatral sinon on affiche le triangle nest pas quilatral. Laffichage du message sera accord une procdure quon nommera Affiche - Il faut donc calculer d1, d2 et d3 : On fera appel dans ce cas une fonction quon nommera Distance. - Pour pouvoir calculer la distance qui spare deux points il faut que lutilisateur fournisse labscisse et lordonn de chaque point. La procdure qui se chargera de la saisie des coordonnes dun point donn sera nomme Saisie.

Donnes : xa, ya, xb, yb, xc et yc qui sont respectivement les coordonns des points A, B et C Algorithme du programme principal: 0) Dbut algorithme Triangle // Cet algorithme permet dafficher si le triangle form par trois points A, B et C est quilatral ou non // 1) Saisie (xa,ya) 2) Saisie (xb,yb) 3) Saisie (xc,yc) 4) d1 Distance (xa,ya,xb,yb) 5) d2 Distance (xa,ya,xc,yc) 6) d3 Distance (xb,yb,xc,yc) 7) Affiche (d1, d2, d3) 8) FIN Triangle

120

Les Sous programmes

Chapitre

3
Codification des objets locaux : Nom Xa Xb Xc Ya Yb Yc D1 D2 D3 Saisie Distance Affiche Nom Rel Rel Rel Rel Rel Rel Rel Rel Rel Abscisse de A Ordonn de A Abscisse de B Ordonn de B Ordonn de C Ordonn de C Distance qui spare A de B Distance qui spare A de C Distance qui spare B de C Rle

Procdure Permet la saisie des coordonns dun point B de C Fonction Permet de calculer la distance qui spare deux points

Procdure Permet dafficher si le triangle est quilatral ou non

Spcification de la procdure Saisie : Rsultat : saisir les cordonnes dun point donn.

Traitement : le traitement consiste saisir une valeur qui reprsente labscisse dun point et une autre qui reprsente son ordonn Algorithme de la procdure saisie: 0) Procdure Saisie (VAR x, y : rel) // Cette procdure permet de saisir les coordonns dun point// 1) Ecrire(donner labscisse du point :), lire (x) 2) Ecrire(donner lordonn du point :), lire (y) 3) FIN Saisie Spcification de la fonction Distance : Rsultat : calculer la distance qui spare deux points

Traitement : Traitement : Pour calculer la distance qui spare deux points, on applique la formule suivante : D=

(x2 - x1)2 + (y2 - y1)2


121

Algorithme de la fonction Distance : 0) Fonction Distance(x1,y1,x2,y2 :rel) :rel // Cette fonction permet de calculer la distance qui spare deux points donns // 1) Distance SQRT( (SQR(x2-x1) +SQR(y2-y1)) 2) FIN Distance Spcification de la procdure Affiche : Rsultat : Traitement : afficher si le triangle set quilatral ou non

Pour dterminer si un triangle est quilatral ou non il faut comparer les trois distances en effet : , Si d1 =d2=d3 alors on affiche triangle quilatral Sinon on affiche le triangle nest pas quilatral

Algorithme de la procdure Affiche 0) Procdure Affiche(d1,d2,d3 :rel) // Cette procdure permet dafficher si un triangle est quilatral ou non // 1) Si ((d1 = d2) ET (d2 = d3)) Alors Ecrire ( cest un triangle quilatral) Sinon Ecrire (Ce nest pas un triangle quilatral) Fin si 2) FIN Affiche

122

Les Sous programmes

Retenons
Il existe deux types de sous programmes qui sont les fonctions et les procdures. - Une fonction est un module qui permet denvoyer un seul rsultat de type simple - La forme gnrale de len tte dune fonction est la suivante :

NOM_FONCTION (liste des paramtres formels) : TYPE_FONCTION

- Une procdure est un module qui peut avoir plusieurs rsultats. - La forme gnrale de len tte dune procdure est la suivante :

NOM_PROCEDURE (liste des paramtres formels)

123

Exercices
Exercice 1 :
Au cours de l'preuve pratique de la discipline informatique, un enseignant se propose de chercher les pourcentages des notes de n lves. Les intervalles de notes sont : infrieure < 8 comprise entre 8 et 12 comprise entre 12 et 16 suprieure 16 Travail demand 1- Spcifiez et divisez ce problme en modules. 2- Proposez une spcification pour chaque module. 3- En dduire un algorithme pour chaque module ainsi que l'algorithme du problme principal.

Exercice 2 :
Soient les suites U et W dfinies par : Uo = A U1=B Un = ( Un-1 + Un-2)/2 Wo=A; Wn = Un - Wn-1 On veut crire un programme qui permet de calculer la suite W pour un entier n donne avec n<100. Travail demand : 1) Dcomposez ce problme en modules. 2) Spcifiez chaque module. 3) Donnez lalgorithme du programme principal.

A et B sont deux entiers donns.

124

Exercices
Exercice 3 :
On se propose de simuler le jeu suivant : Une personne propose un nombre rel quelconque qui sera mis dans un tableau P de taille maximale 20, contenant initialement n propositions ordonnes dans lordre croissant. La personne gagnante est celle ayant le nombre le plus proche dun nombre X donn (la plus petite diffrence en valeur absolue). On vous demande de saisir chaque nouvelle proposition tout en gardant lordre croissant des propositions, (la saisie des propositions se termine lorsque le tableau P sera rempli) et dafficher les numros des personnes gagnantes. Exemple : Etat initial du tableau P

-45 -12 -7

-5

-1

45 50 54 56 60 60 80 89 90 91 95

1re proposition ajouter : 25 on aura

-45 -12 -7

-5

-1

25 45 50 54 56 60 60 80 89 90 91 95

2me proposition ajouter : -50 on aura

-50 -45 -12 -7

-5

-1

25 45 50 54 56 60 60 80 89 90 91 95

3me proposition ajouter : 95 on aura

-50 -45 -12 -7

-5

-1

25 45 50 54 56 60 60 80 89 90 91 95

X=55 Les numros des personnes gagnantes sont :11 et 12 qui correspondent 54, 56

125

Exercices
Travail demand : 1) Dcomposez ce problme en modules. 2) Spcifiez chaque module 3) Donnez lalgorithme du programme principal

Exercice 4 :
Ecrivez les modules (les procdures ou les fonctions) effectuant chacun les traitements dcrits ci-dessous. Utilisez systmatiquement des paramtres. Dans chaque module, cherchez rutiliser les procdures ou les fonctions dj crites prcdemment. Inclure un programme principal pour en tester le fonctionnement. Soient les dclarations Constante n = 10 Type vecteur = Tableau de 10 rels Variables A, b, c : vecteur V : boolen 1/ Lecture dun entier Ecrivez une procdure nomme LECTURE qui lit un entier n tel que 2 n 20. 2/ Remplir un tableau T Ecrivez une procdure intitule REMPLIR, qui remplit un tableau T par n rels. 3/ Somme Ecrivez une fonction nomme SOMME qui calcule la somme des lments du tableau T. 4/ Extremums Ecrivez une procdure nomme EXTREM, qui dtermine la plus petite valeur (min) et la plus grande valeur (max) du tableau T. 5/ Normalisation Pour normaliser un tableau il faut remplacer les Ti par (Ti min) / (max min) Ecrivez une procdure nomme NORMALISATION, qui ralise cette tche. 6/ programme principal En utilisant les procdures et la fonction prcdentes, crivez un programme principal nomm TEST, qui affiche le tableau normalis.

126

Exercices
Exercice 5 :
On se propose d'crire un programme qui saisit un entier naturel n (100>n>20). Cet entier n dsigne le nombre d'tudiants d'une classe. On se propose de saisir pour chaque tudiant, le nom, le prnom, la date de naissance, cinq notes d'examens et leur moyenne pondre par des coefficients. On veut dterminer et afficher la plus grande moyenne permettant de faire passer au moins 75% des candidats, la liste correspondante des candidats admis, la moyenne du plus jeune tudiant s'il est admis et la moyenne du plus g s'il est admis aussi.

Questions
1) 2) 3) 4) Dfinissez les structures de donnes adquates ce problme. Spcifiez ce problme en le dcomposant en modules. Spcifiez chacun de ces modules. En dduire lalgorithme de rsolution relatif chacun de ces modules ainsi que celui du programme principal.

127

Chapitre pitre 4
Les algorithmes de tri et de recherche

Objectif

Acqurir des habilits de rsolution de problmes travers l'apprentissage des algorithmes de tri et de recherche.

I. Tri dun tableau II. Recherche d'un lment dans un tableau


Retenons Exercices

Lecture

Chapitre

Les algorithmes de tri et de recherche


Les premiers 90% du code prennent les premiers 10% du temps de dveloppement. Les 10% restants prennent les autres 90% du temps de dveloppement
Tom CARGILL

Dans ce chapitre, nous allons manipuler des algorithmes qui portent sur deux traitements trs utiles en informatique qui sont le tri et la recherche. Nous allons dcouvrir trois mthodes de tri savoir le tri par slction, le tri bulles et le tri par insertion. Les mthodes de recherche squentielle et diachotomique seront galement abordes.

I. Le tri dun tableau


Activit :
Soit un tableau T n entiers avec 5 n 25. Ecrire une analyse, un algorithme puis en dduire un programme qui permet de trier les lments du tableau dans l'ordre croissant.

I.1

Dfinition
Si on dfinit le mot tri selon le dictionnaire, on trouve qu'il s'agit de l'opration consistant " rpartir en plusieurs classes selon certains critres un ensemble d'lments . En informatique, un algorithme de tri permet dorganiser une collection dobjets selon un ordre dtermin. Les objets trier font partie dun ensemble muni dune relation dordre (de manire gnrale un ordre total). On peut parler par exemple, de trier n entiers dans l'ordre croissant, ou n noms dans l'ordre alphabtique dcroissant. Dans le domaine de linformatique, il existe plusieurs algorithmes de tri. Dans la suite de ce chapitre nous allons dcouvrir trois algorithmes les plus utiliss dans le traitement de tri. Il sagit des algorithmes de tri : - par slection - bulles - par insertion. Pour chaque mthode, nous prsentons : - son principe - une illustration travers un exemple - la spcification du problme : dcomposition en modules, analyse de chaque module et dduction des algorithmes

129

I.2

Les mthodes de tri

I.2.1 Tri

par slection

I.2.1.1 Principe
Le principe du tri par slection consiste : 1- dterminer le plus petit lment de l'lment (ou le plus grand) 2- le placer sa position finale (c'est--dire en dernire ou en premire position du tableau) 3- rechercher le second plus grand lment (ou le second plus petit lment) 4- le placer sa position finale (c'est--dire en avant-dernire ou en seconde position) 5- rpter ce traitement jusqu ce que le tableau soit tri. N.B. Le dplacement dun lment sa position finale peut faire appel une procdure de permutation.

I.2.1.2 Exemple
On se propose dutiliser la mthode du tri par slection pour trier un tableau T selon l'ordre dcroissant. Considrons le tableau T contenant les 7 lments suivants :

T=

14 1

2 2

47 3

10 4

18 5

13 6

5 7

Etape 1 - Cherchez la valeur maximale dans T(1 est 3. - Permutez cette case avec la case n1 Rsultat :

7) : Cette valeur est 47 et son indice

T=

47 1

2 2

14 3

10 4

18 5

13 6

5 7

130

Les algotithmes de tri et de recherche

Chapitre

4
Etape 2 - Cherchez la valeur maximale dans T(2 est 5. - Permutez cette case avec la case n2 Rsultat : 7) : Cette valeur est 18 et son indice

T=

47 1

18 2

14 3

10 4

2 5

13 6

5 7

Remarques :
Le tableau comporte une partie trie compose des deux premiers lments et une partie non encore trie qui comporte le reste des lments de T.

T=

47 1

18 2

14 3

10 4

2 5

13 6

5 7

Partie trie

Partie non encore trie

Etape 3 - Cherchez la valeur maximale dans T(3 7) : Cette valeur tant 14 et son indice est 3. - Puisque la valeur maximale correspond la premire case de la partie non trie du tableau T, vous navez pas besoin de raliser laction de permutation. Rsultat :

T=

47 1

18 2

14 3

10 4

2 5

13 6

5 7

Partie trie

Partie non trie

Etape 4 - Cherchez la valeur maximale dans T(4 est 6. - Permutez cette case avec la case n4 Rsultat :
131

7) : Cette valeur tant 13 et son indice

T=

47 1

18 2

14 3

13 4

2 5

10 6

5 7

Partie trie Etape 5 - Cherchez la valeur maximale dans T(5 est 6. - Permutez cette case avec la case n5 Rsultat :

Partie non trie 7) : Cette valeur est 10 et son indice

T=

47 1

18 2

14 3

13 4

10 5

2 6

5 7

Partie trie Etape 6 - Cherchez la valeur maximale dans T(6 est 7. - Permutez cette case avec la case n6 Rsultat :

Partie non trie

7) : Cette valeur est 5 et son indice

T=

47 1

18 2

14 3

13 4

10 5

5 6

2 7

Remarques :
Nous navons pas besoin de traiter le dernier lment du tableau T, puisque si les 6 premiers lments sont ordonns alors automatiquement le dernier sera le plus petit et par consquent il se trouve sa bonne position.

I.2.1.3 Spcification du problme


On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

132

Les algotithmes de tri et de recherche

Chapitre

Tri d'un tableau

Saisir n Procdure saisie

Remplir T Procdure remplir

Trier T Procdure trier

Afficher T Procdure afficher

Max Fonction Max

Permuter Procdure Permuter

Dcomposition modulaire

Spcification du programme principal Rsultat : afficher le tableau tri

Traitement : - L'affichage du tableau tri est la tche de la procdure Afficher - Nous devons donc trier le tableau en faisant appel la procdure Trier. Ce module fera appel deux modules qui sont : - La fonction Max qui retourne lindice du plus grand lment du tableau - La procdure Permuter qui ,dans le besoin, ralisera laction de permutation. - Pour pouvoir trier le tableau, nous devons tout d'abord le remplir ce qui a t accord la procdure Remplir - Pour remplir le tableau, nous avons besoin de connatre le nombre d'lments saisir et ceci est la tche de la procdure Saisir.

133

Algorithme du programme principal 0) 1) 2) 3) 4) 5) Dbut tri_Sel saisir (n) remplir (t,n) trier (t,n) afficher (t,n) fin tri_Sel

Dans ce qui suit, nous allons dtailler la spcification de la procdure trier. Les autres modules ont t dj traits dans le cours. Spcification de la procdure Trier Rsultat : Trier le tableau T

Traitement : A laide de lalgorithme formel de la mthode du tri par slection et en excutant manuellement lexemple, nous pouvons dduire ce qui suit : - Il sagit dun traitement rptitif jusqu lavant dernier lment du tableau. Nous ferons donc appel la boucle Pour. - Pour chaque lment, nous allons prvoir les deux actions que nous avons excutes au niveau de lexemple savoir : Action 1 : chercher lindice du miaximum Action 2 : si lindice du maximum est diffrent de celui de llment en cours alors prvoir une permutation. Nous avons dit au niveau du programme principal que ce module fera appel deux modules qui sont : - La fonction MAX qui retourne lindice du plus grand lment du tableau. - La procdure Permuter qui en cas de besoin ralisera une action de permutation. Il est facile maintenant de dfinir les paramtres de cette procdure qui sont : - le tableau T - lentier n qui reprsente le nombre dlments de T. Algorithme de la procdure Trier 0) Dbut Procdure trier (VAR T :Table ; n :entier) 1) Pour c de 1 (n-1) Faire M Max (T,c,n) Si (M c) Alors Permuter (c,M,T) Fin Pour 2) Fin Trier
134

Les algotithmes de tri et de recherche

Chapitre

4
I.2.2 Tri

bulles

I.2.2.1 Principe
Le tri bulles ou le tri par propagation est un algorithme de tri trs critiqu cause de sa lenteur au niveau de lexcution. Il consiste faire remonter le plus grand lment (comme une bulle dair remonte la surface) en comparant les lments successifs. - comparer le 1er et le 2me lment et les changer (ou permuter) sils sont dsordonns (tenir compte de cette action) - Refaire laction prcdente jusqu lavant dernire place - Refaire les deux actions prcdentes jusqu ne pas faire dchanges au dernier passage.

I.2.2.2 Exemple
On se propose dutiliser la mthode de tri bulles pour trier un tableau T selon l'ordre croissant. Considrons le tableau T contenant les 7 lments suivants :

T=

14 1

2 2

47 3

10 4

18 5

13 6

5 7

Soit une variable boolenne permut qu'on initialise faux et qui devient vrai chaque fois que nous ralisons une permutation.

Faux
permut Passage 1 - On compare 14 et 2. Puisque 14>2, on permute 14 et 2 et on met vrai dans la variable permut.

T=

2 1

14 2

47 3

10 4

18 5

13 6

5 7

Vrai
permut reste inchange

- On compare 14 et 47. Puisque 14<47, on ne fait rien.

T=

2 1

14 2

47 3

10 4

18 5

13 6

5 7

Vrai
permut

- On compare 47 et 10. Puisque 47>10, on permute 47 et 10 et on met vrai dans la variable permut.

135

T=

2 1

14 2

10 3

47 4

18 5

13 6

5 7

Vrai
permut

- On compare 47 et 18. Puisque 47>18, on permute 47 et 18 et on met vrai dans la variable permut

T=

2 1

14 2

10 3

18 4

47 5

13 6

5 7

Vrai
permut

- On compare 47 et 13. Puisque 47>13, on permute 47 et 13 et on met vrai dans la variable permut 2 1 14 2 10 3 18 4 13 5 47 6 5 7

T=

Vrai
permut

- On compare 47 et 5. Puisque 47>5, on permute 47 et 5 et on met vrai dans la variable permut

T=

2 1

14 2

10 3

18 4

13 5

5 6

47 7

Vrai
permut

Puisqu'on a atteint la fin du tableau et la variable permut a comme valeur vrai alors on recommence un nouveau passage jusqu ce qu'on fasse un passage complet du tableau sans effectuer aucune permutation.

Remarques :
1- Sur votre cahier, refaites les autres passages jusqu avoir un tableau tri. 2- Combien faut-il de passages pour trier ce tableau ?

I.2.2.3 Rsolution du problme :


On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

136

Les algotithmes de tri et de recherche

Chapitre

4
Tri d'un tableau

Saisir n Procdure saisie

Remplir T Procdure remplir

Trier T Procdure trier

Afficher T Procdure afficher

Dcomposition modulaire
Spcification du programme principal : Rsultat : afficher le tableau tri

Traitement : - L'affichage du tableau tri est la tche de la procdure afficher. - On doit donc trier le tableau ce qui sera la tche de la procdure trier. - Pour pouvoir trier le tableau, on doit tout d'abord le remplir ce qui a t accord la procdure remplir. - Pour remplir le tableau, on doit savoir le nombre d'lments mettre dedans ce qui est la tche de la procdure saisir. Algorithme du programme principal : 0) 1) 2) 3) 4) 5) Nom Saisir Remplir Trier Afficher Dbut tri_Bulles Saisir (n) Remplir (t,n) Trier (t,n) Afficher (t,n) Fin tri_Bulles Type Procdure " " " Rle Permet de saisir la taille du tableau Permet de remplir le tableau Permet de trier le tableau Permet d'afficher le tableau

Dans ce qui suit, nous allons dtailler la spcification de la procdure trier. Les autres modules ont t dj traits dans le cours. Spcification de la procdure Trier Rsultat = Trier le tableau T

137

Traitement : A laide de lalgorithme formel de la mthode de tri bulles et en excutant manuellement lexemple, nous pouvons dduire ce qui suit : - Il sagit dun traitement rptitif jusqu ce que la valeur de la variable permut reste faux. La structure rptitive adquate est REPETER jusqu (permut)=faux, cest ce que nous avons appel un passage. - Un passage nest rien dautre quun parcours du tableau ; il sagit donc dun traitement rptitif avec un nombre fini de comparaisons. On fera donc appel la boucle POUR. Pour chaque valeur du compteur de cette boucle, nous devons prvoir le traitement suivant : - Comparer deux lments conscutifs, sils ne sont pas ordonns alors prvoir la permutation de leurs valeurs. Il est facile maintenant de dfinir les paramtres de cette procdure qui sont : - le tableau T - lentier n qui reprsente le nombre dlments de T. Algorithme de la procdure Trier 0) Dbut Procdure Trier (n : entier ; VAR T :Table) 1) Rpter Permut Faux i 1 Pour c de i n-1 Faire Si T[c] > T[c+1] alors Permuter (c,T) Permut Vrai Fin si Fin Pour i i+1 Jusqu (permut = vrai) 2) fin Trier Nom Permut i c T.D.O. locaux Type boolen entier " Compteur " Rle

I.2.3 Tri

par insertion

I.2.3.1 Principe
Le tri par insertion est le tri le plus efficace sur des listes de petite taille. Cest pourquoi il est utilis par dautres mthodes de tri. Le principe de ce tri est simple : cest le tri que toute personne utilise quand elle a des dossiers classer. On prend un dossier et on le met sa place parmi les dossiers dj tris. Puis on recommence avec le dossier suivant.
138

Les algotithmes de tri et de recherche

Chapitre

4
Le principe gnral est le suivant : - Considrer que les (i-1) premiers lments du tableau sont tris et placer le ime lment sa place parmi les (i-1) dj tris - Rpter cette action jusqu' atteindre la fin de la liste. Laction dinsertion se traduit par : - Utiliser une variable intermdiaire tmp pour conserver la valeur insrer, - Dplacer les lments tab[i-1],tab[i-2],... vers la droite tant que leur valeur est suprieure celle de tmp. - Affecter alors l'emplacement dans le tableau laiss libre par ce dcalage la valeur de tmp.

I.2.3.2 Exemple
On se propose dutiliser la mthode de tri par insertion pour trier un tableau T selon l'ordre dcroissant. Considrons le tableau T contenant les 7 lments suivants :

T=

2 1

14 2

4 3

3 4

18 5

13 6

5 7

On commence par llment n2 puisque si le tableau contient un seul lment, il est considr comme tri. Etape 1 - On cherche la position dinsertion de llment n2 dans la premire partie du tableau T avec le souci de la garder trie. Puisque 14>2, donc les deux premiers lments sont dj en ordre.

T=

2 1

14 2

4 3

3 4

18 5

13 6

5 7

Etape 2 - On cherche la position dinsertion de llment n3 dans la premire partie du tableau T avec le souci de la garder trie. On affecte TEMP la valeur de llment n3 On dcale dun cran droite llment n2, jusqu avoir un lment infrieur 4 Affecter la dernire case dcale la valeur de tmp

T=

2 1

4 2

14 3

3 4

18 5

13 6

5 7

4 tmp

139

Etape 3 - On cherche la position dinsertion de llment n4 dans la premire partie du tableau T avec le souci de la garder trie. On affecte TEMP la valeur de llment n4 On dcale dun cran droite llment n3, jusqu avoir un lment infrieur 3 Affecter la dernire case dcale la valeur de tmp

T=

2 1

3 2

4 3

14 4

18 5

13 6

5 7

3 tmp

Activit :
1- Sur votre cahier, continuez les autres tapes jusqu avoir un tableau tri. 2- Combien faut-il dtapes pour trier ce tableau ? 3- Pouvez-vous donner une rponse dans le cas gnral en fonction de n (n tant le nombre dlments du tableau) ?

I.2.3.3 Rsolution du problme :


On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

Tri d'un tableau

Saisir n Procdure saisie

Remplir T Procdure remplir

Trier T Procdure trier

Afficher T Procdure afficher Dcaler Procdure dcaler

Dcomposition modulaire
140

Les algotithmes de tri et de recherche

Chapitre

4
Spcification du programme principal : Rsultat : afficher le tableau tri

Traitement : - L'affichage du tableau tri est la tche de la procdure afficher. - On doit donc trier le tableau ce qui sera la tche de la procdure trier - Pour pouvoir trier le tableau, on doit tout d'abord le remplir ce qui a t accord la procdure remplir - Pour remplir le tableau, on doit savoir le nombre d'lments mettre dedans et ceci est la tche de la procdure saisir. Algorithme du programme principal : 0) 1) 2) 3) 4) 5) Dbut tri_INS Saisir (n) Remplir (t,n) Trier (t,n) Afficher (t,n) Fin tri_INS

Dans ce qui suit, nous allons dtailler la spcification de la procdure trier. Les autres modules ont t dj traits dans le cours. Spcification de la procdure Trier Rsultat = Trier le tableau T Traitement : A laide de lalgorithme formel de la mthode de tri par insertion et en excutant manuellement lexemple, nous pouvons dduire ce qui suit : - Il sagit dun traitement rptitif jusquau parcours de tous les lments du tableau. La structure rptitive adquate est la boucle POUR avec comme forme : Pour c de 2 n Faire Remarquons que la valeur initiale du compteur est de 2 - Pour chaque valeur du compteur, on ralise les actions suivantes : - Ranger la valeur de T[c] dans la variable tmp - Dcaler dun cran vers la droite les valeurs de t[c-1], T[c-2], etc. jusqu arriver une valeur qui est infrieure T[c]. La procdure DECALER permettra de raliser cette action. - Affecter au dernier lment dcal la valeur de tmp Il est facile maintenant de dfinir les paramtres de cette procdure qui sont : - le tableau T - lentier n qui reprsente le nombre dlments de T.
141

Algorithme de la procdure Trier 0) Dbut Procdure trier (n : entier ; VAR T :Table) 1) Pour c de 2 n Faire tmp T[c] DECALER (T, c-1,p) T[p] tmp Fin Pour 2) Fin Trier

II.Recherche dun lment dans un tableau


II.1 Introduction
La recherche dun lment dans un tableau ou dans une liste de valeurs est un traitement trs utilis en informatique. Dans cette partie, nous allons tudier deux mthodes de recherche qui sont : - la recherche squentielle qui consiste parcourir une liste de valeurs jusqu trouver la valeur cherche ou atteindre la fin de la liste. On examine successivement les lments de la liste et on regarde si on trouve llment recherch. - La recherche dichotomique qui consiste chercher en subdivisant la srie ordonne en deux parties gales et vrifier dans quelle partie figurerait la valeur recherche, puis ritrer ce processus.

II.2

La recherche squentielle
Activit :

Ecrivez une analyse et dduisez un algorithme dune fonction boolenne intitule RECHERCHE qui permet de vrifier lexistence dun entier m dans un tableau comportant n entiers.

Spcification de la fonction RECHERCHE : Rsultat : chercher lexistence

Traitement : a) Initialiser I O. b) Incrmenter I. c) Rpter l'instruction jusqu' trouver l'lment cherch ou atteindre la fin du tableau.
142

Les algotithmes de tri et de recherche

Chapitre

4
- le tableau T et le nombre dentiers n quil comporte - lentier m objet de la recherche Algorithme de la fonction RECHERCHE : 0) Dbut Fonction RECHERCHE (t : Tab ; n,m : entier) : Boolen 1) c 0 Rpter c c+1 Jusqu (T[c]=m) ou (c=n) 2) Si T[c]=m alors RECHERCHE Sinon RECHERCHE Fin si 3) Fin RECHERCHE Faux Vrai

II.2.1 Dfinition
La recherche squentielle est un algorithme qui permet de vrifier lexistence dun lment dans une srie dlments. Cette mthode consiste examiner les lments dune liste un par un jusqu trouver la valeur recherche ou atteindre la fin de la srie. Le module qui permet de raliser cette recherche est de type boolen. La structure algorithmique utilise est une structure rptitive condition darrt.

Remarque :
Si llment recherch figure la fin de la liste, tous les lments qui le prcdent seront examins avant datteindre la valeur recherche.

II.2.2 Structure gnrale


{Initialisation} Rpter Incrmentation du compteur Traitement Jusqu (condition(s) darrt)

143

II.3

Recherche dichotomique
Activit :

Devinez un nombre secret compris entre 0 et 100. On suppose que le nombre choisi est 35 Pour trouver ce nombre le plus rapidement possible, nous pouvons utiliser la dmarche suivante : est-ce que le nombre est plus grand que 50 ? (100 divis par 2) non est-ce que le nombre est plus grand que 25 ? ((0 + 50) / 2) oui est-ce que le nombre est plus grand que 38 ? ((50 + 25 + 1) / 2) non On ritre les questions jusqu' trouver 35. Par cette mthode itrative, on est sr de trouver beaucoup plus rapidement le nombre qu'en posant des questions du type est-ce que le nombre est gal 48 ? .

II.3.1 Dfinition

En algorithmique, la dichotomie (du grec couper en deux ) est un processus itratif o chaque tape l'espace de recherche est restreint l'une de deux parties. Notons tout dabord que cette mthode de recherche ne peut tre applique que si la liste objet de la recherche est trie. Le choix de l'une des deux parties dans laquelle se trouve la solution est le rsultat de lvaluation dun test. A chaque valuation du test, on coupera l'espace de recherche en deux parties de mme taille ( un lment prs) de part et d'autre de l'lment mdian. La recherche dichotomique est plus rapide que la recherche squentielle, mais il faut toujours se rappeler que cette technique ne peut tre utilise quavec une srie de donnes dj trie. La dichotomie peut tre vue comme une variante simplifie de la stratgie plus gnrale diviser pour rgner (informatique) applique au cas particulier de la recherche itrative d'une solution, o le traitement des sous-espaces exclus de la recherche et sa recombinaison peuvent tre court-circuits.

144

Les algotithmes de tri et de recherche

Chapitre

4
II.3.2 Structure gnrale
{Initialisation} Rpter Tester la position de llment cherch et changer les bornes de lintervalle Jusqu (condition darrt) N.B. La condition darrt comporte : un test pour vrifier si llment cherch est gal llment du milieu de lintervalle un test pour vrifier si la borne gauche de lintervalle devient suprieure la borne droite.

II.3.3 Application
Ecrivez une analyse puis un algorithme dune fonction intitule RECHERCHE qui utilise la technique de la recherche dichotomique pour vrifier lexistence dun entier m dans un tableau VECT contenant n entiers. Spcification de la fonction RECHERCHE : Rsultat : chercher lexistence

Traitement : - Chercher lexistence de m dans le tableau VECT de n entiers est un traitement rptitif qui se fait laide de la boucle rptitive condition darrt REPETER Jusqu . La condition darrt dexcution de la boucle est compose, en effet le traitement sarrte quand on trouve llment m dans le tableau VECT ou bien lorsque la borne gauche de lintervalle devient suprieure la borne droite. - les paramtres de cette fonction sont : - le tableau VECT et le nombre dentiers n quil comporte - lentier m objet de la recherche Algorithme de la fonction RECHERCHE : 0) Dbut Fonction RECHERCHE (VECT : Tab ; n,m : entier) : Boolen 1) G 1 D n 2) Rpter i (G+D) div 2 Si m < VECT[i] alors D i-1 Sinon G i+1 Fin si Jusqu ( m=VECT[i] ) ou (G > D) 3) Si m=VECT[i] alors RECHERCHE Vrai sinon RECHERCHE Faux Fin si 4) Fin RECHERCHE
145

Retenons
1- En informatique, un algorithme de tri est un algorithme qui permet dorganiser une collection dobjets selon un ordre dtermin. a) Le tri par slection qui consiste : 1- slectionner le plus petit (ou le plus grand) lment du tableau 2- le ranger dans sa position 3- avancer dun lment 4- Ritrer les tapes 1, 2 et 3 autant de fois que dlments du tableau moins1. b) Le tri bulles qui consiste : 1- Comparer tous les paires successives dlments du tableau et les ordonner deux deux (via une permutation) : il sagit dun parcours. 2- Rpter ltape prcdente jusqu faire un parcours sans permutation c) Le tri par insertion qui consiste : 1- Considrer que les (i-1) premiers lments de la liste sont tris et placer le ime lment sa place parmi les (i-1) dj tris 2- Rpter cette action jusqu' atteindre la fin de la liste.

RECHERCHE

TRI

2- La recherche dans une liste dlments consiste rechercher la position dun lment y apparaissant ventuellement. Il existe deux mthodes de recherche. a) La mthode la plus rudimentaire consiste passer tous les lments de la liste en revue en commenant par le premier et en sarrtant lorsque llment est trouv ou lorsque le dernier lment est atteint : il sagit dune recherche squentielle. b) La recherche dichotomique est un processus itratif applicable dans le cas o les donnes sont au pralable tris. A chaque tape l'espace de recherche est restreint l'une de deux parties.

146

Exercices
Pour chacun des exercices suivants, on demande de : 1234Dcomposer ce problme en modules. Analyser chaque module ainsi que le programme principal. Dduire un algorithme pour chaque module propos. Traduire la solution en Pascal.

Exercice 1 :
On se propose dutiliser lalgorithme de tri par slection pour trier un tableau de 20 chanes de caractres.

Exercice 2 :
Soit le tableau suivant :

VECT

-5 1

8 2

0 3

4 4

-4 5

-2 6

8 7

On se propose de chercher lexistence dans le tableau VECT dun entier m saisi par lutilisateur. On demande dappliquer les mthodes suivantes : a) La mthode de recherche squentielle b) La mthode de recherche dichotomique : utiliser la mthode de tri par insertion pour trier le tableau VECT.

Exercice 3 :
On dispose dun tableau ABONNE de noms tri selon l'ordre alphabtique (comme lannuaire des PTT) ainsi quun tableau TEL de numros de tlphone (des entiers de 8 chiffres). Les tableaux ABONNE et TEL contiennent 50 donnes chacune. Chaque lment d'indice i de ABONNE correspond l'lment d'indice i de TEL. On se propose de chercher lexistence de labonn Aziz Azizi dans le tableau ABONNE et dans laffirmative afficher son numro de tlphone. Dfinir les structures de donnes utilises.

Exercice 4 :
Soit le tableau suivant :

ALPHA

A 1

C 2

R 3

Y 4

T 5

G 6

I 7

J 8

O 9

N 10

P 11

F 12

E 13

147

Exercices
On se propose de chercher lexistence dans le tableau ALPHA dune lettre l saisi par lutilisateur. On demande dappliquer les mthodes suivantes : a) La mthode de recherche squentielle b) La mthode de recherche dichotomique : utiliser la mthode de tri bulles pour trier le tableau ALPHA.

Exercice 5 :
Le tri comptage est un algorithme de tri s'appliquant des valeurs entires. On suppose qu'on dispose d'un tableau MOYENNE compos de 100 entiers entre 0 et 20 (bornes comprises). Le procd du tri par comptage est le suivant : - on compte le nombre de 0, le nombre de 1, ..., le nombre de 20 prsents dans tab, - on reconstruit MOYENNE en y ajoutant les valeurs selon leur quantit croissante (on ne trie pas les valeurs mais le comptage de ces valeurs au sein du tableau).

Exercice 6 :
Utilisez Internet pour chercher des informations concernant dautres mthodes de tri et en particulier : Le tri rapide (quick sort) Le tri fusion (merge sort) Le tri par tas (heap sort)

148

Lecture
Classification des algorithmes de tri
La classification des algorithmes de tri est trs importante, car elle permet de choisir le type dalgorithme le plus adapt au problme trait, tout en tenant compte des contraintes imposes par celui-ci. Les principales caractristiques qui permettent de diffrencier les algorithmes de tri sont : la complexit algorithmique, les ressources ncessaires et le caractre stable. Complexit algorithmique La complexit algorithmique temporelle dans le pire des cas permet de fixer une borne suprieure du nombre d'oprations qui seront ncessaires pour trier un ensemble de n lments. On utilise pour symboliser cette complexit la notation de Landau : O. La complexit algorithmique temporelle en moyenne : cest le nombre d'oprations lmentaires effectues en moyenne pour trier une collection dlments. Elle permet de comparer les algorithmes de tris et donne une bonne ide du temps d'excution qui sera ncessaire lalgorithme ; on arrive l'estimer avec une prcision assez importante. Toutefois, si les ensembles trier ont une forme particulire et ne sont pas reprsentatifs des n ! combinaisons possibles, alors les performances pourront tre trs infrieures ou trs suprieures la complexit "moyenne". La complexit algorithmique spatiale (en moyenne ou dans le pire des cas) reprsente, quant elle, lutilisation mmoire que va ncessiter l'algorithme. Celle-ci peut dpendre, comme le temps d'excution, du nombre d'lments trier. Dans la plupart des tris, T(n) = O(n2) bien que pour certains algorithmes, T(n) = O(nlog(n)). On peut montrer que la complexit temporelle en moyenne et dans le pire des cas dun algorithme bas sur une fonction de comparaison ne peut pas tre meilleur que nlog(n)). Le problme du tri consiste, tant donn une suite u = (u1, u2, ..., un) dlments dun ensemble totalement ordonn (par exemple ), dterminer une permutation de 1, ..., n telle que : y = (u(1), u(2), ..., u(n)) soit trie. L'algorithme doit donc tre en mesure de fournir toute les possibilits de permutation des termes de la suite, car il est quivalent de fournir la permutation que la suite trie y. Si lon considre que les comparaisons sont les seules oprations lmentaires, le nombre de permutations de n lments tant n ! (factorielle n) et sachant que lalgorithme diffrencie deux cas chaque comparaison, il faut que le nombre doprations lmentaires h soit tel que : ainsi Les tris qui ne demandent que nlog(n) comparaisons en moyenne sont dits optimaux.

149

Lecture
Pour certains types de donnes (entiers, chanes de caractres de taille borne), il existe cependant des algorithmes plus efficaces au niveau du temps d'excution, comme le tri comptage ou le tri radix. Ces algorithmes n'utilisent pas la comparaison entre lments (la borne nlog(n) ne s'applique donc pas pour eux) mais ncessitent des hypothses sur les objets trier. Par exemple, le tri comptage et le tri radix s'appliquent des entiers que l'on sait appartenir l'ensemble [1, m] avec comme hypothse supplmentaire pour le tri radix que m soit de la forme 2k. Caractre en place Un algorithme est dit en place s'il n'utilise qu'un nombre trs limit de variables et quil modifie directement la structure quil est en train de trier. Ceci ncessite lutilisation d'une structure de donne adapte (un tableau par exemple). Ce caractre est trs important si on ne dispose pas d'une grande quantit de mmoire utilisable. Caractre stable Un algorithme est dit stable s'il garde l'ordre relatif des quantits gales pour la relation d'ordre. Exemple, si on considre la suite dlments suivante : (4, 1) (3, 1) (3, 7) (5, 6) que l'on trie par rapport leur premire coordonne (la cl), deux cas sont possibles, quand lordre relatif est respect et quand il ne l'est pas : (3, 1) (3, 7) (4, 1) (5, 6) (ordre relatif maintenu) (3, 7) (3, 1) (4, 1) (5, 6) (ordre relatif chang) Lorsque deux lments sont gaux pour la relation d'ordre (cest--dire qu'il ont la mme cl), l'algorithme de tri conserve l'ordre dans lequel ces deux lments se trouvaient avant son excution. Les algorithmes de tri instables peuvent tre retravaills spcifiquement afin de les rendre stable, cependant cela peut tre au dpend de la rapidit et/ou peut ncessiter un espace mmoire supplmentaire. Exemples d'algorithmes de tri Tri bulles : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place ; Tri par slection : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, qui trie sur place ; Tri par insertion : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place. C'est le plus rapide et le plus utilis pour un petit nombre de valeurs trier ; Tri rapide (quick sort) : O(nlogn) en moyenne, mais quadratique au pire cas, en place mais pas stable; Tri fusion (merge sort) : O(nlogn) en moyenne et dans le pire des cas, stable mais pas en place ;

150

Lecture
Tri par tas (heap sort) : toujours environ deux fois plus lent que le tri rapide, c'est--dire aux alentours de O(nlogn), il est donc intressant de l'utiliser si l'on souponne que les donnes trier seront souvent des cas quadratiques pour le tri rapide; Tri comptage : dans certaines conditions c'est un algorithme linaire, T(n) = O(n), stable mais ncessite l'utilisation d'une seconde liste de mme longueur que la liste trier ; Tri par base : c'est aussi un tri linaire dans certaines conditions (moins restrictives que pour le tri par comptage), T(n) = O(n), stable mais ncessite aussi l'utilisation d'une seconde liste de mme longueur que la liste trier.

Remarque
On peut facilement obtenir la stabilit du Tri rapide, si l'on renonce son caractre en place (en effet, cela ncessite un deuxime tableau de mme taille, pour retenir l'ordre initial de chaque lment). On peut galement rendre sa complexit indpendante des donnes d'entre: pour cela il suffit d'appliquer au tableau une permutation alatoire avant de le trier. Wikipdia l'encyclopdie libre

151

Chapitre pitre 5
Les Algorithmes rcurrents

Objectif

Acqurir des habilits de rsolution de problmes travers l'apprentissage des algorithmes rcurrents

I. Introduction II. Calcul de somme III. Recherche du minimum et du maximum IV. Calcul sur les suites V. Triangle de Pascal
Retenons Exercices

Chapitre

Les algorithmes rcurrents


Il est assez difficile de trouver une erreur dans son code quand on la cherche. Cest encore bien plus dur quand on est convaincu que le code est juste. - Steve McConnell "Dans ce chapitre, nous allons tudier les algorithmes rcurrents les plus connus. Nous commenons par le calcul dune somme et la recherche du minimum et du maximum avant dintroduire des algorithmes de calcul sur les suites. Le dernier algorithme est celui qui nous permettra dafficher le triangle de Pascal dordre n donn".

I. Introduction
Les algorithmes rcurrents sont des algorithmes qui utilisent un traitement itratif pour produire un rsultat gnralement calcul. Donc dans cette famille dalgorithmes, nous nous intressons au rsultat final de litration. Ce rsultat peut dpendre des p rsultats prcdents, on parle dans ce cas dun algorithme rcurrent dordre p. - un algorithme rcurrent est dit dordre 1 si un rsultat dpend du rsultat prcdent. Exemple : Dans le calcul dune somme de n nombres, la somme des n premiers nombres est gale la somme des (n-1) premiers nombres ajoute au nme nombre. - un algorithme rcurrent est dit dordre 2 si un rsultat dpend des deux rsultats prcdents. Exemple : Dans la suite de Fibonacci, Bn = Bn-1 + Bn-2 Dans la suite de ce chapitre, nous allons traiter quelques algorithmes rcurrents dordre 1 et dordre 2.

153

II. Calcul de somme


II.1

Prsentation

Le calcul de la somme dune srie de nombres est un traitement trs utilis en programmation. Il sagit dun traitement rcurrent dordre 1 puisqu un niveau donn, la somme est gale la valeur prcdente de la somme incrmente de la valeur en cours de la variable cumuler. Dans ce qui suit, nous allons traiter deux cas de calcul de sommes : Cas 1 : calcul de la somme de n entiers saisis Cas 2 : calcul de la somme des lments dun tableau deux dimensions.

II.2

Applications
a. Application 1 Analysez puis dduisez lalgorithme dune fonction Somme1 qui permet de calculer la somme de n entiers saisis. Spcification de la fonction SOMME 1 Rsultat : Somme1

Traitement : - Il faut mentionner quil sagit dun exercice dj trait et que vous tes capable de donner la solution. - Pour calculer la somme de n entiers saisis, nous navons pas besoin de les ranger dans un tableau puis quil est possible de calculer la somme au fur et mesure de la saisie. - La solution comporte, donc, une structure itrative complte Pour Faire - Pour chaque itration, nous allons saisir lentier et lajouter une variable somme. Algorithme de la fonction Somme1 0) Dbut Fonction Somme1 (n : entier ) : entier 1) S 0 2) Pour c de 1 n Faire Lire(m) S S+m Fin Pour 3) Somme1 S 4) Fin Somme1

154

Les algotithmes rccurents

Chapitre

5
Tableau de dclaration des objets Objet
c S m

Type/Nature
Entier Entier Entier

Rle
Le compteur de la boucle Pour La variable de cumul La variable saisir

N.B. Pour une valeur p quelconque du compteur c, la valeur de la variable de cumul S est gale lancienne valeur incrmente de la valeur de lentier saisi. Autrement dit : S valeur prcdente de S + m Il sagit donc dun algorithme rcurrent dordre 1. Traduction en Pascal program Calcul_somme1; uses wincrt; var n:integer; Function Somme1 (n:integer):integer; Var C,S,m :integer; Begin S:=0; For c:= 1 to n Do Begin Readln(m); S := S + m; End; Somme1 := S; End; begin Clrscr ; repeat Write('Donner un entier: '); read(n); until(n>0); writeln(La Somme est:,somme1(n) :5); end.

155

b. Application 2

Analysez puis dduisez lalgorithme dune fonction Somme2 qui permet de calculer la somme des lments rels dune matrice carre comportant n lignes et n colonnes. Spcification de la fonction Somme2 Rsultat : Somme2

Traitement : - Pour calculer la somme des lments de matrice que nous allons appeler Mat, nous aurons besoin de parcourir le tableau et de faire le cumul des rels quil contient. - La solution comporte, donc, deux structures itratives compltes Pour Faire - Pour chaque itration, nous allons ajouter la valeur de l'lment de la matrice une variable qui fait le cumul. Algorithme de la fonction Somme2 0) Dbut Fonction Somme2 (Mat : matrice ; n : entier ) : rel 1) S 0 2) Pour l de 1 n Faire Pour c de 1 n Faire S S + Mat[l,c] Fin Pour Fin Pour 3) Somme2 S 4) Fin Somme2

Objet
I c S

Type/Nature
Entier Entier Rel

Rle
Le compteur de la boucle Pour Le compteur de la boucle Pour La variable de cumul

156

Les algotithmes rccurents

Chapitre

Traduction en Pascal program Calcul_somme2; uses wincrt; Type Matrice = Array[1..100,1..100] of real ; var n:integer; Mat : Matrice ; Procedure remplir (var M : matrice; n : integer) ; var L,c :integer; Begin For l:= 1 to n Do For c:= 1 to n Do readln(m[l,c] ) end; Function somme2 ( M: Matrice; n:integer):real; Var L,c :integer; S : real; Begin S:=0; For l:= 1 to n Do For c:= 1 to n Do S := S + M[l,c]; Somme2 := S; End; Begin Clrscr ; repeat Write('Donnez le nombre de lignes/colonnes de la matrice: '); readln(n); until(n>0); writeln(La somme est:,somme2(Mat,n) :5 : 2); end.

III. Recherche du minimum et du maximum


III.1. Prsentation
La recherche du minimum ou du maximum dune srie de nombres est un traitement trs utilis en programmation. Il sagit dun traitement rcurrent dordre 1 puisqu un niveau donn, la valeur du minimum est gale sa valeur prcdente compare la valeur en cours . Dans ce qui suit, nous allons traiter deux cas : Cas 1 : La recherche du minimum et du maximum de n entiers saisis. Cas 2 : La recherche du minimum et du maximum des lments dun tableau deux dimensions.
157

III.2. Applications
a. Application 1

Analysez puis dduisez lalgorithme dune procdure Min_Max qui permet de chercher la plus petite et la plus grande valeur de n entiers saisis. Spcification de la procdure Min_Max Rsultat : Min_Max

Traitement : - L aussi, il sagit dun exercice dj trait et que vous tes capable de donner la solution sans difficult. - Pour trouver le plus grand ou le plus petit des n entiers saisis, nous navons pas besoin de les ranger dans un tableau puisquil est possible de les dterminer au fur et mesure de la saisie. - La solution comporte, donc, une structure itrative complte Pour Faire - Pour chaque itration, nous allons saisir lentier et le comparer une variable Min puis une autre variable Max et changer les valeurs dans le cas o lentier saisi est infrieur ou suprieur. NB. Prvoir linitialisation des variables Min et Max avec la premire valeur saisie (qui se fera avant la boucle). Algorithme de la procdure Min_Max 0) 1) 2) 3) Dbut Procdure Min_Max (Var max,min :entier ; n : entier ) Lire(m) min m ; max m Pour c de 2 n Faire Lire(m) Si m < min alors min m Si m > max alors max m Fin Pour 4) Fin Min_Max

Objet
c m

Type/Nature
Entier Entier

Rle
Le compteur de la boucle Pour La variable saisie
158

Les algotithmes rccurents

Chapitre

5
NB. Pour une valeur quelconque p du compteur c, la valeur du paramtre formel Max (ou Min) est gale au rsultat de la comparaison de lancienne valeur de Max (ou de Min) et de la valeur de lentier saisi. Autrement dit : Max Maximum (valeur prcdente de Max , m) Min Minimum (valeur prcdente de Min , m) Il sagit donc dun algorithme rcurrent dordre 1. Traduction en Pascal program rech_Min_Max; uses wincrt; var n,min,max:integer; Procdure Min_Max (Var min,max:integer; n:integer); Var C,S,m :integer; Begin Write(Donner la 1re valeur); Readln(m); Min:=m; max:=m; For c:= 2 to n Do Begin Write(Donner un entier); Readln(m) ; If m < min then min:=m; If m > max then max :=m; End; End; begin Clrscr ; repeat Write('Donner un entier: '); read(n); until(n>0); Min_Max(min,max,n) ; Writeln(max = , max, min = ,min); end.

159

b. Application 2

Analysez puis dduisez lalgorithme dun programme qui permet de dterminer puis dafficher le minimum et le maximum des lments rels dune matrice carre comportant n lignes et n colonnes. Spcification du problme On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

Afficher Min_ Max

Saisir n Procdure saisie

Remplir Mat Procdure remplir

Rechercher Min_Max Procdure Rechercher

Afficher Min_Max Procdure afficher

Petit Fonction Petit

Grand Fonction Grand

Dcomposition modulaire

Spcification du programme principal Rsultat = Afficher le minimum et le maximum Traitement = - L'affichage des valeurs minimales et maximales sera fait par la procdure Afficher - Pour dterminer la valeur du minimum et celle du maximum, nous ferons appel la procdure Chercher. A son tour, ce module fera appel aux deux modules :

160

Les algotithmes rccurents

Chapitre

5
- La fonction Petit qui retourne le plus petit lment de la matrice - La fonction Grand qui retourne le plus grand lment de la matrice. - Pour pouvoir chercher les valeurs Min et Max, nous devons tout d'abord remplir la matrice : La procdure Remplir ralisera cette tche. - La procedure saisir fournira la valeur du nombre de lignes/colonnes de la matrice carre. Algorithme du programme principal 0) 1) 2) 3) 4) 5) Dbut Recherche_min_max Saisir (n) Remplir (Mat,n) Chercher (M,Mat,min,max) Afficher (min,max) Fin Recherche_min_max

Dans ce qui suit, nous allons dtailler la spcification de la procdure chercher. Les autres modules ont t dj traits dans le cours. Spcification de la procdure chercher Rsultat = Chercher_Min_Max Traitement = Nous avons dit au niveau du programme principal que ce module fera appel deux nouveaux modules qui sont : - La fonction Petit qui retourne le plus petit lment de la matrice. - La fonction Grand qui retourne le plus grand lment de la matrice. Il est facile maintenant de dfinir les paramtres de cette procdure qui sont : - La matrice Mat - Lentier n reprsentant le nombre de lignes et de colonnes. - Les paramtres variables Min et Max. Algorithme de la procdure Chercher 0) 1) 2) 3) Dbut Procdure Chercher (n :entier ; Mat :Matrice ; Var min, max : entier) Min Petit(n,Mat) Max Grand(n,Mat) Fin Chercher

Dtaillons maintenant la spcification de la fonction Petit. Vous tes par la suite appel dtailler la fonction Grand.

161

Spcification de la fonction Petit Rsultat = Petit Traitement = - Il sagit dun traitement rptitif qui fait appel deux boucles Pour Faire imbriques. Pour chaque lment, nous allons prvoir un test pour vrifier et, ventuellement, changer la valeur du minimum. Il est important de signaler quil faut prvoir une initialisation de la variable qui va contenir la valeur minimale. Cette initialisation se fera avec la valeur du premier lment de la matrice, savoir Mat[1,1]. Les paramtres de cette fonction sont : - La matrice Mat - Lentier n reprsentant le nombre de lignes et de colonnes. Algorithme de la Fonction Petit 0) Dbut fonction Petit (n :entier ; Mat :Matrice ) : Rel 1) p Mat[1,1] 2) Pour l de 1 n Faire Pour c de 1 n Faire Si Mat[l,c] < p alors p Mat[l,c] 3) Petit p 4) Fin Petit

Objet
l c p

Type/Nature
Entier Entier Rel

Rle
Le compteur de la boucle Pour Le compteur de la boucle Pour La variable qui va contenir la valeur minimale

162

Les algotithmes rccurents

Chapitre

5
Traduction en Pascal program Recherche_Min_Max; uses wincrt; Type Matrice = Array[1.100,1..100] of real; var n:integer; Mat : Matrice; min,max :real ; Procedure Saisir (var a : integer) ; Begin Clrscr ; Writeln(Donner le nbre de lignes/colonnes); Repeat Readln(a) Until a > 0 ; End; Procedure Remplir (var M : Matrice ; a: integer) ; Var L,c :integer ; Begin For l:=1 to a do For c :=1 to a do Begin Writeln(Donner le rel n, l,c); Readln(M[l,c]) End; End; Function Petit (M : Matrice; a:integer):real; Var L,c, :integer; p:real ; Begin p:=M[1,1]; For l:= 1 to n Do For c:= 1 to n Do If M[l,c] < p then p := M[l,c]; Petit := p; End; Function Grand (M: Matrice; n:integer):real; Var L,c, :integer; g:real; Begin
163

g:=M[1,1]; For l:= 1 to n Do For c:= 1 to n Do If M[l,c] > g then g := M[l,c]; grand := g; End; Procedure Chercher (mat :Matrice ; n :integer; var max, min : real) ; Begin Min = petit (mat,n); Max := grand (mat,n) ; End ; Procedure Afficher (M1, M2 : real) ; Begin Writeln(Le plus petit lment est , M1 :5 :3) ; Writeln(Le plus grand lment est , M2 :5 :3) ; End ; begin Saisir(n) ; Remplir(Mat,n); Chercher(Mat, n, max, min) ; Afficher (Max,min) ; end.

IV. Calcul sur les suites


IV.1.Prsentation
La manipulation des suites permet de faire beaucoup de calculs rcurrents. Avec des suites arithmtiques, gomtriques ou autres, nous pouvons faire des recherches du nme terme, un calcul de la somme des p premiers termes, . On sintressera dans la suite aux traitements rcurrents dordre 1.

IV.2.Applications
a. Application 1 Analysez puis dduisez lalgorithme dune procdure Terme_n qui permet de chercher et dafficher les n premiers termes de la suite U dfinie par :
164

Les algotithmes rccurents

Chapitre

5
U0 = 5 Un = 2Un-1 +1.5

Spcification de la procdure Terme_n Rsultat = Terme_n Traitement = - Pour trouver les n premiers termes de la suite U, nous avons besoin de dterminer les termes successifs de U0 Un-1 (Un-1 tant le nme terme de cette suite). - La solution comporte, donc, une structure itrative complte Pour Faire - Pour chaque itration, nous allons dterminer et afficher le terme calcul. Algorithme de la procdure terme_n 0) 1) 2) 3) Dbut procdure Terme_n (n : entier ) U 5 Ecrire (U) Pour c de 1 (n-1) Faire U 2*U + 1.5 Ecrire (U) Fin Pour 4) Fin Terme_n

Objet
c U

Type/Nature
Entier Rel

Rle
Le compteur de la boucle Pour La valeur dun terme de la suite

NB. Une valeur dun terme donn dpend de la valeur du terme qui le prcde. Autrement dit : Un = 2Un-1 +1.5 Il sagit donc dun algorithme rcurrent dordre 1.

165

Traduction en Pascal program Suite1; uses wincrt; var n:integer; Procdure Terme_n (n:integer); Var c, :integer; U: Ral ; Begin U := 5; Write(U :10:4); For c:= 1 to (n-1) Do Begin U:= 2*U + 1.5 ; Write(U :10:4); End; End; begin Clrscr ; repeat Write('Donner un entier: '); read(n); until(n>0); Terme_n(n) ; end.

b. Application 2 Analysez puis dduisez lalgorithme dun programme qui permet : - De dterminer le terme t pour lequel la somme des n premiers termes dune suite W dpasse une limite l (100 l 500). - Dafficher la liste des termes qui prcdent t. La suite W tant dfinie par : Wn = Un + 2 U tant la suite dfinie au niveau de lapplication 1.

166

Les algotithmes rccurents

Chapitre

Afficher_Suite

Saisir n Procdure saisie

Chercher le terme t Procdure chercher

Afficher les termes avant t Procdure Afficher

Dcomposition modulaire

Rsultat = Afficher_Suite Traitement = - L'affichage du terme t et des termes qui le prcdent sera fait par la procdure Afficher. - Pour dterminer le terme t ainsi que les termes qui le prcdent, nous allons faire appel la procdure Chercher. Il sagit dun traitement rptitif condition darrt . On fera de sorte dterminer en mme temps t et les termes qui le prcdent. Ces termes seront rangs dans un tableau quon appellera Ter. - Pour raliser ce traitement, il faut connatre la somme limite quon appellera Som et qui sera introduite lors de lappel de la procdure Saisir (100 Som 500). . Algorithme du programme principal 0) 1) 2) 3) 4) Dbut Suite2 Saisir (Som) Chercher (Som, t, Ter, c) Afficher (t, Ter,c) Fin Suite2

Dans ce qui suit, nous allons dtailler la spcification de la procdure chercher.

167

Spcification de la procdure CHERCHER Rsultat = Chercher_t_Ter Traitement =


Nous avons dit au niveau du programme principal que ce module fera deux tches : - La recherche du terme t, partir duquel la somme des termes de la suite W dpasse la valeur de la variable Som. - La dtermination des termes qui prcdent le terme t. Il sagit dun traitement rptitif condition darrt. En effet, nous allons utiliser la boucle Tant que Faire pour ranger les termes conscutifs de la suite W dans le tableau Ter et faire le cumul de ces termes. On arrtera le traitement lorsque le cumul dpasse la valeur de la variable Som.

N.B. Nous aurons besoin du nombre de termes rangs dans le tableau Ter. Il est facile maintenant de dfinir les paramtres de cette procdure qui sont : La variable Som Les paramtres variables t, Ter et c. Algorithme de la procdure Chercher 0) Dbut Procdure Chercher (Som :entier ; Var t : Rel ; Var Ter : Terme ; var c : entier) 1) Ter[0] 7;S 7;c 0 2) Tant que S Som faire c Ter[c] S c+1 2 * Ter[c-1] + 3.5 S + Ter[c]

Fin Tant que 3) t Ter[c] 4) Fin Chercher

168

Les algotithmes rccurents

Chapitre

IV. Triangle de Pascal


Activit :
Etant donn deux rels a et b, calculez (a+b)2 puis (a+b)3 et dduisez les coefficients du dveloppement. En effet, (a+b)2 = a2 + 2ab + b2 , les coefficients sont 1 , 2 et 1 alors que (a+b)3 = a3 + 3a2b + 3ab2 + b3 , les coefficients sont 1 , 3 , 3 et 1 Essayons de trouver les coefficients de (a+b)3 partir des coefficients de (a+b)2. Coefficients de (a+b)2 1
+

2
+

Coefficients de (a+b)3

Pouvez vous dduire les coefficients de (a+b)4 et de (a+b)5 ? En suivant la mme dmarche, nous pouvons obtenir les coefficients de (a+b)4 et de (a+b)5. En effet, Coefficients de (a+b)3 1
+

3
+

3
+

Coefficients de (a+b)4

4
+

6
+

4
+

Coefficients de (a+b)5

10

10

Le triangle de Pascal fournit les coefficients de (a+b)n. Cest un procd trs utilis et obtenu de diffrentes faons en utilisant les combinaisons, ou un algorithme rcurrent.

169

1 1 1 1 1 1 2 3 4 1 3 6 1 4 1 1

Ligne 0 Ligne 1 Ligne 2 Ligne 3 Ligne 4

P[4,3] = P[3,3] + P[3,2] En effet, pour une ligne donne : - le premier lment et le dernier lment sont gaux 1 - les autres lments sont dtermins en appliquant la formule suivante (l tant le numro de la ligne et c le numro de la colonne) : P[l,c] = P[l-1,c] + P[l-1,c-1]

V.2

Application
Analysez puis dduisez lalgorithme dune procdure Remplir_n qui permet de remplir les n premires lignes du triangle de Pascal (n tant une donne entire vrifant 2 n Nmax). Spcification de la procdure Remplir_n Rsultat = Remplir_n Traitement = - Pour remplir les n premires lignes du triangle de Pascal reprsent sous la forme dune matrice carre dordre n appele Mat, nous considrons que : - La premire ligne contient la valeur 1 la position Mat[1,1] - La deuxime ligne contient la valeur 1 dans les positions Mat[2,1] et Mat[2,2] - Les lignes qui restent remplir sont de la ligne 2 la ligne (n-1). Pour chacune dentre elles, nous allons suivre la dmarche suivante : Initialiser la premire valeur 1 Initialiser la dernire valeur 1 (la dernire case tant la case qui porte le numro de la ligne incrments de 1) Pour le reste des cases (de la case n2 la case qui porte le numro de la ligne), nous allons rpter le calcul en utilisant la formule suivante (l tant le numro de la ligne et c le numro de la colonne) : Mat[l,c] = Mat[l-1,c] + Mat[l-1,c-1]
170

Les algotithmes rccurents

Chapitre

5
- La solution comporte donc deux boucles imbriques, la premire pour parcourir les lignes et la seconde pour parcourir les colonnes (au sein dune mme ligne). - Les paramtres de cette procdure sont : La matrice Mat N, comme tant le nombre de lignes du tableau Algorithme de la procdure Remplir_n 0) Dbut procdure Remplir_n (n : entier ; Var Mat : Matrice) 1) 1 ; Mat[1,1] 1 ; Mat[1,2] 1 2) Pour l de 2 (n-1) Faire Mat[l,1] 1 Mat[l,l+1] 1 Pour c de 2 l Faire Mat[l,c] Mat[l-1,c] + Mat[l-1,c-1] Fin Pour Fin Pour 3)Fin Remplir_n

Objet
I c

Type/Nature
Entier Entier

Rle
Le compteur de la boucle Pour Le compteur de la boucle Pour

NB. Une valeur dun lment dindices l et c dpend de la valeur des deux lments dindices respectifs (l-1), c et (l-1), (c-1). Autrement dit : Mat[l,c] = Mat[l-1,c] + Mat[l-1,c-1] Il sagit donc dun algorithme rcurrent dordre 2. Traduction en Pascal program triangle_Pascal; uses wincrt; const nmax =100; Type Matrice = Array[1..nmax,1..nmax] of integer; var n:integer; Mat : Matrice; Procedure saisir (Var n:integer); Begin
171

Clrscr ; Writeln(Saisir n ); Repeat Readln(n) Until n in [2..nmax] End; Procedure Remplir_n (n:integer; Var Mat : matrice) ; Var L,c:integer; Begin Mat[1,1] := 1 ; Mat[1,2] := 1 For l := 2 to n do Begin Mat[l,1] := 1 Mat[l,l+1] := 1 For c := 2 to l do Mat[l,c] := Mat[l-1,c] + Mat[l-1,c-1] End ; End; Procedure Afficher (n:integer; mat : matrice) Var L,c:integer; Begin For l := 1 to n do Begin Writeln; For c := 1 to (l+1) do Write(mat[l,c]:4) End ; End;

begin Saisir(n); Remplir_n (n,mat) ; Afficher (n,mat) ; end.

172

Les algotithmes rccurents

Retenons
Les algorithmes rcurrents ont la spcificit dobtenir des rsultats en fonction des itrations ultrieures.

- Le calcul de la somme de n lments , la recherche du minimum ou du maximum sont des exemples dalgorithmes rcurrents dordre 1. - Le calcul sur les suites fait aussi appel des algorithmes rcurrents trs intressants. - Le triangle de Pascal permet de donner les coefficients de (a+b)n. Il sagit dun algorithme rcurrent dordre 2.

173

Exercices
Exercice 1 :
On se propose de chercher puis dafficher la moyenne dune classe comportant 30 lves. Questions 123Dfinissez les structures de donnes utiliser. Dcomposez ce problme en modules et analyser chacun des modules proposs. Traduisez la solution en un programme Pascal.

Exercice 2 :
Soit un tableau T de N entiers (on suppose que N>=2), on veut dterminer et afficher le Kime plus petit lment (1 k N) et lindice de sa premire apparition dans le tableau T. Exemple : Soit le tableau T suivant : 5 1 2 2 7 3 2 4 1 5 4 6 9 7 4 8 1 9 1 10

Pour k = 3 Le 3me lment minimal est 4 et l'indice de sa premire apparition est 6. Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

Exercice 3 :
On se propose de saisir un entier N de trois chiffres non nuls, de dterminer et d'afficher tous les nombres qui peuvent tre forms par les chiffres de N, ainsi que le plus petit et le plus grand de ces nombres.

174

Exercices
Exemple : Pour N= 427 : Les nombres forms par les chiffres de N sont : 427, 472, 724, 742, 247, 274 Le plus petit nombre est 247 Le plus grand nombre est 742 Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

Exercice 4 :
L'algorithme suivant est celui d'une fonction permettant de retourner la position du plus petit lment dans un tableau A de k lments partir d'une position p. 0) Def Fn pos_min (A : tab ; p,k: entier): entier 1) [pm p] Pour i de p+1 k Faire Si A[i] < A[pm] Alors pm i Finsi Fin pour 2) pos_min pm 3) Fin Pos_min On se propose de saisir un tableau T de n rels, le trier en sens croissant par la mthode de tri par slection puis de l'afficher. Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

175

Exercices
Exercice 5 :
On se propose d'effectuer sur un tableau T de N lments de type entier (5<N<20) les oprations suivantes: - Saisir deux entiers positifs Ind_i et Ind_j avec 0 < Ind_i < Ind_j N - Dterminer et afficher la valeur minimale (Min) d'une partie du tableau T comprise entre les indices donns Ind_i et Ind_j . - Dterminer le nombre de multiples de la valeur Min dans le tableau T. Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

Exercice 6 :
L'algorithme suivant est celui d'une fonction permettant de calculer la somme d'une partie d'lments d'un tableau T de n entiers , dlimite par les indices p1 et p2. 0) Def FN Somme (T : tab ; p1,p2 : entier): entier 1) [S 0] Pour i de p1 p2 faire S S + T[i] 2) Somme S 3) Fin Somme En exploitant la fonction dont l'algorithme est ci-dessus, on se propose de : Saisir un tableau V de N entiers (5 n 20). Afficher l'indice (Ind) de l'lment du tableau dont l'cart entre la somme (S1) des lments qui le prcdent et celle des lments qui le succdent (S2) soit minimal. Afficher les sommes S1 et S2 correspondantes. Exemple : Pour le tableau T suivant : 11 1 3 2 9 3 24 4 30 5 7 6 4 7 14 8 16 9 21 10 13 11 16 12

176

Exercices
Le programme affiche : S1 = 84 , S2 = 80 et ind = 7 Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

Exercice 7 :
Soit l'algorithme suivant : 0) Dbut inconnu 1) Ecrire (" n = "); Lire (n) 2) Pour i de 1 n Faire Rpter Lire(T[i]) Jusqu' T[i] Dans [0..9] FinPour 3) Proc Recherche (T,Lmax,Pos) 4) Pour i de Pos (Pos + Lmax-1) faire Ecrire (T[i]:2) FinPour 5) Fin Inconnu Questions : 1. Traduisez cet algorithme en Pascal. 2. Dans laction 1, ajoutez les contrles sur la saisie pour assurer les conditions suivantes : 5 n 50 3. Ecrivez la procdure Recherche qui permet de dterminer et d'afficher la position (Pos) et la longueur (Lmax) de la premire plus longue squence d'lments de T ordonns dans le sens croissant. Exemple : Pour le tableau T suivant :

2 1

4 2

3 3

1 4

5 5

7 6

2 7

8 8

4 9

8 10

9 12

0 13

La procdure Recherche retourne les valeurs Pos = 4 et Lmax = 3 Bac pratique 2005

177

Exercices
Exercice 8 :
On se propose de : - saisir les lments d'un tableau T de N entiers forms chacun de trois chiffres (5 N 20) - dterminer et dafficher le plus grand lment du tableau T - afficher tous les lments du tableau T dont la permutation des chiffres donne la valeur maximale dtermine prcdemment. Exemple : Soit le tableau T suivant : 234 1 125 2 20 3 324 4 152 5 120 6 214 7 312 8 432 9 -110 10

Max = 432 Les valeurs dont les chiffres donnent par permutation la valeur maximale sont : 234 et 324. Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

Exercice 9 :
On se propose de dterminer et d'afficher tous les diviseurs suivis de tous les multiples d'un entier p donn, dans une partie d'un tableau T de N entiers donns. Cette partie est dlimite par deux indices Ind_inf et Ind_sup. avec (0 < Ind_inf < Ind_sup N). Exemple

25 1

32 2

43 3

4 4

32 5

72 6

80 7

15 8

24 9

2 10

48 11

56 12

10 13

14 14

Ind_inf

Ind_sup

178

Exercices
Pour Ind_inf = 3, Ind_sup = 11 et p = 8 Le programme affichera : - Les diviseurs de 8 sont : 4 2 - Les multiples de 8 sont : 32 72 80 24 Questions 1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal. Bac pratique 2005

179

Chapitre pitre VI
Les algorithmes arithmtiques

Objectif

Acqurir des habilits de rsolution de problmes travers l'apprentissage des algorithmes de calcul numrique.

I. Le calcul du PGCD II. Le calcul du PPCM III. Les nombres premiers IV. La dcomposition en facteurs premiers V. Le calcul du factoriel VI. La Conversion entre bases de numration
Retenons Exercices

Chapitre

Les algorithmes arithmtiques


"Dieu cra les naturels Les hommes ont fait le reste". (Un algbriste clbre) "Dans ce chapitre, nous allons tudier les algorithmes arithmtiques les plus connus. Nous commenons par le calcul du PGCD et du PPCM avant dintroduire des algorithmes de recherche de nombres premiers et de dcomposition en produits de facteurs premiers. Le dernier algorithme tudier est celui qui permet la conversion dun entier en binaire puis en hexadcimal".

I. Le calcul du PGCD
Activit :
a) Dterminez le plus grand commun diviseur des deux entiers dans chacun des cas suivants : 15 et 27 puis 120 et 50. b) Dduisez les tapes suivre pour raliser cette tche. PGCD (15,27)=PGCD(27,15)= PGCD(15,12)=PGCD(12,3)=PGCD(3,0) =3 PGCD (120,50)=10 Pour chercher le PGCD de deux entiers a et b, nous pouvons appliquer lalgorithme dEuclide qui repose sur le principe suivant : si a=b, le PGCD est a (ou b) sinon, a et b ont le mme PGCD que b et le reste r de la division Euclidienne de a par b

I.1

Dfinition
Le plus grand commun diviseur de deux entiers a et b appel aussi PGCD est le plus grand entier permettant de diviser a et b. On le note PGCD (a,b).

I.2.

Applications
a. Application 1 Analysez puis dduisez lalgorithme dune fonction qui permet dutiliser lalgorithme dEuclide pour dterminer le PGCD de deux entiers donns m et n.

181

Spcification de la fonction PGCD_Euclide Rsultat = PGCD_Euclide Traitement = - Pour calculer le PGCD des deux entiers m et n, nous allons appliquer lalgorithme dEuclide donn au niveau de lactivit. En effet

si m=n, le PGCD est m (ou n) sinon, m et n ont le mme PGCD que n et le reste r dans la division euclidienne de m par n Il sagit donc dun traitement rptitif condition darrt, la boucle utiliser est Tant que Faire Dans cette boucle, nous devons prvoir le remplacement de : m par n n par m mod n Algorithme de la fonction PGCD_Euclide 0) Dbut Fonction PGCD_Euclide (m,n : entier ) : entier 1) Tant que (n 0) Faire r m Mod n m n n r Fin Tant que 2) PGCD_Euclide m 3) Fin PGCD_Euclide

Objet
r

Type/Nature
Entier

Rle
Le reste de la division successive

Traduction en Pascal Program pgcd_euclide ; uses wincrt ; var m, n : integer ; Function pgcd( a,b : integer) : integer ; var r : integer ; begin While b<> 0 do begin R := a mod b; a:=b; b: = R; end; pgcd :=a; End ;
182

Les algotithmes arithmtiques

Chapitre

6
Begin repeat Write (Donner deux entiers) read (m,n) until (m>0) and (n>0) ; write (pgcd = , pgcd (m,n) : 4) ; end.

b. Application 2 1) Il existe dautres mthodes de calcul du PGCD. Nous allons prsenter lune dentre elles .(voir lactivit pages 93-94) Utilisez lalgorithme formel suivant pour calculer le PGCD(130,20)

si a=b alors PGCD(a,b) = a (ou b) Sinon PGCD(a,b) = PGCD(a-b,b) si a > b Sinon PGCD(a,b) = PGCD(a,b-a)

PGCD (130,40)

= = = = = = =

PGCD PGCD PGCD PGCD PGCD PGCD 10

(90,40) (50,40) (10,40) (10,30) (10,20) (10,10)

Donc, PGCD (130,40) = 10 2) Analysez puis dduisez lalgorithme dune fonction intitule PGCD_Diff qui permet dutiliser cet algorithme pour dterminer le PGCD de deux entiers donns m et n Spcification de la fonction PGCD_Diff Rsultat = PGCD_Diff Traitement = - Pour calculer le PGCD des deux entiers m et n, nous allons appliquer lalgorithme formel propos ci dessus. En effet :

183

si m=n, le PGCD est m ou n sinon, on remplace la plus grande valeur de m ou n par la diffrence Il sagit donc dun traitement rptitif condition darrt, la boucle utiliser est Tant que Faire Dans cette boucle, nous devons prvoir le remplacement de : m par (m n) si m > n n par ( n m) si n > m Algorithme de la fonction PGCD_Dif 0) Dbut Fonction PGCD_Dif (m,n : entier ) : entier 1) Tant que (m n) Faire Si m > n alors m mn sinon n nm Fin si Fin Tant que 2) PGCD_Dif m 3) Fin PGCD_Dif

II. Le calcul du PPCM


Activit :
a) Dterminez le plus petit commun multiple des deux entiers dans chacun des cas suivants : 5 et 6 puis 120 et 50. b) Dduisez les tapes suivre pour raliser cette tche. PPCM (5,6) = 30 PPCM (120,50)=600 Pour chercher le PPCM de deux entiers a et b, nous pouvons appliquer lalgorithme formel suivant : si a=b, le PPCM est a (ou b) sinon, chercher les multiples de a en ordre croissant et sarrter sil est multiple aussi de b.

184

Les algotithmes arithmtiques

Chapitre

6
II.1

Dfinition
Le plus petit commun multiple de deux entiers a et b appel aussi PPCM est le plus petit entier multiple la fois de a et de b. On le note PPCM (a,b).

II.2

Application
Analysez puis dduisez lalgorithme dune fonction qui permet de renvoyer le PPCM de deux entiers donns m et n. Spcification de la fonction PPCM_1 Rsultat = PPCM_1 Traitement = - Pour calculer le PPCM des deux entiers m et n, nous allons appliquer lalgorithme formel prsent dans lactivit. En effet Etape 1 : Dterminer Max(m,n) Etape 2 : Chercher les multiples successifs de Max(m,n) Etape 3 : Rpter ltape 2 jusqu avoir un multiple de min(m,n) Il sagit donc dun traitement rptitif condition darrt, la boucle utiliser est Tant que Faire Dans cette boucle, nous devons prvoir la recherche dun multiple du plus grand de m et de n. Algorithme de la fonction PPCM_1 0) Dbut Fonction PPCM_1 (m,n : entier ) : entier 1) Si m > n alors max m , min n sinon max n , min m Fin si 2) Tant que (max Mod min 0) Faire max max + (m + n min) Fin Tant que 3) PPCM_1 max 4) Fin PPCM_1

185

program ppcm; uses wincrt; var m, n :integer;

Function ppcm_1(m,n : integer):integer ; var max, min : integer; Begin If m>n Then Begin Max Min: End Else begin Max Min: End;

: =m; =n;

: =n; =m;

while (max mod min <> 0 ) do max:= max + ( m+n-min); ppcm_1: = max; End; Begin Repeat write (Donner deux entiers :); Read (m); Read (n); until (m>0) and (n>0); write (Le PPCM est:, PPCM_1(m,n) : 4 ) ; End.

186

Les algotithmes arithmtiques

Chapitre

III. Les nombres premiers


Activit :
1) 2) Donnez quelques exemples dentiers premiers. Comment reconnatre quun entier est premier ?

Pour tester si un entier suprieur 1 est premier, il suffit de : - dterminer ses diviseurs - vrifier que le nombre de ses diviseurs est exactement 2 ( 1 et lui mme)

III.1

Dfinition
Un entier suprieur 1 est dit premier sil nest divisible que par 1 et par luimme.

III.2

Applications
a. Application 1 Ecrivez une analyse, un algorithme et un programme Pascal pour vrifier si un entier suprieur 1 est premier ou non Spcification du problme Rsultat = affichage Traitement = - La mthode suivre est diffrente de celle propose au niveau de lactivit que nous vous laissons lopportunit de la dtailler laide de votre enseignant. Il sagit de vrifier sil y un diviseur de n dans lintervalle [2, (n div 2)] si la rponse est affirmative alors n nest pas premier sinon n est premier. n = donne Algorithme 0) Dbut premier 1) Ecrire (Donner le nombre tester: ) 2) Rpeter Lire (n) jusqu (n>1) 3) i 2 Tant que (n mod i 0) et (i (n div 2)) faire i i+1 Fin tant que
187

4) Si (i > n div 2) alors Ecrire (le nombre est premier) Sinon Ecrire (le nombre n'est pas premier) Fin si 5) Fin premier

Objet
n i

Type/Nature
Entier Entier L'entier tester Un compteur

Rle

Traduction en Pascal program premier; uses wincrt; var n, i:integer; begin write('Donner l''entier tester'); Repeat read(n); until (n>1); i:=2; while ((n mod i <> 0)and (i<=n div 2)) do i:=i+1; if (i > n div 2) then writeln(n,' est premier') else writeln(n,' nest pas premier'); end. b. Application 2 Utilisez lapplication prcdente pour reprsenter ltape de la recherche de la primalit dun entier sous la forme dune fonction, puis crire un programme qui cherche puis affiche les nombres premiers de lintervalle [100,1000]. Spcification du problme Rsultat = primalit Traitement = Affichage
188

Les algotithmes arithmtiques

Chapitre

6
- Pour dterminer les entiers premiers de lintervalle [100,1000], il suffit de : Utiliser la structure itrative complte POUR Faire de 100 1000 Appeler la fonction boolenne Premier Prvoir laffichage adquat en fonction de la valeur retourne par cette fonction. Algorithme du programme principal 0) Dbut premier 1) Ecrire (les nombres premiers de lintervalle [ 100,1000 ] sont) 2) Pour i de 100 1000 faire R premier(i) Si (R) alors Ecrire (i) Fin si Fin Pour 3) Fin premier Tableau de dclaration des objets

Objet
i r

Type/Nature
Entier Boolen

Rle
compteur de la boucle dtermine la primalit de i

Algorithme de la fonction Premier 0) Dbut Fonction Premier (n : entier) : Boolen 1) c 2 2) Tant que (n mod c 0) et (c (n div 2)) faire c c+1 Fin tant que 3) Si (c > n div 2) alors Premier vrai Sinon Premier Faux Fin si 4) Fin Premier Tableau de dclaration des objets

Objet
c

Type/Nature
Entier

Rle
Un compteur de la boucle tant que

189

Traduction en Pascal program premier_2; uses wincrt; var i :integer; R: boolean; Function premier (n:integer):Boolean; Var c:integer; Begin c:=2; While (n mod c <>0) and (c <= n div 2) do c:=c+1; If (c > n div 2) then Premier := true else Premier :=false ; end; begin clrscr ; writeln (les entiers premiers de lintervalle [ 100,1000 ] sont) ; For i :=100 to 1000 do Begin IF premier(i) Then Write (i: 5); End; end.

IV. La dcomposition en facteurs premiers


Activit :
1) Dcomposez 124 en produits de facteurs premiers. Refaites le mme calcul pour les entiers 348 et 432. 2) Comment faire pour dcomposer un entier donn en produit de facteurs premiers ? Pour crire lentier 124 en produit de facteurs premiers, nous pouvons dresser puis remplir le tableau suivant :

190

Les algotithmes arithmtiques

Chapitre

6
dividende diviseur 124 62 2 2 31 31 1

En dduire que 124 = 2 x 2 x 31 Nous ferons de mme pour les entiers 348 et 432. En effet :

dividende diviseur

348 174 87 2 2 3

29 29

En dduire que 348 = 2 x 2 x 3 x 29

dividende diviseur

432 216 108 54 2 2 2 2

27 3

9 3

3 3

En dduire que 432 = 2 x 2 x 2 x 2 x 3 x 3 x 3 Pour chercher la dcomposition dun entier n en produit de facteurs premiers, nous pouvons appliquer lalgorithme formel suivant : Vrifier si n est divisible par 2, si oui continuer le diviser par 2 et le remplacer par n div 2 jusqu ce quil ne soit plus multiple de 2 Refaire ltape prcdente pour 3, 4, ... Refaire les deux tapes prcdentes jusqu avoir n = 1

IV.1

Dfinition
La dcomposition dun entier en produit de facteurs premiers consiste crire cet entier sous la forme dun produit de ces diviseurs premiers.

IV.2

Application
Analysez puis dduisez lalgorithme dun programme qui permet de chercher puis dafficher la dcomposition en produit de facteurs premiers dun entier n donn. Pour rsoudre ce problme, nous allons utiliser l'approche de l'analyse modulaire qui consiste dcomposer ce problme en modules :

191

DECOMPOSER

Saisir_n Procdure saisie

Remplir_Fact Procdure remplir

Afficher_Fact Procdure Afficher

Dcomposition modulaire
Spcification du programme principal Rsultat = afficher le produit Traitement = La mthode consiste chercher et ranger les facteurs premiers de n dans un tableau puis afficher les lments de ce tableau. - L'affichage du tableau se fera par la procdure Afficher - Pour pouvoir afficher le tableau, nous devons tout d'abord le remplir ce qui se fera par la procdure Remplir - Pour remplir le tableau, nous avons besoin de connatre la valeur de lentier n en excutant la procdure Saisir. Algorithme du programme principal 0) 1) 2) 3) 4) Dbut Prod_fact saisir (n) remplir (Fact,f,n) afficher (Fact,f) fin Prod_fact

Dans ce qui suit, nous allons dtailler la spcification des procdures Remplir et Afficher. Les autres modules ont t dj traits .
192

Les algotithmes arithmtiques

Chapitre

Spcification de la procdure Remplir Rsultat = Remplir le tableau T Traitement = A laide de lalgorithme formel propos au niveau de lactivit, nous pouvons dduire ce qui suit : - Il sagit dun traitement rptitif jusqu ce que la valeur de n devienne gale 1. La boucle utiliser est Rpter Jusqu - si le compteur i divise n, on le range dans le tableau Fact et incrmente le compteur f des diviseurs de n, sinon on incrmente i de 1. Les paramtres de cette procdure sont : - le tableau Fact - le compteur f des facteurs - lentier n objet de la dcomposition. Algorithme de la procdure Remplir 0) Dbut Procdure Remplir (Var Fact :Tab ; Var f : entier ; n : entier) 1) i 2,f 0 2) Rpeter Si n mod i = 0 alors n n div i f f+1 Fact[f] i sinon i i+1 Fin si Jusqu (n = 1) 3) fin Remplir Spcification de la procdure Afficher Rsultat = Afficher le tableau T Traitement = - Il sagit dun traitement rptitif de 1 f. La boucle utiliser est Pour Faire Les paramtres de cette procdure sont : - le tableau Fact - le compteur f des facteurs Algorithme de la procdure Afficher 0) Dbut Procdure Afficher (Fact :Tab ; f : entier ) 1) Pour i de 1 (f-1) faire Ecrire (Fact[i], x ) Fin Pour 2) Ecrire (Fact[f]) 3) Fin Afficher
193

V. Le calcul du
Activit :
1) 2)

factoriel

Calculer 5 !, 8 !, 2 ! Comment faire pour calculer la factorielle dun entier n donn. 8 ! = 8x7x6x5x4x3x2x1 = 40320 2 ! = 2x1 = 2

5 ! = 5x4x3x2x1 = 120

Pour calculer la factorielle dun entier, il suffit de dterminer la valeur du produit de tous les entiers naturels non nuls qui le prcdent.

V.1

Dfinition
La factorielle dun entier n donn est le produit de tous les entiers de lintervalle [1,n]. Le factoriel de n est not n !. n ! = nx(n-1)x(n-2)x(n-3)x x4x3x2x1

V.2

Application
Analysez puis dduisez lalgorithme dune fonction intitule Fact qui permet de chercher la factorielle dun entier n donn. Spcification de la fonction Fact Rsultat = fact_n Traitement = - Pour calculer la factorielle dun entier n, nous allons appliquer lalgorithme formel prsent dans lactivit. En effet, il suffit de dterminer la valeur du produit n(n-1)x(n-2)xx3x2x1. Il sagit donc dun traitement rptitif, la boucle utiliser est Pour Faire Algorithme de la fonction Fact 0) Dbut Fonction Fact (n : entier ) : entier_long 1) f 1 2) Pour i de 1 n Faire f fxi Fin Pour 3) Fact f 4) Fin Fact
194

Les algotithmes arithmtiques

Chapitre

6
Tableau de dclaration des objets

Objet
f i

Type/Nature
Entier_long Entier Variable intermdiaire

Rle

Compteur de la boucle Pour

Traduction en Pascal program factoriel; uses wincrt; var n :integer; Function Fact(n:integer):longint; Var i:integer; f : longint; Begin f:=1; For i:=1 to n do f := f * i; Fact := f; End; begin repeat Write('Donner un entier: '); readln(n) until(n>0); write(n, ! = ,Fact(n)); end.

VI. Conversion entre les bases de numration


Activit :
On se propose dcrire un programme qui permet de convertir un nombre entier positif en binaire. Dans votre cours de technologie en 2me anne, vous avez ralis des conversions entre diffrentes bases de numration. 1) Convertissez manuellement (38)10 en binaire. 2) Refaites la mme opration pour (135)10 , (527)10 3) Dcrivez les tapes faire pour raliser une telle conversion.
195

En effet, (38)10 = (100110)2 Car en effectuant des divisions successives par 2 et en crivant les restes en ordre inverse de leur apparition, nous obtenons 100110.

Quotient reste

38 0

19 1

9 1

4 0

2 0

1 1

(135)10 = (10000111)2 Car en effectuant des divisions successives par 2 et en crivant les restes en ordre inverse de leur apparition, nous obtenons 10000111.

(527)10 = (1000001111)2 Car en effectuant des divisions successives par 2 et en crivant les restes en ordre inverse de leur apparition, nous obtenons 1000001111.

Quotient reste

527 263 131 65 32 10 1 1 1 1 0 0

8 0

4 0

2 0

1 1

Les tapes que nous avons suivi pour raliser cette tche sont : 1) Faire une division par 2. 2) Ranger le reste et changer la valeur de n par n div 2. 3) Rpter les tapes 1 et 2 jusqu avoir n = 0.

VI.1

Dfinition
Convertir un entier positif N dans une base b au moins gale 2 consiste chercher la reprsentation de N dans la base b. En effet, dans un systme de numration b, tout entier positif N admet une et une seule dcomposition : N = anbn + an-1bn-1 + an-2bn-2 + + a1b + a0 o les ak sont des naturels compris entre 0 et (b-1) inclus. b est appele base de numration.

VI.2

Application
a. Application 1

196

Les algotithmes arithmtiques

Chapitre

6
On se propose dcrire un programme qui permet de convertir un nombre entier positif N en binaire. La conversion se fera de la base de numration 10 (ou base dcimale) la base 2 (ou base binaire). On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

Conversion_10_2

Saisir n Procdure saisie

Chercher_restes Procdure Chercher

Afficher _T Procdure Afficher

Dcomposition modulaire
Rsultat = afficher les restes Traitement = - L'affichage du tableau contenant les restes est la tche de la procdure Afficher - Nous devons donc remplir ce tableau par les restes successifs de la division de n par 2 ce qui sera la tche de la procdure Chercher. - Pour remplir le tableau, nous avons besoin de connatre la valeur de lentier N ce qui est la tche de la procdure Saisir. Algorithme du programme principal 0) 1) 2) 3) 4) Dbut Conversion_10_2 Saisir (N) Chercher (N,T,c) Afficher (t,c) Fin Conversion_10_2

Dans ce qui suit, nous allons dtailler la spcification de la procdure Chercher. Le reste des procdures ont t dj lobjet dun apprentissage prcdent.
197

Spcification de la procdure Chercher Rsultat = chercher Traitement = - La recherche des restes de la division euclidienne de N par 2 est un traitement rptitif jusqu ce que la valeur de n devienne nulle. Nous utilisons donc la structure Rpter Jusqu. - Pour chaque division, nous devons raliser les deux actions suivantes : Action 1 : chercher le reste de la division de N par 2 et le ranger dans le tableau Reste (nous allons prvoir lincrmentation dun compteur qui comptabilise le nombre des restes). Action 2 : changer la valeur de la variable N, qui passe N div 2. Les paramtres de cette procdure sont : - le tableau Reste - le compteur c (il sera utilis pour dterminer combien de reste ont t rangs dans le tableau) - lentier N. Algorithme de la procdure Chercher 0) Dbut Procdure Chercher (n : entier ; VAR Reste :T ; Var c : entier) 1) c 0 2) Rpter c c+1 Reste[c] N mod 2 N N div 2 Jusqu (N=0) 3) Fin Chercher

198

Les algotithmes arithmtiques

Chapitre

6
Traduction en Pascal program Conversion10_2; uses wincrt; Type T=Array[1..100] of 0..1; var Reste : t; c,n:integer; Procedure Saisir(var N:integer); Begin Repeat Writeln(Saisir un entier positif); Readln(N) Until (N > 0) End ; Procedure Chercher(N :Integer ; Var Reste :T ; Var c :Integer) ; Begin c :=0 ; Repeat c:= c + 1; Reste[c]:= N mod 2; N := N div 2 Until N = 0; End; Procedure Afficher (Reste:t; c:integer); Var I:integer; Begin For i:= c downto 1 do Write(Reste[i]:3); End; { Programme principal }

begin Saisir(n) ; Chercher(n,Reste,c) ; Afficher(Reste,c) End.

199

b. Application 2 On se propose dcrire un programme qui permet de convertir un nombre entier positif N en hexadcimal. La conversion se fera de la base de numration 10 (ou base dcimale) la base 16 (ou base hexadcimale). On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules : 1- Convertissez (142)10 en hexadcimal 2- Dfinissez les tapes suivre pour raliser cette conversion. En effet, (142)10 = ( 8E )16 Car en effectuant des divisions successives par 16 et en crivant les restes en ordre inverse de leur apparition, nous obtenons les restes 8 et 14.

Quotient reste

142 14

8 8

En 2me anne, vous avez vu dans votre cours de Technologie que lors de la conversion en base 16, les restes sont cods de la manire suivante :

Reste Code en base 16

0 0

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 11 12 13 14 15 A B C D E F

Cest pour cette raison que nous crivons : Les tapes suivre pour raliser cette tche sont :

(142)10 = ( 8E )16

1) Faire une division par 16 2) Ranger le reste et changer la valeur de n par n div 16 3) Rpter les tapes 1 et 2 jusqu avoir n = 0. N.B. Lors de laffichage des restes, noubliez pas de prvoir la conversion des valeurs entre 10 et 15 en caractres alphabtiques entre A et F.
200

Les algotithmes arithmtiques

Chapitre

6
On utilisera l'approche de l'analyse modulaire qui consiste dcomposer le problme en modules :

Conversion_10_16

Saisir_n Procdure saisie

Chercher_restes Procdure Chercher

Afficher_T Procdure Afficher

Dcomposition modulaire
Rsultat = afficher les restes Traitement = - L'affichage du tableau contenant les restes est la tche de la procdure Afficher. Dans cette procdure, il faut prvoir la conversion des restes entre 10 et 15 en lettres alphabtiques entre A et F. - Nous devons donc remplir ce tableau par les restes successifs de la division de n par 16 ce qui sera la tche de la procdure Chercher. - Pour remplir le tableau, nous avons besoin de connatre la valeur de lentier N ce qui est la tche de la procdure Saisir. Algorithme du programme principal 0) 1) 2) 3) 4) Dbut Conversion_10_16 Saisir (N) Chercher (N,T,c) Afficher (t,c) Fin Conversion_10_16

Dans ce qui suit, nous allons dtailler la spcification de la procdure Chercher et celle de la procdure Afficher. La procdure Saisir a t dj lobjet dun apprentissage prcdent. Spcification de la procdure Chercher Rsultat = chercher Traitement =
201

- La recherche des restes de la division euclidienne de N par 16 est un traitement rptitif jusqu ce que la valeur de n devienne 0. Nous ferons donc appel la boucle Rpter Jusqu. - Pour chaque division, nous devons raliser les deux actions suivantes : Action 1 : chercher le reste de la division de N par 16 et le ranger dans le tableau T (nous allons prvoir lincrmentation dun compteur qui comptabilise le nombre des restes). Action 2 : changer la valeur de la variable N, qui passe N div 16. Les paramtres de cette procdure sont : - le tableau T - le compteur c (il sera utilis pour dterminer le nombre de reste rangs dans le tableau) - lentier N. Algorithme de la procdure Chercher 0) Dbut Procdure Chercher (n : entier ; var R:tab; var c: entier) 1) c 0 2) Rpter c R[c] N Jusqu (N=0) 3) Fin Chercher Rsultat = Afficher Traitement = - Laffichage des lments du tableau T est un traitement rptitif avec un nombre connu dlments. Nous utiliserons la structure POUR Faire Pour chaque lment, si valeur est dans lintervalle [0,9] alors on laffiche sinon on affiche la lettre qui lui correspond. Les paramtres de cette procdure sont : - le tableau R - le compteur c ( pour dterminer combien de restes ont t rangs dans le tableau) - lentier N. Algorithme de la procdure Afficher 0) Dbut Procdure Afficher (R :T ab ; c : entier) 1) Pour i de c 1 faire
202

c+1 N mod 16 N div 16

Les algotithmes arithmtiques

Chapitre

6
Si R[i] dans [1.9] alors Ecrire (R[i]) Sinon Ecrire (chr(ord(A)+ R[i]-10)) 2) Fin Afficher Traduction en Pascal program Conversion10_16; uses wincrt; Type Tab=Array[1..100] of 0..15; var Reste : tab; c,n:integer; Procedure Saisir(var N:integer); Begin Repeat Writeln(Saisir un entier positif); Readln(N) Until (N > 0) End ; Procedure Chercher(N :Integer ; Var Reste :Tab ; Var c :Integer) ; Begin c :=0 ; Repeat c:= c + 1; Reste[c]:= N mod 16; N := N div 16 Until N = 0; End; Procedure Afficher (Reste:tab; c:integer); Var i:integer; Begin For i:= c downto 1 do if Reste[i] In [1..9] then write (Reste[i]) else write (chr(ord(A)+Reste[i]-10):3) End; { Programme principal } begin Saisir(n) ; Chercher(n,Reste,c) ; Afficher(Reste,c) End.

203

Retenons
1) Le PGCD (m , n) est le plus grand commun diviseur de deux entiers m et n. 2) Le PPCM (m , n) est le plus petit commun multiple de deux entiers m et n. 3) Un entier suprieur 1 est premier sil nest divisible que par 1 et par lui-mme. 4) Un entier peut tre crit sous la forme dun produit de ses facteurs premiers. 5) La factorielle dun entier n note n ! est gale au produit de tous les entiers de lintervalle [1,n]. 6) Il est possible de convertir un nombre crit dans une base b1 en son quivalent dans une base b2.

204

Exercices
Exercice 1 :
On se propose de chercher puis dafficher le PGCD de trois entiers saisis. 1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.

Exercice 2 :
On se propose de chercher puis dafficher le PPCM de trois entiers saisis. 1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.

Exercice 3 :
On se propose de chercher puis dafficher tous les nombres premiers infrieurs ou gaux un entier N donn et ceci en utilisant lalgorithme formel suivant : - Ecrivons tous les entiers naturels compris entre 2 et N - 2 nest pas ray de cette liste, donc 2 est premier ; maintenant rayons de la liste tous les multiples de 2. - Le plus petit nombre non ray est 3 : il est premier ; maintenant, rayons tous les multiples de 3 - Et ainsi de suite

Questions
1) 2) 3) 4) Donnez les structures de donnes utiliser. Dcomposez ce problme en modules Spcifiez chacun des modules proposs Dduisez un algorithme pour chaque module.

Exercice 4 :
On se propose de chercher puis dafficher le C(n,p) de deux entiers saisis. On donne C =
n p

n! p!(n-p)!

Questions
1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.
205

Exercices
Exercice 5 :
On se propose dutiliser le rsultat de lexercice n4 pour chercher et dafficher le A(n,p) de deux entiers saisis. n! p On a demand que : A = n (n-p)!

Questions
1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.

Exercice 6 :
On se propose de raliser la conversion dun nombre dcimal en son quivalent en octal (base 8).

Questions
1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.

Exercice 7 :
On se propose de raliser la conversion dun nombre hexadcimal (base 16) en son quivalent en binaire (base 2).

Questions
1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.

Exercice 8 :
Utilisez les traitements des deux exercices prcdents pour crire un programme qui ralise la conversion dun nombre crit en base b1 en son quivalent en base b2. b1 et b2 sont deux entiers de lintervalle [2,16]

Questions
1) Dcomposez ce problme en modules 2) Spcifiez chacun des modules proposs 3) Dduisez un algorithme pour chaque module.
206

Chapitre pitre 7
Les algorithmes dapproximations

Objectif

Acqurir des habilits de rsolution de problmes travers l'apprentissage des algorithmes dapproximations.

I. Prsentation II. Problmes doptimisation III. Problmes dapproximations


Retenons Exercices Lecture

Chapitre

Les algorithmes dapproximations


Des approximations, oui Des -peu-prs, non !.

"Dans ce chapitre, nous allons tudier quelques algorithmes doptimisation et dapproximation. Nous commenons par la rsolution de quelques problmes doptimisation ensuite nous traitons la rsolution de lquation f(x)=0 ".

I. Prsentation
Les algorithmes dapproximation, peuvent tre utiliss pour dterminer les valeurs approches de la solution de certains problmes dont on ne peut pas dterminer la valeur exacte de la solution. En effet, pour rsoudre un tel problme, on doit balayer toute une plage de valeurs de donnes avec un pas choisi. La valeur de ce pas donne la prcision sur la valeur approche de la solution. Dans certains problmes la variation du pas amne un ensemble de solutions ralisables, nanmoins il existe toujours une meilleure solution. Un problme doptimisation consiste trouver la meilleure solution dite solution optimale dans un ensemble de solutions ralisables.

II. Problmes doptimisation


1. Rsolution dun problme doptimisation Dans une feuille de carton carre de 10 cm de ct, on dcoupe aux quatre coins quatre carrs de ct x de telle faon quen relevant les quatre bords restants, on obtienne une bote de forme paralllpipdique. On veut trouver la valeur de x telle que le volume de la bote ainsi forme soit maximum.

208

1- Dterminez le volume de la bote en fonction de x. 2- On se propose de chercher la valeur approche de x tel que le volume de la bote est maximum. Le pas de variation de x est une donne. Pour exprimer le volume de la bote V en fonction de x, nous pouvons constater que : V =surface de base*hauteur. Surface de base=(10-2*x)*(10-2*x) Hauteur = x Do V=(10-2*x)* (10-2*x)*x V= 4*x3-40*x2+100*x Remarques La dtermination du volume de la bote en fonction de x a fait apparatre une fonction numrique. Ltude de la variation de cette fonction montre que cette fonction admet un maximum. Le domaine de variation de la valeur de la variable x est de 0 5 (dune faon gnrale de 0 la moiti de la mesure du ct du carr). La feuille de carton peut tre rectangulaire et dans ce cas x variera de 0 la moiti de la mesure de la largeur. Ce type de problmes est appel un problme doptimisation. La rsolution de ce problme consiste dterminer une valeur approche de x o la fonction admet un maximum. Cette valeur permet de produire une bote dont le volume est maximum et par la suite permet doptimiser ce phnomne et assurer les meilleures conditions de rentabilit, de production, Pour dterminer la valeur approche de x on peut utiliser la fonction suivante : FN VALEUR_DE_X ( pas : Rel) : Rel

209

Les algotithmes dapproximations

Chapitre

7
- pas : reprsente le pas de variation de X. Analysez puis dduisez un algorithme solution cette fonction. Spcification de la fonction Valeur_de_x Rsultat = x Traitement = - Le domaine de variation de la variable x est de 0 5. - La solution comporte une structure itrative condition darrt Rpter Jusqu pour couvrir toutes les valeurs de x avec un pas donn. - Pour chaque itration, nous allons : - calculer la valeur du volume - comparer cette valeur la valeur du volume maximum, si elle est suprieure alors, nous changeons la valeur du volume maximum et nous mmorisons la valeur de x. - la fonction retourne la valeur mmorise de x. - Noublions pas dinitialiser la valeur de x et celle du volume maximum 0. Algorithme Lalgorithme de la fonction FN VALEUR_DE_X peut tre prsent comme suit : DEF FN Valeur_de_x (pas : Rel) : Rel Xmax 0 Vmax 0 Rpter x x+pas V 4*x*x*x-40*x*x+100*x Si Vmax V alors Xmax x Vmax v Fin si Jusqu' (x 5) 4) Valeur_de_x Xmax 5) Fin Valeur_de_x Le tableau suivant prsente le rsultat de lexcution du programme prcdent pour des valeurs de pas variant entre 10-1 et 10-5. Valeur du Pas 0.1 0.01 0.001 0.0001 0.00001 Valeur approche de X 1.8000000000 1.6800000000 1.6680000003 1.6667999967 1.6666799750
210

0) 1) 2) 3)

Valeur approche du volume 73.728 74.071 74.074 74.074 74.074

Constatations Sachant que la valeur exacte de x qui correspond un volume maximum est thoriquement gale 10/6, donc de lordre de 1.666666666666666.. Remarquons que si la valeur du pas diminue, on sapproche de plus en plus de la valeur exacte de X. 2. Application On se propose de dterminer le taux dintrt maximal choisi pour doubler un capital plac dans une banque durant une priode de 5 ans. La valeur du capital et le pas de variation du taux dintrt sont des donnes.

Solution 1. cap, taux et pas dsignent respectivement le capital placer dans la banque, le taux dintrt initial et le pas de variation adopt. 2. A la fin du premier mois, le capital obtenu est : Cm1=cap + (cap*taux)/100 - A la fin du deuxime mois, le capital obtenu est : Cm2=cm1 + (cm1*taux)/100 . . 3. A la fin du mois N 60 (aprs 5 ans de placement), le capital obtenu est : Cm60=cm59 + (cm59*taux)/100 Cm60 reprsente la valeur du capital aprs 5 ans de placement. Pour avoir une valeur de cm60 gale ou trs proche de 2*cap (double de capital) on doit refaire les calculs avec chaque fois une nouvelle valeur du taux dintrt gale taux+pas. Pour dterminer la valeur approche de taux on peut utiliser la fonction suivante : FN VALEUR_DE_TAUX (cap, pas : Rel) : Rel 4. cap : reprsente le capital placer dans la banque. 5. pas : reprsente la valeur de pas de variation du taux dintrt. Lalgorithme de la fonction FN VALEUR_DE_TAUX peut tre prsent comme suit : 0) DEF FN VALEUR_DE_TAUX (cap,pas : Rel) : Rel 1) Tauxpas 2) Rpter Cpcap pour i de 1 60 rpter c cp+(cp*taux)/60 cpc finpour taux taux+pas Jusqu' (c>=2*cap) 3) VALEUR_DE_TAUX taux-pas 4) Fin VALEUR_DE_TAUX
211

Les algotithmes dapproximations

Chapitre

7
Le programme Pascal ainsi obtenu est le suivant : Program Placement; Uses Wincrt; Var cap,taux,pas,x,x1:Real; Function VALEUR_DE_TAUX(cap,pas : Real) : Real ; Var c,cp : Real ; i:integer; Begin taux:=pas; Repeat cp:=cap; For i :=1 to 60 do Begin c :=cp+(cp*taux)/100 ; cp :=c ; End ; taux:=taux+pas; Until (c>=2*cap); VALEUR_DE_TAUX:=taux-pas; End ; Function VALEUR_DE_CAPITAL(cap,taux : Real) : Real ; Var c,cp : Real ; i:integer; Begin cp:=cap; For i :=1 to 60 do Begin c :=cp+(cp*taux)/100 ; cp :=c ; End ; VALEUR_DE_capital:=c; End ; Begin Write ('Donner la valeur du capital:'); Readln(cap); Write ('Donner la valeur du pas de variation du taux d''intrt:'); Readln(pas); X:=VALEUR_DE_TAUX(cap,pas); Writeln('La valeur approche du taux d''intrt pour doubler un capital aprs 5 ans de placement est = ',X:10:5); X1 := VALEUR_DE_CAPITAL(cap,X); Write('La valeur approche du capital aprs 5 ans de placement est = ',X1:10:5); End.
212

Remarques :
Les fonctions VALEUR_DE_TAUX et VALEUR_DE_CAPITAL peuvent tre remplaces par une procdure ayant deux paramtres variables : taux et capital. Le tableau suivant nous prsente le rsultat de lexcution du programme prcdent pour un capital de 5000 et pour diffrentes valeurs de pas. Valeur du Pas 0.01 0.001 0.0001 0.00001 Valeur approche du taux dintrt 1.17000 1.16200 1.16200 1.16195

Valeur approche du capital aprs 5 ans de placement 10047.893 10000.332 10000.332 10000.035

Constatations : Daprs le tableau prcdent on remarque que la valeur la plus proche du double de capital est obtenue pour une valeur du pas trs faible. Donc plus lerreur diminue la prcision augmente, et par consquent la valeur obtenue tend vers la meilleure solution du problme pos.

III. Problmes dapproximations


1.
Rsolution dun problme dapproximation Dans un triangle ABC rectangle en A tel que AB=3 cm et AC=2 cm ; on place un point M sur le segment [AB] tel que AM=x. N est la projection de M sur (BC) paralllement (AC). P est la projection de N sur (AC) paralllement (AB).

On veut trouver la valeur (ou les valeurs de x telles que le rectangle AMNP ait pour aire 1 cm2.

213

Les algotithmes dapproximations

Chapitre

7
Pour rsoudre ce problme, nous pouvons utiliser la dmarche suivante : Exprimer laire du rectangle en fonction de x. Ecrire lalgorithme dune fonction permettant de trouver les valeurs de x qui donne une aire de rectangle trs proche de 1. Essayons dexprimer laire du rectangle en fonction de x. Nous savons que : Le triangle ABC est rectangle en A AB = 3 AC = 2 Dautre part, le triangle ABC est form par : Le triangle MBN rectangle en M. Le rectangle AMNP. Le triangle PNC rectangle en P.
Laire du triangle ABC est gale la somme des aires du triangle MBN, du triangle PNC et du rectangle AMNP.

Laire de ce triangle est : (3*2)/2 =3

On suppose que X reprsente la longueur du rectangle AMNP et Y reprsente sa largeur, on peut donc crire : (X*Y)+(3-X)*Y/2+(2-Y)*X/2=3 (X*Y)+3*Y/2-X*Y/2+X-X*Y/2=3 (X*Y)+3*Y/2-(X*Y)=3-X 3/2*Y=3-X ce qui donne la largeur Y=(2-2/3*X) par suite laire du rectangle AMNP est : X*Y=-2/3*X2+2*X=1 -2/3*X2+2*X-1=0 Remarquons que cest un polynme de second degr dont les solutions ne sont pas des valeurs exactes. On est appel trouver la valeur approche de X qui est solution de cette quation. Pour dterminer la valeur approche de X, on peut utiliser la fonction suivante : FN VALEUR_DE_X (Pas : Rel) : Rel Pas : reprsente la valeur du pas. Cette valeur donne la prcision sur la valeur approche de X. Lalgorithme de la fonction VALEUR_DE_X peut tre prsent comme suit : 0- DEF FN VALEUR_DE_X (Pas : Rel) : Rel 1- X 0 2- Rpter X X+Pas A -2/3*(X*X)+2*X Jusqu' (A>=1) 3- VALEUR_DE_X X-Pas 4- Fin VALEUR_DE_X
214

Le programme Pascal ainsi obtenu est le suivant : Program Rectangle; Uses Wincrt; Var a,pas,X:Real; Function VALEUR_DE_X(Pas : Real) : Real ; Var X,A : Real ; Begin X := 0; Repeat X := X+Pas ; A := ((-2/3)*(X*X))+(2*X) ; Until (A>=1); VALEUR_DE_X:=X-Pas; End; Begin Write ('Donner le Pas :');Readln(Pas); X:=VALEUR_DE_X(pas); A := ((-2/3)*(X*X))+(2*X); Write('La valeur approche de X = ',X:0:10, 'la valeur Approche de l''aire = ',A:0:10); End. Le tableau suivant nous prsente le rsultat de lexcution du programme prcdent pour des valeurs de pas variant entre 10-2 et 10-6 Valeur du Pas Valeur approche de X 0.01 0.6300000000 0.001 0.6330000001 0.0001 0.6339000007 0.00001 0.6339700011 0.000001 0.6339740299 Constatations : Daprs le tableau prcdent, on remarque que la valeur la plus proche de 1 est obtenue pour une valeur du pas trs faible. Donc plus lerreur diminue, plus la prcision augmente, et par consquent la valeur obtenue est la valeur la plus proche de la solution exacte. Cest lobjectif quon vise suite lutilisation des algorithmes dapproximations. Valeur approche de laire 0.9954000000 0.9988740001 0.9999138608 0.9999946940 0.9999993461

215

Les algotithmes dapproximations

Chapitre

7
2. Application : Rsolution de lquation f(x)=0 Soit une fonction f continue monotone sur un intervalle [a,b], cette fonction ne sannule quune seule fois. Ecrire un programme Pascal permettant de calculer et dafficher le Zro de cette fonction (la valeur approche de x telle que f(x)=0), avec une prcision Epsilon. Les valeurs a,b et epsilon sont des donnes. Solution Soit f est une fonction continue monotone sur un intervalle [a,b]. Cette fonction ne sannule quune seule et unique fois dans lintervalle [a,b]. Pour dterminer le zro de cette fonction, nous devons savoir que toutes les quations n'admettent ncessairement pas une expression correcte de la solution. Donc dans certains cas on doit se contenter de la valeur approche de cette solution. Pour parvenir cette solution, on peut utiliser plusieurs mthodes. Dans ce chapitre on sintresse la mthode de recherche de zro dune fonction par dichotomie. Dans le chapitre IV de ce manuel, vous avez vu la recherche dichotomique qui consiste chercher en subdivisant la srie ordonne en deux parties gales et vrifier dans quelle partie figurerait la valeur recherche, puis ritrer ce processus. En effet la mthode de dichotomie consiste : diviser lintervalle [a,b] par 2. Soit m le milieu de lintervalle [a,b]. Si f(m) et f(a) sont de mme signe, le zro recherch est dans lintervalle [m,b], sinon il est dans lintervalle [a,m]. Le processus sarrte lorsque lintervalle (b-a) devient infrieur ou gal la valeur de la prcision epsilon, dans ce cas, le milieu m de lintervalle [a,b] correspond la valeur approche de la solution de lquation f(x)=0. Ci dessous est lalgorithme dune fonction ZERO_FONCTION qui retourne la valeur approche de la solution de lquation f(x)=0 une prcision epsilon dans un intervalle [a,b]. 0- DEF FN ZERO_FONCTION (a,b,epsilon :Rel ) : Rel 1- m(a+b)/2 2- Tant que ((b-a)>epsilon) et (FN f(m)<>0) faire Si (FN f(a)*FN f(m)>0) Alors { f(a) et f(m) sont de mme signe} am Sinon bm Finsi m(a+b)/2 Fin Tant que 3- ZERO_FONCTIONm 4- Fin ZERO_FONCTION
216

Le programme Pascal ainsi obtenu est le suivant : Program Recherche_de_zero_par_dichotomie; Uses Wincrt; Var a,b,epsilon:Real; Function f(x : Real) : Real ; begin {Il est ncessaire de dfinir la fonction f} end; Function ZERO_FONCTION(a,b,epsilon:Real) : Real ; Var m : Real ; Begin m:=(a+b)/2; While ((b-a)>epsilon) and (f(m)<>0) do Begin If (f(a)*f(b)>0) then a:=m Else b:=m; m:=(a+b)/2; End; ZERO_FONCTION:=m; End ; Begin Write ('Donner la valeur de a = ');Readln(a); Write ('Donner la valeur de b = ');Readln(b); Write ('Donner la valeur de la prcision = ');Readln(epsilon); Write('La fonction f sannule en x= ', ZERO_FONCTION(a,b,epsilon) :0:10) ; End.

217

Les algotithmes dapproximations

Exercices
Exercice 1 :
Soit un triangle quilatral ABC dont le cot mesure a en cm. On inscrit dans ce triangle un rectangle MNPQ. On pose BM=X

On se propose de dterminer la valeur de X tel que laire du rectangle soit maximale.

Questions
1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal.

Exercice 2 :
Chaque page dun livre imprimer comporte un rectangle daire 300 cm2 pour le texte, des marges mesurant 2 cm sur les bords horizontaux et 1,5 cm sur les bords verticaux

cm2

218

Exercices
On se propose de dterminer les dimensions des pages pour que la consommation du papier soit minimale.

Questions
1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal.

Exercice 3 :
A laide dune plaque mtallique, on veut fabriquer des botes cylindriques de mme volume 2 p dm3. On se propose de dterminer la hauteur et le rayon de base de lune des botes pour que la quantit du mtal utilis soit minimale.

Questions
1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal.

Exercice 4 :
Un disque de rayon 5 cm est tangent deux disques intrieurs tangents entre eux. Les trois centres sont aligns. On veut dterminer la valeur du rayon dun des deux disques intrieurs pour que laire comprise entre le grand disque et les deux disques intrieurs soit maximum.

On se propose de chercher la valeur approche du rayon.

Questions
1- Dcomposez ce problme en modules et analysez chacun des modules proposs. 2- Traduisez la solution en un programme Pascal.
219

Lecture
Algorithme d'optimisation
Un article de Wikipdia, l'encyclopdie libre.

Les algorithmes doptimisation cherchent dterminer le jeu de paramtres dentre dune fonction donnant cette fonction la valeur maximale ou minimale. On cherchera par exemple la dcoupe optimale dune tle pour en fabriquer le plus grand nombre de botes de conserve possibles (ou dun tissu pour en faire le plus grand nombre de chemises possibles, etc.). Cette optimisation peut se faire sans contrainte ou sous contrainte, le second cas se ramenant au premier dans le cas des fonctions drivables par la mthode du multiplicateur de Lagrange (et des fonctions non-drivables par lalgorithme dEverett). Le problme est bien entendu insoluble en tant que tel si lon ne connat rien de la fonction (il existe peut-tre une combinaison trs particulire de valeurs dentres lui donnant ponctuellement une valeur extrmement haute ou basse, qui pourrait chapper lalgorithme. Aussi existe-t-il plusieurs classes dalgorithmes lis aux diffrentes connaissances quon peut avoir sur la fonction. Si celle-ci est drivable, lune des plus performantes est celle du gradient conjugu. Aucune mthode connue en 2004 ( part bien entendu lnumration exhaustive ou lanalyse algbrique) ne permet de trouver avec certitude un extremum global dune fonction. Les extrema dterminables sont toujours locaux un domaine, et demandent souvent mme en ce cas quelques caractristiques la fonction, par exemple dans certains cas la continuit. Les mtaheuristiques sont une classe dalgorithmes doptimisation qui tentent dobtenir une valeur approche de loptimum global dans le cas de problmes doptimisation difficiles. Elles ne donnent cependant aucune garanties sur la fiabilit du rsultat.

220

Lecture
Algorithme d'approximation
Un article de Wikipdia, l'encyclopdie libre.

Un algorithme d'approximation calcule une solution approximative d'un problme en un temps raisonable (en gnral polynomial), mais il se diffrencie d'une heuristique par le fait qu'il offre en plus un rapport d'approximation que l'on peut prouver. On distingue deux types d'approximation : sous forme de distance k l'optimal et sous la forme de rapport l'optimal. Si, pour un problme donn, V est la valeur de la solution exacte et A la valeur de la solution approche ; on crira la premire A - V = k et la seconde A = 1- . V Il existe deux classes d'algorithmes d'approximation polynomiaux pour le second type de rapport d'approximation : les PTAS (de l'anglais : Polynomial Time Approximation Scheme) et les FPTAS (toujours de l'anglais : Fully Polynomial Time Approximation Scheme). Les premiers ont une complexit temporelle polynomiale en la taille du problme (disons n), par exemple O(n ) alors que les seconds sont polynomiaux en la taille du problme et en la qualit de l'approximation, par exemple o(n2 + 1 )
1

Les FPTAS sont, en gnral, meilleurs que les PTAS, au prix d'une complexit spatiale plus importante.

221

Lecture
Le poids du papier et le poids du temps
Un rcent calcul a permis d'obtenir 51 539 600 000 dcimales pour le nombre PI. Sachant qu'une feuille de format A4 (21x29,7cm) pse environ 5 grammes et que sur chaque feuille on peut crire 66 lignes de 80 chiffres soit 5280 dcimales il faut donc 51 539 600 000 / 5280 pages soit en ordre de grandeur environ 10 millions de pages 5 grammes chacune. Le poids du papier ncessaire pour crire le rsultat est donc 50 millions de grammes soit 50 000 kilogrammes=50 tonnes. Il vaut mieux ne pas tenter cette impression sur votre imprimante, elle n'y survivrait pas, sans parler du cot du papier, de l'encre. Si on dispose d'une imprimante personnelle de type 4 pages par minute, il faudrait 2 500 000 minutes soit plus de 40000 heures et donc 1730 jours c'est dire plus de quatre ans !
Daprs http:// perso.wanadoo.fr/Jean-francois.groussin/ nbrpi.htm #poidsdepi

Si vous auriez besoin de prcision, voici les premires 2000 dcimales de


3, 1415926535 5820974944 8214808651 4811174502 4428810975 4564856692 7245870066 7892590360 3305727036 0744623799 9833673362 6094370277 0005681271 8979323846 5923078164 3282306647 8410270193 6659334461 3460348610 0631558817 0113305305 5759591953 6274956735 4406566430 0539217176 4526356082 2643383279 0628620899 0938446095 8521105559 2847564823 4543266482 4881520920 4882046652 0921861173 1885752724 8602139494 2931767523 7785771342
222

6939937510 3421170679 5359408128 5493038196 2712019091 0249141273 9171536436 9415116094 3105118548 8301194912 1907021798 7669405132 7363717872

5028841971 8628034825 5058223172 6446229489 3786783165 1339360726 9628292540 1384146951 8193261179 8912279381 6395224737 8467481846 7577896091

Lecture
1468440901 4201995611 5187072113 5024459455 7101000313 5982534904 1857780532 3809525720 0353018529 5574857242 8175463746 8583616035 9448255379 9331367702 2533824300 6782354781 5570674983 3211653449 6369807426 8164706001 1613611573 4547762416 5688767179 8279679766 7392984896 0674427862 4677646575 2249534301 2129021960 4999999837 3469083026 7838752886 2875546873 1712268066 1065485863 6899577362 4541506959 4939319255 6370766010 7747268471 8989152104 3558764024 6360093417 8505494588 8720275596 5425278625 6145249192 5255213347 8625189835 0494601653 8145410095 0841284886 2039194945 7396241389 4654958537 8640344181 2978049951 4252230825 5875332083 1159562863 1300192787 2788659361 2599413891 5082953311 0604009277 4710181942 0404753464 7521620569 7496473263 2164121992 5869269956 0236480665 5181841757 1732172147 5741849468 6948556209 4668049886 3883786360 2694560424 0471237137 0865832645 1050792279 5981362977 0597317328 3344685035 8142061717 8823537875 6611195909 5338182796 2497217752 6861727855 0167113900 9555961989 6208046684 6602405803 9141992726 4586315030 9092721079 4991198818 4672890977 7235014144 4385233239 9219222184 2723279178 9506800642 1965285022 8696095636 9958133904 6892589235 4771309960 1609631859 2619311881 7669147303 9375195778 2164201989 8230301952 8347913151 8890750983 9848824012 4676783744 2590694912 8150193511 0426992279 2861829745 7509302955 3479775356 7727938000 1973568548 0739414333 2725502542 6085784383 2512520511 2106611863 4371917287 7802759009

223

Lecture
Mthode de calcul de en utilisant la formule de W.Leibniz (1646 - 1716)
Leibniz a dmontr que la somme suivante : 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...... tend vers /4 On se propose de calculer la valeur approche de peut utiliser la fonction suivante :

en utilisant cette mthode. On

FN CALCUL_Pi_LIBNIZ (epsilon : rel) : Rel


Epsilon 0.01 0.001 0.0001 0.00001 0.000001 0.0000001 Constatation Le tableau suivant prsente les valeurs approches de en utilisant trois mthodes. Valeur Approche de Pi 3.1611986130 3.1435886596 3.1417926136 3.1416126537 3.1415946569 3.1415928896

Epsilon 0.01 0.001 0.0001 0.00001 0.000001 0.0000001

Valeur Approche de Valeur Approche Valeur Approche de par formule de de par formule de par formule de EULER WALLIS LEIBNIZ 3.0574815067 3.1120738386 3.1321704262 3.1362974216 3.1362974216 3.1362974216 3.0386736289 3.1035169616 3.1292486214 3.1376582906 3.1403412722 3.1411965108 3.1611986130 3.1435886596 3.1417926136 3.1416126537 3.1415946569 3.1415928896

Sachant que, la valeur de avec les 10 premiers dcimaux exacts est 3.1415926535. On remarque que, la formule la plus prcise est celle de LEIBNIZ.

224

Lecture
Epsilon reprsente lerreur et par la suite dfinit la prcision de la valeur approche calcule. 0) DEF FN CALCUL_Pi_LEIBNIZ(epsilon :rel) : Rel 1) [S0, i-1, Err1, Signe1] Tant que (Err>=epsilon) faire ii+2 Err1/i Signe -Signe SS+Err*Signe Fin tant que 2) CALCUL_Pi_LEIBNIZ 4*S 3) Fin CALCUL_Pi_LEIBNIZ

Le programme Pascal ainsi obtenu est le suivant :

Program Valeur_approchee_Pi; Uses Wincrt; Var epsilon:Real; Function CALCUL_Pi_LEIBNIZ (epsilon :Real) : Real; Var S,Err:Real; i,Signe:Integer; Begin S:=0;i:=-1;Err:=1;Signe:=-1; WHILE (Err>=epsilon) DO BEGIN i:=i+2; Err:=1/i; Signe:=-Signe; S:=S+Err*Signe; END; CALCUL_Pi_LEIBNIZ:=4*S; End; Begin Write('Donner la valeur de la prcision =');Readln(epsilon); Write('La valeur approche de Pi = ', CALCUL_Pi_LEIBNIZ(epsilon) :0:10) ; End.

225

Lecture
Dfinitions de Algorithme sur le Web
L'algorithmique est la science des algorithmes, visant tudier les oprations ncessaires la ralisation d'un calcul. fr.wikipedia.org/wiki/Algorithme procd de calcul, srie d'noncs indiquant les oprations faire pour obtenir un certain rsultat recherch www.mcxapc.org/static.php Procdure systmatique visant rsoudre un problme ou atteindre une fin donne, en particulier par un ordinateur. www.hc-sc.gc.ca/francais/organesettissus/glossaire/ Ensemble de rgles servant rsoudre des tches, y compris non mathmatiques, laide dun ordinateur. Ex : algorithme de codage. www.jessica-puce.prd.fr/glossaire-electronique/Glossaire.asp Groupement combin d'lments permettant d'obtenir un rsultat dtermin. Terme utilis en synthse sonore par modulation de frquence : il dsigne la combinaison des "oprateurs". www-rocq.inria.fr/qui/Philippe.Deschamp/divers/jcassard.html Formule ou ensemble d'tapes qu'on applique pour rsoudre un problme en particulier. Un algorithme doit avoir un ensemble de rgles sans ambigut et un point limite bien dfini. www.collectionscanada.ca/vrc-rvc/s34-151-f.html 1) En synthse FM, l'algorithme reprsente le schma de raccordement des oprateurs porteurs et modulateurs. clborne.club.fr/lexa.html suite d'instruction qui sert crire une fonction. securinet.free.fr/lexique.html Ensemble dinstructions logiques organises pour rsoudre un problme. playmendroit.free.fr/Lexique.htm ensemble de rgles permettant de chiffrer ou de dchiffrer un ensemble de donnes ogloton.free.fr/glossaire.html

226

Lecture
Dfinitions de Algorithme sur le Web
Rgle (souvent mathmatique) qui rgit des processus informatiques. Il s'agit ici de processus de compression de fichier. www.rcip.gc.ca/Francais/Contenu_Numerique/Petits_Musees/glossaire.html (algorithm) : jeu de rgles ou de procdures bien dfini qu'il faut suivre pour obtenir la solution d'un problme dans un nombre fini d'tapes. www.mines.inpl-nancy.fr/~tombre/Java/PolyJava/tcinfo012.html De Al-Kharezmi, mathmaticien arabe. Mthode de calcul dont les tapes sont prcisment dtermines, afin de parvenir un rsultat final. La compression des images fait appel une srie dalgorithmes. www.aevll.org/gloss/photo.htm Formule mathmatique intervenant dans la rduction de dbit, la compression des squences vido. Les algorithmes utilisent notamment la compression temporelle et la rduction spatiale. www.loftv.com/index.php3 Solution un problme prsent sous forme dune succession dtapes. Chaque tche excuter au sein dun programme donne lieu un algorithme. users.pandora.be/martin.melchior/fr/lexique.html suite prdfinie de plusieurs rotations de faces et qui, applique au cube permet de passer d'un tat un autre tat o l'on a rsolu une partie du cube, ou alors d'avancer dans la rsolution : entre chaque tape de la rsolution on applique un algorithme une ou plusieurs fois pour passer l'tape suivante. L'algorithme s'effectue sans tourner le cube : seules ses faces tournent une une. cubeland.free.fr/glossaire/glossairefr.htm ensemble des rgles opratoires propres un calcul ou un traitement i nformatique. www.fsa.ulaval.ca/personnel/vernag/EH/F/cons/lectures/Glossaire%20de% 20la%20cyberguerre.htm est un systme mathmatique avanc de programmation pour dterminer quelle page est la plus pertinente la requte du client. Les spcialistes du rfrencement analysent les algorithmes des moteurs de recherche afin de rpondre leurs critres. Chaque moteur de recherche dispose de son propre algorithme. Il est bas sur des variables dans les facteurs internes et dans certains facteurs externes aux pages. ... www.a-yant.com/internet-A.php

227

Lecture
Dfinitions de Algorithme sur le Web
Dans les effets numriques, ce mot dsigne la manire dont les calculs sont effectus l'intrieur d'un programme permettant de modifier le son original www.audio-maniac.com/glossaire_AB.htm C'est l'ensemble des oprations logiques permettant de raliser une action particulire : crypter un message, trier des fiches sur une base de donnes, comprimer des fichiers, changer la dfinition d'images, etc. Ce n'est pas un programme mais une suite d'opration qu'un programmeur pourra traduire dans un langage informatique de son choix pour en faire un programme ou une partie de programme. ... www.portices.univ-montp1.fr/Dimet/Ressources/_Glossaire/A.html nm (terme spcifique aux mathmatiques) Un algorithme est une suite de raisonnements ou de claculs qui fournit la solution de certains problmes. perso.wanadoo.fr/mussmuss/kryptos/glossaire.htm mthode mathmatique et informatique. www.univ-pau.fr/~puiseux/simulation/article/glossaire.htm Description des actions ncessaires l'accomplissement d'une tche. Le rsultat est un enchanement de toutes les actions pour excuter une tche. Pour concevoir l'algorithme d'une tche complexe, il faut segmenter cette tche en oprations plus simples. ici.cegep-ste-foy.qc.ca/employes/rmorin/javascript/lexique01.html

228

Annexe
HEX DEC CAR 0 0 NUL 1 1 SQH 2 2 STX 3 3 ETX 4 4 EOT 5 5 ENQ 6 6 ACK 7 7 BEL 8 8 BS 9 9 HT A 10 LF B 11 VT C 12 FF D 13 CR E 14 SO F 15 SI 10 16 DLE 11 17 DC1 12 18 DC2 13 19 DC3 14 20 DC4 15 21 NAK 16 22 SYN 17 23 ETB 18 24 CAN 19 25 EM 1A 26 SUB 1B 27 ESC 1C 28 FS 1D 29 GS 1E 30 RS 1F 31 US HEX DEC CAR 20 32 21 33 ! 22 34 " 23 35 # 24 36 $ 25 37 % 26 38 & 27 39 ' 28 40 ( 29 41 ) 2A 42 * 2B 43 + 2C 44 , 2D 45 2E 46 . 2F 47 / 30 48 0 31 49 1 32 50 2 33 51 3 34 52 4 35 53 5 36 54 6 37 55 7 38 56 8 39 57 9 3A 58 : 3B 59 ; 3C 60 < 3D 61 = 3E 62 > 3F 63 ? HEX DEC CAR 40 64 @ 41 65 A 42 66 B 43 67 C 44 68 D 45 69 E 46 70 F 47 71 G 48 72 H 49 73 I 4A 74 J 4B 75 K 4C 76 L 4D 77 M 4E 78 N 4F 79 O 50 80 P 51 81 Q 52 82 R 53 83 S 54 84 T 55 85 U 56 86 V 57 87 W 58 88 X 59 89 Y 5A 90 Z 5B 91 [ 5C 92 \ 5D 93 ] 5E 94 ^ 5F 95 _ HEX DEC CAR 60 96 ` 61 97 a 62 98 b 63 99 c 64 100 d 65 101 e 66 102 f 67 103 g 68 104 h 69 405 i 6A 106 j 6B 107 k 6C 108 l 6D 109 m 6E 110 n 6F 111 o 70 112 p 71 113 q 72 114 r 73 115 s 74 116 t 75 117 u 76 118 v 77 119 w 78 120 x 79 121 y 7A 122 z 7B 123 { 7C 124 | 7D 125 } 7E 126 ~ 7F 127

Les autres pages de codes ne sont pas standards, nous ne les reproduisons pas.

229

Bibliographie
Lalgorithmique de la pratique la thorie G-CHATTY et J-VICARD Edition CEDIC 1983 Informatique en SUP et en SPE B-PETAZZONI Ellipses 1989 Initiation lanalyse et la programmation J-P-LAURENT et J-VIGNES Edition DUNOD 1985 Programmation Pascal avec TP B-S- GOTTFRIED Edition Srie Schaum Initiation la programmation : Turbo Pascal E-Amzallag et J-BEN-AIM Edition Magnard Borland A practical introduction to Pascal I-R-WILSON and A-M-ADDYMAN The Macmillan Computer science series 1982 Mathmatique Elmentaires dun point de vue algorithmique A-ENGEL CEDIC 1979 A structured programming approach to data D-Coleman The Macmillan Computer science series 1982 Mastering C G-BOLON BPB Publications 1988

230

Bibliographie
Introduction to programming K-H-OLSEN Digital 1988 Micro Maths C-DIXONCollins Educational 1985 Aide mmoire de Turbo Pascal J-M-De GROOTE et VIRGA Marabout Informatique Informatique . Algorithmes en Pascal et en C Y-GRAJON Dunod 2000 Computer studies for you S-DOYLE Anchor Brendon 1987 Understanding computer science for advanced level R-BRADLEY Hutchinson Education 1987

231

Webographie
www.netalya.com/Fr/Algo_intro www.Commentcamarche.net/algo www.wikipedia.org/wiki/Algorithmique www.aigespc57.cicrp.jussieu.fr/algo www.igm.univ-mlv.fr http://brassens.upmf-grenoble.fr/IMSS/limass/algoprog/algoref.html http://asi.insa-rouen.fr/enseignement/siteUV/ALGO www.france-ioi.org/train/algo www.ipstu-strasbg.fr/pat/program/algo www.lwh.free.fr/pages/plan

232