Professional Documents
Culture Documents
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
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
43
hapitre 3 hapitre 4
70
104
hapitre 5
Les sous-programmes
143
hapitre 6
195
Bibliographie Annexe
231
232
CHAPITRE
C hapitre 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 1
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
Leon 1
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
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 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
Nombre de bits Sign 8 bits Sign 16 bits Non sign 8 bits Non sign 16 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)
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(712.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)
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
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 Entier
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
13
Les structures de donnes Activit 7 Soit la squence d'affectations suivante : ao3 b o 2.5 masse o 12 longueur o 4.5 largeur o 1.5 hypo o RacineCarr (carr(a)+carr(b)) poids o masse * g surface o 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 ;
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 3- b- (88>66) ET (66<55) VRAI ET FAUX
VRAI 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 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 ORD (c) CHR (n) SUCC (c) PRED (c) MAJUS (c) 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"
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.
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 o ''Beldi'' a- Quelles sont les valeurs de Nom[1] et de Nom[5] ? b- Aprs l'affectation Nom[2] o "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 o '''' Nom o ''Aloui'' Adresse o " " {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.
19
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.
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
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 o 30 n o m+ 20 p o n +m mon-p Squence 2 1) 2) 3) 4) m m m m o o o o 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 o o o o 3 5 b a 1) 2) 3) 4) 5) Squence 2 ao3 bo5 cob boa aoc 1) 2) 3) 4) 5) Squence 3 a b b a b o o o o o 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
Leon 2
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
Leon 2
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 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
+,-
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.
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
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. 2- 1re opration 7 * 10 = 70 2me opration 31 + 70 = 101 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
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 yE 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 ..... ..... ..... .....
Leon 3
Plan de la leon :
I. Le type scalaire numr II. Le type intervalle Retenons Exercices
30
Leon 3
Outre les types standard prsents dans la premire leon, nous pouvons dfinir de nouveaux types appels souvent types utilisateur.
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 o 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
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
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
Leon 4
Plan de la leon
I. Dclaration d'un tableau II. Le type tableau Retenons Exercices
36
Leon 4
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.
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 :
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 o o o o o 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] o 17.50 3) Les oprations possibles sur un lment du tableau sont les mmes que celles dfinies sur une variable de mme type.
Activit 2 Soit la squence suivante : A [ 1 ] o 10 A[2]o7 A [ 3 ] o A [ 1 ] Div A [ 2 ] A[4]oA[3] A[2] A[5]oA[1]+A[3]*A[4] 1- Dclarer le tableau A. 2- Quel est le contenu de chaque lment du tableau A ?
39
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
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] o 300 V[2] o 50 W[1] o V[1] + V[2]* 2
41
Les structures de donnes V[3] o W[1] DIV 3 W[2] o W[1] MOD V[1] W[3] o V[2] * 2 + 2 V[4] o (V[2] DIV 4) MOD 2 V[8] o 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
Leon 1
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
Leon 1
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) Xo Yo Yo Yo Yo 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
II. Dfinition
L'opration d'affectation consiste attribuer une valeur une variable. L'instruction d'affectation se note avec le symbole "o" 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 "o". 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 o 159383552 2) n o m DIV 8 3) p o n DIV 1024 4) r o 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
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 "o". 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
L.D.E.
Rsultat = Ecrire (ch ) Insre (c,ch,p) Efface(ch,p,1) Convch( ORD(Ch[p]),c) po(1+l) DIV 2 Insre ( aux, ch, 1) Efface(ch,1,1) ch[l] o ch[1] aux o sous-chaine(ch,l,1) l o long(ch) ch = Donne ("Entrer une chane de caractres: ") Fin CRYPT
O.U.
ch p c l aux
Algorithme 0) Dbut CRYPT 1) Ecrire ("Entrer une chane de caractres: "), Lire(ch) 2) l o long(ch) 3) aux o sous-chaine(ch,l,1) 4) ch [l] o ch[1] 5) Efface(ch,1,1) 6) Insre (aux,ch, ",1) 7) po(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 "o". - 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
Exercices
Exercice 1 Soit la squence d'instructions suivante : X o -5 X o X*X Y o -X-3 Z o (-X-Y)*3 X o -(X+Y)*2+Z Y o Z*X*Y Y o -(Z+Y) X o X+Y-Z Y o X+Z X o Y+Z)/(X/10) Y o ((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 o 19.7 Y o 114 K o (X + Y - ABS(X-Y))/2 L o (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] o sous-chaine("communication",1,3) - A[2] o concat("sports",".", A[1]) - B[1] o pos ("o", A[2]) - convch(2007, ch) - A[3] o "www."+ A[2] - insrer(ch,A[3], 11) - B[2] o 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
Leon 2
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
Leon 2
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 o (n* 2.54) / 100 p o n div 12 n o 24 Fin DISTANCE
O.U.
m p n
53
Type/nature
Rel Rel Entier
Rle
Mesure en mtre Mesure en pied Mesure en pouce
Algorithme 0) 1) 2) 3) 4)
n o 24
Dbut DISTANCE
p o div 12 m o (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
L.D.E.
O.U.
I C D U E
Rsultat = Ecrire (I) I o C+(D*10)+(U*100) U o E MOD 10 D o (E DIV 10) MOD 10 C o E DIV 100 E = Donne("Donner un entier naturel de trois chiffres ") Fin INVERSE
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 o E DIV 100 3) D o (E DIV 100) MOD 10 4) U o E MOD 10 5) I o 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
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)
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
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
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
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 :
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 :
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.
L.D.E.
Rsultat = Ecrire ("la taille de cette musique en MO est : ",T) T o 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
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) To 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
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 o p / (1024*1024) p o n*c n o 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
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 o l*r*h*r p o n*c P1 o 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
var1,var2,var3 = donne
Lire (var1,var2,var3)
Exemples :
Analyse X = donne Y= donne ("Entrer Y") Algorithme Lire(X) Lire (variable) Pascal READLN (X); READLN (variable); ou READ (variable); READLN (var1,var2,var3); ou READ (var1,var2,var3);
(ch1,ch2,ch3) =donne
Lire (var1,var2,var3)
Remarques :
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
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
Leon 1
Plan de la leon :
I. Introduction II. La structure conditionnelle simple II.1. La forme rduite II.2. La forme alternative Retenons Exercices
71
Leon 1
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.
72
L'initialisation et le traitement sont gnralement des squences formes de plusieurs instructions. Nous obtenons donc l'criture suivante :
Dcision =
Init i1 ----Init iP
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 conditinnelles 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) = [Bipo "", Message o "Rgulateur non dclench"] Si (Temp < 18) ou (Temp > 24) Alors Message o " Rgulateur dclench" Bip o CHR(7) FinSi Temp = Donne ("Entrer la valeur de la temprature : ") Fin REGULATEUR
O.U.
Bip Message Temp
1 4
Algorithme 0) Dbut REGULATEUR 1) crire ("Entrer la valeur de la temprature : "), Lire (Temp) 2) [Bip o "", Message o "Rgulateur non dclench"] Si (Temp < 18) ou (Temp > 24) Alors Message o "Rgulateur dclench" Bip o chr(7) FinSi 3) Ecrire (Bip,Message) 4) Fin REGULATEUR
74
Les structures de contrle conditinnelles 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 conditinnelles Tableaux de dclaration des objets Nom = CLASSEMENT S
4 3
L.D.E.
Rsultat = Ecrire (Chaine1, Chaine2) (Chaine1, Chaine2) = [Chaine1 o Ch1, Chaine2 o Ch2] Si (LONG(Ch2) > LONG(Ch1)) Alors Chaine1 o Ch2 Chaine2 o 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
Algorithme 1) Dbut CLASSEMENT 2) Ecrire ("Entrer la Chane 1 : "), Lire (Ch1) 3) Ecrire ("Entrer la Chane 2 : "), Lire (Ch2) 4) [Chaine1 o Ch1, Chaine2 o Ch2] Si (LONG(Ch2) > LONG(Ch1)) Alors Chaine1 o Ch2 Chaine2 o 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 conditinnelles 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.
Les structures de contrle conditinnelles 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
Circuit lectrique
OU (OR)
0 1 1
L.D.E.
O.U.
LED K L
2 1 5
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 o " teinte " Sinon LED o " Allume " FinSi 4) Ecrire (LED) 6) Fin FN_LOGIQUE_OU
79
Les structures de contrle conditinnelles 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
L.D.E.
O.U.
Nature x1 x2 y1 y2
2 1 5
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 Natureo" u est perpendiculaire v " Sinon Natureo" u n'est pas perpendiculaire v " FinSi 4) Ecrire (Nature) 5) Fin ORTHOGONAL
81
Les structures de contrle conditinnelles 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
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 conditinnelles 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
Leon 2
Plan de la leon
I. Introduction II. Vocabulaire et syntaxe III. Dfinition Retenons Exercices
85
Leon 2
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.
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
O.U.
Nature AB AC BC
6 5 4 3 2 1 9
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) ACoRacineCarr (Carr(Xc-Xa)+ Carr(Yc-Ya)) 5) ABoRacineCarr (Carr(Xb-Xa)+ Carr(Yb-Ya)) 6) BCoRacineCarr (Carr(Xc-Xb)+ Carr(Yc-Yb))
88
Les structures de contrle conditinnelles 7) Si (AC=AB) et (AB=BC) Alors Natureo"Triangle quilatral" Sinon Si AB=BC Alors Natureo"Triangle isocle en B" Sinon Si AC=BC Alors Natureo"Triangle isocle en C" Sinon Si AB = AC Alors Natureo"Triangle isocle en A" Sinon Natureo"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
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 Natureo"Acide fort" Sinon Si pH<7 Alors Natureo"Acide faible" Sinon Si pH=7 Alors Natureo"Neutre" Sinon Si pH<13 Alors Natureo"Base faible" Sinon Natureo"Base forte" FinSi pH = Donne ("Entrer le pH de la solution: ") Fin SOLUTION
L.D.E.
O.U.
Nature pH
1 4
90
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 Natureo"Acide fort" Sinon Si pH<7 Alors Natureo"Acide faible" Sinon Si pH=7 Alors Natureo"Neutre" Sinon Si pH<13 Alors Natureo"Base faible" Sinon Natureo"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
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
Leon 3
Plan de la leon :
I. Introduction II. Vocabulaire et syntaxe III. Dfinition Retenons Exercices
93
Leon 3
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
L.D.E.
Rsultat = Ecrire (M ) M = [ ] Selon R Faire 0 : M o "N" 1 : M o "N +4" 2 : M o "N +3" 3 : M o "N +2" 4 : M o "N +1" Fin Selon R o N MOD 5 N = Donne ("Entrer un entier N : ") Fin MULTIPLE5
O.U.
M R N
2 1 4
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 o N MOD 5 3) Selon R Faire 0 : M o"N" 1 : M o"N +4" 2 : M o"N +3" 3 : M o"N +2" 4 : M o"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 conditinnelles 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.
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 (1qmars, 2qavril, ... 10qdcembre, 11qjanvier, ..). - 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
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
Algorithme 0) Dbut JOUR 1) Ecrire ("Entrer une date: "), Lire(Date) 2) day o Sous-chane(Date,1,2) 3) mois o Sous-chane(Date,4,2) 4) an o 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 o1 4 : M o2 5 : M o3 6 : M o4 7 : M o5 8 : M o6 9 : M o7 10: M o8 11: M o9 12: M o10 1 : M o11 2 : M o12 Fin Selon 9) Jo (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 o -J mod 7 Jo7-J FinSi
99
Les structures de contrle conditinnelles 11) Selon J Faire 0 : Jour o"Dimanche" 1 : Jour o"Lundi" 2 : Jour o"Mardi" 3 : Jour o"Mercredi" 4 : Jour o"Jeudi" 5 : Jour o"Vendredi" 6 : Jour o"Samedi" SiNon Jour o"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 conditinnelles 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
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 : AqU, TqA, CqG et GqC. 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 conditinnelles 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
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.
Leon 1
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
Leon 1
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.
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.
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
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.
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
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 = i*p. Remarquez que n est toujours positif, c'est le signe de p qui dtermine le compteur c. Traduction en Pascal PROGRAM nom_programme; USES WINCRT; VAR . . . BEGIN . . . {Instructions d'initialization} n:=1+ROUND((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) [no1+ARRONDI(2*pi/p), to -p] Pour i de 1 n faire tot+p cxo ARRONDI((40+R.COS(t)) cyo 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+ROUND(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_tomot, L oLONG(mot)] Pour c de 2 l (pas=2) faire code oORD(mot[c]) mot_t[c] o 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_tomot, L oLONG(mot)] Pour i de 1 L DIV 2 faire co2.i codeo mot[c] mot_t[c]o 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
L.D.E.
Rsultat = Ecrire (n,"! = ", fact) fact = [fact o 1] Pour i de 1 n faire fact o 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) [facto1] Pour i de 1 n Faire fact o 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
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 o 0] Pour i de 1 n faire [ ] Si (M[i]e10) alors n_ad o n_ad +1 FinSi FinPour MG o TOT_M / n Tot_M = [Tot_M o 0] Pour i de 1 n faire Tot_M o 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] o (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
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] o (2 * N1[i]+2 * N2[i]+4 * N3[i])/8 FinPour 2) [Tot_Mo0] Pour i de 1 n faire Tot_M o Tot_M +M[i] FinPour 3) MG oTOT_M/n 4) [n_ad o 0] Pour i de 1 n faire Si (M[i]e10) alors n_ad o 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
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
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
Leon 2
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
Leon 2
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 .
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)
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 o " n'existe pas"] Si v_y_est alors dcision o " existe" FinSI v_y_est = [Lire("v = ", v),io 0] Rpter i o i+1 v_y_est o (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
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
Structures de contrle itratives 2) [Lire("v = ",v),io 0] Rpter i o i+1 v_y_est o (B[i]=v) Jusqu' (v_y_est) OR (i=n) 3) [dcision o " n'existe pas"] Si v_y_est alors dcision o " 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
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 o " n'existe pas"] Si dp0 alors STR(dp,s) dcision o " a une dernire place " + s + " " FinSI dp = [io n+1, dp o 0] Rpter [i o i-1] Si (B[i]=v) alors Dp o 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
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) [ion+1, dp o 0] Rpter [i o i-1] Si (B[i]=v) alors dpo i FinSi Jusqu' (dp0) OR (i=1) 5) [dcision o " n'existe pas"] Si dp0 alors STR(dp,s) dcision o " 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
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.
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) = [totalo 0, nbreo 0] Rpter [Lire("x= ",x)]Si (x>0) alors total o total + x nbre o nbre +1 FinSi Jusqu' (x= -1) Fin Moyenne
O.U.
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) [totalo 0, nbreo 0] Rpter [Lire("x= ",x)]Si (x>0) alors total o total + x nbre o 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
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
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 om ] Si (m=0) alors pgcd o n FinSi (mf,nf) = [ m=Donne("m = "),n=Donne("n = ")] Tant Que (m * n0) Faire [ ] Si (m>n) alors m o m MOD n sinon n o n MOD m FinSi FinTantQue Fin calcul_pgcd
O.U.
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 o m MOD n sinon n o n MOD m FinSi FinTantQue 2) [ pgcd om ] Si (m=0) alors pgcd o 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
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
L.D.E.
Rsultat = crire ("La racine est : ", (a+b)/2, " ", e, " prs.") (a,b) = [ao0, bo1, Lire("e = ",e)] TantQue (|a-b| >2*e) Faire [co (a+b)/2, po (exp(-a)-a)(exp(-c)-c)] Si (p=0) alors aoc boc Sinon Si (p<0) alors boc Sinon aoc FinSi FinTantQue Fin calcul_racine
O.U.
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) [ ao 0, bo 1,Lire("e = ",e] TantQue (|a-b| >2.e) Faire [co (a+b)/2, po (exp(-a)-a)(exp(-c)-c)] Si (p=0) alors aoc boc Sinon Si (p<0) alors boc Sinon aoc 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
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
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 1
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 1
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.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.
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
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 q l'entier rsultat est 9431 N= 65060 q l'entier rsultat est 66500 Questions : 1. Analyser ce problme en le dcomposant en modules. 2. Analyser chaque module.
150
Les sous-programmes
Leon 2
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 2
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.
L.D.E.
Rsultat = valeurs Valeurs = [n = Donne ] Pour i de 1 n faire x = Donne ("Entrer la valeur de x ") y o FN f(x) crire (x, y) FinPour Fin Calcul_F
O.U.
n i x y f
152
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 o 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 o 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 o 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 o FN Moyenne (Coef1, Note1, Coef2, Note2) Moyenne Coef1 Ecrire ("Moyenne = ", Moy) Coef2 FinPour Coef1 = Donne ("Donner le 1er coefficient") Coef2 = Donne ("Donner le 2me coefficient") Fin Calcul_moy
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 o 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 o Total / (c1 + c2) Total o 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 o c1*n1 + c2*.n2 2) Moyenne o 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 3
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 3
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.
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.
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
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.
Les sous-programmes
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.
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 o 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 o3*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.
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 o x + 3 2) F o 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 4
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 4
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.
O.U.
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 messageo"vous tes admis au concours " Sinon messageo"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 messageo" vous tes admis au concours " Sinon messageo" 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.
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
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 o 0 POUR i de 1 n Faire Co0 [ ] Si MAJUS(TE[ i ]) Dans ["A".."Z"] Alors A o A +1 Sinon si (TE[ i ]) Dans ["1".."9"] Alors C o 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 o 0 Co0 POUR I de 1 n Faire Si MAJUS(TE[ i ]) Dans ["A".."Z"] Alors A o A +1 Sinon si (TE[ i ]) Dans ["1".."9"] Alors C o 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
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
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 o aux aux o b boa Fin Permut
L.D.E.
O.U.
a b aux
Type/nature
Rel
Rle
Variable intermdiaire
Algorithme 0) DEF PROC Permut ( VAR a, b : Rel ) 1) aux o b 2) b o a 3) a o 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
S
6 5 4 3 2 1 7
O.U.
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
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
O.U.
O.U.
ORD1 ORD2 Inverse
Type/nature
Entier Entier Fonction
Rle
Contient l'ordre du caractre Contient l'ordre du caractre invers Inverse un chiffre
O.U.
U D
Objet
U D
Type/nature
Entier Entier
Rle
Contient le chiffre d'unit Contient le chiffre de dizaine
O.U.
Temp i
Objet
Temp i
Type/nature
Entier Entier
Rle
Sauvegarde d'un lment du tableau Compteur
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 o ORD(T[i]) ORD2 o FN Inverse (ORD1) T[i] o 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 o T[n]; FOR I o n DOWNTO 2 Rpter T[i] o T[i-1] FinPour 2)T[1] o 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
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. 3 Ecrire une procdure nomme LECTURE qui lit une phrase. 3 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. 3 Ecrire la procdure LECTURE (VAR N ; VAR T) qui range N entiers dans un tableau T. 3 Ecrire la procdure INVERSE ( VAR X , Y ) qui permet de permuter deux entiers X et Y donns. 3 Ecrire la procdure INVERSE_TOUT ( VAR T ) qui inverse tous les lments du vecteur T en utilisant la procdure INVERSE. 3 Traduire cet algorithme en Pascal. 3 Ecrire la procdure RESULTAT ( T ) qui affiche le vecteur T rsultat. 3 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 : 3 saisir N lments dans T 3 Saisir la valeur de l'lment x insrer 3 Saisir la position d'insertion p dans le tableau 3 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 o x + 3 2) Fo 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) X1o X1 * X1 X2 o X2 * X2 S o X1 + X2 Fin SomCar
0) Dbut Programme principal 1) X o 3 2)Y o 4 3) Z o 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 o 2) X2 o 3) oX1 + X2 4) Fin SomCar 0) Dbut Programme principal 1) X o 3 2) Y o 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
Leon 1
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
Leon 1
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...
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
1) - On se pointe la 1re 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. T 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
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
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
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 oFN 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
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
O.U.
i ppm premposmin permut
Type/nature
Entier Entier
Rle
Contient la position du minimum compteur
202
S
2 3 1 4
O.U.
aux x y
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 o 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 o m] Pour j de m+1 n rpter Si A[posmin] > A[j] Alors posmin o j FinSi FinPour 2) premposmin o posmin 3) Fin premposmin
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
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
3 2 1 2
0 3 3 3
9 4 3 4
3 5 9 5
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 o faux] Pour i de 1 n-1 faire [ ] Si (T[i]>T[i+1]) alors PROC Permut(T[i], T[i+1]) PROC Echange o vrai Fin SI Fin Pour n o n-1 Jusqu' (n=1) ou non (Echange) Fin tri_bulles 206
S
1
O.U.
Echange i 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
O.U.
aux x y
Type/nature
Entier
Rle
Variable auxiliaire ncessaire la permutation
Algorithmes 0) DEF PROC tri_bulles (n : Entier ; VAR T : TAB) 1) Rpter Echange o faux Pour i de 1 n-1 faire Si (T[i]>Tt[i+1]) Alors PROC Permut(T[i], T[i+1]) PROC Echange o vrai Fin SI Fin Pour n o 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 o x 2) x o y 3) y o 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
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
- 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
- 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
S
1
O.U.
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
O.U.
T p e
S
1 2
O.U.
T p e
Les traitements avancs Algorithmes 0) DEF PROC Tri_insertion (n :Entier ; VAR T : TAB) 1) Pour i de 2 n faire v o T[i] joi 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
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 placer le ime 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
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 : 3 longueur de la chane en premier lieu 3 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
Leon 2
Plan de la leon
I. Introduction II. La recherche squentielle II.1. Dfinition II.2. Application III. La recherche dichotomique Retenons Exercices
217
Leon 2
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.
L.D.E.
O.U.
exist A n v i Recherche
Rsultat = Ecrire ("Existe = ", exist) exist o FN Recherche (A, n, v) v = Donne A = [ n = Donne ] Pour i de 1 n Faire A[i] = Donne FinPour Fin cherche_elem
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 o 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 o VRAI Sinon Recherche o FAUX FinSi Rpter i o i +1 Jusqu' (TE[ i ] = p) OU (i = n) Fin Recherche 219 i = [ io 0 ] TE n p i
Type/nature
Entier
Rle
Compteur
Algorithme 0) DEF FN Recherche (n, p : entier ; TE : tableau de 20 entiers) : boolen 1) [ i o 0] Rpter i o i +1 Jusqu' (TE[ i ] = p) OU (i = n) 2) Recherche = Si TE[ i ] = p Alors Recherche o VRAI Sinon Recherche o 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
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 o 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
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 o FN Recherche_der_pos (A, n, v) 4) Ecrire ("Dernire Position = ", pos) 5) Fin Chercher_der_pos_elem
222
S
4 3 2
L.D.E.
Rsultat = Recherche_der_pos Recherche_der_pos o p p = [ po 0 ] Si (TE[ i ] = m) Alors poi FinSi [ i o n+1 ] Rpter i o i -1 Jusqu' (TE[ i ] = m) OU (i = 1) Fin Recherche_der_pos
O.U.
TE n m i p
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 o n+1 ] Rpter i o i -1 Jusqu' (TE[ i ] = m) OU (i = 1) 2) p = [ p o 0 ] Si TE[ i ] = m Alors poi FinSi 3) Recherchder_der_posoP 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
S
1
L.D.E.
Rsultat = Result_recherche Result_recherche = [ao1, bon, Result_rechercheoFaux] Rpter [po(a+b) DIV 2] Si (m=TE[p]) Alors Result_rechercheoVrai Sinon Si (m < TE[p]) Alors b op-1 Sinon aop+1 FinSi Jusqu' (Result_recherche) OU (a>b) Fin Recherche
O.U.
TE n m a b p
225
Type/nature
Entier Entier Entier
Rle
Borne droite Borne gauche compteur
Algorithme 0)DEF FN Recherche (n,m:Entier ; TE:Typtab): Boulen 1)ao1 bon Result_rechercheoFaux Rpter po(a+b) DIV 2 Si (m=TE[p]) Alors Result_rechercheoVrai Sinon Si (m < TE[p]) Alors b op-1 Sinon aop+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, ...
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
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