Académique Documents
Professionnel Documents
Culture Documents
MINISTERE DE L’EDUCATION
INFORMATIQUE
4ème année de l'enseignement secondaire
Sections : – Mathématiques
– Sciences expérimentales
– Sciences techniques
Les auteurs
Les évaluateurs
3
Sommaire
Préface 3
Sommaire 4
Bibliographie 231
Annexe 232
CHAPITRE
C hapitre I
Les structures
de données
Objectifs :
- Montrer l’importance de la
notion de variable
Plan du chapitre :
Leçon 1 :
Les variables et les types
standard de données
Leçon 2 :
Les expressions
Leçon 3 :
Le type scalaire énuméré
et le type intervalle
Leçon 4 :
Les tableaux à une dimension
Objectifs spécifiques :
Plan de la leçon :
Retenons
Exercices
6
Les structures de données
Leon 1
Les variables et les types standard de donnes
C'est une simplification en présense de l'objet concret infiniment
complexe et perpétuellement changeant, simplification qui nous est
imposée soit par les nécessités de l'action soit par les exigences de
l'entendement, et qui consiste à considérer un élément de l'objet
comme isolé alors que rien n'est isolable, et comme constant alors
que rien n'est en repos.
ALAIN
Une constante est un objet ayant une valeur fixe tout le long de l'exécution d'un
algorithme ou d'un programme.
Activité 1
Identifier quelques constantes utilisées dans votre cours de mathématique.
Réponse :
La constante g, utilisée dans le calcul du poids, vaut 9.81. La constante pi, utilisée
dans le calcul trigonométrique, vaut 3.141. Ces constantes seront déclarées dans
le langage PASCAL de la manière suivante :
CONST g = 9.81 ;
pi = 3.141 ;
Définition
On appelle variable un objet pouvant prendre différentes valeurs tout le long de
l'exécution d'un algorithme ou d'un programme.
Remarques :
1- Le choix de l'identificateur d'un objet doit être fait de manière à être le plus signifi-
catif possible.
Pour réussir un algorithme, il faudra d'une part déclarer les différentes variables utiles
et nécessaires pour le bon déroulement de l'algorithme en définissant correctement
leurs types et d'autres parts leur donner les valeurs correctes tout le long de l'algo-
rithme. Certaines variables serviront de données initiales, d'autres seront des varia-
bles intermédiaires et d'autres variables seront les résultats de l'algorithme. Bien
entendu, une variable peut être une combinaison de deux ou trois classes (donnée,
intermédiaire ou résultat).
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 déclaration des objets intervenant dans cette affectation.
2) Déclarer les différents objets en Pascal.
Réponses :
1)
Tableaux de déclaration des objets
Objet Type/nature Rôle
… … …
nb_mois Constante = 12 Nombre de mois de l'année
Salaire_annuel Réel Salaire annuel de l'employé
Salaire_mensuel Réel Salaire mensuel de l'employé
… … …
2) CONST nb_mois=12 ;
VAR Salaire_annuel : REAL ;
Salaire_mensuel : REAL ;
8
Les structures de données
Activité 3
Soit la séquence d'affectations suivante :
1) i := 50 ;
2) j := 70 ;
3) k := i ;
4) i := j ;
5) j := k ;
9
Les structures de données
10
Les structures de données
5- Quand on manipule une variable de type entier, il faut faire attention au risque
de débordement. Quand il y a débordement au-delà des valeurs Minimale et
Maximale, les calculs deviennent erronés ou provoquent des erreurs d'exécution
selon les langages utilisés.
6- VAR i, j, k : INTEGER;
Remarque :
Le langage Pascal a cinq types entiers prédéfinis. Chaque type a un domaine de défi-
nition spécifique.
11
Les structures de données
5.6 106 c'est-à-dire 5 600 000 s'écrira aussi 5.6E+6. La lettre E se lit : «dix puissance»
Activité 6
12
Les structures de données
Réponse :
Nom Type du
Code en Type du
algorith- paramètre Rôle Exemples
Pascal Résultat
mique x ou n
Tronc (-8.224)
supprime la partie
vaut -8
TRUNC Entier décimale pour ne laisser
Tronc (x) Entier Tronc (3.14) vaut 3
(x) ou réel que la composante
Tronc (334.8)
entière de x.
vaut 334
Arrondi(712.499)
donne un entier qui est vaut 12
Arrondi ROUND Entier la valeur du réel x Arrondi (12.50)
Entier
(x) (x) ou réel arrondie à la plus vaut 13
proche valeur. Arrondi (12.99)
vaut 13
Entier ou
ABS Entier donne la valeur Abs (-7)
Abs (x) Réel (même
(x) ou réel absolue de x. vaut 7
Type que x)
Entier ou
SQR Entier donne le carré Carré (7)
Carré (x) Réel (même
(x) ou réel de x. vaut 49
Type que x)
donne la racine carrée
Racine
SQRT Entier de x si x n'est pas RacineCarré (2)
Carré Réel
(x) ou réel négatif et provoque vaut 1.414 …
(x)
une erreur, sinon.
SIN Entier donne le sinus de x Sin(1.5705)
Sin (x) Réel
(x) ou réel (x en radians). vaut 1
COS Entier donne le cosinus de x Cos(1.5705)
Cos (x) Réel
(x) ou réel (x en radians). vaut 0
TAN Entier donne la tangente de x. Tang(3.141)
Tang (x) Réel
(x) ou réel (x en radians). vaut 0
Cotang COTAN Entier donne la cotangente Cotang(1.5705)
Réel
(x) (x) ou réel de x. (x en radians). vaut 0
INT Entier donne la partie ENT(3.7) vaut 3
ENT(x) Entier
(x) ou réel entière d'un réel. ENT(-5.5) vaut -6
Aléa pourrait
donne un réel compris
Aléa RANDOM Entier Entier produire 0.36
entre 0 et 1 exclus.
par exemple.
Aléa(7) pourrait
RANDOM donne un entier
Aléa(n) produire 2 par
(n) entre 0 et n-1
exemple.
Entier renvoie le logarithme
Ln(x) Ln(x) Réel Ln(1.0) vaut 0
ou réel népérien d'un réel x
Entier renvoie l'exponentiel Exponentiel
Exp(x) Exp(x) Réel
ou réel de x de (0.0) vaut 1
13
Les structures de données
Activité 7
Soit la séquence 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
Réponses :
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 ;
Le type booléen est utilisé pour caractériser des objets de type logique.
Activité 8
1- Quelles sont les valeurs du type booléen?
2- Quels sont les opérateurs logiques qu'on peut appliquer sur les booléens?
3- Evaluer les propositions logiques suivantes :
a- La proposition (88>66) ET (44<55)
b- La proposition (88>66) ET (66<55)
14
Les structures de données
Réponses :
1- Les variables d'un tel type peuvent prendre uniquement deux valeurs logiques
VRAI et FAUX (TRUE ET FALSE en Pascal).
2- Ces opérateurs sont NON (négation), Et (conjonction), OU (disjonction) et
OUex (OU exclusif).
3- a- (88>66) ET (44<55) 3- b- (88>66) ET (66<55)
VRAI FAUX
Activité 9
1- Soient a, b et c trois variables booléennes
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 réponse à la question précédente, nous avons utilisé le fait que l'opé-
rateur ET est prioritaire par rapport à l'opérateur OU. Donner l'ordre de priorité
qui existe entre les opérateurs logiques.
3- Déclarer en Pascal quatre variables p, q, existe et drapeau de type booléen.
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
Réponses :
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 parenthèses.
b- il suffit d'ajouter des parenthèses (a OU b) ET c.
2- Il existe un ordre de priorité entre les opérateurs logiques :
• La négation NON est prioritaire par rapport à la conjonction ET.
• La conjonction ET est prioritaire par rapport à la disjonction OU.
• La disjonction OU a la même priorité que l'opérateur OUex.
Si deux opérateurs ont la même priorité, le calcul de l'expression logique se
fera de gauche à droite.
Dans tous les cas, les opérations mises entre parenthèses sont prioritaires.
Les parenthèses 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 données
Le type caractère est utilisé pour représenter une lettre minuscule, une lettre majus-
cule, un chiffre ou un signe de ponctuation, mais aussi un espace typographique, une
tabulation, un retour à la ligne et quelques autres opérations spéciales (sonnerie, effa-
cement, etc.). Tous les caractères sont ordonnés selon leur code ASCII (voir Annexe
à la fin du livre).
Activité 10
1- Les chiffres, les lettres en majuscule, les lettres en minuscule ont des codes
ordonnés et contigus ; Quel est cet ordre ?
2- Citer quelques opérateurs applicables aux caractères.
3- Déclarer en Pascal :
a- une constante caractère de valeur ''v''
b- deux variables de type caractère car1 et car2
Réponses :
2- Comme les valeurs de type caractère sont ordonnées, les opérateurs relation-
nels y sont définis.
Exemples :
''B'' < ''F'' est une proposition VRAIE.
''g'' > ''b'' est une proposition VRAIE.
16
Les structures de données
Réponses :
1- Supposons que c est une variable de type caractère et que n est un entier com-
pris entre 0 et 255.
Code
Nom Rôle Exemples
en Pascal
renvoie le code ASCII du
ORD ("A") vaut 65
ORD (c) ORD (c) caractère c. Le résultat est
ORD ("a") vaut 97
un entier positif.
renvoie le caractère dont CHR (65) vaut "A"
CHR (n) CHR (n)
le code ASCII est n. CHR (97) vaut "a"
renvoie le caractère SUCC ("F") vaut "G"
SUCC (c) SUCC (c))
successeur de c s'il existe. SUCC ("5") vaut "6"
renvoie le caractère PRED ("Z") vaut "Y"
PRED (c) PRED (c)
prédécesseur de c s'il existe. PRED ("9") vaut "8"’
Convertit le caractère c
MAJUS (c) UPCASE(c) MAJUS("c ") vaut "C"
en majuscule s’il est possible.
2- a- c
b- n
17
Les structures de données
Exemple
Algorithmique Pascal
"baccalauréat" 'baccalauréat'
"l'algorithmique" 'l''algorithmique'
Les variables chaînes de caractères sont définies par une déclaration pouvant indi-
quer le nombre maximum de ses caractères.
Activité 12
1- Elaborer un tableau de déclaration des objets où vous définirez une chaîne pre-
nom de 10 caractères, une chaîne nom pouvant contenir jusqu'à 255 caractè-
res et une chaîne adresse de 25 caractères.
2- Déclarer ces objets en Pascal.
3- Réaliser les affectations suivantes :
Chaîne vide à la variable Prenom, "Aloui" à la variable Nom et un espace à la
variable Adresse.
4- Comment accéder au i ème caractère d'une chaîne CH ?
Réponses :
19
Les structures de données
Pos (ch1, ch2) POS (ch1, ch2) Pos retourne la première posi- Pos("Bac","Bac-
tion de la chaîne ch1 dans la calauréat")
chaîne ch2 retourne l'entier 1
Efface (ch, p, n ) DELETE (ch, Efface est une procédure qui Efface(v, 7,3)
p, n) enlève n caractères de ch à modifie v qui
partir de la position p. contiendra
"Disque"
Insère(ch1,ch2, p) INSERT(ch1, Procédure qui insère la chaîne Insère ("tte",v,7)
ch2, p) ch1 dans la chaîne ch2 à partir modifie v qui
de la position p. Le caractère contiendra
numéro p et les suivants sont "Disquette"
décalés vers la droite.
Convch (d, ch1) STR (d, ch1) Procédure qui convertit un nom- Convch(2008, ch)
bre décimal d en chaîne de modifie ch qui
caractères et l'affecte à la varia- contiendra "2008"
ble ch1.
Valeur (ch, d, VAL (ch, d, Procédure qui convertit une Valeur("16.5",d,err
erreur) erreur) chaîne ch en une valeur numé- eur) modifie d qui
rique décimale et l'affecte à la contiendra le réel
variable d. Le paramètre erreur 16.5. erreur
est une variable de type entier contiendra 0.
qui contiendra 0 si la conversion
s'est bien déroulée, sinon elle
contiendra la position du carac-
tère qui a déclenché l'erreur.
Retenons
• Les constantes contiennent des valeurs inchangées tout le long de l'exécution
de l'algorithme. Les variables peuvent changer de contenu tout le long de l'algo-
rithme.
20
Les structures de données
Exercices
Exercice 1
Quelle est la différence entre une constante et une variable?
Exercice 2
Évaluer le contenu des variables m, n, p suite à l'exécution de chacune des
séquences suivantes :
Séquence 1 Séquence 2
1) m o 30 1) m o 2
2) n o m+ 20 2) m o m*m
3) p o n +m 3) m o m *m
4) mon-p 4) m o m*m
Exercice 3
1- Évaluer le contenu des variables a, b, et c suite à l'exécution de chacune des
séquences suivantes :
Exercice 4
On se propose de calculer la surface d'un rectangle. Etablir un tableau de déclara-
tion des objets nécessaires.
Exercice 5
Dire si l'utilisation de ces identificateurs est permise dans le langage PASCAL ou
non. Justifier votre réponse.
• Code Produit
• Code+Produit
• Code_Produit
• 3etapes
• capacité
21
Les structures de données
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 représenter les quantités suivantes :
a- La note obtenue dans un examen
b- Le nombre de matières étudiées pendant un trimestre
c- Le coefficient d'une matière
d- La moyenne générale du trimestre
Exercice 8
Ecrire les instructions PASCAL permettant de réaliser les objectifs suivants :
1- Obtenir la longueur de la chaîne "Informatique"
2- Récupérer la sous-chaîne de 5 caractères à partir de la position 8 de la chaîne
"Informatique"
3- Effacer les 5 premiers caractères de la chaîne "Informatique"
Exercice 9
a est un entier, x est un réel et ch est un caractère.
Dire pourquoi les instructions suivantes sont erronées, et les corriger dans la
mesure du possible.
• a:=3.4
• x:=5,16
• ch:=x
• a:=maxent+5
22
Les structures de données
Exercice 10
Soit la partie déclarative du programme Pascal suivant :
PROGRAM Dates;
CONST
Date1="03/07/2006";
VAR
Date2: STRING[10];
Jour: STRING[2];
Mois: STRING[2];
Annee: STRING[4];
......
Compléter le corps du programme par les instructions (bloc BEGIN...END) permet-
tant de réaliser 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'année dans
la variables Annee.
Exercice 11
Soit la partie déclarative du programme Pascal suivant :
PROGRAM mots ;
CONST
m1: “abcd”;
m2: “ordinateur”;
m3: “scalaire”;
VAR
symetrie: STRING[8];
compose: STRING ;
......
Compléter la partie du programme Pascal précédente en ajoutant des variables (si
c'est nécessaire) et le bloc BEGIN … END pour :
• Avoir dans la variable « symetrie » une chaîne de caractères symétrique obtenue
à partir de la variable « m1 ».
• Avoir dans la variable « compose » une chaîne de caractères obtenue en com-
binant la première moitié de « m2 » et la deuxième moitié de « m3 » en utilisant
les fonctions : concat() et copy().
Exercice 12
Ecrire un programme Pascal qui permet de transformer la chaîne de caractères
“informatique” en majuscule sans utiliser la fonction upcase(c), et la mettre dans
une variable nommée maj.
Indication : le code ASCII de 'a' est 97 et le code ASCII de 'A' est 65.
23
Les structures de données
Leon 2
Les expressions
Objectifs spécifiques :
Plan de la leçon :
I. Les opérandes
Retenons
Exercices
24
Les structures de données
Leon 2
Les expressions
J'appelle claire (la connaissance) qui est présente et manifeste à un
esprit attentif : de même que nous disons voir clairement les objets
lorsque étant présents ils agissent assez fort, et que nos yeux sont
disposés à les regarder.
DESCARTES
Une expression simple est constituée d'opérandes reliés par des opérateurs.
Nous distinguons deux types d'expressions :
• les expressions arithmétiques donnant une valeur numérique.
• les expressions logiques donnant une valeur booléenne.
Activité 1
Donner le type et la valeur de chacune des expressions suivantes.
1- (6 < = 2) 2- (7+3) DIV 2
Réponses :
1- C'est une expression logique ; le résultat est booléen ; sa valeur est FAUX.
2- C'est une expression arithmétique ; le résultat est entier ; sa valeur est 5.
I. Les opérandes
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 deuxième opé-
rande et l'opérateur.
2- Quels sont les types d'opérandes ?
3- Donner les valeurs résultats 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
Réponses :
1- a- 5 est le premier opérande ; + est l'opérateur et 3.141 constitue le deuxième
opérande.
b- 7 est le premier opérande ; MOD est l'opérateur et 3 constitue le deuxième
opérande.
2- Les opérandes peuvent être des constantes, des variables, des valeurs ou des
résultats envoyés par des fonctions. Par ailleurs, un opérande peut être une
expression.
3- a- 12.56 b- 21.98 c- 12.56 d- 4.0
25
Les structures de données
Activité 3
1- Remplir un tableau permettant de montrer le type du résultat pour les différents
types d'opérandes admis en ce qui concerne les opérateurs binaires multiplicatifs.
2- Remplir un tableau permettant de montrer le type du résultat pour les différents
types d'opérandes admis en ce qui concerne les opérateurs binaires additifs.
Réponses :
1- Opérateur type opérande 1 type opérande 2 type résultat
Entier Entier Entier
Réel Réel Réel
* Réel Entier Réel
Entier Réel Réel
Entier Entier Réel
Entier Réel Réel
/ Réel Entier Réel
Réel Réel Réel
DIV Entier Entier Entier
MOD Entier Entier Entier
2-
Opérateur type opérande 1 type opérande 2 type résultat
Entier Entier Entier
Entier Réel Réel
+,- Réel Entier Réel
Réel Réel Réel
26
Les structures de données
Réponses :
1- a- Opérateur Type opérande Type résultat
NON Booléen Booléen
Remarque :
Tous les types que nous avons vus sont des types ordonnés. Toute comparaison
entre deux éléments de même type ou de types compatibles est possible.
Activité 5
1- Quel est le résultat d'une comparaison de deux éléments de même type ou de
types compatibles ?
2- Pour x=32 et y=36 , quelle est la valeur de x<y ?
Réponses :
1- Le résultat de la comparaison est booléen (VRAI ou FAUX).
2- x < y vaut VRAI
27
Les structures de données
Activité 6
1- Quel est l'ordre de priorité dans le calcul des expressions ?
2- Donner les étapes de calcul de l'expression 31+7*10.
3- Evaluer l'expression 55 + 6 - 10
4- Dans le cas où on veut imposer un autre ordre, que doit-on faire ?
5- Evaluer les expressions suivantes :
a- (44 * x + y) avec x = 2 et y =4
b- (y + 44 * x) avec x = 2 et y=4
c- ((y + 44) * x) avec x = 2 et y =4
Réponses :
1- Cet ordre est le suivant :
1) Les parenthèses.
2) Les opérateurs unaires.
3) Les opérateurs multiplicatifs.
4) Les opérateurs additifs.
5) Les opérateurs relationnels.
2- 1ère opération 7 * 10 = 70 2ème opération 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 opérateurs de même priorité, on commence par celui qui est
le plus à gauche.
4- Dans ce cas, on doit utiliser des parenthèses.
31 + 7 * 10 vaut 101 mais si on écrit (31 + 7) * 10 le résultat est 380.
5- a- 92 b- 92 c- 96
Retenons
Une expression est composée d'opérateurs et d'opérandes et son évaluation pro-
duit une valeur.
- On distingue les expressions arithmétiques, et les expressions logiques.
- L'évaluation d'une expression se fait toujours selon l'ordre de priorité des
opérateurs.
28
Les structures de données
Exercices
Exercice 1
1- Donner les expressions arithmétiques correspondantes aux expressions sui-
vantes écrites en Pascal :
sqrt(2 * a + 3 / b - 2) / 3 + x
4*x/c*6-x
10 * x / 2 + 4
2- Réciproquement, écrire en Pascal les expressions arithmétiques suivantes :
4x 2 +2x 5 y+2 x 2 yE
+1
5y 10x x
x+ y
2 2
Exercice 2
Evaluer les expressions logiques en A, B, C, et D pour chacune des combinaisons
(p,q,r,s) suivantes :
Exercice 3
Cette écriture permettant de vérifier si le caractère C est une voyelle est erronée .
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 priorités dans lequel une expression doit être évaluée.
• Comment évaluer deux opérateurs ayant la même priorité ?
• Compléter le tableau suivant par le type du résultat :
Opérateur Type opérande 1 Type opérande 2 Type du résultat
DIV entier entier .....
/ entier entier .....
+ réel entier .....
- entier entier .....
29
Les structures de données
Leon 3
Objectifs spécifiques :
Plan de la leçon :
Retenons
Exercices
30
Les structures de données
Leon 3
Le type scalaire numr et le type intervalle
La consience des representations qui suffit pour différencier un objet
d'un autre. C'est la clarté. Mais celle qui rend claire la composition
des représentations, c'est la distinction.
KANT
Outre les types standard présentés dans la première leçon, nous pouvons définir de nou-
veaux types appelés souvent types utilisateur.
Activité 1
Nous voulons définir un type que nous appelons ANNEE_SCOLAIRE contenant
les dix mois de l'année scolaire et manipuler les valeurs de ce type.
1- Donner le tableau de déclaration des nouveaux types illustrant le type
ANNEE_SCOLAIRE.
2- L'affectation suivante est-elle correcte sachant que mois est une variable de type
ANNEE_SCOLAIRE ?
mois o octobre
3- Quel est l'ordre de ces constantes ?
4- Quels sont les opérateurs applicables à ces valeurs ?
5- Evaluer les expressions suivantes :
a- SUCC (septembre)
b- PRED (juin)
6- La déclaration du type énuméré IMPAIR = (1, 3, 5, 7) est-elle possible ?
7- Déclarer en Pascal
a- un type scalaire énuméré contenant les mois à 30 jours.
b- une variable intitulée mois_court du type mois_a_trente.
31
Les structures de données
Réponses :
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 éléments du type ANNEE_SCOLAIRE.
3- L'ordre sur ces valeurs est le suivant : septembre < octobre < … < juin. Par
ailleurs, on peut appliquer la fonction Ord sur ces valeurs pour déterminer leurs
numéros d'ordre, ainsi Ord (septembre) vaut 0 et Ord (octobre) vaut 1 et ainsi
de suite.
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 déclaration est interdite car 1, 3, 5 et 7 sont des valeurs qui appartiennent
au type prédéfini ENTIER.
Dans le langage Pascal, la déclaration d'un type scalaire énuméré et celle d'une
variable de ce type se font comme suit :
32
Les structures de données
Activité 2
1- Elaborer un tableau de déclaration des nouveaux types illustrant un type inter-
valle intitulé mois de 1 à 12 et un type intervalle concernant le premier trimestre
de l'année scolaire.
2- a- Quels sont les bornes inférieure et supérieure du type mois ?
b- Quels sont les valeurs que peut prendre une variable du type mois ?
c- Quels sont les bornes inférieure et supérieure du type premier_trimestre ?
d- Quels sont les valeurs que peut prendre une variable du type premier_trimestre?
3- Déclarer en Pascal un type intervalle mois, un type intervalle jours et deux varia-
bles mois_actuel et j de types respectifs mois et jours.
Réponses :
1- Tableau de déclaration des nouveaux types
Types
Mois = 1. . 12
ANNEE_SCOLAIRE = (septembre, octobre, novembre, decembre, janvier,
fevrier, mars, avril,mai, juin)
Premier_trimestre = septembre .. decembre
2- a- Les bornes de Mois sont 1 et 12 prises comme valeurs entières.
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 déclaration 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 données
Remarques :
Une variable d'un type intervalle possède toutes les propriétés du type de base dont
l'intervalle est issu. Toutefois, sa valeur doit être comprise au sens large entre les bor-
nes de l'intervalle.
L'intérêt de ce type réside dans le fait qu'il permet une meilleure lisibilité de l'algo-
rithme et du programme.
Retenons
Le type scalaire par énumération définit un ensemble ordonné et fini de valeurs
désignées par des identificateurs définis par l'utilisateur.
Le type intervalle possède les propriétés d'un type scalaire discret ordonné (entier,
caractère et scalaire énuméré).
La définition d'un intervalle est décrite par la donnée de deux constantes représen-
tant respectivement la "Borne Inférieure" et la "Borne Supérieure" appartenant à
un type scalaire discret ordonné et telle que Borne Inférieure < Borne Supérieure.
34
Les structures de données
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.
Exercice 2
Est-ce que la déclaration de l'énumération suivante est correcte? Justifier votre
réponse.
Pair = (0,2,4) ;
Exercice 3
En utilisant le type intervalle, déclarer en algorithmique et en Pascal les variables
suivantes :
– jour
– mois
Exercice 4
En utilisant le type scalaire énuméré, déclarer en algorithmique puis en Pascal les
types suivants :
– couleur_de_base
– jour_de_la semaine
35
Les structures de données
Leon 4
Objectifs spécifiques
Plan de la leçon
Retenons
Exercices
36
Les structures de données
Leon 4
Définition :
En Pascal
VAR
ident_tableau:ARRAY[Borne_inf..Borne_sup]OF Type_élément;
Où :
Ident_tableau : Identificateur du nouveau tableau que nous voulons définir.
Borne_Inf .. Borne_Sup : intervalle correspondant à l'ensemble des valeurs des
indices du tableau.
37
Les structures de données
Activité 1
1- Donner le tableau de déclaration des objets pour un vecteur de 5 éléments de
type réel pouvant contenir les notes des élèves.
2- Déclarer le tableau NOTES en Pascal.
3- Affecter à chaque élément la note correspondante suivant le tableau suivant :
NOTES 12 13.5 10 15.5 16
1 2 3 4 5
Réponses :
1- La déclaration du tableau se fera comme suit :
Tableau de déclaration des objets
Objet Type nature Rôle
NOTES Tableau de 5 réels Tableau servant à contenir les notes de 5 élèves
2- Dans le langage Pascal, on aurait effectué la déclaration suivante :
VAR
NOTES : ARRAY[1..5] OF REAL;
3- NOTES [1] est le 1er élément du tableau NOTES.
NOTES [2] est le 2ème élément du tableau NOTES.
NOTES [3] est le 3ème élément du tableau NOTES.
NOTES [4] est le 4ème élément du tableau NOTES.
NOTES [5] est le 5ème élément du tableau NOTES.
NOTES [1] o 12
NOTES [2] o 13.5
NOTES [3] o 10
NOTES [4] o 15.5
NOTES [5] o 16
38
Les structures de données
Remarques :
2) Nous pouvons lire et écrire un élément du tableau (voir chapitre 2). Nous pouvons
modifier un élément par une instruction d'affectation.
Exemple : NOTES [4] o 17.50
3) Les opérations possibles sur un élément du tableau sont les mêmes que celles
définies sur une variable de même type.
Exemple
Tableau de déclaration des nouveaux types
Types
Eleves = tableau de 30 chaînes de caractères
Moyennes = tableau de 30 réels
Comptes = tableau de 26 entiers
Activité 2
Soit la séquence 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- Déclarer le tableau A.
2- Quel est le contenu de chaque élément du tableau A ?
39
Les structures de données
Réponses
1- Déclaration
A 10 7 1 7 17
1 2 3 4 5
Retenons
– Les structures de données vues dans cette leçon sont les tableaux (suite de
variables de même type repérées par des indices).
– Avant d'utiliser un tableau, il faut le déclarer.
– Il faut bien faire la différence entre l'indice d'un élément et le type des éléments.
40
Les structures de données
Exercices
Exercice 1
Elaborer un tableau de déclaration des objets relatifs aux :
• noms des employés
• leurs nombres de jours travaillés
• leurs salaires
Exercice 2
1- Déclarer le tableau JOURS qui contient les sept jours de la semaine.
2- De même, déclarer le tableau MOIS permettant de regrouper les douze mois de
l'année.
Exercice 3
Soit le tableau suivant :
T 14 10 19 84 92
Exercice 4
Soit le tableau de SALAIRES exprimés en Dinars.
1- Donner les cinq affectations permettant de remplir le tableau SALAIRES par les
données précédentes.
2- Ranger, dans un deuxième tableau SALAIRES_MI, les équivalences des élé-
ments 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 séquence d'affectations suivantes :
V[1] o 300
V[2] o 50
W[1] o V[1] + V[2]* 2
41
Les structures de données
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 classés par longueur (d'abord
tous les mots d'une lettre, puis de deux lettres,…, puis de 8 lettres (taille maximale
du mot)).
Un deuxième 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 déclarations et les affectations nécessaires.
42
CHAPITRE
Chapitre 2
Les actions
élémentaires
simples
Objectifs :
Plan du chapitre :
Leçon 1 :
L'affectation
Leçon 2 :
Les opérations d'entrée / sortie
Les actions élémentaires simples
Leon 1
L'affectation
Objectifs spécifiques :
Plan de la leçon :
I. Introduction
II. Définition
Retenons
Exercices
44
Les actions élémentaires simples
Leon 1
L'affectation
J'entends par attribut ce que l'entendement perçoit d'une
substance comme constituant son essence.
SPINOZA
I. Introduction
Dans cette leçon, nous allons revenir plus en détail sur l'action élémentaire intitulée
"affectation". Comme nous l'avons vu au chapitre précédent, l'affectation est l'action
ou l'instruction élémentaire 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'affecta-
tion.
Activité 1
Soit la séquence d'instructions suivante :
1) Xo 2
2) Yo X*X
3) Yo Y*Y
4) Yo Y*X
5) Yo Y*Y
1- Dresser un tableau (traces de la séquence algorithmique) pour déterminer les
valeurs des variables X et Y après l'exécution des instructions précédentes.
2- Quel est le rôle de cette séquence d'instructions.
Réponse :
1- Trace de l'exécution des instructions précédentes
N° instruction X Y
1 2
2 2 4
3 2 16
4 2 32
5 2 1024
45
Les actions élémentaires simples
II. Définition
L'opération 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 évaluée puis le résultat sera
affectée à la variable située à 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 séquence 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- Déterminer la valeur de chacune des variables n, p et r après l'exécution de la
séquence ci-dessus.
2- Que fait cette séquence d'instructions?
3- Traduire cet algorithme en Pascal.
Réponse :
1- - La valeur de n vaut 19922944.
- La valeur de p vaut 19456.
- La valeur de r vaut 19.
2- Cette séquence convertit une capacité mémoire donnée en bits en son équiva-
lent en octets, kilo octets et méga octets.
Traduction en Pascal
PROGRAM CONVERSION;
USES WINCRT;
VAR
m,n,p,r : LONGINT;
BEGIN
m := 159383552;
n := m DIV 8;
p := n DIV 1024;
r := p DIV 1024;
END.
Vous allez remarquer qu'en exécutant ce programme, vous n'allez rien voir à l'écran.
Dans la leçon suivante, nous allons étudier comment afficher des méssages et des
résultats à l'écran.
46
Les actions élémentaires simples
Exemples :
Analyse
Pascal Commentaire
et algorithme
Yo 7 Y:=7; La variable Y reçoit la valeur 7.
Ch o "cible" Ch : = 'cible'; La chaîne Ch reçoit la chaîne cible.
La valeur de la variable X devient égale à la
XoY X : = Y;
valeur de la variable Y.
La valeur de la variable L devient égale à la
L o long(Ch) DIV 2 Lolength(Ch) DIV 2;
longueur de la chaîne Ch divisée par deux.
La valeur de la variable Y devient égale à
Y o Y+1 Y : = Y+1;
sa valeur actuelle incrémentée de 1.
Remarques :
NB. : On suppose que le mot est une chaîne de caractères dont la taille est supé-
rieure à trois.
47
Les actions élémentaires simples
Analyse
Nom = CRYPT
S L.D.E. O.U.
11 Résultat = Ecrire (ch ) ch
10 Insère (c,ch,p) p
9 Efface(ch,p,1) c
8 Convch( ORD(Ch[p]),c) l
7 po(1+l) DIV 2 aux
6 Insère ( aux, ch, 1)
5 Efface(ch,1,1)
4 ch[l] o ch[1]
3 aux o sous-chaine(ch,l,1)
2 l o long(ch)
1 ch = Donnée ("Entrer une chaîne de caractères: ")
12 Fin CRYPT
Algorithme
0) Début CRYPT
1) Ecrire ("Entrer une chaîne de caractères: "), 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) Insère (aux,ch, ",1)
7) po(1+l) DIV 2
8) Convch( ORD(Ch[p]),c)
9) Efface(ch,p,1)
10) Insère (c,ch,p)
11) Ecrire (ch )
12) Fin CRYPT
48
Les actions élémentaires simples
Traduction en Pascal
PROGRAM CRYPT;
USES WINCRT;
VAR ch,aux,c: STRING;
l,p:INTEGER;
BEGIN
WRITE ('Entrer une chaîne de caractères: ');
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 située à gauche de l'affectation doit avoir le même type
ou un type compatible avec celui du résultat de l'évaluation de l'expression placée
à droite du symbole d'affectation.
49
Les actions élémentaires simples
Exercices
Exercice 1
Soit la séquence 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 séquence algorithmique précédente pour déterminer les va-
leurs des variables X,Y et Z après l'exécution des séquence d'instructions ci-dessus.
Exercice 2
1) Faire une analyse, écrire un algorithme puis la traduction en Pascal du pro-
gramme intitulé PERMUT qui permet de permuter les contenus de deux varia-
bles X et Y en utilisant une variable auxiliaire.
2) Donner une deuxième méthode permettant de résoudre cet exercice sans l'utili-
sation d'une variable auxiliaire.
Exercice 3
Soit la séquence d'instructions suivante :
1) X o 19.7
2) Y o 114
3) K o (X + Y - ABS(X-Y))/2
4) L o (X + Y + ABS(X-Y))/2
Exercice 4
Écrire un algorithme qui saisit un temps en seconde puis le convertit en jours,
heure, minutes et secondes.
50
Les actions élémentaires 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 chaînes de caractères et B un tableaux de 2 entiers.
Soit la séquence 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]
- insérer(ch,A[3], 11)
- B[2] o long(A[1] )
Questions:
1) Quel est le contenu de chaque élément 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 numérique prise par un appareil photo numérique de sept mégapixel
de résolution 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 nom-
bre 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 exprimée 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 = corconférence de l'orbite/
(365 jours*24heures*3600 secondes).
- La corconférence de l'orbite= 2* * distance moyenne Terre-Soleil
51
Les actions élémentaires simples
Leon 2
Objectifs spécifiques
Plan de la leçon
Retenons
Exercices
52
Les actions élémentaires simples
Leon 2
Conduire par ordre mes pensées, en commencant par les objets les
plus simples et les plus aisés à connaitre, pour monter peu à peu,
comme par degrés, jusqu'à la connaissance des plus composés.
DESCARTES
I. L'opération de sortie
Activité 1
Effectuer une analyse, écrire un algorithme et faire la traduction en Pascal du pro-
gramme intitulé DISTANCE qui convertit une distance n = 24 pouces en son équi-
valent pieds et mètres. Afficher les résultats.
On rappel que :
- 1 pied =12 pouces
- 1 pouce = 2.54 cm
Analyse
Nom = DISTANCE
S L.D.E. O.U.
4 Résultat = Ecrire("La mesure en mètre vaut : ",m) m
Ecrire("La mesure en pied vaut : ",p) p
3 m o (n* 2.54) / 100 n
2 p o n div 12
1 n o 24
5 Fin DISTANCE
53
Les actions élémentaires simples
Algorithme
0) Début DISTANCE
1) n o 24
2) p o div 12
3) m o (n* 2.54) / 100
4) Ecrire("La mesure en mètre 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 mètre vaut :',m);
END.
I.1 Définition
La sortie de données est l'action convenue élémentaire qui consiste à écrire une don-
née sur un périphérique de sortie tel que l'écran, l'imprimante, etc.
Activité 2
Effectuer une analyse, écrire un algorithme et faire la traduction en Pascal du pro-
gramme intitulé INVERSE qui saisit un entier de trois chiffres puis détermine le
nombre correspondant lorsqu'on l'écrit à l'envers.
Exemple : 123 devient 321
et 120 devient 21
54
Les actions élémentaires simples
Analyse
Nom = INVERSE
S L.D.E. O.U.
6 Résultat = Ecrire (I) I
5 I o C+(D*10)+(U*100) C
4 U o E MOD 10 D
3 D o (E DIV 10) MOD 10 U
2 C o E DIV 100 E
1 E = Donnée("Donner un entier naturel de trois chiffres ")
7 Fin INVERSE
Algorithme
0) Début 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
Les actions élémentaires simples
Un cas d'éxecution
Exemple 1 :
Analyse et algorithme
Ecrire(long*larg)
Ecrire("la surface d'un rectangle est : ", long*larg)
Ecrire("la surface d'un rectangle est : ", long ,"* ",larg,"= ", s)
Exemple 2 :
Analyse et algorithme Pascal
Ecrire (age) WRITE (age);
Ecrire (Nom," ",prénom) WRITELN (Nom,' ',prénom);
Ecrire (Nom," ",prénom," a pour age : ",age) WRITELN (Nom,' ',prénom,' a pour age : ' ,age);
Remarques :
• En Pascal l'affichage d'un texte est placé entre apostrophes.
• La procédure WRITE affiche et laisse le curseur juste après le dernier caractère
affiché.
• La procédure WRITELN provoque un retour à la ligne après l'affichage.
56
Les actions élémentaires simples
I.3.1. Introduction
Dans le langage Pascal, l'écran est par défaut, divisé en colonnes de largeur de 10
caractères, 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 facilités
offertes par le langage. On pourra fixer la largeur de la colonne ainsi que le nombre
de décimales s'il s'agit de l'écriture d'un réel.
Pour chacun des activités suivantes, interpréter les différents affichages et écrire le
programme en Pascal en effectuant vous-même les modifications.
Activité 3
PROGRAM Format1;
USES WinCrt;
CONST Entier1 = 114;
Entier2 = -9999999;
BEGIN
WRITELN ('...Test sur les entiers...');
WRITELN ('123456789012345678901234567890');
WRITELN ('------------------------------');
WRITELN ( Entier1:2);
WRITELN ( Entier1:3);
WRITELN ( Entier1:5);
WRITELN ( Entier1:24, Entier2);
END.
57
Les actions élémentaires simples
L'exécution donne :
Interprétation :
- L'instruction WRITELN (Entier1:5) permet d'afficher la valeur de l'entier Entier1 sur
5 caractères.
- Lorsque le nombre de caractères que l'on précise pour l'affichage est supérieur ou
égal à ce qui est requis, la valeur est affichée en étant justifiée à droite.
- Si on fournit un nombre de caractères inférieur à ce qui est requis pour l'affichage
alors le compilateur n'en tient pas compte et affiche le résultat sur un nombre correct
de caractères.
Syntaxe :
58
Les actions élémentaires simples
L'exécution donne :
Interprétation :
- Pour les nombres réels, la syntaxe est étendue puisque nous voyons apparaître un
second ":" suivi d'un nombre. La première séquence a la même signification qu'avec
les entiers ; par exemple, WRITELN (Réel1 :5 :0) ; provoquera l'affichage de ce nom-
bre sur 5 caractères (si c'est possible).
- La seconde séquence précise le nombre de décimales que nous désirons afficher
pour le nombre en question.
- Si vous ne précisez pas le nombre de décimales alors le compilateur optera pour la
notation scientifique en puissance de 10.
Syntaxe :
Activité 5
PROGRAM Format3;
USES WinCrt;
CONST Ch1 = 'Pêche';
Ch2 = 'sous-marine' ;
59
Les actions élémentaires simples
BEGIN
WRITELN ('...Test sur les chaines de caracteres...');
WRITELN ('123456789012345678901234567890');
WRITELN ('------------------------------');
WRITELN ( Ch1);
WRITELN ( Ch1:5);
WRITELN ( Ch1:7);
WRITELN ( Ch1,Ch2);
WRITELN ( Ch1:7,Ch2:4);
WRITELN ( Ch1:7,Ch2:12);
END.
L'exécution donne :
Syntaxe :
BEGIN
WRITELN ('...Test sur les caracteres...');
WRITELN ('123456789012345678901234567890'
60
Les actions élémentaires simples
WRITELN ('------------------------------');
WRITELN ( Char1);
WRITELN ( Char1:2);
WRITELN ( Char1:3, Char2:4);
WRITELN ( Char1:3, Char2:5);
END.
L'exécution donne :
Syntaxe :
L'affichage d'un caractère se fait normalement à la place du curseur.
• WRITE (car : n) affiche le caractère à la position n et insertion d'espacement à gau-
che du caractère.
Remarque :
Formater les sorties signifie qu'on désire leur imposer un format d'affichage.
Activité 7
Écrire en Pascal le programme intitulé ConversionDinarEuro, qui convertit un mon-
tant en dinars en son équivalent en Euro et inversement.
Traduction en Pascal
PROGRAM ConversionDinarEuro;
USES WinCrt;
CONST
Affichage = 8; (* nombres affiches sur 8 caractères *)
Precision = 3; (* 2 décimales *)
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 élémentaires 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.
Analyse
Nom = MUSIQUE
S L.D.E. O.U.
6 Résultat = Ecrire ("la taille de cette musique en MO est : ",T) T
5 T o F*R*V*D DIV (1024*1024*8) V
4 V = Donnée ("Entrer le nombre de voies: ") R
3 R = Donnée ("Entrer la résolution en bits: ") F
2 F = Donnée ("Entrer la fréquence d'échantillonnage en HZ: ") D
1 D = Donnée ("Entrer la durée en secondes : ")
7 Fin MUSIQUE
62
Les actions élémentaires simples
Algorithme
0) Début MUSIQUE
1) Ecrire ("Entrer la durée en secondes : "), Lire(D)
2) Ecrire ("Entrer la fréquence d'échantillonnage en HZ : "), Lire(F)
3) Ecrire ("Entrer la résolution 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 octéts*}
BEGIN
WRITELN('Entrer le temps d''enregistrement en secondes : ');
READLN(D);
WRITELN('Entrer la fréquence d''échantillonnage en HZ: ');
READLN(F);
WRITELN('Entrer la résolution 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'exécution
63
Les actions élémentaires simples
II. 1 Définition
Une entrée consiste à introduire une donnée à partir d'une source d'entrée (clavier,
souris, stylo optique …). C'est une opération qui permet d'affecter à une variable en
mémoire, une valeur de même 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 numérique en méga octet (MO), d'une dimension
(hauteur, largeur) exprimées en pouces et d'une résolution en dpi (points par
pouce).
Analyser ce problème et en déduire l'algorithme et le programme Pascal cor-
respondant.
NB.
- La résolution indique le nombre de points sur une unité de longueur de l'image.
- Le nombre de pixels dans une image = hauteur * résolution* longueur *résolu-
tion
- L'image est codée 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'oc-
tets par pixel .
Exemple :
Soient les caractéristiques suivantes d'une image :
- largeur 4 pouces
- hauteur 5 pouces
- résolution 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 Nom = IMAGE
S L.D.E. O.U.
8 Résultat = Ecrire(n,p1) n
7 P1 o p / (1024*1024) p1
6 p o n*c c
5 n o l*r*h*r p
r
4 c=DONNEE ("Entrer le codage de l'image : ")
h
3 r=DONNEE("Entrer la résolution de l'image: ")
l
2 h=DONNEE ("Entrer la hauteur de l'image : ")
1 l=DONNEE("Entrer la largeur de l'image: ")
9 Fin IMAGE
64
Les actions élémentaires simples
Algorithme
0) Début IMAGE
1) Ecrire("Entrer la largeur de l'image: "); Lire(l)
2) Ecrire("Entrer la hauteur de l'image: "); Lire (h)
3) Ecrire("Entrer la résolution de l'image: "); Lire(r)
4) Ecrire("Entrer le codage de l'image: "); Lire(c)
5) n o l*r*h*r
6) p o n*c
7) P1 o p / (1024*1024)
8) Ecrire(n,p1)
9) 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 résolution de l''image: '); READLN (r);
WRITELN ('Entrer le codage de l''image: '); READLN (c);
n:= l*r*h*r;
p:= n*c;
P1:= p / (1024*1024);
WRITE(n,p1);
END.
65
Les actions élémentaires simples
Exemples :
Analyse Algorithme Pascal
X = donnée Lire(X) READLN (X);
READLN (variable);
Y= donnée ("Entrer Y") Lire (variable) ou
READ (variable);
READLN (var1,var2,var3);
(ch1,ch2,ch3) =donnée Lire (var1,var2,var3) ou
READ (var1,var2,var3);
Remarques :
• Le langage PASCAL comprend deux procédures standards de lecture : READ et
READLN.
• Les instructions READ et READLN permettent de transférer des données vers des
variables situées dans la mémoire centrale à travers des périphériques d'entrée.
Par défaut, le périphérique d'entrée utilisé est le clavier.
• Lorsqu'on utilise une seule instruction READLN pour lire plusieurs variables, on fait
entrer les valeurs séparées par des virgules. Cependant, dans le cas où chaque
variable est lue séparément, un retour de chariot est nécessaire, après chaque
valeur entrée à partir du clavier, pour déclencher la lecture de celle-ci.
• La seule différence qui existe entre READLN et READ, c'est que READLN com-
mande un changement de ligne après la lecture de la liste des variables spécifiées
comme paramètres. Ce changement de ligne ne prend effet qu'à la prochaine lec-
ture occasionnée par un autre énoncé READ ou READLN.
66
Les actions élémentaires simples
Activité 10
Écrire en Pascal le programme intitulé DATE, qui initialise la date maintenue par le
système d'exploitation, en utilisant la procédure SetDate (…) de la bibliothèque
WinDos.
NB.
- La syntaxe de la procédure est : procedure SetDate(Annee, Mois, jour);
- les paramètres valides sont 1980..2099 pour Annee, 1..12 pour Mois et 1..31
pour Jour. Si la date est invalide, la demande est ignorée.
Traduction en Pascal
PROGRAM DATE;
USES WinCrt,WinDos;
VAR
a,m,j: WORD;
BEGIN
WRITE ('Entrez l''année : ');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 définition est de 0 à 65535.
Retenons
– Pour afficher à l'écran une donnée quelconque, on utilise l'instruction élémen-
taire 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 décimales s'il s'agit de l'écriture d'un réel.
– Pour saisir une donnée via le clavier pour la mettre dans une variable donnée,
on utilise l'instruction élémentaire d'entrée exprimée par le verbe Lire ou le mot
DONNÉE et en Pascal par l'instruction READ ou READLN.
67
Les actions élémentaires simples
Exercices
Exercice 1
Écrire un algorithme permettant de calculer et d'afficher la durée entre deux horai-
res exprimés en heures, minutes, secondes. Cette durée sera exprimée aussi en
heures, minutes et secondes.
Exercice 2
Faire une analyse, déduire 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 mathématique suivante : 1+2+…..+n =(n*(n+1))/2.
Exercice 3
X et Y étant deux valeurs numériques. Écrire une analyse, un algorithme et la tra-
duction en Pascal du programme intitulé CALCUL qui effectue la somme, le pro-
duit et la moyenne arithmétique 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 inti-
tulé POMPAGE qui permet de calculer le débit 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 débit 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 même itinéraire.
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 créer un répertoire, on utilise la procédure prédéfinis MkDir(Path: string) de
l'unité DOS.
Écrire un programme en Pascal, qui permet de créer un répertoire ; le nom du
répertoire et le chemin sont saisis au clavier
Exemple : MkDir('C:\TEST'); permet de créer le répertoire 'test' sous la racine C :.
68
Les actions élémentaires simples
Exercice 7
Écrire un programme qui demande à l'utilisateur les coordonnées de deux points
distincts du plan et qui affiche le coordonnées du point milieu.
Exercice 8
Préciser le résultat obtenu à la sortie d'un programme par les séquences d'instruc-
tions suivantes :
69
CHAPITRE
Chapitre 3
Les structures
de contrôle
conditionnelles
Objectifs :
Plan du chapitre :
Leçon 1 :
La structure conditionnelle
simple
Leçon 2 :
La structure conditionnelle
généralisée
Leçon 3 :
La structure conditionnelle
à choix
Les structures de contrôle conditinnelles
Leon 1
La structure de contrle
conditionnelle simple
Objectifs spécifiques :
Plan de la leçon :
I. Introduction
Retenons
Exercices
71
Les structures de contrôle conditinnelles
Leon 1
La structure de contrle conditionnelle simple
L'art est une certaine disposition, accompagnée de règle
vraie, capable de produire; le défaut d'art, au contraire, est
une disposition à produire accompagnée de règle fausse.
ARISTOTE
I. Introduction
Vous avez vu en 3ème année que les structures de contrôle conditionnelles permettent
à un ordinateur de prendre des décisions. En effet, les opérations à accomplir peu-
vent varier dans un algorithme selon les données fournies.
Par exemple :
- Aviser la date de validité d'un logiciel en version démonstration.
- Calculer le montant net d'une facture en fonction des remises accordées.
- Déclencher une alarme en fonction de l'état d'un détecteur.
- Donner les propriétés d'un nombre donné (pair, impair, premier …).
- Evaluer des sorties en utilisant des fonctions logiques.
- Déterminer la nature d'un caractère tapé au clavier.
Dans cette leçon, nous expliquerons comment écrire des algorithmes répondant à la
structure de contrôle conditionnelle simple.
Au niveau de l'analyse
Décision = [Initialisation] Si condition Alors ±
Instruction 1 Ensemble d'instructions
Instruction 2 ° exécutées
- - - - -
si la condition est valide
- - - - -
¯
Instruction n
FinSi
72
Les structures de contrôle conditinnelles
Remarques :
• L'initialisation et le traitement sont généralement des séquences formées de plu-
sieurs instructions. Nous obtenons donc l'écriture suivante :
Init i1
---
Décision = --- Si condition Alors
Init iP
Instruction 1 ±
Instruction 2 °
- - - - - Traitement
- - - - - ¯
Instruction n
FinSi
• 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 exécutées.
• La condition peut être une condition composée de plusieurs autres propositions
logiques liées par les opérateurs booléens.
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
Les structures de contrôle conditinnelles
Activité 1
On se propose d'écrire un programme intitulé REGULATEUR qui affiche le mes-
sage "Régulateur déclenché" et produit un bip sonore si la température n'est pas
comprise entre 18 °C et 24 °C.
Analyser ce problème et en déduire l'algorithme correspondant.
NB. On rappelle que CHR(7) produit un bip sonore.
Analyse
Nom = REGULATEUR
S L.D.E. O.U.
3 Résultat = Ecrire (Bip,Message) Bip
Message
2 (Bip,Message) = [Bipo "", Message o "Régulateur non déclenché"] Temp
Si (Temp < 18) ou (Temp > 24) Alors
Message o " Régulateur déclenché"
Bip o CHR(7)
FinSi
4 Fin REGULATEUR
Algorithme
0) Début REGULATEUR
1) Écrire ("Entrer la valeur de la température : "), Lire (Temp)
2) [Bip o "", Message o "Régulateur non déclenché"]
Si (Temp < 18) ou (Temp > 24) Alors
Message o "Régulateur déclenché"
Bip o chr(7)
FinSi
3) Ecrire (Bip,Message)
4) Fin REGULATEUR
74
Les structures de contrôle conditinnelles
II.1.2. Définition
Une structure de contrôle conditionnelle est dite à forme simple réduite lorsque le
traitement dépend d'une condition. Si la condition est évaluée à « VRAI », le traite-
ment est exécuté.
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 température : ');
READLN(Temp);
Bip := '';
Message := 'Régulateur non déclenché';
IF(Temp < 18) OR (Temp > 24)
THEN
BEGIN
Message := 'Régulateur déclenché';
Bip := Chr(7);
END;
WRITE(Bip,Message);
END.
Activité 3
On se propose d'écrire un programme intitulé CLASSEMENT qui saisit 2 chaînes
de caractères puis les affiche en commençant par la plus longue. Si elles sont de
même longueur la première saisie sera affichée en premier.
Questions :
1) Analyser ce problème et en déduire l'algorithme correspondant.
2) Traduire l'algorithme CLASSEMENT en Pascal.
75
Les structures de contrôle conditinnelles
5 Fin CLASSEMENT
Traduction en Pascal
PROGRAM CLASSEMENT;
USES WINCRT;
VAR
Chaine1,Chaine2,Ch1,Ch2:STRING;
76
Les structures de contrôle conditinnelles
BEGIN
WRITE ('Entrer la Chaîne 1 : '); READLN(Ch1);
WRITE ('Entrer la Chaîne 2 : '); READLN(Ch2);
Chaine1 := Ch1;
Chaine2 := Ch2;
Instruction 1.1 ±
Instruction 1.2 Traitement 1
- - - - -
° Ensemble d'instructions exécutées
- - - - - ¯ si la condition est valide
Instruction 1.n
Sinon
Instruction 2.1 ±
Instruction 2.2 ° Traitement 2
- - - - -
- - - - - ¯ Ensemble d'instructions exécutées
Instruction 2.m si la condition est fausse
FinSi
Remarques :
• Lorsque l'évaluation de la condition produit la valeur :
VRAI seules les instructions du traitement 1 sont exécutées.
FAUX seules les instructions du traitement 2 sont exécutées.
• Chaque traitement peut comporter une ou plusieurs instructions.
• Les instructions du traitement 1 sont délimitées entre « Alors » et « Sinon » et cel-
les du traitement 2 le sont entre « Sinon » et « Finsi ».
77
Les structures de contrôle 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 ";" après le END qui précède le ELSE car la structure condition-
nelle n'est pas encore terminée.
Activité 4
Un interrupteur de courant électrique a deux états ON-OFF (1, 0). Selon le mon-
tage, un circuit électrique à deux interrupteurs peut réaliser les deux fonctions
logiques ET, OU.
Le principe d'une porte logique OU peut se résumer comme suit : Deux entrées et
une sortie. Suivant le niveau logique appliqué aux entrées (niveau 0 ou 1) la sortie
sera 0 ou 1.
78
Les structures de contrôle conditinnelles
Fonction OU (OR)
0 0 0
OU (OR)
0 1 1
1 0 1
1 1 1
Analyse
Nom = FN_LOGIQUE_OU
S L.D.E. O.U.
4 Résultat = Ecrire (LED) LED
K
3 LED = [ ] Si (K=0) ET (L=0) Alors
L
LED o "Éteinte"
Sinon
LED o "Allumée"
FinSi
2 L = Donnée ("Entrer l'état de l'interrupteur L : ")
1 K= Donnée ("Entrer l'état de l'interrupteur K : ")
5 Fin FN_LOGIQUE_OU
79
Les structures de contrôle 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 := 'Allumée';
WRITE (LED);
END.
II.2.2 Définition
Une structure de contrôle conditionnelle est dite à forme alternative lorsque le trai-
tement dépend d'une condition à deux états : si la condition est évaluée à « VRAI »,
le premier traitement est exécuté ; si la condition est évaluée à « FAUX », le second
traitement est exécuté.
Activité 5
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 orthonormée de l'ensemble des vec-
teurs du plan.
u perpendiculaire à v équivaut à x1 . x2 + y1 . y2=0.
80
Les structures de contrôle conditinnelles
Analyse
Nom = ORTHOGONAL
S L.D.E. O.U.
4 Résultat = Ecrire (Nature ) Nature
5 Fin ORTHOGONAL
4) Ecrire (Nature)
5) Fin ORTHOGONAL
Activité 6
81
Les structures de contrôle conditinnelles
Traduction en Pascal
PROGRAM ORTHOGONAL;
USES WINCRT;
VAR
Nature:STRING;
X1,y1,X2,Y2:REAL;
BEGIN
WRITE('Entrer les coordonnés du vecteur u: ');READLN(x1,y1);
WRITE('Entrer les coordonnés 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 contrôle conditionnelle simple est utilisée pour définir au maximum
deux résultats dépendant de l'évaluation d'une seule condition.
- Une structure de contrôle conditionnelle est dite à forme simple réduite lorsque
le traitement dépend d'une condition. Si la condition est évaluée à « VRAI », le trai-
tement est exécuté.
- Une structure de contrôle conditionnelle a une forme alternative si suivant la
valeur d'une condition, on exécute soit un traitement 1 soit un traitement 2.
82
Les structures de contrôle conditinnelles
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 carrée si elle existe.
Exercice 2
Demander un caractère à l'utilisateur et tester si ce caractère est majuscule ou
minuscule.
Exercice 3
Soit le tableau suivant :
Afficher l'état de la lampe S (allumée ou éteinte) suivant l'état de l'interrupteur K.
Fonction symbole Table de vérité Circuit électrique
Entrée K Sortie
OUI 0 1
0 1
Exercice 4
Ordonner dans le sens décroissant, trois entiers saisis au clavier.
Exercice 5
Saisir une chaîne de caractères et vérifier si elle est composée de plusieurs mots.
Exercice 6
Lire l'année et afficher si elle est éventuellement bissextile.
NB. Si l'année n'est pas divisible par 4, l'année n'est pas bissextile.
Exercice 7
L'université décide d'attribuer un e-mail à ses étudiants selon le modèle suivant :
Nom@Campus.net
Il y a cependant une restriction, si le nom excède sept caractères, il doit être tron-
qué.
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 contrôle conditinnelles
Exercice 8
On veut décrire le comportement d'un contrôleur pour une porte d'entrée par carte.
Ce contrôleur peut recevoir une indication de lecture d'une carte autorisée (a) ou
refusée (r).
Nous avons les contraintes suivantes:
– Si une carte est refusée, il faut sonner immédiatement.
– Lorsqu'une carte est autorisée, la porte s'ouvre.
On se propose de faire un programme intitulé CONTROLEUR qui lit l'état d'un lec-
teur de carte et affiche le message "Porte en cours d'ouverture" si la carte est auto-
risée, sinon produit un bip sonore si la carte est refusée.
Exercice 9
Un chef d'entreprise décide d'automatiser les horaires de début de travail, de
pause et de fin de travail. Le système consiste à déclancher une alarme et à affi-
cher un message à des heures bien précises de la journée.
NB.
- On rappelle que l'écriture de CHR(7) produit un bip sonore.
- La procédure prédéfinei GETTIME renvoie l'heure maintenue par le système d'ex-
ploitation.
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 même).
– Pair - impair
– Positif - négatif
84
Les structures de contrôle conditinnelles
Leon 2
Objectifs spécifiques
Plan de la leçon
I. Introduction
III. Définition
Retenons
Exercices
85
Les structures de contrôle conditinnelles
Leon 2
I. Introduction
Nous avons vu dans la leçon précédente qu'une structure conditionnelle simple
conduit à deux alternatives uniquement.
Dans certain problèmes faisant appel à la structure de contrôle conditionnelle, deux
situations ne suffisent pas, d'où l'intérêt de la structure de contrôle conditionnelle
généralisée qui résout des problèmes dans lesquels plusieurs alternatives sont envi-
sageables.
Remarques :
• Lorsque l'évaluation de la condition 1 produit la valeur :
VRAI, le traitement 1 sera exécuté puis l'exécution continue avec l'instruction qui
suit le Si généralisé.
FAUX, la condition 2 sera évaluée, si elle produit la valeur :
VRAI, le traitement 2 sera exécuté puis l'exécution continue avec l'instruction qui
suit le Si généralisé.
FAUX, la condition 3 sera évaluée et ainsi de suite.
86
Les structures de contrôle conditinnelles
• Si aucune des N-1 premières conditions ne produit la valeur VRAI, c'est le traite-
ment N qui sera exécuté.
• 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 préférable de mettre les événements 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 pro-
gramme intitulé NATURE_TRIANGLE, qui à partir de trois points donnés A, B et C
détermine et affiche la nature du triangle (isocèle en A, isocèle en B, isocèle en C,
équilatéral, quelconque).
Pré-analyse
Lorsqu'un triangle ABC est tel que AC = AB (les deux côtés d'extrémité A sont
égaux), alors on dit que le triangle est isocèle de sommet A. A est le sommet prin-
cipal du triangle. Le côté [BC], opposé à A, est appelé base du triangle.
Dans le plan cartésien, les points sont définis à l'aide de leurs coordonnées dites
cartésiennes.
Soient deux points A et B dans le plan cartésien. On appelle (xA,yA) les coordon-
nées du point A et (xB,yB) les coordonnées du point B. La distance AB dans le plan
vaut :
AB = ( x A x A )2 + ( x A x A )2
87
Les structures de contrôle conditinnelles
Analyse
Nom = NATURE_TRIANGLE
S L.D.E. O.U.
8 Résultat = Ecrire (Nature ) Nature
Algorithme
0) Début NATURE_TRIANGLE
1) Ecrire ("Entrer les coordonnés du point A: "), Lire(Xa,Ya)
2) Ecrire ("Entrer les coordonnés du point B: "), Lire(Xb,Yb)
3) Ecrire ("Entrer les coordonnés 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 contrôle conditinnelles
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 coordonnés du point A: '); READLN(Xa,Ya);
WRITE('Entrer les coordonnés du point B: '); READLN(Xb,Yb);
WRITE('Entrer les coordonnés 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 équilatéral'
ELSE IF AB=BC THEN
Nature:='Triangle isocèle en B'
ELSE IF AC=BC THEN
Nature:='Triangle isocèle en c'
ELSE IF AC=AB THEN
Nature:='Triangle isocèle en A'
ELSE
Nature:='Triangle quelconque';
WRITE(Nature);
END.
89
Les structures de contrôle conditinnelles
III. Définition
Activité 2
Dans le but de déterminer la nature d'une solution chimique on utilise un pH_mètre.
Une solution peut être :
- Acide fort si le pH est inférieur à 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 supérieur à 13
Pré-analyse
On constate que le pH_mètre ne peut prendre que des valeurs entières, on pourra
le considérer comme une variable de type entier.
La solution chimique peut être Acide, Neutre ou Basique.
Analyse
Nom = SOLUTION
S L.D.E. O.U.
3 Résultat = Ecrire (Nature ) Nature
pH
2 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
1 pH = Donnée ("Entrer le pH de la solution: ")
4 Fin SOLUTION
90
Les structures de contrôle conditinnelles
0) Début SOLUTION
1) pH = Donnée ("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 contrôle conditionnelle généralisée offre la possibilité de résoudre
des problèmes comportant plus de deux traitements. Une fois qu'une condition est
évaluée et qu'un traitement est exécuté les autres ne le seront pas. Cette écono-
mie sur les tests se répercute sur le temps d'exécution du programme.
Au niveau de l'analyse
Au niveau de Pascal
et de l'algorithme
[Initialisation] - - -;
La structure Si cond1 Alors trait1 IF cond THEN trait1
de contrôle Sinon Si cond2 Alors trait2 ELSE IF cond2 THEN trait2
conditionnelle Sinon Si cond3 Alors trait3 ELSE IF cond2 THEN trait3
généralisée - - - - - - - -
Sinon Si cond n-1 Alors trait n-1 ELSE IF cond n-1 THEN trait n-1
Sinon trait n ELSE trait n ;
FinSi
91
Les structures de contrôle conditinnelles
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 débit correspondant.
Port E/S Débit
Blue tooth 1 Mbits/S
Infrarouge 12 Mbps
IEEE1394 100 - 400 Mbits/s
USB1 12 Mbits/s
USB2 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 réel x1, le choix de l'opération et un deuxième réel x2, puis affiche le
résultat de l'application de l'operateur choisi sur x1 et x2.
prévoir un message d'erreur au cas où une entrée incorrecte est faite.
Exercice 3
Saisir deux entiers x et y, le premier en décimal et le deuxième en binaire et véri-
fier si x est supérieur, inférieur ou égal à y puis affiche le résultat.
Exercice 4
Écrire un programme Pascal intitulé PROTOCOLE qui lit le nom d'un service inter-
net, puis affiche le protocole correspondant.
Exercice 5
Le conseil scientifique d'une institution effectue un vote pour décider de l'achat de
materiels informatiques.
On vous demande d'écrire un programme qui affiche la décision à prendre par le
conseil sachant qu'elle est :
« Reportée si le pourcentage des neutress est stictement supérieur à 50%, sinon
elle est « acceptée » si le pourcentage des favorables est strictement supérieur à
celui des défavorables et « réfusée » dans le cas contraire.
Exercice 6
Lire le type d'un fichier et afficher les extensions possibles.
Exemple :
Type de fichier : Image
Extensions possibles : BMP / TIFF / GIF
92
Les structures de contrôle conditinnelles
Leon 3
Objectifs spécifiques :
Plan de la leçon :
I. Introduction
III. Définition
Retenons
Exercices
93
Les structures de contrôle conditinnelles
Leon 3
I. Introduction
Si la structure conditionnelle généralisée 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 différentes valeurs que peut
contenir une variable de type scalaire (sélecteur).
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 pro-
gramme intitulé MULTIPLE5, qui saisit un entier N et détermine lequel parmi ces
nombres est multiple de 5.
Pré-analyse
Pour vérifier que le premier entier N est multiple de cinq, il suffit de montrer que le
reste de la division entière de N par 5 vaut 0.
Si le reste est différent de 0 il suffit d'ajouter à N la valeur (5-reste) pour que l'en-
tier (N +5-reste) soit multiple de 5.
94
Les structures de contrôle conditinnelles
Analyse
Nom = MULTIPLE5
S L.D.E. O.U.
4 Résultat = Ecrire (M ) M
3 M = [ ] Selon R Faire R
0 : M o "N" N
1 : M o "N +4"
2 : M o "N +3"
3 : M o "N +2"
4 : M o "N +1"
Fin Selon
2 R o N MOD 5
1 N = Donnée ("Entrer un entier N : ")
4 Fin MULTIPLE5
Algorithme
0) Début 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 contrôle 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. Définition
Une structure de contrôle conditionnelle est dite à choix lorsque le traitement
dépend de la valeur que prendra le sélecteur. Ce sélecteur doit être de type scalaire
(entier ou caractère).
Activité 2
Effectuer une analyse, écrire un algorithme et faire la traduction en Pascal du pro-
gramme intitulé JOUR, qui saisit une date sous la forme jj/mm/aaaa (chaîne de 10
caractères) où jj représente le jour, mm le mois, aaaa l'année et détermine le jour
de la semaine.
Parmi plusieurs possibilités, on peut utiliser la congruence de Zeller dont le résul-
tat 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 numération Romaine (1qmars, 2qavril, ...
10qdécembre, 11qjanvier, ..).
- aaaa représente une année donnée en commençant 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 désigne la partie entière.
- JJ correspond à un numéro du jour du mois mm de l'année aaaa.
- M représente le rang du mois avec la numération Romaine.
- (aaaa div100 ) et (aaaa mod 100) sont mis respectivement pour avoir les
deux premiers et les deux derniers chiffres de l'année.
Les jours de la semaine sont numérotés selon leur rang, sauf que le samedi cor-
respond à zéro.
Exemple :
Le 20 août 1970 était un jeudi, car J est égal à 96 et le reste de la division par 7
est 5.
Voici le détail 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 négatif, on fait (7n + k) où n est choisi de façon à ce que la valeur de l'ex-
pression varie de 0 à 6. Par exemple, si J = -23, on fait 28 - 23 = 5.
97
Les structures de contrôle conditinnelles
Analyse
Nom = JOUR
S L.D.E. O.U.
12 Résultat = Ecrire (Jour) Jour
J
11 Jour = [ ] Selon J Faire
JJ
0 : Jour o"Dimanche"
M
1 : Jour o"Lundi"
aaaa
2 : Jour o"Mardi"
mm
3 : Jour o"Mercredi"
an
4 : Jour o"Jeudi"
E
5 : Jour o"Vendredi"
mois
6 : Jour o"Samedi"
day
SiNon Jour o"ERREUR"
date
Fin Selon
10 J = [ ] Si J < 0 Alors
J o -J mod 7
Jo7-J
FinSi
Jo (JJ+ TRONC((2.6*M)-0.2)+(aaaa mod 100)+TRONC((aaaa
9 mod 100)/4)+TRONC((aaaa div 100)/4) -2*(aaaa div 100))mod 7
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
7 Valeur(An,aaaa,e)
6 Valeur(mois,mm,e)
5 Valeur(day,jj,e)
4 an o Sous-chaîne(Date,7,4)
3 mois o Sous-chaîne(Date,4,2)
2 day o Sous-chaîne(Date,1,2)
1 date = Donnée ("Entrer une date : ")
13 Fin JOUR
98
Les structures de contrôle conditinnelles
99
Les structures de contrôle conditinnelles
CASE mm OF
3 : M :=1;
4 : M :=2;
5 : M :=3;
6 : M :=4;
7 : M :=5;
8 : M :=6;
9 : M :=7;
10: M :=8;
11: M :=9;
12: M :=10;
1 : M :=11;
2 : M :=12;
END;
100
Les structures de contrôle conditinnelles
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 généralisée.
Le choix du traitement dépend de la valeur que prendra le sélecteur.
La valeur du sélecteur doit être de type scalaire.
Au niveau de l'analyse
Au niveau de Pascal
et de l'algorithme
[Initialisation] - - -;
Selon sélecteur Faire CASE sélecteur OF
Valeur 1 : Traitement 1 Valeur 1 : Traitement 1;
La structure Valeur 2 : Traitement 2 Valeur 2 : Traitement 2;
de contrôle Valeur 3 : Traitement 3 Valeur 3 : Traitement 3;
conditionnelle Valeur 4, Valeur 5, Valeur 6 : Valeur 4, Valeur 5, Valeur 6 :
généralisée Traitement 4 Traitement 4;
Valeur 7..Valeur 10 : Traitement 5 Valeur 7 .. Valeur 10 : Traitement 5;
--- ---
Valeur N : Traitement N Valeur N : Traitement N;
Sinon traitement R ELSE traitement R;
Fin Selon END;
101
Les structures de contrôle conditinnelles
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 carac-
tère (consonne, voyelle, chiffre ou symbole) correspondant à une touche saisie.
On considère que le clavier est verrouillé en minuscule.
Exercice 2
Lire un code d'ADN sous forme d'une chaîne de trois caractères, puis déterminer
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é commandée, 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 supérieur à 5000 D
Exercice 4
Effectuer le cryptage d'un caractère C donnée en utilisant le principe de cryptage
suivant :
- si le caractère est une voyelle alors la fonction f(x)=X-1
- si le caractère est une consonne alors la fonction f(x)=X-2
- si le caractère est un chiffre alors la fonction f(x)=X+1
- si le caractère est un symbole alors la fonction f(x)=X+2
X étant le code ASCII du caractère.
Exercice 5
Afficher le jour selon un nombre entré par l'usager (1 = LUNDI, 2 = MARDI, etc.).
Votre programme devra détecter les jours erronés.
Exemple :
Entrez un jour : 1
Vous avez choisi LUNDI
102
Les structures de contrôle conditinnelles
Exercice 6
Dans cet exercice, nous nous intéressons aux ordinaux abrégés en anglais, ou le
nombre est écrit en chiffres. Les premiers sont :
« 1st », « 2nd », « 3rd », « 4th », etc. (abbreviation de « first, second, third, fourth, ... »).
Écrire un programme qui lit un nombre, et qui affiche l'ordinal anglais abrégée cor-
respondant.
Exercice 7
Écrire un programme intitulé JOURS qui pour une année et un mois donnée affi-
che le nombre de jours de ce mois.
103
CHAPITRE
Chapitre 4
Structures de
contrôle itératives
Objectifs :
Plan du chapitre :
Leçon 1 :
Structures de contrôle itératives
complètes
Leçon 2 :
Structures de contrôle itératives
à conditions d'arrêt.
Structures de contrôle itératives
Leon 1
Objectifs spécifiques :
Plan de la leçon :
I. Rappel et définition
I.1 Définition
I.2 Vocabulaire et syntaxe
I.3 Traduction en Pascal
I.4 Parcours décroissant
Retenons
Exercices
105
Structures de contrôle itératives
Leon 1
Les structures de contrle itratives
compltes
Les concepts sont dits supérieurs s’ils ont sous eux
d’autres concepts, qui par rapport à eux sont des
concepts inférieurs.
KANT
I. Rappel et définition
Dans la leçon précédente relative aux structures de contrôle conditionnelles, nous
avons permis à un programme de prendre des décisions. Nous allons reprendre dans
cette leçon, la structure permettant de faire répéter un traitement par l'ordinateur.
Cette structure de contrôle s'appelle structure de contrôle itérative complète. Elle est
utilisée pour exprimer une répétition d'un traitement un nombre fini de fois.
I.1 Définition
Une structure de contrôle itérative complète exprime la répétition d’un traitement
un nombre de fois connu d'avance.
106
Structures de contrôle itératives
L’initialisation délimitée par les crochets et placée devant la structure Pour, comporte-
rait les éventuelles définitions nécessaires au bon fonctionnement de la structure ité-
rative. Elle comporte essentiellement les objets, indépendants du compteur de l'itéra-
tion.
NB :
1. Le compteur c est de type scalaire (entier, caractères, booléen, etc.).
2. L’incrémentation de c est automatique et fait progresser au successeur de la valeur
en cours.
PROGRAM nom_programme;
USES WINCRT;
VAR .
.
.
BEGIN
.
.
.
{Instructions d’initialization}
FOR i:=1 TO n DO
BEGIN
.
Instructions du traitement à répéter
.
END;
END.
107
Structures de contrôle itératives
Activité 1
Écrire un programme qui saisit un entier naturel n suivi de n réels à mettre dans un
tableau M. Le programme affiche ensuite toutes les valeurs de M supérieurs à 10.
Analyse
NOM : Supérieurs_à_10
S L.D.E. O.U.
2 Résultat = sup_10 i
sup_10 = [ ] Pour i de 1 à n faire n
[ ]Si M[i]>10 Alors M
Ecrire (M[i])
FinSI
FinPour
1 M = [Lire("n=",n] Pour i de 1 à n faire
Lire(M[i])
FinPour
i = compteur
3 Fin Supérieurs_à_10
Algorithme
0) Début Supérieurs_à_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 Supérieurs_à_10
108
Structures de contrôle itératives
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.
109
Structures de contrôle itératives
Activité 2
Algorithme
0) Début 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 contrôle itératives
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'exécution
Cas général :
Il y a des fois où le compteur entre dans le calcul fait par le module à répéter ; en plus
les opérations de calcul exigent des valeurs non entières et progressant avec un pas
p non entier. L'astuce consiste à chercher par division entière le nombre d'itérations
à accomplir et avec une expression généralement linéaire ou affine, revenir au comp-
teur dont on a besoin.
111
Structures de contrôle itératives
NB.
Si p est positif, le parcours est ascendant et si p est négatif, le parcours est descen-
dant.
Le nombre de répétitions 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 détermine 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 à répéter
...
END;
END.
112
Structures de contrôle itératives
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 paramétriques 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 procéder à 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 L.D.E. O.U.
Résultat = cercle t
2 cercle = [ ] Pour t de 0 à 2 (pas=p) faire p
cx=ARRONDI(40+R.COS(t)) cx
cy=ARRONDI(12+R.SIN(t) R
Ecrire(TAB(cx,cy),"*") cy
FinPour
t = compteur
p = 0.01 (Constante)
1 R = Donnée("Rayon = ")
3 Fin cercle
Nous remarquons dans l'analyse faite que le compteur est réel ; ce genre de comp-
teur ne convient pas avec la définition que nous avons présentée précédemment.
Nous allons remédier à cette défaillance en calculant d'abord le nombre d'itérations
et en utilisant t comme angle auquel on ajoute p à chaque itération.
Le nombre d'itérations est E(2/p)+1.
De l'analyse précédente, nous obtenons l'algorithme suivant en tenant compte de
la légère modification sur le compteur.
113
Structures de contrôle itératives
Algorithme
0) Début 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
114
Structures de contrôle itératives
Analyse
Nous tenons à remarquer qu'une chaîne de caractères est vue comme un tableau
de caractères. Nous allons exploiter cette propriété dans la résolution du problème.
NOM : mot_transformé
S L.D.E. O.U.
2 Résultat = Ecrire("Mot transformé : ",mot_t) mot_t
1 mot_t = [Lire("mot = ", mot), mot_tomot, L oLONG(mot)] mot
Pour c de 2 à l (pas=2) faire L
code oORD(mot[c]) c
mot_t[c] o CHR(2*x0 - code +1) x0
FinPour code
3 Fin mot_transformé
Remarques :
• le mot transformé mot_t est initialisé à mot car il y a que les caractères pairs qui
seront modifiés.
• Comme le compteur est automatiquement incrémenté de 1, nous allons utilser un
autre compteur alant de 1 à L DIV 2 et c sera égal à 2i.
0) Début 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 contrôle itératives
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'exécution
Analyse
Remarquons que le calcul de la factorielle a une définition itérative complète et à
l'étape i, la factorielle est égale à sa valeur à l'étape i-1 multipliée par i.
116
Structures de contrôle itératives
NOM : Factorielle
S L.D.E. O.U.
3 Résultat = Ecrire (n,"! = ", fact) n
2 fact = [fact o 1] Pour i de 1 à n faire i
fact o fact * i fact
FinPour
1 n = DONNEE("n = ")
4 Fin Factorielle
Algorithme
0) Début 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
Structures de contrôle itératives
Un cas d'exécution
Exercice corrigé 2
NOM : Les_admis
S L.D.E. O.U.
5 Résultat = (Ecrire ("Nombre d'admis : ", n_ad), "Moyenne Générale n_ad
= ", MG) MG
4 n_ad = [n_ad o 0] Pour i de 1 à n faire i
[ ] Si (M[i]e10) alors n
n_ad o n_ad +1 M
FinSi
FinPour
3 MG o TOT_M / n
2 Tot_M = [Tot_M o 0] Pour i de 1 à n faire TOT_M
Tot_M o Tot_M +M[i] N1
FinPour N2
1 M = [Lire("n=",n)] Pour i de 1 à n faire N3
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
6 Fin Les_admis
Type
Vecteur : tableau [1..50] de réels
118
Structures de contrôle itératives
Algorithme
0) Début 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 Générale = ", 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 contrôle itératives
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 générale = ',MG);
END.
Un cas d'exécution
Retenons
- Une itération complète consiste en la répétition d'un traitement un nombre de fois
connu d'avance.
- Dans une itération complète, le compteur est incrémenté ou décrémenté auto-
matiquement.
- Une itération est dite récurrente si le traitement à l'étape i dépend des étapes qui
le précèdent. En général, les résultats intermédiaires sont gérés par une relation
de récurrence. En fait, on s'intéresse au résultat final de l'itération.
120
Structures de contrôle itératives
Exercices
Exercice 1
Écrire un programme qui défile le nom et le prénom 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 lumière
Exercice 3
Écrire un programme qui dessine sur deux lignes de l'écran, deux caractères "*"
sachant que l'un se déplace de la gauche vers la droite et l'autre se déplace de la
droite vers la gauche.
Exercice 4
Reprendre le programme de l'exercice 1 et transformer le défilement de telle façon
que la chaîne formée du nom et du prénom rentre par la droite et sort par la gau-
che. Temporiser ce défilement 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 unités divisible par le chiffre des dizaines.
Exemple : 24 vérifie cette propriété, 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 supérieur à 20 puis
remplit un tableau R par n réels aléatoires compris entre 0 et 20 en utilisant la
fonction HAZARD préprogrammée. Ensuite, Il calcule la moyenne arithmétique de
ces n réels et affiche les éléments de R supérieurs ou égaux à MG ainsi que leur
nombre, il en fait de même pour les éléments de R inférieurs à MG.
Exercice 8
Écrire un programme Pascal intitulé OCCURENCE qui permet de saisir une chaîne
de caractères CH puis d'afficher les occurrences des voyelles qui figurent dans CH.
Exemple :
Si CH ='LYCEE 25 juillet'
Le programme OCCURENCE affichera les résultats 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 voyel-
les majuscules et minuscules.
121
Structures de contrôle itératives
Exercice 9
Écrire un programme qui saisit un texte en français et détermine les fréquences
des voyelles et les met dans un tableau de 6 éléments. Le programme affiche
ensuite la fréquence de chacune des voyelles.
Le texte pourra comporter des lettres en majuscules ou en minuscules ainsi que
les caractères accentués.
Exercice 10
On dispose de deux tableaux T1 et T2 contenant respectivement n et m entiers
positifs et non nuls.
On désire chercher dans T2 tous les diviseurs d'un élément donné de T1.
Exemple :
T1 23 15 10 277 300 34
1 2 3 4 5 6
T2 3 6 5 1
Écrire un programme Pascal qui permet de saisir les deux tableaux T1 et T2 et l'in-
dice d'un élément p de T1 puis d'afficher à l'écran tous les diviseurs de p figurant
dans T2.
Exercice 11
Soit un tableau T1 de n éléments (1 n 100) . Les éléments de T1 sont des
entiers naturels de trois chiffres.
On se propose de remplir un tableau T2 de la façon suivante :
T2[i] est égal à la somme des carrés 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 éléments de T1, de remplir
puis d'afficher le tableau T2.
Exercice 12
Écrire un programme Pascal qui saisit un tableau A de n chaînes de caractères,
cherche et affiche la longueur de la chaîne la plus longue puis toutes les chaînes
ayant cette longueur.
122
Structures de contrôle itératives
Leon 2
Objectifs spécifiques:
Plan de la leçon
I. Introduction
II. La structure : Répéter ….. Jusqu'à …
Retenons
Exercices
123
Structures de contrôle itératives
Leon 2
Activité 1
Une personne en possession d'une carte interbancaire (CIB) se présente à un dis-
tributeur pour retirer de l'argent. Cette personne a des doutes concernant son code
secret. Le système ne lui permet que trois essais au maximum.
Ecrire les étapes du programme permettant la lecture du code secret.
Réponse :
En effet, dès 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 première saisie
est fausse, le distributeur va lui donner une seconde chance. Si après cette
chance, le code saisi est encore erroné, le distributeur donne la troisième et la
dernière chance, après quoi, la carte sera confisquée si le code n'est pas encore
correct.
Nous pouvons formuler cette action par :
124
Structures de contrôle itératives
Activité 2
Vous êtes dans une station de transport public à attendre le moyen de transport
désiré. Ce dernier arrive, le convoyeur procède à faire monter les voyageurs avec
la condition qu'aucun ne doit voyager debout.
Écrivez l'action faite par le convoyeur.
Réponse :
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 itérative suivante.
Tant qu'il y a encore des places, faire monter les voyageurs.
Cette opération pourra être formulée comme suit :
Vous avez vu que dans chacune des deux activités, nous avons utilisé une struc-
ture itérative particulière. Ce sont les deux formulations traduisant la structure ité-
rative à condition d'arrêt.
Définition
On appelle structure de contrôle itérative à condition d'arrêt l'action qui consiste à
répéter un traitement donné et que l'arrêt est géré par une condition.
Il existe deux formulations pour traduire une telle structure :
La structure Répéter …. Jusqu'à …
et la structure : Tant Que … Répéter ….
125
Structures de contrôle itératives
Remarques :
• La définition de R commence par une initialisation éventuelle. Elle comporte les défi-
nitions nécessaires à la marche du processus d'itérations.
• "Traitement" est le jeu d'instructions à répéter.
• "Condition d'arrêt" est une expression booléenne supervisée directement ou indirec-
tement par le traitement répété pour la faire passer à l'état vraie afin que l'itération
s'arrête.
PROGRAM nom_programme;
USES WINCRT;
VAR .
.
.
BEGIN
.
.
.
{Instructions d'initialisation}
REPEAT
...
Instructions du traitement à répéter
...
UNTIL (Condition d'arrêt);
...
END.
126
Structures de contrôle itératives
Activité 3
Écrire un programme qui cherche si une valeur v existe dans un tableau B. B est
composé de n réels. v est une valeur réelle donnée. Le programme affichera un
message de la forme :
"v existe dans B"
ou "v n'existe pas dans B".
Analyse
Nous allons procéder à un parcours du tableau B en affectant une variable boo-
léenne qu'on nommera v_y_est. Cette itération à condition d'arrêt s'arrête soit
quand on aura trouvé v soit qu'on aura fini de parcourir tout le tableau B.
NOM : Recherche
S L.D.E. O.U.
4 Résultat = Écrire(v, décision, " dans le tableau") décision
3 décision = [décision o " n'existe pas"] Si v_y_est alors v_y_est
décision o " existe"
FinSI
2 v_y_est = [Lire("v = ", v),io 0] Répéter i
i o i+1 B
v_y_est o (B[i]=v) v
Jusqu'à (v_y_est) OR (i=n) n
1 B = [Lire("n = ", n)] Pour i de 1 à n faire
Lire(B[i])
FinPour
5 Fin Recherche
Algorithme
0) Début Recherche
1) [Lire("n=",n] Pour i de 1 à n faire
Lire(B[i])
FinPour
127
Structures de contrôle itératives
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);
IF v_y_est THEN
BEGIN
decision:= 'existe';
END;
WRITELN(v:5:3,' ', decision, ' dans le tableau');
END.
128
Structures de contrôle itératives
Un cas d'exécution
Nous allons voir dans l'activité qui suit une application très fréquente de la formu-
lation "Répéter … Jusqu'à …". En effet, elle s'adapte le mieux dans les cas de
saisie de données assujetties à des conditions de contrôle.
Activité 4
Écrire un programme qui cherche la dernière position d'une valeur v dans un
tableau B de n réels. L'entier n est compris entre 20 et 30. Tous les réels de B ainsi
que v sont dans l'intervalle [0,20].
Analyse
Le problème ressemble étroitement à celui de l'activité 3 seulement les données
sont astreintes à des conditions ; en plus, la recherche de la dernière valeur de v
dans B nous oblige à faire le parcours de B en commençant par la fin pour éviter
un parcours total.
NOM : cherche_dernier
S L.D.E. O.U.
6 Résultat = Écrire (v, décision, " dans le tableau") décision
5 décision = [décision o " n'existe pas"] Si dp0 alors dp
STR(dp,s) s
décision o " a une dernière place " + s + " "
FinSI i
4 dp = [io n+1, dp o 0] Répéter n
[i o i-1] Si (B[i]=v) alors
Dp o i B
Jusqu'à (dp0) OR (i=1)
3 v=[ ] Repéter
Lire("v = ", v)
Jusqu'à (v>=0) et (v<=20)
Algorithme
0) Début cherche_dernier
1) Répéter
Lire("n=",n)
Jusqu'à n dans [20..30]
2) Pour i de 1 à n faire
Répéter
Lire(B[i])
Jusqu'à (B[i]>=0) et (B[i]<=20)
FinPour
3) Répéter
Lire("v=",v)
Jusqu'à (v>=0) et (v<=20)
4) [ion+1, dp o 0] Répéter
[i o i-1] Si (B[i]=v) alors
dpo i
FinSi
Jusqu'à (dp0) OR (i=1)
5) [décision o " n'existe pas"] Si dp0 alors
STR(dp,s)
décision o " a une dernière place " + s +" "
FinSI
6) Écrire (v, décision, " 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 contrôle itératives
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);
IF dp<>0 THEN
BEGIN
STR(dp,s);
decision:=' a une dernière place ' +s+ ' ';
END;
131
Structures de contrôle itératives
Un cas d'exécution
Commentaires :
Vous avez certainement remarqué la différence entre les solutions des deux activi-
tés. En effet, pour la recherche de v dans le tableau B, nous avons utilisé une varia-
ble booléenne dans la solution du 1er problème, cette option n'est plus adéquate pour
le second, nous avons besoin d'une donnée précise en l'occurrence la dernière posi-
tion de v dans le tableau B.
Nous avons utilisé une fonction de la bibliothèque STR et une expression de conca-
ténation que nous avons formulé par l'opérateur additif +. Bien sûr, cette formulation
n'est pas unique, nous pouvons garder l'affichage de dp comme un entier.
132
Structures de contrôle itératives
Activité 5
On se propose de chercher et d'afficher la moyenne arithmétique d'une suite de
réels. A priori, on ne connaît pas le nombre d'éléments de cette liste, par contre,
on sait que sa fin sera marquée par le nombre négatif -1. Ce dernier n'entre pas
dans le calcul de la moyenne. Le caractère récurrent réside bien entendu dans le
calcul de la moyenne.
Analyse
NOM : Moyenne
S L.D.E. O.U.
3 Résultat = Écrire ("Moyenne = ", mg) mg
2 mg = total/nbre total
1 (total, nbre) = [totalo 0, nbreo 0] Répéter nbre
[Lire("x= ",x)]Si (x>0) alors x
total o total + x
nbre o nbre +1
FinSi
Jusqu'à (x= -1)
4 Fin Moyenne
Algorithme
0) Début Moyenne
1) [totalo 0, nbreo 0] Répéter
[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 contrôle itératives
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'exécution
134
Structures de contrôle itératives
Remarques :
• "Traitement" est le jeu d'instructions à répéter.
• "Not(Arrêt)" est une expression booléenne supervisée directement ou indirectement
par le traitement répété pour la faire passer à l'état vrai afin que l'itération s'arrête.
• "FinTantQue" sert à délimiter les instructions qui vont former "Traitement".
Remarquons que pour la 1ère formulation "Répéter …jusqu'à …", la délimitation de
"Traitement" est faite naturellement par les deux termes de la structure "Répéter" et
"Jusqu'à"
• La partie "Initialisation" comportera les éventuelles définitions qui serviront au pro-
cessus itératif.
Remarque importante :
Dans les deux formulations, il faut faire attention aux deux cas d'entrée et de sortie
de la boucle et de faire les bonnes initialisations et les bons emplacements des
instructions relatives à l'avancement dans l'itération. Ceci est souvent une source
d'erreurs.
Nous pouvons écrire plus en détail cette formulation :
R = [Inst1, Inst2, …,Instm] Tant Que Not(arrêt) Faire
Instruction 1
Instruction 2
.
.
.
Instruction p
FinTantQue
III.2 Traduction en Pascal
PROGRAM nom_programme;
USES WINCRT;
VAR .
.
.
BEGIN
.
.
.
{Instructions d'initialisation}
WHILE Condition DO
BEGIN
...
Instructions du traitement à répéter
...
END;
.
.
.
END.
135
Structures de contrôle itératives
Activité 6
On se propose de déterminer le PGCD de deux entiers naturels m et n.
Le principe de la recherche repose sur les propriétés 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.
Remarque :
De la propriété "tout diviseur de m et n " divise leur différence et dont on pourra
faire facilement une démonstration comme pour le reste, nous déduisons un autre
procédé de calcul de PGCD en utilisant la différence. Généralement, la méthode
de la différence converge vers 0 plus lentement que la méthode du reste. Un bon
exercice : prenez quelques couples d'entiers et comparez les deux procédés.
Analyse
NOM : calcul_pgcg
S L.D.E. O.U.
3 Résultat = Écrire ("PGCD(",m,", ",n,") =", pgcd) pgcd
2 pgcd = [ pgcd om ] Si (m=0) alors m
pgcd o n n
FinSi
1 (mf,nf) = [ m=Donnée("m = "),n=Donnée("n = ")]
Tant Que (m * n0) Faire
[ ] Si (m>n) alors
m o m MOD n
sinon
n o n MOD m
FinSi
FinTantQue
4 Fin calcul_pgcd
Tableau de déclaration des objets
136
Structures de contrôle itératives
Algorithme
0) Début 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
Structures de contrôle itératives
Un cas d'exécution
Remarque :
Dans ce problème, nous avons adopté la formulation tant que car il est possible de
ne pas traiter l'objet d'itération. Référerez-vous à la deuxième activité introductrice où
le convoyeur est contraint de ne pas faire monter des voyageurs s'il n'y a plus de pla-
ces assises.
En effet dans cette deuxième formulation (tant que), la condition est vérifiée avant
d'attaquer le traitement à répéter, contrairement à la première formulation (répeter..
jusqu'à) où la condition est vérifiée après avoir exécuté une fois le traitement.
Attaquons maintenant une activité mathématique d'approximation.
Activité 7
Analyse
On définit 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 méthode de dichotomie pour déterminer 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 problème est fini, nous avons trouvé la solu-
tion. S'il est négatif, 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 différence en valeur absolue de a et b est supérieur
à 2*e. La solution cherchée sera égale au milieu de a et b.
138
Structures de contrôle itératives
NOM : calcul_racine
S L.D.E. O.U.
2 Résultat = Écrire ("La racine est : ", (a+b)/2, " à ", e, " près.") a
1 (a,b) = [ao0, bo1, Lire("e = ",e)] b
TantQue (|a-b| >2*e) Faire e
[co (a+b)/2, po (exp(-a)-a)(exp(-c)-c)] Si (p=0) alors c
aoc p
boc
Sinon Si (p<0) alors
boc
Sinon
aoc
FinSi
FinTantQue
3 Fin calcul_racine
Algorithme
0) Début 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, " près.")
4) Fin calcul_racine
139
Structures de contrôle itératives
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,' près.');
END.
Un cas d'exécution
Retenons
-Il existe deux formulations pour traduire une structure itérative à condition d'arrêt:
• La structure Répéter … Jusqu'à …
• La structure Tant Que … Faire …
- Dans la structure "Répéter …Jusqu'à …" , le traitement à répéter est exécuté au
moins une fois car la condition d'arrêt est testé à posteriori.
- Dans la structure "Tant Que … Faire …. " le traitement à répéter peut ne pas être
exécuté car la condition d'arrêt est testée à priori. En effet, dans le cas où elle est
vraie dès le début, le traitement n'est pas exécuté.
- Dans l'une ou l'autre formulation, il est conseillé de vérifier à la main l'exécution
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'in-
térieur de la boucle.
140
Structures de contrôle itératives
Exercices
Exercice 1
Donner la différence entre les deux formulations traduisant une structure itérative
à condition d'arrêt.
Exercice 2
Quand il s'agit de faire un contrôle lors de la saisie d'une donnée, pourquoi il est
préférable d'opter pour la structure "Répéter .. Jusqu'à…"
Exercice 3
Analyser puis déduire un algorithme et le programme Pascal qui permet de cher-
cher si une valeur v existe dans un tableau. Dans l'affirmative, le programme affi-
che la dernière et l'avant dernière place si elle existe.
Exercice 4
Écrire un programme qui saisit un mot en français puis il affiche la première 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 français puis affiche le nombre de
mots de cette phrase.
Exercice 6
Écrire un programme qui calcule le PGCD de deux entiers en utilisant la méthode
de la différence.
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 propriété, é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 première partie du mot
comportant plus de voyelles que de consonnes et de l'afficher.
141
Structures de contrôle itératives
Exercice 10
On dispose de deux tableaux T1 et T2 contenant respectivement n et m entiers
positifs et non nuls.
On désire chercher si les éléments 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 com-
parables"
Analyser puis déduire un algorithme et le programme Pascal qui saisit m et n et
remplit deux tableaux T1 et T2 respectivement par m et n réels. Ensuite étudie la
relation entre T1et T2 comme indiqué plus haut et affiche le résultat.
Exercice 11
Soit l'algorithme suivant :
0) Début inconnu
1) Écrire (" n = "); Lire (n)
2) Pour i de 1 à n Répéter
Répéter
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 contrôles sur la saisie pour que n vérifie la condi-
tion suivante : 5 n 50
3. Écrire une séquence d'instructions permettant de déterminer plc, la longueur
de la plus longue séquence croissante d'éléments du tableau.
Exercice 12
Nous savons par son graphique qu'une fonction donnée f admet un maximum en
x0 dans un intervalle [a,b]. On se propose de calculer une valeur approchée de x0
à e près où e est une erreur fixée 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 dernières valeurs de x encadrent convenablement le x0 recherché.
Analyser puis déduire un algorithme et le programme Pascal qui détermine à e
près (0.01 par exemple) une valeur approchée de x0 où la fonction suivante f admet
un minimum.
f(x) = x+1 +1/x sur l'intervalle ]0,4]
142
CHAPITRE
Chapitre 5
Les sous-programmes
Objectifs :
- Décomposer un problème en
sous-problèmes élémentaires
Plan du chapitre :
Leçon 1 :
L'analyse modulaire
Leçon 2 :
Les fonctions
Leçon 3 :
Déclaration, accès aux objets et
modes de transmission
Leçon 4 :
Les procédures
Les sous-programmes
Leon 1
L'analyse modulaire
Objectifs spécifiques :
Plan de la leçon :
I. Introduction
Retenons
Exercices
144
Les sous-programmes
Leon 1
L'analyse modulaire
Diviser chacune des difficultés que j'examinerais en autant de par-
celles qu'il se pourrait et qu'il serait requis pour les mieux résoudre
DESCARTES
I. Introduction
Dans le cas de la résolution d'un problème simple, il est possible d'écrire directement
l'algorithme correspondant. Toutefois, dans le cas d'un problème plus complexe, la
solution nécessiterait l'écriture de plusieurs sous-programmes résolvant chacun une
partie du problème.
Exemple 1 :
Soit le problème consistant en la détermination de tous les nombres premiers com-
pris entre 1 et 10000. La résolution de ce problème nécessiterait de développer un
sous programme permettant de décider si un nombre entier donné est premier. La
solution globale fera alors appel à ce sous-programme (module) pour tous les nomb-
res entiers de la fourchette 1 à 10000.
Exemple 2 :
Votre classe veut organiser une fête de fin d'année. Il est alors nécessaire de se par-
tager le travail afin de réussir ce projet. Dans ce but, un chef de projet et des groupes
d'élèves seront constitués. Chaque groupe aura une tâche précise et devra la pro-
grammer. Un groupe s'occupe de la décoration de la salle ; un autre s'occupe des
invités ; un autre s'occupe des prix à distribuer aux bons élèves 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'exécution d'une tâche donnée au moment opportun.
À travers cet exemple, des notions importantes apparaissent suite à des questions
naturellement posées. En effet, le chef de projet aura à communiquer avec chaque
groupe de travail en précisant des données comme par exemple les dimensions de la
salle et il obtiendra des résultats comme par exemple le nombre des personnes qu'elle
peut contenir. Le calcul du nombre de personnes est bien sûr élaboré par un des grou-
pes de travail en utilisant des ressources locales telles que les mesures des tables,
etc.… Outre ces communications, les groupes de travail peuvent utiliser quelques res-
sources du chef du projet ; ça peut être par exemple une caisse commune.
145
Les sous-programmes
Toutes ces notions sont explicitées par la suite dans ce chapitre où nous présentons
encore une fois une introduction à l'analyse modulaire, la notion de module ou de sous-
programme et les problèmes qu'elle pose quant à la transmission des paramètres et le
partage des données. Nous explicitons les cas des fonctions et des procédures.
II.1 Définition
L'analyse modulaire consiste à diviser un problème en sous problèmes de difficul-
tés moindres. Ces derniers peuvent être aussi assujettis à cette division jusqu'à ce
qu'on arrive à un niveau abordable de difficulté.
II.2 Intérêts
Ainsi, le programme sera plus lisible, plus facile à documenter, à mettre au point et à
maintenir (modifier éventuellement par la suite ).
146
Les sous-programmes
Nous proposons dans l'exemple ci-dessous non pas une solution complète du pro-
blème mais plutôt une approche de résolution du problème.
PROBLÈME
Donner un algorithme pour la construction d'une maison.
Arrêtez-vous à ces énoncés et ne regardez pas la solution proposée. Prenez une
feuille et un crayon, essayez de tracer une démarche de résolution de ce problème.
Puis essayez de comparer votre proposition avec celles de vos camarades.
Solution :
Afin d'aborder ce problème, il est recommandé d'appliquer le principe de réduction de
complexité (diviser pour régner). Ceci nous conduit à adopter une approche modulaire
et descendante afin de diviser le problème en sous problèmes ou en modules de dif-
ficulté moindre. Si dans un module, il y a encore davantage de complexité, on conti-
nue à le diviser en sous modules et ainsi de suite jusqu'à arriver à un niveau élémen-
taire de difficulté.
147
Les sous-programmes
Nous devons d'abord reposer le problème en détails. Nous supposons que le futur
propriétaire de cette maison va faire le choix du terrain et de son emplacement. Il a
aussi une idée claire et précise du plan de la maison. Commençons donc l'analyse de
ce sujet.
Analyse
NOM : ConstructionMaison
S L.D.E. O.U.
Résultat = MaMaison Finition
1 MaMaison = ( MODULE Finition, Toits
MODULE Toits Murailles
MODULE Murailles Fondations
MODULE Fondations Terrain
MODULE Terrain)
2 Fin ConstructionMaison
Nous constatons que le résultat MaMaison est une suite ordonnée de cinq modules
qui sont : Finition, Toits, Murailles, Fondations et Terrain. La disposition de ces modu-
les a été carrément descendante.
Nous passerons ensuite à l'analyse de chaque module à part. Prenons l'exemple du
module Finition.
MODULE Finition
S L.D.E. O.U.
Résultat = MaisonFinie
1 MaisonFinie = ( MODULE DernierNettoyage, DernierNettoyage
MODULE Peinture, Peinture
MODULE Badigeonnage Badigeonnage
MODULE Sanitaires Sanitaires
MODULE Electricité Electricité
2 Etc ... Etc.
Fin MODULEFinition
Vous avez remarqué à travers cet exemple comment diviser un grand programme de
construction d'une maison en sous-programmes. Eux-mêmes, ces sous-programmes
sont divisés en sous-programmes. C'est l'approche modulaire.
Retenons
Pour faciliter la résolution des problèmes, souvent, ils sont décomposés en sous-
problèmes par une analyse modulaire. Chaque sous-problème fait l'objet d'une
procédure 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 réunir dans un vec-
teur C que l'on affichera par la suite. Décomposer ce problème en en un ensemble
de sous-problèmes et analyser chacun de ces sous-problèmes.
Exercice 2
Nous avons relevé la pluviométrie mensuelle concernant les 5 dernières années.
Nous voulons déterminer la moyenne pluviométrique annuelle, les pluviométries
mensuelles minimale et maximale. Décomposer ce problème en un ensemble de
sous-problèmes et analyser chacun de ces sous-problèmes.
Exercice 3
On veut écrire un programme qui permet de :
- initialiser automatiquement un tableau de dimension N avec des valeurs aléatoi-
res sachant que pour générer des nombres aléatoires on doit utiliser :
• la procédure RANDOMIZE ; sans paramètres, elle initialise le générateur des
nombres aléatoires et doit être mise au début du programme. Il est à noter que
la procédure RANDOMIZE appartient à la bibliothèque WINCRT .
• la fonction prédéfinie RANDOM ( P ) ; qui envoie un entier aléatoire Z tel que
0 Z P où P est un entier.
- tester si le tableau constitue un palindrome (on obtient le même résultat quand on
lit un palindrome de gauche à droite ou de droite à gauche).
Décomposer ce problème en un ensemble de sous-problèmes et analyser chacun
de ces sous-problèmes.
Exercice 4
Soit un tableau T d'entiers non nuls, trouvez combien il y a d'entiers distincts posi-
tifs dont l'opposé est aussi dans le tableau.
Exemple : Donnée T : -3 4 2 8 9 1 -3 -8 -4 2 8 2 -8 1 3
Résultat :3
On affichera 3 car les trois entiers 3, 4, et 8 ont leurs opposés dans le tableau T.
Questions :
1. Analyser ce problème en le décomposant 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 deuxième joueur se charge de dévoiler 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 répète ces deux étapes jusqu'à dévoiler l'entier masqué par le pre-
mier joueur.
• Lorsque le deuxième joueur devine quel entier il s'agit, le programme affiche le
nombre d'essais qui ont été nécessaires à ce joueur pour dévoiler cet entier.
Questions :
1. Analyser ce problème en le décomposant en modules
2. Analyser chacun de ces modules
Exercice 6
Dans un tableau de N éléments, le programme multiplie les nombres des cases
impaires par 2 et des cases paires par le contenu de la case précédente. Le pro-
gramme s'arrête en fin de tableau ou lorsqu'il rencontre une case de valeur 0.
7 6 5 9 4 0 0 0 0 AVANT
1 2 3 4 5 6 7 8 9
14 48 10 18 36 0 0 0 0 APRÈS
Questions :
1. Analyser ce problème en le décomposant en modules
2. Analyser chacun de ces modules
Exercice 7
Soit N un entier naturel non nul, on se propose de déterminer le plus grand entier
formé par tous les chiffres de N.
Exemple : N= 3941 q l'entier résultat est 9431
N= 65060 q l'entier résultat est 66500
Questions :
1. Analyser ce problème en le décomposant en modules.
2. Analyser chaque module.
150
Les sous-programmes
Leon 2
Les fonctions
Objectifs spécifiques
Plan de la leçon
I. Définition
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 mathématiciens appellent problèmes, 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. Définition
Une fonction est un sous-programme qui renvoie une valeur d'un seul type. Ce type
sera celui de la fonction.
Activité 1
Soit la fonction f(x)=4.x+0,75. Nous voulons écrire un programme qui affiche pour
n valeurs de x, le couple (x, f(x)), x étant une valeur donnée.
Analyse
Nom : Calcul_F
S L.D.E. O.U.
Résultat = valeurs n
1 Valeurs = [n = Donnée ] Pour i de 1 à n faire i
x = Donnée ("Entrer la valeur de x ") x
y o FN f(x) y
Écrire (x, y) f
FinPour
2 Fin Calcul_F
152
Les sous-programmes
Algorithme
0) Début 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 préfixe FN est ajouté devant le nom de la fonction que nous avons créée ;
cette convention nous aidera à repérer les fonctions à définir.
Analyse de la fonction f
DEF FN f (x : Réel ) : Réel
S L.D.E. O.U.
Résultat = f
1 f o 4*x + 0.75
2 Fin f
Remarque :
x et f sont déjà déclarés au niveau de l'entête de la fonction (DEF FN f (x : Réel) :
Réel ).
Algorithme
0) DEF FN f (x : Réel ) : Réel
1) f o 4*x+0.75
2) Fin f
Remarque :
f est une fonction ayant un seul paramètre x. Il est possible qu'une fonction ait plu-
sieurs paramètres. Dans l'activité ci-dessous, la fonction Moyenne en possède
plusieurs.
153
Les sous-programmes
Activité 2
Écrire un programme qui saisit deux coefficients coef1 et coef2 puis répète n fois
la saisie de deux notes Note1 et Note2 et appelle une fonction pour calculer leur
moyenne pondérée. Cette moyenne sera ensuite affichée.
On utilise la formule : moyenne = ( Coef1.Note1 + Coef2.Note2 )/ (Coef1+Coef2 ).
Analyse
Nom : Calcul_moy
S L.D.E. O.U.
Résultat = Les_moyennes n
3 Les_moyennes = [ Lire("n = ",n)]Pour i de 1 à n faire i
Note1 = Donnée("Note1 = ") Note1
Note2 = Donnée("Note2 = ") Note2
Moy o FN Moyenne (Coef1, Note1, Moy
Coef2, Note2) Moyenne
Ecrire ("Moyenne = ", Moy) Coef1
FinPour Coef2
1 Coef1 = Donnée ("Donner le 1er coefficient")
2 Coef2 = Donnée ("Donner le 2ème coefficient")
4 Fin Calcul_moy
154
Les sous-programmes
Remarque :
L'appel de la fonction qui calcule la moyenne des deux notes est réalisé à l'aide de
FN Moyenne (Coef1, Note1, Coef2, Note2).
Remarque :
Nous constatons que la liste des objets utilisés (O.U.) n'inclut que Total. En effet,
les autres objets (c1, c2, n1, n2) sont déclarés dans l'entête de la fonction en tant
que paramètres. L'objet Moyenne constitue en soi, l'identificateur de la fonction,
déclaré aussi dans l'entête de la fonction. Il constitue le résultat de retour de la
fonction et il est du type réel.
Algorithme
0) DEF FN Moyenne (c1, n1, c2, n2 : Réel ) : Réel
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 déclaration des objets, seule la
variable locale Total est déclarée.
Les paramètres c1, n1, c2 et n2 appelés paramètres formels (voir leçon 3) sont
déjà déclarés dans l'entête 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 2ème 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'exécution
156
Les sous-programmes
Remarque :
Retenons
Une fonction est constituée de trois parties :
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 paramètres ch1 et ch2 et retourne une chaîne de carac-
tères composée par tous les caractères qui apparaissent dans les deux chaînes
sans redondance et d'affiché le résultat de la fonction.
Exemple :
Soit ch1= "Coccinelle" et ch2= "Cible" Résultat : "C i l e"
Exercice 4
La factorielle d'un entier N est définie 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 aut-
res que lui même.
Exemple : 6 = 1+2+3
On demande d'écrire un programme qui cherche et affiche tous les entiers parfaits
compris entre 2 valeurs données 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 carrée d'un réel positif a en utilisant la limite
de la suite(xn )n N définie par : xn+1 =1/2 * (xn + a/xn )
x0 étant choisi arbitrairement
Exercice 8
2 2 3 n
P(x) = a0 + a1 * x + a * x +…..+an x étant un polynôme de degré n. Le schéma
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
schéma de Horner.
158
Les sous-programmes
Leon 3
Objectifs spécifiques
Plan de la leçon
Retenons
Exercices
159
Les sous-programmes
Leon 3
Définition :
Tous les objets tels que les constantes, les types, les variables et éventuellement d'au-
tres fonctions déclarés dans un sous-programme sont dits locaux à celui-ci.
Les objets utilisés dans un sous-programme et non déclarés dans celui-ci sont des
objets globaux déclarés dans la zone déclaration du programme appelant.
Activité 1
Soit le programme Pascal suivant, identifier les objets locaux et les objets globaux.
PROGRAM cercle ;
CONST pi = 3.1415 ;
VAR rayon : REAL ;
p, s : REAL;
160
Les sous-programmes
BEGIN
perimetre = 2 * pi * r ;
END ;
FUNCTION surface ( r : REAL) : REAL ;
BEGIN
surface = pi * r * r ;
END ;
END.
Réponse :
Les deux fonctions périmètre et surface utilisent l'objet global pi. Les objets rayon,
p, et s déclarés dans le programme principal sont considérés comme des objets
locaux à celui-ci.
La déclaration des sous-programmes respecte une hiérarchie dictée par les différents
niveaux d'appels. Cette dernière peut être représentée par un arbre où le premier
niveau correspond à sa racine, les autres niveaux correspondent quant à eux aux
diverses imbrications des sous-programmes entre eux.
Pour représenter un arbre, on considère que :
• sa racine est l'identificateur du programme principal.
• ses nœuds correspondent aux divers sous-programmes qui les composent.
• les arcs représentent la relation " déclare " ou " est déclaré par ".
L'arbre de l'algorithme Calcul_moy est simple et ne contient qu'un seul arc. Cet arbre
est schématisé comme suit :
Niveau 1 Calcul_moy
Niveau 2 Moyenne
161
Les sous-programmes
Remarque :
Tous les objets prédéfinis et notamment les fonctions telles que ABS et RacineCarré
sont considérés au niveau 0. C'est le niveau visible en tout point du programme.
L'objectif de ce paragraphe est de présenter les règles d'accès aux objets dans une
hiérarchie de sous programmes.
Définition :
Cette règle définit la portée de l'identificateur d'un objet. Elle peut être aussi formu-
lée de cette façon :
Dans l'exemple précédent de la leçon II, les variables Coef1, Note1, Coef2 et Note2
sont déclarées dans le programme principal englobant la fonction Moyenne. Elles
peuvent être utilisées sans nouvelles déclarations dans la fonction qui est un sous-
programme englobé.
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
même nom) dans un sous-programme englobé. Dans ce cas, l'objet local déclaré
dans l'englobé va cacher l'objet global de même nom tout le long du sous-pro-
gramme où il a été déclaré.
Nous venons de définir ainsi la règle de visibilité des objets :
La visibilité d'un objet (identificateur pouvant être utilisé) est égale à la portée
moins la partie où il est caché par un homonyme.
Exemple récapitulatif :
Pour expliquer les différentes notions étudiées précédemment, nous allons utiliser
l'exemple schématique suivant :
Objets locaux de PP
(Objets globaux pour SP1)
Prédéfini
PP Objets locaux de
A (variable de type réel ) SP1
B A B
SP1
A (variable de type A C
caractère)
C
Objets prédéfinis
163
Les sous-programmes
Commentaires :
1) La portée d'un objet est représentée par la flèche et sa visibilité est représentée par
la partie en gras de cette même flèche.
2) Visibilité de la variable A ( réel ) = portée de A ( réel ) - la partie où A est cachée
(portée de la variable locale A ( caractère ) 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 schéma, le sous-programme SP1 est englobé ("fils") du programme
principal PP qui est un englobant ("père") par rapport à SP1.
Dans cet état d'esprit, nous remarquons que "le fils" peut manipuler les objets défi-
nis " du père" (ou du "grand-père" …) mais "le père" n'a pas le droit de manipuler
les objets définis par "le fils" (ou "petit fils"… ).
PP ne peut pas manipuler les objets définis par SP1 ("fils") car il est de niveau infé-
rieur.
Attention !
Afin d'écrire les sous-programmes les plus indépendants possibles, il faut éviter au
maximum l'utilisation des variables globales non déclarées dans le sous-programme
englobé (l'appelé). Néanmoins, on pourra éventuellement utiliser des objets globaux
tels que des déclarations de types ou de constantes. Les sous-programmes devront
de préférence communiquer à travers des paramètres.
Les paramètres formels sont les paramètres qui se trouvent dans l'entête du sous-
programme.
Reprenons l'entête de la fonction Moyenne (leçon II) :
DEF FN Moyenne (c1, n1, c2, n2 : Réel) : Réel
Dans l'entête de la fonction Moyenne, c1, n1, c2 et n2 sont des paramètres formels.
Pour leur spécification, il faut indiquer le nom, le type et le mode de passage de
chaque paramètre (voir ci-dessous). Dans la partie instruction du sous-programme,
on fait référence aux paramètres formels.
Dans la fonction Moyenne, c1, n1, c2 et n2 sont manipulés dans la partie instruction.
164
Les sous-programmes
Les paramètres effectifs sont les paramètres qui figurent (dans le programme ou
sous-programme appelant) au niveau de l'appel du sous-programme. Leurs valeurs
respectives sont relatives à une activation particulière et se substitueront aux para-
mètres formels. Le nombre des paramètres effectifs et des paramètres formels cor-
respondants doit être le même. La correspondance entre paramètre formel et para-
mètre effectif s'établit d'après leur position dans la liste des paramètres. Il faut bien
sûr s'assurer de la compatibilité de type entre paramètre effectif et paramètre formel
correspondant. Dans l'activité2 (leçon II), Moyenne (Coef1, Note1, Coef2, Note2 )
constitue l'appel de la fonction Moyenne. Les objets Coef1, Note1, Coef2 et Note2
sont des paramètres effectifs.
Coef1 est un paramètre effectif correspondant au paramètre formel c1.
Note2 est un paramètre effectif correspondant au paramètre formel n2.
Coef2 est un paramètre effectif correspondant au paramètre formel c1.
Note2 est un paramètre effectif correspondant au paramètre formel n2.
165
Les sous-programmes
Dans notre exemple, l'appel de la fonction Moyenne (Coef1, Note1, Coef2, Note2), les
paramètres effectifs Coef1, Note1, Coef2 et Note2 sont transmis par valeur. Les
paramètres formels correspondants c1, n1, c2 et n2 seront tout simplement "initiali-
sées" par les quatre valeurs Coef1, Note1, Coef2 et Note2 au moment de l'appel de
cette fonction.
Remarque :
L'activation d'une fonction est provoquée par l'exécution d'une instruction d'appel.
Dans notre exemple, Moyenne (Coef1, Note1, Coef2, Note2) constitue l'appel à la
fonction Moyenne.
L'activation de la fonction après passage des paramètres se déroule dans l'ordre sui-
vant :
1. Déclarations des objets locaux ; ce qui provoque leur création (et notamment les
places mémoires nécessaires aux différentes variables locales).
2. Exécution des instructions qui composent le corps de la fonction.
3. Sortie de la fonction provoquée une fois que le corps est exécuté et que l'on atteint
l'instruction Fin. Il y a alors retour à l'appelant qui continue l'exécution de l'instruc-
tion en cours ou l'instruction qui suit l'instruction d'appel.
Une fonction possède un type, c'est celui du résultat qu'elle calcule. Dans notre exem-
ple, DEF FN Moyenne ( c1, n1, c2,n2 : Réel ) : Réel, la fonction Moyenne rend un
résultat du type Réel.
166
Les sous-programmes
c1 n1 c2 n2
Moyenne
167
Les sous-programmes
Retenons
Les objets déclarés 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
préférence communiquer à travers des paramètres.
168
Les sous-programmes
Exercices
Exercice 1
1. Quelle est la différence entre paramètre formel et paramètre effectif ?
2. Quels sont les sous-programmes qui peuvent accéder à un objet déclaré dans
un sous-programme F ?
3. Quel est le mode de passage des paramètres 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 utilisés dans ce programme :
• Les objets globaux
• Les objets locaux (par fonction)
• les paramètres formels
• les paramètres effectifs
Exercice 3
Soit le programme Pascal suivant :
PROGRAM Suite ;
VAR n1,n2 : INTEGER;
Un,Sn: REAL ;
169
Les sous-programmes
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 définissez une variable y initialisée à 0 ; vous afficherez cette varia-
ble avant d'appeler la fonction F ainsi qu'après.
Est-ce que la valeur de la variable y affichée après appel de la fonction F a
changé? Pourquoi ?
170
Les sous-programmes
Leon 4
Les procdures
Objectifs spécifiques
Plan de la leçon
I. Vocabulaire et syntaxe
Retenons
Exercices
171
Les sous-programmes
Leon 4
Les procdures
Le bon sens est la chose au monde la mieux partagée : car chacun pense en être
si bien pourvu, que ceux mêmes qui sont les plus difficiles à contenter en toute
chose n'ont point coutume d'en désirer plus qu'ils en ont.
DESCARTES
I. Vocabulaire et syntaxe
I.1 Définition
Les procédures sont des sous-programmes qui peuvent avoir zéro, un ou plusieurs
résultats.
Une procédure permet de résoudre un sous-problème.
L'appel de la procédure doit se trouver dans une instruction d'appel et ne peut pas
être dans une expression comme le cas des fonctions.
Dans l'analyse de l'algorithme nous écrivons :
PROC identificateur_procedure(paramètre1, paramètre2, paramètren)
Activité 1
Écrire un programme permettant de saisir le nom et la note de n candidats. Il doit
ensuite appeler une procédure Concours qui affiche l'admission éventuelle de cette
personne au concours. On fera la saisie de n noms et notes.
Analyse
Nom : Recrutements
S L.D.E. O.U.
Résultat = Les_recrutements
Ecrire("Donner le Nbre de personnes:")
1 Les_recrutements = n
n = Donnée i
Pour i de 1 à n Faire Nom
Nom = Donnée Note
Note = Donnée Concours
PROC Concours(Nom,Note)
FinPour
2 Fin Recrutements
172
Les sous-programmes
Algorithme
0) début 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 procédure Concours
DEF PROC Concours (Lenom : chaîne , Note_eval : Réel) ;
S L.D.E. O.U.
2 Résultat =Ecrire ("M. ", Lenom , message ) Lenom
1 [message]= [ ]Si ( Note_eval > 14 ) Alors Note_eval
messageo"vous êtes admis au concours " message
Sinon
messageo"vous n’êtes pas admis au concours "
Finsi
3 Fin Concours
Algorithme
0) DEF PROC Concours ( Lenom : Chaîne , Note_eval : Réel )
1) Si ( Note_eval > 14 ) Alors messageo" vous êtes admis au concours "
Sinon messageo" vous n’êtes pas admis au concours"
Finsi
2) Écrire (" M. ", Lenom , message )
3) Fin Concours
Tableau de déclaration des objets
Objet Type/nature Rôle
Message Chaîne Message à adresser au candidat
173
Les sous-programmes
Traduction en Pascal
PROGRAM Recrutements;
USES WINCRT;
VAR n ,i : INTEGER ;
Nom : STRING ;
Note : REAL ;
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'exécution
174
Les sous-programmes
Dans l'activité 1, l'appel est réalisé par l'instruction : PROC Concours ( Nom,Note ).
Les définitions des objets locaux et globaux pour une procédure suivent les mêmes
règles que celles édictées pour les fonctions.
Lenom et Note_eval sont deux paramètres formels avec un mode de transmission par
valeur que nous avons traité lors de l'étude des fonctions. Nous allons définir dans le
paragraphe suivant le mode de transmission par variable.
Analyse
Nom = Cherche_nbr
S L.D.E. O.U.
3 Résultat = Ecrire ("Alphabétique = ", Nbr_A, "Chiffre = " , Nbr_C) Nbr_A
(Nbr_A, Nbr_C) = PROC Occurence ( T, Nbr_A, Nbr_C ) Nbr_C
2 T = [ n = Donnée("Entrer le nombre d'éléments") ] T
Pour i de 1 à n Faire n
1 T[i] = Donnée(" Entrer un élément") i
FinPour
4 Fin cherche_nbr
175
Les sous-programmes
Algorithme
0) Début Cherche_nbr
1) Ecrire("Entrer le nombre d'éléments"), (Lire (n)
Pour i de 1 à n Faire
Ecrire(" Entrer un élément"), Lire ( T(i) )
FinPour
2) PROC Occurence ( T, Nbr_A, Nbr_C )
3) Ecrire ("Alphabétique = ", Nbr_A, "Consonne = " , Nbr_C)
4) Fin Chercher_nbr.
Remarque :
176
Les sous-programmes
Algorithme
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;
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''éléments du tableau');READLN( n );
FOR i := 1 TO n DO
BEGIN
WRITE('Entrer un élément: ');
READLN (T[i]);
END;
Occurrence ( T,Nbr_A,Nbr_C);
WRITELN ('Nombre de caractères alphabétiques est: ', Nbr_A);
WRITELN('Nombre de Chiffres est : ' , Nbr_C);
END.
Un cas d'exécution
178
Les sous-programmes
179
Les sous-programmes
Activité 3
Ecrire un programme qui répète 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 permutées.
Analyse
Nom : Lire_permut
S L.D.E. O.U.
Résultat = Lire_permuter n
1 Lire_ permuter =[n = Donnée("Nombre de couples à saisir >=1")] i
Pour i de 1 à n Faire x
x =Donnée("Entrer la première valeur") y
y =Donnée("Entrer la deuxième valeur")
Ecrire ("x =", x, "y =", y )
PROC Permut ( x, y )
Écrire ("x =", x, "y =", y )
FinPour
2 Fin Lire_permut
Algorithme
0) Début Lire_Permut
1) Ecrire("Nombre de couples à saisir >=1"), Lire (n)
Pour i de 1 à n Faire
Ecrire("Entrer la première valeur"), Lire (x)
Ecrire("Entrer la deuxième 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
Algorithme
Appelant Appelé
x, y
Remarque :
Dans cet exemple, les paramètres formels a et b sont initialisés au niveau de l'appel
par les valeurs de x et de y puis une fois les variables a et b permutées, au retour,
leurs valeurs sont communiquées en tant que résultats à l'appelant. Les variables x
et y reçoivent alors les nouvelles valeurs résultats. Ces paramètres sont des paramè-
tres Données / Résultats. Cet exemple nous montre l'intérêt 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
Un cas d'exécution
182
Les sous-programmes
Remarque :
PROGRAM Affiche ;
USES WINCRT ;
PROCEDURE Affiche_message;
VAR message: STRING;
BEGIN
WRITELN('Procédure sans paramètre ');
WRITELN('Cette procédure a pour rôle 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'exécution
183
Les sous-programmes
Analyse
184
Les sous-programmes
1 n = [] Répéter
Ecrire(" Entrer la taille du tableau: ")
Lire(n)
Jusqu'à n=20
3 Fin RemplirT
2 Fin Saisir_pos
2 Fin Crypt
185
Les sous-programmes
186
Les sous-programmes
0)Début 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
2)Pour i de 1 à n Répéter
Répéter
Ecrire(" Entrer élément ",i, " : ")
Lire(A[I])
Jusqu'à ORD(A[i]) DANS [48..57]
FinPour
3)Fin RemplirT
187
Les sous-programmes
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;
FOR i := 1 TO n DO
BEGIN
REPEAT
WRITE ('Entrer élément ',i,' : ');
READLN (A[i]);
UNTIL ORD(A[i]) IN [48..57];
END;
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;
END;
BEGIN
RemplirT(n,T);
AfficherT(n,T);
Saisir_pos(P1,P2);
Crypt(T,P1,P2);
Permut_circulaire(n,T);
AfficherT(n,T);
END.
190
Les sous-programmes
Un cas d'exécution
Retenons
Dans le cas où une procédure retourne un résultat, vous devez choisir le mode de
transmission par variable pour le paramètre résultat en question. Vous devez faire
précéder le paramètre formel par le mot clé VAR.
191
Les sous-programmes
Exercices
Exercice 1
On veut écrire un programme qui détermine le nombre de mots dans une phrase.
La phrase commence obligatoirement par une lettre. Devant chaque mot d'une
phrase il y a un caractère blanc et les signes de ponctuation sont collées aux mots
les précédant.
Questions :
1. Ecrire les modules effectuant chacun les traitements décrits ci-dessous.
3 Ecrire une procédure nommée LECTURE qui lit une phrase.
3 Ecrire une procédure nommée 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 procédure intitulé COMB_NBRE qui permet d'afficher toutes les combi-
naisons d'un nombre qui s'écrit sous la forme de 3 chiffres.
Questions :
1. Saisir n dans le programme principal
2. Appeler la procédure COMB_NBRE permettant de chercher et d'afficher les dif-
férentes combinaisons.
Exercice 3
On veut écrire un programme qui fait l'inversion des éléments d'un vecteur T à N
entiers ( N est compris entre 1 et 100).
Exemple : Donnée -10 15 12 6 -4 5 18
Résultat 18 5 -4 6 12 15 -10
Questions :
1. Analyser chacun de ces modules décrits ci-dessous.
3 Ecrire la procédure LECTURE (VAR N ; VAR T) qui range N entiers dans un
tableau T.
3 Ecrire la procédure INVERSE ( VAR X , Y ) qui permet de permuter deux
entiers X et Y donnés.
3 Ecrire la procédure INVERSE_TOUT ( VAR T ) qui inverse tous les éléments
du vecteur T en utilisant la procédure INVERSE.
3 Traduire cet algorithme en Pascal.
3 Ecrire la procédure RESULTAT ( T ) qui affiche le vecteur T résultat.
3 Ecrire l'analyse du programme principal.
2. En déduire 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 même.
É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 éléments. Écrire un pro-
gramme principal qui permet de :
3 saisir N éléments dans T
3 Saisir la valeur de l'élément x à insérer
3 Saisir la position d'insertion p dans le tableau
3 d'appeler une procédure permettant d'insérer l'élément x à la position p dans
le tableau.
Exercice 6
Soit la procédure 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 paramètre x ?
2. Quel est le mode de passage du paramètre F ?
3. Quels sont les avantages de proposer les deux types de passage de paramètre
par adresse et par valeur au sein d'un même langage.
Exercice 7
Soit le programme Pascal suivant qui comporte plusieurs sous programmes de dif-
férents niveaux d'imbrications.
program X ;
var A;
procedure Y ;
var B ; Question :
procedure Y1 ; Compléter le tableau ci-dessous pour déterminer
var C ; la nature (variable ou procédure) et les niveaux
begin des différents objets utilisés.
C := B + A
end ; Objet Nature NIVEAU
procedure Y2 ; C
var B ; Y1
begin
Y1 B
end ; Y
begin A
Y2
end ; Y2
begin X
Y
end .
193
Les sous-programmes
Exercice 8
Soit l'algorithme suivant :
0) DEF PROC SomCar (X1 : entier, X2 : entier, S : entier)
1) X1o X1 * X1
2) X2 o X2 * X2
3) S o X1 + X2
4) Fin SomCar
0) Début 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 résultat fourni par l'algorithme ci-dessus
2. Que faut-il ajouter à la procédure SomCar pour avoir un résultat correct ?
3. Remplacer dans ce programme la procédure par une fonction et trouver le
résultat 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) Début 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 procédure qui calcule la somme de deux polynômes de degrés
respectifs m et n.
2. Écrire une procédure permettant de calculer du produit de deux polynômes de
degrés respectifs m et n.
3. Écrire une procédure permettant de calculer le produit (P1 + P2 )*P3. où P1 , P2 et
P3 sont des polynômes de degrés respectifs m, n et p.
Exercice 10
Écrire un programme appelant une procédure permettant de calculer le point d'in-
tersection de deux droites données par leurs équations
y = a1x + b1 et y = a2x + b2.
Avant d'appeler cette procédure il faut bien sûr vérifier que a1 a2.
194
CHAPITRE
Chapitre 6
Les traitements
avancés
Objectifs :
Plan du chapitre :
Leçon 1 :
Méthodes de tri
Leçon 2 :
Recherche d'un élément dans
un tableau
Les traitements avancés
Leon 1
Mthodes de tri
Objectifs spécifiques :
Plan de la leçon :
I. Introduction
Retenons
Exercices
196
Les traitements avancés
Leon 1
Mthodes de tri
Une place pour chaque chose et chaque chose à sa place.
Samuel SMILES
I. Introduction
Le problème de tri est un classique de l'informatique ; les méthodes de tri sont utili-
sées dans différentes applications.
Par exemple :
- classer les élèves par ordre alphabétique ou par ordre de mérite
- mettre en ordre un dictionnaire
- trier l'index d'un livre
- afficher une liste triée d'un correcteur d'orthographe
-…
Définition
Un algorithme de tri est une suite finie d'instructions servant à réordonner une
séquence d'éléments suivant un critère fixé à priori. Ce critère est en fait une rela-
tion d'ordre total sur les éléments à trier.
197
Les traitements avancés
Les algorithmes de tri que nous allons définir traitent des tableaux situés dans la
mémoire centrale.
Remarques :
• Il faut faire la distinction entre le tri d'un grand nombre d'éléments et le tri de
quelques éléments.
• On peut trier autres données que des entiers. Il suffit de disposer d'un domaine de
valeurs muni d'une relation d'ordre totale. On peut donc trier des caractères, des
mots en ordre alphabétique...
II.1.1 Principe
L'algorithme de tri le plus simple est le tri par sélection. Il consiste à trouver l'empla-
cement de l'élément le plus petit du tableau. Une fois cet emplacement trouvé, on
compare son contenu avec T[1] et s'ils sont différents, on permute l'élément de l'em-
placement trouvé par l'élément de la première position T[1]. Après ce parcours le pre-
mier élément est bien placé.
198
Les traitements avancés
N.B.
- La recherche du plus petit élément d'un tableau sera assurée par une fonction ren-
voyant la position du minimum. Ce minimum est éventuellement répété plusieurs
fois dans T ; on décidera de choisir le premier.
- L'échange de deux éléments d'un tableau sera assurée par une procédure de per-
mutation.
Exemple :
On considère le tableau T contenant les 10 éléments suivants :
T 17 5 9 8 5 10 12 22 8
1 2 3 4 5 6 7 8 9
T 17 5 9 8 5 10 12 22 8
1 2 3 4 5 6 7 8 9
T 5 17 9 8 5 10 12 22 8
1 2 3 4 5 6 7 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.
T 5 5 9 8 17 10 12 22 8
1 2 3 4 5 6 7 8 9
199
Les traitements avancés
T 2 2 9 8 17 10 12 22 8
1 2 3 4 5 6 7 8 9
T 2 2 8 9 17 10 12 22 8
1 2 3 4 5 6 7 8 9
T 2 2 8 9 17 10 12 22 8
1 2 3 4 5 6 7 8 9
T 2 2 8 8 17 10 12 22 9
1 2 3 4 5 6 7 8 9
T 2 2 8 8 17 10 12 22 9
1 2 3 4 5 6 7 8 9
T 2 2 8 8 9 10 12 22 17
1 2 3 4 5 6 7 8 9
T 2 2 8 8 9 10 12 22 17
1 2 3 4 5 6 7 8 9
200
Les traitements avancés
T 2 2 8 8 9 10 12 22 17
1 2 3 4 5 6 7 8 9
T 2 2 8 8 9 10 12 17 22
1 2 3 4 5 6 7 8 9
T 2 2 8 8 9 10 12 17 22
1 2 3 4 5 6 7 8 9
Remarque :
Il faut faire la distinction entre le tri d'un grand nombre d'éléments et le tri de quelques
éléments.
Analyse
201
Les traitements avancés
202
Les traitements avancés
Algorithmes
203
Les traitements avancés
Traduction en Pascal
BEGIN
Remarque :
Il est facile de compter le nombre d'opérations nécessaires pour trier tout le tableau T.
A chaque itération, on démarre à l'élément T[i] et on le compare successivement à
T[i+1], T[i+2], ..., T[n]. On fait donc n-i comparaisons.
On commence avec i=1et on finit avec i=n-1.
Donc, on fait (n-1) + (n-2) + … + 2 + 1=n(n-1)/2 comparaisons, et au maximum n-1
permutations.
204
Les traitements avancés
II.2.1 Principe
Le tri à bulles consiste à faire remonter le plus grand élément du tableau en compa-
rant les éléments successifs. C'est-à-dire qu'on va comparer le 1er et le 2ième élément
du tableau, s'ils ne sont pas dans le bon ordre, on les permute, on passe ensuite au
2ième et 3ième, puis au 3ième et 4ième et ainsi de suite jusqu'au (n-1)ième et le nième éléments.
A la fin du premier parcours, on aura pousser le plus grand élément du tableau vers
sa place finale qui est le nième élément du tableau. On recommence cette opération en
parcourant de 1 à n-1 puis de 1 à n-2 et ainsi de suite.
On arrête quand la partie à trier est réduite à un seul élément ou que le tableau est
devenu trié et dans ce cas on doit avoir un indicateur qui donne cette information. En
effet, l'idée est de vérifier si lors du dernier parcours aucune permutation n'a été faite
ce qui signifie que le tableau est devenu trié.
Exemple
On considère le tableau T contenant les 5 éléments suivants :
T 3 1 9 0 3
1 2 3 4 5
T 3 1 9 0 3
1 2 3 4 5
- Puisque 3 >1, on les permute.
T 1 3 9 0 3
1 2 3 4 5
2) On compare T[2] et T[3]. Puisque ils sont dans le bon ordre on ne fait rien.
T 1 3 9 0 3
1 2 3 4 5
205
Les traitements avancés
206
Les traitements avancés
Algorithmes
207
Les traitements avancés
Traduction en Pascal
PROGRAM TRI_A_BULLES;
USES WINCRT;
TYPE TAB = ARRAY [1..50] OF INTEGER;
VAR
T: TAB;
n: INTEGER;
i: INTEGER;
208
Les traitements avancés
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('Résultat 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'exécution
Remarque :
Dans le pire des cas le tri à bulles fait (n-1)+(n-2)+…+2+1 comparaisons et autant de
permutations.
209
Les traitements avancés
II.3.1 Principe
Le tri par insertion consiste à chercher la position du ième élément dans la partie du
tableau commençant de 1 à i sachant que les i-1 premiers éléments sont triés. Si cette
position est i, l'élément est donc à sa bonne place, sinon, supposons que cette posi-
tion est j. Ce j est forcément entre 1 et i-1. On décale d'un pas vers l'avant (à droite)
tous les éléments de j à i-1 puis on insère l'élément d'indice i à la position j.
On commence ce procédé à partir du 2ème élément i=2.
Cette méthode ressemble étroitement au rangement d'une main de cartes par un
joueur de belotte.
Pré-analyse
On considère le tableau T contenant les 5 éléments suivants :
T 3 1 9 0 3
1 2 3 4 5
Au départ, on considère que la partie triée contient le seul premier élément qui vaut 3,
le reste formant la partie non triée. Nous commençons donc par le deuxième élément
du tableau à savoir l'élément contenant 1 et d'indice 2.
T 3 1 9 0 3
1 2 3 4 5
Partie triée Partie non triée
T 1 3 9 0 3
1 2 3 4 5
T 1 3 9 0 3
1 2 3 4 5
T 0 1 3 9 3
1 2 3 4 5
T 0 1 3 9 3
1 2 3 4 5
T 0 1 3 3 9
1 2 3 4 5
Analyse
211
Les traitements avancés
Type
TAB=Tableau de 20 entiers
212
Les traitements avancés
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 Répéter
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
T[p] := e; Remarque :
END; Dans le pire des cas le tri par insertion
fait 1+2+…+n-1 comparaisons et autant
BEGIN de décalages.
FOR i := 2 TO n DO
BEGIN En résumé, il fait n(n-1) opérations
v := T[i]; (comparaisons et décalages confon-
j := i; dus) ; on verra plus loin que ce nombre
Decaler_d(T,j,v); sera considérablement réduit en utili-
Inserer(T,j,v); sant la méthode de dichotomie pour la
END; recherche de la position d'insertion.
END;
213
Les traitements avancés
Retenons
Un algorithme de tri consiste à ranger dans un ordre croissant ou décroissant une
suite d'éléments quelconques selon un critère préalablement défini .
On se propose de trier un tableau T par ordre croissant.
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] jus-
qu'à la dernière paire T[n-1] et T[n]. On aura pousser ainsi le plus grand élément
de T vers la dernière position du tableau, donc T[n] est maintenant à sa bonne
place donc plus la peine d'y revenir.
Nous supposons que les éléments de 1 à i-1 sont bien placés (triés), nous allons
placer le ième élément.
214
Les traitements avancés
Exercices
Exercice 1
On se propose d'écrire une analyse permettant :
1. de saisir les éléments d'un tableau T composé de n chaînes de caractères non
vides.
2. de trier le tableau T dans un ordre croissant selon les deux critères suivants :
3 longueur de la chaîne en premier lieu
3 ordre alphabétique 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 extrémités est atteinte. Ainsi, les plus petits éléments du
tableau descendent au même rythme que remontent les plus grands éléments.
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 chaînes de caractères et Tcouleur
de n caractères. Une couleur peut être blanche de caractère 'B' ou noire de carac-
tère 'N'.
Écrire un programme en Pascal qui permet de réarranger les éléments de Tnom et
Tcouleur de manière à ce que les éléments de couleur 'B' précèdent les éléments
de couleur 'N'. Si deux éléments ont des couleurs identiques , l'ordre alphabétique
des chaînes intervient.
Exemple :
(Ali, B)(Salah, N), (Sonia, B), (Tounsi, N), (Salma, N) et (Ahmed, B) sont réarran-
gés 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 pro-
gramme qui permet de créer un tableau d'entiers croissants à partir de deux
tableaux d'entiers non croissants.
Exemple :
V1 = 1, 3, 2, -6
V2 = 0, 4, -5
résultat = -6, -5, 0, 1, 2, 3, 4
215
Les traitements avancés
Exercice 5
On veut écrire un programme pascal permettant de faire une étude comparative
des algorithmes de tri (sélection, bulles et insertion).
Questions :
1. Le programme devra remplir aléatoirement un tableau de N entiers, l'afficher, le
trier à l'aide des différentes méthodes de tri proposées (toujours à partir du même
tableau initial) et afficher les tableaux triés obtenus.
2. Comparer les temps d'exécution de ces algorithmes pour différentes valeurs de N.
Exercice 6
Écrire, en s'inspirant du tri par sélection, une procédure 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 élément dans l'ordre croissant sans modifier le tableau T.
Exemple :
T 80 50 91 34 20
1 2 3 4 5
RANG 5 4 2 1 3
1 2 3 4 5
216
Les traitements avancés
Leon 2
Algorithmes de recherche
d'un lment dans un tableau
Objectifs spécifiques
Plan de la leçon
I. Introduction
II.1. Définition
II.2. Application
Retenons
Exercices
217
Les traitements avancés
Leon 2
Algorithmes de recherche
d'un lment dans un tableau
la vraie méthode est la voie par laquelle la vérité elle-même, ou les
essences objectives des choses ou leurs idées sont cherchées dans
l'ordre dû.
SPINOZA
I. Introduction
On a souvent besoin de rechercher, dans un tableau, un élément donné ou son éven-
tuelle position. Un point particulier à ne pas oublier pour tous les algorithmes est le
traitement du cas où l'élément cherché n'est pas dans le tableau. Une autre caracté-
ristique importante d'un algorithme de recherche est son comportement désiré en cas
d'éléments identiques (doit-il donner le premier, le dernier ou tous les éléments iden-
tiques ?).
Dans cette leçon, nous nous limiterons à l'étude de deux méthodes de recherche
parmi les plus connues, notamment la recherche séquentielle et la recherche dicho-
tomique.
Activité 1
Écrire un programme qui saisit un entier naturel n suivi de n entiers à mettre dans
un tableau A puis une valeur v, ensuite il appelle une fonction recherche qui cher-
che si v figure ou non dans le tableau A.
Pré-analyse
Analyse
Nom = Cherche_elem
S L.D.E. O.U.
4 Résultat = Ecrire ("Existe = ", exist) exist
3 exist o FN Recherche (A, n, v) A
2 v = Donnée n
1 A = [ n = Donnée ] Pour i de 1 à n Faire v
A[i] = Donnée i
FinPour Recherche
5 Fin cherche_elem
Tableau de déclaration des objets
Objet Type/nature Rôle
exist Booléen Paramètre effectif résultat booléen de la recherche
A Tableau d'entiers Tableau des éléments
n Entier Nombre d'éléments de A
v Entier Élément à rechercher
i Entier Compteur
Recherche Fonction Renvoie VRAI si v existe dans A et FAUX sinon.
Algorithme
1) Début Cherche_elem
2)Lire (n)
3)Pour i de 1 à n Répéter
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) : Booléen
S L.D.E. O.U.
Résultat = Rechercher TE
2 Recherche = [ ]Si (TE[ i ] = p) Alors n
Recherche o VRAI p
Sinon i
Recherche o FAUX
FinSi
1 i = [ io 0 ]Répéter
i o i +1
Jusqu'à (TE[ i ] = p) OU (i = n)
3 Fin Recherche
219
Les traitements avancés
Algorithme
0) DEF FN Recherche (n, p : entier ; TE : tableau de 20 entiers) : booléen
1) [ i o 0] Répéter
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;
220
Les traitements avancés
BEGIN
WRITE('Entrer la taille du tableau : ');
READLN(n);
FOR i := 1 TO n DO
BEGIN
WRITE('Entrer un élément : ');
READLN(T[i]);
END;
WRITE('Entrer l''élément à rechercher : ');
READLN(v);
Exist:=Recherche (n, v, T);
WRITELN ('Exist =', exist);
END.
Un cas d'exécution
Remarque :
Cet algorithme effectue au maximum n comparaisons.
II.1 Définition
II.2 Application
Développez un programme qui saisit un entier naturel n suivi de n réels à mettre dans
un tableau A, puis une valeur v dont on veut chercher la dernière 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 avancés
Pré-analyse
Analyse
Nom = Cherche_der_pos_elem
S L.D.E. O.U.
4 Résultat = Ecrire ("Dernière Position = ", pos) pos
3 pos o FN Recherche_der_pos (A, n, v) A
2 v = Donnée n
1 (A,n) = [ n = Donnée ] Pour i de 1 à n Répéter v
T[i] = Donnée i
FinPour Recherche_der_pos
5 Fin cherche_der_pos_elem
Algorithme
0) Début Cherche_der_pos_elem
1) Lire (n)
Pour i de 1 à n Répéter
Lire ( A(i) )
FinPour
2) Lire (v)
3) pos o FN Recherche_der_pos (A, n, v)
4) Ecrire ("Dernière Position = ", pos)
5) Fin Chercher_der_pos_elem
222
Les traitements avancés
Algorithme
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 avancés
PROGRAM Cherche_der_pos_elem;
USES WINCRT;
TYPE Typtab=ARRAY [1..20] OF INTEGER ;
VAR
T : Typtab ;
pos,n,v,i: INTEGER;
BEGIN
WRITE('Entrer la taille du tableau : '); READLN(n);
FOR i := 1 TO n DO
BEGIN
WRITE('Entrer un élément : ');
READLN(T[i]);
END;
WRITE('Entrer l''élément à rechercher : ');READLN(v);
pos:=Recherche_der_pos(T, n, v);
WRITELN ('Dernière Position =', pos);
END.
Un cas d'exécution
224
Les traitements avancés
225
Les traitements avancés
Traduction en Pascal
PROGRAM Cherche_elem;
USES WINCRT;
TYPE Typtab=ARRAY [1..20] OF INTEGER;
VAR Ok: BOOLEAN;
T : Typtab;
n,i,p : INTEGER;
226
Les traitements avancés
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 élément : ');
READLN (T[i]);
END;
WRITE('Entrer l''élément à rechercher : ');
READLN (p);
OK:= Recherche (n,p,T);
WRITELN ('Exist = ' ,OK);
END.
Un cas d'exécution
Remarques :
• Nous pouvons constater qu'à la première étape, nous devons prendre le milieu
d'un tableau de n éléments, à l'étape suivante le milieu d'un tableau de n/2 élé-
ments, puis de n/4 éléments, ...
• La recherche s'arrête quand le nombre d'éléments est réduit à 1 ou l'élément est
trouvé.
227
Les traitements avancés
Définition
La dichotomie peut être vue comme une variante simplifiée de la stratégie plus géné-
rale diviser pour régner (en anglais, divide and conquer).
Retenons
– La méthode de la recherche séquentielle consiste à parcourir le tableau progres-
sivement du début vers la fin en les comparant avec l'élément à chercher jusqu'à
trouver ce dernier ou achever le tableau.
228
Les traitements avancés
Exercices
Exercice 1
Effectuer une analyse, un algorithme et la traduction en Pascal du programme inti-
tulé ANNUAIRE1 qui, saisit un nom puis détermine le numéro de téléphone cor-
respondant.
Avec deux tableaux Tnom et Ttel, indicés en parallèle, le numéro de téléphone de
Tnom[i] étant Ttel[i], on peut faire un annuaire téléphonique. L'information à recher-
cher est le numéro de téléphone.
Exemple :
Tnom Index Ttel
Jamel 1 71222
Naoufel 2 75123
Imed 3 73632
Ghazi 4 72098
Salma 5 78453
Ibtissem 6 72331
Hakim 7 72776
Afef 8 77345
Abdelkader 9 78080
Fadhila 10 77777
Zoubeir 11 72987
Exercice 2
Supposons que la table des noms est triée par ordre alphabétique (comme
l'annuaire des PTT). Au lieu de faire une recherche séquentiellement, utiliser la
méthode de recherche dichotomique pour résoudre l'exercice 1.
Exercice 3
Écrire un programme qui lit n caractères 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 caractères identiques et affiche le caractère
concerné ainsi que le nombre de fois qu'il est répété. On suppose que les caractè-
res tapés par l'utilisateur sont différents 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 avancés
Exercice 4
Écrire un programme en Pascal qui réalise le traitement suivant :
Compactage d'un tableau d'entiers positifs ou nuls : remplacer chaque suite de
zéros par le nombre de zéros multiplié par -1.
Exemple :
Vecteur = 1 2 3 0 0 0 2 0 0
résultats = 1 2 3 -3 2 -2
Exercice 5
On veut insérer un nouveau élément dans un tableau trié de n entiers en mainte-
nant le tableau ordonné. Pour insérer un nouvel élément dans le tableau, il faut d'a-
bord trouver son emplacement par une recherche dichotomique, puis décaler tous
les éléments pour pouvoir insérer le nouveau élément au bon endroit.
Écrire un programme en Pascal, qui permet d'insérer un élément dans un tableau
trié.
Exercice 6
Écrire un programme Pascal permettant :
- d'insérer un réel x dans un tableau à la position p. Si le tableau est plein le pro-
gramme doit d'abord construire un nouveau tableau dont le nombre d'éléments est
10% supérieur au tableau initial.
- de supprimer l'élément à la position p et de décaler le reste des éléments
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 référence)
[BOY] J.BOYER, J.-D. LAMOITIER, M. TREILLET.
Systèmes 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 théorie.
CEDIC. 1983
[ENG] A. ENGEL
Mathématique élémentaire 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 (Créez vos progiciels).
Éditions Radio. 1987
[MEY] J.-J. MEYER
Pratique du Turbo Pascal (Créez 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 systématique.
MASSON. 1986
RÉFÉRENCES WEB
• http://fr.wikipedia.org
• http://www.commentcamarche.net
231
Annexe
Table des codes ASCII.
HEX DEC CAR HEX DEC CAR HEX DEC CAR HEX DEC CAR
0 0 NUL 20 32 40 64 @ 60 96 `
1 1 SQH 21 33 ! 41 65 A 61 97 a
2 2 STX 22 34 " 42 66 B 62 98 b
3 3 ETX 23 35 # 43 67 C 63 99 c
4 4 EOT 24 36 $ 44 68 D 64 100 d
5 5 ENQ 25 37 % 45 69 E 65 101 e
6 6 ACK 26 38 & 46 70 F 66 102 f
7 7 BEL 27 39 ' 47 71 G 67 103 g
8 8 BS 28 40 ( 48 72 H 68 104 h
9 9 HT 29 41 ) 49 73 I 69 405 i
A 10 LF 2A 42 * 4A 74 J 6A 106 j
B 11 VT 2B 43 + 4B 75 K 6B 107 k
C 12 FF 2C 44 , 4C 76 L 6C 108 l
D 13 CR 2D 45 - 4D 77 M 6D 109 m
E 14 SO 2E 46 . 4E 78 N 6E 110 n
F 15 SI 2F 47 / 4F 79 O 6F 111 o
10 16 DLE 30 48 0 50 80 P 70 112 p
11 17 DC1 31 49 1 51 81 Q 71 113 q
12 18 DC2 32 50 2 52 82 R 72 114 r
13 19 DC3 33 51 3 53 83 S 73 115 s
14 20 DC4 34 52 4 54 84 T 74 116 t
15 21 NAK 35 53 5 55 85 U 75 117 u
16 22 SYN 36 54 6 56 86 V 76 118 v
17 23 ETB 37 55 7 57 87 W 77 119 w
18 24 CAN 38 56 8 58 88 X 78 120 x
19 25 EM 39 57 9 59 89 Y 79 121 y
1A 26 SUB 3A 58 : 5A 90 Z 7A 122 z
1B 27 ESC 3B 59 ; 5B 91 [ 7B 123 {
1C 28 FS 3C 60 < 5C 92 \ 7C 124 |
1D 29 GS 3D 61 = 5D 93 ] 7D 125 }
1E 30 RS 3E 62 > 5E 94 ^ 7E 126 ~
1F 31 US 3F 63 ? 5F 95 _ 7F 127
Les autres pages de codes ne sont pas standards, nous ne les reproduisons pas.
232