Vous êtes sur la page 1sur 232

Rpublique Tunisienne

Ministre de l'Education et de la Formation

INFORMATIQUE
4me anne de l'enseignement secondaire
Sections : Mathmatiques Sciences exprimentales Sciences techniques

Les auteurs
Kamel BEN RHOUMA
Matre Assistant l'ENSI

Rached DOUARI
Inspecteur principal

Slim GHARBI
Professeur de l'enseignement secondaire

Les valuateurs
Moncef GAFSI
Matre Assistant l'ENSI

Abdelhafidh ABIDI
Inspecteur principal

Centre National Pdagogique

Tous droit rservs au Centre National Pdagogique

Prface
Le prsent manuel est conforme au nouveau programme d'informatique de 4me anne des sections scientifiques savoir la section Mathmatiques, Sciences Exprimentales et Sciences Techniques. Il est compos de six chapitres rpartis en leons. Chaque leon est compose d'un nombre de concepts et d'activits homognes. Nous pensons que cette partition aidera le lecteur se faire une reprsentation claire des diffrents objets d'apprentissage contenus dans ce livre. Notons que plusieurs concepts ont t vus en classe de troisime et par consquent l'un des objectifs de ce livre est de les rappeler et de les approfondir tout en ajoutant d'autres apprentissages. Notons que l'objectif fondamental reste la rsolution de problmes, la dduction d'algorithmes et la traduction des ces derniers en programmes informatiques excutables par un ordinateur. Sur le plan mthodologique, nous allons continuer d'adopter l'approche inductive qui, grce des activits simples et cibles et d'une faon progressive, conduira l'lve dcouvrir par lui mme les concepts prconiss. Nous allons continuer cet apprentissage en utilisant la mme approche qu'en classe de troisime en l'occurrence l'approche descendante. Nous utiliserons la grille d'analyse qui aide l'organisation et la systmatisation de l'analyse d'un problme. Quant au langage de programmation, nous allons continuer dvelopper en Pascal pour des raisons de commodits pdagogiques et logistiques. Sur le plan progression conceptuelle, nous commenons ce livre par les structures de donnes puis on aborde les diffrentes structures de contrle. Les leons qui composent chaque chapitre traitent des notions proches et cohrentes. Le premier chapitre traite les structures simples, les types standards et les diffrentes reprsentations que leur rserve la plupart des langages et particulirement le langage Pascal. Le second chapitre est rserv aux actions lmentaires simples. On y fait un rappel sur l'affectation, ensuite l'action de sortie et enfin l'action d'entre. Nous traitons ensuite les structures de contrle conditionnelles avec ses diffrentes formes : simple et gnralise. Dans le quatrime chapitre, nous traitons les structures de contrle itratives compltes et les structures de contrle itratives condition d'arrt. Cela va nous permettre de rsoudre entre autres les problmes rcurrents. Ces outils sont la base du dveloppement et de l'criture de modules que ce soient fonctions ou procdures. En effet, les sous-programmes sont la base de l'approche modulaire adopte dans ce livre. Nous terminons ce livre par les traitements avancs o nous dveloppons les mthodes de tri usuelles savoir le tri par slection, le tri bulles et le tri par insertion ainsi que les mthodes de recherche dans un tableau savoir la recherche squentielle et la recherche dichotomique. Chaque concept est prsent travers une ou plusieurs activits permettant l'lve de construire son savoir et de dduire lui-mme les notions vises. Une rcapitulation concise termine chaque leon en permettant de retenir les points importants du cours. Nous proposons la fin de chaque leon ou chapitre une srie d'exercices difficult croissante permettant aux lecteurs de s'exercer et de s'auto valuer. Le quota horaire par leon n'est pas forcment une sance de deux heures. Nous mettons la disposition du lecteur une bibliographie rfrencielle de ce livre. Elle pourra vous guider pour d'autres lectures. Nous esprons que ce manuel vous apportera l'aide ncessaire pour russir un bon apprentissage du programme correspondant. Toutefois, nous vous serons reconnaissants de bien vouloir nous faire part de vos suggestions et de vos remarques. Les auteurs.
3

Sommaire
Prface Sommaire
3 4

C C C C C C

hapitre 1 hapitre 2

Les structures de donnes

Les actions lmentaires simples

43

hapitre 3 hapitre 4

Les structures de contrle conditionnelles

70

Les structures de contrle itratives

104

hapitre 5

Les sous-programmes

143

hapitre 6

Les traitements avancs

195

Bibliographie Annexe

231

232

CHAPITRE

Chapitre I
Les structures de donnes

Objectifs :
- Montrer limportance de la notion de variable - Identifier et manipuler les diffrents types de donnes

Plan du chapitre :
Leon 1 : Les variables et les types standard de donnes Leon 2 : Les expressions Leon 3 : Le type scalaire numr et le type intervalle Leon 4 : Les tableaux une dimension
Nous rappelons dans ce chapitre des notions fondamentales telles que la constante, la variable, les types de donnes, les diffrents types dexpression et les tableaux. Toutes ces entits sont manipules dans les algorithmes. Un algorithme est une suite finie d'instructions permettant de rsoudre un problme.

Leon

Les variables et les types standard de donnes


Objectifs spcifiques :
Identifier et manipuler les constantes et les variables. Manipuler les types standard. Manipuler les procdures et les fonctions prdfinies.

Plan de la leon :
I. Les constantes et les variables II. Les types de donnes II.1. Les types numriques II.2. Le type boolen II.3. Le type caractre II.4. Le type chane de caractres Retenons Exercices

Les structures de donnes

Leon

Les variables et les types standard de donnes


C'est une simplification en prsense de l'objet concret infiniment complexe et perptuellement changeant, simplification qui nous est impose soit par les ncessits de l'action soit par les exigences de l'entendement, et qui consiste considrer un lment de l'objet comme isol alors que rien n'est isolable, et comme constant alors que rien n'est en repos.
ALAIN

I. Les constantes et les variables


Dfinition Une constante est un objet ayant une valeur fixe tout le long de l'excution d'un algorithme ou d'un programme. Une constante est caractrise par : son nom (un identificateur unique). sa valeur. Activit 1 Identifier quelques constantes utilises dans votre cours de mathmatique. Rponse : La constante g, utilise dans le calcul du poids, vaut 9.81. La constante pi, utilise dans le calcul trigonomtrique, vaut 3.141. Ces constantes seront dclares dans le langage PASCAL de la manire suivante : CONST g = 9.81 ; pi = 3.141 ; Dfinition On appelle variable un objet pouvant prendre diffrentes valeurs tout le long de l'excution d'un algorithme ou d'un programme. Une variable est caractrise par : son nom (un identificateur unique) son type son contenu.
7

Les structures de donnes Remarques : 1- Le choix de l'identificateur d'un objet doit tre fait de manire tre le plus significatif possible. 2- Lorsqu'on dclare une variable, on rserve en mmoire vive (RAM) un espace mmoire propre la variable. En effet, la variable constitue le moyen de stocker les donnes. C'est pour cette raison que la notion de variable est une notion fondamentale en algorithmique. Gnralement, l'opration permettant de changer le contenu d'une variable est l'affectation. Pour russir un algorithme, il faudra d'une part dclarer les diffrentes variables utiles et ncessaires pour le bon droulement de l'algorithme en dfinissant correctement leurs types et d'autres parts leur donner les valeurs correctes tout le long de l'algorithme. Certaines variables serviront de donnes initiales, d'autres seront des variables intermdiaires et d'autres variables seront les rsultats de l'algorithme. Bien entendu, une variable peut tre une combinaison de deux ou trois classes (donne, intermdiaire ou rsultat). Activit 2 Dans le calcul d'un salaire annuel, on pourra utiliser la constante nb_mois et les variables Salaire_annuel et Salaire_mensuel. Salaire_annuel = nb_mois x Salaire_mensuel 1) Elaborer le tableau de dclaration des objets intervenant dans cette affectation. 2) Dclarer les diffrents objets en Pascal. Rponses : 1) Tableaux de dclaration des objets
Objet nb_mois Salaire_annuel Salaire_mensuel Type/nature Constante = 12 Rel Rel Rle Nombre de mois de l'anne Salaire annuel de l'employ Salaire mensuel de l'employ

2) CONST VAR

nb_mois=12 ; Salaire_annuel : REAL ; Salaire_mensuel : REAL ;

Les structures de donnes Activit 3 Soit la squence d'affectations suivante : 1) 2) 3) 4) 5) 1) 2) 3) 4) i := 50 ; j := 70 ; k := i ; i := j ; j := k ;

Donner le rsultat de l'excution de cette squence. Quelles sont les valeurs finales de i et de j ? Quel est le rle de cette squence ? Quelle est l'utilit de la variable k ?

Rponses : 1) Nous pouvons suivre l'volution des valeurs des variables i, j et k en les regroupant dans un tableau constituant la trace de la squence :
Trace de la squence N de l'instruction 1 2 3 4 5 i 50 50 50 70 70 j 70 70 70 50 k 50 50 50

A l'instruction N1, seule la variable i prend la valeur 50. A l'instruction N2, la variable j prend la valeur 70 mais la variable i est reste inchange. A l'instruction N3, k a pris la valeur de i c'est dire 50, i et j sont restes inchanges. A l'instruction N4, i a chang et a pris la valeur de j c'est dire 70 et j et k sont restes inchanges. A l'instruction N5, j a pris la valeur de k c'est dire 50, i et k sont restes inchanges. 2) Les valeurs finales de i et de j sont respectivement 70 et 50. 3) Cette squence a permis la permutation des contenus des deux variables i et j. 4) La variable k a assur la sauvegarde du contenu de i avant de lui affecter j par l'instruction N4. Elle est appele variable intermdiaire, temporaire ou auxiliaire. En effet, si on affecte i le contenu de j sans le sauvegarder dans k, il sera perdu.
9

Les structures de donnes

II. Les types de donnes


Le type d'une variable permet de dterminer le domaine des valeurs possibles que peut prendre cette variable. La connaissance du type permet galement de dduire l'ensemble des oprateurs applicables sur les variables de ce type ainsi que l'espace mmoire en octets qui sera rserv ces variables. Un type est dsign par un identificateur (ou un nom). Les types standard sont : Le type Entier, dsignant les valeurs des nombres entiers relatifs. Le type Rel, dsignant les valeurs des nombres rels. Le type Caractre, dsignant les "valeurs" des caractres. Le type Boolen, dsignant les valeurs logiques. Le type Chane de caractres, dsignant les "valeurs" des chanes de caractres.

II. 1 Les types numriques


Dans la catgorie des types numriques, nous pouvons distinguer les types Entier et Rel. II.1.1 Le type entier Activit 4 1- Quel est l'ordre de grandeur de la valeur maximale d'un entier ? 2- Rappeler les oprateurs arithmtiques sur les entiers. 3- Evaluer les expressions arithmtiques suivantes : a- 17 DIV 5 b- 17 MOD 5 c- ((58 DIV 7) MOD 2) + 5 d- (49 MOD 17) DIV (4 * 3) 4- Est- ce qu'on pourra utiliser le type entier pour reprsenter les quantits suivantes? a- Nombre de jours de l'anne b- Dure en heures d'une sance de cours ou TP c- Nombre de jours du mois de fvrier d- Salaire mensuel exprim en dinars d'un employ. 5- Dfinir l'effet de dbordement pour une variable de type entier. 6- Dclarer trois variables entires i, j et k en Pascal. Rponses : 1- Sachant que les entiers en mathmatiques forment un ensemble infini nomm Z. Or, en informatique, un entier a une reprsentation en machine limite un nombre fini d'octets (gnralement 2 octets). La valeur maximale d'un entier est gale 32767. 2- Les oprateurs arithmtiques sont + , - , * , DIV (Donne le quotient dans la division entire) et MOD (Donne le reste de la division entire).
10

Les structures de donnes 3-a- Le rsultat de cette expression est 3 b- Le rsultat de cette expression est 2 c- Le rsultat de cette expression est 5 d- Le rsultat de cette expression est 1 4-a- Le nombre de jours de l'anne est un nombre entier (365 ou 366). b- La dure en heures d'une sance est un nombre rel car la sance peut tre par exemple de 1.5 heures. c- Le nombre de jours du mois de fvrier est un entier. d- Le salaire mensuel exprim en dinars d'un employ est un nombre rel. 5- Quand on manipule une variable de type entier, il faut faire attention au risque de dbordement. Quand il y a dbordement au-del des valeurs Minimale et Maximale, les calculs deviennent errons ou provoquent des erreurs d'excution selon les langages utiliss. 6- VAR i, j, k : INTEGER; Remarque : Le langage Pascal a cinq types entiers prdfinis. Chaque type a un domaine de dfinition spcifique. Type SHORTINT INTEGER LONGINT BYTE WORD II.1.2 Le type rel Activit 5 1- Quel est le domaine des valeurs du type rel ? 2- Quels sont les oprateurs arithmtiques valides sur des variables de type rel? 3- Dclarer deux variables x et y de type rel en Pascal. Rponses : 1- Ce type recouvre un sous-ensemble de l'ensemble des nombres rels IR. La dfinition de ce sous-ensemble est lie la reprsentation en binaire des rels dans la machine. Un nombre rel peut occuper 6 octets en Pascal sur certaines machines. On peut le coder ainsi dans l'intervalle de -1038 1038.
11

Domaine de dfinition -128..127 -32768..32767 0..255 0..65535

Nombre de bits Sign 8 bits Sign 16 bits Non sign 8 bits Non sign 16 bits

-2147483648..2147483647 Sign 32 bits

Les structures de donnes Exemples de nombres rels 0. -55.36 3.14 60 10-9 1.23 -38.0 5.6 106

5.6 106 c'est--dire 5 600 000 s'crira aussi 5.6E+6. La lettre E se lit : dix puissance 2- Ces oprateurs sont + , - , * et / (division relle). 3- VAR x, y : REAL;

II.1.3 Les fonctions arithmtiques standards Tous les langages de programmation offrent une bibliothque de fonctions arithmtiques facilitant la ralisation de certains calculs. Dans l'activit suivante, nous tudions quelques unes d'entre elles. Activit 6 Soient les fonctions arithmtiques suivantes : Tronc(-8.224) Arrondi(712.499) Abs(-7) Carr(7) RacineCarr(2) Sin(1.5705) Cos(1.5705) Tang(3.141) Cotang(1.5705) Ent(3.7) Ala Ln(1.0) Exp(0.0) Elaborer un tableau de 6 colonnes donnant le nom algorithmique de chacune des fonctions prcdentes, le code en pascal, le type du paramtre (nombre entre parenthses), le rle de chacune des fonctions et les rsultats d'valuation.
12

Tronc(3.141) Arrondi(12.50)

Tronc(334.8) Arrondi(12.99)

Ent(-5.5) Ala(7)

Les structures de donnes Rponse :


Nom algorithmique Code en Pascal Type du paramtre x ou n Entier ou rel Type du Rsultat Rle Exemples

Tronc (x)

TRUNC (x)

Entier

Tronc (-8.224) supprime la partie vaut -8 dcimale pour ne laisser Tronc (3.14) vaut 3 que la composante Tronc (334.8) entire de x. vaut 334 donne un entier qui est la valeur du rel x arrondie la plus proche valeur. Arrondi (12.499) vaut 12 Arrondi (12.50) vaut 13 Arrondi (12.99) vaut 13 Abs (-7) vaut 7 Carr (7) vaut 49

Arrondi (x)

ROUND (x)

Entier ou rel

Entier

Abs (x)

ABS (x) SQR (x)

Entier ou rel Entier ou rel

Entier ou Rel (mme Type que x) Entier ou Rel (mme Type que x)

donne la valeur absolue de x. donne le carr de x. donne la racine carre de x si x n'est pas ngatif et provoque une erreur, sinon. donne le sinus de x (x en radians). donne le cosinus de x (x en radians). donne la tangente de x. (x en radians). donne la cotangente de x. (x en radians). donne la partie entire d'un rel. donne un rel compris entre 0 et 1 exclus. donne un entier entre 0 et n-1 renvoie le logarithme nprien d'un rel x renvoie l'exponentiel de x

Carr (x)

Racine Carr (x) Sin (x) Cos (x) Tang (x) Cotang (x) ENT(x) Ala

SQRT (x) SIN (x) COS (x) TAN (x) COTAN (x) INT (x) RANDOM RANDOM (n) Ln(x) Exp(x)

Entier ou rel Entier ou rel Entier ou rel Entier ou rel Entier ou rel Entier ou rel

Rel

RacineCarr (2) vaut 1.414 Sin(1.5705) vaut 1 Cos(1.5705) vaut 0 Tang(3.141) vaut 0 Cotang(1.5705) vaut 0 ENT(3.7) vaut 3 ENT(-5.5) vaut -6 Ala pourrait produire 0.36 par exemple. Ala(7) pourrait produire 2 par exemple. Ln(1.0) vaut 0 Exponentiel de (0.0) vaut 1

Rel Rel Rel Rel Entier Rel

Ala(n) Ln(x) Exp(x)

Entier Entier ou rel Entier ou rel

Entier Rel Rel

13

Les structures de donnes Activit 7 Soit la squence d'affectations suivante : a3 b 2.5 masse 12 longueur 4.5 largeur 1.5 hypo RacineCarr (carr(a)+carr(b)) poids masse * g surface longueur * largeur 1- Dclarer en Pascal les diffrents objets. 2- Traduire en Pascal les diffrentes affectations. Rponses : 1- CONST g=9.81; VAR masse : INTEGER; a,b,poids,longueur,largeur,surface,hypo : REAL; 2- a:=3; b :=2.5 ; masse :=12 ; longueur :=4.5 ; larguer :=1.5 ; hypo := SQRT(SQR(a)+SQR(b)); poids := masse * g ; surface := longueur * largeur ;

II.2 Le type boolen


Le type boolen est utilis pour caractriser des objets de type logique. Activit 8 1- Quelles sont les valeurs du type boolen? 2- Quels sont les oprateurs logiques qu'on peut appliquer sur les boolens? 3- Evaluer les propositions logiques suivantes : a- La proposition (88>66) ET (44<55) b- La proposition (88>66) ET (66<55)

14

Les structures de donnes Rponses : 1- Les variables d'un tel type peuvent prendre uniquement deux valeurs logiques VRAI et FAUX (TRUE ET FALSE en Pascal). 2- Ces oprateurs sont NON (ngation), Et (conjonction), OU (disjonction) et OUex (OU exclusif). 3- a- (88>66) ET (44<55) VRAI ET VRAI VRAI 3- b- (88>66) ET (66<55) VRAI ET FAUX FAUX

Activit 9 1- Soient a, b et c trois variables boolennes a- Donner les tapes d'valuation de l'expression a OU b ET c. b- Si on veut d'abord valuer la disjonction a OU b, comment faut-il s'y prendre ? 2- Dans la rponse la question prcdente, nous avons utilis le fait que l'oprateur ET est prioritaire par rapport l'oprateur OU. Donner l'ordre de priorit qui existe entre les oprateurs logiques. 3- Dclarer en Pascal quatre variables p, q, existe et drapeau de type boolen. 4- Evaluer les expressions logiques suivantes : a- ( x <= 4) ET (x >= 1) avec x = 3 b- ( x <= 2) ET (x >= 0) avec x = -4 c- NON ( x <= 55) OU (x >= 0) avec x = 21 Rponses : 1- a- on value d'abord la conjonction b ET c puis la disjonction a OU (b ET c) comme s'il y avait des parenthses. b- il suffit d'ajouter des parenthses (a OU b) ET c. 2- Il existe un ordre de priorit entre les oprateurs logiques : La ngation NON est prioritaire par rapport la conjonction ET. La conjonction ET est prioritaire par rapport la disjonction OU. La disjonction OU a la mme priorit que l'oprateur OUex. Si deux oprateurs ont la mme priorit, le calcul de l'expression logique se fera de gauche droite. Dans tous les cas, les oprations mises entre parenthses sont prioritaires. Les parenthses les plus internes sont les plus prioritaires. 3- VAR p, q, existe, drapeau : BOOLEAN ; 4- a- VRAI b- FAUX c- VRAI
15

Les structures de donnes

II.3 Le type caractre


Le type caractre est utilis pour reprsenter une lettre minuscule, une lettre majuscule, un chiffre ou un signe de ponctuation, mais aussi un espace typographique, une tabulation, un retour la ligne et quelques autres oprations spciales (sonnerie, effacement, etc.). Tous les caractres sont ordonns selon leur code ASCII (voir Annexe la fin du livre). Activit 10 1- Les chiffres, les lettres en majuscule, les lettres en minuscule ont des codes ordonns et contigus ; Quel est cet ordre ? 2- Citer quelques oprateurs applicables aux caractres. 3- Dclarer en Pascal : a- une constante caractre de valeur ''v'' b- deux variables de type caractre car1 et car2 Rponses : 1- On peut comparer les caractres comme suit : ''0'' < ''1'' <"9'' < "A'' < ''B'' < "Z" ''a'' < ''b'' <''z'' 2- Comme les valeurs de type caractre sont ordonnes, les oprateurs relationnels y sont dfinis. Exemples : ''B'' < ''F'' est une proposition VRAIE. ''g'' > ''b'' est une proposition VRAIE. 3- a- CONST car = 'v' ; b- VAR car1 , car2 : CHAR ;". Les fonctions prdfinies Parmi les fonctions prdfinies grand usage, nous citons : ORD, CHR, SUCC et PRED. Activit 11 1- Soient les exemples de fonctions prdfinies suivantes : ORD ("A") ORD("a") CHR (65) CHR (97) SUCC ("F") SUCC ("5") PRED ("Z") PRED ("9") MAJUS("c ") En utilisant le tableau ASCII de l'annexe du livre, laborer un tableau montrant le nom de la fonction, son code en Pascal, son rle et sa valeur.
16

Les structures de donnes 2- Evaluer les expressions suivantes : a- CHR ( ORD (c) ), c est une variable de type caractre. b- ORD ( CHR (n) ), n est un entier. 3- Que dsigne chacune des notations suivantes ? a- t b- "t" c- 7 d- "7" Rponses : 1- Supposons que c est une variable de type caractre et que n est un entier compris entre 0 et 255.
Nom Code en Pascal ORD (c) CHR (n) SUCC (c)) PRED (c) UPCASE(c) Rle renvoie le code ASCII du caractre c. Le rsultat est un entier positif. renvoie le caractre dont le code ASCII est n. renvoie le caractre successeur de c s'il existe. renvoie le caractre prdcesseur de c s'il existe. Convertit le caractre c en majuscule sil est possible. Exemples ORD ("A") vaut 65 ORD ("a") vaut 97 CHR (65) vaut "A" CHR (97) vaut "a" SUCC ("F") vaut "G" SUCC ("5") vaut "6" PRED ("Z") vaut "Y" PRED ("9") vaut "8" MAJUS("c ") vaut "C"

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

2- a- c b- n 3- a- t ainsi crit, reprsente un objet identifi par l'identificateur t ; c'est par exemple une variable. b- t entre guillemets dsigne le caractre t. c- 7 dsigne l'entier 7. d- "7" dsigne le caractre 7.

II.4 Le type chane de caractres


Une chane de caractres est une suite ordonne de caractres. En algorithmique, la valeur d'une chane se note en utilisant des guillemets ("). En langage Pascal, on utilise plutt des quotes simples (').
17

Les structures de donnes Exemple Algorithmique "baccalaurat" "l'algorithmique" Pascal 'baccalaurat' 'l''algorithmique'

Les variables chanes de caractres sont dfinies par une dclaration pouvant indiquer le nombre maximum de ses caractres. Activit 12 1- Elaborer un tableau de dclaration des objets o vous dfinirez une chane prenom de 10 caractres, une chane nom pouvant contenir jusqu' 255 caractres et une chane adresse de 25 caractres. 2- Dclarer ces objets en Pascal. 3- Raliser les affectations suivantes : Chane vide la variable Prenom, "Aloui" la variable Nom et un espace la variable Adresse. 4- Comment accder au i me caractre d'une chane CH ? 5- Soit l'affectation suivante : Nom ''Beldi'' a- Quelles sont les valeurs de Nom[1] et de Nom[5] ? b- Aprs l'affectation Nom[2] "a" , Quel est le contenu de la variable Nom. Rponses : 1- Tableau de dclaration des objets
Objet Prnom Nom Adresse Type/Nature Chane [10] Chane Chane [25] Rle Prnom dun individu sur 10 caractres maximum Chane pouvant contenir jusqu' 255 caractres. Chane pouvant contenir jusqu' 25 caractres.

2- Dans le langage PASCAL les dclarations correspondantes seront : VAR Prenom : String [10] ; Nom : String ; adresse : String [25] ; Remarque : la variable Prenom, on peut affecter une chane de caractres ayant au maximum dix caractres. Par contre, il n' y a pas de limitation visible pour la longueur de la variable Nom (Ce nombre maximal est de 255 caractres pour certains compilateurs).
18

Les structures de donnes 3- Prenom '''' Nom ''Aloui'' Adresse " " {vide} {un espace}

4- On pourra accder en lecture et en criture au ime caractre d'une chane CH en utilisant la notation CH[i] o 1 i Long (CH) o Long(CH) dsigne la longueur de la chane CH. 5- a- Nom [1] donne "B" Nom [5] donne "i" b- Nom devient "Baldi" Les fonctions et les procdures prdfinies Les langages de programmation offrent un jeu de fonctions et de procdure prdfinies. Nous tudions dans la suite les fonctions et les procdures les plus usuelles. Activit 13 1- Soient les exemples de fonctions et procdures prdfinies suivantes : concat ("Bon","jour") Sous_chane ("Baccalaurat",6,7) Convch (2008,ch) Efface (v, 7,3) o v contient "Disquette" Insre ("tte",v,7) o v contient "Disque" Long ("Lyce") Pos ("Bac","Baccalaurat") Valeur ("16.5",d,erreur)

Elaborer un tableau de 4 colonnes donnant le nom algorithmique de chacune des procdures ou fonctions prcdentes, le code en pascal, le rle de chacune des procdures ou fonctions et les rsultats gnrs par les exemples dfinis ci-dessus.
Algorithmique Concat(ch1,ch2, ..,chN) Long (ch) Code en Pascal CONCAT (ch1, ch2, chN) LENGTH (ch) Rle Exemples

Concat retourne la concat ("Bon","jour") concatnation des cha- retourne la chane nes ch1, ch2, ...., chN "Bonjour" Long retourne un entier Long ("Lyce") retourne reprsentant la longueur l'entier 5 en caractres de la chane ch. Ce nombre se trouve aussi dans le caractre ch[0]. Fonction qui retourne Sous_chane("Baccalau une sous-chane d'une rat",6,7) retourne la longueur nbc partir de chane "laurat" la position p dans ch.

Sous_chane (ch, COPY (ch, p, p, nbc) nbc)

19

Les structures de donnes


Pos (ch1, ch2) POS (ch1, ch2) Pos retourne la premire posi- Pos("Bac","Baction de la chane ch1 dans la calaurat") chane ch2 retourne l'entier 1 Efface est une procdure qui Efface(v, 7,3) enlve n caractres de ch modifie v qui partir de la position p. contiendra "Disque" Procdure qui insre la chane ch1 dans la chane ch2 partir de la position p. Le caractre numro p et les suivants sont dcals vers la droite. Insre ("tte",v,7) modifie v qui contiendra "Disquette"

Efface (ch, p, n ) DELETE (ch, p, n)

Insre(ch1,ch2, p) INSERT(ch1, ch2, p)

Convch (d, ch1)

STR (d, ch1)

Procdure qui convertit un nom- Convch(2008, ch) bre dcimal d en chane de modifie ch qui caractres et l'affecte la varia- contiendra "2008" ble ch1. Procdure qui convertit une chane ch en une valeur numrique dcimale et l'affecte la variable d. Le paramtre erreur est une variable de type entier qui contiendra 0 si la conversion s'est bien droule, sinon elle contiendra la position du caractre qui a dclench l'erreur. Valeur("16.5",d,err eur) modifie d qui contiendra le rel 16.5. erreur contiendra 0.

Valeur (ch, d, erreur)

VAL (ch, d, erreur)

Retenons
Les constantes contiennent des valeurs inchanges tout le long de l'excution de l'algorithme. Les variables peuvent changer de contenu tout le long de l'algorithme. Un type dfinit un ensemble de valeurs et un ensemble d'oprations applicables sur ces valeurs. Les types standard sont : les entiers, les rels, les boolens, les caractres, et les chanes de caractres
20

Les structures de donnes

Exercices
Exercice 1 Quelle est la diffrence entre une constante et une variable? Exercice 2 valuer le contenu des variables m, n, p suite l'excution de chacune des squences suivantes :
Squence 1 1) 2) 3) 4) m 30 n m+ 20 p n +m mn-p Squence 2 1) 2) 3) 4) m m m m 2 m*m m *m m*m

Exercice 3 1- valuer le contenu des variables a, b, et c suite l'excution de chacune des squences suivantes :
Squence 1 1) 2) 3) 4) a b a b 3 5 b a 1) 2) 3) 4) 5) Squence 2 a3 b5 cb ba ac 1) 2) 3) 4) 5) Squence 3 a b b a b 7 3 a+b b-a b -a

2- Quel est le rle de la variable c dans la squence 2 ? Exercice 4 On se propose de calculer la surface d'un rectangle. Etablir un tableau de dclaration des objets ncessaires. Exercice 5 Dire si l'utilisation de ces identificateurs est permise dans le langage PASCAL ou non. Justifier votre rponse. Code Produit Code+Produit Code_Produit 3etapes capacit

21

Les structures de donnes Exercice 6 Le programme Pascal suivant comporte de nombreuses erreurs, trouver-les. PROGRAM deserreurs ; CONST I=10 ; J=40 ; K=5 ; TYPE integer = -32000..+32000 voyelles1=('A','E','I','O','U'); voyelles2=(A,E,I,O,U); Abscisses=0..0.001; Indice= -10..+10; VAR S:Indice ; V: voyelle2 ; R: REAL; BEGIN R:=35; V:=R+1; S:=2*J+K; END Exercice 7 Dire si l'on pourra utiliser le type entier pour reprsenter les quantits suivantes : a- La note obtenue dans un examen b- Le nombre de matires tudies pendant un trimestre c- Le coefficient d'une matire d- La moyenne gnrale du trimestre Exercice 8 Ecrire les instructions PASCAL permettant de raliser les objectifs suivants : 1- Obtenir la longueur de la chane "Informatique" 2- Rcuprer la sous-chane de 5 caractres partir de la position 8 de la chane "Informatique" 3- Effacer les 5 premiers caractres de la chane "Informatique" Exercice 9 a est un entier, x est un rel et ch est un caractre. Dire pourquoi les instructions suivantes sont errones, et les corriger dans la mesure du possible. a:=3.4 x:=5,16 ch:=x a:=maxent+5
22

Les structures de donnes Exercice 10 Soit la partie dclarative du programme Pascal suivant : PROGRAM Dates; CONST Date1="03/07/2006"; VAR Date2: STRING[10]; Jour: STRING[2]; Mois: STRING[2]; Annee: STRING[4]; ...... Complter le corps du programme par les instructions (bloc BEGIN...END) permettant de raliser les traitements suivants : Mettre Date1 dans Date2 sous la forme jjmmaaaa ( indication: Date2 va contenir 03072006 ) Mettre le jour dans la variable Jour, le mois dans la variable Mois et l'anne dans la variables Annee. Exercice 11 Soit la partie dclarative du programme Pascal suivant : PROGRAM mots ; CONST m1: abcd; m2: ordinateur; m3: scalaire; VAR symetrie: STRING[8]; compose: STRING ; ...... Complter la partie du programme Pascal prcdente en ajoutant des variables (si c'est ncessaire) et le bloc BEGIN END pour : Avoir dans la variable symetrie une chane de caractres symtrique obtenue partir de la variable m1 . Avoir dans la variable compose une chane de caractres obtenue en combinant la premire moiti de m2 et la deuxime moiti de m3 en utilisant les fonctions : concat() et copy(). Exercice 12 Ecrire un programme Pascal qui permet de transformer la chane de caractres informatique en majuscule sans utiliser la fonction upcase(c), et la mettre dans une variable nomme maj. Indication : le code ASCII de 'a' est 97 et le code ASCII de 'A' est 65.
23

Les structures de donnes

Leon

Les expressions
Objectifs spcifiques :
Reconnatre les expressions Evaluer des expressions en tenant compte de la priorit des oprateurs Utiliser des fonctions prdfinies dans des expressions

Plan de la leon :
I. Les oprandes II. Les oprateurs II.1. Les oprateurs arithmtiques II.2. Les oprateurs logiques II.3. Les oprateurs relationnels Retenons Exercices

24

Les structures de donnes

Leon

Les expressions
J'appelle claire (la connaissance) qui est prsente et manifeste un esprit attentif : de mme que nous disons voir clairement les objets lorsque tant prsents ils agissent assez fort, et que nos yeux sont disposs les regarder.
DESCARTES

Une expression simple est constitue d'oprandes relis par des oprateurs. Nous distinguons deux types d'expressions : les expressions arithmtiques donnant une valeur numrique. les expressions logiques donnant une valeur boolenne. Activit 1 Donner le type et la valeur de chacune des expressions suivantes. 1- (6 < = 2) 2- (7+3) DIV 2 Rponses : 1- C'est une expression logique ; le rsultat est boolen ; sa valeur est FAUX. 2- C'est une expression arithmtique ; le rsultat est entier ; sa valeur est 5.

I. Les oprandes
Activit 2 1- Soient les expressions suivantes : a- 5 + 3.141 b- 7 MOD 3 Indiquer pour chacune des expressions ci-dessus le premier et le deuxime oprande et l'oprateur. 2- Quels sont les types d'oprandes ? 3- Donner les valeurs rsultats de chacune de ces expressions : a- 3.14* D1 b- (3.14*D1) + (3.14 *D2) c- 3.14 * CARRE (R1) d- 100/25 pour les valeurs D1=4, D2=3 et R1=2 Rponses : 1- a- 5 est le premier oprande ; + est l'oprateur et 3.141 constitue le deuxime oprande. b- 7 est le premier oprande ; MOD est l'oprateur et 3 constitue le deuxime oprande. 2- Les oprandes peuvent tre des constantes, des variables, des valeurs ou des rsultats envoys par des fonctions. Par ailleurs, un oprande peut tre une expression. 3- a- 12.56 b- 21.98 c- 12.56 d- 4.0
25

Les structures de donnes

II. Les oprateurs


II.1 Les oprateurs arithmtiques
Les oprateurs unaires Un oprateur est dit unaire s'il est appliqu un seul oprande. On dit aussi qu'il est monadique. L'oprateur unaire usuel Exemple : - (77) - est l'oprateur et 77 est l'oprande.

Les oprateurs binaires Un oprateur est dit binaire s'il est appliqu deux oprandes. On dit aussi qu'il est dyadique.
Oprateur Type oprande Entier ou Rel Type rsultat Entier ou Rel

Activit 3 1- Remplir un tableau permettant de montrer le type du rsultat pour les diffrents types d'oprandes admis en ce qui concerne les oprateurs binaires multiplicatifs. 2- Remplir un tableau permettant de montrer le type du rsultat pour les diffrents types d'oprandes admis en ce qui concerne les oprateurs binaires additifs. Rponses : 1Oprateur
type oprande 1 type oprande 2 type rsultat Entier Entier Entier Rel Rel Rel Rel Entier Rel Entier Rel Rel Entier Entier Rel Entier Rel Rel Rel Entier Rel Rel Rel Rel Entier Entier Entier Entier Entier Entier type oprande 1 type oprande 2 type rsultat Entier Entier Entier Entier Rel Rel Rel Entier Rel Rel Rel Rel 26

* /
DIV MOD 2Oprateur

+,-

Les structures de donnes

II.2 Les oprateurs logiques


Activit 4 1- a- Quel est l'oprateur unaire usuel, le type de l'oprande et le type du rsultat? b- Evaluer l'expression suivante : NON (44<66) 2- Remplir un tableau permettant de montrer le type du rsultat pour les types d'oprandes admis en ce qui concerne les oprateurs binaires logiques. Rponses : 1- aOprateur
NON

Type oprande Boolen

Type rsultat Boolen

b- NON est l'oprateur et (44<66) est un oprande. Le rsultat de cette expression est FAUX. 2Oprateurs ET OU Ouex type oprande 1 Boolen Boolen Boolen type oprande 2 Boolen Boolen Boolen type rsultat Boolen Boolen Boolen

NB : Souvent les oprateurs logiques sont nots multiplicativement pour le ET et additivement pour le OU.

II.3 Les oprateurs relationnels


Le tableau suivant illustre les oprateurs relationnels usuels :
Oprateurs Code en Pascal Type oprande 1 Type oprande 2 Type rsultat Logique <, >, =, <>, <=, <, >, = , <>, <=, >= Tout type ordonn Tout type ordonn

Remarque : Tous les types que nous avons vus sont des types ordonns. Toute comparaison entre deux lments de mme type ou de types compatibles est possible. Activit 5 1- Quel est le rsultat d'une comparaison de deux lments de mme type ou de types compatibles ? 2- Pour x=32 et y=36 , quelle est la valeur de x<y ? Rponses : 1- Le rsultat de la comparaison est boolen (VRAI ou FAUX). 2- x < y vaut VRAI

27

Les structures de donnes

III. valuation d'une expression


Lors de l'valuation d'une expression, on tient compte de la priorit entre les oprateurs. Activit 6 12345Quel est l'ordre de priorit dans le calcul des expressions ? Donner les tapes de calcul de l'expression 31+7*10. Evaluer l'expression 55 + 6 - 10 Dans le cas o on veut imposer un autre ordre, que doit-on faire ? Evaluer les expressions suivantes : a- (44 * x + y) avec x = 2 et y =4 b- (y + 44 * x) avec x = 2 et y=4 c- ((y + 44) * x) avec x = 2 et y =4

Rponses : 1- Cet ordre est le suivant : 1) Les parenthses. 2) Les oprateurs unaires. 3) Les oprateurs multiplicatifs. 4) Les oprateurs additifs. 5) Les oprateurs relationnels. 2me opration 31 + 70 = 101 2- 1re opration 7 * 10 = 70 3- Le calcul de 55 + 6 -10 commence par 55 + 6 donc 61 puis 61-10 pour avoir 51. En effet, pour les oprateurs de mme priorit, on commence par celui qui est le plus gauche. 4- Dans ce cas, on doit utiliser des parenthses. 31 + 7 * 10 vaut 101 mais si on crit (31 + 7) * 10 le rsultat est 380. 5- a- 92 b- 92 c- 96

Retenons
Une expression est compose d'oprateurs et d'oprandes et son valuation produit une valeur. - On distingue les expressions arithmtiques, et les expressions logiques. - L'valuation d'une expression se fait toujours selon l'ordre de priorit des oprateurs.

28

Les structures de donnes

Exercices
Exercice 1 1- Donner les expressions arithmtiques correspondantes aux expressions suivantes crites en Pascal : sqrt(2 * a + 3 / b - 2) / 3 + x 4*x/c*6-x 10 * x / 2 + 4 2- Rciproquement, crire en Pascal les expressions arithmtiques suivantes : 4x 2 +2x 5 x+ 5y 2 y+2 10x +1 x 2 y y x 2

Exercice 2 Evaluer les expressions logiques en A, B, C, et D pour chacune des combinaisons (p,q,r,s) suivantes : 1) Pour ( p,q,r,s ) = ( -3, 5, 4, 9 ) 2) Pour ( p,q,r,s ) = ( 3, 7, 4, 9 ) 3) Pour ( p,q,r,s ) = ( 5, 13, 7, 3 ) A. ( p < B. ( p < C. ( p > D. ( p + q ) OU ( r > s ) q ) ET NON ( r > s ) q ) OU ( r p ) q < r ) ET ( p + q > r )

Exercice 3 Cette criture permettant de vrifier si le caractre C est une voyelle est errone . Pourquoi ? Qu'aurait-il fallu crire ? C='A' OR C='E' OR C='I' OR C='O' OR C='U' Exercice 4 Rappeler l'ordre de priorits dans lequel une expression doit tre value. Comment valuer deux oprateurs ayant la mme priorit ? Complter le tableau suivant par le type du rsultat :
Oprateur DIV / + Type oprande 1 entier entier rel entier Type oprande 2 entier entier entier entier 29 Type du rsultat ..... ..... ..... .....

Les structures de donnes

Leon

Le type scalaire numr et le type intervalle


Objectifs spcifiques :
Comprendre l'utilisation du type numr. Comprendre l'utilisation du type intervalle. Manipuler des variables faisant appel aux types numr et intervalle.

Plan de la leon :
I. Le type scalaire numr II. Le type intervalle Retenons Exercices

30

Les structures de donnes

Leon

Le type scalaire numr et le type intervalle


La consience des representations qui suffit pour diffrencier un objet d'un autre. C'est la clart. Mais celle qui rend claire la composition des reprsentations, c'est la distinction.
KANT

Outre les types standard prsents dans la premire leon, nous pouvons dfinir de nouveaux types appels souvent types utilisateur.

I. Le type scalaire numr


Dans certaines situations o l'on aimerait contraindre une variable dcrire un jeu de valeurs bien dtermin, on utilisera un type scalaire numr afin d'numrer ces valeurs. Un type scalaire dfinit, en gnral, un domaine de valeurs comme c'est le cas du type entier. Par ailleurs, le type scalaire par numration dfinit un ensemble ordonn et fini de valeurs dsignes par des identificateurs. Dfinition Le type scalaire par numration dfinit un ensemble ordonn et fini de valeurs dsignes par des identificateurs Activit 1 Nous voulons dfinir un type que nous appelons ANNEE_SCOLAIRE contenant les dix mois de l'anne scolaire et manipuler les valeurs de ce type. 1- Donner le tableau de dclaration des nouveaux types illustrant le type ANNEE_SCOLAIRE. 2- L'affectation suivante est-elle correcte sachant que mois est une variable de type ANNEE_SCOLAIRE ? mois octobre 3- Quel est l'ordre de ces constantes ? 4- Quels sont les oprateurs applicables ces valeurs ? 5- Evaluer les expressions suivantes : a- SUCC (septembre) b- PRED (juin) 6- La dclaration du type numr IMPAIR = (1, 3, 5, 7) est-elle possible ? 7- Dclarer en Pascal a- un type scalaire numr contenant les mois 30 jours. b- une variable intitule mois_court du type mois_a_trente.
31

Les structures de donnes Rponses : 1Tableau de dclaration des nouveaux types Types
ANNEE_SCOLAIRE=(septembre, octobre, novembre, decembre, janvier, fevrier, mars, avril, mai, juin)

septembre, octobre, novembre, decembre, janvier, fevrier, mars, avril, mai, juin sont les lments du type ANNEE_SCOLAIRE. 2- Une variable mois de type ANNEE_SCOLAIRE peut prendre comme valeur : septembre, octobre, novembre, decembre, janvier, fevrier, mars, avril, mai, juin. L'affectation mois octobre est correcte. 3- L'ordre sur ces valeurs est le suivant : septembre < octobre < < juin. Par ailleurs, on peut appliquer la fonction Ord sur ces valeurs pour dterminer leurs numros d'ordre, ainsi Ord (septembre) vaut 0 et Ord (octobre) vaut 1 et ainsi de suite. 4- Les oprateurs applicables ces valeurs sont : Les oprateurs de relation Les oprateurs PRED et SUCC. PRED reprsente le prdcesseur (le prcdent) et SUCC reprsente le successeur (le suivant). 5- a- octobre b- mai Remarque : PRED (septembre) n'existe pas et SUCC (juin) n'existe pas non plus et peuvent provoquer des erreurs. 6- Cette dclaration est interdite car 1, 3, 5 et 7 sont des valeurs qui appartiennent au type prdfini ENTIER. 7- a- TYPE mois_a_trente = (avril, juin, septembre, novembre) ; b- VAR mois_court : mois_a_trente ; Dans le langage Pascal, la dclaration d'un type scalaire numr et celle d'une variable de ce type se font comme suit : TYPE <nom_type>=(constante_1, constante_2, ,constante_n); VAR <nom_variable> : nom_type ;

32

Les structures de donnes

II. Le type intervalle


Le type intervalle possde les proprits d'un type scalaire discret ordonn (entier, caractre et scalaire numr). La dfinition d'un intervalle est dcrite par la donne de deux constantes reprsentant respectivement la "Borne Infrieure" et la "Borne Suprieure" appartenant un type scalaire discret ordonn et telle que Borne Infrieure < Borne Suprieure. Activit 2 1- Elaborer un tableau de dclaration des nouveaux types illustrant un type intervalle intitul mois de 1 12 et un type intervalle concernant le premier trimestre de l'anne scolaire. 2- a- Quels sont les bornes infrieure et suprieure du type mois ? b- Quels sont les valeurs que peut prendre une variable du type mois ? c- Quels sont les bornes infrieure et suprieure du type premier_trimestre ? d- Quels sont les valeurs que peut prendre une variable du type premier_trimestre? 3- Dclarer en Pascal un type intervalle mois, un type intervalle jours et deux variables mois_actuel et j de types respectifs mois et jours. Rponses : 1Tableau de dclaration des nouveaux types Types
Mois = 1. . 12 ANNEE_SCOLAIRE = (septembre, octobre, novembre, decembre, janvier, fevrier, mars, avril,mai, juin) Premier_trimestre = septembre .. decembre

2- a- Les bornes de Mois sont 1 et 12 prises comme valeurs entires. b- Une variable de type Mois peut prendre ses valeurs entre 1 et 12. c- Les bornes de premier_trimestre sont septembre et decembre. d- Une variable de type premier_trimestre peut prendre comme valeur : septembre, octobre, novembre et decembre. 3- TYPE mois = 1 .. 12; jours = 1 .. 31 ; VAR mois_actuel : mois ; j : jours ; En effet, dans le langage Pascal, la dclaration d'un type intervalle et celle d'une variable de ce type se font comme suit : TYPE <nom_type> = borne_inf .. borne_sup ; VAR <nom_variable> : nom_type ;
33

Les structures de donnes Remarques : Une variable d'un type intervalle possde toutes les proprits du type de base dont l'intervalle est issu. Toutefois, sa valeur doit tre comprise au sens large entre les bornes de l'intervalle. L'intrt de ce type rside dans le fait qu'il permet une meilleure lisibilit de l'algorithme et du programme. Exemple : mois : 1 . . 12 est beaucoup plus prcis que mois : entier

Retenons
Le type scalaire par numration dfinit un ensemble ordonn et fini de valeurs dsignes par des identificateurs dfinis par l'utilisateur. Les oprateurs applicables ces valeurs sont : Les oprateurs de relation Les oprateurs PRED et SUCC. Le type intervalle possde les proprits d'un type scalaire discret ordonn (entier, caractre et scalaire numr). La dfinition d'un intervalle est dcrite par la donne de deux constantes reprsentant respectivement la "Borne Infrieure" et la "Borne Suprieure" appartenant un type scalaire discret ordonn et telle que Borne Infrieure < Borne Suprieure.

34

Les structures de donnes

Exercices
Exercice 1 Soit le programme Pascal suivant : PROGRAM erreurs TYPE eleves : (Ali,Safa,Sami,Wissem,Kamel) ; moyenne = 0..20 VAR e1: eleves; e2: eleves; n1: moyenne n2 : moyenne ; reussir : BOOLEAN ; BEGIN e1 := Safa; n1 = ORD(Kamel)+2 * SUCC(Ali) e2 := Sami ; n2 := -15; russir := ( n2 > 10 ) ; END.

1) Corriger les erreurs du programme Pascal ci-dessus. 2) Evaluer le contenu des variables utilises dans le Programme. Exercice 2 Est-ce que la dclaration de l'numration suivante est correcte? Justifier votre rponse. Pair = (0,2,4) ; Exercice 3 En utilisant le type intervalle, dclarer en algorithmique et en Pascal les variables suivantes : jour mois Exercice 4 En utilisant le type scalaire numr, dclarer en algorithmique puis en Pascal les types suivants : couleur_de_base jour_de_la semaine
35

Les structures de donnes

Leon

Les tableaux une dimension


Objectifs spcifiques
Comprendre l'utilisation du type tableau. Manipuler des tableaux.

Plan de la leon
I. Dclaration d'un tableau II. Le type tableau Retenons Exercices

36

Les structures de donnes

Leon

Les tableaux une dimension


Si, dans la reprsentation, on laisse de ct les dterminations d'un objet, c'est ce q'on appelle abstraire. Il ne reste alors qu'un objet moins dtermin. C'est dire un objet abstrait. Mais, si dans la reprsentation je ne considre q'une dtermination singulire de cet ordre, c'est l aussi une reprsentation abstraite.
HEGEL

Quand on veut regrouper un certain nombre de variables de mme type sous un mme nom, on utilise la notion de tableau. Un tableau peut tre considr comme une suite de variables, de mme nom, repres par des indices. Dfinition : Un tableau est une structure de donnes homognes regroupant un ensemble d'lments de mme type.

I. Dclaration d'un tableau


Dans le cas gnral, pour dclarer un tableau, on utilisera la forme suivante : Au niveau de l'analyse et de l'algorithme Tableau de dclaration des objets
Objet Ident _tableau Type nature Tableau de Taille et de Type_lment Rle

En Pascal VAR ident_tableau:ARRAY[Borne_inf..Borne_sup]OF Type_lment; O : Ident_tableau : Identificateur du nouveau tableau que nous voulons dfinir. Borne_Inf .. Borne_Sup : intervalle correspondant l'ensemble des valeurs des indices du tableau.
37

Les structures de donnes Borne_Inf : Borne infrieure de l'intervalle des indices. Borne_Sup : borne suprieure de l'intervalle des indices. Type_lment : type des lments du tableau. Il peut tre l'un des types vu prcdemment. Exemple : T : ARRAY [ 1..7 ] OF REAL ; {dclaration d'un tableau de 7 lments rels }
T 1 2 3 4 5 6 7

Suite cette dclaration, nous rservons un espace mmoire au niveau de la RAM pouvant contenir sept rels. Un tableau est caractris par ses dimensions. Nous nous limiterons l'tude des tableaux unidimensionnels appels aussi vecteurs. Activit 1 1- Donner le tableau de dclaration des objets pour un vecteur de 5 lments de type rel pouvant contenir les notes des lves. 2- Dclarer le tableau NOTES en Pascal. 3- Affecter chaque lment la note correspondante suivant le tableau suivant :
NOTES 12 1 13.5 2 10 3 15.5 4 16 5

Rponses :

1- La dclaration du tableau se fera comme suit : Tableau de dclaration des objets


Objet NOTES Type nature Rle Tableau de 5 rels Tableau servant contenir les notes de 5 lves

2- Dans le langage Pascal, on aurait effectu la dclaration suivante : VAR NOTES : ARRAY[1..5] OF REAL; 3- NOTES NOTES NOTES NOTES NOTES NOTES NOTES NOTES NOTES NOTES [1] [2] [3] [4] [5] [1] [2] [3] [4] [5] est est est est est le le le le le 1er lment du tableau NOTES. 2me lment du tableau NOTES. 3me lment du tableau NOTES. 4me lment du tableau NOTES. 5me lment du tableau NOTES.

12 13.5 10 15.5 16
38

Les structures de donnes Remarques : 1) Pour accder au ime lment du tableau, il suffit de donner l'identificateur du tableau et l'indice i indiquant le rang de l'lment. Cet indice doit tre dans l'intervalle Borne_inf.. Borne_sup. 2) Nous pouvons lire et crire un lment du tableau (voir chapitre 2). Nous pouvons modifier un lment par une instruction d'affectation. Exemple : NOTES [4] 17.50 3) Les oprations possibles sur un lment du tableau sont les mmes que celles dfinies sur une variable de mme type.

II. Le type tableau


Il est possible de dclarer le type d'un tableau. Exemple Tableau de dclaration des nouveaux types
Types Eleves = tableau de 30 chanes de caractres Moyennes = tableau de 30 rels Comptes = tableau de 26 entiers

Tableau de dclaration des objets


Objet T_ELEVES T_MOY T_Compte Type / Nature Eleves Moyennes Comptes Rle Tableau des 30 noms dlves Tableau des 30 moyennes dlves Tableau comptant le nombre de chaque lettre de 'A' 'Z' du texte

Activit 2 Soit la squence suivante : A [ 1 ] 10 A[2]7 A [ 3 ] A [ 1 ] Div A [ 2 ] A[4]A[3]*A[2] A[5]A[1]+A[3]*A[4] 1- Dclarer le tableau A. 2- Quel est le contenu de chaque lment du tableau A ?
39

Les structures de donnes Rponses 1- Dclaration Tableau de dclaration de nouveaux types


Types vecteur = tableau de 5 entiers

Tableau de dclaration des objets


Objet A Type / Nature vecteur Rle Tableau de 5 lments

2- Le contenu de chaque lment :


A 10 1 7 2 1 3 7 4 17 5

Retenons
Les structures de donnes vues dans cette leon sont les tableaux (suite de variables de mme type repres par des indices). Avant d'utiliser un tableau, il faut le dclarer. Il faut bien faire la diffrence entre l'indice d'un lment et le type des lments.

40

Les structures de donnes

Exercices
Exercice 1 Elaborer un tableau de dclaration des objets relatifs aux : noms des employs leurs nombres de jours travaills leurs salaires d'une entreprise comptant 50 employs. Exercice 2 1- Dclarer le tableau JOURS qui contient les sept jours de la semaine. 2- De mme, dclarer le tableau MOIS permettant de regrouper les douze mois de l'anne. Exercice 3 Soit le tableau suivant :
T 14 10 19 84 92

1- Dclarer le tableau T en algorithmique et en Pascal. 2- Donner les affectations permettant de remplir T. 3- Inverser les lments du tableau T sans utiliser un autre tableau. Exercice 4 Soit le tableau de SALAIRES exprims en Dinars.
SALAIRES 325.560 1 650.800 2 720.252 3 529.100 4 390.440 5

1- Donner les cinq affectations permettant de remplir le tableau SALAIRES par les donnes prcdentes. 2- Ranger, dans un deuxime tableau SALAIRES_MI, les quivalences des lments de SALAIRES en millimes. Exercice 5 1- Soit V et W deux tableaux d'entiers, de types respectifs T1 et T2 et de tailles respectives 4 et 3. 2- Soit la squence d'affectations suivantes : V[1] 300 V[2] 50 W[1] V[1] + V[2]* 2
41

Les structures de donnes V[3] W[1] DIV 3 W[2] W[1] MOD V[1] W[3] V[2] * 2 + 2 V[4] (V[2] DIV 4) MOD 2 V[8] V[4] Questions 1- Dclarer les deux tableaux V et W. 2- Trouver les erreurs d'affectation dans la squence prcdente. 3- Quel est le contenu de chaque lment des deux tableaux V et W ? Exercice 6 Trouver les erreurs du programme Pascal suivant : PROGRAM pleinerreurs ; CONST N=5 ; VAR I, J, N, M : INTEGER ; C: CHAR; A: ARRAY[1..N] of CHAR; B: ARRAY[1..M] of CHAR; BEGIN I:=0; C:='0'; M:=4; A[1]:=C; A[2]:= SUCC(C); B[1]:=A[1]; END. Exercice 7 Soit le tableau T de mots dans lequel les mots sont classs par longueur (d'abord tous les mots d'une lettre, puis de deux lettres,, puis de 8 lettres (taille maximale du mot)). Un deuxime tableau, CLE, contient pour un indice i l'indice dans T du premier mot de longueur i. Que contient CLE[j] s'il n'y a pas dans T de mot de longueur j ? Donner un exemple contenant les dclarations et les affectations ncessaires.

42

CHAPITRE

Chapitre 2
Les actions lmentaires simples

Objectifs :
Utiliser les structures simples pour rsoudre des problmes. crire des programmes en Pascal utilisant les structures simples.

Plan du chapitre :
Leon 1 : L'affectation Leon 2 : Les oprations d'entre / sortie

Les actions lmentaires simples

Leon

L'affectation
Objectifs spcifiques :
Utiliser les structures simples pour rsoudre des problmes. Prsenter les solutions sous forme d'un algorithme puis d'un programme.

Plan de la leon :
I. Introduction II. Dfinition III. Vocabulaire et syntaxe Retenons Exercices

44

Les actions lmentaires simples

Leon

L'affectation
J'entends par attribut ce que l'entendement peroit d'une substance comme constituant son essence.
SPINOZA

I. Introduction
Dans cette leon, nous allons revenir plus en dtail sur l'action lmentaire intitule "affectation". Comme nous l'avons vu au chapitre prcdent, l'affectation est l'action ou l'instruction lmentaire de base permettant de modifier la valeur d'une variable. Quand nous savons que la notion de variable est fondamentale dans l'exercice de la programmation, nous comprenons l'importance que peut prendre l'action d'affectation. Activit 1 Soit la squence d'instructions suivante : 1) 2) 3) 4) 5) X Y Y Y Y 2 X*X Y*Y Y*X Y*Y

1- Dresser un tableau (traces de la squence algorithmique) pour dterminer les valeurs des variables X et Y aprs l'excution des instructions prcdentes. 2- Quel est le rle de cette squence d'instructions. Rponse : 1- Trace de l'excution des instructions prcdentes
N instruction 1 2 3 4 5 X 2 2 2 2 2 Y 4 16 32 1024

2- Cette squence d'instructions permet de calculer partir d'une valeur X, la valeur Y correspondante. Aprs la dernire instruction, Y vaut X10.
45

Les actions lmentaires simples

II. Dfinition
L'opration d'affectation consiste attribuer une valeur une variable. L'instruction d'affectation se note avec le symbole "" en algorithmique et ":=" en Pascal. L'expression droite du symbole d'affectation sera value puis le rsultat sera affecte la variable situe gauche du symbole "". Activit 2 Sachant que m, n, p et r sont quatre variables de type entier ou de type entier long. Soit la squence ci-dessous : 1) m 159383552 2) n m DIV 8 3) p n DIV 1024 4) r p DIV (1024) 1- Dterminer la valeur de chacune des variables n, p et r aprs l'excution de la squence ci-dessus. 2- Que fait cette squence d'instructions? 3- Traduire cet algorithme en Pascal. Rponse : 1- - La valeur de n vaut 19922944. - La valeur de p vaut 19456. - La valeur de r vaut 19. 2- Cette squence convertit une capacit mmoire donne en bits en son quivalent en octets, kilo octets et mga octets. Traduction en Pascal PROGRAM CONVERSION; USES WINCRT; VAR m,n,p,r : LONGINT; BEGIN m := n := p := r := END. 159383552; m DIV 8; n DIV 1024; p DIV 1024;

Vous allez remarquer qu'en excutant ce programme, vous n'allez rien voir l'cran. Dans la leon suivante, nous allons tudier comment afficher des mssages et des rsultats l'cran.
46

Les actions lmentaires simples

III. Vocabulaire et syntaxe


Au niveau de l'analyse et de l'algorithme Forme gnrale Variable expression Au niveau du Pascal Variable := expression;

N.B. Une expression peut tre une valeur. Exemples :


Analyse et algorithme Y 7 Ch "cible" XY L long(Ch) DIV 2 Y Y+1 Pascal Y:=7; Ch : = 'cible'; X : = Y; Llength(Ch) DIV 2; Y : = Y+1; Commentaire La variable Y reoit la valeur 7. La chane Ch reoit la chane cible. La valeur de la variable X devient gale la valeur de la variable Y. La valeur de la variable L devient gale la longueur de la chane Ch divise par deux. La valeur de la variable Y devient gale sa valeur actuelle incrmente de 1.

Remarques :

L'expression est value avant d'tre affecte la variable. La valeur de l'valuation de l'expression doit tre compatible avec le type de la
variable ; sinon l'excution de cette affectation provoquera une erreur. Il est possible d'affecter la valeur d'une variable une autre variable. Le nom d'une variable dans une expression signifie sa valeur actuelle. L'instruction d'affectation ne modifie que ce qui est situ gauche du symbole d'affectation "". Activit 3 Effectuer une analyse, un algorithme et la traduction en Pascal du programme intitul CRYPT, qui effectue le cryptage d'un mot donne en utilisant le principe suivant : - Permuter le premier caractre du mot avec le dernier. - Modifier l'lment milieu du mot par son ordre dans le code ASCII. NB. : On suppose que le mot est une chane de caractres dont la taille est suprieure trois.
47

Les actions lmentaires simples Analyse Nom = CRYPT S


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

L.D.E.
Rsultat = Ecrire (ch ) Insre (c,ch,p) Efface(ch,p,1) Convch( ORD(Ch[p]),c) p(1+l) DIV 2 Insre ( aux, ch, 1) Efface(ch,1,1) ch[l] ch[1] aux sous-chaine(ch,l,1) l long(ch) ch = Donne ("Entrer une chane de caractres: ") Fin CRYPT

O.U.
ch p c l aux

Tableaux de dclaration des objets


Objet ch p c l aux Type / Nature Chane de Caractres La chane saisie Entier La position du milieu de la chane Sauvegarde l'ordre du l'lment milieu de la chane Chane de Caractres dans le code ASCII Entier La longueur de la chane Chane de Caractres Sauvegarde le premier caractre de la chane Rle

Algorithme 0) Dbut CRYPT 1) Ecrire ("Entrer une chane de caractres: "), Lire(ch) 2) l long(ch) 3) aux sous-chaine(ch,l,1) 4) ch [l] ch[1] 5) Efface(ch,1,1) 6) Insre (aux,ch, ",1) 7) p(1+l) DIV 2 8) Convch( ORD(Ch[p]),c) 9) Efface(ch,p,1) 10) Insre (c,ch,p) 11) Ecrire (ch ) 12) Fin CRYPT

48

Les actions lmentaires simples Traduction en Pascal PROGRAM CRYPT; USES WINCRT; VAR ch,aux,c: STRING; l,p:INTEGER; BEGIN WRITE ('Entrer une chane de caractres: '); READLN(ch); l:=length(ch); aux:=copy(ch,l,1); ch[l]:= ch[1]; Delete(ch,1,1); Insert(aux,ch,1); P:= (1+l) DIV 2; Str( Ord(Ch[p]),c); Delete(ch,p,1); Insert(c,ch,p); WRITE (ch); END. Un cas d'xecution

Retenons
- L'action d'affectation consiste attribuer une valeur une variable. - L'instruction d'affectation se note avec le symbole "". - Une variable affecter situe gauche de l'affectation doit avoir le mme type ou un type compatible avec celui du rsultat de l'valuation de l'expression place droite du symbole d'affectation.

49

Les actions lmentaires simples

Exercices
Exercice 1 Soit la squence d'instructions suivante : X -5 X X*X Y -X-3 Z (-X-Y)*3 X -(X+Y)*2+Z Y Z*X*Y Y -(Z+Y) X X+Y-Z Y X+Z X (Y+Z)/(X/10) Y ((X*Z)/Y)*9 Dresser la trace de la squence algorithmique prcdente pour dterminer les valeurs des variables X,Y et Z aprs l'excution des squence d'instructions ci-dessus. Exercice 2 1) Faire une analyse, crire un algorithme puis la traduction en Pascal du programme intitul PERMUT qui permet de permuter les contenus de deux variables X et Y en utilisant une variable auxiliaire. 2) Donner une deuxime mthode permettant de rsoudre cet exercice sans l'utilisation d'une variable auxiliaire. Exercice 3 Soit la squence d'instructions suivante : 1) 2) 3) 4) X 19.7 Y 114 K (X + Y - ABS(X-Y))/2 L (X + Y + ABS(X-Y))/2

1) Dresser la trace de la squence algorithmique prcdente pour dterminer les valeurs des variables K et L aprs l'excution des instructions prcdentes. 2) Quel est le rle des instructions 3 et 4 ? Exercice 4 crire un algorithme qui saisit un temps en seconde puis le convertit en jours, heure, minutes et secondes.
50

Les actions lmentaires simples Exercice 5 On vous demande d'crire un programme en Pascal qui permet de convertir une mesure d'nergie en Joule (J) saisie au clavier en son quivalent Decijoule (dJ), Hectojoule (hJ), Kilojoule (kJ), Calorie (cal), Kilocalorie (kcal), Wattheure (W/h), Kilowattheure (kWh), BTU. Sachant que : 1 calorie = 4,1855 joules 1 kWh = 3 600 000 J 1 calorie 3,968 321 x 10-3 (BTU) British Thermal Unit Exercice 6 Soit A un tableaux de 3 chanes de caractres et B un tableaux de 2 entiers. Soit la squence d'affectation suivante : - A[1] sous-chaine("communication",1,3) - A[2] concat("sports",".", A[1]) - B[1] pos ("o", A[2]) - convch(2007, ch) - A[3] "www."+ A[2] - insrer(ch,A[3], 11) - B[2] long(A[1] ) Questions: 1) Quel est le contenu de chaque lment des deux tableaux A et B ? 2) Traduire cet algorithme en Pascal. Exercice 7 On se propose d'crire un programme en Pascal intitul POIDS qui calcule le poids d'une image numrique prise par un appareil photo numrique de sept mgapixel de rsolution et d'un codage de 6 octets (48 bits/pixe). NB. Le poids d'une image est le produit du nombre de pixels de l'image par le nombre d'octets par pixel. Exercice 8 crire un programme en Pascal qui permet de calculer la vitesse de rotation de la terre autour du soleil qui est exprime en km/s. NB. - La distance moyenne Terre-Soleil est de l'ordre de 150 000 000 km. - La vitesse de rotation de la terre autour du soleil = corconfrence de l'orbite/ (365 jours*24heures*3600 secondes). - La corconfrence de l'orbite= 2* * distance moyenne Terre-Soleil

51

Les actions lmentaires simples

Leon

Les oprations d'entre / sortie


Objectifs spcifiques
Savoir faire une lecture et une criture de donnes. Prsenter les solutions sous forme d'un algorithme puis d'un programme.

Plan de la leon
I. Les oprations de sortie I.1. Dfinition I.2. Vocabulaire et syntaxe I.3. Formatage de l'affichage des rsultats II. Les oprations d'entre II.1. Dfinition II.2. Vocabulaire et syntaxe

Retenons Exercices

52

Les actions lmentaires simples

Leon

Les oprations d'entre / sortie


Conduire par ordre mes penses, en commencant par les objets les plus simples et les plus aiss connaitre, pour monter peu peu, comme par degrs, jusqu' la connaissance des plus composs.
DESCARTES

Nous avons vu dans la leon prcdente qu'une opration d'affectation consiste attribuer une valeur une variable. Cette opration se fait au niveau de la mmoire et il est intressant de visionner le rsultat de ces oprations. Nous verrons aussi comment permettre l'utilisateur de saisir des donnes mettre dans des variables par l'intermdiaire du clavier. Ces deux actions sont convenues lmentaires et s'intitulent respectivement sortie de donnes et entre de donnes.

I. L'opration de sortie
Activit 1 Effectuer une analyse, crire un algorithme et faire la traduction en Pascal du programme intitul DISTANCE qui convertit une distance n = 24 pouces en son quivalent pieds et mtres. Afficher les rsultats. On rappel que : - 1 pied =12 pouces - 1 pouce = 2.54 cm Analyse Nom = DISTANCE S
4 3 2 1 5

L.D.E.
Rsultat = Ecrire("La mesure en mtre vaut : ",m) Ecrire("La mesure en pied vaut : ",p) m (n* 2.54) / 100 p n div 12 n 24 Fin DISTANCE

O.U.
m p n

53

Les actions lmentaires simples Tableau de dclaration des objets Objet


m p n

Type/nature
Rel Rel Entier

Rle
Mesure en mtre Mesure en pied Mesure en pouce

Algorithme 0) 1) 2) 3) 4) Dbut DISTANCE n 24 p div 12 m (n* 2.54) / 100 Ecrire("La mesure en mtre vaut : ",m) Ecrire("La mesure en pied vaut : ",p) 5) Fin DISTANCE Traduction en Pascal PROGRAM DISTANCE; USES WINCRT; VAR m,p:REAL; n:INTEGER; BEGIN n :=24 ; p :=n DIV 12; m := (n* 2.54) / 100; WRITELN('La mesure en pied vaut :',p); WRITELN('La mesure en mtre vaut :',m); END.

I.1 Dfinition
La sortie de donnes est l'action convenue lmentaire qui consiste crire une donne sur un priphrique de sortie tel que l'cran, l'imprimante, etc. Activit 2 Effectuer une analyse, crire un algorithme et faire la traduction en Pascal du programme intitul INVERSE qui saisit un entier de trois chiffres puis dtermine le nombre correspondant lorsqu'on l'crit l'envers. Exemple : 123 devient 321 et 120 devient 21
54

Les actions lmentaires simples Analyse Nom = INVERSE S


6 5 4 3 2 1 7

L.D.E.

O.U.
I C D U E

Rsultat = Ecrire (I) I C+(D*10)+(U*100) U E MOD 10 D (E DIV 10) MOD 10 C E DIV 100 E = Donne("Donner un entier naturel de trois chiffres ") Fin INVERSE

Tableau de dclaration des objets Objet


I C D U E

Type/nature
Entier Entier Entier Entier Entier

Rle
L'inverse de E Chiffre des centaines de E Chiffre des dizaines de E Chiffre des units de E L'entier E

Algorithme 0) Dbut INVERSE 1) Lire (E) 2) C E DIV 100 3) D (E DIV 100) MOD 10 4) U E MOD 10 5) I C+(D*10)+(U*100) 6) Ecrire (I) 7) Fin INVERSE Traduction en Pascal PROGRAM INVERSE; USES WINCRT; VAR E,U,D,C,M,I : INTEGER; BEGIN WRITE('Donner un entier naturel de trois chiffres : '); READLN(E); C:= (E DIV 100); D:= (E DIV 10) MOD 10; U:= E MOD 10; I:= C+(D*10)+(U*100); WRITE (I); END.
55

Les actions lmentaires simples Un cas d'xecution

I.2 Vocabulaire et syntaxe


Au niveau de l'analyse et de l'algorithme Ecrire(nom_variable) Au niveau de Pascal Commentaire

Ecrire("message")

Affichage du contenu de la WRITE (nom_variable); variable identifie par WRITELN (nom_variable); nom_variable Affichage de la chane de WRITELN ('message') ; caractres "message" telle que vous l'avez crite. La valeur de la variable X WRITELN('message', devient gale la valeur de nom_variable) ; la variable Y. WRITELN (expression); La valeur de la variable L devient gale la longueur de la chane Ch divise par deux.

Ecrire("message",nom_variable)

Ecrire (Expression)

Exemple 1 : Analyse et algorithme


Ecrire(long*larg) Ecrire("la surface d'un rectangle est : ", long*larg) Ecrire("la surface d'un rectangle est : ", long ,"* ",larg,"= ", s)

Exemple 2 : Analyse et algorithme


Ecrire (age) Ecrire (Nom," ",prnom) WRITE (age); WRITELN (Nom,' ',prnom);

Pascal

Ecrire (Nom," ",prnom," a pour age : ",age) WRITELN (Nom,' ',prnom,' a pour age : ' ,age);

Remarques :

En Pascal l'affichage d'un texte est plac entre apostrophes. La procdure WRITE affiche et laisse le curseur juste aprs le dernier caractre
affich.

La procdure WRITELN provoque un retour la ligne aprs l'affichage.


56

Les actions lmentaires simples

I.3 Formatage de l'affichage des rsultats


I.3.1. Introduction Revenons l'activit 1 et observons les rsultats obtenus. Affichage des donnes
- Mesure en pouce est 1000

Affichage des rsultats


- Mesure en pied vaut 8.3000000000E+01 - Mesure en mtre vaut 2.5400000000E+01

Dans le langage Pascal, l'cran est par dfaut, divis en colonnes de largeur de 10 caractres, l'affichage des nombres se fait partir de la droite de la colonne en cours. Cependant, l'utilisateur pourra imposer son format d'criture en utilisant des facilits offertes par le langage. On pourra fixer la largeur de la colonne ainsi que le nombre de dcimales s'il s'agit de l'criture d'un rel. Pour chacun des activits suivantes, interprter les diffrents affichages et crire le programme en Pascal en effectuant vous-mme les modifications. I.3.2. Affichage des entiers Activit 3 PROGRAM Format1; USES WinCrt; CONST Entier1 = 114; Entier2 = -9999999; BEGIN WRITELN ('...Test sur les entiers...'); WRITELN ('123456789012345678901234567890'); WRITELN ('------------------------------'); WRITELN ( Entier1:2); WRITELN ( Entier1:3); WRITELN ( Entier1:5); WRITELN ( Entier1:24, Entier2); END.

57

Les actions lmentaires simples L'excution donne :

Interprtation : - L'instruction WRITELN (Entier1:5) permet d'afficher la valeur de l'entier Entier1 sur 5 caractres. - Lorsque le nombre de caractres que l'on prcise pour l'affichage est suprieur ou gal ce qui est requis, la valeur est affiche en tant justifie droite. - Si on fournit un nombre de caractres infrieur ce qui est requis pour l'affichage alors le compilateur n'en tient pas compte et affiche le rsultat sur un nombre correct de caractres. Syntaxe :

WRITE (valeur_entire : n) affiche la valeur entire dans une colonne de n caractres partir de la droite. Si la valeur entire comporte plus que n chiffres alors l'affichage commence par la gauche.

I.3.3. Affichage des rels Activit 4 PROGRAM Format2; USES WinCrt; CONST Reel1 = 19.0; Reel2 = 1.23456E-3; BEGIN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN END. ('...Test sur les rels...'); ('123456789012345678901234567890'); ('------------------------------'); ( Reel1); ( Reel1:5:0); ( Reel1:2:3); ( Reel1:7:1); ('------------------------------'); ( Reel2); ( Reel2:10:5); ( Reel2:2:5);
58

Les actions lmentaires simples L'excution donne :

Interprtation : - Pour les nombres rels, la syntaxe est tendue puisque nous voyons apparatre un second ":" suivi d'un nombre. La premire squence a la mme signification qu'avec les entiers ; par exemple, WRITELN (Rel1 :5 :0) ; provoquera l'affichage de ce nombre sur 5 caractres (si c'est possible). - La seconde squence prcise le nombre de dcimales que nous dsirons afficher pour le nombre en question. - Si vous ne prcisez pas le nombre de dcimales alors le compilateur optera pour la notation scientifique en puissance de 10. Syntaxe :

WRITE (valeur_relle) affiche le nombre en notation scientifique (x.xxxxxE+xx prced d'un espacement.) WRITE (valeur_relle : np) affiche le nombre en notation scientifique sur np positions prcd d'un espacement. WRITE (valeur_relle : np : nd) affiche le nombre sur np positions avec nd dcimales.

I.3.4. Affichage des chanes de caractres Activit 5 PROGRAM Format3; USES WinCrt; CONST Ch1 = 'Pche'; Ch2 = 'sous-marine' ;
59

Les actions lmentaires simples BEGIN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN WRITELN END. ('...Test sur les chaines de caracteres...'); ('123456789012345678901234567890'); ('------------------------------'); ( Ch1); ( Ch1:5); ( Ch1:7); ( Ch1,Ch2); ( Ch1:7,Ch2:4); ( Ch1:7,Ch2:12);

L'excution donne :

Syntaxe : L'affichage d'une chane de caractres se fait normalement la place du curseur.

WRITE (chane : n) affiche la chane sur n positions : insertion d'espacement gauche de la chane si il y a moins de n caractres sinon si n est insuffisant alors ajustement automatique.

I.3.5. Affichage des caractres Activit 6 PROGRAM Format4; USES WinCrt; CONST Char1 = 'X'; Char2 = 'Y'; BEGIN WRITELN ('...Test sur les caracteres...'); WRITELN ('123456789012345678901234567890'
60

Les actions lmentaires simples WRITELN WRITELN WRITELN WRITELN WRITELN END. ('------------------------------'); ( Char1); ( Char1:2); ( Char1:3, Char2:4); ( Char1:3, Char2:5);

L'excution donne :

Syntaxe : L'affichage d'un caractre se fait normalement la place du curseur.

WRITE (car : n) affiche le caractre la position n et insertion d'espacement gauche du caractre.

Remarque : Formater les sorties signifie qu'on dsire leur imposer un format d'affichage. Activit 7 crire en Pascal le programme intitul ConversionDinarEuro, qui convertit un montant en dinars en son quivalent en Euro et inversement. Traduction en Pascal PROGRAM ConversionDinarEuro; USES WinCrt; CONST Affichage = 8; (* nombres affiches sur 8 caractres *) Precision = 3; (* 2 dcimales *) Change = 1.705; VAR PrixDinar, PrixEuro : real; BEGIN WRITE ('Entrez un prix en Dinars : '); READLN (PrixDinar); WRITE ('Entrez un prix en Euros : ');
61

Les actions lmentaires simples READLN (PrixEuro); WRITE (Prixdinar:Affichage:Precision); WRITELN ('D = ', (PrixDinar/Change):Affichage:Precision, 'E'); WRITE (PrixEuro:Affichage:Precision); WRITELN ('E = ', (PrixEuro*Change):Affichage:Precision, 'D'); END.

II. Les oprations d'entre


Activit 8 Un son numrique est caractris par : - la qualit. Elle est dtermine par la frquence d'chantillonnage c--d plus la frquence est leve, plus on prlve d'chantillons et par consquent, meilleure sera la qualit. - la rsolution. Elle est dtermine par la plage de valeurs que peuvent prendre les chantillons, cette plage est caractrise par le nombre de bits allous. Plus on alloue de bits, plus la plage est grande et plus l'information sur le son est abondante. - Le nombre de voies (monophonique, strophonique ) . On vous demande de dterminer et d'afficher la taille occupe par un morceau de musique ayant les caractristiques suivantes : - Dure : 140 secondes - Taux d'chantillonnage : 22000 hertz - Rsolution : 16 bits - Son strophonique 1) Effectuer une analyse du problme intitul MUSIQUE. 2) Dduire l'algorithme de cette analyse. 3) Traduire en Pascal cet algorithme. Analyse Nom = MUSIQUE S
6 5 4 3 2 1 7

L.D.E.
Rsultat = Ecrire ("la taille de cette musique en MO est : ",T) T F*R*V*D DIV (1024*1024*8) V = Donne ("Entrer le nombre de voies: ") R = Donne ("Entrer la rsolution en bits: ") F = Donne ("Entrer la frquence d'chantillonnage en HZ: ") D = Donne ("Entrer la dure en secondes : ") Fin MUSIQUE

O.U.
T V R F D

62

Les actions lmentaires simples Tableau de dclaration des objets Objet


T V R F D

Type/nature
Entier Entier Entier Entier Entier

Rle
La taille de la musique Le nombre de voies La rsolution Frquence d'chantillonnage La dure d'enregistrement

Algorithme 0) Dbut MUSIQUE 1) Ecrire ("Entrer la dure en secondes : "), Lire(D) 2) Ecrire ("Entrer la frquence d'chantillonnage en HZ : "), Lire(F) 3) Ecrire ("Entrer la rsolution en bits : "), Lire(R) 4) Ecrire ("Entrer le nombre de voies : "), Lire(V) 5) T F*R*V*D DIV (1024*1024*8) 6) Ecrire ("la taille de cet musique en MO est : ",T) 7)Fin MUSIQUE Traduction en Pascal PROGRAM MUSIQUE; USES WINCRT; VAR D,V,R,F,T: LONGINT;{*entier long sur 4 octts*} BEGIN WRITELN('Entrer le temps d''enregistrement en secondes : '); READLN(D); WRITELN('Entrer la frquence d''chantillonnage en HZ: '); READLN(F); WRITELN('Entrer la rsolution en bits: '); READLN(R); WRITELN('Entrer le nombre de voies: '); READLN(V); T:= F*R*V*D DIV (1024*1024*8); WRITELN('la taille de cette musique en MO est : ',T); END. Un cas d'excution

63

Les actions lmentaires simples

II. 1 Dfinition
Une entre consiste introduire une donne partir d'une source d'entre (clavier, souris, stylo optique ). C'est une opration qui permet d'affecter une variable en mmoire, une valeur de mme type ou compatible avec celle de la variable. Activit 9 On se propose d'crire un programme intitul IMAGE qui calcule le nombre de pixels et le poids d'une image numrique en mga octet (MO), d'une dimension (hauteur, largeur) exprimes en pouces et d'une rsolution en dpi (points par pouce). Analyser ce problme et en dduire l'algorithme et le programme Pascal correspondant. NB. - La rsolution indique le nombre de points sur une unit de longueur de l'image. - Le nombre de pixels dans une image = hauteur * rsolution* longueur *rsolution - L'image est code en 24 bits/pixel ou 48 bits/pixel c'est dire 8 ou 16 bits par canal R (rouge), V (vert) et B (bleu). - Le nombre total d'octets dans l'image (poids) = Nombre de pixels * nombre d'octets par pixel . Exemple : Soient les caractristiques suivantes d'une image : - largeur 4 pouces - hauteur 5 pouces - rsolution 1200 dpi - codage de 3 octets en 24 bits (1octet par canal R,V et B). Le nombre de pixels dans cette image est : 4*5* 12002 Le poids de cette image est : 4*5* 12002*3 octets Analyse S
8 7 6 5 4 3 2 1 9 Rsultat = Ecrire(n,p1) P1 p / (1024*1024) p n*c n l*r*h*r c=DONNEE ("Entrer le codage de l'image : ") r=DONNEE("Entrer la rsolution de l'image: ") h=DONNEE ("Entrer la hauteur de l'image : ") l=DONNEE("Entrer la largeur de l'image: ") Fin IMAGE 64

Nom = IMAGE L.D.E. O.U.


n p1 c p r h l

Les actions lmentaires simples Tableau de dclaration des objets Objet


n pl c p r h l

Type/nature
Entier Entier Entier Entier Entier Entier Entier

Rle
Nombre de pixels Poids de l'image en mga octet Codage de l'image Poids de l'image en octet Rsolution de l'image Hauteur de l'image Largeur de l'image

Algorithme 0) 1) 2) 3) 4) 5) 6) 7) 8) 9) Dbut IMAGE Ecrire("Entrer la largeur de l'image: "); Lire(l) Ecrire("Entrer la hauteur de l'image: "); Lire (h) Ecrire("Entrer la rsolution de l'image: "); Lire(r) Ecrire("Entrer le codage de l'image: "); Lire(c) n l*r*h*r p n*c P1 p / (1024*1024) Ecrire(n,p1) Fin IMAGE

Traduction en Pascal PROGRAM IMAGE; USES WINCRT; VAR n,c,p,r,h,l:INTEGER; P1:REAL; BEGIN WRITELN ('Entrer la largeur de l''image:');READLN(l); WRITELN ('Entrer la hauteur de l''image : '); READLN (h); WRITELN ('Entrer la rsolution de l''image: '); READLN (r); WRITELN ('Entrer le codage de l''image: '); READLN (c); n:= l*r*h*r; p:= n*c; P1:= p / (1024*1024); WRITE(n,p1); END.

65

Les actions lmentaires simples

II. 2 Vocabulaire et syntaxe


Niveau analyse Variable = donne Niveau algorithme Lire (variable) Niveau de Pascal READLN (variable); ou READ (variable); READLN (var1,var2,var3); ou READ (var1,var2,var3);

var1,var2,var3 = donne

Lire (var1,var2,var3)

Exemples :
Analyse X = donne Algorithme Lire(X) Ecrire (Entrer Y) Lire (variable) ou Lire (Entrer Y, Y) Lire (var1,var2,var3) Pascal READLN (X); WRITE (Entrer Y); READLN (variable); ou READ (variable); READLN (var1,var2,var3); ou READ (var1,var2,var3);

Y= donne ("Entrer Y")

(ch1,ch2,ch3) =donne

Remarques :

Le langage PASCAL comprend deux procdures standards de lecture : READ et


READLN.

Les instructions READ et READLN permettent de transfrer des donnes vers des
variables situes dans la mmoire centrale travers des priphriques d'entre. Par dfaut, le priphrique d'entre utilis est le clavier.

Lorsqu'on utilise une seule instruction READLN pour lire plusieurs variables, on fait
entrer les valeurs spares par des virgules. Cependant, dans le cas o chaque variable est lue sparment, un retour de chariot est ncessaire, aprs chaque valeur entre partir du clavier, pour dclencher la lecture de celle-ci.

La lecture de plusieurs variables de type Chane la fois est non fonctionnelle. La seule diffrence qui existe entre READLN et READ, c'est que READLN commande un changement de ligne aprs la lecture de la liste des variables spcifies comme paramtres. Ce changement de ligne ne prend effet qu' la prochaine lecture occasionne par un autre nonc READ ou READLN.

66

Les actions lmentaires simples Activit 10 crire en Pascal le programme intitul DATE, qui initialise la date maintenue par le systme d'exploitation, en utilisant la procdure SetDate () de la bibliothque WinDos. NB. - La syntaxe de la procdure est : procedure SetDate(Annee, Mois, jour); - les paramtres valides sont 1980..2099 pour Annee, 1..12 pour Mois et 1..31 pour Jour. Si la date est invalide, la demande est ignore. Traduction en Pascal PROGRAM DATE; USES WinCrt,WinDos; VAR a,m,j: WORD; BEGIN WRITE ('Entrez l''anne : ');READLN ( a); WRITE ('Entrez le mois : '); READLN ( m); WRITE ('Entrez le jour : '); READLN ( j); SetDate(a,m,j); END. Remarque : le type WORD est le type entier non sign ; le domaine de dfinition est de 0 65535.

Retenons
Pour afficher l'cran une donne quelconque, on utilise l'instruction lmentaire de sortie traduite au niveau de l'algorithme et de l'analyse par le verbe Erire et en Pascal par l'instruction WRTIE ou WRITELN. Pour imposer un format d'affichage sur l'cran on doit formater les sorties. Cependant, l'utilisateur pourra imposer son format d'criture en fixant la largeur de la colonne ainsi que le nombre de dcimales s'il s'agit de l'criture d'un rel. Pour saisir une donne via le clavier pour la mettre dans une variable donne, on utilise l'instruction lmentaire d'entre exprime par le verbe Lire ou le mot DONNE et en Pascal par l'instruction READ ou READLN.
67

Les actions lmentaires simples

Exercices
Exercice 1 crire un algorithme permettant de calculer et d'afficher la dure entre deux horaires exprims en heures, minutes, secondes. Cette dure sera exprime aussi en heures, minutes et secondes. Exercice 2 Faire une analyse, dduire un algorithme puis le traduire en un programme Pascal intitul SOMME qui calcule la somme des n premiers entiers naturels non nuls en utilisant la formule mathmatique suivante : 1+2+..+n =(n*(n+1))/2. Exercice 3 X et Y tant deux valeurs numriques. crire une analyse, un algorithme et la traduction en Pascal du programme intitul CALCUL qui effectue la somme, le produit et la moyenne arithmtique de X et Y. Exercice 4 La puissance d'une installation de pompage est de 100 kW. Le rendement de cette installation est de 75%. Effectuer une analyse, un algorithme et la traduction en Pascal du programme intitul POMPAGE qui permet de calculer le dbit exprim en litres d'eau par seconde? Sachant que : - La puissance utile de l'installation = La puissance de l'installation * Le rendement de cette installation. - Pour remonter un litre d'eau la surface, il faut produire un travail W = Force*profondeur (m). - La force = masse d'un litre d'eau (1Kg) * pesanteur G(10N /Kg). - Le dbit de la pompe en litres par seconde = La puissance utile de l'installation/le travail W. Exercice 5 Deux trains, distants de 60 km, roulent l'un vers l'autre sur le mme itinraire. Le train A avance une vitesse de 70 km/h. Le train B avance une vitesse de 55 km/h. Faire une analyse du programme intitul RENCONTRE qui permet de calculer le temps o les deux trains vont se rencontrer? Exercice 6 Pour crer un rpertoire, on utilise la procdure prdfinis MkDir(Path: string) de l'unit DOS. crire un programme en Pascal, qui permet de crer un rpertoire ; le nom du rpertoire et le chemin sont saisis au clavier Exemple : MkDir('C:\TEST'); permet de crer le rpertoire 'test' sous la racine C :.

68

Les actions lmentaires simples Exercice 7 crire un programme qui demande l'utilisateur les coordonnes de deux points distincts du plan et qui affiche le coordonnes du point milieu. Exercice 8 Prciser le rsultat obtenu la sortie d'un programme par les squences d'instructions suivantes : VAR var1, var2, var3, var4, var5 : REAL; o : var1 vaut 1.2 var2 vaut 0.00089 var3 vaut 45 var4 vaut 10095.095 var5 vaut 2.7182818281 Squences d'instructions : 1) WRITE(var1 : 8 : 4); 6) WRITE(var1 : 6 : 4); 2) WRITE(var2 : 8 : 4); 7) WRITE(var2 : 10 : 6); 3) WRITE(var3 : 4 : 1); 8) WRITE(var3 : 10 : 6); 4) WRITE(var4 : 3 : 1); 9) WRITE(var4 : 7 : 5); 5) WRITE(var5 : 3 : 1); 10) WRITE(var5 : 10 : 4); Exercice 9 crire un programme en Pascal permettant de lire 2 nombres entiers positifs infrieurs 999 et affiche l'cran la multiplication et la division comme suit : 120 130 : 11 x 11 9 :.. : 11 = 1320 : Exercice 10 crire un programme qui demande l'utilisateur une valeur pour U0, r et n et qui affiche la nime valeur de la suite arithmtique dfinie par U0 et Un+1 = Un + r. (On rappelle la proprit : Un = U0 + n.r) Exercice 11 crire un programme en Pascal qui saisit une capacit d'un disque dur puis en reprenant les caractristiques ci-dessus, calculer et afficher : - le nombre de disquettes ncessaires une sauvegarde complte du disque dur, celui-ci tant suppos entirement rempli. - Si on utilise des CDROM au lieu des disquettes, donner le nombre de CD. - Si on utilise un logiciel de compression de donnes avec un taux de compression 20%, quel sera le nombre de CD ncessaires une sauvegarde complte du disque.
69

CHAPITRE

Chapitre 3
Les structures de contrle conditionnelles

Objectifs :
Rsoudre des problmes faisant appel aux structures de contrle conditionnelles. Choisir la forme adquate des structures de contrle conditionnelles. Prsenter les solutions sous forme d'un algorithme puis d'un programme.

Plan du chapitre :
Leon 1 : La structure conditionnelle simple Leon 2 : La structure conditionnelle gnralise Leon 3 : La structure conditionnelle choix

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle simple


Objectifs spcifiques :
Rsoudre des problmes faisant appel aux structures de contrle conditionnelles simples. Prsenter les solutions sous forme d'un algorithme puis d'un programme.

Plan de la leon :
I. Introduction II. La structure conditionnelle simple II.1. La forme rduite II.2. La forme alternative Retenons Exercices

71

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle simple


L'art est une certaine disposition, accompagne de rgle vraie, capable de produire; le dfaut d'art, au contraire, est une disposition produire accompagne de rgle fausse.
ARISTOTE

I. Introduction
Vous avez vu en 3me anne que les structures de contrle conditionnelles permettent un ordinateur de prendre des dcisions. En effet, les oprations accomplir peuvent varier dans un algorithme selon les donnes fournies. Par exemple : - Aviser la date de validit d'un logiciel en version dmonstration. - Calculer le montant net d'une facture en fonction des remises accordes. - Dclencher une alarme en fonction de l'tat d'un dtecteur. - Donner les proprits d'un nombre donn (pair, impair, premier ). - Evaluer des sorties en utilisant des fonctions logiques. - Dterminer la nature d'un caractre tap au clavier. Il existe trois types de structures de contrle conditionnelles : la structure conditionnelle simple la structure conditionnelle gnralise la structure conditionnelle choix Dans cette leon, nous expliquerons comment crire des algorithmes rpondant la structure de contrle conditionnelle simple.

II. La structure de contrle conditionnelle simple


II.1 La forme rduite
II.1.1. Vocabulaire et syntaxe Au niveau de l'analyse

72

Dcision = [Initialisation] Si condition Alors Instruction 1 Instruction 2 - - - - - - - - Instruction n FinSi

Ensemble d'instructions excutes si la condition est valide

Les structures de contrle conditionnelles Remarques :

L'initialisation et le traitement sont gnralement des squences formes de plusieurs instructions. Nous obtenons donc l'criture suivante :

Dcision =

Init i1 ----Init iP

Si condition Alors Instruction Instruction - - - - - - Instruction FinSi 1 2 n

La condition est une expression logique qui prend soit la valeur VRAI soit la
valeur FAUX. Si la condition est VRAI , les instructions entre Alors et FinSi sont excutes. La condition peut tre une condition compose de plusieurs autres propositions logiques lies par les oprateurs boolens. Exemple : Not (n>2) OU (x>3) ET (x<50) Au niveau de l'algorithme - - {Initialisation} Si condition Alors Instruction 1 Instruction 2 - - - - Traitement - - - - Instruction n FinSi Traduction en Pascal - ; Inst1; InstP; {le corps d'initialisation} IF condition THEN BEGIN Instruction i1; Instruction i2; - ; Traitement - ; Instruction in; END; - ;
73

Traitement

Les structures de contrle conditionnelles Activit 1 On se propose d'crire un programme intitul REGULATEUR qui affiche le message "Rgulateur dclench" et produit un bip sonore si la temprature n'est pas comprise entre 18 C et 24 C. Analyser ce problme et en dduire l'algorithme correspondant. NB. On rappelle que CHR(7) produit un bip sonore. Analyse Nom = REGULATEUR S
3 2

L.D.E.
Rsultat = Ecrire (Bip,Message) (Bip,Message) = [Bip "", Message "Rgulateur non dclench"] Si (Temp < 18) ou (Temp > 24) Alors Message " Rgulateur dclench" Bip CHR(7) FinSi Temp = Donne ("Entrer la valeur de la temprature : ") Fin REGULATEUR

O.U.
Bip Message Temp

1 4

Tableau de dclaration des objets


Objet Bip Message Temp Type / Nature Caractre Chane de caractres Entier Rle Produit un bip sonore Sauvegarde l'tat de l'alarme Saisie la temprature

Algorithme 0) Dbut REGULATEUR 1) crire ("Entrer la valeur de la temprature : "), Lire (Temp) 2) [Bip "", Message "Rgulateur non dclench"] Si (Temp < 18) ou (Temp > 24) Alors Message "Rgulateur dclench" Bip chr(7) FinSi 3) Ecrire (Bip,Message) 4) Fin REGULATEUR

74

Les structures de contrle conditionnelles II.1.2. Dfinition Une structure de contrle conditionnelle est dite forme simple rduite lorsque le traitement dpend d'une condition. Si la condition est value VRAI , le traitement est excut. Activit 2 Traduire l'algorithme REGULATEUR en Pascal. Traduction en Pascal PROGRAM REGULATEUR; USES WINCRT; VAR Temp : INTEGER; Message : STRING; Bip : CHAR; BEGIN WRITE ('Entrer la valeur de la temprature : '); READLN(Temp); Bip := ''; Message := 'Rgulateur non dclench'; IF(Temp < 18) OR (Temp > 24) THEN BEGIN Message := 'Rgulateur dclench'; Bip := Chr(7); END; WRITE(Bip,Message); END. Activit 3 On se propose d'crire un programme intitul CLASSEMENT qui saisit 2 chanes de caractres puis les affiche en commenant par la plus longue. Si elles sont de mme longueur la premire saisie sera affiche en premier. Questions : 1) Analyser ce problme et en dduire l'algorithme correspondant. 2) Traduire l'algorithme CLASSEMENT en Pascal.

75

Les structures de contrle conditionnelles Tableaux de dclaration des objets Nom = CLASSEMENT S
4 3

L.D.E.
Rsultat = Ecrire (Chaine1, Chaine2) (Chaine1, Chaine2) = [Chaine1 Ch1, Chaine2 Ch2] Si (LONG(Ch2) > LONG(Ch1)) Alors Chaine1 Ch2 Chaine2 Ch1 FinSi Ch2 = Donne ("Entrer la Chaine 2 : ") Ch1 = Donne ("Entrer la Chaine 1 : ") Fin CLASSEMENT

O.U.
Chaine1 Chaine2 Ch1 Ch2

2 1 5

Tableau de dclaration des objets


Objet Chaine1 Chaine2 Ch1 Ch2 Type / Nature Rle Chane de Caractres Sauvegarde la plus petite chane Chane de Caractres Sauvegarde la plus longue chane Chane de Caractres Saisie la premire chane Chane de Caractres Saisie la deuxime chane

Algorithme 1) Dbut CLASSEMENT 2) Ecrire ("Entrer la Chane 1 : "), Lire (Ch1) 3) Ecrire ("Entrer la Chane 2 : "), Lire (Ch2) 4) [Chaine1 Ch1, Chaine2 Ch2] Si (LONG(Ch2) > LONG(Ch1)) Alors Chaine1 Ch2 Chaine2 Ch1 FinSi 4) Ecrire (Chaine1, " ", Chaine2) 5) Fin CLASSEMENT Traduction en Pascal PROGRAM CLASSEMENT; USES WINCRT; VAR Chaine1,Chaine2,Ch1,Ch2:STRING;

76

Les structures de contrle conditionnelles BEGIN WRITE ('Entrer la Chane 1 : '); READLN(Ch1); WRITE ('Entrer la Chane 2 : '); READLN(Ch2); Chaine1 := Ch1; Chaine2 := Ch2; IF (LONG(Ch2) > LONG(Ch1)) THEN BEGIN Chaine1 := Ch2; Chaine2 := Ch1; END; WRITE (Chaine1,' ', Chaine2); END.

II.2 La forme alternative


II.2.1. Vocabulaire et syntaxe Au niveau de l'analyse et de l'algorithme Dcision = [Initialisation] Si condition Alors Instruction 1.1 Instruction 1.2 - - - - - - - - Instruction 1.n Sinon Instruction 2.1 Instruction 2.2 - - - - - - - - Instruction 2.m FinSi Remarques :

Lorsque l'valuation de la condition produit la valeur :


VRAI seules les instructions du traitement 1 sont excutes. FAUX seules les instructions du traitement 2 sont excutes. Chaque traitement peut comporter une ou plusieurs instructions. Les instructions du traitement 1 sont dlimites entre Alors et Sinon et celles du traitement 2 le sont entre Sinon et Finsi .
77

Traitement 1 Ensemble d'instructions excutes si la condition est valide

Traitement 2 Ensemble d'instructions excutes si la condition est fausse

Les structures de contrle conditionnelles Traduction en Pascal - - - ; Inst1; InstP; {le corps d'initialisation} IF condition THEN BEGIN Instruction i11; Instruction i12; - ; Traitement 1 - ; Instruction i1n; END; ELSE BEGIN Instruction i21; Instruction i22; - ; Traitement 2 - ; Instruction i2m; END; - - - ; Remarque : On ne met pas de ";" aprs le END qui prcde le ELSE car la structure conditionnelle n'est pas encore termine. Activit 4 Un interrupteur de courant lectrique a deux tats ON-OFF (1, 0). Selon le montage, un circuit lectrique deux interrupteurs peut raliser les deux fonctions logiques ET, OU. Faire une analyse, crire un algorithme puis la traduction en Pascal du programme intitul FN_LOGIQUE_OU qui, suivant l'tat des interrupteurs K et L, affiche l'tat de la lampe LED. Le principe d'une porte logique OU peut se rsumer comme suit : Deux entres et une sortie. Suivant le niveau logique appliqu aux entres (niveau 0 ou 1) la sortie sera 0 ou 1.

78

Les structures de contrle conditionnelles


Fonction symbole Table de vrit
Fonction OU (OR) Entre K Entre L 0 0 1 0 1 Sortie 0 1 1 1

Circuit lectrique

OU (OR)
0 1 1

Analyse Nom = FN_LOGIQUE_OU S


4 3 Rsultat = Ecrire (LED) LED = [ ] Si (K=0) ET (L=0) Alors LED "teinte" Sinon LED "Allume" FinSi L = Donne ("Entrer l'tat de l'interrupteur L : ") K= Donne ("Entrer l'tat de l'interrupteur K : ") Fin FN_LOGIQUE_OU

L.D.E.

O.U.
LED K L

2 1 5

Tableau de dclaration des objets


Objet LED K L Type / Nature Chane de Caractres Entier Entier Rle Sauvegarde l'tat de la LED Saisie l'tat de l'interrupteur K Saisie l'tat de l'interrupteur L

Algorithme 0) Dbut FN_LOGIQUE_OU 1) Ecrire ("Entrer l'tat de l'interrupteur K: "), Lire (K) 2) Ecrire ("Entrer l'tat de l'interrupteur L : "), Lire (L) 3) Si (K=0) ET (L=0) Alors LED " teinte " Sinon LED " Allume " FinSi 4) Ecrire (LED) 6) Fin FN_LOGIQUE_OU
79

Les structures de contrle conditionnelles Traduction en Pascal PROGRAM FN_LOGIQUE_OU; USES WINCRT; VAR K,L:INTEGER; LED:STRING; BEGIN WRITE ('Entrer l''tat de l''interrupteur K : ');READLN(K); WRITE ('Entrer l''tat de l''interrupteur L : ');READLN(L); IF (K=0)AND(L=0) THEN LED := 'teinte' ELSE LED := 'Allume'; WRITE (LED); END. II.2.2 Dfinition Une structure de contrle conditionnelle est dite forme alternative lorsque le traitement dpend d'une condition deux tats : si la condition est value VRAI , le premier traitement est excut ; si la condition est value FAUX , le second traitement est excut. Activit 5 crire un programme qui demande l'utilisateur de saisir 4 valeurs relles correspondants aux coordonnes de 2 vecteurs u (x1 ,y1) et v (x2 ,y2) et qui dtermine et affiche si ces vecteurs sont orthogonaux entre eux ou pas. Analyser ce problme et en dduire l'algorithme correspondant. NB. Deux vecteurs sont orthogonaux si leur produit scalaire est gal 0. Pr-analyse Soient u (x1, y1) et v (x2 ,y2) dans une base orthonorme de l'ensemble des vecteurs du plan. u perpendiculaire v quivaut x1 . x2 + y1 . y2=0.

80

Les structures de contrle conditionnelles Analyse Nom = ORTHOGONAL S


4 3 Rsultat = Ecrire (Nature ) Nature= [ ] Si x1*x2 + y1*y2=0 Alors Nature" u est perpendiculaire v " Sinon Nature" u n'est pas perpendiculaire v " FinSi x2,y2 = Donne ("Entrer les coordonns du vecteur v: ") x1,y1 = Donne ("Entrer les coordonns du vecteur u: ") Fin ORTHOGONAL

L.D.E.

O.U.
Nature x1 x2 y1 y2

2 1 5

Tableau de dclaration des objets


Objet Nature x1,x2,y1,y2 Type / Nature Chane Rel Rle Nature des deux vecteurs Coordonnes des vecteurs u et v

Algorithme 0) Dbut ORTHOGONAL 1) Ecrire ("Entrer les coordonns du vecteur u: "), Lire(x1,y1) 2) Ecrire ("Entrer les coordonns du vecteur v: "), Lire(x2,y2) 3) Si x1*x2 + y1*y2=0 Alors Nature" u est perpendiculaire v " Sinon Nature" u n'est pas perpendiculaire v " FinSi 4) Ecrire (Nature) 5) Fin ORTHOGONAL

Activit 6 Traduire l'algorithme ORTHOGONAL en Pascal.

81

Les structures de contrle conditionnelles Traduction en Pascal PROGRAM ORTHOGONAL; USES WINCRT; VAR Nature:STRING; X1,y1,X2,Y2:REAL; BEGIN WRITE('Entrer les coordonns du vecteur u: ');READLN(x1,y1); WRITE('Entrer les coordonns du vecteur u:');READLN(x2,y2); IF x1*x2 + y1*y2=0 THEN Nature := 'u est perpendiculaire v' ELSE Nature := 'u n''est pas perpendiculaire v'; WRITE (Nature); END.

Retenons
La structure de contrle conditionnelle simple est utilise pour dfinir au maximum deux rsultats dpendant de l'valuation d'une seule condition. - Une structure de contrle conditionnelle est dite forme simple rduite lorsque le traitement dpend d'une condition. Si la condition est value VRAI , le traitement est excut. - Une structure de contrle conditionnelle a une forme alternative si suivant la valeur d'une condition, on excute soit un traitement 1 soit un traitement 2.
La structure de contrle Au niveau de l'analyse et Au niveau de Pascal conditionnelle simple de l'algorithme [Initialisation] - - -; Si condition Alors If condition then La forme rduite Traitement Traitement; FinSi [Initialisation] - - -; Si condition Alors If condition then Traitement1 Traitement1; Sinon Else Traitement2 Traitement 2; FinSi

La forme alternative

82

Les structures de contrle conditionnelles

Exercices
Pour chacun des exercices suivants, effectuer une analyse, dresser un algorithme et donner la traduction en Pascal. Exercice 1 Lire un nombre et afficher sa racine carre si elle existe. Exercice 2 Demander un caractre l'utilisateur et tester si ce caractre est majuscule ou minuscule. Exercice 3 Soit le tableau suivant : Afficher l'tat de la lampe S (allume ou teinte) suivant l'tat de l'interrupteur K.
Fonction symbole Table de vrit
Entre K Sortie 1 1

Circuit lectrique

OUI

0 0

Exercice 4 Ordonner dans le sens dcroissant, trois entiers saisis au clavier. Exercice 5 Saisir une chane de caractres et vrifier si elle est compose de plusieurs mots. Exercice 6 Lire l'anne et afficher si elle est ventuellement bissextile. NB. Si l'anne n'est pas divisible par 4, l'anne n'est pas bissextile. Exercice 7 L'universit dcide d'attribuer un e-mail ses tudiants selon le modle suivant : Nom@Campus.net Il y a cependant une restriction, si le nom excde sept caractres, il doit tre tronqu. Ainsi l'tudiant MohamedAli aura comme e-mail: Mohamed@campus.net Demander le nom de l'tudiant et afficher son e-mail.

83

Les structures de contrle conditionnelles Exercice 8 On veut dcrire le comportement d'un contrleur pour une porte d'entre par carte. Ce contrleur peut recevoir une indication de lecture d'une carte autorise (a) ou refuse (r). Nous avons les contraintes suivantes: Si une carte est refuse, il faut sonner immdiatement. Lorsqu'une carte est autorise, la porte s'ouvre. On se propose de faire un programme intitul CONTROLEUR qui lit l'tat d'un lecteur de carte et affiche le message "Porte en cours d'ouverture" si la carte est autorise, sinon produit un bip sonore si la carte est refuse. Exercice 9 Un chef d'entreprise dcide d'automatiser les horaires de dbut de travail, de pause et de fin de travail. Le systme consiste dclancher une alarme et afficher un message des heures bien prcises de la journe. On se propose de faire un programme intitul MINUTERIE qui lit l'heure maintenue par le systme d'exploitation et affiche le message "Reprise du travail" et produit deux bips sonores si l'horaire est quivalent 7 Heures et 30 Minutes ou 14 Heures, sinon affiche le message "Arrt du travail" et produit un seul bip sonore si l'horaire est quivalent 12 Heures ou 17 Heures et 15 Minutes. NB. - On rappelle que l'criture de CHR(7) produit un bip sonore. - La procdure prdfinei GETTIME renvoie l'heure maintenue par le systme d'exploitation. Syntaxe: procedure GETTIME(var Heure, Minute, Seconde, Sec100: Word); Description: les intervalles des valeurs renvoyes sont 0..23 pour heure, 0..59 pour minute, 0..59 pour Seconde et Sec100(centimes de secondes). Exercice 10 Saisir un entier de trois chiffres et afficher si cet entier est : Cube ou non (la somme des cubes de ses chiffres est gale lui mme). Pair - impair Positif - ngatif

84

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle gnralise


Objectifs spcifiques
Rsoudre des problmes faisant appel la structure de contrle conditionnelle gnralise Prsenter les solutions sous forme d'un algorithme puis d'un programme

Plan de la leon
I. Introduction II. Vocabulaire et syntaxe III. Dfinition Retenons Exercices

85

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle gnralise


La logique est l'tude des conditions formelles de la vrit
PIAGET

I. Introduction
Nous avons vu dans la leon prcdente qu'une structure conditionnelle simple conduit deux alternatives uniquement. Dans certain problmes faisant appel la structure de contrle conditionnelle, deux situations ne suffisent pas, d'o l'intrt de la structure de contrle conditionnelle gnralise qui rsout des problmes dans lesquels plusieurs alternatives sont envisageables.

II. Vocabulaire et syntaxe


Au niveau de l'analyse et de l'algorithme Rsultat = [Initialisation ] Si condition 1 Alors traitement 1 Sinon Si condition 2 Alors traitement 2 Sinon Si condition 3 Alors traitement 3 - - - - Sinon Si condition n-1 Alors traitement n-1 Sinon traitement n FinSi Remarques :

Lorsque l'valuation de la condition 1 produit la valeur :


VRAI, le traitement 1 sera excut puis l'excution continue avec l'instruction qui suit le Si gnralis. FAUX, la condition 2 sera value, si elle produit la valeur : VRAI, le traitement 2 sera excut puis l'excution continue avec l'instruction qui suit le Si gnralis. FAUX, la condition 3 sera value et ainsi de suite.
86

Les structures de contrle conditionnelles

Si aucune des N-1 premires conditions ne produit la valeur VRAI, c'est le traitement N qui sera excut. Chaque traitement peut comporter une ou plusieurs instructions. Si la partition des conditions est exhaustive, il existe une condition et une seule qui est vrai. Il est prfrable de mettre les vnements les plus probables en premier lieu. Au niveau de Pascal - - -; {Initialisation} IF condition 1 THEN traitement 1 ELSE IF condition 2 THEN traitement 2 ELSE IF condition 3 THEN traitement 3 - - ELSE IF condition N-1 THEN traitement N-1 ELSE traitement N ; - - -; Activit 1 Effectuer une analyse, crire un algorithme et faire la traduction en Pascal du programme intitul NATURE_TRIANGLE, qui partir de trois points donns A, B et C dtermine et affiche la nature du triangle (isocle en A, isocle en B, isocle en C, quilatral, quelconque). Pr-analyse Lorsqu'un triangle ABC est tel que AC = AB (les deux cts d'extrmit A sont gaux), alors on dit que le triangle est isocle de sommet A. A est le sommet principal du triangle. Le ct [BC], oppos A, est appel base du triangle. Si un triangle a trois cts de mme longueur, il est dit quilatral. Dans le plan cartsien, les points sont dfinis l'aide de leurs coordonnes dites cartsiennes. Soient deux points A et B dans le plan cartsien. On appelle (xA,yA) les coordonnes du point A et (xB,yB) les coordonnes du point B. La distance AB dans le plan vaut : AB = ( x A x A )2 + ( x A x A )2

87

Les structures de contrle conditionnelles Analyse Nom = NATURE_TRIANGLE S L.D.E.


8 7 Rsultat = Ecrire (Nature ) Nature= [ ] Si (AC=AB) et (AB=BC) Alors Nature"Triangle quilatral" Sinon Si AB=BC Alors Nature"Triangle isocle en B" Sinon Si AC=BC Alors Nature"Triangle isocle en C" Sinon Si AB= AC Alors Nature"Triangle isocle en A" Sinon Nature"Triangle quelconque" FinSi BC RacineCarr (Carr(Xc-Xb)+ Carr(Yc-Yb)) AB RacineCarr (Carr(Xb-Xa)+ Carr(Yb-Ya)) AC RacineCarr (Carr(Xc-Xa)+ Carr(Yc-Ya)) Xc,Yc = Donne ("Entrer les coordonns du point C: ") Xa,Yb = Donne ("Entrer les coordonns du point B: ") Xa,Ya = Donne ("Entrer les coordonns du point A: ") Fin NATURE_TRIANGLE

O.U.
Nature AB AC BC

6 5 4 3 2 1 9

Xc Xb Yc Yb Xa Ya

Tableau de dclaration des objets Objet


Nature AB,AC,BC Xc,Xb,Yc,Yb,Xa,Ya

Type/nature
Chane Rel Rel

Rle
Sauvegarde la nature du triangle Longueur des cts du triangle Saisie les coordonns des points A, B et C

Algorithme 0) Dbut NATURE_TRIANGLE 1) Ecrire ("Entrer les coordonns du point A: "), Lire(Xa,Ya) 2) Ecrire ("Entrer les coordonns du point B: "), Lire(Xb,Yb) 3) Ecrire ("Entrer les coordonns du point C: "), Lire(Xc,Yc) 4) ACRacineCarr (Carr(Xc-Xa)+ Carr(Yc-Ya)) 5) ABRacineCarr (Carr(Xb-Xa)+ Carr(Yb-Ya)) 6) BCRacineCarr (Carr(Xc-Xb)+ Carr(Yc-Yb))
88

Les structures de contrle conditionnelles 7) Si (AC=AB) et (AB=BC) Alors Nature"Triangle quilatral" Sinon Si AB=BC Alors Nature"Triangle isocle en B" Sinon Si AC=BC Alors Nature"Triangle isocle en C" Sinon Si AB = AC Alors Nature"Triangle isocle en A" Sinon Nature"Triangle quelconque" FinSi 8) Ecrire (Nature) 9) Fin NATURE_TRIANGLE Traduction en Pascal PROGRAM NATURE_TRIANGLE; USES WINCRT; VAR Nature:STRING; AC,AB,BC:REAL; Xc,Xb,Xa,Yb,Yc,Ya:REAL; BEGIN WRITE('Entrer les coordonns du point A: '); READLN(Xa,Ya); WRITE('Entrer les coordonns du point B: '); READLN(Xb,Yb); WRITE('Entrer les coordonns du point C: '); READLN(Xc,Yc); AC:= SQRT(SQR(Xc-Xa)+ SQR(Yc-Ya)); AB:= SQRT(SQR(Xb-Xa)+ SQR(Yb-Ya)); BC:= SQRT(SQR(Xc-Xb)+ SQR(Yc-Yb)); IF (AC=AB)and(AB=BC)THEN Nature:='Triangle quilatral' ELSE IF AB=BC THEN Nature:='Triangle isocle en B' ELSE IF AC=BC THEN Nature:='Triangle isocle en c' ELSE IF AC=AB THEN Nature:='Triangle isocle en A' ELSE Nature:='Triangle quelconque'; WRITE(Nature); END.

89

Les structures de contrle conditionnelles

III. Dfinition
Une structure de contrle conditionnelle est dite gnralise lorsqu'elle permet de rsoudre des problmes comportant plus de deux traitements en fonction des conditions. L'excution d'un traitement entrane automatiquement la non excution des autres traitements. Activit 2 Dans le but de dterminer la nature d'une solution chimique on utilise un pH_mtre. Une solution peut tre : - Acide fort si le pH est infrieur 2 - Acide faible si le pH est entre 2 et 6 - Neutre si le pH est gal 7 - Base faible si le pH est entre 8 et 12 - Base forte si le pH est suprieur 13 Pr-analyse On constate que le pH_mtre ne peut prendre que des valeurs entires, on pourra le considrer comme une variable de type entier. La solution chimique peut tre Acide, Neutre ou Basique. Analyse Nom = SOLUTION S
3 2 Rsultat = Ecrire (Nature ) Nature= [ ] Si (pH<2) Alors Nature"Acide fort" Sinon Si pH<7 Alors Nature"Acide faible" Sinon Si pH=7 Alors Nature"Neutre" Sinon Si pH<13 Alors Nature"Base faible" Sinon Nature"Base forte" FinSi pH = Donne ("Entrer le pH de la solution: ") Fin SOLUTION

L.D.E.

O.U.
Nature pH

1 4

90

Les structures de contrle conditionnelles Tableau de dclaration des objets Objet


Nature pH

Type/nature
Chane Entier

Rle
Sauvegarde de la nature de la solution Saisie le pH d'une solution

Algorithme 0) Dbut SOLUTION 1) pH = Donne ("Entrer le pH de la solution: ") 2) Si pH<2 Alors Nature"Acide fort" Sinon Si pH<7 Alors Nature"Acide faible" Sinon Si pH=7 Alors Nature"Neutre" Sinon Si pH<13 Alors Nature"Base faible" Sinon Nature"Base forte" FinSi 3) Ecrire (Nature) 4) Fin SOLUTION

Retenons
La structure de contrle conditionnelle gnralise offre la possibilit de rsoudre des problmes comportant plus de deux traitements. Une fois qu'une condition est value et qu'un traitement est excut les autres ne le seront pas. Cette conomie sur les tests se rpercute sur le temps d'excution du programme.
Au niveau de l'analyse et de l'algorithme La structure de contrle conditionnelle gnralise [Initialisation] Si cond1 Alors trait1 Sinon Si cond2 Alors trait2 Sinon Si cond3 Alors trait3 - - - - Sinon Si cond n-1 Alors trait n-1 Sinon trait n FinSi Au niveau de Pascal - - -; IF cond THEN trait1 ELSE IF cond2 THEN trait2 ELSE IF cond2 THEN trait3 - - ELSE IF cond n-1 THEN trait n-1 ELSE trait n ;

91

Les structures de contrle conditionnelles

Exercices
Pour chacun des exercices suivants, effectuer une analyse, crire un algorithme et faire la traduction en Pascal. Exercice 1 Lire le nom du port de communication et afficher le dbit correspondant.
Port E/S Blue tooth Infrarouge IEEE1394 USB1 USB2 Dbit 1 Mbits/S 12 Mbps 100 - 400 Mbits/s 12 Mbits/s 480 Mbits/s

Exercice 2 crire un programme qui affiche ce menu : 1. Effectuer une multiplication 2. Effectuer une addition 3. Effectuer une soustraction 4. Effectuer une division Puis saisit un rel x1, le choix de l'opration et un deuxime rel x2, puis affiche le rsultat de l'application de l'operateur choisi sur x1 et x2. prvoir un message d'erreur au cas o une entre incorrecte est faite. Exercice 3 Saisir deux entiers x et y, le premier en dcimal et le deuxime en binaire et vrifier si x est suprieur, infrieur ou gal y puis affiche le rsultat. Exercice 4 crire un programme Pascal intitul PROTOCOLE qui lit le nom d'un service internet, puis affiche le protocole correspondant. Exercice 5 Le conseil scientifique d'une institution effectue un vote pour dcider de l'achat de materiels informatiques. On vous demande d'crire un programme qui affiche la dcision prendre par le conseil sachant qu'elle est : Reporte si le pourcentage des neutress est stictement suprieur 50%, sinon elle est accepte si le pourcentage des favorables est strictement suprieur celui des dfavorables et rfuse dans le cas contraire. Exercice 6 Lire le type d'un fichier et afficher les extensions possibles. Exemple : Type de fichier : Image Extensions possibles : BMP / TIFF / GIF
92

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle choix


Objectifs spcifiques :
Rsoudre des problmes faisant appel la structure de contrle choix Prsenter les solutions sous forme d'un algorithme puis d'un programme Pascal

Plan de la leon :
I. Introduction II. Vocabulaire et syntaxe III. Dfinition Retenons Exercices

93

Les structures de contrle conditionnelles

Leon

La structure de contrle conditionnelle choix


Est ncessaire la proposition qui, tant vraie, n'est pas capable d'tre fausse, ou bien celle qui en est capable, mais qui est telle que les circonstances extrieures s'opposent ce qu'elle soit fausse.
LA PLEIADE

I. Introduction
Si la structure conditionnelle gnralise est une structure plusieurs traitements en fonction des conditions, la structure conditionnelle choix est en revanche un choix multiple lorsque plusieurs voies sont possibles selon les diffrentes valeurs que peut contenir une variable de type scalaire (slecteur). Cette structure rend le code source du programme plus lisible. Une combinaison entre la structure conditionnelle gnralise et la structure conditionnelle choix multiple est possible. Activit 1 Pour un entier N donn, lequel de ces nombres est multiple de 5 : N, N +1, N +2, N +3 et N +4. Effectuer une analyse, crire un algorithme et faire la traduction en Pascal du programme intitul MULTIPLE5, qui saisit un entier N et dtermine lequel parmi ces nombres est multiple de 5. Pr-analyse Pour vrifier que le premier entier N est multiple de cinq, il suffit de montrer que le reste de la division entire de N par 5 vaut 0. Si le reste est diffrent de 0 il suffit d'ajouter N la valeur (5-reste) pour que l'entier (N +5-reste) soit multiple de 5.

94

Les structures de contrle conditionnelles Analyse Nom = MULTIPLE5 S


4 3

L.D.E.
Rsultat = Ecrire (M ) M = [ ] Selon R Faire 0 : M "N" 1 : M "N +4" 2 : M "N +3" 3 : M "N +2" 4 : M "N +1" Fin Selon R N MOD 5 N = Donne ("Entrer un entier N : ") Fin MULTIPLE5

O.U.
M R N

2 1 4

Tableaux de dclaration des objets Objet


M R N

Type/nature
Chane de Caractres Rel Rel

Rle
Sauvegarde du rsultat Contient le reste Saisit de l'entier N

Algorithme 0) Dbut MULTIPLE5 1) Ecrire ("Entrer un entier N : "), Lire(N) 2) R N MOD 5 3) Selon R Faire 0 : M "N" 1 : M "N +4" 2 : M "N +3" 3 : M "N +2" 4 : M "N +1" Fin Selon 4) Ecrire (M ) 5) Fin MULTIPLE5 Traduction en Pascal PROGRAM MULTIPLE5; USES WINCRT; VAR N,R : INTEGER; M: STRING;
95

Les structures de contrle conditionnelles BEGIN WRITE ('Entrer un entire N : '); READLN(N); R:=N MOD 5; CASE R OF 0 : M:='N'; 1 : M:='N+4'; 2: M:='N+3'; 3 : M:='N+2'; 4 : M:='N+1'; END; WRITE (M); END.

II. Vocabulaire et syntaxe


Au niveau de l'analyse et de l'algorithme [Initialisation] Selon slecteur Faire Valeur 1 : Traitement 1 Valeur 2 : Traitement 2 Valeur 3 : Traitement 3 Valeur 4, Valeur 5, Valeur 6 : Traitement 4 Valeur 7 .. Valeur 10 : Traitement 5 --Valeur N : Traitement N Sinon traitement R Fin Selon Commentaire : - Le slecteur doit tre de type scalaire discret et non rel. - Plusieurs valeurs spares par des virgules, auront un mme traitement. - Un intervalle de valeurs peut entraner un mme traitement. - Un traitement peut comporter une ou plusieurs instructions. - Si la valeur du slecteur est diffrente des valeurs proposes alors le traitement de la clause Sinon sera excut. - La partie Sinon est facultative. Traduction en Pascal - - - ; CASE selecteur OF Valeur 1 : Traitement 1; Valeur 2 : Traitement 2; Valeur 3 : Traitement 3; Valeur 4, Valeur 5, Valeur 6 : Traitement 4; Valeur 7 .. Valeur 10 : Traitement 5; - - Valeur N : Traitement N; ELSE traitement R; END;
96

Les structures de contrle conditionnelles

III. Dfinition
Une structure de contrle conditionnelle est dite choix lorsque le traitement dpend de la valeur que prendra le slecteur. Ce slecteur doit tre de type scalaire (entier ou caractre). Activit 2 Effectuer une analyse, crire un algorithme et faire la traduction en Pascal du programme intitul JOUR, qui saisit une date sous la forme jj/mm/aaaa (chane de 10 caractres) o jj reprsente le jour, mm le mois, aaaa l'anne et dtermine le jour de la semaine. Parmi plusieurs possibilits, on peut utiliser la congruence de Zeller dont le rsultat est un entier compris entre 0 et 6. (0 signifie samedi, 1 dimanche, 2 lundi, 3 mardi, 4 mercredi, 5 jeudi, et 6 vendredi). Formule de Zeller : J= [ jj+ ENT(2,6*M-0,2) + (aaaa mod 100) + ENT((aaaa mod 100)/4)) + ENT((aaaa div 100)/4)) - 2*(aaaa div100)] mod 7. O : - jj est le jour du mois. - M est le mois en utilisant la numration Romaine (1mars, 2avril, ... 10dcembre, 11janvier, ..). - aaaa reprsente une anne donne en commenant par 1582. Exemple : pour la date du 10/11/2006, J =5 alors le jour de la semaine est le vendredi. Pr-analyse Formule de Zeller : J= [ jj+ ENT(2,6*M-0,2) + (aaaa mod 100) + ENT((aaaa mod 100)/4)) + ENT((aaaa div 100)/4)) - 2*(aaaa div100)] mod 7. O - ENT dsigne la partie entire. - JJ correspond un numro du jour du mois mm de l'anne aaaa. - M reprsente le rang du mois avec la numration Romaine. - (aaaa div100 ) et (aaaa mod 100) sont mis respectivement pour avoir les deux premiers et les deux derniers chiffres de l'anne. Les jours de la semaine sont numrots selon leur rang, sauf que le samedi correspond zro. Exemple : Le 20 aot 1970 tait un jeudi, car J est gal 96 et le reste de la division par 7 est 5. Voici le dtail des calculs : J = 20 + [2,6(8 + 1)] + [19/4] - 38 + 70 + [70/4] J = 20 + 23 + 4 - 38 + 70 + 17 = 96 Si J est ngatif, on fait (7n + k) o n est choisi de faon ce que la valeur de l'expression varie de 0 6. Par exemple, si J = -23, on fait 28 - 23 = 5.
97

Les structures de contrle conditionnelles Analyse Nom = JOUR S


12 11 Rsultat = Ecrire (Jour) Jour = [ ] Selon J Faire 0 : Jour "Dimanche" 1 : Jour "Lundi" 2 : Jour "Mardi" 3 : Jour "Mercredi" 4 : Jour "Jeudi" 5 : Jour "Vendredi" 6 : Jour "Samedi" SiNon Jour "ERREUR" Fin Selon J = [ ] Si J < 0 Alors J -J mod 7 J7-J FinSi J (JJ+ TRONC((2.6*M)-0.2)+(aaaa mod 100)+TRONC((aaaa mod 100)/4)+TRONC((aaaa div 100)/4) -2*(aaaa div 100))mod 7 Selon mm Faire 3 : M 1 4 : M 2 5 : M 3 6 : M 4 7 : M 5 8 : M 6 9 : M 7 10: M 8 11: M 9 12: M 10 1 : M 11 2 : M 12 Fin Selon Valeur(An,aaaa,e) Valeur(mois,mm,e) Valeur(day,jj,e) an Sous-chane(Date,7,4) mois Sous-chane(Date,4,2) day Sous-chane(Date,1,2) date = Donne ("Entrer une date : ") Fin JOUR 98

L.D.E.

O.U.
Jour J JJ M aaaa mm an E mois day date

10

9 8

7 6 5 4 3 2 1 13

Les structures de contrle conditionnelles Tableaux de dclaration des objets


Objet J JJ mm aaaa M E Jour date day mois an Type / Nature Entier Entier Entier Entier Entier Entier Chane de caractres Chane de caractres Chane de caractres Chane de caractres Chane de caractres Rle Calcul du jour par la formule de Zeller Contient le jour Contient le mois Contient l'anne Contient le mois en Romain Erreur Sauvegarde du jour Saisie de la date Contient le jour Contient le mois Contient l'anne

Algorithme 0) Dbut JOUR 1) Ecrire ("Entrer une date: "), Lire(Date) 2) day Sous-chane(Date,1,2) 3) mois Sous-chane(Date,4,2) 4) an Sous-chane(Date,7,4) 5) Valeur(day,jj,e) 6) Valeur(mois,mm,e) 7) Valeur(an,aaaa,e) 8) Selon mm Faire 3 : M 1 4 : M 2 5 : M 3 6 : M 4 7 : M 5 8 : M 6 9 : M 7 10: M 8 11: M 9 12: M 10 1 : M 11 2 : M 12 Fin Selon 9) J (JJ+ TRONC((2.6*M+1)+(aaaa mod 100)+TRONC((aaaa mod 100)/4)+TRONC((aaaa div 100)/4) -2*(aaaa div 100))mod 7 10) Si J < 0 Alors J -J mod 7 J7-J FinSi
99

Les structures de contrle conditionnelles 11) Selon J Faire 0 : Jour "Dimanche" 1 : Jour "Lundi" 2 : Jour "Mardi" 3 : Jour "Mercredi" 4 : Jour "Jeudi" 5 : Jour "Vendredi" 6 : Jour "Samedi" SiNon Jour "ERREUR" Fin Selon 12) Ecrire (Jour) 13) Fin JOUR Traduction en Pascal PROGRAM JOUR; USES WINCRT; VAR jour,date,day,mois,an:STRING; jj,mm,aaaa,M,e,J:INTEGER; BEGIN WRITE('Entrer une date: ');READLN(date); day:=COPY(date,1,2); mois:= COPY(date,4,2); an:= COPY(date,7,4); Val(day,jj,e); Val(mois,mm,e); Val(an,aaaa,e); CASE mm OF 3 : M 4 : M 5 : M 6 : M 7 : M 8 : M 9 : M 10: M 11: M 12: M 1 : M 2 : M END;

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

100

Les structures de contrle conditionnelles J:= (JJ+ TRUNC((2.6*M)+1)+(aaaa mod 100)+TRUNC((aaaa MOD 100)/4)+TRUNC((aaaa DIV 100)/4) -2*(aaaa DIV 100))MOD 7;
If J < 0 THEN BEGIN J := -J mod 7 ; J := 7 - J ;

END; CASE J OF 0 : jour :='Dimanche'; 1 : jour :='Lundi'; 2 : jour :='Mardi'; 3 : jour :='Mercredi'; 4 : jour :='Jeudi'; 5 : jour :='Vendredi'; 6 : jour :='Samedi'; ELSE jour:='ERREUR'; END; WRITE(jour); END.

Retenons
La structure conditionnelle choix permet d'effectuer un choix selon les valeurs possibles d'une expression avec une meilleure lisibilit de la solution. Cette structure vite l'utilisation d'une longue structure conditionnelle gnralise. Le choix du traitement dpend de la valeur que prendra le slecteur. La valeur du slecteur doit tre de type scalaire.
Au niveau de l'analyse et de l'algorithme [Initialisation] Selon slecteur Faire Valeur 1 : Traitement 1 La structure Valeur 2 : Traitement 2 de contrle Valeur 3 : Traitement 3 conditionnelle Valeur 4, Valeur 5, Valeur 6 : gnralise Traitement 4 Valeur 7..Valeur 10 : Traitement 5 --Valeur N : Traitement N Sinon traitement R Fin Selon Au niveau de Pascal - - -; CASE slecteur OF Valeur 1 : Traitement 1; Valeur 2 : Traitement 2; Valeur 3 : Traitement 3; Valeur 4, Valeur 5, Valeur 6 : Traitement 4; Valeur 7 .. Valeur 10 : Traitement 5; --Valeur N : Traitement N; ELSE traitement R; END;

101

Les structures de contrle conditionnelles

Exercices
Pour chacun des exercices suivants, effectuer une analyse, crire un algorithme et faire la traduction en Pascal. Exercice 1 crire un programme intitul TOUCHE, qui affiche selon le cas, la nature du caractre (consonne, voyelle, chiffre ou symbole) correspondant une touche saisie. On considre que le clavier est verrouill en minuscule. Exercice 2 Lire un code d'ADN sous forme d'une chane de trois caractres, puis dterminer et afficher le code d'ARN correspondant. Sachant que le code d'ADN utilise les lettres A, T, et G et le code d'ARN est obtenu par la correspondance suivante : AU, TA, CG et GC. Exercice 3 Saisir le prix unitaire d'un produit et la quantit commande, affiche le prix payer, sachant que : - la remise est de 3% si le montant net est compris entre 1000 D et 3000 D - la remise est de 5% si le montant net est compris entre 3001 D et 5000 D - la remise est de 7% si le montant net est suprieur 5000 D Exercice 4 Effectuer le cryptage d'un caractre C donne en utilisant le principe de cryptage suivant : - si le caractre est une voyelle alors la fonction f(x)=X-1 - si le caractre est une consonne alors la fonction f(x)=X-2 - si le caractre est un chiffre alors la fonction f(x)=X+1 - si le caractre est un symbole alors la fonction f(x)=X+2 X tant le code ASCII du caractre. Exercice 5 Afficher le jour selon un nombre entr par l'usager (1 = LUNDI, 2 = MARDI, etc.). Votre programme devra dtecter les jours errons. Exemple : Entrez un jour : 1 Vous avez choisi LUNDI

102

Les structures de contrle conditionnelles Exercice 6 Dans cet exercice, nous nous intressons aux ordinaux abrgs en anglais, ou le nombre est crit en chiffres. Les premiers sont : 1st , 2nd , 3rd , 4th , etc. (abbreviation de first, second, third, fourth, ... ). Pour dterminer le suffixe, on regarde le dernier chiffre du nombre : - si c'est 1, on ajoute le suffixe est -st - si c'est 2, le suffixe est -nd - si c'est 3, le suffixe est -rd - sinon le suffixe est -th. - si l'avant-dernier chiffre du nombre est 1, le suffixe est toujours -th. crire un programme qui lit un nombre, et qui affiche l'ordinal anglais abrge correspondant. Exercice 7 crire un programme intitul JOURS qui pour une anne et un mois donne affiche le nombre de jours de ce mois.

103

CHAPITRE

Chapitre 4

Structures de contrle itratives

Objectifs :
- Utiliser les structures itratives compltes et les structures itratives condition d'arrt pour rsoudre des problmes. - Savoir choisir la structure itrative adquate pour rsoudre un problme. - Rsoudre des problmes rcurrents.

Plan du chapitre :
Leon 1 : Structures de contrle itratives compltes Leon 2 : Structures de contrle itratives conditions d'arrt.

Structures de contrle itratives

Leon

Structures de contrle itratives compltes


Objectifs spcifiques :
Utiliser la structure itrative complte pour rsoudre des problmes. Rsoudre des problmes rcurrents.

Plan de la leon :
I. Rappel et dfinition I.1 Dfinition I.2 Vocabulaire et syntaxe I.3 Traduction en Pascal I.4 Parcours dcroissant II. Les itrations compltes rcurrentes Retenons Exercices

105

Structures de contrle itratives

Leon

Les structures de contrle itratives compltes


Les concepts sont dits suprieurs sils ont sous eux dautres concepts, qui par rapport eux sont des concepts infrieurs.
KANT

I. Rappel et dfinition
Dans la leon prcdente relative aux structures de contrle conditionnelles, nous avons permis un programme de prendre des dcisions. Nous allons reprendre dans cette leon, la structure permettant de faire rpter un traitement par l'ordinateur. Cette structure de contrle s'appelle structure de contrle itrative complte. Elle est utilise pour exprimer une rptition d'un traitement un nombre fini de fois.

I.1 Dfinition
Une structure de contrle itrative complte exprime la rptition dun traitement un nombre de fois connu d'avance. Nous allons voir dans la suite comment exprimer cette structure.

I.2 Vocabulaire et syntaxe


Au cours de l'analyse du problme, l'objet R a une dfinition itrative complte. On sait aussi que n est le nombre de rptitions. On l'exprime ainsi : R = [Initialisation] Pour c de 1 n faire Traitement FinPour La squence "Traitement" est compose dinstructions ordonnes par ordre d'excution. On pourra l'exprimer aussi sous la forme : R = [Initialisation] Pour c de 1 n faire Instruction 1 Instruction 2 . . . Instruction p FinPour
106

Structures de contrle itratives On remarque que R est la rptition de ces p instructions. Le nombre de ces rptitions est gal n. La variable c a servi de compteur qui est automatiquement incrment par dfaut de 1 par la dfinition de la structure elle-mme. Linitialisation dlimite par les crochets et place devant la structure Pour, comporterait les ventuelles dfinitions ncessaires au bon fonctionnement de la structure itrative. Elle comporte essentiellement les objets, indpendants du compteur de l'itration. La forme de la structure aura donc la forme suivante : R = [Inst1, Inst2, ,Instm] Pour c de 1 n faire Instruction 1 Instruction 2 . . . Instruction p FinPour NB : 1. Le compteur c est de type scalaire (entier, caractres, boolen, etc.). 2. Lincrmentation de c est automatique et fait progresser au successeur de la valeur en cours.

I.3 Traduction en Pascal


PROGRAM nom_programme; USES WINCRT; VAR . . . BEGIN . . . {Instructions dinitialization} FOR i:=1 TO n DO BEGIN . Instructions du traitement rpter . END; END.

107

Structures de contrle itratives Activit 1 crire un programme qui saisit un entier naturel n suivi de n rels mettre dans un tableau M. Le programme affiche ensuite toutes les valeurs de M suprieurs 10. Analyse NOM : Suprieurs__10 S
2

L.D.E.
Rsultat = sup_10 sup_10 = [ ] Pour i de 1 n faire [ ]Si M[i]>10 Alors Ecrire (M[i]) FinSI FinPour M = [Lire("n=",n)] Pour i de 1 n faire Lire(M[i]) FinPour i = compteur Fin Suprieurs__10

O.U.
i n M

Tableau de dclaration des objets Objet


i n M

Type/nature
Entier Entier Tableau de rels

Rle
Nombre ditrations Compteur Contient les n rels

Algorithme 0) Dbut Suprieurs__10 1) [Lire("n=",n)] Pour i de 1 n faire Lire(M[i]) FinPour 2) Pour i de 1 n faire [ ]Si M[i]>10 alors Ecrire (M[i]) FinSI FinPour 3) Fin Suprieurs__10

108

Structures de contrle itratives Traduction en Pascal PROGRAM superieurs_a_10; USES WINCRT; VAR i, n : INTEGER; M : ARRAY[1..100] OF REAL; BEGIN WRITE('n=');READLN(n); FOR i:=1 TO n DO BEGIN READLN(M[i]); END; FOR i:=1 TO n DO BEGIN IF (M[i]>=10) THEN BEGIN WRITELN(M[i]); END; END; END.

I.4 Parcours dcroissant


Parfois, on se trouve contraint de faire une itration avec un comptage dcroissant. On exprime cette structure comme suit : R = [Inst1, Inst2, ,Instm] Pour c de n 1 (pas = -1) Faire Instruction 1 Instruction 2 . . . Instruction p FinPour NB : La dcrmentation du compteur est automatique en effet, ce dernier passe au prdcesseur de sa valeur en cours. Ici, le compteur dcrot de 1. La traduction en Pascal de cette structure est de la forme : {Instructions dinitialisation} FOR i:=n DOWNTO 1 DO BEGIN ... Instructions du traitement rpter ... END; Remarque : Gnralement, cette exigence provient du fait que le module rpter utilise les valeurs du compteur.
109

Structures de contrle itratives Activit 2 On se propose de chercher dans un tableau T de noms, les occurrences d'un nom v donn. On demande d'afficher les indices correspondants ces occurrences d'une faon dcroissante. Analyse Pour chercher les occurrences de v dans T et les afficher dans un ordre dcroissant, il suffit de le parcourir partir de la fin. NOM : Occurrences S
3

L.D.E.
Rsultat = Occur Occur = [ ] Pour i de n 1 pas=-1 faire [ ]Si T[i]=v Alors Ecrire (i , ",") FinSI FinPour T = [Lire("n=",n)] Pour i de 1 n faire Lire(T[i]) FinPour i = compteur v = Donne ("v = ") Fin Occrrences

O.U.
i n T v

2 4

Tableau de dclaration des objets Objet Type/nature


i n T N_Max v Entier Entier Tableau de chanes de caractres de dimension 1..N_Max Constante = 50 Chane de caractres

Rle
Compteur Nombre ditrations Contient les n noms Indique la dimension max de T Le nom chercher

Algorithme 0) Dbut Occurrences 1) [Lire("n=",n)] Pour i de 1 n faire Lire(T[i]) FinPour 2) Lire("v = ",v) 3) Pour i de n 1 (pas=-1) faire [ ]Si T[i]=v alors Ecrire (i, ",") FinSI FinPour 4) Fin Occurrences
110

Structures de contrle itratives Traduction en Pascal PROGRAM Occurrences; USES WINCRT; VAR N_Max =50; VAR i, n : INTEGER; v : STRING; T : ARRAY[1..N_Max] OF STRING; BEGIN WRITE('n=');READLN(n); FOR i:=1 TO n DO BEGIN READLN(T[i]); END; WRITE('v = ');READLN(v); FOR i:=n DOWNTO 1 DO BEGIN IF (T[i] =v) THEN BEGIN WRITELN(i, ','); END; END; END. Un cas d'excution

Cas gnral : Il y a des fois o le compteur entre dans le calcul fait par le module rpter ; en plus les oprations de calcul exigent des valeurs non entires et progressant avec un pas p non entier. L'astuce consiste chercher par division entire le nombre d'itrations accomplir et avec une expression gnralement linaire ou affine, revenir au compteur dont on a besoin.
111

Structures de contrle itratives Dans ce cas, la forme gnrale est : R = [Inst1, Inst2, ,Instm] Pour c de d f (pas = p) faire Instruction 1 Instruction 2 . . . Instruction p FinPour NB. Si p est positif, le parcours est ascendant et si p est ngatif, le parcours est descendant. Le nombre de rptitions est n =1 +E((f - d)/p) et dans ce cas le compteur effectif est c = d + (i - 1)p , i allant de 1 n. Remarquez que n est toujours positif, c'est le signe de p qui dtermine le sens ascendant ou descendant du compteur c. Traduction en Pascal PROGRAM nom_programme; USES WINCRT; VAR . . . BEGIN . . . {Instructions d'initialization} n:=1+TRUNC((f-d)/p); FOR i:=1 TO n DO BEGIN c:=i*p; ... Instructions du traitement rpter ... END; END.

112

Structures de contrle itratives Activit 3 On se propose de dessiner un cercle par des "*" et pour qu'il soit visible l'cran, nous allons prendre un rayon gal R tel que 5<R<12 . Nous rappelons que les quations paramtriques du cercle sont : x(t) = R.cos(t) et y(t) = R.sin(t), t tant un angle mesur en radians et parcourant l'intervalle [0,2]. Et pour que ce cercle soit trac au milieu de l'cran, nous allons procder un changement d'origine de la forme suivante : x(t) = 40+R.cos(t) et y(t) = 12+R.sin(t) (l'cran tant de dimension 80x25). Ecrire un programme qui dessine un cercle avec des "*". NOM : Cercle S
2

L.D.E.
Rsultat = cercle cercle = [ ] Pour t de 0 2 (pas=p) faire cx=ARRONDI(40+R.COS(t)) cy=ARRONDI(12+R.SIN(t) Ecrire(TAB(cx,cy),"*") FinPour t = compteur p = 0.01 (Constante) R = Donne("Rayon = ") Fin cercle

O.U.
t p cx R cy

1 3

Objet
t cx cy p pi R

Type/nature
rel Entier Entier Constante relle = 0.01 Constante relle = 3.14 Rel

Rle
Angle Abscisse du point en cours Ordonne du point en cours Le pas angulaire Valeur approche 0.01 prs de Le rayon du cercle tracer

Nous remarquons dans l'analyse faite que le compteur est rel ; ce genre de compteur ne convient pas avec la dfinition que nous avons prsente prcdemment. Nous allons remdier cette dfaillance en calculant d'abord le nombre d'itrations et en utilisant t comme angle auquel on ajoute p chaque itration. Le nombre d'itrations est E(2/p)+1. De l'analyse prcdente, nous obtenons l'algorithme suivant en tenant compte de la lgre modification sur le compteur.

113

Structures de contrle itratives Algorithme 0) Dbut cercle 1) lire(R) 2) [n1+TRUNC(2*pi/p), t -p] Pour i de 1 n faire tt+p cx ARRONDI((40+R.COS(t)) cy ARRONDI((12+R.SIN(t)) Ecrire(TAB(cx,cy),"*") FinPour 3) Fin cercle Traduction en Pascal PROGRAM cercle; USES WINCRT; CONST pi =3.14; p = 0.01; VAR i, n, cx, cy: INTEGER; t,R:REAL; BEGIN READLN(R); n := 1+TRUNC(2*pi/p); t:= -p; FOR i:=1 TO n DO BEGIN t:=t+p; cx:=40+ ROUND(R*COS(t)); cy:=12+ ROUND(R*SIN(t)); GOTOXY(cx, cy); WRITE("*"); END; END. Exercice corrig 1 Ecrire un programme qui saisit un mot compos de lettres en majuscules et remplace chacune de ses lettres d'ordre pair par sa symtrique dans la liste de l'alphabet par rapport au milieu. Par exemple, la lettre A sera remplace par la lettre Z et rciproquement, la lettre J par la lettre Q et rciproquement. A la fin, le programme affiche la transforme de cette chane.

114

Structures de contrle itratives Analyse Nous tenons remarquer qu'une chane de caractres est vue comme un tableau de caractres. Nous allons exploiter cette proprit dans la rsolution du problme. NOM : mot_transform S
2 1

L.D.E.
Rsultat = Ecrire("Mot transform : ",mot_t) mot_t = [Lire("mot = ", mot), mot_tmot, L LONG(mot)] Pour c de 2 l (pas=2) faire code ORD(mot[c]) mot_t[c] CHR(2*x0 - code +1) FinPour Fin mot_transform

O.U.
mot_t mot L c x0 code

Remarques : le mot transform mot_t est initialis mot car il y a que les caractres pairs qui seront modifis. Comme le compteur est automatiquement incrment de 1, nous allons utilser un autre compteur alant de 1 L DIV 2 et c sera gal 2i. Tableau de dclaration des objets Objet
mot_t mot L c i code x0

Type/nature
Chane de caractres Chane de caractres Entier Entier Entier Entier Entier Constante x0=77

Rle
Le mot transform Le mot initial La longueur du mot Compteur Compteur Code du caractre en cours Ordre ASCII de "M" milieu de "A".."Z"

Algorithme 0) Dbut mot_transform 1) [Lire("mot = ", mot), mot_tmot, L LONG(mot)] Pour i de 1 L DIV 2 faire c2.i code mot[c] mot_t[c] CHR(2*x0 - code+1) FinPour 2) Ecrire("Mot transform : ",mot_t) 3) Fin mot_transform

115

Structures de contrle itratives Traduction en Pascal PROGRAM mot_transform; USES WINCRT; CONST x0=77 ; VAR i, L, c, code : INTEGER; mot,mot_t :STRING; BEGIN WRITE('mot = '); READLN(mot); Mot_t:=mot; L:= LENGTH(mot); FOR i:=1 TO (L DIV 2) DO BEGIN c:=2*i; code:=mot[c]; mot_t[c]:=CHR(2*x0-code+1); END; WRITELN('Mot transform : ',mot_t); END. Un cas d'excution

II. Les itrations compltes rcurrentes


Souvent, certains rsultats sont dfinis d'une faon rcurrente. Dans de tels cas, le rsultat se forme au fur et mesure et une tape donne, il dpend d'un certain nombre de rsultats prcdents. Une telle structure est dite itrative rcurrente. En fait, les rsultats intermdiaires sont grs par une relation de rcurrence. Si cette relation lie deux lments successifs, on dit que la rcurrence est d'ordre 1, si elle lie trois lments successifs, on dit qu'elle est d'ordre 2, etc. Activit 13 Ecrire un programme qui calcule la factorielle d'un entier naturel n et l'affiche l'cran. Analyse Remarquons que le calcul de la factorielle a une dfinition itrative complte et l'tape i, la factorielle est gale sa valeur l'tape i-1 multiplie par i.
116

Structures de contrle itratives NOM : Factorielle S


3 2

L.D.E.
Rsultat = Ecrire (n,"! = ", fact) fact = [fact 1] Pour i de 1 n faire fact fact * i FinPour n = DONNEE("n = ") Fin Factorielle

O.U.
n i fact

1 4

Objet
n fact i

Type/nature
Entier Entier Entier

Rle
Le nombre dont on veut calculer la factorielle la valeur de n! Un compteur

Algorithme 0) Dbut Factorielle 1) Lire ("n = ", n) 2) [fact1] Pour i de 1 n Faire fact fact * I FinPour 5) Ecrire(n,! = ,fact) 6) Fin Factorielle Traduction en Pascal PROGRAM Factorielle; USES WINCRT; VAR n, I, fact :INTEGER; BEGIN WRITE('n = '); READLN(n); fact := 1; FOR I:=1 TO n DO BEGIN fact :=fact*I; END; WRITELN(n,'! = ',fact); END.

117

Structures de contrle itratives Un cas d'excution

Exercice corrig 2 n individus passent un examen compos de 3 preuves de coefficients respectifs 2, 2 et 4. Aprs la correction, on se propose de faire le calcul des moyennes, la moyenne gnrale par preuve, la moyenne gnrale de toutes les preuves pondres et le nombre d'admis sachant qu'un candidat est dclar admis s'il obtient une moyenne suprieure ou gale 10 . Analyse Pour rsoudre ce problme, nous allons choisir quatre tableaux, un pour chacune des trois preuves (N1, N2, N3) et un dernier pour la moyenne (M).

NOM : Les_admis S
5 4

L.D.E.
Rsultat = (Ecrire ("Nombre d'admis : ", n_ad), "Moyenne Gnrale = ", MG) n_ad = [n_ad 0] Pour i de 1 n faire [ ] Si (M[i]e10) alors n_ad n_ad +1 FinSi FinPour MG TOT_M / n Tot_M = [Tot_M 0] Pour i de 1 n faire Tot_M Tot_M +M[i] FinPour M = [Lire("n=",n)] Pour i de 1 n faire Lire("Note 1 =",N1[i]) Lire("Note 2 =",N2[i]) Lire("Note 3 =",N3[i]) M[i] (2 * N1[i]+2 * N2[i]+4 * N3[i])/8 FinPour Fin Les_admis

O.U.
n_ad MG i n M

3 2

TOT_M N1 N2 N3

Tableau de dclaration d'un nouveau type Type


Vecteur : tableau [1..50] de rels 118

Structures de contrle itratives Objet


n_ad MG i n M TOT_M N1 N2 N3

Type/nature
Entier Rel Entier Entier Vecteur Rel Vecteur Vecteur Vecteur

Rle
Nombre d'admis Moyenne gnrale Compteur Nombre de candidats Tableau comportant les moyennes des cadidats Le total des moyennes Le tableau de la 1re note Le tableau de la 2me note Le tableau de la 3me note

Algorithme 0) Dbut Les_admis 1) Lire ("n = ", n) Pour i de 1 n faire Lire("Note 1 =",N1[i]) Lire("Note 2 =",N2[i]) Lire("Note 3 =",N3[i]) M[i] (2 * N1[i]+2 * N2[i]+4 * N3[i])/8 FinPour 2) [Tot_M0] Pour i de 1 n faire Tot_M Tot_M +M[i] FinPour 3) MG TOT_M/n Pour i de 1 n faire 4) [n_ad 0] Si (M[i]e10) alors n_ad n_ad +1 FinSi FinPour 5) Ecrire ("Nombre d'admis : ", n_ad), "Moyenne Gnrale = ", MG) 6) Fin Les_admis Traduction en Pascal PROGRAM Les_admis; USES WINCRT; TYPE vecteur = ARRAY[1..50] OF REAL; VAR n_ad, n, i, fact :INTEGER; MG, TOT_M : REAL; N1, N2, N3, M : vecteur; BEGIN WRITE('n = ');(READLN(n); FOR i:=1 TO n DO
119

Structures de contrle itratives BEGIN WRITE('Note 1 = ');READLN(N1[i]); WRITE('Note 2 = ');READLN(N2[i]); WRITE('Note 3 = ');READLN(N3[i]); M[i]:=(2* N1[i]+2* N2[i]+4*N3[i])/8; END; TOT_M:=0; FOR i:=1 TO n DO BEGIN TOT_M:=TOT_M+M[i]; END; MG := TOT_M / n; n_ad:=0; FOR i:=1 TO n DO BEGIN IF (M[i]>=10) THEN BEGIN n_ad:=n_ad+1; END; END; WRITELN('Nombre d''admis : ',n_ad),'Moyenne gnrale = ',MG); END. Un cas d'excution

Retenons
- Une itration complte consiste en la rptition d'un traitement un nombre de fois connu d'avance. - Dans une itration complte, le compteur est incrment ou dcrment automatiquement. - Une itration est dite rcurrente si le traitement l'tape i dpend des tapes qui le prcdent. En gnral, les rsultats intermdiaires sont grs par une relation de rcurrence. En fait, on s'intresse au rsultat final de l'itration.
120

Structures de contrle itratives

Exercices
Exercice 1 crire un programme qui dfile le nom et le prnom de l'utilisateur de la droite vers la gauche sur la ligne du milieu de l'cran. Exercice 2 crire un programme qui fait tourner des toiles sur les quatre bords de l'cran. C'est en fait une simulation d'un jeu de lumire Exercice 3 crire un programme qui dessine sur deux lignes de l'cran, deux caractres "*" sachant que l'un se dplace de la gauche vers la droite et l'autre se dplace de la droite vers la gauche. Exercice 4 Reprendre le programme de l'exercice 1 et transformer le dfilement de telle faon que la chane forme du nom et du prnom rentre par la droite et sort par la gauche. Temporiser ce dfilement en provoquant un ralentissement sensible. Exercice 5 crire un programme qui permet de trouver puis d'afficher tous les entiers deux chiffres ayant le chiffre des units divisible par le chiffre des dizaines. Exemple : 24 vrifie cette proprit, en effet, 2 divise 4. Exercice 6 crire un programme qui affiche tous les entiers positifs de deux chiffres tels que la somme de ses deux chiffres divise leur produit. Exercice 7 crire un programme qui saisit un entier naturel n non nul et suprieur 20 puis remplit un tableau R par n rels alatoires compris entre 0 et 20 en utilisant la fonction HAZARD prprogramme. Ensuite, Il calcule la moyenne arithmtique de ces n rels et affiche les lments de R suprieurs ou gaux MG ainsi que leur nombre, il en fait de mme pour les lments de R infrieurs MG. Exercice 8 crire un programme Pascal intitul OCCURENCE qui permet de saisir une chane de caractres CH puis d'afficher les occurrences des voyelles qui figurent dans CH. Exemple : Si CH ='LYCEE 25 juillet' Le programme OCCURENCE affichera les rsultats suivants : L'occurence de 'E' est 3 L'occurence de 'Y' est 1 L'occurence de 'U' est 1 L'occurence de 'I' est 1 Remarque : la recherche de l'occurrence ne fait pas de distinction entre les voyelles majuscules et minuscules.
121

Structures de contrle itratives Exercice 9 crire un programme qui saisit un texte en franais et dtermine les frquences des voyelles et les met dans un tableau de 6 lments. Le programme affiche ensuite la frquence de chacune des voyelles. Le texte pourra comporter des lettres en majuscules ou en minuscules ainsi que les caractres accentus. Exercice 10 On dispose de deux tableaux T1 et T2 contenant respectivement n et m entiers positifs et non nuls. On dsire chercher dans T2 tous les diviseurs d'un lment donn de T1. Exemple : T1 23 1 T2 Si indice = 2 alors 3 15 2 6 10 3 5 277 4 1 300 5 34 6

3, 5 et 1 seront affichs l'cran.

crire un programme Pascal qui permet de saisir les deux tableaux T1 et T2 et l'indice d'un lment p de T1 puis d'afficher l'cran tous les diviseurs de p figurant dans T2. Exercice 11 Soit un tableau T1 de n lments (1 n 100) . Les lments de T1 sont des entiers naturels de trois chiffres. On se propose de remplir un tableau T2 de la faon suivante : T2[i] est gal la somme des carrs des chiffres de T1[i]. Exemple : Si T1[i] = 254 alors T2[i] = 22 + 52 + 42 = 45 crire un programme Pascal qui permet de saisir les lments de T1, de remplir puis d'afficher le tableau T2. Exercice 12 crire un programme Pascal qui saisit un tableau A de n chanes de caractres, cherche et affiche la longueur de la chane la plus longue puis toutes les chanes ayant cette longueur.

122

Structures de contrle itratives

Leon

Structures de contrle itratives conditions d'arrt


Objectifs spcifiques:
Utiliser la structure itrative condition d'arrt pour rsoudre des problmes. Rsoudre des problmes rcurrents bass sur des itrations condition d'arrt.

Plan de la leon
I. Introduction II. La structure : Rpter .. Jusqu' II.1 Vocabulaire et syntaxe II.2 Traduction en Pascal II.3 Les problmes rcurrents III. La structure : Tant Que .. Faire III.1 Vocabulaire et syntaxe III.2 Traduction en Pascal Retenons Exercices

123

Structures de contrle itratives

Leon

Les structures de contrle itratives condition d'arrt


Ce n'est pas assez de faire des pas qui doivent un jour conduire au but, chaque pas doit tre lui mme un but en mme temps qu'il nous porte en avant.
GOETHE

I. Introduction
Nous revenons dans cette leon une structure de contrle permettant l'ordinateur de rpter un traitement donn. Nous avons vu le cas des rptitions dont le nombre est connu d'avance. Nous l'avons appel : structure itrative complte. Cependant, plusieurs problmes ncessitent les rptitions d'un traitement dont on ne connat pas le nombre. C'est une condition qui doit grer l'arrt des rptitions. Nous allons vous prsenter des activits auxquelles vous tes relativement familiarises. Activit 1 Une personne en possession d'une carte interbancaire (CIB) se prsente un distributeur pour retirer de l'argent. Cette personne a des doutes concernant son code secret. Le systme ne lui permet que trois essais au maximum. Ecrire les tapes du programme permettant la lecture du code secret. Rponse : En effet, ds que la personne aura mis sa carte dans le distributeur, il va entrer dans une boucle qui va lui permettre la saisie de son code. Si la premire saisie est fausse, le distributeur va lui donner une seconde chance. Si aprs cette chance, le code saisi est encore erron, le distributeur donne la troisime et la dernire chance, aprs quoi, la carte sera confisque si le code n'est pas encore correct. Nous pouvons formuler cette action par : [Entrer la carte] Rpter Incrmenter l'essai Saisir le code Jusqu' (code correct) ou (essai=3)

124

Structures de contrle itratives Activit 2 Vous tes dans une station de transport public attendre le moyen de transport dsir. Ce dernier arrive, le convoyeur procde faire monter les voyageurs avec la condition qu'aucun ne doit voyager debout. crivez l'action faite par le convoyeur. Rponse : Dans ce cas et en arrivant une station, le convoyeur avertit le chauffeur d'ouvrir les portes s'il reste des places vacantes et commence l'action itrative suivante. Tant qu'il y a encore des places, faire monter les voyageurs. Cette opration pourra tre formule comme suit : [Arrter le bus] Tant Que (il y a des places vacantes) faire Monter voyageur Fin

Vous avez vu que dans chacune des deux activits, nous avons utilis une structure itrative particulire. Ce sont les deux formulations traduisant la structure itrative condition d'arrt. Dfinition On appelle structure de contrle itrative condition d'arrt l'action qui consiste rpter un traitement donn et que l'arrt est gr par une condition. Il existe deux formulations pour traduire une telle structure : La structure Rpter . Jusqu' et la structure : Tant Que Rpter .

II. La structure Rpter Jusqu'


II.1. Vocabulaire et syntaxe
Les expressions que nous allons prsenter sont utilises dans l'analyse et dans l'algorithme. Formulation 1 : La structure Rpter Jusqu' On suppose que R est un objet dont la dfinition est itrative condition d'arrt et que la formulation 1 s'adapte le mieux, nous traduisons ce fait par : R = [Initialisation ] Rpter Traitement Jusqu' (Condition darrt)
125

Structures de contrle itratives Remarques : La dfinition de R commence par une initialisation ventuelle. Elle comporte les dfinitions ncessaires la marche du processus d'itrations. "Traitement" est le jeu d'instructions rpter. "Condition d'arrt" est une expression boolenne supervise directement ou indirectement par le traitement rpt pour la faire passer l'tat vraie afin que l'itration s'arrte. Nous pouvons crire plus en dtail cette formulation : R = [Inst1, Inst2, ,Instm] rpter Instruction 1 Instruction 2 . . . Instruction p Jusqu' (Condition d'arrt)

II.2. Traduction en Pascal


PROGRAM nom_programme; USES WINCRT; VAR . . . BEGIN . . . {Instructions d'initialisation} REPEAT ... Instructions du traitement rpter ... UNTIL (Condition d'arrt); ... END.

126

Structures de contrle itratives Activit 3 crire un programme qui cherche si une valeur v existe dans un tableau B. B est compos de n rels. v est une valeur relle donne. Le programme affichera un message de la forme : "v existe dans B" ou "v n'existe pas dans B". Analyse Nous allons procder un parcours du tableau B en affectant une variable boolenne qu'on nommera v_y_est. Cette itration condition d'arrt s'arrte soit quand on aura trouv v soit qu'on aura fini de parcourir tout le tableau B. NOM : Recherche S
4 3

L.D.E.
Rsultat = crire(v, dcision, " dans le tableau") dcision = [dcision " n'existe pas"] Si v_y_est alors dcision " existe" FinSI v_y_est = [Lire("v = ", v),i 0] Rpter i i+1 v_y_est (B[i]=v) Jusqu' (v_y_est) OR (i=n) B = [Lire("n = ", n)] Pour i de 1 n faire Lire(B[i]) FinPour Fin Recherche

O.U.
dcision v_y_est

i B v n

Tableau de dclaration des objets Objet


dcision v_y_est v i B n

Type/nature
Chane de caractres Boolen Rel Entier Tableau de rels Entier

Rle
Comporte la bonne expression Variable logique passant vrai si v est dans B Nombre chercher dans le tableau Compteur Tableau comportant les n rels Le nombre d'lments de B

Algorithme 0) Dbut Recherche 1) [Lire("n=",n)] Pour i de 1 n faire Lire(B[i]) FinPour


127

Structures de contrle itratives 2) [Lire("v = ",v),i 0] Rpter i i+1 v_y_est (B[i]=v) Jusqu' (v_y_est) OR (i=n) 3) [dcision " n'existe pas"] Si v_y_est alors dcision " existe" FinSI 4) crire (v, dcision, " dans le tableau") 5) Fin Recherche Traduction en Pascal PROGRAM Recherche; USES WINCRT; VAR i, n : INTEGER; decision : STRING; v_y_est : BOOLEAN; v : REAL; B : ARRAY[1..100] OF REAL; BEGIN WRITE('n=');READLN(n); FOR i:=1 TO n DO BEGIN READLN(B[i]); END; WRITE('v = ');READLN(v); i:=0; REPEAT i:=i+1; v_y_est:=(B[i]=v) UNTIL (v_y_est) OR (i=n); decision :='n''existe pas'; IF v_y_est THEN BEGIN decision:= 'existe'; END; WRITELN(v:5:3,' ', decision, ' dans le tableau'); END.

128

Structures de contrle itratives Un cas d'excution

Nous allons voir dans l'activit qui suit une application trs frquente de la formulation "Rpter Jusqu' ". En effet, elle s'adapte le mieux dans les cas de saisie de donnes assujetties des conditions de contrle. Activit 4 crire un programme qui cherche la dernire position d'une valeur v dans un tableau B de n rels. L'entier n est compris entre 20 et 30. Tous les rels de B ainsi que v sont dans l'intervalle [0,20]. Analyse Le problme ressemble troitement celui de l'activit 3 seulement les donnes sont astreintes des conditions ; en plus, la recherche de la dernire valeur de v dans B nous oblige faire le parcours de B en commenant par la fin pour viter un parcours total. NOM : cherche_dernier S L.D.E. O.U.
6 5 Rsultat = crire (v, dcision, " dans le tableau") dcision = [dcision " n'existe pas"] Si dp0 alors STR(dp,s) dcision " a une dernire place " + s + " " FinSI dp = [i n+1, dp 0] Rpter [i i-1] Si (B[i]=v) alors Dp i Jusqu' (dp0) OR (i=1) v=[ ] Repter Lire("v = ", v) Jusqu' (v>=0) et (v<=20) B=[ ] Pour i de 1 n faire [ ]Rpter Lire(B[i]) Jusqu' (B[i]>=0) et (B[i]<=20) FinPour n=[ ] Repter Lire("n = ", n) Jusqu' n dans [20..30] Fin cherche_dernier 129 dcision dp s i n B

Structures de contrle itratives Table de dclaration des objets Objet


dcision dp s i n B

Type/nature
Chane de caractres Entier Chane de caractres Entier Entier Tableau de rels

Rle
Comporte la bonne expression Dernire position de v dans B Conversion de dp en chane Compteur Le nombre d'lments de B Tableau comportant les n rels

Algorithme 0) Dbut cherche_dernier 1) Rpter Lire("n=",n) Jusqu' n dans [20..30] 2) Pour i de 1 n faire Rpter Lire(B[i]) Jusqu' (B[i]>=0) et (B[i]<=20) FinPour 3) Rpter Lire("v=",v) Jusqu' (v>=0) et (v<=20) 4) [in+1, dp 0] Rpter [i i-1] Si (B[i]=v) alors dp i FinSi Jusqu' (dp0) OR (i=1) 5) [dcision " n'existe pas"] Si dp0 alors STR(dp,s) dcision " a une dernire place " + s +" " FinSI 6) crire (v, dcision, " dans le tableau") 7) Fin cherche_dernier Traduction en Pascal PROGRAM Recherche; USES WINCRT; VAR i, n,dp : INTEGER; decision,s : STRING; v : REAL; B : ARRAY[1..100] OF REAL;
130

Structures de contrle itratives BEGIN REPEAT WRITE('n=');READLN(n); UNTIL n IN [20..30]; FOR i:=1 TO n DO BEGIN REPEAT WRITE(' ');READ(B[i]); UNTIL (B[i]>=0 )AND(B[i]<=20); END; REPEAT WRITE('v=');READLN(v); UNTIL (v>=0 )AND(v<=20); dp:=0; i:=n+1; REPEAT i:=i-1; IF B[i]=v THEN dp:=i; UNTIL(dp<>0) OR (i=1); decision:=' n''existe pas'; IF dp<>0 THEN BEGIN STR(dp,s); decision:=' a une dernire place ' +s+ ' '; END; WRITELN(v:5:3,' END. ',decision, ' dans le tableau');

131

Structures de contrle itratives Un cas d'excution

Commentaires : Vous avez certainement remarqu la diffrence entre les solutions des deux activits. En effet, pour la recherche de v dans le tableau B, nous avons utilis une variable boolenne dans la solution du 1er problme, cette option n'est plus adquate pour le second, nous avons besoin d'une donne prcise en l'occurrence la dernire position de v dans le tableau B. Nous avons utilis une fonction de la bibliothque STR et une expression de concatnation que nous avons formul par l'oprateur additif +. Bien sr, cette formulation n'est pas unique, nous pouvons garder l'affichage de dp comme un entier.

II.3. Les problmes rcurrents


Nous avons vu comment sont dfinis les problmes rcurrents et comment les rsoudre avec une itration complte. Il en est de mme pour les itrations condition d'arrt. En effet, le rsultat final se forme au fur et mesure jusqu' ce qu'une condition d'arrt devienne vraie. Dans l'activit suivante, nous vous proposons un problme classique o nous allons utiliser la structure itrative condition d'arrt dans un problme rcurrent.
132

Structures de contrle itratives Activit 5 On se propose de chercher et d'afficher la moyenne arithmtique d'une suite de rels. A priori, on ne connat pas le nombre d'lments de cette liste, par contre, on sait que sa fin sera marque par le nombre ngatif -1. Ce dernier n'entre pas dans le calcul de la moyenne. Le caractre rcurrent rside bien entendu dans le calcul de la moyenne. Analyse NOM : Moyenne S
3 2 1

L.D.E.
Rsultat = crire ("Moyenne = ", mg) mg = total/nbre (total, nbre) = [total 0, nbre 0] Rpter [Lire("x= ",x)]Si (x>0) alors total total + x nbre nbre +1 FinSi Jusqu' (x= -1) Fin Moyenne

O.U.
mg total nbre x

Table de dclaration des objets Objet


mg total nbre x

Type/nature
Rel Rel Entier Rel

Rle
La moyenne arithmtique des rels Le total des rels Le nombre de rels positifs Variable servant la saisie des rels

Algorithme 0) Dbut Moyenne 1) [total 0, nbre 0] Rpter [Lire("x= ",x)]Si (x>0) alors total total + x nbre nbre +1 FinSi Jusqu' (x=-1) 2) mg = total/nbre 3) crire ("Moyenne = ", mg) 4) Fin Moyenne
133

Structures de contrle itratives Traduction en Pascal PROGRAM Moyenne; USES WINCRT; VAR nbre : INTEGER; mg, total, x : REAL; BEGIN total:=0; nbre:=0; REPEAT WRITE('x=');READLN(x); IF (x>0) THEN BEGIN total:=total + x; nbre:=nbre + 1 END; UNTIL (x=-1); mg:=total/nbre; WRITE('Moyenne = ',mg:2:); END. Un cas d'excution

III. La structure Tant Que Faire


III.1 Vocabulaire et syntaxe
On suppose que l'objet R a une structure itrative condition d'arrt et que nous avons opt pour la formulation "Tant Que Faire" R = [Initialisation] Tant Que Not(Arrt) Faire Traitement FinTantQue
134

Structures de contrle itratives Remarques : "Traitement" est le jeu d'instructions rpter. "Not(Arrt)" est une expression boolenne supervise directement ou indirectement par le traitement rpt pour la faire passer l'tat vrai afin que l'itration s'arrte. "FinTantQue" sert dlimiter les instructions qui vont former "Traitement". Remarquons que pour la 1re formulation "Rpter jusqu' ", la dlimitation de "Traitement" est faite naturellement par les deux termes de la structure "Rpter" et "Jusqu'" La partie "Initialisation" comportera les ventuelles dfinitions qui serviront au processus itratif. Remarque importante : Dans les deux formulations, il faut faire attention aux deux cas d'entre et de sortie de la boucle et de faire les bonnes initialisations et les bons emplacements des instructions relatives l'avancement dans l'itration. Ceci est souvent une source d'erreurs. Nous pouvons crire plus en dtail cette formulation : R = [Inst1, Inst2, ,Instm] Tant Que Not(arrt) Faire Instruction 1 Instruction 2 . . . Instruction p FinTantQue

III.2 Traduction en Pascal


PROGRAM nom_programme; USES WINCRT; VAR . . . BEGIN . . . {Instructions d'initialisation} WHILE Condition DO BEGIN ... Instructions du traitement rpter ... END; . . . END.
135

Structures de contrle itratives Activit 6 On se propose de dterminer le PGCD de deux entiers naturels m et n. Le principe de la recherche repose sur les proprits suivantes : le PGCD de m et de 0 est m et tout diviseur de m et n est aussi diviseur du reste de m par n. Donc on va pouvoir diminuer progressivement les valeurs des couples m et n jusqu' arriver annuler l'un des termes. Remarquons que cette mthode de reste converge rapidement vers le rsultat c'est--dire que si on garde m plus grand que n, le PGCD des deux entiers sera gal m ds que n devient 0. Remarque : De la proprit "tout diviseur de m et n " divise leur diffrence et dont on pourra faire facilement une dmonstration comme pour le reste, nous dduisons un autre procd de calcul de PGCD en utilisant la diffrence. Gnralement, la mthode de la diffrence converge vers 0 plus lentement que la mthode du reste. Un bon exercice : prenez quelques couples d'entiers et comparez les deux procds. Analyse NOM : calcul_pgcg S
3 2

L.D.E.
Rsultat = crire ("PGCD(",m,", ",n,") =", pgcd) pgcd = [ pgcd m ] Si (m=0) alors pgcd n FinSi (mf,nf) = [ m=Donne("m = "),n=Donne("n = ")] Tant Que (m * n0) Faire [ ] Si (m>n) alors m m MOD n sinon n n MOD m FinSi FinTantQue Fin calcul_pgcd

O.U.
pgcd m n

Tableau de dclaration des objets Objet


pgcd m n

Type/nature
Entier Entier Entier Le PGCD de m et n Le premier entier Le second entier

Rle

136

Structures de contrle itratives Algorithme 0) Dbut calcul_pgcd 1) [ Lire("m = ",m),Lire("n = ", n)] Tant Que (m*n 0) Faire [ ] Si (m>n) alors m m MOD n sinon n n MOD m FinSi FinTantQue 2) [ pgcd m ] Si (m=0) alors pgcd n FinSi 3) crire ("PGCD(",m,", ",n,") =", pgcd) 4) Fin calcul_pgcd Traduction en Pascal PROGRAM calcul_pgcd; USES WINCRT; VAR m, n, pgcd : INTEGER; BEGIN WRITE('m = '); READLN(m); WRITE('n = '); READLN(n); WHILE (m*n<>0) DO BEGIN IF (m>n) THEN BEGIN m:= m MOD n; END ELSE BEGIN n:= n MOD m; END; END; pgcd:=m; IF (m=0) THEN BEGIN pgcd:=n; END; WRITELN('PGCD(',m,',',n,') = ',pgcd); END.
137

Structures de contrle itratives Un cas d'excution

Remarque : Dans ce problme, nous avons adopt la formulation tant que car il est possible de ne pas traiter l'objet d'itration. Rfrerez-vous la deuxime activit introductrice o le convoyeur est contraint de ne pas faire monter des voyageurs s'il n'y a plus de places assises. En effet dans cette deuxime formulation (tant que), la condition est vrifie avant d'attaquer le traitement rpter, contrairement la premire formulation (rpeter.. jusqu') o la condition est vrifie aprs avoir excut une fois le traitement. Attaquons maintenant une activit mathmatique d'approximation. Activit 7 En mathmatiques, en fait, on sait rsoudre peu d'quations. Par contre, il existe des thormes forts permettant d'assurer l'existence et parfois l'unicit d'une solution une quation donne. Nous en citons le thorme des valeurs intermdiaires. Exemple, dans l'intervalle [0,1], l'quation e-x - x = 0, a une solution unique. Elle est mise en vidence en traant les deux courbes d'quations respectives y=e-x et y=x. On se propose d'crire un programme permettant de trouver et d'afficher une valeur approche de cette solution une erreur e prs. Analyse On dfinit la fonction f telle que f(x)=e-x - x sur l'intervalle [a,b]=[0,1] (a=0 et b=1). Nous allons utiliser la mthode de dichotomie pour dterminer cette solution. Elle consiste calculer l'image du milieu de l'intervalle en cours [a,b], on compare son signe avec f(a) en utilisant leur produit. Si ce dernier est nul, c'est en fait, l'image du milieu qui l'est et dans ce cas le problme est fini, nous avons trouv la solution. S'il est ngatif, la solution est entre a et c, il suffit de remplacer b par c? S'il est positif, la solution est dans l'autre moiti, il faut donc remplacer a par c. On continue ce travail tant que la diffrence en valeur absolue de a et b est suprieur 2*e. La solution cherche sera gale au milieu de a et b.

138

Structures de contrle itratives NOM : calcul_racine S


2 1

L.D.E.
Rsultat = crire ("La racine est : ", (a+b)/2, " ", e, " prs.") (a,b) = [a0, b1, Lire("e = ",e)] TantQue (|a-b| >2*e) Faire [c (a+b)/2, p (exp(-a)-a)(exp(-c)-c)] Si (p=0) alors ac bc Sinon Si (p<0) alors bc Sinon ac FinSi FinTantQue Fin calcul_racine

O.U.
a b e c p

Tableau de dclaration des objets Objet


a b e c p

Type/nature
Rel Rel Rel Rel Rel

Rle
La borne inf de l'intervalle de recherche La borne sup de l'intervalle de recherche La valeur de l'erreur La valeur du milieu de [a,b] Comporte le produit de f(a).f(c)

Algorithme 0) Dbut calcul_racine 1) [ a 0, b 1,Lire("e = ",e] TantQue (|a-b| >2.e) Faire [c (a+b)/2, p (exp(-a)-a)(exp(-c)-c)] Si (p=0) alors ac bc Sinon Si (p<0) alors bc Sinon ac FinSi FinTantQue 3) crire ("La racine est : ", (a+b)/2, " ", e, " prs.") 4) Fin calcul_racine
139

Structures de contrle itratives Traduction en Pascal PROGRAM calcul_racine; USES WINCRT; VAR a, b, e, c,p : REAL; BEGIN a:=0; b:=1; WRITE('e = '); READLN(e); WHILE (ABS(a-b)>2*e) DO BEGIN c:=(a+b)/2; p:=(EXP(-a)-a)*(EXP(-c)-c); IF p=0 THEN BEGIN a:= c; b:=c; END ELSE IF (p<0) THEN BEGIN b:=c; END ELSE BEGIN a:=c; END; END; WRITELN('La racine est :',(a+b)/2:6:3,'',e:6:3,' prs.'); END. Un cas d'excution

Retenons
-Il existe deux formulations pour traduire une structure itrative condition d'arrt: La structure Rpter Jusqu' La structure Tant Que Faire - Dans la structure "Rpter Jusqu' " , le traitement rpter est excut au moins une fois car la condition d'arrt est test posteriori. - Dans la structure "Tant Que Faire . " le traitement rpter peut ne pas tre excut car la condition d'arrt est teste priori. En effet, dans le cas o elle est vraie ds le dbut, le traitement n'est pas excut. - Dans l'une ou l'autre formulation, il est conseill de vrifier la main l'excution pour s'assurer du bon fonctionnement de la boucle et surtout des cas limites. Il est important de bien initialiser la structure et de bien positionner les instructions l'intrieur de la boucle.
140

Structures de contrle itratives

Exercices
Exercice 1 Donner la diffrence entre les deux formulations traduisant une structure itrative condition d'arrt. Exercice 2 Quand il s'agit de faire un contrle lors de la saisie d'une donne, pourquoi il est prfrable d'opter pour la structure "Rpter .. Jusqu'" Exercice 3 Analyser puis dduire un algorithme et le programme Pascal qui permet de chercher si une valeur v existe dans un tableau. Dans l'affirmative, le programme affiche la dernire et l'avant dernire place si elle existe. Exercice 4 crire un programme qui saisit un mot en franais puis il affiche la premire lettre double dans l'criture de ce mot. Exemple : ch = "programme" Le programme affiche la lettre m. Exercice 5 crire un programme qui saisie une phrase en franais puis affiche le nombre de mots de cette phrase. Exercice 6 crire un programme qui calcule le PGCD de deux entiers en utilisant la mthode de la diffrence. Exercice 7 Le PPCM de deux entiers est le plus petit commun multiple des deux entiers m et n. Pour calculer le PPCM de m et n, on pourra utiliser la formule suivante : PPCM(m,n) = m.n/PGCD(m,n) Exercice 8 Deux entiers naturels non nuls m et n sont premiers entre eux si et seulement si ils ont un PGCD gal 1. Exemple : Pour m = 7 et n = 4, PGCD (7,4) = 1 donc 7 et 4 sont premiers entre eux. En utilisant cette proprit, crire un programme permettant de saisir deux entiers naturels non nuls m et n et d'afficher s'ils sont premiers entre eux ou non. Exercice 9 crire un programme qui saisit un mot et d'en extraire la premire partie du mot comportant plus de voyelles que de consonnes et de l'afficher.

141

Structures de contrle itratives Exercice 10 On dispose de deux tableaux T1 et T2 contenant respectivement n et m entiers positifs et non nuls. On dsire chercher si les lments de T1 sont tous dans T2 ou inversement. On dira que "T1 est inclus dans T2" ou "T2 est inclus dans T1" ou "T1 et T2 non comparables" Analyser puis dduire un algorithme et le programme Pascal qui saisit m et n et remplit deux tableaux T1 et T2 respectivement par m et n rels. Ensuite tudie la relation entre T1et T2 comme indiqu plus haut et affiche le rsultat. Exercice 11 Soit l'algorithme suivant : 0) Dbut inconnu 1) crire (" n = "); Lire (n) 2) Pour i de 1 n Rpter Rpter Lire(T[i]) Jusqu' T[i] Dans [0..9] FinPour 3) crire ("La plus longue croissante de T mesure ",plc) 4) Fin Inconnu Questions : 1. Traduire cet algorithme en Pascal. 2. Dans l'action 1, ajouter les contrles sur la saisie pour que n vrifie la condition suivante : 5 n 50 3. crire une squence d'instructions permettant de dterminer plc, la longueur de la plus longue squence croissante d'lments du tableau. Exemple : Pour le tableau T suivant : La squence chercher doit retourner la valeur 3 dans ce cas. T
2 1 4 2 3 3 1 4 5 5 7 6 2 7 8 8 4 9 8 10 9 12 0 13

Exercice 12 Nous savons par son graphique qu'une fonction donne f admet un maximum en x0 dans un intervalle [a,b]. On se propose de calculer une valeur approche de x0 e prs o e est une erreur fixe d'avance. Pour ce faire, on calcule l'image f(x) pour une suite de x un pas gal 1/2 e jusqu' ce que f change de monotonie. Les deux dernires valeurs de x encadrent convenablement le x0 recherch. Analyser puis dduire un algorithme et le programme Pascal qui dtermine e prs (0.01 par exemple) une valeur approche de x0 o la fonction suivante f admet un minimum. f(x) = x+1 +1/x sur l'intervalle ]0,4]
142

CHAPITRE

Chapitre 5

Les sous-programmes Objectifs :


- Dcomposer un problme en sous-problmes lmentaires - Prsenter les solutions sous forme de procdures et de fonctions - Prsenter les solutions sous forme d'algorithmes puis de programmes.

Plan du chapitre :
Leon 1 : L'analyse modulaire Leon 2 : Les fonctions Leon 3 : Dclaration, accs aux objets et modes de transmission Leon 4 : Les procdures

Les sous-programmes

Leon

L'analyse modulaire
Objectifs spcifiques :
Comprendre l'intrt de l'analyse modulaire Utiliser l'analyse modulaire pour rsoudre des problmes

Plan de la leon :
I. Introduction II. L'analyse modulaire II.1. Dfinition II.2. Intrts II.3. Notion de sous-programme II.4. Exemple d'analyse modulaire Retenons Exercices

144

Les sous-programmes

Leon

L'analyse modulaire
Diviser chacune des difficults que j'examinerais en autant de parcelles qu'il se pourrait et qu'il serait requis pour les mieux rsoudre
DESCARTES

I. Introduction
Dans le cas de la rsolution d'un problme simple, il est possible d'crire directement l'algorithme correspondant. Toutefois, dans le cas d'un problme plus complexe, la solution ncessiterait l'criture de plusieurs sous-programmes rsolvant chacun une partie du problme. En gnral, et afin de faciliter la rsolution d'un problme complexe et/ou de grande taille, on doit le dcomposer en sous-problmes indpendants et de taille moindre. Ce principe de rduction de complexit est connu sous le nom : Diviser pour rgner . Exemple 1 : Soit le problme consistant en la dtermination de tous les nombres premiers compris entre 1 et 10000. La rsolution de ce problme ncessiterait de dvelopper un sous programme permettant de dcider si un nombre entier donn est premier. La solution globale fera alors appel ce sous-programme (module) pour tous les nombres entiers de la fourchette 1 10000. Exemple 2 : Votre classe veut organiser une fte de fin d'anne. Il est alors ncessaire de se partager le travail afin de russir ce projet. Dans ce but, un chef de projet et des groupes d'lves seront constitus. Chaque groupe aura une tche prcise et devra la programmer. Un groupe s'occupe de la dcoration de la salle ; un autre s'occupe des invits ; un autre s'occupe des prix distribuer aux bons lves et un autre groupe prend en charge l'aspect musical. Le chef de projet pilote l'ensemble des groupes. Il appelle chaque groupe pour l'excution d'une tche donne au moment opportun. travers cet exemple, des notions importantes apparaissent suite des questions naturellement poses. En effet, le chef de projet aura communiquer avec chaque groupe de travail en prcisant des donnes comme par exemple les dimensions de la salle et il obtiendra des rsultats comme par exemple le nombre des personnes qu'elle peut contenir. Le calcul du nombre de personnes est bien sr labor par un des groupes de travail en utilisant des ressources locales telles que les mesures des tables, etc. Outre ces communications, les groupes de travail peuvent utiliser quelques ressources du chef du projet ; a peut tre par exemple une caisse commune.
145

Les sous-programmes Toutes ces notions sont explicites par la suite dans ce chapitre o nous prsentons encore une fois une introduction l'analyse modulaire, la notion de module ou de sousprogramme et les problmes qu'elle pose quant la transmission des paramtres et le partage des donnes. Nous explicitons les cas des fonctions et des procdures.

II. L'analyse modulaire


Un aspect important d'une mthodologie d'analyse est de rendre possible la dcomposition modulaire d'un programme en plusieurs sous-programmes. Il est certain que toute mthode d'analyse qu'elle soit descendante ou ascendante, voit son efficacit renforce si on la combine avec l'utilisation de cette notion.

II.1 Dfinition
L'analyse modulaire consiste diviser un problme en sous problmes de difficults moindres. Ces derniers peuvent tre aussi assujettis cette division jusqu' ce qu'on arrive un niveau abordable de difficult.

II.2 Intrts
Le recours une mthode d'analyse utilisant le concept de la modularit prsente un ensemble d'avantages. Parmi ceux-ci, on cite :

Amliorer l'criture de l'algorithme de rsolution et du programme associ en vitant les duplications de textes. Si une mme suite d'instructions figure plusieurs endroits d'un programme, elle pourra constituer un sous-programme et tre remplace par un appel ce sous-programme. Pouvoir poursuivre l'analyse du problme initial comme si diffrents sous-problmes taient rsolus ; chaque sous-problme lui est alors associ un sous-programme. Faciliter la rsolution du problme en ne s'intressant qu' la rsolution algorithmique d'un sous-problme la fois. Dcrire l'algorithme de chaque sous-programme avec un tableau de dclaration indpendant mais relatif l'environnement du sous-problme rsolu. Rutiliser des sous-programmes par ailleurs dcrits tels que des fonctions appartenant des bibliothques standard (telle que la bibliothque de fonctions mathmatiques, la bibliothque de fonctions de gestion de l'cran, etc.).

Ainsi, le programme sera plus lisible, plus facile documenter, mettre au point et maintenir (modifier ventuellement par la suite ).

146

Les sous-programmes Si la dcomposition modulaire est un bon moyen de structurer les programmes, il faut que le dcoupage soit significatif : un sous-programme doit correspondre une tche dtermine qui intervient "naturellement" dans l'analyse du problme. L'analyse modulaire met en vidence progressivement des sous-problmes : ceci offre "naturellement" la possibilit de dfinir des sous-programmes de tches claires, prcises et explicites.

II.3. Notion de sous-programme


C'est une portion de code analogue un programme, dclar dans un programme ou dans un sous-programme et dont la partie instruction peut tre excute plusieurs fois au cours du traitement du programme grce des appels. On distinguera alors les sous-programmes appelant et appel. L'appelant va activer l'appel l'aide d'une instruction d'appel et lorsque l'excution de l'appel cesse, un retour l'appelant s'effectue afin de poursuivre l'excution partir de l'action qui suit l'appel. On distingue deux types de sous-programmes : les fonctions et les procdures. Une fonction ralise un traitement et retourne un seul rsultat, comme par exemple la fonction factoriel(n) alors qu'une procdure ralise un traitement et pourrait retourner zro, un ou plusieurs rsultats. A titre d'exemple, nous citons la procdure de tri d'un tableau d'entiers (voir chapitre 5). Dcider si un sous-programme est une fonction ou une procdure se fait lors de l'analyse et ce, en fonction de la nature du traitement et des entres/sorties ralises. Ces deux types de sous-programmes feront l'objet des leons suivantes.

II.4. Exemple d'analyse modulaire


Nous proposons dans l'exemple ci-dessous non pas une solution complte du problme mais plutt une approche de rsolution du problme. PROBLME Donner un algorithme pour la construction d'une maison. Arrtez-vous ces noncs et ne regardez pas la solution propose. Prenez une feuille et un crayon, essayez de tracer une dmarche de rsolution de ce problme. Puis essayez de comparer votre proposition avec celles de vos camarades. Solution : Afin d'aborder ce problme, il est recommand d'appliquer le principe de rduction de complexit (diviser pour rgner). Ceci nous conduit adopter une approche modulaire et descendante afin de diviser le problme en sous problmes ou en modules de difficult moindre. Si dans un module, il y a encore davantage de complexit, on continue le diviser en sous modules et ainsi de suite jusqu' arriver un niveau lmentaire de difficult.
147

Les sous-programmes Nous devons d'abord reposer le problme en dtails. Nous supposons que le futur propritaire de cette maison va faire le choix du terrain et de son emplacement. Il a aussi une ide claire et prcise du plan de la maison. Commenons donc l'analyse de ce sujet. Analyse S
1

NOM : ConstructionMaison L.D.E.


Rsultat = MaMaison MaMaison = ( MODULE MODULE MODULE MODULE MODULE Fin ConstructionMaison Finition, Toits Murailles Fondations Terrain)

O.U.
Finition Toits Murailles Fondations Terrain

Nous constatons que le rsultat MaMaison est une suite ordonne de cinq modules qui sont : Finition, Toits, Murailles, Fondations et Terrain. La disposition de ces modules a t carrment descendante. Nous passerons ensuite l'analyse de chaque module part. Prenons l'exemple du module Finition. MODULE Finition S
1

L.D.E.
Rsultat = MaisonFinie MaisonFinie = ( MODULE DernierNettoyage, MODULE Peinture, MODULE Badigeonnage MODULE Sanitaires MODULE Electricit Etc ... Fin MODULEFinition

O.U.
DernierNettoyage Peinture Badigeonnage Sanitaires Electricit Etc.

Vous avez remarqu travers cet exemple comment diviser un grand programme de construction d'une maison en sous-programmes. Eux-mmes, ces sous-programmes sont diviss en sous-programmes. C'est l'approche modulaire.

Retenons
Pour faciliter la rsolution des problmes, souvent, ils sont dcomposs en sousproblmes par une analyse modulaire. Chaque sous-problme fait l'objet d'une procdure ou d'une fonction.
148

Les sous-programmes

Exercices
Exercice 1 On veut saisir le contenu de deux vecteurs d'entiers A et B et les runir dans un vecteur C que l'on affichera par la suite. Dcomposer ce problme en en un ensemble de sous-problmes et analyser chacun de ces sous-problmes. Exercice 2 Nous avons relev la pluviomtrie mensuelle concernant les 5 dernires annes. Nous voulons dterminer la moyenne pluviomtrique annuelle, les pluviomtries mensuelles minimale et maximale. Dcomposer ce problme en un ensemble de sous-problmes et analyser chacun de ces sous-problmes. Exercice 3 On veut crire un programme qui permet de : - initialiser automatiquement un tableau de dimension N avec des valeurs alatoires sachant que pour gnrer des nombres alatoires on doit utiliser : la procdure RANDOMIZE ; sans paramtres, elle initialise le gnrateur des nombres alatoires et doit tre mise au dbut du programme. Il est noter que la procdure RANDOMIZE appartient la bibliothque WINCRT . la fonction prdfinie RANDOM ( P ) ; qui envoie un entier alatoire Z tel que 0 Z P o P est un entier. - tester si le tableau constitue un palindrome (on obtient le mme rsultat quand on lit un palindrome de gauche droite ou de droite gauche). Dcomposer ce problme en un ensemble de sous-problmes et analyser chacun de ces sous-problmes. Exercice 4 Soit un tableau T d'entiers non nuls, trouvez combien il y a d'entiers distincts positifs dont l'oppos est aussi dans le tableau. Exemple : Donne T : -3 4 2 8 9 1 -3 -8 -4 2 8 2 -8 1 3 Rsultat :3

On affichera 3 car les trois entiers 3, 4, et 8 ont leurs opposs dans le tableau T. Questions : 1. Analyser ce problme en le dcomposant en modules 2. Analyser chacun de ces modules

149

Les sous-programmes Exercice 5 Le jeu se joue deux joueurs : Le premier joueur saisit un entier de quatre chiffres puis l'affiche masqu avec des toiles Le deuxime joueur se charge de dvoiler cet entier : - il saisit un entier, au hasard, de quatre chiffres - l'ordinateur va l'aider en indiquant si cette valeur est plus grande, plus petite ou gale l'entier masqu - Ce joueur rpte ces deux tapes jusqu' dvoiler l'entier masqu par le premier joueur. Lorsque le deuxime joueur devine quel entier il s'agit, le programme affiche le nombre d'essais qui ont t ncessaires ce joueur pour dvoiler cet entier. Questions : 1. Analyser ce problme en le dcomposant en modules 2. Analyser chacun de ces modules Exercice 6 Dans un tableau de N lments, le programme multiplie les nombres des cases impaires par 2 et des cases paires par le contenu de la case prcdente. Le programme s'arrte en fin de tableau ou lorsqu'il rencontre une case de valeur 0. 7 1 14 6 2 48 5 3 10 9 4 18 4 5 36 0 6 0 0 7 0 0 8 0 0 9 0 APRS AVANT

Questions : 1. Analyser ce problme en le dcomposant en modules 2. Analyser chacun de ces modules Exercice 7 Soit N un entier naturel non nul, on se propose de dterminer le plus grand entier form par tous les chiffres de N. Exemple : N= 3941 l'entier rsultat est 9431 N= 65060 l'entier rsultat est 66500 Questions : 1. Analyser ce problme en le dcomposant en modules. 2. Analyser chaque module.

150

Les sous-programmes

Leon

Les fonctions

Objectifs spcifiques
Comprendre l'intrt des sous-programmes de type fonction Savoir dclarer, programmer et utiliser les fonctions

Plan de la leon
I. Dfinition II. Vocabulaire et syntaxe Retenons Exercices

151

Les sous-programmes

Leon

Les fonctions
Ce sont ces questions, qui laissent une partie de la proposition en blanc, que les mathmaticiens appellent problmes, comme lorsqu'on demande de trouver un miroir qui ramasse tous les rayons du soleil en un point, c'est dire, on en demande la figure ou comment il est fait.
LEIBNIZ

I. Dfinition
Une fonction est un sous-programme qui renvoie une valeur d'un seul type. Ce type sera celui de la fonction. La communication entre l'appelant et la fonction (ici l'appel) se produit l'aide d'un ensemble de paramtres et ventuellement de ressources communes partages. Ceci sera dtaill dans la leon 3.

II. Vocabulaire et syntaxe


Ce paragraphe prsente de manire progressive et illustre le vocabulaire et la syntaxe utiliss lors de l'utilisation des fonctions tant au niveau de l'appel qu'au niveau de la dclaration de la fonction. Activit 1 Soit la fonction f(x)=4.x+0,75. Nous voulons crire un programme qui affiche pour n valeurs de x, le couple (x, f(x)), x tant une valeur donne. Analyse Nom : Calcul_F S
1

L.D.E.
Rsultat = valeurs Valeurs = [n = Donne ] Pour i de 1 n faire x = Donne ("Entrer la valeur de x ") y FN f(x) crire (x, y) FinPour Fin Calcul_F

O.U.
n i x y f

152

Les sous-programmes Tableau de dclaration des objets Objet


n i x y f

Type/nature
Entier Entier Rel Rel Fonction de valeur f(x) =4*x+0.75

Rle
Nombre d'itrations Compteur Abscisse Valeur de f(x) Fonction

Algorithme 0) Dbut Calcul_F 1) [Lire (n)] Pour i de 1 n Faire Ecrire ("Entrer la valeur de x ") Lire (x) y FN f(x) Ecrire (x, y) FinPour 2) Fin Calcul_F Remarques : 1) L'appel de la fonction f est fait l'aide de FN f(x). 2) Le prfixe FN est ajout devant le nom de la fonction que nous avons cre ; cette convention nous aidera reprer les fonctions dfinir. Analyse de la fonction f DEF FN f (x : Rel ) : Rel S
1 2 Rsultat = f f 4*x + 0.75 Fin f

L.D.E.

O.U.

Remarque : x et f sont dj dclars au niveau de l'entte de la fonction (DEF FN f (x : Rel) : Rel ). Algorithme 0) DEF FN f (x : Rel ) : Rel 1) f 4*x+0.75 2) Fin f Remarque : f est une fonction ayant un seul paramtre x. Il est possible qu'une fonction ait plusieurs paramtres. Dans l'activit ci-dessous, la fonction Moyenne en possde plusieurs.
153

Les sous-programmes Activit 2 crire un programme qui saisit deux coefficients coef1 et coef2 puis rpte n fois la saisie de deux notes Note1 et Note2 et appelle une fonction pour calculer leur moyenne pondre. Cette moyenne sera ensuite affiche. On utilise la formule : moyenne = ( Coef1.Note1 + Coef2.Note2 )/ (Coef1+Coef2 ). Analyse Nom : Calcul_moy S
3

L.D.E.

O.U.

1 2 4

Rsultat = Les_moyennes n Les_moyennes = [ Lire("n = ",n)]Pour i de 1 n faire i Note1 = Donne("Note1 = ") Note1 Note2 = Donne("Note2 = ") Note2 Moy Moy FN Moyenne (Coef1, Note1, Moyenne Coef2, Note2) Coef1 Ecrire ("Moyenne = ", Moy) Coef2 FinPour Coef1 = Donne ("Donner le 1er coefficient") Coef2 = Donne ("Donner le 2me coefficient") Fin Calcul_moy

Tableau de dclaration des objets Objet


n i Note1 Note2 Moy Moyenne Coef1 Coef2

Type/nature
Entier Entier Rel Rel Rel Fonction Entier Entier

Rle
Nombre de calculs de moyennes Compteur 1re note 2me note Moyenne pondre des 2 notes Fonction qui calcule la moyenne pondre des 2 notes Coefficient de la 1re matire Coefficient de la 2me matire

Algorithme 0) Dbut Calcul_moy 1) crire ("Donner le 1er coefficient : "), Lire (Coef1) 2) crire ("Donner le 2me coefficient : "), Lire (Coef2) 3) [Lire ("n = ",n)] Pour i de 1 n Faire Lire ("Note1 = ", Note1) Lire ("Note2 = ", Note2) Moy FN Moyenne (Coef1, Note1, Coef2, Note2) crire ("Moyenne = ", Moy) FinPour 4) Fin Calcul_moy
154

Les sous-programmes Remarque : L'appel de la fonction qui calcule la moyenne des deux notes est ralis l'aide de FN Moyenne (Coef1, Note1, Coef2, Note2). Analyse de la fonction Moyenne DEF FN Moyenne ( c1, n1, c2, n2 : Rel ) : Rel S
2 1 3

L.D.E.
Rsultat = Moyenne Moyenne Total / (c1 + c2) Total c1*n1 + c2*n2 Fin Moyenne

O.U.
Total

Remarque : Nous constatons que la liste des objets utiliss (O.U.) n'inclut que Total. En effet, les autres objets (c1, c2, n1, n2) sont dclars dans l'entte de la fonction en tant que paramtres. L'objet Moyenne constitue en soi, l'identificateur de la fonction, dclar aussi dans l'entte de la fonction. Il constitue le rsultat de retour de la fonction et il est du type rel. Tableaux de dclaration des objets locaux Objet
Total

Type/nature
Rel

Rle
Total pondr des moyennes

Algorithme 0) DEF FN Moyenne (c1, n1, c2, n2 : Rel ) : Rel 1) Total c1*n1 + c2*.n2 2) Moyenne Total / ( c1 + c2 ) 3) Fin Moyenne Remarque : Nous remarquons aussi que dans le tableau de dclaration des objets, seule la variable locale Total est dclare. Les paramtres c1, n1, c2 et n2 appels paramtres formels (voir leon 3) sont dj dclars dans l'entte de la fonction.

155

Les sous-programmes Traduction en Pascal PROGRAM Calcul_moy ; USES WINCRT ; VAR Coef1, Coef2, i, n :INTEGER ; Note1, Note2, Moy : REAL ; FUNCTION Moyenne ( c1,n1,c2,n2 : REAL) : REAL ; VAR Total : REAL ; BEGIN Total := c1 * n1 + c2 * n2 ; Moyenne := Total / ( c1+c2 ); END ; BEGIN { PROGRAMME PINCIPAL} WRITELN('Entrer le 1 er coefficient : ') ; READLN (Coef1) ; WRITELN('Entrer le 2me coefficient : ') ; READLN (Coef2) ; WRITE('n = '); READLN (n) ; FOR i :=1 TO n DO BEGIN WRITE('Note1 = '); READLN (note1) ; WRITE('Note2 = '); READLN (note2) ; Moy :=Moyenne(Coef1, Note1,Coef2, Note2) ; WRITELN ('Moyenne = ',Moy:5:2); END ; END. Un cas d'excution

156

Les sous-programmes Remarque : La dclaration d'une fonction en PASCAL se trouve dans la partie dclarative d'un programme ou d'un sous-programme, aprs les dclarations des constantes, des types et des variables.

Retenons
Une fonction est constitue de trois parties : 1) La partie "entte de la fonction" o nous trouvons le nom de la fonction suivi entre parenthses des paramtres en entre et de leur mode de passage, puis du type du rsultat. 2) La partie "dclaration locale" o tous les objets locaux de la fonction sont dclars. 3) La partie "corps de la fonction" o nous trouvons les instructions propres la fonction.

157

Les sous-programmes

Exercices
Exercice 1 a- crire une fonction MIN2 qui donne le minimum de deux entiers. b- crire une fonction MIN3 qui donne le minimum de trois entiers. Exercice 2 crire un programme intitul AMI qui permet d'afficher si deux entiers m et n sont deux nombres amis. m et n sont dits amis si la somme des diviseurs de m est gale la somme des diviseurs de n. Exercice 3 On veut crire un programme permettant de lire deux mots ch1 et ch2, d'appeler une fonction qui prend en paramtres ch1 et ch2 et retourne une chane de caractres compose par tous les caractres qui apparaissent dans les deux chanes sans redondance et d'affich le rsultat de la fonction. Exemple : Soit ch1= "Coccinelle" et ch2= "Cible" Rsultat : "C i l e" Exercice 4 La factorielle d'un entier N est dfinie par N ! =1*2*3**N et 0 ! = 1 crire un programme qui permet de calculer la somme suivante : S = 1-1/3 !+1 /5 !-1/7 !+ 1/N ! Reconnaissez-vous le nombre trouv ? Exercice 5 Un entier naturel est dit parfait s'il est gal la somme de tous ses diviseurs autres que lui mme. Exemple : 6 = 1+2+3 On demande d'crire un programme qui cherche et affiche tous les entiers parfaits compris entre 2 valeurs donnes M et N (2<M<N). Exercice 6 crire une fonction permettant de calculer le PGCD(Plus Grand Commun Diviseur) d'un couple d'entiers naturels (a,b) en utilisant les deux formules suivantes : 1)PGCD(a,b)=PGCD(b ,a MOD b) ; 2)PGCD(a,b)=PGCD(b,a-b) ; Exercice 7 crire une fonction qui calcule la racine carre d'un rel positif a en utilisant la limite xn+1 =1/2 * (xn + a/xn ) de la suite(xn )n N dfinie par : x0 tant choisi arbitrairement Exercice 8 2 2 3 n P(x) = a0 + a1 * x + a * x +..+an x tant un polynme de degr n. Le schma de Horner P(x) est : P(x) = a0 + x*(a1 +x*( a2 +x*(. an*x) ) ).))). crire une fonction qui calcule la valeur de P(x) pour un x donn en utilisant le schma de Horner.
158

Les sous-programmes

Leon

Dclaration accs aux objets et modes de transmission

Objectifs spcifiques
Comprendre l'utilisation des objets locaux et des objets globaux. Comprendre et savoir utiliser les paramtres et leurs modes de transmission.

Plan de la leon
I. Dclaration et accs aux objets I.1. Les objets locaux I.2. Les objets globaux I.3. Niveaux des sous-programmes I.4. Accs aux objets II. Les paramtres et leurs modes de transmission II.1. Les paramtres formels II.2. Les paramtres effectifs II.3. Modes de passage des paramtres II.4. Activation d'une fonction et retour du rsultat II.5. Retenons Exercices Exemple d'excution commente du programme Calcul_Moy

159

Les sous-programmes

Leon

Dclaration accs aux objets et modes de transmission


Le bon sens est le concierge de l'esprit : son office est de ne laisser entrer ni sortir les ides suspectes.
Daniel STERN

I. Dclaration et accs aux objets


I.1 Les objets locaux
Dans la fonction Moyenne de la leon prcdente, la variable Total de type Rel est dclare dans le tableau des dclarations des objets locaux de cette fonction. C'est une variable locale la fonction. Dfinition : Tous les objets tels que les constantes, les types, les variables et ventuellement d'autres fonctions dclars dans un sous-programme sont dits locaux celui-ci.

I.2 Les objets globaux


Dfinition : Les objets utiliss dans un sous-programme et non dclars dans celui-ci sont des objets globaux dclars dans la zone dclaration du programme appelant.

Activit 1 Soit le programme Pascal suivant, identifier les objets locaux et les objets globaux. PROGRAM cercle ; CONST pi = 3.1415 ; VAR rayon : REAL ; p, s : REAL; FUNCTION perimetre ( r : REAL) : REAL ;
160

Les sous-programmes BEGIN perimetre = 2 * pi * r ; END ; FUNCTION surface ( r : REAL) : REAL ; BEGIN surface = pi * r * r ; END ; BEGIN { PROGRAMME PINCIPAL} WRITELN('Entrer le rayon du cercle : ') ; READLN (rayon) ; p := perimetre (rayon) ; s := surface (rayon) ; WRITELN('Le primtre du cercle est : ', p) ; WRITELN('La surface du cercle est : ', s) ; END. END. Rponse : Les deux fonctions primtre et surface utilisent l'objet global pi. Les objets rayon, p, et s dclars dans le programme principal sont considrs comme des objets locaux celui-ci.

I.3. Niveaux des sous-programmes


La dclaration des sous-programmes respecte une hirarchie dicte par les diffrents niveaux d'appels. Cette dernire peut tre reprsente par un arbre o le premier niveau correspond sa racine, les autres niveaux correspondent quant eux aux diverses imbrications des sous-programmes entre eux. Pour reprsenter un arbre, on considre que : sa racine est l'identificateur du programme principal. ses nuds correspondent aux divers sous-programmes qui les composent. les arcs reprsentent la relation " dclare " ou " est dclar par ". L'arbre de l'algorithme Calcul_moy est simple et ne contient qu'un seul arc. Cet arbre est schmatis comme suit : Niveau 1 Calcul_moy

Niveau 2

Moyenne
161

Les sous-programmes Remarque : Tous les objets prdfinis et notamment les fonctions telles que ABS et RacineCarr sont considrs au niveau 0. C'est le niveau visible en tout point du programme.

I.4. Accs aux objets


L'objectif de ce paragraphe est de prsenter les rgles d'accs aux objets dans une hirarchie de sous programmes. Tous les objets locaux d'un sous-programme sont inaccessibles : par le programme principal. par les sous-programmes dclars au mme niveau que le sous-programme considr. par les sous-programmes qui englobent le sous-programme considr. Dans la fonction Moyenne de la leon prcdente, la variable locale Total de la fonction Moyenne n'est pas connue dans l'algorithme principal Calcul_moy. La rgle d'accs aux objets locaux peut se dfinir comme suit. Dfinition : Un objet dclar dans un sous-programme S un niveau i est inaccessible par les sous-programmes de niveau j < i et par les sous-programmes de niveau k > i qui ne sont pas englobs par S. Cette rgle dfinit la porte de l'identificateur d'un objet. Elle peut tre aussi formule de cette faon : Dans un sous-programme de niveau i, les identificateurs connus sont les identificateurs dclars localement au sous-programme i et les identificateurs dclars dans les sous-programmes englobant de niveau j < i. Dans l'exemple prcdent de la leon II, les variables Coef1, Note1, Coef2 et Note2 sont dclares dans le programme principal englobant la fonction Moyenne. Elles peuvent tre utilises sans nouvelles dclarations dans la fonction qui est un sousprogramme englob. Ces objets sont alors appels objets globaux.

162

Les sous-programmes Attention Un identificateur peut en cacher un autre . C'est le cas o un identificateur d'un programme ou d'un sous-programme englobant a un homonyme (identificateur de mme nom) dans un sous-programme englob. Dans ce cas, l'objet local dclar dans l'englob va cacher l'objet global de mme nom tout le long du sous-programme o il a t dclar. Nous venons de dfinir ainsi la rgle de visibilit des objets : La visibilit d'un objet (identificateur pouvant tre utilis) est gale la porte moins la partie o il est cach par un homonyme. Exemple rcapitulatif : Pour expliquer les diffrentes notions tudies prcdemment, nous allons utiliser l'exemple schmatique suivant :
Objets locaux de PP (Objets globaux pour SP1)

Prdfini

PP
A (variable de type rel ) B SP1 A (variable de type caractre) C A B

Objets locaux de SP1

A Objets prdfinis

163

Les sous-programmes Commentaires : 1) La porte d'un objet est reprsente par la flche et sa visibilit est reprsente par la partie en gras de cette mme flche. 2) Visibilit de la variable A ( rel ) = porte de A ( rel ) - la partie o A est cache (porte de la variable locale A ( caractre ) du sous-programme SP1 ). 3) L'objet B est un objet global ; nous pouvons aussi l'utiliser dans le sous-programme SP1. 4) Dans notre schma, le sous-programme SP1 est englob ("fils") du programme principal PP qui est un englobant ("pre") par rapport SP1. Dans cet tat d'esprit, nous remarquons que "le fils" peut manipuler les objets dfinis " du pre" (ou du "grand-pre" ) mais "le pre" n'a pas le droit de manipuler les objets dfinis par "le fils" (ou "petit fils" ). PP ne peut pas manipuler les objets dfinis par SP1 ("fils") car il est de niveau infrieur. Attention ! Afin d'crire les sous-programmes les plus indpendants possibles, il faut viter au maximum l'utilisation des variables globales non dclares dans le sous-programme englob (l'appel). Nanmoins, on pourra ventuellement utiliser des objets globaux tels que des dclarations de types ou de constantes. Les sous-programmes devront de prfrence communiquer travers des paramtres.

II. Les paramtres et leurs modes de transmission


II.1. Les paramtres formels
Les paramtres formels sont les paramtres qui se trouvent dans l'entte du sousprogramme. Reprenons l'entte de la fonction Moyenne (leon II) : DEF FN Moyenne (c1, n1, c2, n2 : Rel) : Rel Dans l'entte de la fonction Moyenne, c1, n1, c2 et n2 sont des paramtres formels. Pour leur spcification, il faut indiquer le nom, le type et le mode de passage de chaque paramtre (voir ci-dessous). Dans la partie instruction du sous-programme, on fait rfrence aux paramtres formels. Dans la fonction Moyenne, c1, n1, c2 et n2 sont manipuls dans la partie instruction.
164

Les sous-programmes

II.2. Les paramtres effectifs


Les paramtres effectifs sont les paramtres qui figurent (dans le programme ou sous-programme appelant) au niveau de l'appel du sous-programme. Leurs valeurs respectives sont relatives une activation particulire et se substitueront aux paramtres formels. Le nombre des paramtres effectifs et des paramtres formels correspondants doit tre le mme. La correspondance entre paramtre formel et paramtre effectif s'tablit d'aprs leur position dans la liste des paramtres. Il faut bien sr s'assurer de la compatibilit de type entre paramtre effectif et paramtre formel correspondant. Dans l'activit2 (leon II), Moyenne (Coef1, Note1, Coef2, Note2 ) constitue l'appel de la fonction Moyenne. Les objets Coef1, Note1, Coef2 et Note2 sont des paramtres effectifs. Coef1 est un paramtre effectif correspondant au paramtre formel c1. Note2 est un paramtre effectif correspondant au paramtre formel n2. Coef2 est un paramtre effectif correspondant au paramtre formel c1. Note2 est un paramtre effectif correspondant au paramtre formel n2.

II.3. Mode de passage des paramtres


Pour les sous-programmes, il existe deux modes de passage des paramtres : le mode de passage par valeur et celui par variable. Pour le cas de la fonction, nous dfinissons seulement le mode de passage par valeur lequel est le plus utilis. Le mode de passage par variable est expliqu dans la dfinition des procdures (voir paragraphe 3 de la leon 4). Mode de passage par valeur Le paramtre effectif est une expression (on rappelle que a peut tre une constante, une valeur explicite, une variable ou un calcul simple donnant une valeur ). Le paramtre formel correspondant dsigne une variable locale du sous-programme. Au moment de l'appel, l'expression reprsentant le paramtre effectif est value dans le contexte du programme ou du sous-programme appelant. La valeur du paramtre effectif est copie dans la variable locale dsigne par le paramtre formel correspondant. L'appelant impose l'appel une pure lecture des valeurs des paramtres effectifs. Les paramtres transmis par valeur font communiquer l'information dans un seul sens: du sous-programme (ou programme )appelant vers le sous-programme appel. Les paramtres formels sont des variables locales dont les valeurs aprs excution des instructions de l'appel ne peuvent pas tre rcupres par l'appelant. Ce mode assure donc une protection des variables de l'appelant transmises par valeur. Elles gardent les mmes valeurs au niveau de l'appel du sous-programme et juste aprs l'excution de cet appel.
165

Les sous-programmes Dans notre exemple, l'appel de la fonction Moyenne (Coef1, Note1, Coef2, Note2), les paramtres effectifs Coef1, Note1, Coef2 et Note2 sont transmis par valeur. Les paramtres formels correspondants c1, n1, c2 et n2 seront tout simplement "initialises" par les quatre valeurs Coef1, Note1, Coef2 et Note2 au moment de l'appel de cette fonction. Remarque : Dans la partie instruction du sous-programme appel (exemple : fonction Moyenne ), les paramtres formels transmis par valeur (exemple : c1, n1, c2 et n2 ) ne doivent en aucun cas se trouver gauche du symbole d'une instruction d'affectation. Mme si par erreur la valeur du paramtre formel transmis par valeur (exemple : c1, n1, c2 ou n2 ) est modifie dans l'appel, au retour aprs excution de celui-ci, le paramtre effectif correspondant (exemple : Coef1, Note1, Coef2 ou Note2 ) garde la mme valeur originale transmise lors de l'appel. En effet on ne manipule au niveau de l'appel qu'une copie locale.

II.4 Activation d'une fonction et retour du rsultat de la fonction


II.4.1 Activation d'une fonction L'activation d'une fonction est provoque par l'excution d'une instruction d'appel. Dans notre exemple, Moyenne (Coef1, Note1, Coef2, Note2) constitue l'appel la fonction Moyenne. L'activation de la fonction aprs passage des paramtres se droule dans l'ordre suivant : 1. Dclarations des objets locaux ; ce qui provoque leur cration (et notamment les places mmoires ncessaires aux diffrentes variables locales). 2. Excution des instructions qui composent le corps de la fonction. 3. Sortie de la fonction provoque une fois que le corps est excut et que l'on atteint l'instruction Fin. Il y a alors retour l'appelant qui continue l'excution de l'instruction en cours ou l'instruction qui suit l'instruction d'appel. II.4.2 Retour du rsultat de la fonction Une fonction possde un type, c'est celui du rsultat qu'elle calcule. Dans notre exemple, DEF FN Moyenne ( c1, n1, c2,n2 : Rel ) : Rel, la fonction Moyenne rend un rsultat du type Rel.

166

Les sous-programmes c1 n1 c2 n2

Moyenne Donc, il doit y avoir ncessairement dans la partie instruction de la fonction au moins une affectation explicite ayant l'identificateur de la fonction gauche du symbole d'affectation. Dans notre exemple, ceci est illustr par : Moyenne Total / ( Coef1+ Coef2 ). La dernire valeur affecte cet identificateur lors de l'appel de la fonction est le rsultat de l'valuation de la fonction. Une fonction peut tre appele l'intrieur d'une expression (exemple y 3*f(x)). L'appel de la fonction ne pourra pas se trouver gauche du symbole de l'affectation dans le sous-programme ou programme appelant ! Une fonction calcule une valeur qui, retourne au sous-programme ou programme appelant, est immdiatement utilisable. Son nom est le seul paramtre rsultat et tous les paramtres explicitement transmis sont en principe des donnes.

II.5 Exemple d'excution commente du programme Calcul_Moy


Affichage Lecture Affichage Lecture Lecture Lecture : Entrer le 1er coefficient : : 3 { Coef1 } : Entrer le 2me Coefficient : : 2 { Coef2 } Lecture : 2 { n=2 lves - 2 itrations } : 11.5 { Note1 la 1re itration } : 10 { Note2 la 1re itration } Moy := excution de la fonction Moyenne N1 initialise 11.5 N2 initialise 10 Total := 3*11.5+2*10) {* Total :=54.5 *} Moyenne := 54.5/(3+2) {* Moyenne :=10.90 Le rsultat de Moyenne est 10.90*} Moy :=10.90 { valeur rsultat rendu par moyenne }

167

Les sous-programmes Affichage : Lecture : Lecture : lve 1 a une Moyenne = 10.90 13 { Note1 la 2me itration } 16 { Note2 la 2me itration } Moy := excution de la fonction Moyenne N1 initialise 13 N2 initialise 16 Total := 3*13 + 2*16 {* Total :=71 *} Moyenne := 71/(3+2) {* Moyenne :=14.20 Le rsultat de Moyenne est 14.20} Moy :=14.20 { valeur rsultat rendu par moyenne } lve 2 a une Moyenne = 14.20

Affichage :

Retenons
Les objets dclars dans un programme ou dans un sous-programme sont dits locaux celui-ci. Les sous-programmes peuvent manipuler des objets globaux ; mais, ils devront de prfrence communiquer travers des paramtres.

168

Les sous-programmes

Exercices
Exercice 1 1. Quelle est la diffrence entre paramtre formel et paramtre effectif ? 2. Quels sont les sous-programmes qui peuvent accder un objet dclar dans un sous-programme F ? 3. Quel est le mode de passage des paramtres utilis pour les fonctions ? Exercice 2 1. Ecrire un programme Pascal qui permet de calculer le minimum et le maximum de deux entiers en utilisant deux fonctions MIN et MAX. 2. Donner le bilan des objets utiliss dans ce programme : Les objets globaux Les objets locaux (par fonction) les paramtres formels les paramtres effectifs Exercice 3 Soit le programme Pascal suivant : PROGRAM Suite ; VAR n1,n2 : INTEGER; Un,Sn: REAL ; FUNCTION Factoriel ( k : INTEGER ): INTEGER ; VAR i,f: INTEGER ; BEGIN f := 1 ; FOR i := 1 TO k DO BEGIN f := f * i ; END ; Factoriel := f ; END ; FUNCTION nieme_terme (l : INTEGER) : REAL ; VAR i,S : INTEGER ; BEGIN S := 0 ; FOR i := 1 TO l DO BEGIN S := S + (2*i + 1) ; END ; nieme_terme := S / Factoriel(l) ; END ;

169

Les sous-programmes FUNCTION somme_suites (m : INTEGER) : REAL ; VAR i : INTEGER ; S : REAL ; BEGIN S := 0 ; FOR i := 1 TO m DO BEGIN S := S + nieme_terme(i) ; END ; somme_suites := S ; END ; BEGIN { PROGRAMME PINCIPAL} WRITELN(' Donner un entier : ') ; READLN (n1) ; Un := nieme_terme(n1) ; WRITELN('Donner un entier : ') ; READLN (n2) ; Sn := somme_suites(n2) ; WRITELN('Le ',n1,'ieme terme de la suite est : ', Un) ; WRITELN('La somme du ',n2, 'premiers termes de la suite est : ',Sn) ; END. Donner les diffrents niveaux des sous-programmes utiliss en utilisant un arbre. Puis donner les rgles d'accs aux objets par les diffrents sous-programmes (accessible ou inaccessible). Exercice 4 Soit la fonction suivante : 0) DEF FN F(x:entier):entier 1) x x + 3 2) F x 3) Fin F crire un programme en Pascal contenant cette fonction. Dans votre programme principal vous dfinissez une variable y initialise 0 ; vous afficherez cette variable avant d'appeler la fonction F ainsi qu'aprs. Est-ce que la valeur de la variable y affiche aprs appel de la fonction F a chang? Pourquoi ?

170

Les sous-programmes

Leon

Les procdures
Objectifs spcifiques
Comprendre l'intrt des sous-programmes de type procdure Savoir dclarer, programmer et utiliser les procdures

Plan de la leon
I. Vocabulaire et syntaxe II. Mode de transmission par variable III. Problme corrig Retenons Exercices

171

Les sous-programmes

Leon

Les procdures
Le bon sens est la chose au monde la mieux partage : car chacun pense en tre si bien pourvu, que ceux mmes qui sont les plus difficiles contenter en toute chose n'ont point coutume d'en dsirer plus qu'ils en ont.
DESCARTES

I. Vocabulaire et syntaxe
I.1 Dfinition
Les procdures sont des sous-programmes qui peuvent avoir zro, un ou plusieurs rsultats. Une procdure permet de rsoudre un sous-problme.

I.2 Vocabulaire et syntaxe


L'appel de la procdure doit se trouver dans une instruction d'appel et ne peut pas tre dans une expression comme le cas des fonctions. Dans l'analyse de l'algorithme nous crivons : PROC identificateur_procedure(paramtre1, paramtre2, paramtren) Activit 1 crire un programme permettant de saisir le nom et la note de n candidats. Il doit ensuite appeler une procdure Concours qui affiche l'admission ventuelle de cette personne au concours. On fera la saisie de n noms et notes. Analyse Nom : Recrutements S L.D.E.
Rsultat = Les_recrutements Ecrire("Donner le Nbre de personnes:") Les_recrutements = n = Donne Pour i de 1 n Faire Nom = Donne Note = Donne PROC Concours(Nom,Note) FinPour Fin Recrutements 172

O.U.

n i Nom Note Concours

Les sous-programmes Tableau de dclaration des objets Objet


n i Nom Note Concours

Type/nature
Entier Entier Chane Rel Procdure

Rle
Nombre de candidats au concours Compteur Nom d'une personne donne Note obtenue au concours Procdure permettant d'afficher l'admission au concours d'une personne donne

Algorithme 0) dbut Recrutements 1) Ecrire (" donner le nombre de personnes : ") Lire (n) Pour i de 1 n Faire Lire (Nom) Lire (Note) PROC Concours(Nom,Note) FinPour 2) Fin Recrutements. Analyse de la procdure Concours DEF PROC Concours (Lenom : chane , Note_eval : Rel) ; S L.D.E.
2 1

O.U.

Rsultat =Ecrire ("M. ", Lenom , message ) Lenom [message]= [ ]Si ( Note_eval > 14 ) Alors Note_eval message message"vous tes admis au concours " Sinon message"vous ntes pas admis au concours " Finsi Fin Concours

Algorithme 0) DEF PROC Concours ( Lenom : Chane , Note_eval : Rel ) 1) Si ( Note_eval > 14 ) Alors message" vous tes admis au concours " Sinon message" vous ntes pas admis au concours" Finsi 2) crire (" M. ", Lenom , message ) 3) Fin Concours Tableau de dclaration des objets Objet
Message

Type/nature
Chane

Rle
Message adresser au candidat 173

Les sous-programmes Traduction en Pascal PROGRAM Recrutements; USES WINCRT; VAR n ,i : INTEGER ; Nom : STRING ; Note : REAL ; PROCEDURE Concours ( Lenom:STRING,Note_eval:REAL ); VAR message : STRING ; BEGIN IF (Note_eval > 14) THEN Message := ' vous tes admis au concours ' ELSE Message := ' vous n''tes pas admis auconcours ' ; WRITELN('M. ',Lenom, Message ); END ; BEGIN WRITELN ('donner le nbre de personnes :') ; READLN(n) ; FOR i := 1 TO n DO BEGIN WRITE('Entrer le nom : ');READLN(Nom) ; WRITE('Entrer la note : ');READLN(Note) ; Concours(Nom, Note) ; END ; END. Un cas d'excution

174

Les sous-programmes Dans l'activit 1, l'appel est ralis par l'instruction : PROC Concours ( Nom,Note ). Les dfinitions des objets locaux et globaux pour une procdure suivent les mmes rgles que celles dictes pour les fonctions. L'entte de la procdure Concours est DEF PROC Concours (Lenom : Chane , Note_eval : Rel). Lenom et Note_eval sont deux paramtres formels avec un mode de transmission par valeur que nous avons trait lors de l'tude des fonctions. Nous allons dfinir dans le paragraphe suivant le mode de transmission par variable.

II. Mode de transmission par variable


Activit 2 Soit T un tableau de n caractres (2n20). On se propose d'crire un programme qui saisit n et T, ensuite il appelle une procdure Occurrence qui cherche le nombre de caractres alphabtiques et le nombre de chiffres dans le tableau T. Analyse Nom = Cherche_nbr S
3 2 1 4

L.D.E.
Rsultat = Ecrire ("Alphabtique = ", Nbr_A, "Chiffre = " , Nbr_C) (Nbr_A, Nbr_C) = PROC Occurence ( T, Nbr_A, Nbr_C ) T = [ n = Donne("Entrer le nombre d'lments") ] Pour i de 1 n Faire T[i] = Donne(" Entrer un lment") FinPour Fin cherche_nbr

O.U.
Nbr_A Nbr_C T n i

Tableau de dclaration des objets Objet Type/nature


Nbr_A Nbr_C T n i Entier Entier Tableau Entier Entier

Rle
Paramtre effectif rsultat, nombre de caractres alphabtiques Paramtre effectif rsultat, nombre de chiffres Tableau des caractres Nombre d'lments de T Compteur

175

Les sous-programmes Algorithme 0) Dbut Cherche_nbr 1) Ecrire("Entrer le nombre d'lments"), (Lire (n) Pour i de 1 n Faire Ecrire(" Entrer un lment"), Lire ( T(i) ) FinPour 2) PROC Occurence ( T, Nbr_A, Nbr_C ) 3) Ecrire ("Alphabtique = ", Nbr_A, "Consonne = " , Nbr_C) 4) Fin Chercher_nbr. Analyse de la procdure Concours DEF PROC Occurrence (TE : tableau de n caractres, VAR A : Entier, VAR C : Entier ) S
1

L.D.E.
Rsultat = OCCURRENCE OCCURRENCE = A 0 POUR i de 1 n Faire C0 [ ] Si MAJUS(TE[ i ]) Dans ["A".."Z"] Alors A A +1 Sinon si (TE[ i ]) Dans ["1".."9"] Alors C C +1 FinSi Fin POUR Fin Occurrence

O.U.
A C i TE n

Remarque : Dans l'analyse de la procdure Occurrence, l'objet utilis n est un objet global. Comme nous le verrons par la suite, n sera dclar dans le programme appelant qui est dans ce cas le programme principal. Tableau de dclaration des objets Objet
i

Type/nature
Entier 176

Rle
Compteur

Les sous-programmes Algorithme 0) DEFPROC Occurrence ( TE : tableau de n entiers, VAR A : entier, VAR C : entier ) 1) A 0 C0 POUR I de 1 n Faire Si MAJUS(TE[ i ]) Dans ["A".."Z"] Alors A A +1 Sinon si (TE[ i ]) Dans ["1".."9"] Alors C C +1 FinSi Fin POUR 2) Fin Occurrence Traduction en Pascal PROGRAM Cherche_nbr; USES WINCRT ; TYPE Typtab=ARRAY [1..30] OF CHAR ; VAR T : Typtab ; n,i,Nbr_A,Nbr_C : INTEGER; PROCEDURE Occurrence(TE:Typtab; VAR A:INTEGER; VAR C:INTEGER); BEGIN A := 0 ; C := 0 ; FOR i := 1 TO n DO BEGIN IF UPCASE(TE[i]) IN ['A'..'Z'] THEN A := A +1 ELSE IF (TE[i]) IN ['1'..'9'] THEN C := C +1; END; END ;

177

Les sous-programmes BEGIN A := 0 ; C := 0 ; FOR i := 1 TO n DO BEGIN IF UPCASE(TE[i]) IN ['A'..'Z'] THEN A := A +1 ELSE IF (TE[i]) IN ['1'..'9'] THEN C := C +1; END; END ; BEGIN WRITELN('Entrer le nombre d''lments du tableau');READLN( n ); FOR i := 1 TO n DO BEGIN WRITE('Entrer un lment: '); READLN (T[i]); END; Occurrence ( T,Nbr_A,Nbr_C); WRITELN ('Nombre de caractres alphabtiques est: ', Nbr_A); WRITELN('Nombre de Chiffres est : ' , Nbr_C); END. Un cas d'excution

178

Les sous-programmes Dans l'activit 2, l'appel est ralis par l'instruction : PROC Occurrence ( T, Nbr_A, Nbr_C ). L'entte de la procdure Occurrence est DEF PROC Occurrence ( TE : tableau d'entiers d'indices entier , VAR A : entier , VAR C : entier ). Appelant T Appel

PROC Occurrence ( T, Nbr_A, Nbr_C )

A, C

DEF PROC Occurrence ( TE : tableau d'entiers d'indices entier , VAR A : entier , VAR C : entier)

TE est le paramtre formel avec un mode de transmission par valeur. A et C sont des paramtres formels avec un mode de transmission par variable. C'est ce que nous allons dfinir dans ce qui suit. Le paramtre effectif est une variable qui peut tre une variable simple ou structure (tableau), ou lment d'un tableau. Dans l'entte de la procdure, on doit faire prcder les paramtres formels transmis par variable par le mot-cl VAR. S'ils sont d'un mme type, on pourra les regrouper aprs un mme VAR. Les paramtres transmis par variable font communiquer l'information dans les deux sens : A l'appel, l'appelant transmet une ou plusieurs valeurs l'appel ; de mme l'appel rend un ou plusieurs rsultats l'appelant au moment du retour aprs activation de la procdure. Il faut donc utiliser ce mode de transmission par variable chaque fois que le paramtre reprsente un rsultat calcul par le sous-programme appel et transmis au sousprogramme (ou programme) appelant. Dans ce mode de passage, le paramtre effectif et le paramtre formel correspondant deviennent synonymes et ont la mme adresse (la mme rfrence en mmoire). Cela implique que toute modification d'un paramtre formel dans le sous-programme appel (dans la partie instruction) entrane au moment du retour l'appelant une modification de la valeur du paramtre effectif correspondant. Dans l'instruction d'appel PROC Occurrence ( T, Nbr_A, Nbr_C) de l'exemple prcdent, les variables Nbr_A et Nbr_C sont des paramtres effectifs recevant en retour un rsultat de la part de la procdure Occurrence au retour une fois son activation termine. Le mode de transmission est alors ncessairement par variable. Dans l'entte de la procdure Occurrence, les paramtres formels correspondant A et C sont prcds par le mot-cl VAR .
179

Les sous-programmes Activit 3 Ecrire un programme qui rpte n fois la saisie de deux valeurs x et y, affiche ces valeurs puis appelle un sous-programme permettant de permuter ces deux valeurs et il affiche chaque fois les deux valeurs permutes. Analyse Nom : Lire_permut S
1

L.D.E.
Rsultat = Lire_permuter Lire_ permuter =[n = Donne("Nombre de couples saisir >=1")] Pour i de 1 n Faire x =Donne("Entrer la premire valeur") y =Donne("Entrer la deuxime valeur") Ecrire ("x =", x, "y =", y ) PROC Permut ( x, y ) crire ("x =", x, "y =", y ) FinPour Fin Lire_permut

O.U.
n i x y

Tableau de dclaration des objets Objet


n i x y

Type/nature
Entier Entier Rel Rel

Rle
Nombre de couples saisir >=1 Compteur 1re valeur 2me valeur

Algorithme 0) Dbut Lire_Permut 1) Ecrire("Nombre de couples saisir >=1"), Lire (n) Pour i de 1 n Faire Ecrire("Entrer la premire valeur"), Lire (x) Ecrire("Entrer la deuxime valeur "), Lire (y) Ecrire ("x =", x, "y =", y ) PROC Permut (x, y) Ecrire ("x =", x, "y =", y ) FinPour 2) Fin Lire_Permut
180

Les sous-programmes Analyse de la procdure Permut DEF PROC Permut ( VAR a, b : rel ) S
3 1 2 4 Rsultat = ( a, b ) a aux aux b ba Fin Permut

L.D.E.

O.U.
a b aux

Tableau des dclarations des objets locaux Objet


aux

Type/nature
Rel

Rle
Variable intermdiaire

Algorithme 0) DEF PROC Permut ( VAR a, b : Rel ) 1) aux b 2) b a 3) a aux 4) Fin Permut Appelant x, y PROC Permut ( x, y ) a, b DEF PROC Permut ( VAR a,b : Rel) Appel

Remarque : Dans cet exemple, les paramtres formels a et b sont initialiss au niveau de l'appel par les valeurs de x et de y puis une fois les variables a et b permutes, au retour, leurs valeurs sont communiques en tant que rsultats l'appelant. Les variables x et y reoivent alors les nouvelles valeurs rsultats. Ces paramtres sont des paramtres Donnes / Rsultats. Cet exemple nous montre l'intrt de l'utilisation du mode de passage par variable.

181

Les sous-programmes Traduction en Pascal PROGRAM LIRE_PERMUT ; USES WINCRT; VAR n,i : INTEGER ; x,y : REAL ; PROCEDURE Permute( VAR a, b : REAL ); VAR aux : REAL ; BEGIN aux := b ; b := a ; a := aux ; END ; BEGIN WRITE('Nombre de couples saisir >=1 : ') ; READLN(n) ; FOR i := 1 TO n DO BEGIN WRITE('Entrer READLN (x); WRITE('Entrer READLN (y); WRITELN ('x = Permute (x, y WRITELN ('x = END ; END. Un cas d'excution la premire valeur '); la deuxime valeur '); ', x:5 :2, ' ) ; ', x:5 :2, ' y = ', y:5 :2); y = ', y:5 :2);

182

Les sous-programmes Remarque : Il est possible de dclarer un sous-programme sans paramtre. La communication avec l'appelant pourrait se produire grce aux ressources communes (objets globaux) partages entre l'appel et l'appelant. Exemple de procdure sans paramtre : PROGRAM Affiche ; USES WINCRT ; PROCEDURE Affiche_message; VAR message: STRING; BEGIN WRITELN('Procdure sans paramtre '); WRITELN('Cette procdure a pour rle d''afficher un message saisi '); WRITELN(' l''cran partir de la position x=10, y=10'); WRITELN('Donner votre message : ') ; READLN(message) ; CLRSCR ; GOTOXY(10,10) ; WRITELN(message) ; END. BEGIN Affiche_message; END. Un cas d'excution

183

Les sous-programmes

III. Problme corrig


Soit T un tableau de n caractres numriques avec n=20. crire un programme permettant de crypter les donnes figurant dans le tableau T comme suit : 1. Convertir les lments de T compris entre deux positions P1 et P2 en leurs reprsentations en code ASCII. 2. Permuter les chiffres des units avec ceux des dizaines du code ASCII puis dterminer le caractre correspondant ce nouveau code ASCII. 3. Faites une permutation de faon circulaire vers la droite d'ordre 1 sur le contenu du tableau T. On donne 1 P1< P2 20. Analyse DEF PROC CRYPT_T( VAR a, b : rel ) L.D.E.
Rsultat = T PROC AfficherT(n,T) PROC Permut_circulaire(n,T) PROC Crypt(T,P1,P2) PROC Saisir_pos(P1,P2) PROC AfficherT(n,T) PROC RemplirT(n,T) Fin CRYPT_T

S
6 5 4 3 2 1 7

O.U.
n T P1 P2 AfficherT Permut_circulaire Saisir_pos RemplirT

Tableau de dclaration des objets Objet


n T P1 P2 AfficherT Permut_circulaire Saisir_pos RemplirT

Type/nature
Entier Tab Entier Entier Procdure Procdure Procdure Procdure

Rle
Taille du tableau Tableau de n caractres Premire position du tableau Deuxime position du tableau Affiche le contenu du tableau Permute de faon circulaire le tableau Saisit de deux positions P1 et P2 Remplissage du tableau

184

Les sous-programmes DEF PROC RemplirT(var n:Entier ; var A:TAB) S


2

L.D.E.
Rsultat = A A = [] Pour I de 1 n Faire Rpter Ecrire(" Entrer lment ",I, " : ") Lire(A[I]) Jusqu' ORD(A[i]) DANS [48..57] FinPour n = [] Rpter Ecrire(" Entrer la taille du tableau: ") Lire(n) Jusqu' n=20 Fin RemplirT

O.U.
a b aux

Objet
I

Type/nature
Entier

Rle
Compteur

DEF PROC Saisir_pos(var P1,P2:Entier) S L.D.E.


1 Rsultat = (P1,P2) (P1,P2) = [] Rpter Ecrire (" Entrer la position P1 : ") Lire (P1) Ecrire (" Entrer la position P2 : ") Lire (P2) Jusqu' ((P1>=1)ET(P1<P2)ET(P2<=n)) Fin Saisir_pos

O.U.

DEF PROC Crypt(var T: TAB ; P1,P2:Entier) S L.D.E.


1 Rsultat = T T = [] Pour I de P1 P2 Rpter ORD1 ORD(T[I]) ORD2 FN Inverse (ORD1) T[I] CHR(ORD2) FinPour Fin Crypt 185

O.U.
ORD1 ORD2 Inverse

Les sous-programmes Objet


ORD1 ORD2 Inverse

Type/nature
Entier Entier Fonction

Rle
Contient l'ordre du caractre Contient l'ordre du caractre invers Inverse un chiffre

DEF FN Inverse (X:Entier):Entier S L.D.E.


4 3 2 1 5 Rsultat = Inverse Inverse:=U*10+D U:=X MOD 10 D:=X DIV 10 Fin Inverse

O.U.
U D

Objet
U D

Type/nature
Entier Entier

Rle
Contient le chiffre d'unit Contient le chiffre de dizaine

DEF PROC Permut_circulaire(n:Entier ; var T:TAB) S L.D.E.


2 1 Rsultat = T T[1] Temp T = [Temp T[n]]

O.U.
Temp i

Pour I de n 2 (pas = -1) Faire T[i] T[i-1] FinPour Fin Permut_circulaire

Objet
Temp i

Type/nature
Entier Entier

Rle
Sauvegarde d'un lment du tableau Compteur

DEF PROC AfficherT(n:Entier ; T:TAB) S L.D.E.


1 2 Rsultat = T T = [ ] Pour i de 1 n Rpter Ecrire(T[i]," ") Fin Pour AfficherT

O.U.
i

Objet
i

Type/nature
Entier 186

Rle
Compteur

Les sous-programmes Algorithmes du programme principal 0)Dbut CRYPT_T 1)PROC RemplirT(n,t) 2)PROC AfficherT(n,T) 3)PROC Saisir_pos(P1,P2) 4)PROC Crypt(P1,P2,T) 5)PROC Permut_circulaire(T,n) 6)PROC AfficherT(n,T) 7)Fin CRYPT_T Algorithmes du sous programme RemplirT 0)DEFPROC RemplirT(var n:Entier ; var A:TAB) 1)Rpter Ecrire(" Entrer la taille du tableau: ") Lire(n) Jusqu' n=20 2)Pour i de 1 n Rpter Rpter Ecrire(" Entrer lment ",i, " : ") Lire(A[I]) Jusqu' ORD(A[i]) DANS [48..57] FinPour 3)Fin RemplirT Algorithmes du sous programme Saisir_pos 0)DEFPROC Saisir_pos(var P1,P2:Entier) 1)Rpter Ecrire (" Entrer la position P1 : ") Lire (P1) Ecrire (" Entrer la position P2 : ") Lire (P2) Jusqu' (P1>=1)AND(P1<P2)AND(P2<=n) 2)Fin Saisir_pos

187

Les sous-programmes Algorithmes du sous programme Crypt 0)DEFPROC Crypt(var T: TAB ; P1,P2:Entier) 1)Pour i de P1 p2 Rpter ORD1 ORD(T[i]) ORD2 FN Inverse (ORD1) T[i] CHR(ORD2) FinPour 2)Fin Crypt Algorithmes du sous programme Inverse 0)DEFFN Inverse (X:Entier):Entier 1)D X DIV 10 2)U X MOD 10 3)Inverse U*10+D 4)Fin Inverse Algorithmes du sous programme Permut_circulaire 0)DEFPROC Permut_circulaire(n:Entier ; var T:TAB) 1)Temp T[n]; FOR I n DOWNTO 2 Rpter T[i] T[i-1] FinPour 2)T[1] temp 3)Fin Permut_circulaire Algorithmes du sous programme AfficherT 0)DEFPROC AfficherT(n:Entier ; T:TAB) 1)Pour i de 1 n Rpter Ecrire(T[i]," ") 2)Fin AfficherT Traduction en Pascal PROGRAM CRYPT_T; USES WINCRT; TYPE TAB = ARRAY [1..50] OF CHAR;
188

Les sous-programmes VAR T: TAB; P1,P2,n: INTEGER; i: INTEGER; PROCEDURE RemplirT(var n:INTEGER ; var A:TAB); BEGIN REPEAT WRITE('Entrer la taille du tableau: '); READLN(n); UNTIL n=20; FOR i := 1 TO n DO BEGIN REPEAT WRITE ('Entrer lment ',i,' : '); READLN (A[i]); UNTIL ORD(A[i]) IN [48..57]; END; END; PROCEDURE Saisir_pos(var P1,P2:INTEGER); BEGIN REPEAT WRITE ('Entrer la position P1 : '); READLN (P1); WRITE ('Entrer la position P2 : '); READLN (P2); UNTIL ((P1>=1)AND(P1<P2)AND(P2<=n)); END; PROCEDURE Crypt(var T: TAB;P1,P2:INTEGER); VAR ORD1,ORD2,I: INTEGER; FUNCTION Inverse (X:INTEGER):INTEGER; VAR D,U:INTEGER; BEGIN D:=X DIV 10; U:=X MOD 10; Inverse:=U*10+D; END;
189

Les sous-programmes BEGIN FOR i := P1 TO p2 DO BEGIN ORD1:=ORD(T[i]); ORD2:=Inverse (ORD1); T[i]:=CHR(ORD2); END; END; PROCEDURE Permut_circulaire(n:INTEGER ; var T:TAB ); VAR i:INTEGER; temp:CHAR; BEGIN temp:=T[n]; FOR i := n DOWNTO 2 DO T[i]:=T[i-1]; T[1]:=temp; END; PROCEDURE AfficherT(n:INTEGER ; T:TAB); BEGIN FOR i := 1 TO n DO WRITE (T[i],' '); WRITELN; END; BEGIN RemplirT(n,T); AfficherT(n,T); Saisir_pos(P1,P2); Crypt(T,P1,P2); Permut_circulaire(n,T); AfficherT(n,T); END.

190

Les sous-programmes Un cas d'excution

Retenons
Dans le cas o une procdure retourne un rsultat, vous devez choisir le mode de transmission par variable pour le paramtre rsultat en question. Vous devez faire prcder le paramtre formel par le mot cl VAR.

191

Les sous-programmes

Exercices
Exercice 1 On veut crire un programme qui dtermine le nombre de mots dans une phrase. La phrase commence obligatoirement par une lettre. Devant chaque mot d'une phrase il y a un caractre blanc et les signes de ponctuation sont colles aux mots les prcdant. Questions : 1. Ecrire les modules effectuant chacun les traitements dcrits ci-dessous. Ecrire une procdure nomme LECTURE qui lit une phrase. Ecrire une procdure nomme COMPTE qui compte et affiche le nombre de mots dans la phrase. 2. Ecrire l'algorithme du programme principal . 3. Traduire cet algorithme en Pascal. Exercice 2 crire un procdure intitul COMB_NBRE qui permet d'afficher toutes les combinaisons d'un nombre qui s'crit sous la forme de 3 chiffres. Questions : 1. Saisir n dans le programme principal 2. Appeler la procdure COMB_NBRE permettant de chercher et d'afficher les diffrentes combinaisons. Exercice 3 On veut crire un programme qui fait l'inversion des lments d'un vecteur T N entiers ( N est compris entre 1 et 100). Exemple : Donne -10 15 12 6 -4 5 18 Rsultat 18 5 -4 6 12 15 -10 Questions : 1. Analyser chacun de ces modules dcrits ci-dessous. Ecrire la procdure LECTURE (VAR N ; VAR T) qui range N entiers dans un tableau T. Ecrire la procdure INVERSE ( VAR X , Y ) qui permet de permuter deux entiers X et Y donns. Ecrire la procdure INVERSE_TOUT ( VAR T ) qui inverse tous les lments du vecteur T en utilisant la procdure INVERSE. Traduire cet algorithme en Pascal. Ecrire la procdure RESULTAT ( T ) qui affiche le vecteur T rsultat. Ecrire l'analyse du programme principal. 2. En dduire les algorithmes relatifs chacun de ces modules ainsi que celui du programme principal. 3. Traduire ces algorithmes en Pascal. Exercice 4 Un nombre premier est un entier divisible uniquement par 1 et par lui mme. crire un programme permettant d'afficher les n nombres premiers (n est un entier strictement positif donn).
192

Les sous-programmes Exercice 5 T tant un tableau d'entiers contenant au maximum 20 lments. crire un programme principal qui permet de : saisir N lments dans T Saisir la valeur de l'lment x insrer Saisir la position d'insertion p dans le tableau d'appeler une procdure permettant d'insrer l'lment x la position p dans le tableau. Exercice 6 Soit la procdure P : 0) DEF PROC P(x:entier ; VAR F:entier) 1) x x + 3 2) F x 3) Fin P Questions : 1. Quel est le mode de passage du paramtre x ? 2. Quel est le mode de passage du paramtre F ? 3. Quels sont les avantages de proposer les deux types de passage de paramtre par adresse et par valeur au sein d'un mme langage. Exercice 7 Soit le programme Pascal suivant qui comporte plusieurs sous programmes de diffrents niveaux d'imbrications. program X ; var A; procedure Y ; Question : var B ; Complter le tableau ci-dessous pour dterminer procedure Y1 ; la nature (variable ou procdure) et les niveaux var C ; begin des diffrents objets utiliss. C := B + A Objet Nature NIVEAU end ; C procedure Y2 ; var B ; Y1 begin B Y1 end ; Y begin A Y2 Y2 end ; X begin Y end .

193

Les sous-programmes Exercice 8 Soit l'algorithme suivant : 0) 1) 2) 3) 4) DEF PROC SomCar (X1 : entier, X2 : entier, S : entier) X1 X1 * X1 X2 X2 * X2 S X1 + X2 Fin SomCar

0) Dbut Programme principal 1) X 3 2)Y 4 3) Z 0 4) SomCar(X, Y, Z) 5) Ecrire (X,Y, Z ) Fin du programme principal Questions : 1. Trouver le rsultat fourni par l'algorithme ci-dessus 2. Que faut-il ajouter la procdure SomCar pour avoir un rsultat correct ? 3. Remplacer dans ce programme la procdure par une fonction et trouver le rsultat fourni par l'algorithme. Avec une fonction, ce programme devient : 0) DEF FN SomCar ( ) : entier 1) X1 2) X2 3) X1 + X2 4) Fin SomCar 0) Dbut Programme principal 1) X 3 2) Y 4 3) SomCar(X, Y) 3) Ecrire (X,Y, Z ) 4) Fin du programme principal Exercice 9 1. crire une procdure qui calcule la somme de deux polynmes de degrs respectifs m et n. 2. crire une procdure permettant de calculer du produit de deux polynmes de degrs respectifs m et n. 3. crire une procdure permettant de calculer le produit (P1 + P2 )*P3. o P1 , P2 et P3 sont des polynmes de degrs respectifs m, n et p. Exercice 10 crire un programme appelant une procdure permettant de calculer le point d'intersection de deux droites donnes par leurs quations y = a1x + b1 et y = a2x + b2. Avant d'appeler cette procdure il faut bien sr vrifier que a1 a2.
194

CHAPITRE

Chapitre 6
Les traitements avancs

Objectifs :
Utiliser l'analyse modulaire pour rsoudre des problmes de tri et de recherche.

Plan du chapitre :
Leon 1 : Mthodes de tri Leon 2 : Recherche d'un lment dans un tableau

Les traitements avancs

Leon

Mthodes de tri
Objectifs spcifiques :
Connatre les diffrentes mthodes de tri. Utiliser les diffrentes mthodes de tri pour rsoudre des problmes. Prsenter des solutions sous forme d'un algorithme puis d'un programme.

Plan de la leon :
I. Introduction II. Mthodes de tri II.1. Le tri par slection II.2. Le tri bulles II.3. Le tri par insertion Retenons Exercices

196

Les traitements avancs

Leon

Mthodes de tri
Une place pour chaque chose et chaque chose sa place.
Samuel SMILES

I. Introduction
Le problme de tri est un classique de l'informatique ; les mthodes de tri sont utilises dans diffrentes applications. Par exemple : - classer les lves par ordre alphabtique ou par ordre de mrite - mettre en ordre un dictionnaire - trier l'index d'un livre - afficher une liste trie d'un correcteur d'orthographe - Dans cette leon, nous exposerons la problmatique du tri de squences de valeurs et nous nous limiterons l'tude de quelques mthodes de tri parmi les plus connus, notamment le tri par slection, le tri bulles et le tri par insertion. Pour chaque mthode de tri, nous prsentons : - le principe - l'analyse du problme, la dcomposition en modules, l'laboration des algorithmes et la traduction en Pascal. Activit 1 On se donne une suite de N nombres entiers, et on se propose de les trier par ordre croissant. Ainsi, pour N=9, la suite [17,2,9,8,2,10,12,22,8] deviendra [2,2,8,8,9,10,12,17,22] Dfinition

Un algorithme de tri est une suite finie d'instructions servant rordonner une squence d'lments suivant un critre fix priori. Ce critre est en fait une relation d'ordre total sur les lments trier. La conception d'un algorithme de tri dpend beaucoup plus du support matriel de la squence de valeurs trier. Celle-ci peut se trouver en mmoire centrale ou sur une mmoire secondaire.
197

Les traitements avancs Ces supports ont des caractristiques physiques assez diffrentes : Les mmoires centrales sont rapides (en nanosecondes) mais d'une taille limite (en mgaoctets). Les mmoires secondaires, par contre, sont lentes (en microsecondes) mais de grande taille (en gigaoctets). Par consquent, les algorithmes de tri vont devoir en tenir compte. Les algorithmes de tri que nous allons dfinir traitent des tableaux situs dans la mmoire centrale.

Remarques :

Il faut faire la distinction entre le tri d'un grand nombre d'lments et le tri de quelques lments.

On peut trier autres donnes que des entiers. Il suffit de disposer d'un domaine de
valeurs muni d'une relation d'ordre totale. On peut donc trier des caractres, des mots en ordre alphabtique...

II. Les mthodes de tri


Dans la suite de ce cours, on choisit de trier les squences par ordre croissant c'est-dire du plus petit au plus grand relativement un ordre total not .

II.1 Le tri par slection


II.1.1 Principe L'algorithme de tri le plus simple est le tri par slection. Il consiste trouver l'emplacement de l'lment le plus petit du tableau. Une fois cet emplacement trouv, on compare son contenu avec T[1] et s'ils sont diffrents, on permute l'lment de l'emplacement trouv par l'lment de la premire position T[1]. Aprs ce parcours le premier lment est bien plac. On recommence le mme procd pour le reste du tableau (T[2],..,T[N]), ainsi on recherche le plus petit lment de cette nouvelle partie du tableau et on l'change ventuellement avec T[2]. Et ainsi de suite ... jusqu' la dernire partie du tableau forme par les deux derniers lments (T[N-1], T[N]).

198

Les traitements avancs N.B. - La recherche du plus petit lment d'un tableau sera assure par une fonction renvoyant la position du minimum. Ce minimum est ventuellement rpt plusieurs fois dans T ; on dcidera de choisir le premier. - L'change de deux lments d'un tableau sera assure par une procdure de permutation. II.1.2 Rsolution du problme : tri par slection Soit trier un tableau T de n entiers initialement dans un ordre quelconque en ordre croissant en utilisant la mthode de tri par slection. Exemple : On considre le tableau T contenant les 10 lments suivants : T 17 1 5 2 9 3 8 4 5 5 10 6 12 7 22 8 8 9

re 1) - On se pointe la 1 case du tableau et on parcourt la totalit de T pour reprer l'indice du minimum c'est--dire l'entier 5, ce minimum est rpt plusieurs fois dans T, on dcidera de choisir le premier c'est--dire d'indice 2.

17 1

5 2

9 3

8 4

5 5

10 6

12 7

22 8

8 9

- On permute T[1] et ce minimum. - Aprs cette opration, on est sr que T[1] contient la plus petite valeur de T et est donc sa bonne place. T 5 1 17 2 9 3 8 4 5 5 10 6 12 7 22 8 8 9

2) - On cherche la valeur minimale dans (T[2], T[3],,T[N]) : cette valeur tant 5 et son indice est 5. - On permute T[2] et ce minimum.
Partie trie Partie non trie

5 1

5 2

9 3

8 4
199

17 5

10 6

12 7

22 8

8 9

Les traitements avancs 3) - On cherche la valeur minimale dans (T[3],,T[N]) : cette valeur tant 8, et son indice est 4. Ce minimum est rpt plusieurs fois dans T, on dcidera de choisir le premier. T 2 1 2 2 9 3 8 4 17 5 10 6 12 7 22 8 8 9

- On permute T[3] et ce minimum. T 2 1 2 2 8 3 9 4 17 5 10 6 12 7 22 8 8 9

4) - On cherche la valeur minimale dans (T[4],,T[N]) : cette valeur tant 8 et son indice est 9. T 2 1 2 2 8 3 9 4 17 5 10 6 12 7 22 8 8 9

- On permute T[4] et ce minimum. T 2 1 2 2 8 3 8 4 17 5 10 6 12 7 22 8 9 9

5) - On cherche la valeur minimale dans (T[5],,T[N]) : cette valeur tant 9 et son indice est 9. T 2 1 2 2 8 3 8 4 17 5 10 6 12 7 22 8 9 9

- On permute T[5] et ce minimum. T 2 1 2 2 8 3 8 4 9 5 10 6 12 7 22 8 17 9

6) - On cherche la valeur minimale dans (T[6],,T[N]) : cette valeur tant 10 et son indice est 6. T 2 1 2 2 8 3 8 4
200

9 5

10 6

12 7

22 8

17 9

Les traitements avancs - Puisque la valeur minimale correspond la premire case de la partie non trie du tableau T, l'lment reste dans la mme position. 7) - On cherche la valeur minimale dans (T[7],,T[N]) : cette valeur tant 12 et son indice est 7. T 2 1 2 2 8 3 8 4 9 5 10 6 12 7 22 8 17 9

- Puisque la valeur minimale correspond la premire case de la partie non trie du tableau T, l'lment reste dans la mme position. 8) - On cherche la valeur minimale dans (T[8],,T[N]) : cette valeur tant 17 et son indice est 9. T 2 1 2 2 8 3 8 4 9 5 10 6 12 7 22 8 17 9

- On permute T[9] et ce minimum. T 2 1 Rsultat : tableau tri T 2 1 Remarque : Il faut faire la distinction entre le tri d'un grand nombre d'lments et le tri de quelques lments. Analyse On choisira chercher la position du premier minimum quand il y en aura plusieurs occurrences. Le tableau T sera de type TAB. 2 2 8 3 8 4 9 5 10 6 12 7 17 8 22 9 2 2 8 3 8 4 9 5 10 6 12 7 17 8 22 9

201

Les traitements avancs DEF PROC tri_slection (n : Entier ; VAR T : TAB) L.D.E.
Rsultat = T_Tri T_Tri = [ ] Pour i de 1 n-1 Faire [ppm FN premposmin (T,n,i)] Si ( T[ppm] T[i] Alors PROC permut(T[ppm), T[i]) FinSi FinPour Fin tri_slction

S
1

O.U.
i ppm premposmin permut

Tableau de dclaration d'un nouveau type Type


TAB=Tableau de 20 entiers

Tableaux de dclaration des objets de la procdure tri_slection Objet


i ppm premposmin permut

Type/nature
Entier Entier Fonction entire Procdure

Rle
Compteur Contiendra la premire position du minimum Renvoie la premire position du minimum Permute le contenu de deux variables

S
2 1

DEF FN premposmin (A: TAB, n, m : Entier ;) : Entier L.D.E.


Rsultat = (premposmin posmin) posmin = [ posmin m] Pour j de m+1 n Faire [ ] Si A[posmin] > A[j] Alors posmin j FinSi FinPour Fin premposmin

O.U.
i ppm premposmin permut

Tableaux de dclaration des objets de la fonction premposmin Objet


posmin j

Type/nature
Entier Entier

Rle
Contient la position du minimum compteur

202

Les traitements avancs DEF PROC permut (VAR x, y : Entier) L.D.E.


Rsultat = (x, y) xy y aux aux x Fin permut

S
2 3 1 4

O.U.
aux

Tableaux de dclaration des objets de la procdure permut Objet


aux

Type/nature
Entier

Rle
Variable auxiliaire ncessaire la permutation

Algorithmes 0) DEF PROC tri_slection (n : Entier ; VAR T : TAB) 1) Pour i de 1 n-1 rpter [ppm FN premposmin (T, n, i)] Si T[ppm] T[i] Alors PROC permut ( T[ppm], T[i] ) FinSi FinPour 2) Fin PROC tri_slection

0) DEF FN premposmin (A: TAB, n , m : Entier) : Entier 1) [ posmin m] Pour j de m+1 n rpter Si A[posmin] > A[j] Alors posmin j FinSi FinPour 2) premposmin posmin 3) Fin premposmin

0) DEF PROC permut ( VAR x, y : Entier) 1) aux x 2) x y 3) y aux 4) Fin permut

203

Les traitements avancs Traduction en Pascal On suppose que T est un tableau de type TAB. PROCEDURE tri_slection (n : INTEGER ; VAR T : TAB); VAR ppm,i :INTEGER; PROCEDURE permut(VAR x, y : INTEGER); VAR aux : INTEGER; BEGIN aux := x; x := y; y := aux; END; FUNCTION premposmin (A : TAB; n, m : INTEGER):INTEGER; VAR posmin, j :INTEGER; BEGIN posmin := m; FOR j:=m+1 TO n DO BEGIN IF A[posmin] > A[j] THEN posmin := j; END; premposmin := posmin ; END; BEGIN FOR i:=1 TO n-1 DO BEGIN ppm := premposmin (T, n, i) ; IF T[ppm]<>T[i] THEN permut(T[ppm], T[i]); END; END; Remarque : Il est facile de compter le nombre d'oprations ncessaires pour trier tout le tableau T. A chaque itration, on dmarre l'lment T[i] et on le compare successivement T[i+1], T[i+2], ..., T[n]. On fait donc n-i comparaisons. On commence avec i=1et on finit avec i=n-1. Donc, on fait (n-1) + (n-2) + + 2 + 1=n(n-1)/2 comparaisons, et au maximum n-1 permutations.
204

Les traitements avancs

II.2 Le tri bulles


II.2.1 Principe Le tri bulles consiste faire remonter le plus grand lment du tableau en comparant les lments successifs. C'est--dire qu'on va comparer le 1er et le 2ime lment du tableau, s'ils ne sont pas dans le bon ordre, on les permute, on passe ensuite au 2ime et 3ime, puis au 3ime et 4ime et ainsi de suite jusqu'au (n-1)ime et le nime lments. A la fin du premier parcours, on aura pousser le plus grand lment du tableau vers sa place finale qui est le nime lment du tableau. On recommence cette opration en parcourant de 1 n-1 puis de 1 n-2 et ainsi de suite. On arrte quand la partie trier est rduite un seul lment ou que le tableau est devenu tri et dans ce cas on doit avoir un indicateur qui donne cette information. En effet, l'ide est de vrifier si lors du dernier parcours aucune permutation n'a t faite ce qui signifie que le tableau est devenu tri. II.2.2 Rsolution du problme : tri bulles Soit trier un tableau T de n entiers par ordre croissant en utilisant la mthode de tri bulles. Exemple On considre le tableau T contenant les 5 lments suivants : T 3 1 1 2 9 3 0 4 3 5

1) - On se pointe la 1re case du tableau et on compare T[1] et T[2]. T 3 1 - Puisque 3 >1, on les permute. T 1 1 3 2 9 3 0 4 3 5 1 2 9 3 0 4 3 5

2) On compare T[2] et T[3]. Puisque ils sont dans le bon ordre on ne fait rien. T 1 1 3 2
205

9 3

0 4

3 5

Les traitements avancs 3) - On compare T[3] et T[4]. T 1 3 2 3 2 9 3 0 3 0 4 9 4 3 5 3 5

1 - Puisque 9>0, on les permute. T 4) - On compare T[4] et T[5]. T 1 1 1

3 2 1 2

0 3 3 3

9 4 3 4

3 5 9 5

1 - Puisque 9>3, on les permute. T 0 1

On a parcouru les lments (T[1],T[2], T[n]) en permutant toute paire d'lments conscutifs (T[j-1], T[j]) non ordonns. Ainsi aprs un parcours, l'lment maximum 9 se retrouve en T[n]. En effet au fur et mesure des changes, la mthode fait avancer le plus grand lment rencontr. A la fin de la premire boucle, T[n] contient le plus grand lment du vecteur et cette nme composante ne doit plus tre prise en compte dans la suite du tri puisqu'elle est sa bonne place. Il suffit de recommencer ensuite le mme processus avec les lments de T allant de la premire composante n-1, et ainsi de suite on recommence avec les lments (T[1],T[2], T[n-2]) jusqu' puisement de tous les sous tableaux. Analyse DEF PROC tri_bulles (n : Entier ; VAR T : TAB) L.D.E.
Rsultat = T_Tri Tri = [ ] Rpter [Echange faux] Pour i de 1 n-1 faire [ ] Si (T[i]>T[i+1]) alors PROC Permut(T[i], T[i+1]) PROC Echange vrai Fin SI Fin Pour n n-1 Jusqu' (n=1) ou non (Echange) Fin tri_bulles 206

S
1

O.U.
Echange i Permut

Les traitements avancs Tableau de dclaration d'un nouveau type Type


TAB=Tableau de 20 entiers

Tableau de dclaration des objets de la procdure tri_bulles Objet


Echange i T permut

Type/nature
Boulen Entier TAB Procdure

Rle
Reoit la valeur vrai si une permutation a u lieu Compteur Tableau d'entiers Permute le contenu de deux variables

S
2 3 1 4

DEF PROC permut (VAR x, y : Entier) L.D.E.


Rsultat = (x, y) xy y aux aux x Fin permut

O.U.
aux

Tableau de dclaration des objets de la procdure permut Objet


aux

Type/nature
Entier

Rle
Variable auxiliaire ncessaire la permutation

Algorithmes 0) DEF PROC tri_bulles (n : Entier ; VAR T : TAB) 1) Rpter Echange faux Pour i de 1 n-1 faire Si (T[i]>T[i+1]) Alors PROC Permut(T[i], T[i+1]) Echange vrai Fin SI Fin Pour n n-1 Jusqu' (n=1) ou non (Echange) 2) Fin PROC tri_bulles

207

Les traitements avancs 0) DEF PROC permut ( VAR x, y : Entier) 1) aux x 2) x y 3) y aux 4) Fin permut Traduction en Pascal Le programme pascal ci-dessous comporte une procdure remplissage et une procdure d'affichage permettant de mettre en uvre la procdure du tri bulles. PROGRAM TRI_A_BULLES; USES WINCRT; TYPE TAB = ARRAY [1..50] OF INTEGER; VAR T: TAB; n: INTEGER; i: INTEGER; PROCEDURE RemplirT(var n:INTEGER ; var T:TAB); BEGIN WRITE('Entrer la taille du tableau : '); READLN(n); FOR i := 1 TO n DO BEGIN WRITE('Entrer lment ',i,' : '); READLN (T[i]); END; END; PROCEDURE tri_bulles (n:INTEGER ; var T: TAB); VAR i: INTEGER; Echange: BOOLEAN; PROCEDURE Permut(var X,Y:INTEGER); VAR TEMP:INTEGER; BEGIN TEMP := x; x := y; y := TEMP; END;
208

Les traitements avancs BEGIN REPEAT Echange:=false; FOR i := 1 TO n-1 DO BEGIN IF T[i] > T[i+1] THEN BEGIN Permut(T[i],T[i+1]); Echange:= true; END; END; n := n-1 ; UNTIL (n=1) OR NOT(Echange); END; PROCEDURE AfficherT(n:INTEGER ; T:TAB); BEGIN WRITELN('Rsultat du programme TRI_A_BULLES :'); FOR i := 1 TO n DO WRITELN('T[', i, ']: ', T[i]) END; BEGIN RemplirT(n,T); TRI_Bulles(n,T); AfficherT(n,T); END. Un cas d'excution

Remarque : Dans le pire des cas le tri bulles fait (n-1)+(n-2)++2+1 comparaisons et autant de permutations.
209

Les traitements avancs

II.3 Le tri par insertion


II.3.1 Principe Le tri par insertion consiste chercher la position du ime lment dans la partie du tableau commenant de 1 i sachant que les i-1 premiers lments sont tris. Si cette position est i, l'lment est donc sa bonne place, sinon, supposons que cette position est j. Ce j est forcment entre 1 et i-1. On dcale d'un pas vers l'avant ( droite) tous les lments de j i-1 puis on insre l'lment d'indice i la position j. On commence ce procd partir du 2me lment i=2. Cette mthode ressemble troitement au rangement d'une main de cartes par un joueur de belotte. II.3.2 Rsolution du problme : tri par insertion Soit trier un tableau T de 5 entiers en ordre croissant en utilisant la mthode de tri par insertion. Pr-analyse On considre le tableau T contenant les 5 lments suivants : T 3 1 1 2 9 3 0 4 3 5

Au dpart, on considre que la partie trie contient le seul premier lment qui vaut 3, le reste formant la partie non trie. Nous commenons donc par le deuxime lment du tableau savoir l'lment contenant 1 et d'indice 2. 1) On insre l'lment n2 dans la premire partie du tableau sa place.
lment insrer

3 1

1 2

9 3

0 4

3 5
Partie non trie

Partie trie

- On affecte la variable auxiliaire TEMP la valeur de l'lment d'indice 2 - On dcale d'une case droite l'lment d'indice 1 - Affecter la dernire case dcale la valeur de TEMP T 1 1 3 2 9 3 0 4 3 5

210

Les traitements avancs 2) - On insre l'lment n3 dans la premire partie du tableau sa place. - Puisque 9>3, donc les trois premiers lments sont dj en ordre. T 1 1 3 2 9 3 0 4 3 5

3) - On insre l'lment n4 dans la premire partie du tableau sa place. T 1 1 3 2 9 3 0 4 3 5

- On affecte TEMP la valeur de l'lment d'indice 4. - Pour insrer l'lment n 4, nous allons parcourir la partie trie de la droite vers la gauche en dcalant d'une case droite l'lment n 3, puis l'lment n 2 et ainsi de suite jusqu' avoir un lment ayant une valeur infrieure celle de l'lment insrer. - Affecter la dernire case dcale la valeur de TEMP. T 0 1 1 2 3 3 9 4 3 5

4) - On insre l'lment n5 dans la premire partie du tableau sa bonne place. T 0 1 1 2 3 3 9 4 3 5

- On affecte TEMP la valeur de l'lment d'indice 5. - On dcale d'une case droite l'lment n4, jusqu' avoir un lment infrieur 3. - Affecter la dernire case dcale la valeur de TEMP. Rsultat : tableau tri. T 0 1 Analyse L'analyse ci-dessous comporte une procdure Decaler_d et une procdure Inserer permettant de mettre en uvre la procdure du tri par insertion. 1 2 3 3 3 4 9 5

211

Les traitements avancs

S
1

DEF PROC Tri_insertion (n : Entier ; VAR T : TAB) L.D.E.


Rsultat = T_tri T_tri = [ ] Pour i de 2 n faire v T[i] ji PROC Decaler_d(T,j,v) PROC Inserer(T,j,v) Fin Pour Fin Tri_insertion

O.U.
i v j Decaler_d Inserer

Tableau de dclaration d'un nouveau type Type


TAB=Tableau de 20 entiers

Tableau de dclaration des objets de la procdure Tri_insertion Objet


i v j Decaler_d Inserer

Type/nature
Entier Entier Entier Procdure Procdure

Rle
Compteur lment insrer Position de l'lment insrer Dcale les lments d'un tableau vers la droite Insre un lment dans un tableau dans une position bien dfinie

S
1

DEF PROC Decaler_d (VAR T:TAB; VAR p:Entier ; e:Entier) L.D.E.


Rsultat = T T=[ ]Tant que (T[p-1] > e) Rpter T[p] T[p-1] p p-1 Fin Tantque Fin Decaler_d

O.U.

S
1 2

DEF PROC Inserer (VAR T:TAB; p:Entier ; e:Entier) L.D.E.


Rsultat = T T[p] := e Fin Inserer 212

O.U.

Les traitements avancs Algorithmes 0) DEF PROC Tri_insertion (n :Entier ; VAR T : TAB) 1) Pour i de 2 n faire v T[i] ji PROC Decaler_d(T,j,v) PROC Inserer(T,j,v) Fin Pour 2) Fin PROC Tri_insertion 0) DEF PROC Decaler_d (var T:TAB; var p:Entier ; e:Entier) 1) Tant que T[p-1] > e Rpter T[p] T[p-1] p p-1 Fin tantque 2) Fin PROC Decaler_d 0) DEF PROC Inserer (var T:TAB; p:Entier ; e:Entier) 1) T[p] e; 2) Fin PROC Inserer II.3.3 Traduction en Turbo Pascal PROCEDURE Tri_insertion(n:INTEGER ; var T: TAB); VAR i,j,v: INTEGER; PROCEDURE Decaler_d(var T:TAB; var p:INTEGER;e:INTEGER); BEGIN WHILE T[p-1] > e DO BEGIN T[p] := T[p-1]; p:= p-1 END; END; PROCEDURE Inserer(var T:TAB; p:INTEGER; e:INTEGER); BEGIN Remarque : T[p] := e; Dans le pire des cas le tri par insertion END; fait 1+2++n-1 comparaisons et autant de dcalages. BEGIN FOR i := 2 TO n DO En rsum, il fait n(n-1) oprations BEGIN (comparaisons et dcalages confonv := T[i]; dus) ; on verra plus loin que ce nombre j := i; sera considrablement rduit en utiliDecaler_d(T,j,v); sant la mthode de dichotomie pour la Inserer(T,j,v); recherche de la position d'insertion. END; END;
213

Les traitements avancs

Retenons
Un algorithme de tri consiste ranger dans un ordre croissant ou dcroissant une suite d'lments quelconques selon un critre pralablement dfini . On se propose de trier un tableau T par ordre croissant. La mthode du tri par slection du tableau T consiste : 1. Commencer par i=1 et chercher la position pmin du plus petit lment de T. Si T[i] T[pmin] alors on les permute. T[1] est maintenant sa bonne place. 2. On recommence ces oprations pour la partie du tableau de 2 n. Aprs quoi T[2] sera sa bonne place, et ainsi de suite jusqu'au traitement de la partie forme par les deux derniers lments. Sachez que si les n-1 lments du tableau sont bien placs le dernier le sera d'office. La mthode du tri bulles du tableau T consiste : 1. Commencer par i=1 et comparer T[1] et T[2] s'ils ne sont pas dans le bon ordre on les permute puis on passe la paire T[2] et T[3] puis la paire T[3] et T[4] jusqu' la dernire paire T[n-1] et T[n]. On aura pousser ainsi le plus grand lment de T vers la dernire position du tableau, donc T[n] est maintenant sa bonne place donc plus la peine d'y revenir. 2. On recommence les oprations de l'tape 1 en parcourant de 1 n-2 puis de 1 n-3 et ainsi de suite. On arrte quand la partie trier est rduite un seul lment ou si lors du dernier parcours aucune permutation n'a t faite ; ce qui signifie que le tableau est devenu tri. La mthode du tri par insertion du tableau T consiste : Nous supposons que les lments de 1 i-1 sont bien placs (tris), nous allons me placer le i lment. 1. On cherche sa position d'insertion de l'lment suivant, savoir celui de la position i, sa position parmi les i-1 premiers lments. Si cette position est i, l'lment est donc sa bonne place, sinon, supposons que cette position est j. On dcale d'un pas vers l'avant tous les lments de j i-1 puis on insre l'lment d'indice i la position j. 2. On recommence les oprations de l'tape 1 jusqu' atteindre la fin du tableau.
214

Les traitements avancs

Exercices
Exercice 1 On se propose d'crire une analyse permettant : 1. de saisir les lments d'un tableau T compos de n chanes de caractres non vides. 2. de trier le tableau T dans un ordre croissant selon les deux critres suivants : longueur de la chane en premier lieu ordre alphabtique en cas d'galit pour les longueurs. Exercice 2 Il existe plusieurs variantes de l'algorithme du tri bulles : Une autre version est le tri bidirectionnel. Elle consiste parcourir le tableau de gauche droite, puis de droite gauche, le changement de direction ayant lieu chaque fois que l'une des extrmits est atteinte. Ainsi, les plus petits lments du tableau descendent au mme rythme que remontent les plus grands lments. Question : crire un programme Pascal permettant de saisir n entiers (10<n<30) dans un tableau T et de le trier en utilisant le principe mentionn ci-dessus. Exercice 3 Nous disposons de deux tableaux Tnom de n chanes de caractres et Tcouleur de n caractres. Une couleur peut tre blanche de caractre 'B' ou noire de caractre 'N'. crire un programme en Pascal qui permet de rarranger les lments de Tnom et Tcouleur de manire ce que les lments de couleur 'B' prcdent les lments de couleur 'N'. Si deux lments ont des couleurs identiques , l'ordre alphabtique des chanes intervient. Exemple : (Ali, B)(Salah, N), (Sonia, B), (Tounsi, N), (Salma, N) et (Ahmed, B) sont rarrangs comme suit : (Ahmed, B), (Ali, B), (Sonia, B), (Salah, N), (Salma, N) et (Tounsi, N). Exercice 4 Faire une analyse, crire un algorithme puis la traduction en Pascal d'un programme qui permet de crer un tableau d'entiers croissants partir de deux tableaux d'entiers non croissants. Exemple : V1 = 1, 3, 2, -6 V2 = 0, 4, -5 rsultat = -6, -5, 0, 1, 2, 3, 4
215

Les traitements avancs Exercice 5 On veut crire un programme pascal permettant de faire une tude comparative des algorithmes de tri (slection, bulles et insertion). Questions : 1. Le programme devra remplir alatoirement un tableau de N entiers, l'afficher, le trier l'aide des diffrentes mthodes de tri proposes (toujours partir du mme tableau initial) et afficher les tableaux tris obtenus. 2. Comparer les temps d'excution de ces algorithmes pour diffrentes valeurs de N. Exercice 6 crire, en s'inspirant du tri par slection, une procdure qui permet de construir partir d'un tableau T de n entiers un tableau RANG tel que RANG[i] soit l'indice dans T du ieme lment dans l'ordre croissant sans modifier le tableau T. Exemple :

80 50 91 34 20 1 2 3 4 5

RANG

5 1

4 2

2 3

1 4

3 5

216

Les traitements avancs

Leon

Algorithmes de recherche d'un lment dans un tableau


Objectifs spcifiques
Connatre les diffrentes mthodes de recherches. Savoir choisir la mthode de recherche la plus adapte au problme trait.

Plan de la leon
I. Introduction II. La recherche squentielle II.1. Dfinition II.2. Application III. La recherche dichotomique Retenons Exercices

217

Les traitements avancs

Leon

Algorithmes de recherche d'un lment dans un tableau


la vraie mthode est la voie par laquelle la vrit elle-mme, ou les essences objectives des choses ou leurs ides sont cherches dans l'ordre d.
SPINOZA

I. Introduction
On a souvent besoin de rechercher, dans un tableau, un lment donn ou son ventuelle position. Un point particulier ne pas oublier pour tous les algorithmes est le traitement du cas o l'lment cherch n'est pas dans le tableau. Une autre caractristique importante d'un algorithme de recherche est son comportement dsir en cas d'lments identiques (doit-il donner le premier, le dernier ou tous les lments identiques ?). Dans cette leon, nous nous limiterons l'tude de deux mthodes de recherche parmi les plus connues, notamment la recherche squentielle et la recherche dichotomique.

II. La recherche squentielle


Activit 1 crire un programme qui saisit un entier naturel n suivi de n entiers mettre dans un tableau A puis une valeur v, ensuite il appelle une fonction recherche qui cherche si v figure ou non dans le tableau A. Pr-analyse Nous disposons d'un tableau A n lments. Nous nous proposons de chercher si une valeur v existe dans le tableau A. Nous allons crire une fonction boolenne qui renvoie VRAI si v existe dans A et FAUX sinon. La mthode que nous allons adopter consiste parcourir le tableau A partir du premier lment et comparer chaque lment de A avec v. Le parcourt s'arrte si on trouve v ou on arrive la fin du tableau.
218

Les traitements avancs Analyse Nom = Cherche_elem S


4 3 2 1

L.D.E.

O.U.
exist A n v i Recherche

Rsultat = Ecrire ("Existe = ", exist) exist FN Recherche (A, n, v) v = Donne A = [ n = Donne ] Pour i de 1 n Faire A[i] = Donne FinPour Fin cherche_elem

Tableau de dclaration des objets Objet


exist A n v i Recherche

Type/nature
Boolen Tableau d'entiers Entier Entier Entier Fonction

Rle
Paramtre effectif rsultat boolen de la recherche Tableau des lments Nombre d'lments de A lment rechercher Compteur Renvoie VRAI si v existe dans A et FAUX sinon.

Algorithme 1) Dbut Cherche_elem 2)Lire (n) 3)Pour i de 1 n Rpter Lire ( A(i) ) FinPour 4)Lire (v) 5)exist FN Recherche (A, n, v) 6)Ecrire ("Existe = ", exist) 7)Fin Chercher_elem. Analyse de la fonction Recherche DEF FN Recherche (n, p : Entier ; TE : tableau de 20 entiers) : Boolen S L.D.E. O.U.
2 Rsultat = Rechercher Recherche = [ ]Si (TE[ i ] = p) Alors Recherche VRAI Sinon Recherche FAUX FinSi Rpter i i +1 Jusqu' (TE[ i ] = p) OU (i = n) Fin Recherche 219 i = [ i 0 ]

Les traitements avancs

Tableau de dclaration des objets locaux Objet


i

Type/nature
Entier

Rle
Compteur

Algorithme 0) DEF FN Recherche (n, p : entier ; TE : tableau de 20 entiers) : boolen 1) [ i 0] Rpter i i +1 Jusqu' (TE[ i ] = p) OU (i = n) 2) Recherche = Si TE[ i ] = p Alors Recherche VRAI Sinon Recherche FAUX FinSi 3) Fin Recherche Traduction en Pascal PROGRAM Cherche_elem; USES WINCRT; TYPE Typtab=ARRAY [1..20] OF INTEGER ; VARexist : BOOLEAN ; Indice : INTEGER; T : Typtab ; n,i,v : INTEGER; FUNCTION Recherche (n,p:INTEGER ; TE:Typtab):BOOLEAN; VAR i : INTEGER ; BEGIN Exist := False ; i := 0 ; REPEAT i := i + 1 ; UNTIL (TE[i] = p)OR( i = n ); IF TE[i] = p THEN Recherche:= TRUE ELSE Recherche:= FALSE ; END ;

220

Les traitements avancs BEGIN WRITE('Entrer la taille du tableau : '); READLN(n); FOR i := 1 TO n DO BEGIN WRITE('Entrer un lment : '); READLN(T[i]); END; WRITE('Entrer l''lment rechercher : '); READLN(v); Exist:=Recherche (n, v, T); WRITELN ('Exist =', exist); END. Un cas d'excution

Remarque : Cet algorithme effectue au maximum n comparaisons.

II.1 Dfinition
La mthode de recherche squentielle d'un lment dans un tableau consiste parcourir le tableau lment par lment en les comparant avec l'lment chercher jusqu' trouver ce dernier ou achever le tableau.

II.2 Application
Dveloppez un programme qui saisit un entier naturel n suivi de n rels mettre dans un tableau A, puis une valeur v dont on veut chercher la dernire position dans le tableau si elle y figure. Dans le cas o v ne figure pas dans le tableau le programme affichera la position 0.

221

Les traitements avancs Pr-analyse Nous disposons d'un tableau A n lments. Nous nous proposons de chercher la dernire position d'une valeur v si elle existe dans le tableau A. Nous allons crire une fonction boolenne qui renvoie la dernire position si v existe dans A et la valeur 0 sinon. La mthode que nous allons adopter consiste parcourir le tableau A partir du dernier lment et comparer chaque lment de A avec v. Le parcourt s'arrte aprs avoir trouv v ou arriv au dbut du tableau. Analyse Nom = Cherche_der_pos_elem S L.D.E.
4 3 2 1 Rsultat = Ecrire ("Dernire Position = ", pos) pos FN Recherche_der_pos (A, n, v) v = Donne (A,n) = [ n = Donne ] Pour i de 1 n Rpter T[i] = Donne FinPour Fin cherche_der_pos_elem

O.U.
pos A n v i Recherche_der_pos

Tableau de dclaration des objets Objet


Pos A n v i Recherche_der_pos

Type/nature

Rle

Entier Dernire position de l'lment v chercher Tableau d'entiers Tableau des lments Entier Nombre d'lments de A Entier lment rechercher Entier Compteur fonction Renvoie VRAI si v existe dans A et FAUX sinon

Algorithme 0) Dbut Cherche_der_pos_elem 1) Lire (n) Pour i de 1 n Rpter Lire ( A(i) ) FinPour 2) Lire (v) 3) pos FN Recherche_der_pos (A, n, v) 4) Ecrire ("Dernire Position = ", pos) 5) Fin Chercher_der_pos_elem
222

Les traitements avancs Analyse de la fonction Recherche_der_pos


DEF FN Recherche_der_pos (TE : tableau de 20 entiers, n,m : Entier) : Entier

S
4 3 2

L.D.E.
Rsultat = Recherche_der_pos Recherche_der_pos p p = [ p 0 ] Si (TE[ i ] = m) Alors pi FinSi [ i n+1 ] Rpter i i -1 Jusqu' (TE[ i ] = m) OU (i = 1) Fin Recherche_der_pos

O.U.

i p

Tableau de dclaration des objets locaux Objet


p i

Type/nature
Entier Entier

Rle
Dernire position Compteur

Algorithme 0) DEF FN Recherchder_der_pos ( TE : tableau de 20 entiers, n, m : entier) : entier 1) [ i n+1 ] Rpter i i -1 Jusqu' (TE[ i ] = m) OU (i = 1) 2) p = [ p 0 ] Si TE[ i ] = m Alors pi FinSi 3) Recherchder_der_posP 4) Fin Recherche-der_pos Traduction en Pascal PROGRAM Cherche_der_pos_elem; USES WINCRT; TYPE Typtab=ARRAY [1..20] OF INTEGER ; VAR T : Typtab ; pos,n,v,i: INTEGER;

223

Les traitements avancs PROGRAM Cherche_der_pos_elem; USES WINCRT; TYPE Typtab=ARRAY [1..20] OF INTEGER ; VAR T : Typtab ; pos,n,v,i: INTEGER; FUNCTION Recherche_der_pos (TE:Typtab; n,m:INTEGER):INTEGER; VAR p,i : INTEGER ; BEGIN i := n+1; REPEAT i := i - 1; UNTIL(TE[i] = m)OR(i = 1); p:=0; IF TE[i] = m THEN p:= i; Recherche_der_pos:=P; END ; BEGIN WRITE('Entrer la taille du tableau : '); READLN(n); FOR i := 1 TO n DO BEGIN WRITE('Entrer un lment : '); READLN(T[i]); END; WRITE('Entrer l''lment rechercher : ');READLN(v); pos:=Recherche_der_pos(T, n, v); WRITELN ('Dernire Position =', pos); END. Un cas d'excution

224

Les traitements avancs

III. La recherche dichotomique


Activit 1 On vous propose de chercher dans un dictionnaire la signification du mot informatique. Dcrivez en dtail comment vous allez faire cette recherche. La premire action est d'ouvrir le dictionnaire "en son milieu" et de voir si on'est pas tomb par hasard sur la page comportant le mot informatique. Dans le cas contraire, en comparant la lettre initiale du mot informatique avec celle affiche en haut de la page du dictionnaire on saura si on doit rechercher ce mot dans la partie gauche ou la partie droite. On continue ce processus jusqu' ouvrir la page contenant le mot informatique. Cette approche profite du fait qu'un dictionnaire est tri. Activit 2 Effectuer une analyse, un algorithme et la traduction en Pascal de la fonction intitule RECHERCHE qui utilise la mthode de recherche dichotomique pour vrifier l'existence d'un lment donn dans un tableau de n entiers tris par ordre croissant. Pr-analyse On regarde l'lment au milieu du tableau. - s'il est gal la valeur cherche, l'lment cherch est existant. - s'il est infrieur la valeur recherche, il ne reste traiter que la moiti droite du tableau. - s'il est suprieur la valeur recherche, il ne reste traiter que la moiti gauche du tableau. On continue ainsi la recherche en diminuant chaque fois de moiti le nombre d'lments du tableau restants traiter.
DEF FN Recherche (n, m : Entier ; TE:Typtab): Boulen

S
1

L.D.E.
Rsultat = Result_recherche Result_recherche = [a1, bn, Result_rechercheFaux] Rpter [p(a+b) DIV 2] Si (m=TE[p]) Alors Result_rechercheVrai Sinon Si (m < TE[p]) Alors b p-1 Sinon ap+1 FinSi Jusqu' (Result_recherche) OU (a>b) Fin Recherche

O.U.

a b p

225

Les traitements avancs Tableau de dclaration des objets locaux Objet


a b p

Type/nature
Entier Entier Entier

Rle
Borne droite Borne gauche compteur

Algorithme 0)DEF FN Recherche (n,m:Entier ; TE:Typtab): Boulen 1)a1 bn Result_rechercheFaux Rpter p(a+b) DIV 2 Si (m=TE[p]) Alors Result_rechercheVrai Sinon Si (m < TE[p]) Alors b p-1 Sinon ap+1 FinSi Jusqu' (Result_recherche) OU (a>b) 2)Fin Recherche Traduction en Pascal PROGRAM Cherche_elem; USES WINCRT; TYPE Typtab=ARRAY [1..20] OF INTEGER; VAR Ok: BOOLEAN; T : Typtab; n,i,p : INTEGER; FUNCTION Recherche (n,m:INTEGER ; TE:Typtab): BOOLEAN; VAR a,b :INTEGER; Result_recherche:BOOLEAN ; BEGIN a:=1; b:=n; Result_recherche:=False ;

226

Les traitements avancs REPEAT p := (a+b) DIV 2 ; IF m = TE[p] THEN Result_recherche:=True ELSE IF m < TE[p] THEN b :=p-1 ELSE a:=p+1; UNTIL (Result_recherche) OR (a>b); Recherche:=Result_recherche; END; BEGIN WRITE('Entrer la taille du tableau : '); READLN (n); FOR i := 1 TO n DO BEGIN WRITE('Entrer un lment : '); READLN (T[i]); END; WRITE('Entrer l''lment rechercher : '); READLN (p); OK:= Recherche (n,p,T); WRITELN ('Exist = ' ,OK); END. Un cas d'excution

Remarques :

Nous pouvons constater qu' la premire tape, nous devons prendre le milieu
d'un tableau de n lments, l'tape suivante le milieu d'un tableau de n/2 lments, puis de n/4 lments, ...

La recherche s'arrte quand le nombre d'lments est rduit 1 ou l'lment est


trouv.
227

Les traitements avancs

Dfinition
En algorithmique, la dichotomie (du grec couper en deux ) est un processus itratif ou rcursif de recherche o chaque tape l'espace de recherche est restreint l'une de deux parties. On suppose bien sr qu'il existe un test relativement simple permettant chaque tape de dterminer l'une des deux parties dans laquelle peut se trouver l'lment. L'algorithme s'applique typiquement la recherche d'un lment dans un ensemble fini ordonn. La dichotomie peut tre vue comme une variante simplifie de la stratgie plus gnrale diviser pour rgner (en anglais, divide and conquer).

Retenons
La mthode de la recherche squentielle consiste parcourir le tableau progressivement du dbut vers la fin en les comparant avec l'lment chercher jusqu' trouver ce dernier ou achever le tableau. L'algorithme de recherche squentielle n'utilise comme information que le test d'galit sur les lments, avec deux rsultats possibles : galit ou non galit. La mthode de la recherche dichotomique consiste chercher un lment dans le cas d'un tableau tri. On compare l'lment chercher l'lment central du tableau, s'ils sont diffrents, un test permet de trouver dans quelle moiti du tableau on peut trouver l'lment. On continue ce processus jusqu' trouver l'lment ou bien on arrive un sous-tableau de taille 1.

228

Les traitements avancs

Exercices
Exercice 1 Effectuer une analyse, un algorithme et la traduction en Pascal du programme intitul ANNUAIRE1 qui, saisit un nom puis dtermine le numro de tlphone correspondant. Avec deux tableaux Tnom et Ttel, indics en parallle, le numro de tlphone de Tnom[i] tant Ttel[i], on peut faire un annuaire tlphonique. L'information rechercher est le numro de tlphone. Exemple : Tnom Jamel Naoufel Imed Ghazi Salma Ibtissem Hakim Afef Abdelkader Fadhila Zoubeir Index 1 2 3 4 5 6 7 8 9 10 11 Ttel 71222 75123 73632 72098 78453 72331 72776 77345 78080 77777 72987

Si le nom est Salma alors le numro de tlphone correspondant est 78453. Exercice 2 Supposons que la table des noms est trie par ordre alphabtique (comme l'annuaire des PTT). Au lieu de faire une recherche squentiellement, utiliser la mthode de recherche dichotomique pour rsoudre l'exercice 1. Exercice 3 crire un programme qui lit n caractres introduits au clavier par l'utilisateur et les place au fur et mesure dans un tableau T. Ensuite le programme recherche dans le tableau la plus longue suite de caractres identiques et affiche le caractre concern ainsi que le nombre de fois qu'il est rpt. On suppose que les caractres taps par l'utilisateur sont diffrents des blancs. Exemple : si on introduit (a a b c c e d e e e e e f f g a a a), le programme doit afficher (e,5).
229

Les traitements avancs Exercice 4 crire un programme en Pascal qui ralise le traitement suivant : Compactage d'un tableau d'entiers positifs ou nuls : remplacer chaque suite de zros par le nombre de zros multipli par -1. Exemple : Vecteur = 1 2 3 0 0 0 2 0 0 rsultats = 1 2 3 -3 2 -2 Exercice 5 On veut insrer un nouveau lment dans un tableau tri de n entiers en maintenant le tableau ordonn. Pour insrer un nouvel lment dans le tableau, il faut d'abord trouver son emplacement par une recherche dichotomique, puis dcaler tous les lments pour pouvoir insrer le nouveau lment au bon endroit. crire un programme en Pascal, qui permet d'insrer un lment dans un tableau tri. Exercice 6 crire un programme Pascal permettant : - d'insrer un rel x dans un tableau la position p. Si le tableau est plein le programme doit d'abord construire un nouveau tableau dont le nombre d'lments est 10% suprieur au tableau initial. - de supprimer l'lment la position p et de dcaler le reste des lments T[p+1..n] vers la gauche.

230

BIBLIOGRAPHIE
[BOR] Borland International Inc. Turbo Pascal 6.0 (Guide du programmeur) [BOR] Borland International Inc. Turbo Pascal 6.0 (Guide de rfrence) [BOY] J.BOYER, J.-D. LAMOITIER, M. TREILLET. Systmes PC.DOS et MS.DOS version 2 4 Editests. 1987 [CAR] R. CARRE, J.-F. DEGREMONT, M. GROSS, J.-M. PIERREL, G. SABAH Langage humain et machine Presses CNRS 1990 [CHA] G. CHATY, J.VICARD L'algorithmique de la pratique la thorie. CEDIC. 1983 [ENG] A. ENGEL Mathmatique lmentaire d'un point de vue algorithmique. CEDIC. 1981 [ESP] B. D'ESPAGNAT Penser la science ou les enjeux du savoir DUNOD 1990 [KNU] D. KNUTH The Art Of Computer Programming Vol.1, 2 et3. ADDISON WESLEY . 1968 Vol. 3 : Sorting and Searching [LAU] J.-P. LAURENT Initiation l'analyse et la programmation. DUNOD. 1985 [LIG] P. LIGNELET Algorithmique. Tome 1 et Tome 2. MASSON. 1981 [MEY] J.-J. MEYER Pratique du Turbo Pascal (Crez vos progiciels). ditions Radio. 1987 [MEY] J.-J. MEYER Pratique du Turbo Pascal (Crez vos progiciels). ditions Radio. 1987 [PAI] C. PAIR Sciences et Pratiques de l'Informatique. BORDAS. 1987 [ROY] D. ROY Routines en Turbo Pascal. ditions P.S.I. 1989 [TRU] J-RUSS. Dictionnaire de philosophie Bordas 2004 [TRU] J-P. TRUMBLAY, R. B. BUNT, P. G. SORENSON Logique de programmation Traduction de G. DUPUIS et L. VAN BUSKIRK McGraw-Hill. 1985 [WIR] N. WIRTH Introduction la programmation systmatique. MASSON. 1986 RFRENCES WEB http://fr.wikipedia.org http://www.commentcamarche.net

231

Annexe
Table des codes ASCII. 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.
232