Vous êtes sur la page 1sur 127

Algorithmique et programmation Algorithmique et programmation

I. Les constantes et les variables


Chapitre 1. Activité 1

Les structures de Soit le programme pascal suivant :

PROGRAM act1 ;
Solution :
3)

données & les structures USES WINCRT ;

BEGIN
PROGRAM solact1 ;
USES WINCRT ;
CONST pi = 3.14;
VAR s, r : REAL;

simples WRITELN ('Donner le rayon : ');


READLN (r);
s := pi * r * r;
WRITELN ('Surface = ',s);
BEGIN
WRITELN('Donner le rayon : ');
READLN(r);
END. s := pi * r * r;
WRITELN ('Surface = ',s);
Questions : END.
Objectifs spécifiques :
5) Le rôle de ce programme est de calculer et
1) Lancer Turbo pascal.
d’afficher la surface d’un cercle pour un rayon donné.
2) Taper ce programme.
- Identifier et utiliser les structures de données pour résoudre un problème 3) Compléter la partie manquante.
- Comprendre le déroulement d’un algorithme comportant des affectations et des 4) Exécuter ce programme et observer les sorties
opérations d’entrée/sortie. écran.
5) En déduire le rôle de ce programme.

Plan de chapitre :

I. Les constantes et les variables


II. Les types de données
III. Les structures simples 2. Les constantes
IV. Les types énumérés
V. Les types utilisateurs a) Définition
VI. Les tableaux Une constante est une donnée dont la valeur reste fixe durant l’exécution d’un programme.

b) Caractéristiques

Une constante est caractérisée par un nom qui est son identificateur unique en plus d’une valeur inchangeable
qui nous permet de déterminer implicitement le type de cette dernière.

Temps prévue : 16h

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

c) Déclaration II. Les types de données


En algorithmique, on déclare une constante comme suit :
1. Les types numériques
Objet Type/nature
Constante = valeur a. Le type Entier
Général Nom de la constante
i) Déclaration

Exemple P1 Constante = 9.8 Au niveau de l’algorithme :

Objet Type/nature
En PASCAL, on déclare une constante comme suit :
Général Nom Entier
Const nom=valeur de la constante ;

Exemple : Const PI = 3.14 ; Exemple i,j,k Entier


3. Les variables
Au niveau du PASCAL : Var i, j, k : INTEGER ;
a) Définition
Remarque : Le langage PASCAL a cinq types entiers prédéfinis. Chaque type a un domaine de définition
Une variable est un objet pouvant prendre différentes valeurs tout le long de l’exécution d’un algorithme ou spécifique.
d’un programme.
Type Domaine de définition Nombre de bits
b) Caractéristiques SHORTINT -128..127 Signé 8 bits
INTEGER -32768..32767 Signé 16 bits
Une variable est caractérisée par :
LONGINT -2147483648..2147483647 Signé 32 bits
- Un nom (identificateur unique)
BYTE 0..255 Non signé 8 bits
- Un contenu
WORD 0..65535 Non signé 16 bits
- Un type
ii) Les opérateurs arithmétiques et leurs priorités
c) Déclaration Soit l’opération suivante :
C : résultat
En algorithmique, on déclare une variable comme suit : C=A+B avec A et B : opérandes
+ : opérateur
Objet Type/nature
Désignation de Priorité des Opérateur Type des opérandes
Général Nom Type de la variable l’opération opérateurs En algorithme En Pascal
Parenthèses 1 (…) (…) Tout type
Multiplication x * Entier ou réel
Exemple m Réel Division réelle / / Réel
Division entière 2 DIV DIV Entier
Reste de la MOD MOD Entier
En PASCAL, on déclare une variable comme suit :
division entière
Var nom : type ; Addition + + Entier ou réel
Exemple : Var k : REAL ; Soustraction 3 - - Entier ou réel

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Egale = = Tout type ordonné b. Le type réel


Différent ≠ <> Tout type ordonné
Inférieur < < Tout type ordonné i) Activité 2
Supérieur 4 > > Tout type ordonné
Inférieur ou égale ≤ <= Tout type ordonné Soit le programme pascal suivant : Questions :
Supérieur ou égale ≥ >= Tout type ordonné PROGRAM act2; 1) Lancer Turbo pascal.
L’appartenance 5 DANS IN Type scalaire USES WINCRT;
VAR 2) Taper ce programme.
iii) Application 1 a , b , c :INTEGER;
BEGIN 3) Compiler ce programme.
WRITE('a= ');READ(a);
Donner le type et le résultat des expressions suivantes, ou bien dire si elles ne sont pas bien formées.
WRITE('b= ');READ(b); 4) Qu’est ce que vous remarquez ?
c:=a/b;
1. ( 2 + 3 ) * 4 8. ( 10 DIV 5 ) / 2
WRITELN('c = ' , c); 5) Corriger les erreurs de compilation.
2. 2 + ( 3 * 4 ) 9. 8 + 4 * 3 DIV 2 END.
3. ( 3 * ( 1 + 2 ) ) + 4 10. 6 MOD 4 * 2 DIV 3 Solution :
PROGRAM solact2;
5. 2 + 3 * 4 11. 7 DIV ( ( 5 MOD 3) MOD 4) USES WINCRT;
6. 2 * 3 + 4 DIV 3 12. ( 12 > 24 ) + ( 2 + 4 =12) VAR
a,b:INTEGER;
7. 2 + ( 3 + 4 * 2 ) * 5 13. 12 > 3 > 4 c:REAL;
BEGIN
WRITE('a= ');READ(a);
Solution WRITE('b= ');READ(b);
c:=a/b;
1. Entier : 2 + 3 donne 5 , multiplié par 4 donne 20 WRITELN('c = ' , c);
2. Entier : 3 * 4 donne 12, ajouté à 2 donne 14 END.
3. Entier : 1 + 2 donne 3, multiplié par 3 donne 9 , ajouté à 4 donne 13
4. Réel : calcul de SIN (0) puis multiplication par 5.0 donne 0 * 5 = 0
5. Entier : donne 14 car la sous-expression 3 * 4 est d’abord évaluée ( priorité de * supérieur à + )
6. Entier : donne 7 car la sous-expression 2 * 3 est d’abord évaluée, puis la sous-expression 4 DIV 3 et enfin
l’addition des résultats partiels 6 et 1 est effectuée ii) Déclaration
7. Entier : donne 57 (4 * 2 puis ajouter 3 donne 11, multiplier par 5 puis ajouter 2)
Au niveau de l’algorithme :
8. Réel : donne 1.000
9. Entier : donne 14 : 4 * 3 donne 12 divisé par 2 donne 6 ajouté à 8 donne 14 Objet Type/nature
10. Entier : donne 1
Général Nom Réel
11. Entier : donne 3
12. Erreur : booléen + booléen
13. Erreur : 2 expressions de comparaisons sans opérateurs booléen ( 12 > 3 et 3 > 4 ) Exemple x,y Réel

Au niveau du PASCAL :

Var x, y : REAL ;

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

c. Les fonctions arithmétiques standards i) Application 2


La bibliothèque TURBO PASCAL, comme celle de la plupart des langages de programmation, est riche en 1) Donner les expressions arithmétiques correspondantes aux expressions suivantes écrites en PASCAL :
fonctions arithmétiques dont voici les plus utilisées : SQRT (2*a+3/b-2)/3+x
4*x/c*6-x
10*x/2+x
Les fonctions arithmétiques standards
Syntaxe en Syntaxe en Rôle de la fonction Type Type de Exemples
2) Réciproquement, écrire en PASCAL les expressions arithmétiques suivantes :
algorithme Pascal de x résultat
Retourne la valeur Entier Même R : = ABS (-12) ;
²  ²
  
Abs (x) ABS (x) absolue de x. ou réel type que x R= 12.


 
+1

Retourne le carré de x. Entier Même R: = SQR (12);

Carré (x) SQR (x) ou réel type que x R= 144.

Retourne la racine carré R: = SQRT (9);


RacineCarré SQRT(x) de x si x est positif sinon Réel Réel R= 3. Solution :


(x) il provoque une erreur.

   
Retourne un réel compris Aléa pourrait produire

  


Aléa RANDOM entre 0 et 1 exclus. Entier Entier 0.36 par exemple.
1)
Retourne un entier Aléa (9) pourrait produire
Aléa (x) RANDOM(x) compris entre 0 et n-1. Entier Entier 2 par exemple. 2) (4* SQR(x) +2 * x -5)/ SQRT(x+5y/2)
y+2/10*x +1
Retourne l’entier le plus R: = ROUND (3.7); SQRT (SQR(x)-y / (y –x/2))
Arrondi (x) ROUND (x) proche de x. Réel Entier R= 4.
ii) Application 3
Retourne un entier, en R: = TRUNC (3.7);
Tronc (x) TRUNC (x) ignorant la partie Réel Entier R= 3.
Donner en algorithmique et en PASCAL l’équivalent de chacune des expressions arithmétiques suivantes :
décimale de x.
 x + 1 ² 2x² + 4x − 1 x³
A = B = |10 x + 2| D= −1
Donne la partie entière Entier R: = ENT (3.7);

√x &|x + 5| C =  x  + 2
ENT(x) INT(x) d’un réel. ou réel Entier R= 3.

Donne la partie R: = FRAC (3.7); 3


FRAC(x) FRAC(x) fractionnaire d’un réel. Réel Réel R=0.7.
Solution
Retourne le cosinus de x Réel Réel R:= COS (0.48);
Cos (x) COS (x) (x en radians). R= 0.88.
A Carré ( x + 1 ) / Racine (x)
Retourne le sinus de x (x Réel Réel R: = SIN (0.48); En B ( 2 * carré (x)+ 4 * x -1) / Racine ( Abs ( x+5 ) )
Sin (x) SIN (x) en radians) R= 0.46. algorithme C Racine ( Abs ( 10 * x + 2 ) / 3 ) + x
D ( ( x * carré (x)) / carré (x) + 2 ) ) - 1
Retourne la valeur en R: = ARCTAN (0.48);
A SQR ( x +1 ) / SQRT ( x)
Tang(x) ARCTAN (x) radians de l’arc tangente Réel Réel R= 0.44.
de x. En pascal B ( 2 * SQR ( x) + 4 * x -1 ) / SQRT(ABS(x+5))
Retourne l’exponentielle Réel Réel R:= EXP (0.48); C SQRT(ABS(10 * x + 2 ) / 3 ) + x
Exp (x) EXP (x) de x. R= 1.61. D ( ( x * SQR(x) )/ ( SQR(x) + 2 )) -1
Retourne le logarithme R:= LN (0.48);
Ln (x) LN (x) népérien de x si x est Réel Réel R= -0.73
positif sinon il provoque
une erreur.

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

iii) Application 4 2. Le type booléen


Dite si les expressions suivantes sont valides ou non (avec X désigne un réel et n désigne un entier ) .
a) Activité 3
A) n ← m / 2 ( m est un entier pair )
Soit le programme pascal suivant :
B) X ← ABS(n)
Questions :
C) n ← ABS(X) PROGRAM act3;
D) X ← ( 2 * n - 1)/5 USES WINCRT;
1) Lancer Turbo pascal.
VAR
Solution a : BOOLEAN ;
2) Ouvrir le fichier « act3.pas » se trouvant dans le
b: REAL;
dossier « tp programmation 1 » situé à la racine du
c: INTEGER;
Expression A B C D BEGIN
lecteur C.
Oui / Non Non Oui Non Oui a:=TRUE;
3) Compiler ce programme.
b:=FALSE;
c:=a+b;
4) Corriger les erreurs de compilation.
WRITELN('c = ',c);
c:=a*b;
5) Exécuter ce programme et observer les sorties
WRITELN('c = ',c);
écran.
c:=a OUEX b;
WRITELN('c = ',c);
c:= NON(a);
WRITELN('c = ',c);
END.

Solution :
PROGRAM solact3;
USES WINCRT;
VAR
a , b , c : BOOLEAN ;
BEGIN
a:=TRUE;
b:=FALSE;
c:=a OR b;
WRITELN('c = ',c);
c:=a AND b;
WRITELN('c = ',c);
c:=a XOR b;
WRITELN('c = ',c);
c:= NOT(a);
WRITELN('c = ',c);
END.

Enseignant : AHMED BELHASSEN 9 Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation Algorithmique et programmation

b) Déclaration d) Application 5
Au niveau de l’algorithme : Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A, B, C et D pour les deux
cas suivants :
Objet Type/nature 1. ( a,b,c,d )=(5,7,2,7)
2. ( a,b,c,d )=(4,2,1,-9)
Général Nom Booléen
A := (a<b) AND (c>d)
B := (b=d) AND NOT(a<c)
Exemple p,q Booléen C := NOT ((c+a=<b) OR (a>d))
D:= (a+c<d) XOR (b-d>c)

Au niveau du PASCAL : Var p , q : BOOLEAN ; Solution

c) Les opérateurs logiques


Expression A B C D
Ces opérateurs sont :
TRUE AND TRUE AND NOT NOT ( TRUE OR FALSE XOR
Non : Négation, ET : Conjonction, OU : Disjonction, OUex : Ou exclusif FALSE= FALSE ( FALSE ) = TRUE FALSE ) = NOT FALSE = FALSE
Résultat 1
AND TRUE = ( TRUE )=FALSE
Table de vérité de ces opérateurs : TRUE
FALSE AND FALSE AND NOT NOT ( FALSE OR FALSE XOR
x y Non(x) x ET y x OU y x OUex y Résultat 2 TRUE = FALSE ( FALSE ) = TRUE ) = TRUE =TRUE
F F V F F F FALSE AND NOT
F V V F V V TRUE = FALSE ( TRUE)=FALSE
V V F V V F
V F F F V V

Constations

Opérateur En Pascal
NON NOT

ET AND

OU OR

OUex XOR

Remarque
Il existe un ordre de priorité entre les opérateurs logiques : NON, ET, OU, OUex.

Enseignant : AHMED BELHASSEN 11 Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation Algorithmique et programmation
3. Le type caractère a- t
b- "t"
c- 7
a) Déclaration d-"7"
Au niveau de l’algorithme :
Solution :
1) a-"B"
Objet Type/nature b- c
c- n
Général Nom Caractère 2) a- t ainsi écrit, représente un objet identifié par l’identificateur t ; c’est par exemple une variable.
b- t entre guillemets désigne le caractère t.
c- 7 désigne l’entier 7.
d- "7" désigne le caractère "7".
Exemple car1, car2 Caractère
4. Le type chaine de caractères
Au niveau du PASCAL : Var car1, car2 : CHAR ;
a) Définition
b) Les fonctions prédéfinies sur les caractères
Une chaine de caractères est une suite ordonnée de caractères. En algorithmique, la valeur d’une chaine se note
en utilisant des guillemets (").En langage PASCAL, on utilise plutôt des quottes simples ( ' ).
Les fonctions prédéfinies sur les caractères
Syntaxe en Syntaxe en Rôle de la fonction Type de Type de Exemples Exemple
algorithme Pascal x résultat Algorithmique PASCAL
Retourne le caractère R := CHR (65) ;
"programmation" 'programmation'
CHR (N) CHR (N) dont le code ASCII est N. Entier Caractère R sera égale à A.
"l'algorithmique" 'l'algorithmique'
R := CHR (97) ;
R sera égale à a.
Retourne le code ASCII R := ORD ('D') ; b) Déclaration
ORD (C) ORD (C) du caractère C. Caractère Entier R sera égale à 68.
R := ORD ('%') ; Au niveau de l’algorithme :
R sera égale à 37.
Retourne le prédécesseur N :=PRED (4) ; Objet Type/nature
PRED (C) PRED (C) de C (c’est à dire qui Scalaire Même type N sera égale à 3.
précède C). de C R :=PRED ('D') ; Général Nom Chaine
R sera égale à 'C'.
Retourne le successeur de N := SUCC (3) ;
SUCC (C) SUCC (C) C (c’est à dire qui suit C). Scalaire Même type  N sera égale à 4.
que x R:= SUCC ('C'); Nom Chaine [taille]
R sera égale à 'D'.
Convertir le caractère C R:= UPCASE ('e'); prénom chaine [10]
MAJUS (C) UPCASE(C) en majuscule s’il est Caractère Caractère R sera égale à 'E'. Exemple nom chaine
possible. R:= UPCASE ('F'); adresse chaine [25]
R sera égale à 'F'.
c) Application 6 Au niveau du PASCAL : Var prénom : STRING [10] ;
nom : STRING;
1) Chercher les résultats des expressions suivantes : adresse : STRING [25] ;
a- CHR (ORD ("A") +1) Remarque
b- CHR (ORD (c)), c est une variable de type caractère.
c- ORD (CHR (n)), n est un entier. On pourra accéder en lecture et en écriture au ième caractère d’une chaine CH en utilisant la notation CH[ i ] ou
2) Que désigne chacune des notations suivantes ? 1≤ i ≤ LONG (ch) ou LONG (ch) désigne la longueur de la chaine CH .
Enseignant : AHMED BELHASSEN 13 Enseignant : AHMED BELHASSEN 14
Algorithmique et programmation

Les fonctions prédéfinis


En algorithmique En PASCAL Rôle de la fonction Exemples
Long (ch) LENGTH (ch) Retourne un entier représentant la longueur de la chaîne
L := LENGTH ('Algorithme') ; L= 10
ch. L := LENGTH ('Pascal') ; L= 6
Retourne une chaîne qui est la somme de plusieurs CH := CONCAT ('micro-', 'ordinateur') ;
Concat (ch1, ch2, …, CONCAT(ch1, ch2, chaînes dans l’ordre. CH= 'micro-ordinateur'.
chn) …,chn) CH := CONCAT ('Turbo', ' ', 'Pascal') ;
CH= 'Turbo Pascal'.
Retourne une sous-chaîne de longueur N à partir de la CH := COPY ('Baccalauréat',1,3) ;
Sous_chaîne (ch,p,n) COPY (ch,p,n) position p dans ch. CH= 'Bac'.
CH := COPY ('micro-ordinateur',7,10) ;
CH= 'ordinateur'.
Retourne un entier représentant la position de la P := POS('m', 'programmation') ;P= 7
Pos (ch1,ch2) POS (ch1,ch2) première occurrence de la chaîne ch1. Si ch1 n’est pas P := POS('r', 'programmation') ; P= 2
dans ch2, elle retourne 0. P := POS('R', 'programmation') ; P= 0
Les procédures prédéfinis
En algorithmique En PASCAL Rôle de la fonction Exemples
Enlève n caractères de la chaîne ch à partir de la CH := 'programmation' ;
Efface (ch,p,n) DELETE (ch,p,n) position p. DELETE ('programmation', 8,6) ;
CH= 'program'.
Insère la chaîne ch1 dans la chaîne ch2 à partir de la CH1 := '-' ;
Insère (ch1,ch2,p) INSERT (ch1,ch2,p) position p. Le caractère numéro p et les suivants seront CH2 := 'Hautparleurs'
décalés vers la droite. INSERT (CH1,CH2,5) ;
CH2= 'Haut-parleurs'.
Convertit une valeur numérique en une chaîne de STR (2002, CH) ;
Convch (n,ch) STR (n,ch) caractères et l’affecte à la variable ch. CH= '2002'.
STR (15.54, CH) ;
CH= '1.5540000000E+01'
Convertit une chaîne ch en une valeur numérique et VAL ('2003', n , pe) ;
Valeur (ch,d,pe) VAL (ch,n, pe) l’affecte à la variable n. Le paramètre pe est une variable  n= 2003 et pe= 0
entière qui contiendra la position de l’erreur. VAL ('06/08/1970', n, pe) ;  n= 0
et pe= 3 (le caractère / n’est pas un chiffre).

Enseignant : AHMED BELHASSEN 15

Solution
Solution
c) Application 7

d) Application 8

4) B[2] ← ″o″
4) B[2] ← ″o″
7) C3 ← C3 + C2
7) C3 ← C3 + C2

5) Efface (C, 1 ,6)


5) Efface (C, 1 ,6)
3) N ← Long(C1)
1) N ← Long(C2)
3) N ← Long(C1)
1) N ← Long(C2)

6) Efface (C2, 2,5)


6) Efface (C2, 2,5)
C1←″ ALGORITHME ″

2) Insère (C2, C1, 11)


2) Insère (C2, C1, 11)

3) C ← ″estimation″
3) C ← ″estimation″
4) N ← Pos (″N″, C2)
4) N ← Pos (″N″, C2)

″, A[5] , A[3] , ″c″, C )


″, A[5] , A[3] , ″c″, C )

Instruction
Instruction
Instruction
Instruction

5) C3 ←Sous_chaîne (C1, 9,7)


5) C3 ←Sous_chaîne (C1, 9,7)

1) A ← ″L’″ + ″informatique″
1) A ← ″L’″ + ″informatique″
Algorithmique et programmation

6) A ← Concat ( A , ″ est un ″ , B , ″ de
6) A ← Concat ( A , ″ est un ″ , B , ″ de

2) B ← Sous_chaîne (″gourmande″, 5 , 5)
2) B ← Sous_chaîne (″gourmande″, 5 , 5)

Enseignant : AHMED BELHASSEN


A=

A=
C=
B=
C=
B=
Ecrire le résultat devant chacune des instructions suivantes :
N=
N=
N=
C1=

C3=
C2=
C3=

N=8
N=9

N=19
C2←″ RECURRENT ″

C=″tion″

de fiction″
B= ″mande″

B= ″monde″
C2=″RENT″

C= ″estimation″
C3=″MERECUR″

A= ″L’informatique″
Résultat
Résultat
Résultat

Résultat
Compléter le tableau suivant en donnant le résultat de l’évaluation des instructions :

C3=″MERECURRENT″

A=″L’informatique est un monde


C1=″ALGORITHMERECURRENT″

16
Algorithmique et programmation Algorithmique et programmation

III. Les structures simples

1. L’affectation
a) Activité 4 b) Définition
L’opération d’affectation consiste à affecter une expression à une variable. Cette opération est représentée par
Soit le programme pascal suivant : Questions :
une flèche orientée vers la gauche
PROGRAM act4 ; 1) Lancer Turbo pascal.
USES WINCRT ; Variable Expression
VAR 2) Taper ce programme.
x, y : INTEGER ; " " Signifie que la variable située à gauche prend (ou reçoit) la valeur de l’expression situé à droite.
a, b : REAL ; 3) Compiler ce programme.
i :BOOLEAN ;
j : CHAR ; 4) Qu’est ce que vous remarquez ?
BEGIN Valeur
x := 7 ; 5) Corriger les erreurs de compilation. Variable
z := x ;
x*2 : = 3 + z ; 6) Exécuter ce programme. Exemples : X ← 15
i := 12.5 ; Y ← 8+2
j := 4 ; Z ← X+Y
i := 25/j ;
WRITELN ('La valeur de i est : ', i) ;
c) Syntaxe
i := 25 ;
j := 10,657 ;
a:= (i>j) ; En algorithme En PASCAL
r := a ;
WRITELN ('La valeur de a est : ', a) ; Variable expression Variable := expression ;
END.
Exemple : Exemple :

Solution : X a+b X := a+b ;


PROGRAM solact4 ;
USES WINCRT ;
VAR d) Application 9
x, y , z : INTEGER ;
Remplir le tableau suivant en déterminant la valeur de X et Y et le rôle de traitement après l’exécution finale de
b , i , j: REAL ;
a , r: BOOLEAN ; la séquence d’instruction suivante :
BEGIN
1) X ← 5 N° séquence Valeur de X Valeur de Y Valeur de Z
x := 7 ;
2) Y ← 20 1
z := x ;
3) Z ← X
x := 3 + z ; 2
4) X ← Y
i := 12.5 ;
5) Y ← Z 3
j := 4 ;
i := 25/j ; 4
WRITELN ('La valeur de i est : ', i) ; 5
i := 25 ;
j := 10.657 ;
a := (i>j) ;
r := a ;
WRITELN ('La valeur de a est : ', a) ;
END.

Enseignant : AHMED BELHASSEN 17 Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation Algorithmique et programmation

Solution 2. Opération de sortie


Ce traitement permet de permuter les deux N° séquence Valeur de X Valeur de Y Valeur de Z
variables X et Y en utilisant un troisième 1 10 ? ? a) Activité 5
variable Z. 2 10 20 ?
Soit le programme pascal suivant : Questions :
3 10 20 10
4 20 20 10 PROGRAM act5 ; 1) Lancer Turbo pascal.
5 20 10 10 USES WINCRT ;
BEGIN 2) Taper ce programme.
e) Application 10 WRITE (' je ', ' ne ');
Remplir le tableau suivant en déterminant la valeur de X, Y et Z après l’exécution finale de la séquence WRITE (' retourne pas à la ligne '); 3) Exécuter ce programme.
WRITELN ;
d’instruction suivante : WRITELN (' je ', ' retourne '); 4) Qu’est ce que vous remarquez ?
1) X ← 5 WRITE (' à la ligne ') ;
2) Y ← -2 N° séquence X Y Z END.
3) Z ← -Y+X 1
4) X ← -Y 2
5) Y ← Y+X Solution :
3
6) Z ← X+1
7) X ← Y-X 4
5
6
7

b) Activité 6
Solution
Soit le programme pascal suivant : Questions :
N° séquence X Y Z
1 5 ? ? PROGRAM act6 ;
1) Lancer Turbo pascal.
USES WINCRT ;
2 5 -2 ?
VAR n, p : INTEGER ;
3 5 -2 7 2) Ouvrir le fichier « act6.pas » se trouvant dans le
x : REAL ;
dossier « tp programmation 1 » situé à la racine du
4 2 -2 7 ok : BOOLEAN;
lecteur C.
BEGIN
5 2 0 7
n := 3 ; p := 7 ;
3) Exécuter ce programme.
6 2 0 2 x :=p/n ;
7 -2 0 2 ok := p<n ;
4) Qu’est ce que vous remarquez ?
WRITELN ('n = ', n) ;
WRITELN ('p<n ?') ;
WRITELN (ok) ;
WRITELN ('valeur de x :');
WRITELN ('sans formatage');
WRITELN (x) ;
WRITELN ('avec formatage');
WRITELN (x:5:3);
END.

Enseignant : AHMED BELHASSEN 19 Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation Algorithmique et programmation

Exemple

c) Définition

L’action de sortie ou d’écriture permet à l’utilisateur de voir une information sur l’écran.
3. Opération d’entrée
d) Déclaration
a) Définition
Exemples
Cette opération permet de saisir des données à travers un périphérique d’entrée (clavier par défaut).
En Algorithme En PASCAL
Affichage d’un message b) Déclaration
texte : le texte doit être Ecrire ("Bonjour") WRITE ('Bonjour') ;
Bonjour
Exemples
entre guillemets
En analyse En algorithme En PASCAL
Affichage du contenu
A←58 A :=58 ;
d’une variable Ecrire (A) WRITE (A) ; 58 Lecture sans
x= donnée Lire (x) READ (x) ;
commentaire
A :=58 ;
Affichage mixte (textes A← 58 B :='grande' ; A=58 Ecrire ("commentaire") WRITE ('commentaire') ;
La
et variables). On utilise la B← "grande" WRITE('A=',A) ;
valeur x= donnée ("commentaire") Lire (x) READ(x) ;
Ecrire ("A=", A) WRITE ('la valeur', A,
virgule comme séparateur Ecrire ("la valeur", A,"est la plus", B) 'est la plus grande', B) ; 58 est Lecture avec
la plus
grande commentaire Exemple : Exemple : Exemple :
e) Remarques n=donnée ("Taper un entier") Ecrire ("Taper un entier") WRITE ('Taper un entier') ;

 WRITELN provoque un retour à la ligne après l’opération d’affichage. Lire (n) READ (n) ;

WRITE ('Bonjour');
WRITE ('Salut'); Bonjour Salut
c) Remarque
 READLN provoque un retour à la ligne après l’opération de lecture.
Résultat
WRITELN ('Bonjour'); Bonjour
WRITE ('Salut'); Salut

 Formatage de l’affichage des données numériques, syntaxe:


WRITELN (variable: n: m);
 n : est le nombre total des chiffres, virgule comprise.
 m : est le nombre des chiffres après la virgule.

Enseignant : AHMED BELHASSEN 21 Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation Algorithmique et programmation

IV. Les types énumérés


a) Activité 7

Soit le programme pascal suivant : Questions :


PROGRAM act7;
1) Lancer Turbo pascal. b) Définition
USES WINCRT;
TYPE
2) Ouvrir le fichier « act7.pas » se trouvant dans le Le type scalaire par énumération définit un ensemble ordonné et fini de valeurs désignées par des identificateurs.
couleur = ( rouge , bleu , vert , noir );
dossier « tp programmation 1 » situé à la racine du
VAR
lecteur C.
a,c,d:INTEGER; c) Déclaration
b,e:REAL;
3) Compiler ce programme.
BEGIN Au niveau de l’algorithme :
a:=rouge;
4) Corriger les erreurs de compilation.
WRITELN(' a = ' ,a);
b:=ORD(a);
Tableau des nouveaux types
5) Exécuter ce programme et observer les sorties
WRITELN(' b = ' , b);
écran. Types
c:=SUCC(a);
b:=ORD(c); Nom de type = (valeur 1 , valeur 2 , valeur 3 , …………….. )
WRITELN(' c = ' , c);
WRITELN(' b = ' , b); Tableau de déclarations des objets
d:=PRED(noir);
b:=ORD(d);
WRITELN(' b = ' , b);
Objet Type/nature
e:=a>c;
WRITELN(' e = ' , e); Général Nom Nom de type
e:=d<c;
WRITELN(' e = ' , e);
e:=a<>d; Au niveau du PASCAL :
WRITELN(' e = ' , e);
e:=(c=d);
TYPE <Nom de type> = (valeur 1 , valeur 2 , valeur 3 , …………….. ) ;
WRITELN(' e = ' , e);
VAR <Nom> : Nom de type ;
END.
Exemple :
Solution : Tableau de déclaration des objets
PROGRAM solact7; WRITELN(' b = ' , b);
USES WINCRT; d:=PRED(noir); Types
TYPE b:=ORD(d); ANNEE_SCOLAIRE = (septembre , octobre , novembre , décembre , janvier , février , mars , avril , mai ,
couleur = ( rouge , bleu , vert , noir ); WRITELN(' b = ' , b); juin )
VAR e:=a>c;
a , c , d : couleur; WRITELN(' e = ' , e);
e:=d<c;
Tableau de déclarations des objets
b:INTEGER;
e:BOOLEAN; WRITELN(' e = ' , e);
e:=a<>d; Objet Type/nature
BEGIN
a:=rouge; WRITELN(' e = ' , e);
b:=ORD(a); e:=(c=d); a ANNEE_SCOLAIRE
WRITELN(' b = ' , b); WRITELN(' e = ' , e);
c:=SUCC(a); END.
b:=ORD(c);

Enseignant : AHMED BELHASSEN 23 Enseignant : AHMED BELHASSEN 24


Algorithmique et programmation Algorithmique et programmation

Au niveau du PASCAL : V. Les types utilisateurs


TYPE ANNEE_SCOLAIRE = (septembre , octobre , novembre , décembre , janvier , février , mars , avril ,
mai , juin ) ; a) Activité 8
VAR a : ANNEE_SCOLAIRE ;
Soit le programme pascal suivant : Questions :
Remarque : les opérateurs appliqués sur le type scalaire sont : ORD, PRED, SUCC et les opérateurs de
relation. PROGRAM act8;
1) Lancer Turbo pascal.
USES WINCRT;
TYPE
2) Ouvrir le fichier « act8.pas » se trouvant dans le
lettre = 'a'..'k';
dossier « tp programmation 1 » situé à la racine du
VAR
lecteur C.
a : lettre;
b , c : INTEGER;
3) Compiler ce programme.
BEGIN
a:='b';
4) Corriger les erreurs de compilation.
WRITELN(' a = ' , a);
a:='z';
5) Exécuter ce programme et observer les sorties
b:=SUCC(a);
écran.
WRITELN(' b = ' , b);
c:=PRED(a);
WRITELN(' c = ' , c);
END.

Solution :
PROGRAM solact8;
USES WINCRT;
TYPE
lettre = 'a'..'k';
VAR
a , b , c: lettre;
BEGIN
a:='b';
WRITELN(' a = ' , a);
b:=SUCC(a);
WRITELN(' b = ' , b);
c:=PRED(a);
WRITELN(' c = ' , c);
END.

b) Définition
Le type intervalle est un ensemble de valeurs discret ordonné désignées par deux borne (borne inférieure..
borne supérieure).

Enseignant : AHMED BELHASSEN 25 Enseignant : AHMED BELHASSEN 26


Algorithmique et programmation Algorithmique et programmation

c) Déclaration VI. Les tableaux


Au niveau de l’algorithme :
1. Le tableau à une dimension
Tableau des nouveaux types
a) Activité 9
Types
Nom de type = borne_inf..borne_sup Calculer les moyennes de 5 élèves connaissant leur note de contrôle et leur note de synthèse.

Tableau de déclarations des objets Solution :

But : Calculer et afficher les moyennes de 5 élèves.


Objet Type/nature Méthode de résolution :
Moy1 = (DC1 + 2*DS1)/3 5 variables Moy
Nom Nom de type Moy2 = (DC2 + 2*DS2)/3 5 variables DC
Moy3 = (DC3 + 2*DS3)/3 5 variables DS
Moy4 = (DC4 + 2*DS4)/3
Au niveau du PASCAL : Moy5 = (DC5 + 2*DS5)/3

TYPE <Nom de type> = borne_inf..borne_sup ; Remarque :


VAR <Nom> : Nom de type ; La solution proposée pour calculer la moyenne est inadéquate s'il y avait eu, non cinq élèves mais une centaine
ou plus que serait la longueur de l'algorithme.
La situation actuelle nécessite donc l'utilisation d'une nouvelle structure de données appelée : Tableau
Exemple :
Tableau de déclaration des objets
b) Définition
Types Un tableau est une structure de données permettant de ranger un nombre fini d'éléments de même type et selon
mois = 1..12 une disposition bien définie.
jours = 1..31
c) Déclaration
Tableau de déclarations des objets
Au niveau de l’algorithme :
Objet Type/nature Tableau de déclaration des objets
mois_actuel mois Objets Type/Nature
….. …..
Ident-tableau Tableau de taille et de type-élément
j jours ……. …….

Exemple
Au niveau du PASCAL : Tableau de déclaration des objets

TYPE mois = 1..12 ; Objets Type/Nature


jours = 1..31 ; Moyenne Tableau de 5 réels
VAR mois_actuel : mois ; DC Tableau de 5 réels
j : jours ; Tnom Tableau de 30 chaînes de caractères

Enseignant : AHMED BELHASSEN 27 Enseignant : AHMED BELHASSEN 28


Algorithmique et programmation Algorithmique et programmation

Au niveau du PASCAL : d) Application 11


VAR Ident-Tableau : ARRAY [Borne_inf .. Borne_sup] OF type ; Soient les instructions suivantes :

T1[2]  5 T2[2]  T2[3] – T1[2]


Exemples T2[3]  T1[2] + 2 T2[1]  T1[2] + 2 * T2[1]
T1[2]  T1[2] DIV 2 T1[1]  T1[2] + 2 * T2[1]
VAR Moyenne : ARRAY [1..5] OF REAL ; T2[1]  2 * T1[2] T1[3]  T1[2]
VAR DC : ARRAY [1..5] OF REAL;
VAR Tnom : ARRAY [1..30] OF STRING; Quel est le contenu de chaque élément des deux tableaux.

Remarques
T1 ……………………. …………….……… ……………………
• Ident-tableau : Identification du nouveau tableau que nous voulons définir. 1 2 3
• Borne_inf..Borne_sup: Intervalle correspondant à l'ensemble des valeurs des indices du tableau.
T2 ……………………. …………….……… ……………………
• Borne_inf : Borne inférieure de l'intervalle des indices.
• Borne_sup: Borne supérieur de l'intervalle des indices. 1 2 3
• type_élément : type des éléments du tableau. Solution

Autre méthode de déclaration T1 22 2 2


1 2 3
Il est possible de déclarer le type d'un tableau. T2 10 5 7
1 2 3
Exemple
Au niveau de l’algorithme : 2. Les tableaux à deux dimensions
Tableau de déclaration des nouveaux types a) Activité 10
Types Ecrire un programme qui permet de calculer la moyenne de n élèves relativement aux notes de 5 matières.
T- Moy = Tableau de 5 réel Sachant que le coefficient de chaque matière est de 1.
T- Dc = Tableau de 5 réel
Nom = Tableau de 30 chaînes de caractères
b) Définition
Tableau de déclaration des objets
Un tableau à deux dimensions peut être simulé à une grille de n lignes et de m colonnes. Les éléments stockés
dans ce type de tableau sont de même type.
Objets Type/Nature
Moyenne T- Moy
DC T- DC c) Déclaration
Tnom Nom
Au niveau de l’algorithme :
Au niveau du PASCAL : Tableau de déclaration des objets
TYPE T- Moy : ARRAY [1..5] OF REAL; Objets Type/Nature
TYPE T-DC : ARRAY [1..5] OF REAL; ….. …..
TYPE Nom : ARRAY [1..30] OF STRING; nom du tableau Tableau de taille et de type-élément
……. …….
VAR Moyenne : T-Moy;
VAR DC : T-DC;
VAR Tnom : Nom ;

Enseignant : AHMED BELHASSEN 29 Enseignant : AHMED BELHASSEN 30


Algorithmique et programmation

Au niveau du PASCAL :

VAR nom du tableau : ARRAY [ indmin1 .. indsup1 , indmin2..insup2 ] OF type ;


Autre déclaration d'un tableau : Il est possible de déclarer le type d'un tableau.

Exemple :
Au niveau de l’algorithme :

Tableau de déclaration des nouveaux types


Type
Nom du type = tableau de taille et de type

Tableau de déclaration des objets


Objets Type/Nature
nom de la variable nom du type

Au niveau du PASCAL :

TYPE nom du type = ARRAY [ indmin1 .. indsup1 , indmin2..indup2 ] OF type ;


VAR nom de la variable : nom du type ;

Exemple:

TYPE jeu = ARRAY [1..8 , 1..8] OF INTEGER ;


Matrice = ARRAY [1..3 , 1..3] OF REAL ;
VAR echec : jeu;
M : matrice;

d) Remarques

(1) Un élément du tableau est repéré par le numéro de la ligne et le numéro de la colonne. Exemple : M [i, j]
avec i et j compris entre 1 et 3.

(2) Sur les éléments d’un tableau, on peut effectuer les mêmes opérations et exécuter les mêmes instructions que
sur n’importe quelle variable du même type :
Lire : Ecrire ("entrer coordonnées"), Lire (M [1,1])
Ecrire : Ecrire (M [1,3])
Affecter : M [1,2] ← 1.6
Effectuer un calcul : trace ← M [1,1] +M [2,2] + M [3,3]
Comparer : Si M [1,3] = M [2,3] Alors …

(3) Si T et U sont deux tableaux de même type alors l’instruction T ← U transfère en bloc tout le tableau U
dans le tableau T. Cette opération est appelée affectation de transfert.

(4) Les éléments d’un tableau n’ont pas de valeurs par défaut. Il faut penser à les initialiser avant de les utiliser.

e) Application 12
Essayer de résoudre l’activité précédente en utilisant la nouvelle notion.

Enseignant : AHMED BELHASSEN 31


Algorithmique et programmation

Chapitre
Les structures
algorithmiques de
contrôle
Objectifs spécifiques :

- Savoir choisir les structures de données adéquates pour résoudre un problème donné.

Plan :

A. Les structures de contrôle conditionnelles


I. La forme réduite
II. La forme complète (alternative)
III. La structure de contrôle conditionnelle généralisée
IV. La structure de contrôle conditionnelle à choix
B. Les structures de contrôle itératives
I. La structure de contrôle itérative complète
II. Les structures de contrôle itératives à condition d’arrêt
a. La structure répéter…jusqu’à…
b. La structure tant que…faire…

Temps prévue : 20h

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

A. Les structures de contrôle conditionnelles :

I. La forme réduite :

1. Activité 1 :

Soit l’algorithme suivant qui permet de résoudre une équation de la forme ax+b=0 :
0) Début EQUATION
1) Ecrire (″introduire a″), lire(a)
2) Ecrire (″introduire b″), lire(b)
3) x  -b/a
4) Ecrire (″x = ″, x)
5) fin EQUATION

Exécuter le programme EQUATION pour les valeurs suivantes :

a 1 -2 5 4 0
b -1 3 2 0 5
x 1 3/2 -2/5 ?? ??

2. Définition : Une structure de contrôle conditionnelle à une forme simple réduite est une structure qui
limite l’exécution d’un traitement au cas où la condition est vérifiée.

3. Vocabulaire et syntaxe :

En analyse En algorithme En Pascal


[ init] SI condition Alors {init} SI condition Alors {init} ;
IF condition THEN
Traitement Traitement Traitement ;

Fin si Fin si IF condition THEN


Begin
Instruction1 ;
Instruction1 ;

Instruction1 ;
End ;

Remarques :

 [init] est une séquence d'instruction(s) qui contiendra les éventuelles initialisations.
 Dans cette forme, en évaluant la condition :
- Si la valeur de la condition est Vrai  les instructions indiquées entre Alors et Fin si seront exécutées
- Si la valeur de la condition est Faux  les instructions indiquées entre Alors et Fin si ne seront pas
exécutées.

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

4. Applications :

Application 1 : Ecrire une analyse et en déduire un programme pour le problème de l’activité.

Solution :
Analyse du problème
Nom : EQUATION
Résultat = Ecrire (″x = ″, x)
x = [ ] Si ( a <>0 ) ET ( b<>0) alors
x  -b/a
Fin si
a = donnée ( " introduire a ")
b = donnée ( " introduire b ")
Fin EQUATION
TDO
Objets Type/Nature
a,b Entier
x Réel

Algorithme Traduction en PASCAL


0) Début EQUATION PROGRAM DIVISION ;
1) Ecrire ( " introduire a ") , lire(a) USES WINCRT ;
2) Ecrire ( " introduire b ") , lire(b) VAR a ,b : INTEGER ;
3) Si ( a <>0 ) ET ( b<>0) alors x : REAL ;
x  -b/a BEGIN
Fin si WRITELN (' introduire a '); READLN (a);
4) Ecrire (″x = ″, x) WRITELN (' introduire b '); READLN (b);
5) Fin EQUATION IF ( a <>0 ) AND ( b<>0) THEN
x := -b/a ;
WRITELN ( ′ x = ' , x ) ;
END.

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CLASSEMENT


permettant de saisir deux chaines 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.

Solution :
Analyse du problème
Nom : CLASSEMENT
Résultat = Ecrire (chaine1, chaine2)
(ch1, ch2) = [chaine1← ch1, chaine2←ch2]
Si (LONG (ch2)>LONG (ch1)) alors
chaine1← ch2
chaine2←ch1
Fin si
ch2 = donnée ( "Entrer la chaine 2 : ")
ch1= donnée ( "Entrer la chaine 1 : ")
Fin CLASSEMENT

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

TDO
Objets Type/Nature
ch1, ch2, chaine1, Chaine
chaine2

Algorithme Traduction en PASCAL


0) Début CLASSEMENT PROGRAM CLASSEMENT ;
1) Ecrire ( " Entrer la chaine 1 : ") , lire(ch1) USES WINCRT ;
2) Ecrire ( " Entrer la chaine 2 : ") , lire(ch2) VAR ch1, ch2, chaine1, chaine2 : STRING ;
3) chaine1← ch1, chaine2←ch2 BEGIN
Si (LONG (ch2)>LONG (ch1)) alors WRITELN (' Entrer la chaine 1 : '); READLN (ch1);
chaine1← ch2 WRITELN (' Entrer la chaine 2 : '); READLN (ch2);
chaine2←ch1 IF ( LENGTH (ch2)>LENGTH (ch1))THEN
Fin si BEGIN
4) Ecrire (chaine1, chaine2) chaine1:=ch2 ;
5) Fin CLASSEMENT chaine2:=ch1 ;
END;
WRITELN (chaine1, chaine2) ;
END.

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SIGNE


permettant de saisir un entier x et de vérifier si x est positif.

Solution :
Analyse du problème
Nom : SIGNE
Résultat = Ecrire (x, signe)
signe = [signe← ″ est négatif ou nulle ″]
Si (x > 0) alors
signe← ″ est positif ″
Fin si
x = donnée ( "x = : ")
Fin SIGNE
TDO
Objets Type/Nature
signe Chaine
x Entier

Algorithme Traduction en PASCAL


0) Début SIGNE PROGRAM SIGNE ;
1) Ecrire ( "x = : ") , lire(x) USES WINCRT ;
2) signe ← ″ est négatif ou nulle ″ VAR signe : STRING ;
Si (x > 0) alors x : INTEGER ;
signe← ″ est positif ″ BEGIN
Fin si WRITELN (' x = : '); READLN (x);
3) Ecrire (x, signe) signe:=' est négatif ou nulle ' ;
4) Fin SIGNE IF (x > 0)THEN
signe:=' est positif ' ;
WRITELN (x, signe) ;
END.

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

II. La forme complète (alternative) :


1. Activité 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MAXIMUM
permettant de déterminer puis d’afficher le maximum (max) entre deux entiers donnés x et y.

Solution :
Analyse du problème
Nom : MAXIMUM
Résultat = Ecrire (″Le maximum est : ″ , Max)
Max = [ ] Si ( a > b ) alors
Max  a
Fin si
Si ( b > a ) alors
Max  b
Fin si
a = donnée ("donner le premier nombre")
b = donnée ("donner le deuxième nombre")
Fin MAXIMUM
TDO
Objets Type/Nature
a , b , Max Entier

Algorithme Traduction en PASCAL


0) Début MAXIMUM PROGRAM MAXIMUM ;
1) Ecrire ( "donner le premier nombre") , lire(a) USES WINCRT ;
2) Ecrire ( "donner le deuxième nombre") , lire(b) VAR a , b , Max : INTEGER ;
3) Si ( a > b ) alors BEGIN
Max  a WRITELN (' donner le premier nombre');
Fin si READLN (a);
Si ( b > a ) alors WRITELN (' donner le deuxième nombre');
Max  b READLN (b);
Fin si IF ( a > b ) THEN
4) Ecrire (″Le maximum est : ″ , Max) Max := a ;
5) Fin MAXIMUM IF ( b > a ) THEN
Max := b ;
WRITELN ( ′ Le maximum est : ' , Max ) ;
END.

2. Définition :

Une structure de contrôle conditionnelle à une forme simple complète est une structure qui exécute un
traitement 1 si la condition est vérifiée (vrai) ou un traitement 2 si la condition n’est pas vérifiée (faux).

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

3. Vocabulaire et syntaxe :

En analyse En algorithme En Pascal


[init] SI condition Alors {init} {init} ;
{Traitement1} SI condition Alors IF condition THEN
Sinon {Traitement1} Traitement1
{Traitement2} Sinon ELSE
Fin Si {Traitement2} Traitement2 ;
Fin Si

IF condition THEN
Begin
Instruction1 ;

Instruction N ;
End (Voir Rque)
ELSE
Begin
Instruction1 ;

Instruction N ;
End;

Remarques :
- Absence du ‘’;’’ après cet END car l’instruction n’est pas encore finie.
- L’instruction qui précède (directement avant) le ELSE ne se termine pas par ;

4. Applications :

Application 1 : Exécutez manuellement l’algorithme suivant et déduisez les valeurs finales des variables a, b
et c pour chacune des valeurs initiales suivantes de a : i) a=10 ii) a=3 iii) a=0

0) Début Application
1) Ecrire (″a=″), lire (a)
2) b ← 2a
3) c ← b-4
4) Si (a > 2c) alors
b ←a-2c
Sinon
b ←a+c
Fin si
5) Ecrire (a, b, c)
6) Fin application

Solution :
i) a=10 , b=26 , c=16
ii) a=3 , b=5 , c=2
iii) a=0 , b=8 , c=-4

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PARITE


permettant de saisir un entier x et de déterminer sa parité.

Solution :
Analyse du problème
Nom : PARITE
Résultat = Ecrire (x, ″ est ″, nature)
nature = [r ← x MOD 2]
Si (r = 0) alors
nature ← ″ Paire ″
Sinon
nature ← ″ Impaire ″
Fin si
x = donnée ( "x = : ")
Fin PARITE

TDO
Objets Type/Nature
nature Chaine
x,r Entier

Algorithme Traduction en PASCAL


0) Début PARITE PROGRAM PARITE ;
1) Ecrire ( " x = : ") , lire(x) USES WINCRT ;
2) r ← x MOD 2 VAR nature: STRING ;
3) Si (r = 0) alors x , r : INTEGER ;
nature ← ″ Paire ″ BEGIN
Sinon WRITELN (' x = : '); READLN (x);
nature ← ″ Impaire ″ r := x MOD 2 ;
Fin si IF ( r = 0 )THEN
4) Ecrire (x, ″ est ″, nature) nature:= ' Paire '
5) Fin PARITE ELSE
nature:= ' Impaire ' ;
WRITELN (x, ″ est ″, nature);
END.

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL_Y


permettant de calculer y avec = (− ) + .

Solution :
Analyse du problème
Nom : CALCUL_Y
Résultat = Ecrire (y)
y = [ ] Si (n MOD 2 = 0) alors
y←1+n
Sinon
y ← -1 + n
Fin si
n = donnée ( "n = : ")
Fin CALCUL_Y

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

TDO
Objets Type/Nature
n,y Entier

Algorithme Traduction en PASCAL


0) Début CALCUL_Y PROGRAM CALCUL_Y ;
1) Ecrire ( " n = : ") , lire(n) USES WINCRT ;
2) Si (n MOD 2 = 0) alors VAR n , y : INTEGER ;
y←1+n BEGIN
Sinon WRITELN (' n = : '); READLN (n);
y ← -1 + n IF (n MOD 2 = 0 )THEN
Fin si y:= 1+n
3) Ecrire (y) ELSE
4) Fin CALCUL_Y y:= -1+n ;
WRITELN (y);
END.

Application 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MULTIPLE


permettant de saisir deux entiers et de vérifier si le premier est un multiple du second.
Solution :
Analyse du problème
Nom : MULTIPLE
Résultat = Ecrire (multiple)
multiple = [r ← a MOD b]
Si (r = 0) alors
multiple ← VRAI
Sinon
multiple ← FAUX
Fin si
b = donnée ( "b = : ")
a = donnée ( "a = : ")
Fin MULTIPLE
TDO
Objets Type/Nature
multiple Booléen
a,b,r Entier

Algorithme Traduction en PASCAL


0) Début MULTIPLE PROGRAM MULTIPLE ;
1) Ecrire ( " a = : ") , lire(a) USES WINCRT ;
2) Ecrire ( " b = : ") , lire(b) VAR nature: BOOLEAN ;
3) r ← a MOD b a , b , r : INTEGER ;
4) Si (r = 0) alors BEGIN
multiple ← VRAI WRITELN (' a = : '); READLN (a);
Sinon WRITELN (' b = : '); READLN (b);
multiple ← FAUX r := a MOD b ;
Fin si IF ( r = 0 )THEN
5) Ecrire (multiple) multiple:=TRUE
6) Fin MULTIPLE ELSE
multiple:= FALSE ;
WRITELN (multiple);
END.

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Application 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EXISTENCE


permettant de saisir un mot et affiche si un caractère c existe dans ce mot.

Solution :
Analyse du problème
Nom : EXISTENCE
Résultat = Ecrire (c, message, mot)
message = [ p ← POS ( c , mot ) ]
Si (p = 0) alors
message ← ″ n'existe pas dans ″
Sinon
message ← ″ existe dans ″
Fin si
c = donnée ( "Donner le caractère : ")
mot = donnée ( "Donner le mot : ")
Fin EXISTENCE

TDO
Objets Type/Nature
message , mot Chaine
p Entier
c Caractère

Algorithme Traduction en PASCAL


0) Début EXISTENCE PROGRAM EXISTENCE ;
1) Ecrire ( " Donner le mot : ") , lire(mot) USES WINCRT ;
2) Ecrire ( " Donner le caractère : ") , lire(c) VAR message , mot : STRING ;
3) p ← POS ( c , mot ) p : INTEGER ;
4) Si (p = 0) alors c : CHAR ;
message ← ″ n'existe pas dans ″ BEGIN
Sinon WRITELN (' Donner le mot : '); READLN (mot);
message ← ″ existe dans ″ WRITELN (' Donner le caractère : '); READLN (c);
Fin si p :=POS ( c , mot ) ;
5) Ecrire (c, message, mot) IF ( p = 0 )THEN
6) Fin EXISTENCE nature:= ' n''existe pas dans ' ;
ELSE
nature:= ' existe dans ' ;
WRITELN (c, message, mot) ;
END.

Application 6 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISEUR


permettant de saisir deux entiers et de vérifier si le second est un diviseur du premier.
Solution :
Analyse du problème
Nom : DIVISEUR
Résultat = Ecrire (a , d , b)
multiple = [r ← a MOD b]
Si (r = 0) alors
d ← ″ est un diviseur de ″
Sinon
d ← ″ n″est pas un diviseur de ″
Fin si

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

b = donnée ( "b = : ")


a = donnée ( "a = : ")
Fin DIVISEUR
TDO
Objets Type/Nature
d Chaine
a,b,r Entier

Algorithme Traduction en PASCAL


0) Début DIVISEUR PROGRAM DIVISEUR ;
1) Ecrire ( " a = : ") , lire(a) USES WINCRT ;
2) Ecrire ( " b = : ") , lire(b) VAR d : STRING ;
3) r ← a MOD b a , b , r : INTEGER ;
4) Si (r = 0) alors BEGIN
d ← ″ est un diviseur de ″ WRITELN (' a = : '); READLN (a);
Sinon WRITELN (' b = : '); READLN (b);
d ← ″ n″est pas un diviseur de ″ r := a MOD b ;
Fin si IF ( r = 0 )THEN
5) Ecrire (a , d , b) d:= ' est un diviseur de '
6) Fin DIVISEUR ELSE
d:= ' n''est pas un diviseur de ' ;
WRITELN ( a , d , b );
END.

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

III. La structure de contrôle conditionnelle généralisée :


1. Activité 1 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MENTION
permettant de calculer la moyenne d’un élève à partir de deux notes N1 et N2 de coefficients respectifs 1 et 2 et
d’afficher la mention correspondante.

Moyenne Mention
Moyenne ≥ 16 très bien
14 ≤ moyenne < 16 bien
12 ≤ moyenne < 14 assez bien
10 ≤ moyenne < 12 passable
moyenne < 10 redouble

Solution :
Analyse du problème
Nom : MENTION
Résultat = Ecrire ("La mention est : ", ment)
ment= [ ment"" ] Si ( moy ≥ 16) alors
ment  "très bien"
Sinon si ( moy ≥ 14) alors
ment  "bien"
Sinon si ( moy ≥ 12) alors
ment  "assez bien"
Sinon si ( moy ≥ 10) alors
ment  "passable"
Sinon
ment  "redouble"
Fin si
moy  (N1+N2*2) /3
N2= donnée (" Taper la 2ème note")
N1= donnée (" Taper la 1ère note")
Fin MENTION
TDO
Objets Type/Nature
ment Chaine
moy , N1 , N2 Réel

Algorithme Traduction en PASCAL


0) Début MENTION PROGRAM MENTION ;
1) Ecrire ( " Taper la 1ère note ") , lire(N1) USES WINCRT ;
2) Ecrire ( " Taper la 2ème note ") , lire(N2) VAR moy , N1 , N2 : REAL ;
3) moy  (N1+N2*2) /3 ment : STRING;
4) ment"" BEGIN
Si ( moy ≥ 16) alors WRITELN (' Taper la 1ère note ');
ment  "très bien" READLN (N1);
Sinon si ( moy ≥ 14) alors WRITELN (' Taper la 2ème note ');
ment  "bien" READLN (N2);

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

Sinon si ( moy ≥ 12) alors moy := (N1+N2*2) /3 ;


ment  "assez bien" ment :=' ' ;
Sinon si ( moy ≥ 10) alors IF ( moy >= 16 ) THEN
ment  "passable" ment := ' très bien '
Sinon ELSE IF ( moy >= 14 ) THEN
ment  "redouble" ment := ' bien '
Fin si ELSE IF ( moy >= 12 ) THEN
5) Ecrire ("La mention est : ", ment) ment := ' assez bien '
6) Fin MENTION ELSE IF ( moy >= 10 ) THEN
ment := ' passable '
ELSE
ment := ' redouble ' ;
WRITELN ( ′ La mention est : ' , ment ) ;
END.

2. Définition : C’est une structure de contrôle conditionnelle qui permet d’ouvrir plusieurs situations à des
traitements différents.

Vrai Traitement1
Condition
Traitement2
Vrai
1
Faux Condition Vrai
2 ……
Faux Condition
3
3. Vocabulaire et syntaxe :

En analyse En algorithme En Pascal


[init] … {init} … {init} ;
SI condition1 Alors SI condition1 Alors IF condition1 THEN
{Traitement1} {Traitement1} {Traitement1}
Sinon Sinon ELSE
SI condition2 Alors SI condition2 Alors IF condition2 THEN
{Traitement2} {Traitement2} {Traitement2}
…………….. …………….. ……………..
…………….. …………….. ……………..
Sinon Sinon ELSE
SI conditionN-1 Alors SI conditionN-1 Alors IF conditionN-1 THEN
{Traitement N-1} {Traitement N-1} {Traitement N-1}
Sinon Sinon ELSE
{Traitement N} {Traitement N} {Traitement N} ;
Fin si Fin si

Remarques :
- Si le traitement est un ensemble d’instructions, on les mets entre BEGIN et END.
- Si la condition1 produit la valeur VRAIE alors le traitement1 sera exécuté, mais si elle produit la valeur
FAUX on passe à l’évaluation de la condition2, ainsi de suite, …
- Si aucune des N-1 premières conditions ne produit la valeur VRAIE alors le traitement N sera exécuté.
- La condition est une expression booléenne soit vraie soit fausse

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

- Question : qu’est ce que vous remarquer au niveau de comparaison de structure simple et de structure
généralisée ? : La structure simple est un cas particulier de structure généralisée.

4. Applications :

Application 1 : Exécutez manuellement l’algorithme suivant et déduisez les valeurs finales des variables a, b
et c pour chacune des valeurs initiales suivantes de a : i) a=10 ii) a=3 iii) a=-5

0) Début Application
1) Ecrire (″a=″), lire (a)
2) b ← 2a
3) c ← b-4
4) Si (a > 2c) alors
b ←a-2c
Sinon si (a > c) alors
b ←a+c
Sinon
b ←c
Fin si
5) Ecrire (a, b, c)
6) Fin application

Solution :
i) a=10 , b=16 , c=16
ii) a=3 , b=5 , c=2
iii) a=-5 , b=23 , c=-14

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SAISON


permettant à partir du numéro d’un mois, permet d’afficher la saison. Les mois sont numérotés de 1 à 12 en
commençant par Janvier.

Solution :
Analyse du problème
Nom : SAISON
Résultat = Ecrire (Saison)
Saison= [ ] Si (mois dans [3..5] ) alors
Saison  " Printemps "
Sinon si (mois dans [6..8]) alors
Saison  " Eté "
Sinon si (mois dans [9..11]) alors
Saison  " Automne "
Sinon
Saison  " Hiver "
Fin si
mois = donnée ("donner le numéro du mois")
Fin SAISON
TDO
Objets Type/Nature
Saison Chaine
mois Entier

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début SAISON PROGRAM SAISON ;
1) Ecrire ("donner le numéro du mois") , lire(mois) USES WINCRT ;
2) Si (mois dans [3..5] ) alors VAR mois : INTEGER ;
Saison  " Printemps " Saison : STRING;
Sinon si (mois dans [6..8]) alors BEGIN
Saison  " Eté " WRITELN (' donner le numéro du mois ');
Sinon si (mois dans [9..11]) alors READLN (mois);
Saison  " Automne " IF (mois IN [3..5]) THEN
Sinon Saison := ' Printemps '
Saison  " Hiver " ELSE IF (mois IN [6..8]) THEN
Fin si Saison := ' Eté '
3) Ecrire (Saison) ELSE IF (mois IN [9..11]) THEN
4) Fin SAISON Saison := ' Automne '
ELSE
Saison := ' Hiver ' ;
WRITELN (Saison) ;
END.

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CAT_AGE


permettant de résoudre un problème qui demande l’âge d’un enfant , puis l’informe de sa catégorie :
- ″Papillon″ moins que 6 ans.
- ″Poussin″ de 6 à 7 ans.
- ″Pupille″ de 8 à 9 ans.
- ″Minime″ de 10 à 11 ans.
- ″Cadet″ de 12 à 14 ans.
- ″Junior″ de 15 à 17 ans.
- ″Senior″ de 18 à 20 ans.
- ″Tu as dépassé l’âge de l’enfance″ plus que 20 ans.
Solution :
Analyse du problème
Nom : CAT_AGE
Résultat = Ecrire (cat)
cat= [ ] Si (age < 6 ) alors
cat  ″ Papillon ″
Sinon si ((age=6) OU (age=7)) alors
cat  ″ Poussin ″
Sinon si (age dans [8..9]) alors
cat  ″ Pupille ″
Sinon si (age dans [10..11]) alors
cat  ″ Minime ″
Sinon si (age dans [12..14]) alors
cat  ″ Cadet ″
Sinon si (age dans [15..17]) alors
cat  ″ Junior ″
Sinon si (age dans [18..20]) alors
cat  ″ Senior ″
Sinon
cat  ″ Tu as dépassé l’âge de l’enfance ″
Fin si
age = donnée ("Age = ")
Fin CAT_AGE

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

TDO
Objets Type/Nature
cat Chaine
age Entier

Algorithme Traduction en PASCAL


0) Début CAT_AGE PROGRAM CAT_AGE ;
1) Ecrire ("Age = ") , lire(age) USES WINCRT ;
2) Si (age < 6 ) alors VAR age : INTEGER ;
cat  ″ Papillon ″ cat : STRING;
Sinon si ((age=6) OU (age=7)) alors BEGIN
cat  ″ Poussin ″ WRITELN (' Age = ');
Sinon si (age dans [8..9]) alors READLN (age);
cat  ″ Pupille ″ IF (age < 6) THEN
Sinon si (age dans [10..11]) alors cat:= ' Papillon '
cat  ″ Minime ″ ELSE IF ((age=6) OR (age=7)) THEN
Sinon si (age dans [12..14]) alors cat:= ' Poussin '
cat  ″ Cadet ″ ELSE IF (mois IN [8..9]) THEN
Sinon si (age dans [15..17]) alors cat:= ' Pupille '
cat  ″ Junior ″ ELSE IF (mois IN [10..11]) THEN
Sinon si (age dans [18..20]) alors cat:= ' Minime '
cat  ″ Senior ″ ELSE IF (mois IN [12..14]) THEN
Sinon cat:= ' Cadet '
cat  ″ Tu as dépassé l’âge de l’enfance ″ ELSE IF (mois IN [15..17]) THEN
Fin si cat:= ' Junior '
3) Ecrire (cat) ELSE IF (mois IN [18..20]) THEN
4) Fin CAT_AGE cat:= ' Senior '
ELSE
Saison := ' Tu as dépassé l’âge de l’enfance ' ;
WRITELN (cat) ;
END.

Application 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EAU permettant
de lire une température de l’eau puis afficher son état. Les trois formes de l’eau sont :
- ″gaz″ si la température dépasse 100°.
- ″liquide″ si la température est entre 0° et 100°.
- ″glace″ si la température est inférieure à 0°.

Solution :
Analyse du problème
Nom : EAU
Résultat = Ecrire (″Etat = ″ , etat)
etat=[ ] Si (T < 0 ) alors
etat  ″ glace ″
Sinon si (T < 101) alors
etat ″ liquide ″
Sinon
etat ″ gaz ″
Fin si
T = donnée ("Température = ")
Fin EAU

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

TDO
Objets Type/Nature
etat Chaine
T Entier

Algorithme Traduction en PASCAL


0) Début EAU PROGRAM EAU ;
1) Ecrire ("Température = ") , lire(T) USES WINCRT ;
2) Si (T < 0 ) alors VAR T : INTEGER ;
etat  ″ glace ″ etat : STRING;
Sinon si (T < 101) alors BEGIN
etat ″ liquide ″ WRITELN (' Température = ');
Sinon READLN (T);
etat ″ gaz ″ IF (T < 0 ) THEN
Fin si etat:= ' glace '
3) Ecrire (″Etat = ″ , etat) ELSE IF (T < 101 ) THEN
4) Fin EAU etat:= ' liquide '
ELSE
etat := ' gaz ' ;
WRITELN ('Etat = ' , etat) ;
END.

Application 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé FORME_GEO


qui demande d’introduire un code : 'c' pour carré, 'r' pour rectangle et 't' pour triangle.
Le programme lit ensuite les dimensions du ou des cotés de la figure considérée.
Pour un carré, il affichera la valeur de la surface.
Pour un rectangle, il affichera la valeur de périmètre.
Pour un triangle, il affichera s’il est isocèle.

Solution :
Analyse du problème
Nom : FORME_GEO
Résultat = Forme
Forme = [ ] Si ( code = ″c″ ) alors
c1= donnée ("Entrer le coté : ")
Ecrire ("Surface : ", c1* c1)
Sinon si ( code = ″r″ ) alors
(c1,c2)= donnée ("Entrer les 2 cotés : ")
Ecrire ("Périmètre : ", (c1+c2)* 2 )
Sinon si ( code = ″t″ ) alors
(c1,c2,c3)= donnée ("Entrer les 3 cotés : ")
Si ( c1 = c2 ) OU ( c1=c3 ) OU ( c2=c3 ) alors
Ecrire(″isocèle″)
Sinon Ecrire(″non isocèle″)
Fin si
Sinon
Ecrire(″Mauvais code″)
Fin si
code=donnée ("Entrer un code : c , r ou t ")
Fin FORME_GEO

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

TDO
Objet Type / nature
c1,c2,c3 Entier
code Caractère

Algorithme Traduction en PASCAL


0) Début FORME_GEO PROGRAM FORME_GEO ;
1) Ecrire ("Entrer un code : c , r ou t "), Lire (code) USES WINCRT ;
2) Si ( code = ″c″ ) alors VAR c1 , c2 , c3 : INTEGER ;
Ecrire ("Entrer le coté : ") , Lire(c1) Code : CHAR ;
Ecrire ("Surface : ", c1* c1) BEGIN
Sinon si ( code = ″r″ ) alors WRITELN (' Entrer un code : c , r ou t ') ;
Ecrire ("Entrer les 2 cotés : ") READLN (code) ;
Lire(c1) , Lire(c2) IF ( code = 'c' ) THEN
Ecrire ("Périmètre : ", (c1+c2)* 2 ) BEGIN
Sinon si ( code = ″t″ ) alors WRITELN (' Entrer le coté : ') ;
Ecrire ("Entrer les 3 cotés : ") READLN (c1) ;
Lire(c1) , Lire(c2), Lire (c3) WRITELN ('Surface : ', c1* c1) ;
Si ( c1 = c2 ) OU ( c1=c3 ) OU ( c2=c3 ) alors END
Ecrire(″isocèle″) ELSE IF ( code = 'r' ) THEN
Sinon Ecrire(″non isocèle″) BEGIN
Fin si WRITELN(' Entrer les 2 cotés : ' ) ;
Sinon READLN (c1) ;
Ecrire(″Mauvais code″) READLN (c2) ;
Fin si WRITELN (' Périmètre : ' , (c1+c2)* 2 ) ;
3) Fin FORME_GEO END
ELSE IF ( code = 't' ) THEN
BEGIN
WRITELN (' Entrer les 3 cotés : ' ) ;
READLN(c1) ;
READLN(c2) ;
READLN(c3) ;
IF( c1 = c2 ) OR ( c1=c3 ) OR ( c2=c3 ) THEN
WRITELN (' isocèle ' )
ELSE WRITELN (' non isocèle ')
END
ELSE
WRITELN (' Mauvais code' ) ;
END.

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

IV. La structure de contrôle conditionnelle à choix :


1. Activité 1 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé
AFFICHE_COULEUR permettant de :
− Saisir un caractère C
− Afficher la couleur correspondante ainsi :
C = "B" "Bleu"
C = "R" "Rouge"
C = "J" "Jaune"
C = "V" "Vert"

− Afficher "Couleur indéterminée" si le caractère est différent de "B", "R", "J", "V"
Solution :
Analyse du problème
Nom : AFFICHE_COULEUR
Résultat = Ecrire (couleur)
couleur = [ ] Selon C Faire
"B" : couleur  "Bleu"
"R" : couleur  "Rouge"
"J" : couleur  "Jaune"
"V": couleur  "Vert"
Sinon
couleur  "Couleur indéterminée"
Fin selon
c =donnée ("Taper un caractère")
Fin AFFICHE_COULEUR
TDO
Objets Type/Nature
couleur Chaine
c Caractère

Algorithme Traduction en PASCAL


0) Début AFFICHE_COULEUR PROGRAM AFFICHE_COULEUR ;
1) Ecrire ("Taper un caractère") , lire(c) USES WINCRT ;
2) Selon C Faire VAR c : CHAR ;
"B" : couleur  "Bleu" couleur : STRING;
"R" : couleur  "Rouge" BEGIN
"J" : couleur  "Jaune" WRITELN (' Taper un caractère');
"V" : couleur "Vert" READLN (c);
Sinon CASE ( c ) OF
couleur  "Couleur indéterminée" 'B' : couleur := 'Bleu';
Fin selon 'R' : couleur := ' Rouge ';
3) Ecrire (couleur) 'J' : couleur := ' Jaune';
4) Fin AFFICHE_COULEUR 'V': couleur := ' Vert ';
ELSE
couleur := 'Couleur indéterminée';
END ;
WRITELN (couleur) ;
END.

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

2. Définition :

Une structure de contrôle conditionnelle à choix multiple permet de faire un choix parmi plusieurs possibilités.
Ce choix de traitement à effectuer dépend de la valeur que prendra un sélecteur qui va être comparée à une
série de valeurs ou à un ou plusieurs intervalles, en cas d’égalité (ou fait partie d’un intervalle), l’instruction qui
lui est associée est exécutée.

3. Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal


[init] SELON sélecteur FAIRE {init} ;
valeur1 :<traitement1> CASE sélecteur OF
valeur2 :<traitement2> valeur1 :<traitement1> ;
valeur3, valeur4 :<traitement3> valeur2 :<traitement2> ;
[valeur5.. valeur10] :<traitement4> valeur3, valeur4 :<traitement3> ;
…………. ………… [valeur5.. valeur10] :<traitement4> ;
valeur N :<traitement N> …………. …………
SINON valeur N :<traitement N>
<traitement R> ELSE
FIN SELON <traitement R> :
END ;

Remarques :

- Le sélecteur est une variable de type scalaire discret (entier, caractère, booléen)
- Elle ne peut jamais être de type réel.
- Chaque traitement peut être composé de plusieurs instructions, dans ce cas on va les délimitées par
BEGIN et END.
- La partie SINON est facultative.
- Lorsqu’on a plusieurs valeurs qui peuvent entraîner un même traitement, on peut l’énumérer séparées
par des virgules ou mêmes sous forme d’intervalles.

4. Applications :

Application 1 : Exécutez manuellement l’algorithme suivant et déduisez les valeurs finales des variables a, b
et c pour chacune des valeurs initiales suivantes de a : i) a=10 ii) a=3 iii) a=-5

0) Début Application
1) Ecrire (″a=″), lire (a)
2) b ← 2a
3) c ← b-4
4) Selon c faire
2 : a ← b-10
16 : b ← a+10
Sinon
c ← c - 10
Fin si
5) Ecrire (a, b, c)
6) Fin application

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation

Solution :
i) a=10 , b=20 , c=16
ii) a=-4 , b=6 , c=2
iii) a=-5 , b=-10 , c=-24

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SAISON


permettant d’afficher à l’écran la saison correspondante à sa lettre initiale saisie.

Solution :
Analyse du problème
Nom : SAISON
Résultat = Ecrire (sai)
sai = [ sai ""] Selon l faire
"E", "e" : sai "été"
"A", "a" : sai "automne"
"H", "h" : sai "hiver"
"P", "p" : sai "printemps"
Sinon
sai"Lettre ne correspond pas à une saison"
Fin selon
l = donnée ("Taper une lettre")
Fin SAISON
TDO
Objets Type/Nature
sai Chaine
l Caractère

Algorithme Traduction en PASCAL


0) Début SAISON PROGRAM SAISON ;
1) Ecrire ("Taper une lettre"), lire( l ) USES WINCRT ;
2) sai "" VAR l : CHAR ;
Selon l faire sai : STRING;
"E", "e" : sai "été" BEGIN
"A", "a" : sai "automne" WRITELN ('Taper une lettre');
"H", "h" : sai "hiver" READLN (l);
"P", "p" : sai "printemps" CASE ( l ) OF
Sinon 'E' , 'e' : sai := ' été ';
sai"Lettre ne correspond pas à une saison" 'A' , 'a' : sai := ' automne ';
Fin selon 'H' , 'h': sai := ' hiver ';
3) Ecrire (sai) 'P' , 'p' : sai := ' printemps ';
4) Fin SAISON ELSE
sai := 'Lettre ne correspond pas à une saison';
END ;
WRITELN (sai) ;
END.

Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CAT_AGE


permettant de résoudre un problème qui demande l’âge d’un enfant, puis l’informe de sa catégorie :
- ″Poussin″ de 6 à 7 ans.
- ″Pupille″ de 8 à 9 ans.
- ″Minime″ de 10 à 11 ans.
- ″Cadet″ de 12 à 14 ans.
- ″Junior″ de 15 à 17 ans.
- ″Senior″ de 18 à 20 ans.
- ″Tu as dépassé l’âge de l’enfance″ plus que 20 ans.

Solution :
Analyse du problème
Nom : CAT_AGE
Résultat = Ecrire (cat)
cat = [ ] Selon age faire
6..7 : cat  ″ Poussin ″
8..9 : cat  ″ Pupille ″
10..11 : cat  ″ Minime ″
12..14 : cat  ″ Cadet ″
15..17 : cat  ″ Junior ″
18..20 : cat  ″ Senior ″
Sinon
cat  ″ Tu as dépassé l’âge de l’enfance ″
Fin selon
age = donnée ("Age = ")
Fin CAT_AGE
TDO
Objets Type/Nature
cat Chaine
age Entier

Algorithme Traduction en PASCAL


0) Début CAT_AGE PROGRAM CAT_AGE ;
1) Ecrire ("Age = ") , lire(age) USES WINCRT ;
2) Selon age faire VAR age : INTEGER ;
6..7 : cat  ″ Poussin ″ cat : STRING;
8..9 : cat  ″ Pupille ″ BEGIN
10..11 : cat  ″ Minime ″ WRITELN ('Taper une lettre');
12..14 : cat  ″ Cadet ″ READLN (age);
15..17 : cat  ″ Junior ″ CASE ( age ) OF
18..20 : cat  ″ Senior ″ 6..7 : cat := ' Poussin ';
Sinon 8..9 : cat := ' Pupille ';
cat  ″ Tu as dépassé l’âge de l’enfance ″ 10..11 : cat := ' Minime ';
Fin selon 12..14 : cat := ' Cadet ';
3) Ecrire (cat) 15..17 : cat := ' Junior ';
4) Fin CAT_AGE 18..20 : cat := ' Senior ';
ELSE
cat := ' Tu as dépassé l’''âge de l’enfance';
END ;
WRITELN (cat) ;
END.

Enseignant : AHMED BELHASSEN 21


Algorithmique et programmation

Application 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DATE


permettant de saisir une date en introduisant successivement le n° du jour, le n° du mois et le n° de l’année puis
afficher cette date en remplaçant le n° du mois par son équivalent en toute lettre.
Solution :
Analyse du problème
Nom : DATE
Résultat = Ecrire (″date = ″ , jj ,mois , aaaa)
mois = [ ] Selon mm faire
1 : mois  ″ Janvier ″
2 : mois  ″ Février ″
3 : mois ″ Mars ″
4 : mois  ″ Avril ″
5 : mois  ″ Mai ″
6 : mois  ″ Juin ″
7 : mois  ″ Juillet ″
8 : mois  ″ Aout ″
9 : mois  ″ Septembre ″
10 : mois  ″ Octobre ″
11 : mois  ″ Novembre ″
12 : mois  ″ Décembre ″
Fin selon
(jj,mm,aaaa) = donnée ("date = ")
Fin DATE
TDO
Objets Type/Nature
mois Chaine
jj ,mm ,aaaa Entier

Algorithme Traduction en PASCAL


0) Début DATE PROGRAM DATE ;
1) Ecrire ("date =") , lire (jj,mm,aaaa) USES WINCRT ;
2) Selon mm faire VAR jj ,mm ,aaaa : INTEGER ;
1 : mois  ″ Janvier ″ mois : STRING;
2 : mois  ″ Février ″ BEGIN
3 : mois ″ Mars ″ WRITELN (' date =');
4 : mois  ″ Avril ″ READLN (jj,mm,aaaa);
5 : mois  ″ Mai ″ CASE ( mm ) OF
6 : mois  ″ Juin ″ 1 : mois := 'Janvier ' ;
7 : mois  ″ Juillet ″ 2 : mois := 'Février' ;
8 : mois  ″ Aout ″ 3 : mois:= 'Mars' ;
9 : mois  ″ Septembre ″ 4 : mois := 'Avril' ;
10 : mois  ″ Octobre ″ 5 : mois := 'Mai' ;
11 : mois  ″ Novembre ″ 6 : mois := 'Juin' ;
12 : mois  ″ Décembre ″ 7 : mois := 'Juillet' ;
Fin selon 8 : mois := 'Aout' ;
3) Ecrire (″date = ″ , jj ,mois , aaaa) 9 : mois := 'Septembre' ;
4) Fin DATE 10 : mois := 'Octobre' ;
11 : mois := ' Novembre ' ;
12 : mois := 'Décembre' ;
END ;
WRITELN (' date = ′, jj ,mois, aaaa);
END.

Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation

Application 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé


NOM_CHIFFRE permettant de saisir un chiffre et afficher son nom, si la donnée saisie n’est pas un chiffre
alors afficher ″Ce n’est pas un chiffre″.
Solution :
Analyse du problème
Nom : NOM_CHIFFRE
Résultat = Ecrire (″nom = ″, nom)
nom = [ ] Selon chiffre faire
0 : nom  ″ Zéro ″
1 : nom  ″ Un ″
2 : nom  ″ Deux ″
3 : nom  ″ Trois ″
4 : nom  ″ Quatre ″
5 : nom  ″ Cinq ″
6 : nom  ″ Six ″
7 : nom  ″ Sept ″
8 : nom  ″ Huit ″
9 : nom  ″ Neuf ″
Sinon nom  ″ Ce n’est pas un chiffre ″
Fin selon
chiffre = donnée ("chiffre = ")
Fin NOM_CHIFFRE
TDO
Objets Type/Nature
nom Chaine
chiffre Entier

Algorithme Traduction en PASCAL


0) Début NOM_CHIFFRE PROGRAM NOM_CHIFFRE ;
1) Ecrire ("chiffre =") , lire (chiffre) USES WINCRT ;
2) Selon chiffre faire VAR chiffre : INTEGER ;
0 : nom  ″ Zéro ″ nom : STRING;
1 : nom  ″ Un ″ BEGIN
2 : nom  ″ Deux ″ WRITELN ('chiffre =');
3 : nom  ″ Trois ″ READLN (chiffre);
4 : nom  ″ Quatre ″ CASE ( chiffre ) OF
5 : nom  ″ Cinq ″ 0 : nom := ' Zéro ';
6 : nom  ″ Six ″ 1 : nom := ' Un ';
7 : nom  ″ Sept ″ 2 : nom := ' Deux ';
8 : nom  ″ Huit ″ 3 : nom := ' Trois';
9 : nom  ″ Neuf ″ 4 : nom := ' Quatre';
Sinon 5 : nom := ' Cinq ';
nom  ″ Ce n’est pas un chiffre ″ 6 : nom := ' Six ';
Fin selon 7 : nom := ' Sept ';
3) Ecrire (″nom = ″, nom) 8 : nom := ' Huit ';
4) Fin NOM_CHIFFRE 9 : nom := ' Neuf ';
ELSE
nom := ' Ce n′′est pas un chiffre ';
END ;
WRITELN (' nom = ′, nom);
END.

Enseignant : AHMED BELHASSEN 23


Algorithmique et programmation

B. Les structures de contrôle itératives :


I. La structure de contrôle itérative complète :
1. Introduction :

Nous avons vu dans le chapitre précédent les définitions conditionnelles et comment rendre un ordinateur
décideur. Nous allons découvrir une autre potentialité de l’ordinateur : le travail de répétition. Il arrive que dans
un problème on se trouve contraint de répéter une suite d’instructions ou tout un traitement. Nous allons voir
en détail, les différentes formes de répétitions dans la suite de ce cours.

2. Activité 1 : Ecrire un programme qui permet d’afficher à l’écran le mot ″bienvenue″ 20 fois.
Solution :
Répéter 20 fois l’affichage du mot ″bienvenue″.
L’instruction écrire (″bienvenue″) se répète 20 fois dans l’algorithme.
Algorithme trop long, le traitement se répète 20 fois dans l’algorithme : pour optimiser cet algorithme on fait
recourt à une forme de répétition bien particulière, c’est la structure itérative complète.

3. Définition : Une structure de contrôle itérative complète exprime la répétition d’un traitement un nombre
fini de fois connu d’avance.

4. Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal


[ init] {init} ;
Pour c de vi à vf faire FOR c:= vi TO vf DO
Instruction 1 BEGIN
Instruction 2 Instruction 1
…….. Instruction 2
…….. ……..
Instruction n ……..
Fin Pour Instruction n
END ;

Remarques :

 Vi : valeur initiale du compteur


 Vf : valeur finale du compteur
 Le compteur (c) doit être de type scalaire (Entier, caractère ou booléen).
 Le traitement de la boucle « Pour » s’arrête lorsque le compteur atteint la valeur finale (Vf).
 Dans la boucle « Pour », le nombre de répétitions est fini. En effet, ce nombre est :
| vf – vi |+1 : Si le compteur est de type entier.
|ord (vf)-ord (vi) |+1 : Si le compteur est de type caractère.
 Dans le cas où Vi > Vf, pour qu’il y’aura exécution du traitement de cette boucle, on utilise en Pascal
« DOWNTO » au lieu de « TO »
 Dans la boucle « Pour », à chaque répétition, le compteur sera automatiquement
- Incrémenté (augmenté) d’une unité si Vi < Vf
- Décrémenté (retranché) d’une unité si Vi > Vf

Enseignant : AHMED BELHASSEN 24


Algorithmique et programmation

5. Applications :

Application 1 : Exécutez manuellement l’algorithme suivant et déduisez les valeurs finales des variables x , y
et i pour chacune des valeurs initiales suivantes de n : i) n=5 ii) n=1 iii) n=0

0) Début Application
1) Ecrire (″n=″), lire (n)
2) x ← 0
3) y ← 1
4) Pour i de 1 à n faire
x ← x+i
y←y*i
Fin pour
5) Ecrire (x, y, i)
6) Fin application

Solution :
i) x=15 , y=120 , i=5
ii) x=1 , y=1, i=1
iii) x=0 , y=1 , i=0

Application 2 : Un nombre est dit parfait s’il est égal à la somme de ses diviseurs sauf lui même. Rédiger
une analyse, un algorithme et un programme en PASCAL intitulé PARFAIT permettant de déterminer si un
entier m est parfait .

Solution :
Analyse du problème
Nom : PARFAIT
Résultat = Ecrire (m, mess)
mess= [ ] si m=s alors
mess ←″est parfait″
sinon
mess ←″n″est pas parfait″
Fin si
s= [ s ← 0 ] pour i de 1 à m-1 faire
si (m MOD i =0 ) alors
s←s+i
Fin si
fin pour
m = donnée ( " m = ")
Fin PARFAIT
TDO
Objet Type/Nature
m,s,i Entier
mess Chaine

Enseignant : AHMED BELHASSEN 25


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début PARFAIT PROGRAM PARFAIT ;
1) Ecrire ( " m = ") , lire(m) USES WINCRT ;
2) s ← 0 VAR m,s,i : INTEGER ;
pour i de 1 à m-1 faire mess : STRING ;
si (m MOD i =0 ) alors BEGIN
s←s+i WRITE (' m = '); READLN (m);
Fin si s :=0 ;
fin pour FOR i :=1 TO m-1 DO
3) si m=s alors IF m MOD i=0 THEN
mess ←″est parfait″ s:=s+i ;
sinon IF m=s THEN
mess ←″n″est pas parfait″ mess:=′est parfait′
Fin si ELSE
4) Ecrire (m, mess) mess:=′n′ ′est pas parfait′ ;
5) Fin PARFAIT WRITELN (m, mess) ;
END.

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TYPES_CAR


permettant de chercher et d’afficher le nombre de lettres NI, le nombre de chiffres NC et le nombre de
symboles NS d’une chaine de caractère CH saisie au clavier.

Solution :
Analyse du problème
Nom : TYPES_CAR
Résultat = Ecrire (″ NI = ″, ni , ″ NC = ″, nc ,″ NS = ″,ns)
(ni , nc , ns)= [ ni ← 0 , nc ← 0, ns ← 0 ] pour i de 1 à LONG (ch) faire
si (MAJUS (ch[ i ] ) DANS [″A″..″Z″] ) alors
ni ← ni + 1
sinon (ch[ i ] DANS [″0″..″9″] ) alors
nc ← nc + 1
sinon
ns ← ns + 1
Fin si
fin pour
ch = donnée ( " Donner une chaine : ")
Fin TYPES_CAR
TDO
Objet Type/Nature
ni,nc,ns,i Entier
ch Chaine

Enseignant : AHMED BELHASSEN 26


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début TYPES_CAR PROGRAM TYPES_CAR ;
1) Ecrire ( " Donner une chaine : ") , lire(ch) USES WINCRT ;
2) ni ← 0 , nc ← 0, ns ← 0 VAR ni , nc , ns , i : INTEGER ;
pour i de 1 à LONG (ch) faire ch : STRING ;
si (MAJUS (ch[ i ] ) DANS [″A″..″Z″] ) alors BEGIN
ni ← ni +1 WRITE (' Donner une chaine : '); READLN (ch);
sinon (ch[ i ] DANS [″0″..″9″] ) alors ni :=0 ; nc :=0 ; ns :=0 ;
nc ← nc +1 FOR i :=1 TO LENGTH (ch) DO
sinon IF (MAJUS (ch[ i ] ) IN [′A′..′Z′] ) THEN
ns ← ns + 1 ni:=ni+1
Fin si ELSE IF (ch[ i ] IN [′0′..′9′] ) THEN
fin pour nc:=nc+1
3) Ecrire (″ NI = ″, ni , ″ NC = ″, nc ,″ NS = ″,ns) ELSE
4) Fin TYPES_CAR ns:=ns+1 ;
WRITELN (′ NI = ′, ni , ′ NC = ′, nc ,′ NS = ′,ns) ;
END.

Application 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé


PRODUIT_SOMME permettant d’effectuer la multiplication de deux entiers positifs (notés p et q) donnés en
utilisant uniquement l’addition entière.

Solution :
Analyse du problème
Nom : PRODUIT_SOMME
Résultat = Ecrire (s)
s= [ s ← 0 ] pour c de 1 à q faire
s←s+p
fin pour
q = donnée ( " q = ")
p = donnée ( " p = ")
Fin PRODUIT_SOMME
TDO
Objet Type/Nature
s,p,q,c Entier

Algorithme Traduction en PASCAL


0) Début PRODUIT_SOMME PROGRAM PRODUIT_SOMME ;
1) Ecrire ( " p =") , lire(p) USES WINCRT ;
2) Ecrire ( " q =") , lire(q) VAR s , p , q , c : INTEGER ;
3) s ← 0 BEGIN
pour c de 1 à q faire WRITE (' p = '); READLN (p);
s←s+p WRITE (' q = '); READLN (q);
fin pour s :=0 ;
4) Ecrire (s) FOR c :=1 TO q DO
5) Fin PRODUIT_SOMME s:=s+p ;
WRITELN (s) ;
END.

Enseignant : AHMED BELHASSEN 27


Algorithmique et programmation

Application 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MOY_CLASSE


permettant de calculer et d’afficher la moyenne d’une classe de 10 élèves.

Solution :
Analyse du problème
Nom : MOY_CLASSE
Résultat = Ecrire ("La moyenne de la classe est : ", mc )
mc  som/10
som = [ som 0 ] pour i de 1 à 10 faire
som ← som + moy [ i ]
fin pour
moy= [ ] pour i de 1 à 10 faire
moy [ i ] = donnée ("Saisir l'élément N° ",i)
fin pour
Fin MOY_CLASSE

TDNT
TYPE
TAB= Tableau de 10 réels

TDO
Objet Type/Nature
mc , som Réel
i Entier
moy TAB

Algorithme Traduction en PASCAL


0) Début MOY_CLASSE PROGRAM MOY_CLASSE ;
1) pour i de 1 à 10 faire USES WINCRT ;
Ecrire ("Saisir l'élément N° ",i) TYPE
Lire (moy [ i ]) TAB= ARRAY [1. .10] OF REAL;
fin pour VAR i : INTEGER ;
2) som 0 mc , som : REAL ;
pour i de 1 à 10 faire BEGIN
som ← som + moy [ i ] FOR i :=1 TO 10 DO
fin pour BEGIN
3) mc  som/10 WRITELN ('Saisir l'élément N° ',i);
4) Ecrire ("La moyenne de la classe est : ", mc ) READLN (moy [ i ]) ;
5) Fin MOY_CLASSE END;
som:= 0;
FOR i := 1 TO 10 DO
som:= som+ moy [ i ] ;
mc := som/10;
WRITELN ('La moyenne de la classe est : ', mc :5 :2);
END.

Enseignant : AHMED BELHASSEN 28


Algorithmique et programmation

II. Les structures de contrôle itératives à condition d’arrêt :


a. La structure répéter…jusqu’à…

1. Activité 1 :

Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHIFFRE_3 permettant de saisir
un entier formé de 3 chiffres.

Solution :
La tache de ce programme consiste à faire la saisie de l’entier n en effectuant un contrôle sur l’entrée. Si une
entrée n’est pas valide et ne vérifie pas les conditions imposées par le problème (entier formé de 3 chiffres),
alors le programme redemande la saisie et ainsi de suite jusqu'à ce qu’une bonne valeur soit donnée.
 Il s’agit de répéter la saisie d’un entier n jusqu'à (100≤n≤999).

Répéter
n=donnée ( ″ N = ″ )
Jusqu’à (n DANS [100..999])

2. Définition :
La structure Répéter…jusqu’à…est utilisée quand il s’agit de répéter un traitement un nombre de fois inconnu à
l’avance et qu’on est sur que le traitement itératif s’exécutera au moins une fois.
Le traitement est toujours exécuté au moins une fois. Dès que la condition d’arrêt devient vraie, la boucle est
abandonnée et le programme continue en séquence.

Traitement

Condition
Vérifié Non vérifié

Sortir de la boucle

3. Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal


[ init] {init} ;
Répéter Repeat
Instruction 1 Instruction 1
Instruction 2 Instruction 2
…….. ……..
…….. ……..
Instruction n Instruction n
Jusqu'à condition d’arrêt Until condition d’arrêt ;

Enseignant : AHMED BELHASSEN 29


Algorithmique et programmation

4. Applications :

Application 1 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé


FACTORIELLE permettant de calculer et d’afficher le factoriel d’un entier N positif.
Exemple : N= 4 N != 4*3*2*1=24.

Solution :
Analyse du problème
Nom : FACTORIELLE
Résultat = Ecrire ( n , ″ ! = ″ , Fact)
Fact = [ Fact1 ] Si (n<> 0) alors
Pour i de n à 1 faire
FactFact*i
Fin Pour
Fin si
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >=0 )

Fin FACTORIELLE
TDO
Objet Type/Nature
n , Fact , i Entier

Algorithme Traduction en PASCAL


0) Début FATCORIELLE PROGRAM FATCORIELLE ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , Fact , i : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >=0 ) REPEAT
2) Fact1 WRITE ('N = ');
Si (n<> 0) alors READLN(n);
Pour i de n à 1 faire UNTIL n >=0;
FactFact*i Fact:=1;
Fin Pour IF( n<> 0 ) THEN
Fin si BEGIN
3) Ecrire ( n , ″ ! = ″ , Fact) FOR i:=n DOWNTO 1 DO
4) Fin FATCORIELLE Fact : =Fact * i ;
END ;
WRITELN ( n , ' !=' , Fact) ;
END.

Enseignant : AHMED BELHASSEN 30


Algorithmique et programmation

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé


NBRE_CHIFFRE permettant qui permet de lire un entier n puis affiche le nombre des chiffres de cet entier.

Solution :
Analyse du problème
Nom : NBRE_CHIFFRE
Résultat = Ecrire (″Le nombre de chiffre de ″, n , ″ est ″ , s)
s = [ s0 , qn ] Répéter
qq MOD 10
s s+1
Jusqu’à ( q DIV 10 =0 )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >=0 )

Fin NBRE_CHIFFRE
TDO
Objet Type/Nature
n,q,s Entier

Algorithme Traduction en PASCAL


0) Début NBRE_CHIFFRE PROGRAM NBRE_CHIFFRE ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , q , s : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >=0 ) REPEAT
2) Fact1 WRITE ('N = ');
Si (n<> 0) alors READLN(n);
Pour i de n à 1 faire UNTIL n >=0;
FactFact*i s:=0 ;
Fin Pour q:=n;
Fin si REPEAT
3) Ecrire ( n , ″ ! = ″ , Fact) q:=q DIV 10 ;
4) Fin NBRE_CHIFFRE s:=s+1;
UNTIL q=0;
WRITELN ( ' Le nombre de chiffre de ' , n , ′est′ , s) ;
END.

Application 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé


NBRE_CHAINE permettant de lire une chaîne de caractères qui contient des nombres seulement.

Solution :
Analyse du problème
Nom : NBRE_CHAINE
Résultat = Ecrire (″La chaine de caractère est ″, ch )
ch= [ ] Répéter
ch=donnée ( ″ ch = ″ )
VALEUR ( ch,n,pe)
Jusqu’à ( pe=0 )

Fin NBRE_CHAINE

Enseignant : AHMED BELHASSEN 31


Algorithmique et programmation

TDO
Objet Type/Nature
n , pe Entier
ch Chaine

Algorithme Traduction en PASCAL


0) Début NBRE_CHAINE PROGRAM NBRE_CHAINE ;
1) Répéter USES WINCRT ;
Ecrire (″ ch = ″ ) VAR n , pe : INTEGER ;
Lire (ch ) ch : STRING ;
VALEUR ( ch,n,pe) BEGIN
Jusqu’à ( pe=0 ) REPEAT
2) Ecrire (″La chaine de caractère est ″, ch ) WRITE ('ch = ');
3) Fin NBRE_CHAINE READLN(ch);
VAL ( ch,n,pe)
UNTIL pe=0;
WRITELN (' La chaine de caractère est ' , ch) ;
END.

Application 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé RECHERCHE


permettant de stocker une série d’éléments dans un tableau de 100 éléments au maximum compris entre 1 et 50.
Le zéro est admis comme fin de saisie. Recherchez et afficher le minimum et le maximum des nombres entrés.

Solution :
Analyse du problème
Nom : RECHERCHE
Résultat = Ecrire (″Minimum = ″, min , ″ Maximum = ″ , max)
(min , max )=[ min t[1] , max t[1] ] pour cp de 2 à n faire
si (t[cp] < min) alors
min t[cp]
fin si
si (t[cp] > max) alors
max t[cp]
fin si
fin pour
(t , n) = [ n0 ] Répéter
Répéter
v=donnée ( ″ Donner une valeur entre 0 et 50 ″ )
Jusqu’à ( v DANS [ 0..50] )
si ( v<>0) alors
n n + 1
t[n]  v
fin si
Jusqu’à ( v=0 )

Fin RECHERCHE
TDO
Objet Type/Nature
n ,v,min , max ,cp Entier
t Tableau de 100 entiers

Enseignant : AHMED BELHASSEN 32


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début RECHERCHE PROGRAM RECHERCHE ;
1) n0 USES WINCRT ;
Répéter VAR n ,v, min , max , cp : INTEGER ;
Répéter t : ARRAY[1..100] OF INTEGER;
v=donnée ( ″ Donner une valeur entre 0 et 50 ″ ) BEGIN
Jusqu’à ( v DANS [ 0..50] ) n:=0;
si ( v<>0) alors REPEAT
n n + 1 REPEAT
t[n]  v WRITE (' Donner une valeur entre 0 et 50 ');
fin si READLN(v);
Jusqu’à ( v=0 ) UNTIL v IN [0..50 ] ;
2) min t[1] , max t[1] IF v<>0 THEN
pour cp de 2 à n faire BEGIN
si (t[cp] < min) alors n := n + 1;
min t[cp] t[n] := v ;
fin si END;
si (t[cp] > max) alors UNTIL v=0;
max t[cp] min :=t[1] ;
fin si max :=t[1] ;
fin pour FOR cp :=2 TO n DO
3) Ecrire (″Minimum =″,min , ″ Maximum =″, max) BEGIN
4) Fin RECHERCHE IF (t[cp] < min) THEN min:=t[cp] ;
IF (t[cp] > max) THEN max:=t[cp] ;
END;
WRITELN ( ' Minimum =' ,min, ′ Maximum =′, max
);
END.

Application 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NBR_3


permettant de saisir les éléments d’un tableau T de n entiers formés chacun de trois chiffres (5 ≤ n ≤20) et
d’afficher les éléments du tableau T dont la permutation des chiffres donne la valeur du premier élément du
tableau T.

Solution :
Analyse du problème
Nom : NBR_3
Résultat = affichage
affichage=[ ] pour cp de 1 à n faire
ut[cp] MOD 10
dt[cp] MOD 100 DIV 10
ct[cp] DIV 100
r1 u + 10 * c + 100 * d
r2 d + 10 * u + 100 * c
r3 d + 10 * c + 100 * u
r4 c + 10 * d + 100 * u
r5 c + 10 * u + 100 * d
si (t[1] DANS [t[cp] , r1,r2,r3,r4,r5] ) alors
Ecrire ( t[cp])
fin si
fin pour

Enseignant : AHMED BELHASSEN 33


Algorithmique et programmation

t = [ ] pour cp de 1 à n faire
Répéter
t[cp]=donnée ( ″ Donner un entier formé de trois chiffres ″ )
Jusqu’à ( t[cp] DANS [ 100..999] )
fin pour
n=[ ] Répéter
n=donnée ( ″ Donner une valeur entre 5 et 20 ″ )
Jusqu’à ( n DANS [ 5..20] )
Fin NBR_3
TDO
Objet Type/Nature
n, u, d, c, r1, r2, r3, Entier
r4, r5, cp
t Tableau de 100 entiers

Algorithme Traduction en PASCAL


0) Début NBR_3 PROGRAM NBR_3 ;
1) Répéter USES WINCRT ;
Ecrire ( ″ Donner une valeur entre 5 et 20 ″ ) VAR n, u, d, c, r1, r2, r3, r4, r5, cp : INTEGER ;
Lire (n) t : ARRAY[1..100] OF INTEGER;
Jusqu’à ( n DANS [ 5..20] ) BEGIN
2) pour cp de 1 à n faire REPEAT
Répéter WRITE (' Donner une valeur entre 5 et 20 ');
Ecrire ( ″Donner un entier formé de trois chiffres″ ) READLN(n);
Lire(t[cp]) UNTIL n IN [5..20 ] ;
Jusqu’à ( t[cp] DANS [ 100..999] )
fin pour FOR cp :=1 TO n DO
3) pour cp de 1 à n faire BEGIN
ut[cp] MOD 10 REPEAT
dt[cp] MOD 100 DIV 10 WRITE (' Donner un entier formé de trois chiffres ');
ct[cp] DIV 100 READLN(t[cp]);
r1 u + 10 * c + 100 * d UNTIL t[cp] IN [100..999] ;
r2 d + 10 * u + 100 * c END;
r3 d + 10 * c + 100 * u FOR cp :=2 TO n DO
r4 c + 10 * d + 100 * u BEGIN
r5 c + 10 * u + 100 * d u :=t[cp] MOD 10 ;
si (t[1] DANS [t[cp] , r1,r2,r3,r4,r5] ) alors d :=t[cp] MOD 100 DIV 10 ;
Ecrire ( t[cp]) c :=t[cp] DIV 100 ;
fin si r1 := u + 10 * c + 100 * d ;
fin pour r2 := d + 10 * u + 100 * c ;
4) Fin NBR_3 r3 := d + 10 * c + 100 * u ;
r4 := c + 10 * d + 100 * u ;
r5 := c + 10 * u + 100 * d ;
IF (t[1] IN [t[cp] , r1,r2,r3,r4,r5] ) THEN
WRITELN(t[cp]) ;
END;
END.

Enseignant : AHMED BELHASSEN 34


Algorithmique et programmation

b. La structure tant que…faire…


1. Activité 2 :

Soit l’algorithme suivant :


0) Début PGCD
1) Ecrire (″m=″), lire(m)
2) Ecrire (″n=″), lire(n)
3) Répéter
Si (m > n) alors
m←m-n
Sinon
n ←n-m
Fin si
Jusqu’ à (m=n)
4) Ecrire (″ PGCD =″, m)
5) Fin PGCD

1) Exécutez cet algorithme pour m = 120 et n = 50, m = 15 et n = 27


2) Exécutez cet algorithme pour m=6 et n=6. Que remarquez – vous ?

Solution :
1) PGCD = 10, PGCD = 3
2) Dans le cas particulier ou les valeurs saisies des variables m et n sont égales, nous sommes amenés vers une
boucle infinie.
Dans ce cas le traitement ne va pas avoir lieu et par conséquent le nombre de répétitions est égal à zéro. Il est
donc incorrect d’opter aussi pour la structure Répéter…jusqu’à….
Dans ce cas précis, la structure itérative à utiliser est la structure tant que…faire….
L’algorithme solution est le suivant :

0) Début PGCD
1) Ecrire (″m=″), lire(m)
2) Ecrire (″n=″), lire(n)
3) Tant que (m<> n) faire
Si (m > n) alors
m←m-n
Sinon
n ←n-m
Fin si
Fin tant que
4) Ecrire (″ PGCD =″, m)
5) Fin PGCD

2. Définition :

La structure Tant que…faire…est utilisée quand il s’agit de répéter un traitement un nombre de fois inconnu à
l’avance et que le traitement itératif peut ne pas s’exécuter.

Enseignant : AHMED BELHASSEN 35


Algorithmique et programmation

Non vérifié Condition de Vérifié


non arrêt

Sortir de la boucle
Traitement

3. Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal

[ init] {init} ;
Tant que (non arrêt) faire While (non arrêt) Do
Instruction 1 Begin
Instruction 2 Instruction 1 ;
…….. Instruction 2 ;
…….. ……..
Instruction n ……..
Instruction n ;
Fin Tant que End ;

4. Applications :

Application 1 : Exécutez manuellement l’algorithme suivant pour chacune des valeurs suivantes de la
variable c : i) c=7 ii) c=4 iii) c=5

0) Début Application
1) lire (c)
2) Tant que (c=5) faire
Si (c MOD 2 =0) alors
Ecrire (2*c)
Sinon
Ecrire (c*c)
Fin si
lire (c)
Fin Tant que
3) Ecrire (c)
4) Fin application

Solution :
i) c=49
ii) c=8
iii) c=5

Enseignant : AHMED BELHASSEN 36


Algorithmique et programmation

Application 2 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé COMPTE


permettant de saisir une suite d’entiers qui se termine par -1 puis de calculer et d’afficher la somme de ces
valeurs sauf la dernière.

Solution :
Analyse du problème
Nom : COMPTE
Résultat = Ecrire (″Somme = ″, s)
s = [ s0 , n=donnée(″nombre =″)] Tant que n<>-1 faire
ss+n
n=donnée
Fin tant que
Fin COMPTE
TDO
Objet Type/Nature
n,s Entier

Algorithme Traduction en PASCAL


0) Début COMPTE PROGRAM COMPTE ;
1) s0 USES WINCRT ;
Ecrire (″nombre = ″), Lire (n) VAR n , s : INTEGER ;
Tant que n<>-1 faire BEGIN
ss+n s:=0 ;
Lire (n) WRITE ('nombre = ');
Fin tant que READLN(n);
2) Ecrire (″ Somme = ″, s)
3) Fin COMPTE WHILE n<>-1 DO
BEGIN
s:=s+n;
READLN(n);
END ;
WRITELN ( ' Somme = ' , s) ;
END.

Enseignant : AHMED BELHASSEN 37


Algorithmique et programmation

Conclusion :
Pour utiliser une boucle dans un problème posé, on se base sur l’organigramme suivant :

Sélection d’une boucle

NON
Nombre de
répétitions fini

Exécution de la
boucle au moins
une fois

OUI OUI NON

Structure itérative Structure itérative à Structure itérative à


complète condition d’arrêt condition d’arrêt Tant
Répéter…jusqu’à que…faire
[1, n] [1,+00] [0,+00]

Enseignant : AHMED BELHASSEN 38


Algorithmique et programmation

Chapitre
Les sous programmes
I. L’analyse modulaire :
1. Activité 1 :

Quelques années plus tard, le propriétaire a remarqué la nécessité d’agrandir l’épicerie en une supérette vue
l’augmentation du nombre de clients.
Cette superette est formée de :
Des rayons, Un dépôt, Des caisses et un bureau de direction.

Le propriétaire peut travailler seul mais c’est pénible car le nombre de tache a augmentée :
Quelles sont ces taches ?
Il va gérer la caisse, contrôler le rayon, le charger et le nettoyer.
Qu’est ce qu’il doit faire pour résoudre ce problème ?
Il doit recruter un groupe d’employés et diviser le groupe en sous-groupe qui va résoudre un problème simple.

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

Constatations :

 Donc la résolution des sous problèmes s’effectue à travers des programmes simples appelés sous-
programme ou module.
 L’analyse modulaire consiste à diviser un problème complexe et/ou de grande taille en problèmes simple
de taille réduite.

2. L’apport de l’analyse modulaire :

 Facilité la résolution en se concentrant uniquement sur une partie du problème (sous-programmes)


plutôt que sur sa totalité (programme).
 Réduire la difficulté.
 Améliorer la lisibilité.
 Gagner du temps et éviter la duplication (répétition) des lignes de codes.

3. Notions de sous-programmes :
Un sous-programme possède une structure analogue à un programme (entête, partie déclaration, partie
instructions).
- Il existe deux types de sous-programmes : les fonctions (retournent un seul résultat qui peut être exploité dans
une expression) et les procédures (renvoient zéro, un ou plusieurs résultats).
- Un sous-programme X peut être appelé (exécuter) plusieurs fois par un sous-programme Y. X est dite sous-
programme appelé (celui qui fait le service) et tant dit que Y est dite appelant (celui qui demande le service).

II. Les fonctions :


1. Activité 2 :
Soit la fonction affine f : x → 2*x + 5 ou bien f(x) = 2*x +5.
f(x) c’est-à-dire 2*x + 5 est l’image de x par la fonction f.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL_F permettant de saisir
trois réels a, b et c puis calculer et afficher leurs images.

Exemple :

a= 5 f(5) = 15
b= 4 f(4) = 13
c= 3 f(3) = 11

Solution :
Analyse du programme principal :
Nom : CALCUL_F
Résultat = Ecrire ("f (", a, ") =" , fa, "f (", b , ") =" , fb , "f (", c , ") =" , fc)
fa ← FN f(a)
fb ← FN f(b)
fc ← FN f(c)
a = donnée (" a = ")
b = donnée (" b = ")
c = donnée (" c = ")
Fin CALCUL_F

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

TDO
Objet Type/Nature
a , b , c , fa , fb , fc Réel
f Fonction

Algorithme du programme principal :


0) Début CALCUL_F
1) Ecrire (" a = "), lire(a)
2) Ecrire (" b = "), lire(b)
3) Ecrire (" c = "), lire(c)
4) fa ← FN f(a)
5) fb ← FN f(b)
6) fc ← FN f(c)
7) Ecrire ("f (", a, ") =" , fa, "f (", b , ") =" , fb , "f (", c , ") =" , fc)
8) Fin CALCUL_F

Analyse de la fonction f :
DEF FN f(x : réel) : réel
Résultat = f
f ← 2*x +5
Fin f

Algorithme de la fonction f :
0) DEF FN f (x : réel) : réel
1) f  2*x +5
2) Fin f

Traduction en PASCAL
PROGRAM CALCUL_F ;
USES WINCRT ;
VAR a , b , c , fa , fb , fc : REAL ;
FUNCTION f (x : REAL): REAL;
BEGIN
f : =2 * x + 5 ;
END ;

BEGIN
WRITE (' a = ') ; READLN (a) ;
WRITE (' b = ' ) ; READLN (b) ;
WRITE (' c = ') ; READLN (c) ;
fa:=f(a);
fb:=f(b);
fc:=f(c);
WRITE ('f (', a, ') =' , fa, 'f (', b , ') =' , fb , 'f (', c , ') =' , fc);
END.

2. Définition :

Une fonction est un sous-programme qui permet la résolution d’un problème précis et qui retourne un seul
résultat de type simple (entier, réel, booléen, caractère ou chaîne).

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

L’appel d’une fonction peut être utilisée dans :


1. une affectation : variable  nom_de_la_fonction (paramètres).
2. une action de sortie : Ecrire (nom_de_la_fonction (paramètres)).
3. une structure itérative.
4. une structure conditionnelle : Si (nom_de_la_fonction (paramètres) = valeur)

3. Vocabulaire et syntaxe :

En analyse
DEF FN nom_de_la_fonction (arguments : type_arguments) : type_de_résultat
Résultat = nom_de_la fonction
nom_de_la_fonction ← expression
………………………..
Fin nom_de_la_fonction

En algorithme
0) DEF FN nom_de_la_fonction (arguments : type_arguments) : type_de_résultat
1)………………………….
2)…………………………
………………………….
n-1 ) nom_de_la_fonction ← expression
n) Fin nom_de_la_fonction

En PASCAL
FUNCTION nom_de_la_fonction (arguments : type_arguments) : type_de_résultat ;
TYPE
Déclaration des types locaux ;
VAR
Déclaration des variables locaux ;
BEGIN
Instructions de la fonction ;
nom_de_la_fonction := expression ;
END ;

4. Application 1 : Soient les déclarations suivantes d’un programme Pascal :


La déclaration des objets globaux :

VAR a , b : INTEGER ;
d , e : CHAR ;
r : BOOLEAN ;

- L’en-tête d’une fonction fct : FUNCTION fct ( x : INTEGER ; y : CHAR) :BOOLEAN ;

Question : Indiquer parmi les appels suivants lesquels sont valables. Expliquer

1) r := fct (a , d ) ; 3) WRITELN ( fct ( e , b ) ) ; 5) a := fct ( a , d ) ;


2) r := fct ( 5 , 3 ) ; 4) IF fct ( a , d ) = fct ( b , e ) THEN r := fct(5 , ‘3’) ;

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

Solution :
1) Appel correct.
2) Appel incorrect : types incompatibles.
3) Appel incorrect : types incompatibles.
4) Appel correct.
5) a de type entier et le résultat retourné par la fonction de type booléen : Appel incorrect.

5. Application 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL_SOMME permettant de
calculer la somme suivante (n donnée) :

1 1 1 1
S=1+ + + …+ ,
2! 3! 4! !
Analyse du programme principal :
Nom : CALCUL_SOMME
Résultat = Ecrire(s)
s=[ s←1] pour i de 2 à n faire
s← s+1/FN factorielle (i)
fin pour
n = donnée (″n = ″)
Fin CALCUL_SOMME
TDO
Objet Type/Nature
i,n entier
s Réel
factorielle fonction

Algorithme du programme principal :


0) Début CALCUL_SOMME
1) Ecrire (″n = ″), lire(n)
2) s←1 pour i de 2 à n faire
s← s+ (1/FN factorielle (i))
fin pour
3) Ecrire(s)
4) Fin CALCUL_SOMME
Analyse de la fonction factorielle :
DEF FN factorielle (x : entier ) :entier
Résultat = factorielle
factorielle ←f
f=[ f←1] pour i de 1 à x faire
f← f * i
fin pour
Fin factorielle
TDOL
Objet Type/Nature
i,f entier

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Algorithme de la fonction factorielle :


0) DEF FN factorielle (x : entier ) :entier
1) f←1 pour i de 1 à x faire
f← f * i
fin pour
2) factorielle ←f
3) Fin factorielle
Traduction en PASCAL
PROGRAM CALCUL_SOMME;
USES WINCRT;
VAR
i , n : INTEGER ;
s : REAL ;
FUNCTION factorielle ( x : INTEGER):INTEGER ;
VAR
i , f : INTEGER ;
BEGIN
f:=1 ;
FOR i:=1 TO x DO
f:=f * i ;
factorielle:= f ;
END;
BEGIN
WRITELN (′ n = ′) ; READLN (n) ;
s:=1;
FOR i:=2 TO n DO
s:= s+(1/FN factorielle (i)) ;
WRITELN (s);
END.

III. Les procédures :


1. Activité 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé AFFICHAGE qui permet d’afficher
un mot1 n fois et un mot2 m fois avec mot1, n, mot2 et m sont des données.

Solution :
Analyse du problème
Nom : AFFICHAGE
Résultat = aff
aff = [ ] pour i de 1 à n faire
Ecrire (mot1)
fin pour
pour i de 1 à m faire
Ecrire (mot2)
fin pour
m= donnée (″ m= ″)
n = donnée (″ n= ″)
mot2 = donnée (″ mot2= ″)
mot1 = donnée (″ mot1= ″)
Fin AFFICHAGE

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

TDO
Objet Type/Nature
n,m,i Entier
mot1, mot2 Chaine

Algorithme PASCAL
0) Début AFFICHAGE PROGRAM AFFICHAGE ;
1) Ecrire (″ mot1= ″), lire (mot1) USES WINCRT ;
2) Ecrire (″ mot2= ″), lire (mot2) VAR n , m , i : INTEGER ;
3) Ecrire (″ n= ″), lire (n) mot1, mot2 : STRING ;
4) Ecrire (″ m= ″), lire (m) BEGIN
5) pour i de 1 à n faire WRITE (' mot1 = '); READLN (mot1);
Ecrire (mot1) WRITE (' mot2 = '); READLN (mot2);
fin pour WRITE (' n= '); READLN (n);
6) pour i de 1 à m faire WRITE (' m= '); READLN (m);
Ecrire (mot2) FOR i :=1 TO n DO WRITELN (mot1) ;
fin pour FOR i :=1 TO m DO WRITELN (mot2) ;
7) Fin AFFICHAGE END.

Constatations :
D’après cette activité on remarque qu’il y a un bloc d’instructions qui se répète (au niveau d’affichage de mot1 et
celle de mot2).
Solution :

Pour éviter cette répétition, on peut isoler ce bloc d’instructions qui se répète et d’en faire un module et
d’appeler ce module autant de fois que nécessaire.
On remarque aussi que le résultat de ce module n’est pas unique, donc on ne peut pas utiliser une fonction.
 Ce pour cette raison on peut utiliser le deuxième type de sous-programme : la procédure.

2. Définition :

Les procédures sont des sous-programmes qui peuvent avoir plusieurs résultats (Le nombre des
résultats retournés par une procédure est appartient à [0..n]). Le seul cas ou la procédure retourne 0
résultat c’est le cas de procédure d’affichage. Une fonction est un cas particulier de procédure.

3. Vocabulaire et syntaxe :
En analyse
DEF PROC nom_de_la_procédure (arguments : type_arguments)
Résultat =
………………………..
Fin nom_de_la_procédure

En algorithme
0) DEF PROC nom_de_la_procédure (arguments : type_arguments)
1)………………………….
2)…………………………
………………………….
n) Fin nom_de_la_procédure

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

En PASCAL
PROCEDURE nom_de_la_procédure (arguments : type_arguments) ;
TYPE
Déclaration des types locaux ;
VAR
Déclaration des variables locaux ;
BEGIN
Instructions de la procédure ;
END ;

4. Application 3 :

Soient les déclarations suivantes d’un programme Pascal :

La déclaration des objets globaux :

CONST c = 3 ;
VAR a , b : INTEGER ;

L’en-tête d’une procédure prcd: PROCEDURE prcd ( i : INTEGER ; VAR j : INTEGER) ;

Question : Indiquer parmi les appels suivants lesquels sont valables. Expliquer

1) a := prcd ( a , b ) ; 3) prcd ( a , c ) ; 5) prcd ( c , a) ;


2) prcd ( 5 , 3 ) ; 4) prcd (a , b , c) ; 6) prcd ( a ,b ) ;

Solution :
1) Appel incorrect. 5) Appel correct.
2) Appel incorrect : types incompatibles. 6) Appel correct.
3) Appel incorrect : types incompatibles.
4) Appel incorrect : types incompatibles.

5. Application 4 : Reprenez l’énoncé de l’activité et refaire le travail en utilisant une procédure.


Analyse du programme principal :
Nom : AFFICHAGE
Résultat = aff
aff=[ ] PROC Affiche (mot1,n)
PROC Affiche (mot2,m)
m= donnée (″ m= ″)
n = donnée (″ n= ″)
mot2 = donnée (″ mot2= ″)
mot1 = donnée (″ mot1= ″)
Fin AFFICHAGE
TDO
Objet Type/Nature
n,m Entier
mot1, mot2 Chaine
Affiche Procédure

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Algorithme du programme principal :


0) Début AFFICHAGE
1) Ecrire (″ mot1= ″), lire (mot1)
2) Ecrire (″ mot2= ″), lire (mot2)
3) Ecrire (″ n= ″), lire (n)
4) Ecrire (″ m= ″), lire (m)
5) PROC Affiche (mot1,n)
6) PROC Affiche (mot2,m)
7) Fin AFFICHAGE
Analyse de la procédure Affiche :
DEF PROC Affiche (mot : chaine, nb : entier)
Résultat = aff
aff = [ ] pour i de 1 à nb faire
Ecrire (mot)
fin pour
Fin Affiche
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure Affiche :


0) DEF PROC Affiche (mot : chaine, nb : entier)
1) pour i de 1 à nb faire
Ecrire (mot)
fin pour
2) Fin Affiche

Traduction en PASCAL
PROGRAM AFFICHAGE ;
USES WINCRT;
VAR
n , m : INTEGER ;
mot1, mot2 : STRING ;
PROCEDURE Affiche ( mot : STRING ; nb :INTEGER );
VAR
i : INTEGER ;
BEGIN
FOR i:=1 TO nb DO
WRITELN (mot) ;
END;
BEGIN
WRITE (' mot1 = '); READLN (mot1);
WRITE (' mot2 = '); READLN (mot2);
WRITE (' n= '); READLN (n);
WRITE (' m= '); READLN (m);
Affiche (mot1,n) ;
Affiche (mot2,m) ;
END.

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

IV. Déclaration, accès aux objets et modes de transmission :


1. Les objets locaux et les objets globaux :

a. Activité 4 :
Soit le programme PASCAL suivant :

PROGRAM test;
USES WINCRT;
VAR
a: INTEGER;
PROCEDURE B(x: INTEGER);
VAR
i: INTEGER;
BEGIN
i:=0;
a:=i+1;
a:=x+1;
END;
BEGIN
a:=5;
B (a);
WRITELN ('a = ' , a);
END.

1) Taper ce programme sur votre machine.


2) Exécuter ce programme pour i=1 et observer les sorties écran.

b. Définitions :

 Un objet local est un objet déclaré dans un sous-programme et n’est pas connu qu’à l’intérieur de celui-ci.
Exemple : i.
 Un objet global est un objet déclaré dans le programme principal et utilisable par ce dernier et les différents
sous-programmes qui le forment. Exemple : a.

2. Les différents types de paramètres :

 Paramètres formels : ce sont les paramètres qui se trouvent dans l’entête du sous-programme au niveau
déclaration. Exemple : x.
 Paramètres effectifs : ce sont les paramètres qui figurent (dans le programme appelant) au niveau de l’appel
du sous-programme. Exemple : a.

Remarques :
Lors de l’appel du sous-programme les paramètres effectifs viennent remplacer les paramètres formels. Cette
substitution de paramètres s’appelle passage de paramètres.
 Les paramètres effectifs et les paramètres formels doivent s’accorder de point de vue nombre et ordre et
doivent être de mêmes types ou de types compatibles.
 Un paramètre formel peut être déclaré par le nom de son paramètre effectif ou par un nom différent.

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

3. Les modes de passage de paramètres :

a. Activité 5 :

Soit le programme PASCAL suivant :

PROGRAM PASSAGE;
USES WINCRT;
VAR i : INTEGER ;
PROCEDURE Ajout (x: INTEGER);
BEGIN
x:=x+1;
WRITELN (' la valeur de i dans la procédure est : ', x) ;
END ;
BEGIN
WRITE ('donner la valeur de i : ') ; READ (i) ;
Ajout (i);
WRITELN (' la valeur de i dans le programme principal est : ', i) ;
END.

1) Taper ce programme sur votre machine.


2) Exécuter ce programme pour i=1 et observer les sorties écran.
3) Ajouter le mot VAR dans l’entête de la procédure Ajout.
PROCEDURE Ajout (VAR x : INTEGER) ;
4) Exécuter ce programme pour i=1 et observer les sorties écran.
5) Que remarquez-vous ?
Solution :

2) Les sorties écran : Donner la valeur de i : 1


La valeur de i dans la procédure est : 2
La valeur de i dans le programme principal est : 1

i garde sa valeur initiale après l’appel de la procédure. Donc toute modification des paramètres formels
n’entraîne pas des modifications sur les paramètres effectifs.
 Donc il s’agit d’un passage par valeur.

4) Les sorties écran : Donner la valeur de i : 1


La valeur de i dans la procédure est : 2
La valeur de i dans le programme principal est : 2

i modifie sa valeur initiale après l’appel de la procédure. Donc toute modification des paramètres formels
entraîne automatiquement des modifications sur les paramètres effectifs.
 Donc il s’agit d’un passage par variable.

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

b. Mode de passage par valeur :


Ce mode permet au programme appelant de transmettre des valeurs au sous-programme appelé. Toute
modification du paramètre formel est sans conséquent sur la valeur du paramètre effectif (le paramètre effectif
garde sa valeur initiale de l’appel).

Sens du transfert :
Programme appelant Sous-programme appelé

c. Mode de passage par variable :


Ce mode permet au programme (ou sous-programme) appelant de transmettre une valeur au programme appelé
et inversement ; pour ce mode de passage, donc le paramètre formel et effectif désignent la même zone
mémoire (la même variable)  une modification de paramètre formel entraîne une modification sur la valeur
du paramètre effectif.

Sens du transfert :

Programme appelant Sous-programme appelé

V. Applications :

a. Application 5 : Soit le programme PASCAL suivant :


PROGRAM PASSAGE_VALEUR ;
USES WINCRT ;
VAR X, Y : INTEGER ;
PROCEDURE ESSAI (Passage de paramètre) ;
BEGIN
I:=3*I;
J := 4 * J ;
WRITELN (′ Dans la procédure les valeurs sont : ′ ) ;
WRITELN (′I =′, I ) ;
WRITELN (′J =′, J ) ;
END;
BEGIN
WRITELN (′donner la première valeur :′ ) ;
READLN (X) ;
WRITELN (′donner la deuxième valeur :′ ) ;
READLN (Y) ;
ESSAI ( X , Y) ;
WRITELN (′ Après appel de la procédure les valeurs sont : ′) ;
WRITELN(′ X = ′, X ) ;
WRITELN(′ Y = ′, Y ) ;
END.

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

Compléter le tableau suivant pour X = 2 et Y = 3.

Déclaration des Action P. Effectifs P. Formels Type du


paramètres Formels X Y I J passage

A l'appel de ESSAI
(I , J : INTEGER) Après exécution de
ESSAI
A l'appel de ESSAI
(VAR I, J : INTEGER ) Après exécution de
ESSAI

( VAR I : INTEGER ; A l'appel de ESSAI


J : INTEGER) Après exécution de
ESSAI

( I : INTEGER ; VAR J A l'appel de ESSAI


: INTEGER ) Après exécution de
ESSAI

Solution :
Déclaration des Action P. Effectifs P. Formels Type du
paramètres Formels X Y I J passage

A l'appel de ESSAI 2 3 2 3 I : Valeur


(I , J : INTEGER) Après exécution de 2 3 6 12 J : Valeur
ESSAI
A l'appel de ESSAI 2 3 2 3 I : Variable
(VAR I, J : INTEGER ) Après exécution de 6 12 6 12 J : Variable
ESSAI

( VAR I : INTEGER ; A l'appel de ESSAI 2 3 2 3 I : Variable


J : INTEGER) Après exécution de 6 3 6 12 J : Valeur
ESSAI

( I : INTEGER ; VAR J A l'appel de ESSAI 2 3 2 3 I : Valeur


: INTEGER ) Après exécution de 2 12 6 12 J : Variable
ESSAI

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

b. Application 6 :
Soit les procédures suivantes :
1.
0) DEF RPOC lecture ( n : entier)
1) Répéter
Ecrire (″ donner la taille du tableau ″)
Lire (n)
Jusqu'à n dans [10..20]
2) fin lecture

2.

0) DEF RPOC permut ( x, y : entier)


1) Aux x
2) x  y
3) y Aux
4) fin permut

3.

0) DEF RPOC Essai ( a, b, c, d : entier)


1) Lire (a)
2) Ecrire (b)
3) c2*a
4) Lire (d)
5) fin Essai

4.

0) DEF RPOC remplir ( T : tab, n : entier)


1) pour i de 1 à n répéter
Ecrire (″donner T[″,i,″]″), Lire(T[i])
fin pour
2) fin remplir

5.

0) DEF RPOC affiche ( T : tab, n : entier)


1) pour i de 1 à n répéter
Ecrire (″ T[″,i,″]=″, T[i])
fin pour
2) fin affiche

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

Questions :
1) Expliquer dans quel cas on utilise le mot clé var dans l’entête de chaque procédure.
2) Déterminer le nombre de résultats retourné par chaque procédure.
3) Dans quel cas une procédure ne retourne aucun résultat.
4) Dans quel cas on peut remplacer une procédure par une fonction.

Solution :
1)

1.
0) DEF RPOC lecture (var n : entier)
1) Répéter
Ecrire (″ donner la taille du tableau ″)
Lire (n)
Jusqu'à n dans [10..20]
2) fin lecture

2.
0) DEF RPOC permut (var x, y : entier)
1) Aux x
2) x  y
3) y Aux
4) fin permut

3.
0) DEF RPOC Essai (var a, d, c, b : entier)
1) Lire (a)
2) Ecrire (b)
3) c2*a
4) Lire (d)
5) fin Essai

4.
0) DEF RPOC remplir (var T : tab, n : entier)
1) pour i de 1 à n répéter
Ecrire (″donner T [″, i, ″] ″), Lire(T[i])
fin pour
2) fin remplir

5.
0) DEF RPOC affiche ( T : tab, n : entier)
1) pour i de 1 à n répéter
Ecrire (″T [″, i, ″]=″, T[i])
fin pour
2) fin affiche

Solution :
2) 1. Un seul résultat 2. Deux résultats 3. Trois résultats 4. n résultats 5. 0 résultat
3) procédure d’affichage.
4) Dans le cas où la procédure retourne un seul résultat.

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

Retenons :

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

Chapitre
Les algorithmes de tri et
de recherche
A. Les algorithmes de tri :
1. Introduction :
Le tri consiste à ordonner dans un ordre bien déterminé (croissant ou décroissant) les éléments d’un tableau. Il
existe plusieurs méthodes de tri. Dans la suite on vous en présente 3 : tri par sélection, tri à bulles et tri par
insertion.
Exemple N= 4
T 15 0 10 50 …………..
T 0 10 15 50 …………..

2. Tri par sélection :


a. Principe :
Cette méthode de tri est la plus simple, le principe consiste à :
1) Comparer tous les éléments de la liste non triée afin de sélectionner le plus petit.
2) Permuter le plus petit élément avec le premier élément de la liste non triée.
3) Répéter les étapes 1 et 2 un nombre de fois égal à n-1, en considérant toujours la liste non triée uniquement.
b. Exemple :

Soit le tableau T suivant de 5 éléments (n=5)

15 10 -4 7 -2

-4 10 15 7 -2

-4 -2 15 7 10

-4 -2 7 15 10

-4 -2 7 10 15

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

c. Analyse du problème :

On pourra utiliser les modules suivants :


 Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.

 Procédure Remplir(T, N) : remplir un tableau T par N éléments.

 Procédure Tri_selection(T, N) : trier le tableau T.

 Fonction Premposmin (i, N, T) : rechercher la première position du minimum.

 Procédure Permut (A, B) : permuter le contenu de deux variables.

 Procédure Affiche (T, N) : afficher le tableau T.


Analyse du programme principal :
Nom : Tri_methode_par_selection
Résultat = PROC Affiche (T, N)
PROC Tri_selection (T, N)
T =PROC Remplir (T, N)
N =PROC Lecture (N)
Fin Tri_methode_par_selection
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 100 entiers.

TDO
Objet Type/Nature
N entier
T TAB
Affiche Procédure
Remplir Procédure
Lecture Procédure
Tri_selection Procédure

Algorithme du programme principal :


0) DÉBUT Tri_methode_par_selection
1) PROC Lecture (N)
2) PROC Remplir (T, N)
3) PROC Tri_selection (T, N)
4) PROC Affiche (T, N)
5) Fin Tri_methode_par_selection

Analyse de la procédure Lecture :


DEF PROC Lecture (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez un entier compris entre 2 et 100″)
Jusqu’à (x DANS [2..100])
Fin Lecture

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

Algorithme de la procédure Lecture :


0) DEF PROC Lecture (var x : entier)
1) Répéter
Ecrire (″Donnez un entier compris entre 2 et 100″)
Lire(x)
Jusqu’à (x DANS [2..100])
2) Fin Lecture
Analyse de la procédure Remplir :
DEF PROC Remplir (var vec : TAB ; y : entier)
Résultat = vec
vec =[ ] pour i de 1 à y faire
vec[ i ]=donnée (″Donnez la valeur de l"élément N° ″, i)
fin pour
Fin Remplir
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure Remplir :


0) DEF PROC Remplir (var vec : TAB ; y : entier)
1) pour i de 1 à y faire
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (vec[ i ])
fin pour
2) Fin Remplir

Analyse de la procédure Tri_selection :


DEF PROC Tri_selection (var vec : TAB ; y : entier)
Résultat = vec
vec =[ ] pour i de 1 à y faire
ppm ← FN Premposmin ( i , y , vec )
si ( vec[ ppm ] <> vec[ i ] ) alors
PROC Permut (vec[ ppm ] , vec [ i ])
fin si
fin pour
Fin Tri_selection
TDOL
Objet Type/Nature
i , ppm entier
Premposmin Fonction
Permut Procédure

Algorithme de la procédure Tri_selection :


0) DEF PROC Tri_selection (var vec : TAB ; y : entier)
1) pour i de 1 à y faire
ppm ← FN Premposmin ( i , y , vec )
si ( vec[ ppm ] <> vec[ i ] ) alors
PROC Permut (vec[ ppm] , vec [ i ])
fin si
fin pour
2) Fin Tri_selection

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

Analyse de la fonction Premposmin :


DEF FN Premposmin (x :entier ; vec : TAB ; y : entier) :entier
Résultat = Premposmin
Premposmin ← posmin
posmin =[ posmin ← x ] pour j de x+1 à y faire
si ( vec[ posmin ] > vec[ j ] ) alors
posmin ← j
fin si
fin pour
Fin Premposmin
TDOL
Objet Type/Nature
j , posmin entier
Algorithme de la fonction Premposmin :
0) DEF FN Premposmin (x :entier ; vec : TAB ; y : entier) :entier
1) posmin ← x
pour j de x+1 à y faire
si ( vec[ posmin ] > vec[ j ] ) alors
posmin ← j
fin si
fin pour
2) Premposmin ← posmin
3) Fin Premposmin

Analyse de la procédure Permut :


DEF PROC Permut (var x , y : entier)
Résultat = Permutation
Permutation =[ ] aux ← y
y←x
x ← aux
Fin Permut
TDOL
Objet Type/Nature
aux entier

Algorithme de la procédure Permut :


0) DEF PROC Permut (var x , y : entier)
1) aux ← y
2) y ← x
3) x ← aux
4) Fin Permut

Analyse de la procédure Affiche :


DEF PROC Affiche (vec:TAB ; y : entier)
Résultat = affichage
affichage =[ ] pour i de 1 à y faire
Ecrire (vec[ i ])
fin pour
Fin Affiche
TDOL
Objet Type/Nature
i entier

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

Algorithme de la procédure Affiche:


0) DEF PROC Affiche (vec : TAB ; y : entier)
1) pour i de 1 à y faire
Ecrire (vec[ i ] )
fin pour
2) Fin Affiche.

Traduction en PASCAL
PROGRAM Tri_methode_par_selection ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;

PROCEDURE Lecture (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;

PROCEDURE Remplir (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
END;
END;

FUNCTION Premposmin (x : INTEGER; vec : TAB ; y : INTEGER) : INTEGER ;


VAR
j , posmin : INTEGER ;
BEGIN
posmin :=x ;
FOR j := x+1 TO y DO
IF ( vec[posmin] > vec[ j ] ) THEN
posmin := j ;
Premposmin := posmin ;
END ;

PROCEDURE Permut (VAR x,y : INTEGER);


VAR aux: INTEGER;
BEGIN
aux :=y ;
y := x ;
x :=aux ;
END;

PROCEDURE Tri_selection (VAR vec : TAB ; y : INTEGER);


VAR i , ppm: INTEGER;

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

BEGIN
FOR i := 1 TO y DO
BEGIN
ppm :=Premposmin ( i , vec , y) ;
IF ( vec[ppm] <> vec[i] ) THEN
Permut (vec[ppm] , vec [ i ]) ;
END;
END;

PROCEDURE Affiche (vec :TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
WRITELN (vec[i]) ;
END;

BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_selection (T, N) ;
Affiche (T, N) ;
END.

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

3. Tri à bulles :
a. Principe :
On commence par la première paire d’éléments que l’on compare.
1) Si t[ i ] > t[ i+1], alors on permute ces deux éléments et on tient compte de la permutation. (Echange  vrai)

2) On considère la paire suivante et on répète 1 et 2, jusqu’à comparer la dernière paire

3) Si une (ou plusieurs) permutation a été réalisée, on recommence tout le traitement (étape 1, 2 et 3) sinon, c’est
la fin et la liste sera triée.

b. Exemple :
Soit le tableau T suivant de 5 éléments (n=5)

15 10 -4 7 -2

10 15 -4 7 -2
1er cycle
10 -4 15 7 -2

10 -4 7 15 -2

10 -4 7 -2 15

-4 10 7 -2 15
2e cycle
-4 7 10 -2 15

-4 7 -2 10 15

-4 7 -2 10 15
3e cycle
-4 -2 7 10 15

c. Analyse du problème :
On pourra utiliser les modules suivants :

 Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.

 Procédure Remplir(T, N) : remplir un tableau T par N éléments.

 Procédure Tri_bulles (T, N) : trier le tableau T.

 Procédure Permut (A, B) : permuter le contenu de deux variables.

 Procédure Affiche (T, N) : afficher le tableau T.

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

Analyse du programme principal :


Nom : Tri_methode_a_bulles
Résultat = PROC Affiche (T, N)
PROC Tri_bulles (T, N)
T=PROC Remplir (T, N)
N =PROC Lecture (N)
Fin Tri_methode_a_bulles
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 100 entiers.

TDO
Objet Type/Nature
N entier
T TAB
Affiche Procédure
Remplir Procédure
Lecture Procédure
Tri_bulles Procédure
Algorithme du programme principal :
0) DÉBUT Tri_methode_a_bulles
1) PROC Lecture (N)
2) PROC Remplir (T, N)
3) PROC Tri_bulles (T, N)
4) PROC Affiche (T, N)
5) Fin Tri_methode_a_bulles

Analyse de la procédure Lecture : Analogue à la procédure Lecture de Tri_methode_ par_selection.


Analyse de la procédure Remplir : Analogue à la procédure Remplir de Tri_methode_ par_selection.
Analyse de la procédure Affiche : Analogue à la procédure Affiche de Tri_methode_ par_selection.
Analyse de la procédure Permut : Analogue à la procédure Permut de Tri_methode_ par_selection.

Analyse de la procédure Tri_bulles :


DEF PROC Tri_bulles (var vec : TAB ; y : entier)
Résultat = vec
vec =[ ] Répéter
Echange ← Faux
pour i de 1 à y-1 faire
si ( vec[ i ] > vec[ i+1] ) alors
PROC Permut (vec[ i ] , vec [ i+1 ])
Echange ← Vrai
fin si
fin pour
Jusqu’à (Echange = Faux)
Fin Tri_bulles
TDOL
Objet Type/Nature
i entier
Echange booléen

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Algorithme de la procédure Tri_bulles :


0) DEF PROC Tri_bulles (var vec : TAB ; y : entier)
1) Répéter
Echange ← Faux
pour i de 1 à y-1 faire
si ( vec[ i ] > vec[ i+1] ) alors
PROC Permut (vec[ i ] , vec [ i+1 ])
Echange ← Vrai
Fin si
fin pour
Jusqu’à (Echange = Faux)
2) Fin Tri_bulles

Traduction en PASCAL
PROGRAM Tri_methode_a_bulles ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;

PROCEDURE Lecture (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;

PROCEDURE Remplir (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
END;
END;

PROCEDURE Permut (VAR x,y : INTEGER);


VAR aux: INTEGER;
BEGIN
aux :=y ;
y := x ;
x :=aux ;
END;

PROCEDURE Tri_bulles (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
Echange : BOOLEAN ;
BEGIN
REPEAT
Echange := FALSE ;
FOR i := 1 TO y-1 DO

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

BEGIN
IF ( vec[ i ] > vec[ i+1 ] ) THEN
BEGIN
Permut (vec [ i ] , vec [ i+1 ]) ;
Echange := TRUE ;
END;
END;
UNTIL ( Echange = FALSE ) ;
END;

PROCEDURE Affiche (vec:TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
WRITELN (vec[i]) ;
END;

BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_bulles (T, N) ;
Affiche (T, N) ;
END.

4. Tri par insertion :


a. Principe :

1) Commencer par le deuxième élément

2) Comparer l’élément choisi avec tous les éléments précédents dans la liste et l’insérer à la bonne place de
sorte que la liste formée par les éléments traités reste toujours triée.

3) Répéter les étapes 1 et 2 jusqu’à traiter le dernier élément de la liste.

b. Exemple :
Soit le tableau T suivant de 5 éléments (n=5)

15 10 -4 7 -2

10 15 -4 7 -2

-4 10 15 7 -2

-4 7 10 15 -2

-4 -2 7 10 15

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

c. Analyse du problème :
On pourra utiliser les modules suivants :
 Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.

 Procédure Remplir(T, N) : remplir un tableau T par N éléments.

 Procédure Tri_insertion (T, N) : trier le tableau T.

 Procédure Affiche (T, N) : afficher le tableau T.

Analyse du programme principal :


Nom : Tri_methode_par_insertion
Résultat = PROC Affiche (T, N)
PROC Tri_insertion (T, N)
T=PROC Remplir (T, N)
N =PROC Lecture (N)
Fin Tri_methode_par_insertion

Tableau de déclaration des nouveaux types


Type
TAB = tableau de 100 entiers.
TDO
Objet Type/Nature
N entier
T TAB
Affiche Procédure
Remplir Procédure
Lecture Procédure
Tri_insertion Procédure

Algorithme du programme principal :


0) DÉBUT Tri_methode_par_insertion
1) PROC Lecture (N)
2) PROC Remplir (T, N)
3) PROC Tri_bulles (T, N)
4) PROC Affiche (T, N)
5) Fin Tri_methode_par_insertion

Analyse de la procédure Lecture : Analogue à la procédure Lecture de Tri_methode_ par_selection.


Analyse de la procédure Remplir : Analogue à la procédure Remplir de Tri_methode_ par_selection.
Analyse de la procédure Affiche : Analogue à la procédure Affiche de Tri_methode_ par_selection.

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

Analyse de la procédure Tri_insertion :


DEF PROC Tri_insertion (var vec : TAB ; y : entier)
Résultat = vec
vec =[ ] pour j de 2 à y faire
i ← j-1
mem ← vec [ j ]
Tant que ( i > 0 ) ET ( vec [ i ] < mem ) faire
vec[ i+1] ← vec [ i ]
i ← i -1
fin tant que
vec[ i+1] ← mem
fin pour
Fin Tri_insertion
TDOL
Objet Type/Nature
i , j , mem entier

Algorithme de la procédure Tri_insertion :


0) DEF PROC Tri_insertion (var vec : TAB ; y : entier)
1) pour j de 2 à y faire
i ← j-1
mem ← vec [ j ]
Tant que ( i > 0 ) ET ( vec [ i ] > mem ) faire
vec[ i+1] ← vec [ i ]
i ← i-1
fin tant que
vec[ i+1] ← mem
fin pour
2) Fin Tri_insertion

Traduction en PASCAL
PROGRAM Tri_methode_par_insertion ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;

PROCEDURE Lecture (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;

PROCEDURE Remplir (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

END;
END;

PROCEDURE Tri_insertion (VAR vec : TAB ; y : INTEGER);


VAR i , j , mem : INTEGER;
BEGIN
FOR j := 2 TO y DO
BEGIN
i := j-1 ;
mem := vec [ j ] ;
WHILE ( i > 0 ) AND (vec[ i ] > mem ) DO
BEGIN
vec[ i+1] := vec [ i ];
i :=i-1;
END;
vec[ i+1] := mem ;
END;
END;

PROCEDURE Affiche (vec :TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
WRITELN (vec[i]) ;
END;

BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_insertion (T, N) ;
Affiche (T, N) ;
END.

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

B. Les algorithmes de recherche :


1. Recherche séquentielle :

a. Principe :
Cette méthode de recherche consiste à parcourir les éléments du tableau un par un jusqu'à trouver la valeur
cherchée ou arriver à la fin du tableau.
b. Exemple :
Soit le tableau T suivant de 5 éléments (n=5)

15 10 -4 7 -2

Et soit la valeur à rechercher x = 7 ; tester pour x = -7

c. Analyse du problème :

On pourra utiliser les modules suivants :


 Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.

 Procédure Remplir (T, N) : remplir un tableau T par N éléments.

 Procédure Saisir_x (x) : qui lit et valide x, x étant la variable à rechercher dans T.

 Fonction Recherche (T,N,x) : qui permet de chercher l’existence de x dans le tableau T.

Analyse du programme principal :


Nom : Recherche_seq
Résultat = Ecrire (″La valeur ″ , x , res )
res =[ ] si ( FN Recherche(T, N ,x) = vrai ) alors
res  ″ existe dans T ″
sinon
res  ″ n′existe pas dans T ″
fin si
x =PROC Saisir_x ( x )
T =PROC Remplir (T, N)
N =PROC Lecture (N)
Fin Recherche_seq
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 100 entiers.

TDO
Objet Type/Nature
N,x Entier
res Chaine
T TAB
Saisir_x Procédure
Remplir Procédure
Lecture Procédure
Recherche Fonction

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

Algorithme du programme principal :


0) DÉBUT Recherche_seq
1) PROC Lecture (N)
2) PROC Remplir (T, N)
3) PROC Saisir_x ( x )
4) si ( FN Recherche(T, N ,x) = vrai ) alors
res  ″ existe dans T ″
sinon
res  ″ n′existe pas dans T ″
fin si
5) Ecrire (″La valeur ″ , x , res )
6) Fin Recherche_seq

Analyse de la fonction Recherche :


DEF FN Recherche (vec : TAB ; nb, y : entier) : booléen
Résultat = Recherche
Recherche ← trouve
trouve =[ i ← 0 ] Répéter
i  i+1
Jusqu’à (vec [ i ] = y) ou (i=nb)
si ( vec[ i ] = y )alors
trouve  vrai
sinon
trouve  faux
fin si
Fin Recherche
TDOL
Objet Type/Nature
i Entier
trouve Booléen

Algorithme de la fonction Recherche :


0) DEF FN Recherche (vec : TAB ; nb, y : entier) : booléen
1) i ← 0
Répéter
i  i+1
Jusqu’à (vec [ i ] = y) OU (i=nb)
si ( vec[ i ] = y )alors
trouve  vrai
sinon
trouve  faux
fin si
2) Recherche ← trouve
3) Fin Recherche

Traduction en PASCAL
PROGRAM Recherche_seq ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N , x : INTEGER;
T: TAB; res : STRING ;

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

PROCEDURE Lecture (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;

PROCEDURE Remplir (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
END;
END;

PROCEDURE Saisir_x (VAR a : INTEGER);


BEGIN
WRITE(' X= ');
READLN(a);
END;

FUNCTION Recherche (vec : TAB ;nb, y : INTEGER) : BOOLEAN ;


VAR
i : INTEGER ;
trouve : BOOLEAN ;
BEGIN
i:=0;
REPEAT
i:=i+1;
UNTIL ( vec[i]=y) OR (i=nb) ;
IF ( vec[i]=y) THEN
trouve :=TRUE
ELSE
trouve :=FALSE ;
Recherche := trouve ;
END ;

BEGIN
Lecture (N) ;
Remplir (T, N) ;
Saisir_x ( x );
IF (Recherche(T, N, x) = TRUE) THEN
res :=′ existe dans T ′
ELSE
res := ′ n′′existe pas dans T ′ ;

WRITELN (′ La valeur ′, x , res ) ;


END.

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

2. Recherche dichotomique :
a. Principe :
N.B. : le tableau sur lequel on va travailler doit être trié
1. Déclarer 3 variables
 Début  valeur initial du tableau ( =1)
 Fin  valeur final du tableau ( = N)
 Milieu  (début + fin ) div 2
2. Comparer entre T[milieu] avec la valeur recherchée x tel que :
 Si (T[milieu] < x) alors début  milieu +1
 Si (T[milieu] > x) alors fin  milieu -1
 Si (T[milieu] = x) alors sortir avec x existe à la position milieu
3. Répéter l’étape 2 tant que T[milieu] <> x et début <=fin

b. Exemple :
Soit le tableau T suivant de 5 éléments (n=10)

14 16 27 29 34 38 43 49 51 55

Et soit la valeur à rechercher x = 38; tester pour x = 55, x = 1, x = 98


c. Analyse du problème :
On pourra utiliser les modules suivants :
 Procédure Lecture (N) : saisir (lire) le nombre d’éléments de T.

 Procédure Remplir (T, N) : remplir un tableau T par N éléments.

 Procédure Saisir_x (x) : qui lit et valide x, x étant la variable à rechercher dans T.

 Procédure Tri (T, N) : qui effectue le tri du tableau T.

 Fonction Dicho(T, N, x) : qui permet de chercher l’existence de x dans le tableau T.

Analyse du programme principal :


Nom : Recherche_dech
Résultat = Ecrire (″ La valeur ″ , x , res )
res =[ ] si ( FN Dicho (T, N ,x) = vrai ) alors
res  ″ existe dans T ″
sinon
res ″ n′existe pas dans T ″
fin si
x =PROC Saisir_x (x)
Tfinal =PROC Tri (T, N)
Tinitial =PROC Remplir (T, N)
N =PROC Lecture (N)
Fin Recherche_ dech

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

Tableau de déclaration des nouveaux types


Type
TAB = tableau de 100 entiers.

TDO
Objet Type/Nature
N,x Entier
res Chaine
T TAB
Saisir_x Procédure
Remplir Procédure
Lecture Procédure
Tri Procédure
Dicho Fonction

Algorithme du programme principal :


0) DÉBUT Recherche_ dech
1) PROC Lecture (N)
2) PROC Remplir (T, N)
3) PROC Saisir_x ( x )
4) PROC Tri (T, N)
5) si ( FN Dicho (T, N ,x) = vrai ) alors
res  ″ existe dans T ″
sinon
res ″ n′existe pas dans T ″
fin si
6) Ecrire (″La valeur ″ , x , res )
7) Fin Recherche_ dech
Analyse de la fonction Dicho :
DEF FN Dicho (vec : TAB ; nb, y : entier) : booléen
Résultat = Dicho
Dicho ← trouve
trouve =[ trouve ← faux , deb ←1, fin ← nb] Répéter
mil← (deb + fin) DIV 2
si vec [ mil ] > y alors
fin ← m il - 1
sinon si v[Mil] < y alors
deb ← m il + 1
sinon
trouve ← vrai
fin si
Jusqu’à (trouve<> faux ) OU (deb > fin)
Fin Dicho
TDOL
Objet Type/Nature
deb , fin , mil Entier
trouve Booléen

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

Algorithme de la fonction Dicho :


0) DEF FN Dicho (vec : TAB ; nb, y : entier) : booléen
1) trouve ← faux , deb ←1, fin ← nb
Répéter
mil← (deb + f in) DIV 2
si vec [ mil ] > y alors
fin ← m il - 1
sinon si vec [ mil ] < y alors
deb ← mil + 1
sinon
trouve ← vrai
fin si
Jusqu’à (trouve<> faux ) OU (deb > fin)
2) Dicho ← trouve
3) Fin Dicho

Traduction en PASCAL
PROGRAM Recherche_dech ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N , x : INTEGER;
T: TAB; res : STRING ;

PROCEDURE Lecture (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;

PROCEDURE Remplir (VAR vec : TAB ; y : INTEGER);


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
END;
END;

PROCEDURE Saisir_x (VAR a : INTEGER);


BEGIN
WRITE(' X= ');
READLN(a);
END;

PROCEDURE Tri (VAR vec : TAB ; y : INTEGER);


VAR i , j , mem : INTEGER;
BEGIN
FOR j := 2 TO y DO
BEGIN
i := j-1 ;

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation

mem := vec [ j ] ;
WHILE ( i > 0 ) AND (vec[ i ] > mem ) DO
BEGIN
vec[ i+1] := vec [ i ];
i :=i-1;
END;
vec[ i+1] := mem ;
END;
END;

FUNCTION Dicho (vec : TAB ;nb, y : INTEGER) : BOOLEAN ;


VAR
deb , fin , mil : INTEGER ;
trouve : BOOLEAN ;
BEGIN
trouve := FALSE ;
deb:=1 ;
fin := nb ;
REPEAT
mil :=(deb + fin) DIV 2 ;
IF vec [ mil ] > y THEN
fin := mil - 1
ELSE IF vec [ mil ] < y THEN
deb := mil + 1
ELSE
trouve := TRUE ;
UNTIL (trouve<> FALSE ) OR (deb > fin) ;
Dicho := trouve ;
END ;

BEGIN
Lecture (N) ;
Remplir (T, N) ;
Saisir_x ( x );
Tri(T,N) ;
IF (Dicho(T, N, x) = TRUE) THEN
res :=′ existe dans T ′
ELSE
res := ′ n′′existe pas dans T ′ ;
WRITELN (′ La valeur ′, x , res ) ;
END.

Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation

Chapitre 5
Les algorithmes
récurrents
I. Introduction :
Les algorithmes récurrents sont des algorithmes qui utilisent un traitement itérative pour produire un résultat, ce
traitement itérative est utilisé pour calculer le résultat d’une formule qui se répète plusieurs fois, lorsque le
résultat final dépend des p résultats précédents, on dit que c’est un algorithme récurrent d’ordre p.

 Exemple 1 : Soit l’algorithme de fonction factorielle :


0) DEF FN factorielle (n:Entier) : Entier
1) fact1
2) pour i de 1 a n faire
fact  i * fact
finpour
3) factorielle fact
4) fin factorielle
 Question : Exécuter manuellement la fonction factorielle pour n égale à 4.
 Remarque 1 :
Cet algorithme est d’ordre 1, car le résultat final fact (pour i=n) dépend du résultat précédent
fact (pour i=n-1).
 Exemple 2 : soit la suite U : Un  Un-1 + Un-2 avec Uo = 0 et U1 = 2
 Remarque 2 :
Cet algorithme récurrent est dit d’ordre 2, car le résultat Un(n) dépend des deux résultats
précédents Un-1 et Un-2.

II. Calcul de somme :


1) Activité 1 :
On veut écrire un programme intitulé CALCUL_SOMME qui permet de remplir un tableau T de n Entiers,
puis calculer leur somme et afficher le résultat.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

2) Exemple :
Soit un tableau T contenant les dix éléments suivants :

T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10
Étape 1 :
T: 12 10 0 -5 8 12 -2 2 40 -1 S
1 2 3 4 5 6 7 8 9 10 0
Étape 2 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 12
Étape 3 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 22
Étape 4 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 22
Étape 5 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 17
Étape 6 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 25
Étape 7 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 37

Étape 8 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 35
Étape 9 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 37
Étape 10 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 77
Étape 11 :
S
T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10 76

3) Solution :

Analyse du programme principal :


Nom : CALCUL_SOMME
Résultat : Ecrire ("La somme est : ", FN Somme (T, N))
PROC Saisir (T, N)
Fin CALCUL_SOMME

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

TDNT
Type
TAB = Tableau de 100 Entiers

TDOG
Objets Type/Nature
T TAB
N Entier
Saisir Procédure
Somme Fonction

Algorithme du programme principal :


0) Début CALCUL_SOMME
1) PROC Saisir (T, N)
2) Ecrire ("La somme est : ", FN Somme (T, N))
3) Fin CALCUL_SOMME

Analyse de la fonction Somme :


DEF FN Somme (Tf : TAB ; Nf : Entier) : Entier
Résultat : Somme
Somme ← S
S=[S ← 0] Pour i de 1 à Nf Faire
S ← S + Tf[i]
Fin Pour
Fin Somme
TDOL
Objets Type/Nature
i, S Entier

Algorithme de la fonction Somme :


0) DEF FN Somme (Tf : TAB ; Nf : Entier) : Entier
1) S ← 0 Pour i de 1 à Nf Faire
S ← S + Tf[i]
Fin Pour
2) Somme ← S
3) Fin Somme

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

III. Recherche du minimum et du maximum :


1) Introduction :
Les algorithmes de recherche (recherche : d’un élément, d’un ensemble d’élément, du maximum ou du
minimum,…), pour résoudre ce type de problème on compare l’élément en cours avec l’élément précédant, c’est
un algorithme récurrent d’ordre 1.

2) Activité 2 :
On veut écrire un programme intitulé CALCUL_MIN_MAX qui permet de remplir un tableau T de n Entiers,
puis calculer et afficher le minimum et le maximum des éléments du tableau T.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

3) Exemple : Soit un tableau T contenant les dix éléments suivants :

T: 12 10 0 -5 8 12 -2 2 40 -1
1 2 3 4 5 6 7 8 9 10
Étape 1 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 12 12
Étape 2 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 10 12
Étape 3 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 0 12
Étape 4 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 12
Étape 5 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 12
Étape 6 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 12
Étape 7 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 12
Étape 8 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 12
Étape 9 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 40
Étape 10 :
T: 12 10 0 -5 8 12 -2 2 40 -1 Min Max
1 2 3 4 5 6 7 8 9 10 -5 40

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

4) Solution :

Analyse du programme principal :


Nom : CALCUL_MIN_MAX
Résultat : Ecrire ("Le minimum est : ", FN Minimum (T, N), "Le maximum est : ", FN Maximum (T, N))
PROC Saisir (T, N)
Fin CALCUL_MIN_MAX

TDNT
Type
TAB = Tableau de 100 Entiers

TDOG
Objets Type/Nature
T TAB
N Entier
Saisir Procédure
Minimum Fonction
Maximum Fonction

Algorithme du programme principal :


0) Début CALCUL_MIN_MAX
1) PROC Saisir (T, N)
2) Ecrire ("Le minimum est : ", FN Minimum (T, N), "Le maximum est : ", FN Maximum (T, N))
3) Fin CALCUL_MIN_MAX

Analyse de la fonction Minimum :


DEF FN Minimum (Tf : TAB ; Nf : Entier) : Entier
Résultat : Minimum
Minimum ← Min
Min =[Min ← Tf[1]] Pour i de 2 à Nf Faire
Si Tf[i] < Min Alors
Min ← Tf[i]
Fin si
Fin Pour
Fin Minimum

TDOL
Objets Type/Nature
i, Min Entier

Algorithme de la fonction Minimum :


0) DEF FN Minimum (Tf : TAB ; Nf : Entier) : Entier
1) Min ← Tf[1] Pour i de 2 à Nf Faire
Si Tf[i] < Min Alors
Min ← Tf[i]
Fin si
Fin Pour
2) Minimum ← Min
3) Fin Minimum

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Analyse de la fonction Maximum :


DEF FN Maximum (Tf : TAB ; Nf : Entier) : Entier
Résultat : Maximum
Maximum ← Max
Max =[Max ← Tf[1]] Pour i de 2 à Nf Faire
Si Tf[i] > Max Alors
Max ← Tf[i]
Fin si
Fin Pour
Fin Maximum
TDOL
Objets Type/Nature
i, Max Entier

Algorithme de la fonction Maximum :


0) DEF FN Maximum (Tf : TAB ; Nf : Entier) : Entier
1) Max ← Tf[1] Pour i de 2 à Nf Faire
Si Tf[i] > Max Alors
Max ← Tf[i]
Fin si
Fin Pour
2) Maximum ← Max
3) Fin Maximum

IV. Calcul sur les suites :


1) Introduction :
Pour chercher des solutions informatiques à des problèmes qui manipulent des suites (arithmétiques ou
géométriques), on a besoin toujours d’utiliser des calculs récurrents pour par exemple chercher le n ème terme,
pour calculer la somme des p termes, … etc.

2) Activité 3 :
On veut écrire un programme intitulé SUITE qui permet de calculer et afficher les N premiers termes d’une
suite U définie par :
U0 = 5
Un = 2*Un-1 + 1.5
Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

3) Solution :
Analyse du programme principal :
Nom : SUITE
Résultat : PROC Affiche_Un(N)
PROC Saisir (N)
Fin SUITE

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

TDOG
Objets Type/Nature
N Entier
Saisir, Affiche_Un Procédure

Algorithme du programme principal :


0) Début SUITE
1) PROC Saisir (N)
2) PROC Affiche_Un(N)
3) Fin SUITE

Analyse de la procédure Saisir :


DEF PROC Saisir (VAR Nf : Entier)
Résultat : Nf
Nf =[ ] Répéter
Nf=donnée ("Donner le nombre de terme à afficher : ")
Jusqu'à (Nf >=0)
Fin Saisir

Algorithme de la procédure Saisir :


0) DEF PROC Saisir (VAR Nf : Entier)
1) Répéter
Ecrire ("Donner le nombre de terme à afficher : ")
Lire (Nf)
Jusqu'à (Nf >=0)
2) Fin Saisir

Analyse de la procédure Affiche_Un :


DEF PROC Affiche_Un (Nf : Entier)
Résultat : Affichage
Affichage =[ U ← 5 , Ecrire ("Le terme N°1 est : ", U) ] Pour i de 1 à Nf-1 Faire
U ← 2*U + 1.5
Ecrire ("Le terme N°", i+1, " est : ", U)
Fin Pour
Fin Affiche_Un

TDOL
Objets Type/Nature
i Entier
U Réel

Algorithme de la procédure Affiche_Un :


0) DEF PROC Affiche_Un (Nf : Entier)
1) U ← 5
2) Ecrire ("Le terme N°1 est : ", U)
3) Pour i de 1 à Nf-1 Faire
U ← 2*U + 1.5
Ecrire ("Le terme N°", i+1, " est : ", U)
Fin Pour
4) Fin Affiche_Un

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

V. Triangle de PASCAL :
1) Activité 4 : Développer les produits suivants et donner les coefficients de A et B :
 (A + B) ² = ……………………………………………………………
 (A + B) 3 = ……………………………………………………………

2) Introduction :
Le triangle de PASCAL fournit les coefficients de l’équation (a + b) n. Par exemple si on veut calculer les
coefficients de l’équation (a + b) 4 on procède de la manière suivante :

1 Ligne 0 : (a + b) 0

1 1 Ligne 1 : (a + b) 1
Matrice carrée M de
1 2 1 Ligne 2 : (a + b) 2
dimension 5x5
1 3 3 1 Ligne 3 : (a + b) 3

1 4 6 4 1 Ligne 4 : (a + b) 4

M [4, 2] = M [3, 1] + M [3, 2]


Qu’est ce qu’on peut remarquer à partir de cette matrice ?
 Pour chaque ligne, on remplit un nombre de colonne qu’est égale à la numéro du ligne.
 Pour chaque ligne, le premier et le dernier élément contiennent 1.
 Les éléments des lignes 1 et 2 sont remplient par des 1.
 Les autres éléments sont remplient par la formule : M [l, c] = M [l, c-1] + M [l-1, c-1].

3) Activité 5 :
On veut écrire un programme intitulé TRIANGLE_PASCAL qui permet de remplir et afficher le triangle de
PASCAL pour un degré N de l’équation (a + b) n donné par l’utilisateur.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

4) Solution :
Analyse du programme principal :
Nom : TRIANGLE_PASCAL
Résultat : PROC Affiche (M, N)
PROC Remplir_TP (M, N)
PROC Saisir (M,N)
Fin TRIANGLE_PASCAL

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

TDNT
Type
MAT = Matrice de 100 x 100 Entiers

TDOG
Objets Type/Nature
M MAT
N Entier
Saisir, Remplir_TP, Affiche Procédure

Algorithme du programme principal :


0) Début TRIANGLE_PASCAL
1) PROC Saisir (M, N)
2) PROC Remplir_TP (M, N)
3) PROC Affiche (M, N)
4) Fin TRIANGLE_PASCAL

Analyse de la procédure Remplir_TP :


DEF PROC Remplir_TP (VAR Mf : MAT ; Nf : Entier)
Résultat : Mf
Mf = [ Mf[1, 1] ← 1, Mf[2, 1] ← 1, Mf[2, 2] ← 1] Pour l de 3 à Nf+1 Faire
Mf[l, 1] ← 1,
Pour c de 2 à l-1 Faire
Mf[l, c] ← Mf[l-1, c] + Mf[l-1, c-1]
Fin Pour
Mf[l, l] ← 1
Fin Pour
Fin Remplir_TP
TDOL
Objets Type/Nature
l, c Entier

Algorithme de la procédure Remplir_TP :


0) DEF PROC Remplir_TP (VAR Mf : MAT ; Nf : Entier)
1) Mf[1, 1] ← 1, Mf[2, 1] ← 1, Mf[2, 2] ← 1,
2) Pour l de 3 à Nf+1 Faire
Mf[l, 1] ← 1,
Pour c de 2 à l-1 Faire
Mf[l, c] ← Mf[l-1, c] + Mf[l-1, c-1]
Fin Pour
Mf[l, l] ← 1
Fin Pour
3) Fin Remplir_TP

Analyse de la procédure Affiche :


DEF PROC Affiche (Mf : MAT ; Nf : Entier)
Résultat : Affichage
Affichage = [ ] Pour l de 1 à Nf+1 Faire
Pour c de 1 à l Faire
Ecrire (Mf[l, c])
Fin Pour
Fin Pour
Fin Affiche

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

TDOL
Objets Type/Nature
l, c Entier
Algorithme de la procédure Affiche :
0) DEF PROC Affiche (Mf : MAT ; Nf : Entier)
1) Pour l de 1 à Nf+1 Faire
Pour c de 1 à l Faire
Ecrire (Mf[l, c])
Fin Pour
Fin Pour
2) Fin Affiche

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

Chapitre 6
Les algorithmes
arithmétiques
I. Le calcul de PGCD :
1) Activité 1 :

Déterminer le plus grand commun diviseur des couples suivants : 15 et 27, 130 et 40.

2) Définition :
Le PGCD (Plus Grand Commun Diviseur) de deux Entiers est le plus grand Entier permettant de diviser ces
deux Entiers.
 Déduire les étapes à suivre pour réaliser cette tâche avec le principe d’algorithme d’Euclide :
 Si a=b, le PGCD est a ou b
 Sinon a et b ont le même PGCD que b et (a mod b)
 Il s'agit d'un traitement itératif à condition d'arrêt : tant que b <> 0 faire
 Remplacer a par b
 Remplacer b par (a mod b)
 PGCD (a,0) = a
3) Application 1 :
On veut écrire un programme intitulé PGCD_Euclide qui permet de saisir deux Entiers A et B strictement
positifs, puis calculer et afficher leur PGCD.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

4) Solution de l’application 1:
Analyse du programme principal :
Nom : PGCD_Euclide
Résultat : Ecrire (″PGCD (″,a,″ , ″,b,″ ) est : ″, PGCD(a,b))
(a,b) =Proc saisir (a,b)
Fin PGCD_Euclide

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

TDOG
Objets Type /Nature
a, b Entier
PGCD Fonction
saisir Procédure

Algorithme du programme principal :


0) Début PGCD_Euclide
1) Proc saisir (a,b)
2) Ecrire (″PGCD (″,a,″ , ″,b,″ ) est : ″, PGCD(a,b))
3) Fin PGCD_Euclide

Analyse de la procédure saisir :


DEF PROC saisir (var a, b : Entier)
Résultat : (a,b)
(a,b) = Répéter
Ecrire ("donner deux Entiers") , lire(a,b)
Jusqu’à (a>0) et (b>0)
Fin saisir

Algorithme de la procédure saisir :


0) DEF PROC saisir (var a, b : Entier)
1) Répéter
Ecrire ("donner deux Entiers") , lire(a,b)
Jusqu’à (a>0) et (b>0)
2) Fin saisir

Analyse de la fonction PGCD :


DEF FN PGCD (a,b : Entier) : Entier
Résultat :
PGCD a
a=[ ] Tant que (a <> 0) faire
r  a mod b
ab
br
Fin tant que
Fin PGCD.
TDOL
Objets Type/Nature
r Entier

Algorithme de la fonction PGCD :


0) DEF FN PGCD (a,b : Entier) : Entier
1) Tant que (a <> 0) faire
r  a mod b
ab
br
Fin tant que
2) PGCD a
3) Fin PGCD.

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

5) Application 2 :

On veut écrire un programme intitulé PGCD_DIFF qui calcule le plus grand commun diviseur de deux
Entiers strictement positifs a et b par la méthode des différences.
Cette méthode consiste a :
 Remplacer a par a-b si a>b,
 si non remplacer b par b-a (si b>a), et on recommence jusqu’a obtenir a=b, le pgcd cherché est a (ou
b).

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

6) Exemple :

Pour A = 64 et B = 38, on procède comme suit pour calculer le PGCD :


Si A = B alors le PGCD est A ou B
Si non si A > B alors A = A – B
Si non B = B – A
Étape 1 : (A>B) A = 64 – 38 = 26 (A ≠ B)
Étape 2 : (A<B) B = 38 – 26 = 12 (A ≠ B)
Étape 3 : (A>B) A = 26 – 12 = 14 (A ≠ B)
Étape 4 : (A>B) A = 14 – 12 = 2 (A ≠ B)
Étape 5 : (A<B) B = 12 – 2 = 10 (A ≠ B)
Étape 6 : (A<B) B = 10 – 2 = 8 (A ≠ B)
Étape 7 : (A<B) B = 8 – 2 = 6 (A ≠ B)
Étape 8 : (A<B) B = 6 – 2 = 4 (A ≠ B)
Étape 9 : (A<B) B = 4 – 2 = 2 (A = B) Arrêt

7) Solution de l’application 2 :

Analyse du programme principal :


Nom : PGCD_DIFF
Résultat : Ecrire ("PGCD (", A, ",", B, ")=",P)
P ← FN PGCD (A, B)
PROC saisir (A, B)
Fin PGCD_DIFF
TDOG
Objets Type/Nature
A, B Entier
saisir Procédure
PGCD Fonction

Algorithme du programme principal :


0)Début PGCD_DIFF
1)PROC saisir (A, B)
2)P ← FN PGCD (A, B)
3)Ecrire ("PGCD (", A, ", ", B, ") = ", P)
4)Fin PGCD_DIFF

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

Analyse de la fonction PGCD :


DEF FN PGCD (A, B : Entier) : Entier
Résultat : PGCD
PGCD ← A
A=[ ] Tant que (A ≠ B) Faire
Si (A > B) Alors
A←A–B
Sinon
B←B–A
Fin Si
Fin Tant que
Fin PGCD

Algorithme de la fonction PGCD :


0)DEF FN PGCD (A, B : Entier) : Entier
1)Tant que (A ≠ B) Faire
Si (A > B) Alors
A←A –B
Sinon
B←B –A
Fin Si
Fin Tant que
2)PGCD ← A
3)Fin PGCD

II. Le calcul de PPCM :


1) Activité 2 :

Déterminer le PPCM de deux Entiers dans chacun des couples suivants : (5 , 6) et (120 , 50).

2) Constatations :
Si a =b, le PPCM est a (ou b) sinon chercher le max entre a et b :
 Si le max est multiple de min alors est lui le PPCM.
 Sinon chercher les multiples de max en ordre croissant et s’arrêter s’il est multiple de min.
3) Définition :
Le plus petit commun multiple de deux Entiers a et b est le plus petit multiple de a et de b, on le note PPCM
(a, b).

4) Application 3 :
On veut écrire un programme intitulé CALCUL_PPCM qui permet de saisir deux Entiers A et B strictement
positifs, puis calculer et afficher leur PPCM.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

5) Exemple :
Pour A = 64 et B = 3, on procède comme suit pour calculer le PPCM :
On cherche tout d’abord le minimum (Min) et le maximum (Max) entre A et B, puis on calcule le reste de la
division de Max par Min, s’il est égale à zéro alorsMax est le PPCM, sinon on cherche le multiple successive
de Max et Min qui est égale à Max + A + B – Min est ainsi de suite jusqu'à ce qu’on trouve comme reste de
division de Max par Min égale à zéro.
Étape 1 : (A > B) Max = A et Min = B
Étape 2 : Max MOD Min = 64 MOD 3 = 1 ≠ 0 Alors Max = 64 + 64 + 3 – 3 = 128
Étape 3 : Max MOD Min = 128 MOD 3 = 2 ≠ 0 Alors Max = 128 + 64 + 3 – 3 = 192
Étape 4 : Max MOD Min = 192 MOD 3 = 0 Alors Arrêt avec PPCM = Max = 192

6) Solution de l’application 3 :
Analyse du programme principal :
Nom : CALCUL_PPCM
Résultat : Ecrire ("PPCM (",A, ",",B, ")=",P)
P ←FN PPCM (A,B)
PROC Saisir (A,B)
Fin CALCUL_PPCM
TDOG
Objets Type/Nature
A, B Entier
Saisir Procédure
PPCM Fonction

Algorithme du programme principal :


0)Début CALCUL_PPCM
1)PROC Saisir (A, B)
2)P ← FN PPCM (A, B)
3)Ecrire ("PPCM (", A, ", ", B, ") = ", P)
4)Fin CALCUL_PPCM

Analyse de la fonction PPCM :


DEF FN PPCM (A, B: Entier) : Entier
Résultat : PPCM
PPCM← Max
Max = [ ] Tant que (Max MOD Min ≠ 0) Faire
Max ← Max + A + B - Min
Fin Tant que
(Min, Max) = [ ] Si (A > B) Alors
Max ← A
Min ← B
Sinon
Max ← B
Min ← A
Fin si
Fin PPCM
TDOL
Objets Type/Nature
Max, Min Entier

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Algorithme de la fonction PPCM :


0)DEF FN PPCM (A, B: Entier) : Entier
1)Si (A > B) Alors
Max ← A
Min ← B
Sinon
Max ← B
Min ← A
Fin si
2)Tant que (Max MOD Min ≠ 0) Faire
Max ← Max + A + B - Min
Fin Tant que
3) PPCM ← Max
4) Fin PPCM

III. Les nombres premiers :


1) Activité 3 :
Trouver les nombres premiers parmi cette liste : 5 , 10 , 17 , 1 , 7 , 0
2) Définition : Un nombre est dit premier s’il ne se divise que par 1 eu lui-même, exemple 7.
3) Application 4 :
On veut écrire un programme intitulé VERIF_PREMIER qui permet de saisir un Entier A strictement positif,
puis vérifier s’il est premier ou non et afficher le résultat.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

4) Exemple :
Vérifier 17 :
Étape 1 : on a (17 Mod 2 ≠ 0)
Étape 2 : on a (17 Mod 3 ≠ 0)
Étape 3 : on a (17 Mod 4 ≠ 0)
Étape 4 : on a (17 Mod 5 ≠ 0)
Étape 5 : on a (17 Mod 6 ≠ 0)
Étape 6 : on a (17 Mod 7 ≠ 0)
Étape 7 : on a (17 Mod 8 ≠ 0)
Étape 8 : on a (9 > 17 Div 2) Alors arrêt du traitement et 17 est un nombre Premier

Vérifier 15 :
Étape 1 : on a (15 Mod 2 ≠ 0)
Étape 2 : on a (15 Mod 3 = 0) Alors arrêt du traitement et 15 n’est pas un nombre Premier

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

5) Solution de l’application 4 :
Analyse du programme principale :
Nom : VERIF_PREMIER
Résultat : Affichage
Affichage = [ ] Si FN Premier (A) = Vrai Alors
Ecrire (A, " est un nombre premier")
Sinon
Ecrire (A, " n’est pas un nombre premier")
Fin si
PROC Saisir (A)
Fin VERIF_PREMIER
TDOG
Objets Type/Nature
A Entier
Saisir Procédure
Premier Fonction
Algorithme du programme principal :
0)Début VERIF_PREMIER
1)PROC Saisir (A)
2)Si FN Premier (A) = Vrai Alors
Ecrire (A, " est un nombre premier")
Sinon
Ecrire (A, " n’est pas un nombre premier")
Fin si
3)Fin VERIF_PREMIER

Analyse de la fonction Premier :


DEF FN Premier (A : Entier) : Booléen
Résultat : Premier
Premier ← Verif
Verif = [i ← 2, Verif ← Vrai] Tant que (i<= A div 2) et (Verif = Vrai) Faire
Si (A Mod i = 0) Alors
Verif ← Faux
Sinon
i← i + 1
Fin si
Fin Tant que
Fin Premier
TDOL
Objets Type/Nature
i Entier
Verif Booléen
Algorithme de la fonction Premier :
0)DEF FN Premier (A : Entier) : Booléen
1) i ← 2, Verif ← Vrai Tant que (i<= A div 2) et (verif = Vrai) Faire
Si (A Mod i = 0) Alors
Verif ← Faux
Sinon
i←i+1
Fin si
Fin Tant que
2)Premier ← Verif
3)Fin Premier

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

IV. La décomposition en facteurs premiers :


1) Activité 4 :
Décomposer 124 et 220 en produits de facteurs premiers.
2) Définition :
La décomposition d’un Entier en produit de facteurs premiers consiste à écrire cet Entier sous la forme d’un
produit de ces diviseurs premiers.

3) Constatations :
Pour chercher la décomposition d’un Entier en produit de facteurs premiers, nous appliquons le principe
suivant :
 Vérifier si N est divisible par 2 :
o Si oui : continuer à le diviser par 2 et le remplacer par Ndiv2 jusqu’à ce qu’il ne soit plus multiple
de 2.
o Refaire l’étape précédente pour 3, 4, etc.
o Continuer à refaire le même traitement Jusqu’à avoir N=1.
4) Application 5 :
On veut écrire un programme intitulé FACT_PREMIER qui permet de saisir un Entier A strictement
supérieur à 1, puis chercher et afficher la décomposition en produits de facteurs premiers de cet Entier.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

5) Solution de l’application 5 :

Analyse du programme principal :


NOM : FACT_PREMIER
Résultat : PROC Affiche (F, A, N)
PROC Remplir_FP (A, N, F)
PROC Saisir (A)
Fin FACT_PREMIER
TDNT
Types
TAB = Tableau de 100 Entiers
TDOG
Objets Type/Nature
A, N Entier
Saisir, Remplir_FP, Affiche Procédure
F TAB

Algorithme du programme principal :


0)Début FACT_PREMIER
1)PROC Saisir (A)
2)PROC Remplir_FP (A, N, F)
3)PROC Affiche (F, A, N)
4)Fin FACT_PREMIER

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Analyse de la procédure Remplir_FP :


DEF PROC Remplir_FP (A : Entier ; VAR N : Entier ; VAR F : TAB)
Résultat : ( F, N )
( F, N ) = [i ← 2, N ← 0] Répéter
Si (A Mod i) = 0 Alors
A ← A div i
N←N+1
F[N] ← i
Sinon
i← i + 1
Fin si
Jusqu'à (A =1)
Fin Remplir_FP
TDOL
Objets Type/Nature
i Entier

Algorithme de la procédure Remplir_FP :


0)DEF PROC Remplir_FP (A : Entier ; VAR N : Entier ; VAR F : TAB)
1) i ← 2, N ← 0 Répéter
Si (A Mod i) = 0 Alors
A ← A div i
N←N+1
F[N] ← i
Sinon
i← i + 1
Finsi
Jusqu'à (A =1)
2) Fin Remplir_FP

Analyse de la procédure Affiche :


DEF PROC Affiche (F : TAB ; A, N : Entier)
Résultat : Affichage
Affichage = [Ecrire (A, " = ", F[1])] Pour i de 2 à Nf Faire
Ecrire (" * ", F[i])
Fin Pour
Fin Affiche

TDOL
Objetss Type/Nature
i Entier

Algorithme de la procédure Affiche :


0)DEF PROC Affiche (F : TAB ; A, N : Entier)
1) Ecrire (A, " = ", F[1])
2)Pour i de 2 à Nf Faire
Ecrire (" * ", F[i])
Fin Pour
3)Fin Affiche

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

V. Le calcul du factoriel :
1) Définition :
Le factoriel d'un Entier naturel n, notée n!, ce qui se lit « factorielle de n », est le produit des nombres Entiers
strictement positifs inférieurs ou égaux à n.

2) Principe :
Pour chercher le factoriel d’un Entier, nous appliquons le principe suivant :
 Vérifier si N est égale à 0
o Si oui : alors 0! = 1
o Sinon : il suffit de calculer le produit de tous les Entiers allant de 1 à N.
3) Application 6 :
On veut écrire un programme intitulé CALC_FACT qui permet de chercher la factorielle d’un Entier positif N.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

4) Solution de l’application 6 :
Analyse du programme principal :
Nom : CALC_FACT
Résultat : Ecrire(N,″!=″, FN Fact(N))
PROC saisir (N)
Fin CALC_FACT

TDOG
Objets Type/Nature
N Entier
saisir Procédure
FACT Fonction

Algorithme du programme principal :


0) Début CALC_FACT
1) PROC saisir (N)
2) Ecrire(N, ″! = ″, FN Fact(N))
3) Fin CALC_FACT

Analyse de la fonction FACT :


DEF FN FACT(X :Entier) : Entier_long
Résultat : Fact  f
f =[f  1] Pour i de 1 à X faire
f  f*i
Fin Pour
Fin FACT

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

TDOL
Objets Type/Nature
i Entier
f Entier_long

Algorithme de la fonction FACT


0) DEF FN FACT(X :Entier):entier_long
1) f  1 Pour i de 1 à X faire
f  f*i
Fin Pour
2) FACT  f
3) Fin FACT

VI. Les nombres parfaits et les nombres amis :


1) Les nombres parfaits :

a) Activité 5 :
Chercher les nombres parfaits parmi cette liste : 6 , 15 , 28
b) Définition :
On appelle nombre parfait un nombre égal à la somme de ses diviseurs (lui non compris, évidemment).

c) Constatations :
Déterminer la somme des diviseurs de N entre 1 et N div 2 :
 Vérifier si la somme des diviseurs est égale à N :
o Si oui : alors N est parfait
o Sinon : N n’est pas parfait

d) Application 7 :

On veut écrire un programme intitulé NB_PARFAIT qui saisi un Entier N strictement positif et vérifie si ce
nombre est parfait ou non.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

e) Solution de l’application 7 :

Analyse du programme principal :


Nom : NB_PARFAIT
Résultat : Aff
Aff =[ ] Si (FN PARFAIT(N)=vrai) Alors
Ecrire(N, ″est parfait ″)
Fin si
PROC saisir (N)
Fin NB_PARFAIT

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

TDOG
Objets Type/Nature
N Entier
saisir Procédure
PARFAIT Fonction

Algorithme du programme principal :


0) Début NB_PARFAIT
1) PROC saisir (N)
2) Si (FN PARFAIT(N)=vrai) Alors
Ecrire(N, ″est parfait″)
Fin si
3) Fin NB_PARFAIT

Analyse de la fonction PARFAIT :


DEF FN PARFAIT(X :Entier) : booleénne
Résultat : PARFAIT  etat
etat =[ ] Si (S = X) alors
etat  vrai
Sinon
etat  faux
Fin Si
S =[S  0 ] Pour i de 1 à (X div 2) faire
Si( X mod i = 0) alors
SS+i
Fin Si
Fin Pour
Fin PARFAIT

TDOL
Objets Type/Nature
i,S Entier
etat boolénne

Algorithme de la fonction PARFAIT :


0) DEF FN PARFAIT(X :Entier):boolénne
1) S  0 Pour i de 1 à (X div 2) faire
Si (X mod i = 0 ) alors
SS+i
Fin Si
Fin Pour
2) Si (S = X) alors
etat  vrai
Sinon
etat  faux
Fin Si
3) PARFAIT  etat
4) Fin PARFAIT

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

2) Les nombres amis :

a) Activité 6 :
Vérifier si ces deux nombres sont amis ou non : (220,284)
D284 = { 1, 2, 4, 71, 142}
D220 = {1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110}
D284 et D220 sont respectivement les ensembles de tous les diviseurs de 284 et de 220.
284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110
220 = 1 + 2 + 4 + 71 + 142

b) Définition :
Deux nombres Entiers N et M sont dits amicaux si la somme des diviseurs de N (N non compris) vaut M et la
somme des diviseurs de M (M non compris) vaut N.

c) Constatations :
Déterminer la somme des diviseurs de N entre 1 et N div 2 (la même chose pour M):
 Vérifier si la somme des diviseurs de N est égale à M (la même chose pour M)
o Si oui : alors N et M sont amis
o Sinon : N et M ne sont pas amis
d) Application 8 :

On veut écrire un programme intitulé NB_AMIS qui saisi deux Entiers N et M strictement positif et vérifie si
ces nombres sont amis ou non.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

e) Solution de l’application 8 :
Analyse du programme principal :
Nom : NB_AMIS
Résultat : Aff
Aff =[ ] Si (FN SommeDiv(N)=M et FN SommeDiv(M)=N) Alors
Ecrire(N, ″ et ″,M,″ sont deux nombres amis″)
Sinon
Ecrire(N, ″ et ″,M,″ ne sont pas deux nombres amis″)
Fin si
PROC saisir (N,M)
Fin NB_AMIS
TDOG

Objets Type/nature
N,M Entier
saisir Procédure
SommeDiv Fonction

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

Algorithme du programme principal :


0) Début NB_AMIS
1) PROC saisir (N,M)
2) Si (FN SommeDiv(N)=M et FN SommeDiv(M)=N) Alors
Ecrire(N, ″ et ″,M,″ sont deux nombres amis″)
Sinon
Ecrire(N, ″ et ″,M,″ ne sont pas deux nombres amis″)
Fin SI
3) Fin NB_AMIS

Analyse de la fonction SommeDiv :


DEF FN SommeDiv (X :Entier) : Entier
Résultat : SommeDiv  S
S = [S  0 ] Pour i de 1 à (X div 2) faire
Si (X mod i = 0) alors
SS+i
Fin Si
Fin Pour
Fin SommeDiv

TDOL
Objets Type/Nature
i,S Entier

Algorithme de la fonction SommeDiv :


0) DEF FN SommeDiv (X :Entier):Entier
1) S  0
Pour i de 1 à (X div 2) faire
Si (X mod i = 0) alors
SS+i
Fin Si
Fin Pour
2) SommeDiv  etat
3) Fin SommeDiv

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

VII. Conversion entre les bases de numération :


1) Introduction :
Les bases de numérisation les plus connues :
 base 10 : les nombres appartenant [0..9].
 base 2 : les nombres appartenant [0..1].
 base 8 : les nombres appartenant [0..7].
 base 16 : les nombres appartenant [0..9] U [A..F].

2) Activité 7 :
Convertissez à la main Quelques nombres de la base 10 (décimale) vers la base 2 (binaire) et vers la base 16
(hexadécimale) : 38, 125, 75.

3) Définition :

Convertir un Entier positif N dans une base b au moins égale à 2 consiste à chercher la représentation de N
dans la base b. En effet, dans un système de numérisation b, tout Entier positif N admet une et une seule
décomposition :
N= ai * bi avec ak appartenant [0 .. b-1]

4) Constatations :
 Conversion base 10 à base 2 :
1) Deviser l’Entier N donné par 2
2) Ranger le reste et changer la valeur de N par N div 2.
3) Répéter les étapes 1 et 2 jusqu’à avoir N = 0.

NB : Pour la conversion à la base 16, lors de l’affichage des restes, n’oubliez pas de prévoir la conversion des
valeurs entre 10 et 15 en caractères alphabétiques entre A et F.

5) Application 9 :

On veut écrire un programme intitulé CONV_DEC_BIN qui permet de convertir un Entier N de la base 10
vers la base 2.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

6) Solution de l’application 9 :

Analyse du programme principal :


Nom : CONV_DEC_BIN
Résultat : PROC AFFICHE (T,c)
PROC CHERCHER (N,T,c)
N =donnée (″Donner le nombre à convertir″)
Fin CONV_DEC_BIN

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

TDNT
Type
Tab = tableau de 100 Entiers

TDOG
objet type/nature
N,c Entier
T Tab
CHERCHER Procédure
AFFICHE Procédure
Algorithme du programme principal :
0) Début CONV_DEC_BIN
1) Ecrire (″Donner le nombre à convertir : ″), lire (N)
2) PROC CHERCHER (N,T,c)
3) PROC AFFICHE (T,c)
4) Fin CONV_DEC_BIN

Analyse de la procédure CHERCHER :


DEF PROC CHERCHER (N : Entier, var T : Tab, var c : Entier)
Résultat : (T,c)
(T,c)= [c  0] Répéter
cc+1
T[c]  N mod 2
N  N div 2
Jusqu’à ( N = 0 )
Fin CHERCHER

Algorithme de la procédure CHERCHER :


0) DEF PROC CHERCHER (N : Entier, var T : Tab, var c : Entier)
1) c  0
2) Répéter
cc+1
T[c]  N mod 2
N  N div 2
Jusqu’à ( N = 0 )
3) Fin CHERCHER

Analyse de la procédure AFFICHE :


DEF PROC AFFICHE (T : Tab, c : Entier)
Résultat : T
T = [ ]Pour i de c à 1 faire
Ecrire(T[i] :3)
Fin Pour
Fin AFFICHE
TDOL
objet type/nature
i Entier

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

Algorithme de la procédure AFFICHE :


0)DEF PROC AFFICHE (T : Tab, c : Entier)
1) Pour i de c à 1 faire
Ecrire(T[i] :3)
Fin Pour
2) Fin AFFICHE

7) Application 10 :

On veut écrire un programme intitulé CONV_DEC_HEX qui permet de convertir un Entier N de la base 10
vers la base 16.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

8) Solution de l’application 10 :
Analyse du programme principal :
Nom : CONV_DEC_HEX
Résultat : PROC AFFICHE (T,c)
PROC CHERCHER (N,T,c)
N =donnée (″Donner le nombre à convertir″)
Fin CONV_DEC_HEX
TDNT
Type
Tab = tableau de 100 Entiers

TDOG
Objets Type/Nature
N,c Entier
T Tab
CHERCHER Procédure
AFFICHE Procédure

Algorithme du programme principal :


0) Début CONV_DEC_HEX
1) Ecrire (″Donner le nombre à convertir : ″), lire (N)
2) PROC CHERCHER (N,T,c)
3) PROC AFFICHE (T,c)
4) Fin CONV_DEC_HEX

Analyse de la procédure CHERCHER :


DEF PROC CHERCHER (N : Entier, var T : Tab, var c : Entier)
Résultat : (T,c)
(T,c)= [c  0] Répéter
cc+1
T[c]  N mod 2
N  N div 2
Jusqu’à ( N = 0 )
Fin CHERCHER

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

Algorithme de la procédure CHERCHER :


0) DEF PROC CHERCHER (N : Entier, var T : Tab, var c : Entier)
1) c  0
2) Répéter
cc+1
T[c]  N mod 2
N  N div 2
Jusqu’à ( N = 0 )
3) Fin CHERCHER

Analyse de la procédure AFFICHE


DEF PROC AFFICHE (T : Tab, c : Entier)
Résultat : T
T = [ ] Pour i de c à 1 faire
Si (T[i] dans [0..9] )Alors
Ecrire (T[i])
Sinon
Ecrire (CHR(ORD('A') + T[i] – 10) :3)
Fin Si
Fin Pour
Fin AFFICHE

TDOL
objet type/nature
i Entier

Algorithme de la procédure AFFICHE


0) DEF PROC AFFICHE (T : Tab, c : Entier)
1) Pour i de c à 1 faire
Si (T[i] dans [0..9] )Alors
Ecrire (T[i])
Sinon
Ecrire (CHR(ORD('A') + T[i] – 10) :3)
Fin Si
Fin Pour
2) Fin AFFICHE

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

Chapitre 7
Les algorithmes
d'approximations
I. Problème d’optimisation :
1) Introduction :

Les algorithmes d’optimisation cherchent à déterminer le jeu de paramètres d’entrée d’une fonction donnant à
cette fonction la valeur maximale ou minimale. (Encyclopédie libre Wikip_dia)
Cette valeur est appelée valeur optimale qui est une valeur approchée de l’optimum global (idéal).

2) Activité 1 :

Dans une feuille de carton carrée de 10 cm de coté, on découpe aux quatre coins quatre carrés de coté X de telle
façon qu’en relevant les quatre bords restants, on obtienne une boite de forme parallélépipédique.
On veut trouver la valeur de X telle que le volume de la boite ainsi formée soit maximum.
10 Cm

On veut écrire un programme intitulé VOLUME_MAX qui permet de déterminer la valeur de x de l’activité ci-
dessus tout en décomposant le problème en modules. Avec Pas appartient à [0..1].

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

3) Solution de l’activité 1 :

 V = Surface_de_base * Hauteur
 Surface_de_base = (10 – 2 * x) * (10 – 2 * x)
 Hauteur = x
D’où V = (10 – 2 * x) * (10 – 2 * x) * x

 V = 4*x3 – 40*x2 + 100*x


Remarques :

- X appartient à [0..5] en générale [0..la moitié de la mesure du côté du carré]


- Si la feuille peut être rectangulaire alors x appartient à [0..moitié de la moitié de la largeur]
- Ce type de problème appelé problème d’optimisation. La résolution de ce problème consiste à déterminer la
valeur approchée de x pour avoir un volume V maximum.

Pour déterminer la valeur approchée de x on peut utiliser le principe suivant :


 Puisque la valeur de x varie entre 0 et 5 :
- On affecte 0 à x et aussi à V
o On incrémente x d’un pas choisi
o On cherche le nouveau volume
 S’il est le plus grand on l’accepte
 Sinon on l’ignore
- On répète ce traitement jusqu’à ou x atteint ou dépasse 5.

Analyse du programme principale :


Nom : VOLUME_MAX
Résultat : Ecrire ("La meilleur solution avec ce pas de variation est pour X = ", X, "le volume = ", V)
V ← (10 - 2 * X) * (10 - 2 * X) * X
X ← FN Valeur_X (P)
P=donnée ("Donner la valeur du pas : ")
Fin VOLUME_MAX

TDOG
Objetss Type/Nature
P, X, V Réel
Valeur_X Fonction

Algorithme du programme principal :


0) Début VOLUME_MAX
1) Ecrire ("Donner la valeur du pas : "), Lire (P)
2) X ← FN Valeur_X (P)
3) V ← (10 - 2 * X) * (10 - 2 * X) * X
4) Ecrire ("La meilleur solution avec ce pas de variation est pour X = ", X, "le volume = ", V)
5) Fin VOLUME_MAX

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

Analyse de la fonction Valeur_X :


DEF FN Valeur_X (Pf : réel) : Réel
Résultat : Valeur_X
Valeur_X ← Xmax
Xmax =[Xmax ← 0, Vmax ← 0, Xv ← 0, Vv ← 0 ] Répéter
Xv ← Xv + Pf
Vv ← (10 - 2 * Xv) * (10 - 2 * Xv) * Xv
Si (Vv > Vmax) Alors
Vmax ← Vv
Xmax ← Xv
Fin si
Jusqu'à (Xv > 5)
Fin Valeur_X

TDOL
Objetss Type/Nature
Xv, Xmax, Vv, Vmax Réel

Algorithme de la fonction Valeur_X :


0) DEF FN Valeur_X (Pf : réel) : Réel
1) Xmax ← 0, Vmax ← 0, Xv ← 0, Vv ← 0 Répéter
Xv ← Xv + Pf
Vv ← (10 - 2 * Xv) * (10 - 2 * Xv) * Xv
Si (Vv > Vmax) Alors
Vmax ← Vv
Xmax ← Xv
Fin si
Jusqu'à (Xv > 5)
2) Valeur_X ← Xmax
3) Fin Valeur_X

4) Application 1 :
On veut écrire un programme intitulé F_X qui permet de déterminer la valeur approchée de x pour que f(x) soit
optimale (a une valeur maximale) avec f(x) = -2x² + 10x -2/3 et 0< x < 5.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

5) Solution de l’application 1 :
Analyse du programme principal :
Nom : F_X
Résultat : Ecrire (″ Avec le pas = ″,pas,″ La valeur approchée de X est : ″, FN VAL_X(pas))
PROC saisir (pas)
Fin F_X
TDOG
Objets Type/Nature
pas réel
VAL_X Fonction
saisir Procédure

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

Algorithme du programme principal :


0) Début F_X
1) PROC saisir (pas)
2) Ecrire (″Avec le pas = ″,pas,″ La valeur approchée de X est : ″, FN VAL_X(pas))
3) Fin F_X

Analyse de la fonction VAL_X :


DEF FN VAL_X(pas : réel) : réel
Résultat : VAL_X  xmax
xmax = [xmax  0, fmax  0, x  0, f  0] Tant que x < 5 faire
x  x + pas
f  -2*SQR(x) – 10*x -2/3
Si f > fmax alors
xmax  x
fmax  f
Fin Si
Fin Tant que
Fin VAL_X
TDOL
Objets Type/Nature
xmax, fmax, x, f réel

Algorithme de la fonction VAL_X :


0) DEF FN VAL_X(pas : réel):réel
1) xmax  0, fmax  0, x  0, f  0
2) Tant que x < 5 faire
x  x + pas
f  -2*SQR(x) – 10*x -2/3
Si f > fmax alors
xmax  x
fmax  f
Fin Si
Fin Tant que
3) VAL_X  xmax
4) Fin VAL_X

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

6) Application 2 :

On considère un rectangle ABCD tel que AB =10 et AD=20. On ajoute une longueur BB’ = x à AB et on
retranche la même longueur DD’ = x à AD. On obtient ainsi un nouveau rectangle AB’C’D’.

Démonstration

 Déterminer l’aire A du rectangle AB’C’D’ en Fonction de x.


 On se propose de chercher la valeur approchée de x tel que l’aire A du rectangle est maximale.

Le pas de variation de x est une donnée appartient à [0..1].


Pour exprimer l’aire A du rectangle AB’C’D’ en Fonction de x, nous pouvons constater que :

 A = Longueur * Largeur
A= AB’ * AD’
A= (AB + x) * (AD – x) = (10 + x) * (20 – x)
A= 200 – 10*x + 20*x – x²
D’où A = -x² + 10*x + 200

On veut écrire un programme intitulé AIRE_MAX qui permet d’afficher la valeur approchée de X pour que
l’aire soit maximale.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

7) Solution de l’application 2 :

Analyse du programme principal :


Nom : AIRE_MAX
Résultat : Ecrire (″Avec le pas = ″, pas,″ La valeur approchée de X est : ″, FN VAL_X (pas))
PROC saisir (pas)
Fin AIRE_MAX
TDOG
Objets Type/Nature
pas réel
VAL_X Fonction
saisir Procédure

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Algorithme du programme principal :


0) Début AIRE_MAX
1) PROC saisir (pas)
2) Ecrire (″ Avec le pas = ″,pas,″ La valeur approchée de X est : ″, FN VAL_X(pas))
3) Fin AIRE_MAX

Analyse de la fonction VAL_X :


DEF FN VAL_X(pas : réel) : réel
Résultat : VAL_X  xmax
xmax = [xmax  0, Amax  0, x  0, A  0] Répéter
A  - carré(x) + 10*x + 200
Si A > Amax alors
xmax  x
Amax  A
Fin Si
x  x + pas
Jusqu’à ( x > 20)
Fin VAL_X
TDOL
Objets Type/Nature
xmax, Amax, x , A réel

Algorithme de la fonction VAL_X :


0) DEF FN VAL_X(pas : réel):réel
1) xmax  0, Amax  0, x  0, A  0
2) Répéter
A  - carré(x) + 10*x + 200
Si A > Amax alors
xmax  x
Amax  A
Fin Si
x  x + pas
Jusqu’à ( x > 20)
3) VAL_X  xmax
4) FIN VAL_X

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

II. Problème d’approximation :


1) Introduction :
Les algorithmes d’approximation, peuvent être utilisés pour déterminer les valeurs approchées de la solution de
certains problèmes dont on ne peut pas déterminer la valeur exacte de la solution.

2) Activité 2 :
Dans un triangle ABC rectangle en A tel que AB = 3 Cm et AC = 2 Cm, on place un point M sur le segment
[AB] tel que AM = X.
N est la projection de M sur (BC) parallèlement à (AC).
P est la projection de N sur (AC) parallèlement à (AB).

M N
3 Cm

A P C
2 Cm

On veut écrire un programme intitulé RECTANGLE qui permet de trouver la valeur (ou les valeurs) de X tel
que AMNP ait pour aire 1 Cm2

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

3) Solution de l’activité 2:
Analyse du programme principale :
Nom : RECTANGLE
Résultat : Ecrire ("La meilleur solution avec ce pas de variation est pour X = ", X, "l’aire = ", A)
A ← 2*X - 2/3*X*Xv
X ← FN Valeur_X (P)
P=donnée ("Donner la valeur du pas : ")
Fin RECTANGLE

TDOG
Objetss Type/Nature
P, X, A Réel
Valeur_X Fonction

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

Algorithme du programme principal :


0) Début RECTANGLE
1) Ecrire ("Donner la valeur du pas : "), Lire (P)
2) X ← FN Valeur_X (P)
3) A ← 2*X - 2/3*X*Xv
4) Ecrire ("La meilleur solution avec ce pas de variation est pour X = ", X, "l’aire = ", A)
5) Fin RECTANGLE

Analyse de la fonction Valeur_X :


DEF FN Valeur_X (Pf : réel) : Réel
Résultat : Valeur_X
Valeur_X ← Xv
Xv =[ Xv ← 0 ] Répéter
Xv ← Xv + Pf
Av ← 2*Xv - 2/3*Xv*Xv
Jusqu'à (Av >= 1)
Fin Valeur_X
TDOL
Objetss Type/Nature
Xv, Av Réel
Algorithme de la fonction Valeur_X :
0) DEF FN Valeur_X (Pf : réel) : Réel
1) Xv ← 0 Répéter
Xv ← Xv + Pf
Av ← 2*Xv - 2/3*Xv*Xv
Jusqu'à (Av >= 1)
2) Valeur_X ← Xv
3) Fin Valeur_X

III. Application : (Résolution de l’équation F(X) = 0)


1) Présentation :

Soit une Fonction F continue monotone sur un intervalle [a, b], cette Fonction ne s’annule qu’une seule fois.

On veut écrire un programme intitulé RECHERCHE_ZERO permettent de calculer et d’afficher le zéro de


cette Fonction (valeur approché de X telle que F(X) = 0), avec une précision Epsilon. Les valeurs a, b et Epsilon
sont des données.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.
2) Solution :
Analyse du programme principale :
Nom : RECHERCHE_ZERO
Résultat : Ecrire ("La Fonction F s’annule pour X = ", FN Valeur_X (a, b, Epsilon))
Epislon=donnée ("Donner la valeur de la précision : ")
b=donnée ("b=")
a=donnée ("a=")
Fin RECHERCHE_ZERO

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

TDOG
Objetss Type/Nature
X, a, b, Epsilon Réel
Valeur_X Fonction

Algorithme du programme principal :


0) Début Recherche_ZERO
1) Ecrire ("a = "), Lire (a)
2) Ecrire ("b = "), Lire (b)
3) Ecrire ("Donner la valeur de la précision : "), Lire (Epsilon)
4) Ecrire ("La Fonction F s’annule pour X = ", FN Valeur_X (a, b, Epsilon))
5) Fin Recherche_ZERO

Analyse de la fonction Valeur_X :


DEF FN Valeur_X (af, bf, Epsilonf : réel) : Réel
Résultat : Valeur_X
Valeur_X ← mil
mil =[ mil ← (af + bf)/2 ] Tant Que (F(mil) ≠ 0 ) ET (bf – af > Epsilonf) Faire
Si (F(af) * F(mil) >0) Alors
af ← mil
Sinon
bf ← mil
Fin si
mil ← (af + bf)/2
Fin Tant Que
Fin Valeur_X

TDOL
Objetss Type/Nature
mil Réel

Algorithme de la fonction Valeur_X :


0) DEF FN Valeur_X (af, bf, Epsilonf : réel) : Réel
1) mil ← (af + bf)/2 Tant Que (F(mil) ≠ 0 ) ET (bf – af > Epsilonf) Faire
Si (F(af) * F(mil) >0) Alors
af ← mil
Sinon
bf ← mil
Fin si
mil ← (af + bf)/2
Fin Tant Que
2) Valeur_X ← mil
3) Fin Valeur_X

Remarque : Il faut définir la Fonction F permettant de retourner la solution d’une valeur par la fonction F(X).

Enseignant : AHMED BELHASSEN 9

Vous aimerez peut-être aussi