Sie sind auf Seite 1von 356

Algorithmique et programmation

Chapitre
Les structures de
données
Objectifs spécifiques :

- Identifier et manipuler les constantes et les variables.


- Manipuler les types standards.
- Manipuler les procédures et les fonctions prédéfinis.
- Comprendre l’utilisation du type énuméré.
- Comprendre l’utilisation du type intervalle.
- Manipuler des variables faisant appel aux types énumérés et intervalle.
- Comprendre l’utilisation du type tableau.
- Manipuler des tableaux.

Plan de chapitre :

I. Les constantes et les variables


II. Les types de données
III. Le type scalaire énuméré
IV. Le type intervalle
V. Le tableau à une dimension
IV. Le tableau à deux dimensions

Temps prévue : 12h

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

I) Les constantes et les variables :


1) Les constantes :
a) Activité 1 :
Dans le tableau ci-dessous, vous trouverez des constantes connues et utilisées dans plusieurs
disciplines, donnez des valeurs approchées de celles-ci :

Nom Valeur
Pi 3,141592
Angle droit 90°
Nombre d'heures d’un jour 24 heures
Nombre de mois 12 mois
Un octet 8 bits

b) Définition : Une constante est une donnée dont la valeur reste fixe durant l’exécution d’un
programme.

c) Caractéristiques :
Une constante est caractérisée par :
o Un nom (identificateur unique).
o Une valeur inchangeable.
d) Déclaration :
En algorithme, on déclare une constante comme suit :

Objet Type/nature

Général Constante = Valeur


Nom
de la constante

Exemple
PI Constante = 3.14

En PASCAL, on déclare une constante comme suit :


Const nom=valeur de la constante ;
Exemple : Const PI = 3.14 ;
e) Application : Déclarer en PASCAL les constantes suivantes :

Constantes Valeur
g 9.8 Const g = 9.8 ;
Mois 12 Const Mois = 12 ;
Fréquence 50 Const Fréquence = 50 ;
Coef 2 Const Coef = 2 ;

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

2) Les variables :
a) Activité 2 :
Soit le tableau suivant qui montre les degrés de la température pendant la journée 31/07/2015 à
Tunis :

Matin Midi Après midi


Température en degré 34° 38° 36°

Qu'est ce que vous remarquez ? Les valeurs de la température sont comment ?


 Les valeurs de la température changent, varient.
 C’est une variable.

b) Définition :
Une variable est un objet pouvant prendre différentes valeurs tout le long de l’exécution d’un
algorithme ou d’un programme.

c) Activité 3 :
Tirez les caractéristiques d'une variable à partir du tableau suivant :

Nom Valeurs
Age 16 18
Moyenne 12,5 15,75
Mois Janvier Mars
d) Caractéristiques :
Une variable est caractérisée par :
o Un nom (identificateur unique).
o Un contenu.
o Un type.
e) Déclaration :
En algorithme, on déclare une variable comme suit :

Objet Type/nature

Général Nom Type de la variable

Exemple m Réel

En PASCAL, on déclare une variable comme suit :


Var nom : type ;
Exemple : Var k : REAL ;

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

f) Applications :

 Application 1 :
Évaluez le contenu des variables p, q et r suite à l'exécution de chacune des séquences suivantes :

Séquence 1 Séquence 2
1) p  5
1) p  5
2) q  8
2) q  8
3) r  q
3) p  q
4) q  p
4) q  p
5) p  r
Solution :
Séquence 1 : p = 8, q = 8
Séquence 2 : p = 8, q = 5, r = 8

 Application 2 :
Évaluez le contenu des variables a, b et c suite à l'exécution de chacune des séquences suivantes :

Séquence 1 Séquence 2 Séquence 3


1) a  7
1) a  10 1) a  2
2) b  3
2) b  a + 10 2) b  a * a
3) c  a + b
3) c  a + b 3) c  a * a
4) a  a - b
4) a  b - c 4) a  a * a
5) a  a - b
Solution :
Séquence 1 : a = -10, b = 20, c = 30
Séquence 2 : a = 4, b = 4, c = 4
Séquence 3 : a =1, b = 3, c = 10

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

II) Les types de données :


1) Les types numériques :
a) Le type entier :
i) Activité 4 :
Quelles sont les valeurs possibles qu’on peut accorder à une variable de type entier ? Quels sont les
opérateurs applicables sur une variable de type entier ?

Domaine de définition Sous ensemble de Z : -32768…….32767


Opérateurs arithmétiques +, -, *, /, DIV, MOD
Notation algorithmique : <, >, =, ≤, ≥, ≠
Opérateurs relationnels Notation en Pascal : <, >, =, <=, >=, <>

ii) Définition :
Une variable de type entier contient un entier relatif appartenant à un sous ensemble de Z.
-∞ +∞
MinInt : -32768 … -2 -1 0 1 2 … MaxInt : 32767
iii) Déclaration :

En algorithme :

Objet Type/nature

Général Nom Entier

Exemple i,j,k Entier

En PASCAL : Var i, j, k : INTEGER ;

Remarque : Le langage PASCAL a cinq types entiers prédéfinis. Chaque type a un domaine de
définition spécifique.

Type Domaine de définition Nombre de bits


SHORTINT -128..127 Signé 8 bits
INTEGER -32768..32767 Signé 16 bits
LONGINT -2147483648..2147483647 Signé 32 bits
BYTE 0..255 Non signé 8 bits
WORD 0..65535 Non signé 16 bits

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

iv) Les opérateurs arithmétiques et leurs priorités :


Soit l’opération suivante :
C : résultat
C=A+B avec A et B : opérandes
+ : opérateur

Désignation de Priorité des Opérateur Type des


l’opération opérateurs En algorithme En PASCAL opérandes
Parenthèses 1 (…) (…) Tout type
Multiplication x * Entier ou réel
Division réelle / / Réel
Division entière 2 DIV DIV Entier
Reste de la
MOD MOD Entier
division entière
Addition + + Entier ou réel
Soustraction 3 - - Entier ou réel
Egale = = Tout type ordonné
Différent ≠ <> Tout type ordonné
Inférieur < < Tout type ordonné
Supérieur 4 > > Tout type ordonné
Inférieur
≤ <= Tout type ordonné
ou égale
Supérieur
≥ >= Tout type ordonné
ou égale
L’appartenance 5 DANS IN Type scalaire

Remarque :
Lorsque deux opérateurs sont de priorité égale, on évalue de gauche à droite.
Par exemple : a + b - c est évalué (a + b) - c, et non pas a + (b - c).

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

v) Applications :
 Application 1 :
Est ce qu’on peut utiliser le type entier pour représenter les quantités suivantes :

• Nombre d’élève d’une classe. Oui


• Nombre de matières étudiées pendant un trimestre. Oui
• Note obtenue lors d’un devoir. Non
• Moyenne générale d’un élève. Non

 Application 2 : Parmi les nombres suivants, lesquels sont des entiers ?


a) 15 b) 15.245 c) -15.00
d) 15 MOD 5 e) 1.5 E-100 f) 17 MOD 7
g) 14.75 h) 1.0x14 i) -15

 Application 3 : Evaluez les expressions suivantes :

A = 8 – (5 * 4 DIV 3) MOD 4 + (10 – 7) = 8 - (20 DIV 3) MOD 4 + 3


= 8 - 6 MOD 4 + 3
=8-2+3
=6+3
= 9.

B = 8 + 5 MOD 4 * 3 DIV 4 – (10 – 7) = 8 + 1 * 3 DIV 4 - 3


= 8 + 3 DIV 4 - 3
=8+0–3
= 5.

C = 10 DIV 2 * 10 MOD 2 = 5 * 10 MOD 2


= 50 MOD 2
= 0.

D = (13 DIV 3 * 2) + (13 MOD 3 * 2) = (4 * 2) + (1 * 2)


=8+2
= 10.

E = 13 + 52 MOD 10 * 3 - 5 / 2 = 13 + 2 * 3 - 5/2
= 13 + 6 - 2.5
= 19 - 2.5
= 16.5

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

b) Le type réel :
i) Activité 5 :
Quelles sont les valeurs possibles qu’on peut accorder à une variable de type réel ? Quels sont les
opérateurs applicables sur une variable de type réel ?

Domaine de définition Sous ensemble de IR


Opérateurs arithmétiques +, - , *, /
Notation algorithmique : <, >, =, ≤, ≥, ≠
Opérateurs relationnels Notation en Pascal : <, >, =, <=, >=, <>

ii) Définition :
Les valeurs du type réel forment un sous ensemble des nombres réels IR.
Le domaine IR est compris entre -∞ et +∞, alors qu'en informatique, le domaine des réels est
réduit à :
-∞ +∞
-2.9 1039 … -2 -1.52 0 1 2.9 … 1.7 1038

Min Max

iii) Déclaration :
En algorithme :

Objet Type/nature

Général Nom Réel

Exemple x,y Réel

En PASCAL :
Var x, y : REAL ;

iv) Applications :
 Application 1 :
Parmi les nombres suivants, lesquels sont des réels ?
a) -2.8 b) 1.5 x 245 c) 14/8
d) 150 DIV 5 e) -4..5 E-100 f) 78 MOD 11
g) 12.8 h) -5.08 x 14 i) -15.8

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

c) Les fonctions arithmétiques standards :


La bibliothèque TURBO PASCAL, comme celle de la plupart des langages de programmation, est riche
en fonctions arithmétiques dont voici les plus utilisées :

Les fonctions arithmétiques standards


Syntaxe en Syntaxe en
Rôle de la fonction Exemples
algorithme PASCAL
Abs (-3) vaut 3.
Abs (x) ABS (x) Donne la valeur absolue de x.
Abs (15) vaut 15.
Carré (3) vaut 9.
Carré (x) SQR (x) Donne le carré de x. Carré (4) vaut 16.
Carré (12) vaut 144.
Racine_Carré (16)
Racine_Carré SQRT(x) Retourne la racine carré de x si x est vaut 4.
(x) positif sinon il provoque une erreur. Racine_Carré (16)
vaut 1.414.
Arrondi (7.499) vaut
Arrondi (x) ROUND (x) Donne un entier qui est le plus proche du 7.
réel x. Arrondi (7.50) vaut 8.
Arrondi (7.99) vaut 8.
Tronc (-5.125) vaut -
Tronc (x) TRUNC (x) Supprime la partie décimale pour ne 5.
laisser que la composante entière de x. Tronc (3.14) vaut 3.
Tronc (123.5) vaut
123.
ENT (2.5) vaut 2.
ENT(x) INT(x) Donne la partie entière d'un réel.
ENT (-3.5) vaut -4.

FRAC (2.5) vaut 0.5.


FRAC(x) FRAC(x) Donne la partie fractionnaire d’un réel.
FRAC (4.7) vaut 0.7.

Aléa vaut 0.63.


Aléa RANDOM Donne un réel compris entre 0 et 1 exclus.
Aléa vaut 0.72.

Aléa (9) vaut 6.


Aléa (x) RANDOM(x) Donne un entier compris entre 0 et n-1.
Aléa (5) vaut 3.
Cos (x) COS (x) Donne le cosinus de x (x en radians). Cos (0.48) vaut 0.88.
Sin (x) SIN (x) Donne le sinus de x (x en radians) Sin (0.48) vaut 0.46.
Exp (x) EXP (x) Donne l’exponentielle de x. Exp (0.48) vaut 1.61.
Donne le logarithme népérien de x si x est Ln (0.48) vaut -0.73.
Ln (x) LN (x)
positif sinon il provoque une erreur.

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

i) Applications :
 Application 1 : Evaluez les expressions suivantes :
1) TRONC (7.25) + ARRONDI (7.25) + ENT (7.25) = 7 + 7 + 7 = 21.
2) TRONC (7.50) + ARRONDI (7.50) + ENT (7.50) = 7 + 8 + 7 = 22.
3) ABS (-7) / ABS (7) = 7/7 = 1.0
4) Alea = 0.33
5) Alea (7) = 5.

 Application 2 : Evaluer les expressions suivantes :


Expression Valeur Expression Valeur
4.5 + Racine_Carré (8/2) 6.5 Carré (ABS (1.1-5.4)) 18.49
Racine_Carré (TRONC (9.3)) 3 TRONC (3.14) 3

 Application 3 :
Donner en algorithme et en PASCAL l’équivalent de chacune des expressions arithmétiques
suivantes :

 x + 1²
Expression arithmétique Équivalents

A =
√x
A= CARRÉ (x + 1)/RACINE_CARRÉ (x)
A= SQR (x +1)/ SQRT (x)
2x² + 4x − 1
B =
B= (2 * CARRÉ (x)+ 4 * x -1) / RACINE_CARRÉ (ABS (x+5))

|x + 5|
B= (2 * SQR (x) + 4 * x -1) / SQRT(ABS (x+5))

|10 x + 2|
C = 
3
C= RACINE_CARRÉ (ABS (10 * x + 2) / 3)
C= SQRT (ABS (10 * x + 2) / 3)


D= −1
D= ((x * CARRÉ (x)) / (CARRÉ (x) + 2)) – 1
x  + 2 
D= ((x * SQR (x)) / (SQR (x) + 2)) – 1

 Application 4 :
Donner les expressions arithmétiques correspondantes aux expressions suivantes écrites en
PASCAL.

Expression en PASCAL Expression arithmétique


2 + 3
−2
3+
SQRT (2*a+3/b-2)/3+x
4
4*x/c*6-x 6 − 

10 
10*x/2+x 2+

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

2) Le type booléen :
a) Activité 6 :
Répondre par VRAI ou FAUX aux phrases suivantes :
a) Aujourd’hui il fait chaud.
b) Aujourd’hui il pleut. Qu’est ce que vous remarquez ?
On peut remarquer que chacune de ces phrases peut être soit VRAIE soit FAUSSE.
On peut donc les appelées des expressions logiques ou booléennes.
b) Définition :
Une variable ou expression de type booléen est une variable qui ne peut prendre que la valeur VRAI
(TRUE) ou la valeur FAUX(FALSE).

c) Déclaration :
En algorithme :

Objet Type/nature

Général Nom Booléen

Exemple p,q Booléen

En PASCAL : Var p , q : BOOLEAN ;

d) Activité 7 : Complétez les tables de vérités suivantes :


Valeur x Valeur y Non(x) x ET y x OU y x OUex y
F F V F F F
F V V F V V
V V F V V F
V F F F V V

e) Les opérateurs logiques :


Ces opérateurs sont : Non : Négation, ET : Conjonction, OU : Disjonction, OUex : Ou exclusif
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


Algorithmique et programmation

f) Applications :
 Application 1 : Evaluer les expressions suivantes :
a) (4 <= 4) ET (4< 4) OU (4 = 4) ET (4 <> 4) = VRAI ET FAUX OU VRAI ET FAUX
= FAUX OU FAUX
= FAUX.

b) (4 <= 4) OU (4< 4) ET (4 = 4) OU (4 <> 4) = VRAI OU FAUX ET VRAI OU FAUX


= VRAI OU FAUX OU FAUX
= VRAI OU FAUX
= VRAI.

c) (-5<= 3) OU (1 > 3) = VRAI OU FAUX


= VRAI.

d) (5 > 3) OUex (-10 < 0) = VRAI OUex VRAI


= FAUX.

 Application 2 : Sachant que a =4, b =5, c =1 et d =0, évaluez les expressions logiques suivantes :
1) (a < b) ET (c >= d) = (4 < 5) ET (1 >= 0)
= VRAI ET VRAI
= VRAI.

2) NON (a < b) OU (c ≠ b) = NON (4 < 5) OU (1 ≠ 5)


= NON (VRAI) OU VRAI
= FAUX OU VRAI
= VRAI.

3) NON (a ≠ b) OUex (a * c < d) = NON (4 ≠ 5) OUex (4 * 1 < 0)


= NON (4 ≠ 5) OUex (4 < 0)
= NON (VRAI) OUex FAUX
= FAUX OUex FAUX
= FAUX.
 Application 3 : Evaluer ces expressions pour a=3, b=5, c=2 et x =FAUX.

a) NON x OU (a<c) ET (a<b) = NON FAUX OU (3<2) ET (3<5)


= NON FAUX OU FAUX ET VRAI
= VRAI OU FAUX ET VRAI
= VRAI OU FAUX
= VRAI.

b) (a>b) ET NON x ET (a<b) = (3>5) ET NON FAUX ET (3<5)


= FAUX ET NON FAUX ET VRAI
= FAUX ET VRAI ET VRAI
= FAUX ET VRAI
= FAUX.

c) NON (a>b) ET (a<c) = NON (3>5) ET (3<2)


= NON (FAUX) ET FAUX
= VRAI ET FAUX = FAUX.

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

3) Le type caractère :
a) Définition :
Un caractère est représenté par le caractère lui-même placé entre deux apostrophes.
b) Présentation :
Le type caractère appartient à l’une des catégories suivantes :
- Lettres alphabétiques minuscules et majuscules.
- Les chiffres de 0 à 9
- Les symboles comme la touche (espace), "!", "&", ">",…
- Les caractères non imprimables comme le retour chariot, la touche Echap (esc).
- Les opérateurs relationnels : < , >, = , ≤ , ≥ , ≠
c) Déclaration :
En algorithme :

Objet Type/nature

Général Nom Caractère

Exemple car1, car2 Caractère

En PASCAL : Var car1, car2 : CHAR ;

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

d) Table des codes ASCII :

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

e) Les opérateurs applicables sur les caractères :


On peut comparer les caractères en utilisant les opérateurs relationnels.
Exemple : "A" < "B" est une proposition vraie car 65 < 66
"a" < "A" est une proposition fausse car 97 > 65

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

f) Les fonctions prédéfinies sur les caractères :

Les fonctions prédéfinies sur les caractères


Syntaxe en Syntaxe en Rôle de la Type de Type de Exemples
algorithme PASCAL fonction x résultat

Renvoie le code
ASCII du caractère
C. Le résultat est un ORD ("A") vaut 65
ORD (C) ORD (C) Caractère Entier
entier positif ORD ("a") vaut 97
compris entre 0 et
255.

Renvoie le caractère
dont le code ASCII
CHR (75) vaut "K"
CHR (N) CHR (N) est N. Entier Caractère
CHR (111) vaut "o"
n doit être entre 0 et
255.

Retourne le
prédécesseur de C Même PRED ("Z") vaut "Y"
PRED (C) PRED (C) Scalaire
(c’est à dire qui type de C PRED ("9") vaut "8"
précède C).

Retourne le
Même
successeur de C SUCC ("F") vaut "G"
SUCC (C) SUCC (C) Scalaire type que
(c’est à dire qui suit SUCC ("5") vaut "6"
x
C).

Convertit le
caractère C en
majuscule s'il est MAJUS ("c") vaut "C"
MAJUS (C) UPCASE(C) Caractère Caractère
possible, sinon elle MAJUS ("D") vaut"D"
renvoie le même
caractère C.

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

g) Applications :
 Application 1 :
1) Que désigne les éléments suivants : x, "x", 2, "2" ?
x : variable, "x" : caractère, 2 : entier, "2" : caractère.
2) Compléter le tableau ci-dessous en déterminant le type et le contenu de chaque variable :

Variable Type Contenu


a) X  98 X Entier 98
b) Y  "E" Y Caractère "E"
c) Z  CHR (X) Z Caractère "b"
d) W  MAJUS (SUCC (Z)) W Caractère "C"
e) M  CHR (ORD (Y))
M Caractère "E"
f) N  ORD (CHR (X))
N Entier 98

 Application 2 : Evaluez les expressions suivantes pour c1="a", c2="Z", x=-2.


ORD (SUCC (c1)) + (ORD (c2))-100 = ORD (SUCC (c1)) + (ORD (c2))-100
= ORD (SUCC ("a")) + (ORD ("Z"))-100
= ORD ("b") + (ORD ("Z"))-100
= 98 + 90-100
= 88.
CHR(x+ORD ("A")) = CHR (-2+65)
= CHR (63)
= " ?"

ORD (SUCC (MAJUS (c1))) + ABS (ORD (PRED (c2)) * x) = ORD (SUCC (MAJUS ("a"))) + ABS
(ORD (PRED ("Z")) * -2)
= ORD (SUCC ("A")) + ABS (ORD ("Y") * -
2)
= ORD ("B") + ABS (ORD ("Y") * -2)
= 66 + ABS (89 * -2)
= 66 + 178
= 244.

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

4) Le type chaine de caractères :


a) Activité 8 :
Soient les instructions suivantes :
C1"P"
C2"C"
C3"PC"
Déclarer en algorithme et en PASCAL les variables C1, C2 et C3.
C1 : caractère, C2 : caractère, C3 : est un ensemble de caractère.
b) Définition :
Une chaîne de caractères est un regroupement de n caractères. n étant comprise entre 0 et 255. Si n
est nulle on parle d’une chaîne vide.
Les caractères relatifs à une chaîne sont représentés entre guillemets.
On peut accéder au ième caractère d’une chaîne ch en utilisant la notation ch[i] avec 1≤ i ≤ Long
(ch).
c) Déclaration :
En algorithme :

Objet Type/nature

Nom Chaine
Général

Nom Chaine [taille]

prénom chaine [10]


Exemple nom chaine
adresse chaine [25]

En PASCAL : Var prénom : STRING [10] ;


nom : STRING;
adresse : STRING [25] ;

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

d) Les fonctions prédéfinies :

Concat (ch1, ch2, ... , chn) en Pascal CONCAT (ch1, ch2, … chn)

Rôle : Fonction qui retourne la concaténation des chaînes ch1, ch2, ...., chn.
C'est l'équivalent de ch1 + ch2 + ch3 + … chn
Exemple :
ch  Concat ("Turbo", " ", "PASCAL") donne "Turbo PASCAL"

Long (ch) en Pascal LENGTH (ch)

Rôle : Fonction qui retourne un entier représentant la longueur en caractères de la chaîne ch.
Exemple :
L  Long ("Bonjour") donne 7
L  Long ("Algorithme ") donne 10

Sous_chaîne (ch, p, nbc) en Pascal COPY (ch, p, nbc)

Rôle : Fonction qui retourne une sous-chaîne d'une longueur nbc à partir de la position p dans ch.
Exemple :
ch  Sous_chaîne ("Baccalauréat", 1, 3) donne "Bac"
ch  Sous_chaîne ("'micro-ordinateur ", 7, 10) donne
"ordinateur"

Pos (ch1, ch2) en Pascal POS (ch1, ch2)

Rôle : Fonction qui retourne la première position de la chaîne ch1 dans la chaîne ch2.
Si ch1 n'est pas dans ch2, elle retourne 0.
Exemple :
ch  POS ("m","programmation") donne 7
ch  POS ("r","programmation") donne 2
ch  POS ("R","programmation") donne 0

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

e) Les procédures prédéfinies :

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

Rôle : Procédure qui enlève n caractères de ch à partir de la position p.


Exemple :
mot  "CD ROM"
Efface (mot, 3,4) mot devient "CD "

Insère (ch1, ch2, p) en Pascal INSERT (ch1, ch2, p)

Rôle : Procédure qui insère la chaîne ch1 dans la chaîne ch2 à partir de la position p.
Le caractère numéro p et les suivants sont décalés vers la droite.
Exemple :
ch1  "-"
ch2  "Hautparleurs"
Insère (ch1, ch2, 5) ch2 devient "Haut-parleurs"

Convch (d, ch) en Pascal STR (d, ch)

Rôle : Procédure qui convertit un nombre décimal d en chaîne de caractères et l'affecte à la


variable ch.
Exemple :
Convch (1999, ch) ch contient la chaîne "1999"
Convch (14.52, ch) ch contient la chaîne "1.4520000000E+01"

Valeur (ch, d, erreur) En Pascal VAL (ch, d, erreur)

Rôle : Procédure qui convertit une chaîne ch en une valeur numérique décimale et l'affecte à la
variable d.
Le paramètre erreur est une variable de type entier qui contiendra 0 si la conversion s'est déroulée
sans erreur, sinon elle contiendra le numéro (la position) du caractère qui a déclenché l'erreur.
Exemple :
ch  "10.50"
Valeur (ch, d, e)
d contient le nombre 10.5
e contient 0 (aucune erreur)

ch  "12/10/1999"
Valeur (ch, d, e)
d contient le nombre 0
e contient 3 (erreur à la position 3 due au caractère "/" qui n'est
pas un chiffre)

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation

f) Applications :
 Application 1 :
Compléter le tableau suivant en donnant le résultat de l’évaluation des instructions :
C1″ ALGORITHME ″ C2″ RECURRENT ″

Instructions Résultats
1) N  LONG (C2) N=9
2) INSERE (C2, C1, 11) C1=″ALGORITHMERECURRENT″
3) N  LONG (C1) N=19
4) N  POS (″N″, C2) N=8
5) C3SOUS_CHAINE (C1, 9,7) C3=″MERECUR″
6) EFFACE (C2, 2,5) C2=″RENT″
7) C3  C3 + C2 C3=″MERECURRENT″

 Application 2 :
Compléter le tableau suivant sachant que ch1 = ′′Lunette′′ ch2=′′si′′ ch3=′′une′′.

Instructions Type Valeur


LLONG (SOUS_CHAINE (ch1, 2,3)) Entier L =3
PPOS (′′E′′, ch1) Entier P =0
nCONCAT(′′tuni′′,ch2)+ch1[LONG(ch1)] Chaine de caractères n =″tunisie″
Chaine de caractères ch2 =″si″
INSERE (ch2, ch3, 2)
ch3 =″usine″
EFFACE (ch1, 5,3) Chaine de caractères ch1 =″Lune″
VALEUR (′′20.2′′, d, e) Entier d =20.2
e =0
CONVCH (2014, ch) Chaine de caractères ch =″2014″

Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation

III) Le type scalaire énuméré :


a) Activité 9 :
Supposons qu’on veut représenter les jours de la semaine. Proposer une solution.
Solution :
CONST
Lundi = 1 ;
Mardi = 2 ;
Mercredi = 3 ;
Jeudi = 4 ;
Vendredi = 5 ;
Samedi = 6 ;
Dimanche = 7 ;
La solution est de déclarer sept constantes : ceci peut conduire à l’erreur.
b) Définition :
Le type scalaire énuméré permet de représenter des valeurs en les énumérant au moyen de leurs
noms.
Exemple : Semaine = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)
Remarque : le nombre des éléments de la liste ne doit pas dépasser 256.
c) Déclaration :
En algorithme :

Tableau des nouveaux types

Types
Nom de type = (valeur 1, valeur 2, valeur 3, ……………..)

Tableau de déclarations des objets

Objet Type/nature

Général Nom Nom de type

En PASCAL :
TYPE <Nom de type> = (valeur 1, valeur 2, valeur 3, ……………..) ;
VAR <Nom> : Nom de type ;
Exemple :
Tableau de déclaration des objets

Types
Semaine = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)

Enseignant : AHMED BELHASSEN 21


Algorithmique et programmation

Tableau de déclarations des objets

Objet Type/nature
j Semaine
En PASCAL :
TYPE Semaine = (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche) ;
VAR j : Semaine ;
d) les fonctions prédéfinies et les opérateurs possibles sur les types énumérés :
Les opérations possibles sont : <, >, <=, >=, =, <>

Fonction Rôle Exemples

Renvoie le successeur de la valeur SUCC (Lundi) = Mardi


SUCC (valx) donnée (erreur si valx = dernière valeur SUCC (Dimanche) = Erreur
énumérée).

Renvoie le prédécesseur de la valeur PRED (Dimanche) = Samedi


PRED (valx) donnée (erreur si valx = première valeur PRED (Lundi) = Erreur
énumérée).

ORD (valx) Fournit le numéro d’ordre de la valeur ORD (Lundi) = 0


donnée. ORD (Jeudi) = 3

Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation

e) Applications :
 Application 1 :
Soit le type Personnel contenant les valeurs suivantes: Ingénieur, Professeur, Comptable, Avocat,
Docteur.
1) Déclarer en algorithme et en PASCAL le type Personnel en respectant l’ordre des valeurs
proposées.
Tableau de déclaration des objets

Types
Personnel = (Ingénieur, Professeur, Comptable, Avocat, Docteur)

Tableau de déclarations des objets

Objet Type/nature
x Personnel
En PASCAL :
TYPE Personnel = (Ingénieur, Professeur, Comptable, Avocat, Docteur) ;
VAR x : Personnel ;
2) Soit la déclaration PASCAL suivante :
VAR
x : Personnel ;
Les affectations suivantes sont-elles correctes (Oui/Non) ?
x := Avocat Oui
x := Prof Non

2) Compléter le tableau ci-dessous par les types et les valeurs des variables A, B, C et D après
exécution des instructions suivantes :

Variable Type Valeur


A  ORD (Docteur) A Entier 4
B  SUCC (Comptable) B Personnel Avocat
C  PRED (Professeur) C Personnel Ingénieur
D  Ingénieur < Avocat D Booléen VRAI

Enseignant : AHMED BELHASSEN 23


Algorithmique et programmation

IV) Le type intervalle :


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

b) Déclaration :
En algorithme :

Tableau des nouveaux types

Types
Nom de type = borne_inf..borne_sup

Tableau de déclarations des objets

Objet Type/nature
Nom Nom de type

En PASCAL :
TYPE <Nom de type> = borne_inf..borne_sup ;
VAR <Nom> : Nom de type ;
Exemple :
Tableau de déclaration des objets

Types
mois = 1..12
jours = 1..31

Tableau de déclarations des objets

Objet Type/nature
mois_actuel mois
j jours
En PASCAL :
TYPE mois = 1..12 ;
jours = 1..31 ;
VAR mois_actuel : mois ;
j : jours ;

Enseignant : AHMED BELHASSEN 24


Algorithmique et programmation

c) Applications :
 Application 1 :
On donne ci-après la partie déclaration d’un programme :

CONST c = 3 ;
TYPE fourniture = (stylo, crayon, gomme, colle, cahier, carnet) ;
ensemble= 10..30 ;
VAR
g , f : fourniture ;
e : ensemble ;
i ,j :integer ;
c1 : boolean ;

Evaluer les expressions suivantes en mettant « valide » si l’instruction est valide et « non valide »
dans le cas contraire. En cas de validité de l’instruction donner la valeur de la variable et en cas
d’invalidité, justifier votre réponse.

a) g := ′cahier′; Non valide

b) READLN (f) ; Non valide

c) j :=ORD(colle) * c * ROUND(2.5) ; =3*3*3


= 27.

d) e := ORD (cahier) * ORD (carnet) ; =4*5


= 20.

e) i := SUCC (ORD (gomme)) + TRUNC (6.30) ; = SUCC (2) + 6


=3+6
= 9.

f) c1 := (ORD (stylo) = ORD (colle)) ; = ( 0 = 3)


= FALSE

g) e := ORD (stylo); = 0.

Enseignant : AHMED BELHASSEN 25


Algorithmique et programmation

V) Le tableau à une dimension :


a) Activité 10 :
Calculer les moyennes de 5 élèves en connaissant leurs notes de contrôle et leurs notes de synthèse.
Solution :
Moy1 = (DC1 + 2*DS1)/3
Moy2 = (DC2 + 2*DS2)/3 5 variables DC
Moy3 = (DC3 + 2*DS3)/3 5 variables DS
Moy4 = (DC4 + 2*DS4)/3 5 variables Moy
Moy5 = (DC5 + 2*DS5)/3

Nous remarquons que ce nombre de variables deviendra beaucoup plus grand si on a une classe de 30
élèves cela rendre les algorithmes très complexe.

Pour résoudre ces problèmes on doit chercher une structure de donnée permettant de :
- Stocker facilement un ensemble de données (sous le même nom).
- Accéder facilement à toutes ces données.

La structure permettant de faire ainsi est dite tableau.


Pour résoudre le problème ci-dessus, on doit utiliser 3 tableaux comme suit : TMoy, TDC, TDS.
b) Définition :
Un tableau est une structure de données permettant de ranger un nombre fini d'éléments de même
type et selon une disposition bien définie.

c) Déclaration :
En algorithme :

Tableau de déclaration des objets

Objets Type/Nature
Ident_tableau Tableau de taille et de type-élément
Exemple :
Tableau de déclaration des objets

Objets Type/Nature
Moyenne Tableau de 5 réels
DC Tableau de 5 réels
Tnom Tableau de 30 chaînes de caractères

En PASCAL :
VAR Ident-Tableau : ARRAY [Borne_inf .. Borne_sup] OF type ;

Enseignant : AHMED BELHASSEN 26


Algorithmique et programmation

Exemple :
VAR Moyenne : ARRAY [1..5] OF REAL ;
VAR DC : ARRAY [1..5] OF REAL;
VAR Tnom : ARRAY [1..30] OF STRING;

Autre méthode de déclaration :


Il est possible de déclarer le type d'un tableau.
Exemple :
En algorithme :
Tableau de déclaration des nouveaux types

Types
T-Moy = Tableau de 5 réel
T-DC = Tableau de 5 réel
Nom = Tableau de 30 chaînes de caractères

Tableau de déclaration des objets

Objets Type/Nature
Moyenne T-Moy
DC T-DC
Tnom Nom
En PASCAL :

TYPE T-Moy : ARRAY [1..5] OF REAL; VAR Moyenne : T-Moy;


TYPE T-DC : ARRAY [1..5] OF REAL; VAR DC : T-DC;
TYPE Nom : ARRAY [1..30] OF STRING; VAR Tnom : Nom ;

Enseignant : AHMED BELHASSEN 27


Algorithmique et programmation

d) Applications :
 Application 1 :
Soient les instructions suivantes :

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


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]
T2[1]  2 * T1[2] T1[3]  T1[2]

Quel est le contenu de chaque élément des deux tableaux.

T1 22 2 2
1 2 3
T2 10 5 7
1 2 3
 Application 2 :
Soit T un tableau de 5 caractères et V un tableau de 5 entiers de types respectifs TAB1 et TAB2.
1) Déclarer les deux tableaux en algorithme et en PASCAL.

En algorithme :
Tableau de déclaration des nouveaux types

Types
TAB1 = Tableau de 5 caractères
TAB2= Tableau de 5 entier

Tableau de déclaration des objets

Objets Type/Nature
T TAB1
V TAB2
En PASCAL :

TYPE TAB1: ARRAY [1..5] OF CHAR; VAR T : TAB1;


TYPE TAB2: ARRAY [1..5] OF INTEGER; VAR V : TAB2;

Enseignant : AHMED BELHASSEN 28


Algorithmique et programmation

2) Représenter les nouveaux tableaux T et V après exécution successive des opérations d’affectation
suivantes :
T[1]  "D"
V[1]  ORD(T[1])
T[2]  SUCC(T[1])
V[2]  V[1] MOD 2 * 5 T "D" "E" "F" "C" "B"
T[3]  SUCC(T[2]) 1 2 3 4 5
V[3]  V[2] DIV 3 +8 V 68 0 8 67 66
T[4]  PRED(T[1])
1 2 3 4 5
V[4]  ORD(T[4])
T[5]  CHR(66)
V[5]  ORD(T[5])

 Application 3 :
Soit trois tableaux T1, T2, T3 et soit les affectations suivantes :

T1[1]  "Mohammed" T2[3]  SOUS_CHAINE (T1[2],1,3)


T1[2]  " Ben Ali " T2[4]  CONCAT (T2[3], "i")
T1[3]  CONCAT (T1[1] , " ", T1[2] ) T3[1]  POS(T2[2], T2[1])
T2[1]  SOUS_CHAINE (T1[1],3,2) T3[2]  LONG (T1[1])
T1[4]  " nen " T3[3]  POS (T1[2],T1[3])
INSÈRE (T1[4], T2[2],1)

1) Quel est le contenu de chaque élément des trois tableaux.

T1 "Mohammed" " Ben Ali " "Mohammed Ben Ali " " nen "
1 2 3 4
T2 "ha" " nen " "Ben" "Beni"
1 2 3 4
T3 0 8 10
1 2 3

2) Déclarer en PASCAL les tableaux T1, T2 et T3.

En algorithme :
Tableau de déclaration des objets

Objets Type/Nature
T1 Tableau de 4 chaines de caractères
T2 Tableau de 4 chaines de caractères
T3 Tableau de 3 entiers
En PASCAL :

VAR T1: ARRAY [1..4] OF STRING;


T2: ARRAY [1..4] OF STRING;
T3: ARRAY [1..3] OF INTEGER;

Enseignant : AHMED BELHASSEN 29


Algorithmique et programmation

VI) Le tableau à deux dimensions :


a) Activité 11 :
Supposez que vous deviez d ’écrire un programme qui permet de calculer et afficher les moyennes
de 100 élèves relativement aux notes de cinq matières de coefficient 1. Proposez une solution.

Solution :
On constate que pour chaque élève on doit donner cinq notes, donc on doit choisir les structures de
données convenables pour sauvegarder ces notes.
Solution 1 : Utiliser 100 tableaux, pour sauvegarder les notes de chaque élève
Solution 2 : Utiliser une nouvelle structure appelée tableau à deux dimensions ou matrice formée
par des lignes et des colonnes (exemple : Notes (100 x 5)).

Notes (100 x 5)
1 2 3 4 5

1 12 12,5 11 10 15

2 10,5 14,25 … … …

3
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
100 … … … … 19,25

b) Définition :
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.
c) Déclaration :
En algorithme :

Tableau de déclaration des objets

Objets Type/Nature
nom du tableau Tableau de taille et de type-élément
En PASCAL :
VAR nom du tableau : ARRAY [ indmin1 .. indsup1 , indmin2..insup2 ] OF type ;

Enseignant : AHMED BELHASSEN 30


Algorithmique et programmation

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


Exemple :
En algorithme :
Tableau de déclaration des nouveaux types

Types
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
En 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) Accès aux éléments :
On peut accéder à un élément d’une matrice en utilisant la forme suivante : Ident_matrice [Ligne,
Colonne]
Notes [1,2] = 12.5
Notes [l,c] indique l’élément de la matrice Notes dont le numéro de ligne égale à l et le numéro de
colonne est égale à c
On peut lire, écrire et modifier le contenu d’un élément d’une matrice.

Enseignant : AHMED BELHASSEN 31


Algorithmique et programmation

e) Applications :
 Application 1 :
Soient les instructions suivantes :
M[1,1]  5
M[1,3]  M[1,1] + 2
M[2,1]  M[1,3] DIV 2
M[2,2]  2 * M[2,1]
M[3,2]  M[1,1]
M[1,2]  M[2,1] – 1
M[2,3]  M[2,2] + 1
M[3,1]  M[2,1] + 2
M[3,3]  M[2,1] * 5

1) Déclarer la matrice M en algorithme et en PASCAL.


En algorithme :

Tableau de déclaration des objets

Objets Type/Nature
M Tableau 3 colonnes et 3 lignes d’entiers
En PASCAL :
VAR M : ARRAY [ 1..3 , 1..3 ] OF INTEGER ;

2) Quel est le contenu de la matrice M.

5 2 7
M 3 6 7
5 5 15

Enseignant : AHMED BELHASSEN 32


Algorithmique et programmation

Chapitre
Les structures simples
Objectifs spécifiques :

- Utiliser les structures simples pour résoudre des problèmes.


- Présenter les solutions sous forme d’un algorithme puis d’un programme.

Plan du chapitre :

I) L’affectation
II) L’opération de sortie
III) L’opération d’entrée

Temps prévue : 4h

Enseignant : AHMED BELHASSEN 33


Algorithmique et programmation

I) L’affectation :
a) Activité 1 : Évaluez le contenu des variables x, y et z suite à l'exécution de chacune des
instructions suivantes :
Instruction x y z

Indéterminé Indéterminé Indéterminé

x ← 50 0 0 0

50 50 50

Indéterminé Indéterminé Indéterminé

y ← 340 0 0 0

50 340 50

Indéterminé Indéterminé 200

z ← x + y - 190 0 0 x + y - 190

50 340 - 190

67 340 200

x ← 17 17 0 167

33 150 x + y - 190

67 557 200

y←x+z 17 200 167

33 217 x + y - 190

217 557 217

z ← x + 200 17 200 417

67 217 467

17 557 34

z ← x + y - 200 -183 0 251

67 217 651

Enseignant : AHMED BELHASSEN 34


Algorithmique et programmation

b) Définition :
L’opération d’affectation consiste à affecter une expression à une variable.
Cette opération est représentée par une flèche ← orientée vers la gauche.

Variable ← Expression

" ←" Signifie que la variable située à gauche prend (ou reçoit) la valeur de l’expression situé à droite.

Valeur
Variable
Exemples : X ← 15
Y ← 8+2
Z ← X+Y
c) Syntaxe :
En algorithme En PASCAL
Variable ← expression Variable := expression ;
Exemple : Exemple :
X ← a+b X := a+b ;

d) Application :
Soit le tableau de déclaration des objets suivant :

Objet Type / Nature


Prénom Variable de type chaîne de caractère
Numéro Variable de type entier
Alphabet Variable de type caractère
Moyenne Variable de type réel

Compléter le tableau ci-dessous en spécifiant dans quel cas l’affectation est permise ou non
permise en justifiant votre réponse :

Affectation Réponse
Non permise :
Prénom  1243 Prénom est une variable de type chaîne de caractère et
1234 de type entier. Il faut que sont de même type.
Numéro  12 Permise : Numéro et 12 sont de même type entier.
Non permise :
Alphabet "janvier" Alphabet de type caractère et janvier de type chaîne de
caractère.
Moyenne  14.5 Permise : Moyenne et 14.5 sont de même type

Enseignant : AHMED BELHASSEN 35


Algorithmique et programmation

II) Opération de sortie :


a) Activité 2 :
Soit le programme pascal suivant :

PROGRAM act2 ;
USES WINCRT ;
BEGIN Questions :
WRITE (' je ', ' ne ');
WRITE (' retourne pas à la ligne '); 1) Lancer Turbo pascal.
WRITELN ; 2) Taper ce programme.
WRITELN (' je ', ' retourne '); 3) Exécuter ce programme.
WRITE (' à la ligne ') ; 4) Qu’est ce que vous remarquez ?
END.

b) Activité 3 :
Soit le programme pascal suivant :

PROGRAM act3 ;
USES WINCRT ;
VAR n, p : INTEGER ;
x : REAL ; Questions :
ok : BOOLEAN;
BEGIN 1) Lancer Turbo pascal.
n := 3 ; p := 7 ; 2) Taper ce programme.
x :=p/n ; 3) Exécuter ce programme.
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 36


Algorithmique et programmation

c) Définition :
L’action de sortie ou d’écriture permet à l’utilisateur de voir une information sur l’écran.
d) Déclaration :
Exemples
En Algorithme En PASCAL
Affichage d’un
message texte :
Ecrire ("Bonjour") WRITE ('Bonjour') ;
le texte doit être entre
guillemets Bonjour

Affichage du contenu A←58 A :=58 ;


d’une variable Ecrire (A) WRITE (A) ; 58

A :=58 ;
A← 58 A=58
Affichage mixte B :='grande' ;
B← "grande" La
(textes et variables). WRITE('A=',A) ;
Ecrire ("A=", A) valeur
On utilise la virgule WRITE ('la valeur', A,
Ecrire ("la valeur", A,"est la plus", 58 est
comme séparateur 'est la plus grande', B) ;
B) la plus
grand
e
e) Remarques :
 WRITELN provoque un retour à la ligne après l’opération d’affichage.
WRITE ('Bonjour');
WRITE ('Salut'); Bonjour Salut

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.

f) Application : Soient les instructions suivantes : X ← 18.5 , Y ← 6 , Z ← "le premier"


Instructions Traduction en PASCAL Affichage (écran)
Ecrire ("X") WRITE ('X '); X
Ecrire (X) WRITE (X ); 18.5
Ecrire ("le reste est :", X) WRITE (' le reste est : ', X) ; le reste est : 18.5
Ecrire ("l’élève n°", Y,"qui à une WRITE ('l''élève n°' , Y , 'qui à l’élève n° 6 qui à une
moyenne =", X, "est", Z) une moyenne = ' , X , 'est' ,Z moyenne = 18.5 est le
); premier
Ecrire ("T [", Y,"]=", X) WRITE ('T [ ',Y,']=', X) ; T[6]=18.5

Enseignant : AHMED BELHASSEN 37


Algorithmique et programmation

III) Opération d’entrée :


a) Définition :
Cette opération permet de saisir des données à travers un périphérique d’entrée (clavier par défaut).
b) Déclaration :

Exemples
En analyse En algorithme En PASCAL
Lecture sans x = donnée Lire (x) READ (x) ;
commentaire
Ecrire ("commentaire") WRITE ('commentaire') ;
x = donnée ("commentaire") Lire (x) READ (x) ;

Lecture avec Exemple : Exemple : Exemple :


commentaire n=donnée ("Taper un entier") Ecrire("Taper un WRITE('Taper un
entier") entier') ;
Lire (n) READ (n) ;

c) Remarque :
READLN provoque un retour à la ligne après l’opération de lecture.
d) Application :
Pour chaque opération de lecture ou d'écriture, mettre V si l'opération est possible et F dans le cas
contraire.

V Lire (A) F Lire (45) F Lire (A+B)


F Lire ("Bonjour") F Lire ("A =", A) V Ecrire (X+2*Y)
V Ecrire ("A =", A) V Ecrire (A:6:2) V Ecrire ("Saisir un réel")
V Lire (B,o,n,j,o,u,r) V Lire (Bonjour) V Lire (Bon , jour)

Enseignant : AHMED BELHASSEN 38


Algorithmique et programmation

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

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


donné.

Plan :

I) La forme simple réduite


II) La forme alternative
III) La structure de contrôle conditionnelle généralisée
IV) La structure de contrôle conditionnelle à choix

Temps prévue : 6h

Enseignant : AHMED BELHASSEN 39


Algorithmique et programmation

I) La forme simple réduite :


1) Activité 1 :
1) Dans chacune des phrases suivantes, soulignez la condition en rouge et l’action à faire en bleu.
• Si je fais mes leçons, j’aurai de bonnes notes.
• Si je fais beaucoup de TP, je réussirai l’examen pratique.
• Si je fais cet exercice, j’aurai de fortes chances de comprendre les structures
conditionnelles.

2) Pouvez-vous donner la forme générale des conditions utilisées dans ces phrases ?
2) Définition :
Une structure de contrôle conditionnelle est dite à forme simple réduite lorsque le traitement dépend
d'une condition. Si la condition est évaluée à « VRAI », le traitement est exécuté.

Vrai
Condition

Faux
Traitement

Suite du programme
3) Vocabulaire et syntaxe :
En analyse et en algorithme En Pascal

{Initialisation}
{Initialisation} Si condition alors IF condition THEN
Traitement Traitement ;
Fin si

IF condition THEN
Begin
Instruction1 ;
Instruction1 ;

Instruction1 ;
End ;

Enseignant : AHMED BELHASSEN 40


Algorithmique et programmation

4) Application :
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 Programme en PASCAL


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

Enseignant : AHMED BELHASSEN 41


Algorithmique et programmation

II) La forme alternative :


1) Activité 2 :
1) Dans chacune des phrases suivantes, soulignez la conditionen rouge, l’action à fairesi la condition
est satisfaite en vert et l’action à fairesi la condition n’est pas satisfaite en bleu.

• Si je fais mes leçons, j’aurai de bonnes notes sinon j’aurai de mauvaises notes.
• S’il fait beau, je vais me promener sinon je resterai chez moi.

2) Pouvez-vous donner la forme générale des conditions utilisées dans ces phrases ?
2) Définition :
Une structure de contrôle conditionnelle est dite à forme alternative lorsque le traitement dépend
d'une condition à deux états : si la condition est évaluée à « VRAI », le premier traitement est exécuté ;
si la condition est évaluée à « FAUX », le second traitement est exécuté.

Faux Vrai
Condition

Traitement 2 Traitement 1

Suite du programme
3) Vocabulaire et syntaxe :
En analyse et en algorithme En Pascal

{Initialisation} {Initialisation} ;
Si condition alors IF condition THEN
Traitement1 Traitement1
Sinon ELSE
Traitement2 Traitement2 ;
Fin Si
IF condition THEN
Begin
Instruction1 ;

Instruction N ;
End
ELSE
Begin
Instruction1 ;

Instruction N ;
End;

Enseignant : AHMED BELHASSEN 42


Algorithmique et programmation

4) Application :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PARITÉ permettant de
saisir un entier x et de déterminer sa parité.
Solution :
Analyse du problème :
Nom : PARITÉ
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 PARITÉ
TDO
Objets Type/Nature
nature Chaine
x,r Entier

Algorithme Programme en PASCAL


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

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


1) Activité 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MENTION permettant
d’affiche la mention de l’élève selon son moyenne. Sachant que la mention est le suivant :

Moyenne ] ] ] ]
10 12 14 16

Faible Passable
Bien Très Bien
Assez Bien

Enseignant : AHMED BELHASSEN 43


Algorithmique et programmation

Solution :
Vrai
Si moy < 10 Mention ← "Faible"
moy <12
Faux Mention ← "Passable"

Mention ← "Assez Bien"

Constatations :
On ne peut ni utiliser la structure conditionnelle simple réduite ni alternative et par suite c’est une
nouvelle structure appelée structure conditionnelle généralisée.

2) Définition :
Une structure de contrôle conditionnelle est dite généralisée lorsqu'elle permet de résoudre des
problèmes comportant plus de deux traitements en fonction des conditions.
L'exécution d'un traitement entraîne automatiquement la non exécution des autres traitements.
3) Vocabulaire et syntaxe :
En analyse et en algorithme En Pascal
{Initialisation} {Initialisation} ;
Si condition1 Alors IF condition1 THEN
{Traitement1} {Traitement1}
Sinon ELSE
SI condition2 Alors IF condition2 THEN
{Traitement2} {Traitement2}
…………….. ……………..
…………….. ……………..
Sinon ELSE
SI conditionN-1 Alors IF conditionN-1 THEN
{Traitement N-1} {Traitement N-1}
Sinon ELSE
{Traitement N} {Traitement N} ;
Fin si

4) Application :
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 :
o ″gaz″ si la température dépasse 100°.
o ″liquide″ si la température est entre 0° et 100°.
o ″glace″ si la température est inférieure à 0°.

Enseignant : AHMED BELHASSEN 44


Algorithmique et programmation

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
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.

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


1) Activité 4 :
Supposant qu’on a un distributeurde boisson (café, jus, thé, eau minérale, boisson gazeuse).
Pour avoir de la boisson, il faut appuyer sur la touche convenable à cetteboisson.
Comment ce distributeur va-t-il fonctionner ?
2) Définition :
Une structure de contrôle conditionnelle est dite à choix lorsque le traitement dépend de la valeur
que prendra le sélecteur. Ce sélecteur doit être de type scalaire (entier ou caractère).

Enseignant : AHMED BELHASSEN 45


Algorithmique et programmation

3) Vocabulaire et syntaxe :
En analyse et en algorithme En Pascal
{Initialisation} {Initialisation} ;
Selon sélecteur faire CASE sélecteur OF
valeur1 :<traitement1> valeur1 :<traitement1> ;
valeur2 :<traitement2> valeur2 :<traitement2> ;
valeur3, valeur4 :<traitement3> valeur3, valeur4 :<traitement3> ;
[valeur5.. valeur10] :<traitement4> [valeur5.. valeur10] :<traitement4> ;
…………. ………… …………. …………
valeur N :<traitement N> valeur N :<traitement N>
Sinon ELSE
<traitement R> <traitement R> :
Fin selon END ;

4) 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.
5) Application :
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

Enseignant : AHMED BELHASSEN 46


Algorithmique et programmation

Algorithme Programme 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 'A' , 'a' : sai := ' automne ';
saison" 'H' , 'h': sai := ' hiver ';
Fin selon 'P' , 'p' : sai := ' printemps ';
3) Ecrire (sai) ELSE
4) Fin SAISON sai := 'Lettre ne correspond pas à une saison';
END ;
WRITELN (sai) ;
END.

Enseignant : AHMED BELHASSEN 47


Algorithmique et programmation

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

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


donné.

Plan :

A) La structure de contrôle itérative complète


B) Les structures de contrôle itératives à condition d’arrêt
I) La structure répéter…jusqu’à…
II) La structure tant que…faire…

Temps prévue : 8h

Enseignant : AHMED BELHASSEN 48


Algorithmique et programmation

A) La structure de contrôle itérative complète :


1) Activité 1 :
Régardons l’exemple suivant :

Quel est l’action élémentaire à faire à chaque fois ?


Quel est le nombre de tours à effectuer dans l’exemple ci-dessus ?
Dans quel cas les élèves s’arrêtent de tourner autour du stade ?

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

3) Vocabulaire et syntaxe :
En analyse et en algorithme En Pascal

{Initialisation} {Initialisation}
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 ;

4) 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 :
o Incrémenté (augmenté) d’une unité si Vi < Vf
o Décrémenté (retranché) d’une unité si Vi > Vf

Enseignant : AHMED BELHASSEN 49


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 Solution :


1) Ecrire (″n=″), lire (n)
2) x ← 0 i) x=15 , y=120 , i=5
3) y ← 1 ii) x=1 , y=1, i=1
4) Pour i de 1 à n faire iii) x=0 , y=1 , i=0
x ← x+i
y←y*i
Fin pour
5) Ecrire (x, y, i)
6) Fin application

 Application 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISEURS qui permet de
lire un entier positif n et d’afficher tous ses diviseurs.

Solution :
Analyse du problème :
Nom : DIVISEURS
Résultat : Aff
Aff=[ ] pour i de 1 à (N DIV 2) faire
si (N MOD i = 0) alors
Ecrire( i )
fin si
fin pour
N = donnée ("Entrer un entier positif")
Fin DIVISEURS

TDO
Objets Type/Nature
N, i Entier

Algorithme Programme en PASCAL


0) Début DIVISEURS PROGRAM PARFAIT ;
1) Ecrire ("Entrer un entier positif "), lire(n) USES WINCRT ;
2) pour i de 1 à (N DIV 2) faire VAR N,i : INTEGER ;
si (N MOD i = 0) alors BEGIN
Ecrire( i ) WRITE ('Entrer un entier positif '); READLN (n);
fin si FOR i :=1 TO (N DIV 2) DO
fin pour IF n MOD i=0 THEN
WRITELN(i);
3) Fin DIVISEURS END.

Enseignant : AHMED BELHASSEN 50


Algorithmique et programmation

 Application 3 :
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
Objets Type/Nature
mc , som Réel
i Entier
moy TAB

Algorithme Programme 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 51


Algorithmique et programmation

B) Les structures de contrôle itératives à condition d'arrêt :


I) La structure répéter…jusqu’à…
1) Activité 2 :
Régardons l’exemple suivant :

Quel est le nombre de tours à effectuer dans l’exemple ci-dessus ?


Dans quel cas les élèves s’arrêtent de tourner autour du stade ?

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.

3) Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal

{Initialisation} {Initialisation}
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 52


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 = [ Fact1 ] Si (n<> 0) alors
Pour i de n à 1 faire
FactFact*i
Fin Pour
Fin si
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >=0 )

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

Algorithme Programme 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) Fact1 WRITE ('N = ');
Si (n<> 0) alors READLN(n);
Pour i de n à 1 faire UNTIL n >=0;
FactFact*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 53


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 = [ s0 , qn ] Répéter
qq 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
Objets Type/Nature
n,q,s Entier

Algorithme Programme 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) Fact1 WRITE ('N = ');
Si (n<> 0) alors READLN(n);
Pour i de n à 1 faire UNTIL n >=0;
FactFact*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.

Enseignant : AHMED BELHASSEN 54


Algorithmique et programmation

II) La structure tant que…faire…


1) Activité 3 :
Régardons l’exemple suivant :

Quel est le nombre de tours à effectuer dans l’exemple ci-dessus ?


Dans quel cas les élèves s’arrêtent de tourner autour du stade ?
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.

3) Vocabulaire et syntaxe :

En analyse et en algorithme En Pascal

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

Enseignant : AHMED BELHASSEN 55


Algorithmique et programmation

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
Solution :
1) lire (c)
2) Tant que (c<>1) faire
i) c=
Si (c MOD 2 =0) alors
ii) c=
c ← c DIV 2
iii) c=
Sinon
c ← (3*c) + 1
Fin si
Ecrire (c)
Fin Tant que
3) Ecrire (c)
4) Fin application

 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) TDO
s = [ s0 , n=donnée(″nombre =″)] Tant que n<>-1 faire Objets Type/Nature
ss+n n,s Entier
n=donnée
Fin tant que
Fin COMPTE

Algorithme Programme en PASCAL


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

Enseignant : AHMED BELHASSEN 56


Algorithmique et programmation

Chapitre
Les sous programmes
Objectifs spécifiques :

- Décomposer un problème en modules.


- Présenter les solutions sous forme de procédures et de fonctions.
- Ecrire des algorithmes et des programmes solutions.

Plan :

I) L’analyse modulaire
II) Les fonctions
III) Les procédures
IV) Déclaration, accès aux objets et modes de transmission

Temps prévue : 8h

Enseignant : AHMED BELHASSEN 57


Algorithmique et programmation

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.

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.

Enseignant : AHMED BELHASSEN 58


Algorithmique et programmation

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
TDO
Objets 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

Enseignant : AHMED BELHASSEN 59


Algorithmique et programmation

Programme 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).

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

Enseignant : AHMED BELHASSEN 60


Algorithmique et programmation

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) Applications :
 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’) ;

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.
 Application 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL_SOMME

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

Enseignant : AHMED BELHASSEN 61


Algorithmique et programmation

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
Objets Type/Nature
i,f entier
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

Programme 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.

Enseignant : AHMED BELHASSEN 62


Algorithmique et programmation

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 TDO
pour i de 1 à m faire Objets Type/Nature
Ecrire (mot2) n,m,i Entier
fin pour
mot1, mot2 Chaine
m= donnée (″ m= ″)
n = donnée (″ n= ″)
mot2 = donnée (″ mot2= ″)
mot1 = donnée (″ mot1= ″)
Fin AFFICHAGE

Algorithme Programme en 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.

Enseignant : AHMED BELHASSEN 63


Algorithmique et programmation

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
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) Applications :
 Application 1 :
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 ) ;

Enseignant : AHMED BELHASSEN 64


Algorithmique et programmation

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

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


Solution :
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
TDOG
Objets Type/Nature
n,m Entier
mot1, mot2 Chaine
Affiche Procédure
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
Objets 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

Enseignant : AHMED BELHASSEN 65


Algorithmique et programmation

Programme 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 66


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 67


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 :

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 :

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 68


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é

d) Application :
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 69


Algorithmique et programmation

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

Déclaration des P. Effectifs P. Formels


paramètres formels Action Type du passage
x y i j
A l'appel d’Essai …….. …….. …… …….. ……..……..……..
(i , j : INTEGER)
Après exécution d’Essai …….. …….. …… …….. ……..……..……..

A l'appel d’Essai …….. …….. …… …….. ……..……..……..


(VAR i, j : INTEGER )
Après exécution d’Essai …….. …….. …… …….. ……..……..……..

( VAR i : INTEGER ; A l'appel d’Essai …….. …….. …… …….. ……..……..……..


j : INTEGER) Après exécution d’Essai …….. …….. …… …….. ……..……..……..

( i : INTEGER ; A l'appel d’Essai …….. …….. …… …….. ……..……..……..


VAR j : INTEGER ) Après exécution d’Essai …….. …….. …… …….. ……..……..……..

Solution :
Déclaration des P. Effectifs P. Formels
paramètres formels Action Type du passage
x y i j
A l'appel d’Essai 2 3 2 3 i : Valeur
(i , j : INTEGER)
Après exécution d’Essai 2 3 6 12 j : Valeur
A l'appel d’Essai 2 3 2 3 i : Variable
(VAR i, j : INTEGER )
Après exécution d’Essai 6 12 6 12 j : Variable

( VAR i : INTEGER ; A l'appel d’Essai 2 3 2 3 i : Variable


j : INTEGER) Après exécution d’Essai 6 3 6 12 j : Valeur

( i : INTEGER ; A l'appel d’Essai 2 3 2 3 i : Valeur


VAR j : INTEGER ) Après exécution d’Essai 2 12 6 12 j : Variable

Enseignant : AHMED BELHASSEN 70


Algorithmique et programmation

Chapitre
Les algorithmes
avancées
Objectifs spécifiques :

- Utiliser l’analyse modulaire pour résoudre des problèmes de tri et de recherche.

Plan :

A) Les algorithmes de tri


B) Les algorithmes de recherche

Temps prévue : 8h

Enseignant : AHMED BELHASSEN 71


Algorithmique et programmation

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

c) Analyse du problème :
On pourra utiliser les modules suivants :
o Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.
o Procédure Remplir(T, N) : remplir un tableau T par N éléments.
o Procédure Tri_selection(T, N) : trier le tableau T.
o Fonction Premposmin (i, N, T) : rechercher la première position du minimum.
o Procédure Permut (A, B) : permuter le contenu de deux variables.
o Procédure Affiche (T, N) : afficher le tableau T.

Enseignant : AHMED BELHASSEN 72


Algorithmique et programmation

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

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

Enseignant : AHMED BELHASSEN 73


Algorithmique et programmation

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

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

Enseignant : AHMED BELHASSEN 74


Algorithmique et programmation

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

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.

Enseignant : AHMED BELHASSEN 75


Algorithmique et programmation

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;
BEGIN
FOR i := 1 TO y DO
BEGIN
ppm :=Premposmin ( i , vec , y) ;

Enseignant : AHMED BELHASSEN 76


Algorithmique et programmation

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 77


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

10 -4 15 7 -2

10 -4 7 15 -2

10 -4 7 -2 15

-4 10 7 -2 15

-4 7 10 -2 15

-4 7 -2 10 15

-4 7 -2 10 15

-4 -2 7 10 15

c) Analyse du problème :
On pourra utiliser les modules suivants :
o Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.
o Procédure Remplir(T, N) : remplir un tableau T par N éléments.
o Procédure Tri_bulles (T, N) : trier le tableau T.
o Procédure Permut (A, B) : permuter le contenu de deux variables.
o Procédure Affiche (T, N) : afficher le tableau T.

Enseignant : AHMED BELHASSEN 78


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 79


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

Enseignant : AHMED BELHASSEN 80


Algorithmique et programmation

REPEAT
Echange := FALSE ;
FOR i := 1 TO y-1 DO
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 81


Algorithmique et programmation

c) Analyse du problème :
On pourra utiliser les modules suivants :
o Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.
o Procédure Remplir(T, N) : remplir un tableau T par N éléments.
o Procédure Tri_insertion (T, N) : trier le tableau T.
o 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 82


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

Enseignant : AHMED BELHASSEN 83


Algorithmique et programmation

BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
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 84


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 :
o Procédure Lecture(N) : saisir (lire) le nombre d’éléments de T.
o Procédure Remplir (T, N) : remplir un tableau T par N éléments.
o Procédure Saisir_x (x) : qui lit et valide x, x étant la variable à rechercher dans T.
o 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 85


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

Enseignant : AHMED BELHASSEN 86


Algorithmique et programmation

Traduction en PASCAL
PROGRAM Recherche_seq ;
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;

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) ;

Enseignant : AHMED BELHASSEN 87


Algorithmique et programmation

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.

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 :
o Procédure Lecture (N) : saisir (lire) le nombre d’éléments de T.
o Procédure Remplir (T, N) : remplir un tableau T par N éléments.
o Procédure Saisir_x (x) : qui lit et valide x, x étant la variable à rechercher dans T.
o Procédure Tri (T, N) : qui effectue le tri du tableau T.
o Fonction Dicho(T, N, x) : qui permet de chercher l’existence de x dans le tableau T.

Enseignant : AHMED BELHASSEN 88


Algorithmique et programmation

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

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

Enseignant : AHMED BELHASSEN 89


Algorithmique et programmation

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, win ← nb] Ré pé ter
mil← (deb + win) DIV 2
si vec [ mil ] > y alors
fin ← mil - 1
sinon si v[Mil] < y alors
deb ← mil + 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

Algorithme de la fonction Dicho :


0) DEF FN Dicho (vec : TAB ; nb, y : entier) : booléen
1) trouve ← faux , deb ←1, win ← nb
Répéter
mil← (deb + win) DIV 2
si vec [ mil ] > y alors
fin ← mil - 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

Enseignant : AHMED BELHASSEN 90


Algorithmique et programmation

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 ;
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 ;

Enseignant : AHMED BELHASSEN 91


Algorithmique et programmation

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 92


Algorithmique et programmation

Série d’exercices n°1


Les structures de données
-Les types numériques-
Exercice 1 :
Evaluez les expressions suivantes :
1) 17 - 7 * 2
2) (17 - 7) * 2
3) 15 DIV 2
4) 15 MOD 2
5) 150 DIV 2 MOD 2
6) 157 MOD 4 DIV 2
7) 15 / 2
Exercice 2 :
Donner les traces de l’algorithme suivant :
0) Début séquence
1) a 10 Séquence a b c
2) b 20 1 ………….. ………….. …………..
3) c  2 2 ………….. ………….. …………..
4) a  a+b/3 3 ………….. ………….. …………..
5) c  b MOD 3 * 4 DIV c
4 ………….. ………….. …………..
6) FIN séquence
5 ………….. ………….. …………..
Exercice 3 :
Evaluez les expressions suivantes :
a) Pour A=10, B=15 et C=3 b) Pour A=100 B=5 et C=8
1) A * (B + C) 1) A DIV (B MOD C)
2) A * (B - C) 2) A MOD (C DIV B)
3) A + (B * C) 3) A MOD (B MOD C)
4) A - (B * C) 4) A DIV (C DIV B)
5) A + (B - C)
Exercice 4 :
Déterminer la valeur de A pour chaque cas :
A = 8 – (5 * 4 DIV 3) MOD 4 + (10 – 7)
A = 8 + 5 MOD 4 * 3 DIV 4 – (10 – 7)
A = 10 DIV 2 * 10 MOD 2
A = (13 DIV 3 * 2) + (13 MOD 3 * 2)

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

Exercice 5 :
Donner la valeur de S pour chacune des expressions arithmétiques suivantes :
S = 13 + 52 MOD 10 * 3 - 5 / 2
S = 10 + 62 MOD (10 * 2) + 5 / 2

Exercice 6 :
Donner le résultat de chacune des expressions suivantes (sachant que x = 20) :
a  10 + 20 * 5 - 2
bx/4+2*6
c  20 DIV 3 + 4
d  123 MOD 5 DIV 2
ea/(4+2)*6
Exercice 7 :
Ecrire les formules suivantes en algorithmique et en Pascal :

A= B =| x3| C= D = x4+4x3+x2+2x+1

Exercice 8 :
Supposons que a , b , c et d sont des variables de type numérique auxquelles on assigne les valeurs
suivantes :
Variable Type Valeur
a réel 5.7
b réel 8.2
c entier 7
d entier 4

On utilise ces variables dans les expressions numériques suivantes. Dans chaque cas, déterminer le
type de l'expression et la valeur qu'elle représente :

Expression Type Valeur


SQR (a + b) / (c + d) ………….. …………..
6 * (c MOD d) ………….. …………..
6.0 * (c MOD d) ………….. …………..
(c DIV d) + (c MOD d) ………….. …………..
(c MOD d) / 2 ………….. …………..
TRUNC (a –b) ………….. …………..
TRUNC (a – b) DIV c ………….. …………..
(c DIV d) / (-a) ………….. …………..
Exercice 9 :
Soit la séquence d’instructions suivantes :
X5
Y  X/2 Présenter le tableau de déclaration des objets utilisés dans cette séquence et
R  TRONC (Y) justifier le choix de type.
Z  X MOD 2
W  X+Y

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

Correction de série
d’exercices n°1
Les structures de données
-Les types numériques-
Exercice 1 :
Evaluez les expressions suivantes :
1) 17 - 7 * 2 = 17 – 14
=3

2) (17 - 7) * 2 = 10 * 2
= 20

3) 15 DIV 2 =7

4) 15 MOD 2 =1

5) 150 DIV 2 MOD 2 = 75 MOD 2


=1

6) 157 MOD 4 DIV 2 = 1 DIV 2


=0

7) 15 / 2 = 7.5

Exercice 2 :
Donner les traces de l’algorithme suivant :
0) Début séquence
1) a 10 Séquence a b c
2) b 20 1 10 - -
3) c  2 2 10 20 -
4) a  a+b/3
3 10 20 2
5) c  b MOD 3 * 4 DIV c
4 10 20 2
6) FIN séquence
5 10 20 4

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

Exercice 3 :
Evaluez les expressions suivantes :

a) Pour A=10, B=15 et C=3

1) A * (B + C) = 10 * (15 + 3)
= 10 * 18
= 180

2) A * (B - C) = 10 * (15 - 3)
= 10 * 12
= 120

3) A + (B * C) = 10 + (15 * 3)
= 10 + 45
= 55

4) A - (B * C) = 10 - (15 * 3)
= 10 - 45
= - 35

5) A + (B - C) = 10 + (15 - 3)
= 10 + 12
= 22

b) Pour A=100 B=5 et C=8

1) A DIV (B MOD C) = 100 DIV (5 MOD 8)


= 100 DIV 5
= 20

2) A MOD (C DIV B) = 100 MOD (8 DIV 5)


= 100 MOD 1
=0

3) A MOD (B MOD C) = 100 MOD (5 MOD 8)


= 100 MOD 5
=0

4) A DIV (C DIV B) = 100 DIV (8 DIV 5)


= 100 DIV 1
= 100
Exercice 4 :
Déterminer la valeur de A pour chaque cas :

A = 8 – (5 * 4 DIV 3) MOD 4 + (10 – 7) = 8 – (20 DIV 3) MOD 4 + 3


= 8 – 6 MOD 4 + 3
=8–2+3
=6+3
=9

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

A = 8 + 5 MOD 4 * 3 DIV 4 – (10 – 7) = 8 + 1 * 3 DIV 4 – 3


= 8 + 3 DIV 4 – 3
=8+0–3
=8–3
=5

A = 10 DIV 2 * 10 MOD 2 = 5 * 10 MOD 2


= 50 MOD 2
=0

A = (13 DIV 3 * 2) + (13 MOD 3 * 2) = (4 * 2) + (1 * 2)


=8+2
= 10
Exercice 5 :
Donner la valeur de S pour chacune des expressions arithmétiques suivantes :
S = 13 + 52 MOD 10 * 3 - 5 / 2 = 13 + 2 * 3 - 5/ 2
= 13 + 6 - 5/ 2
= 19 – 2.5
= 16.5

S = 10 + 62 MOD (10 * 2) + 5 / 2 = 10 + 62 MOD 20 + 5/ 2


= 10 + 2 + 2.5
= 12 + 2.5
= 14.5

Exercice 6 :
Donner le résultat de chacune des expressions suivantes (sachant que x = 20) :
a  10 + 20 * 5 - 2 = 10 + 100 – 2
= 110 – 2
= 108

bx/4+2*6 = 20 / 4 + 2 * 6
= 5.0 + 2 * 6
= 5.0 + 12
= 17.0

c  20 DIV 3 + 4 =6+4
= 10

d  123 MOD 5 DIV 2 = 3 DIV 2


=1

ea/(4+2)*6 = 108 / ( 4 + 2 ) * 6
= 108 / 6 * 6
= 18 * 6
= 108

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Exercice 7 :
Ecrire les formules suivantes en algorithmique et en Pascal :

A= B =| x3| C= D = x4+4x3+x2+2x+1

Équivalents

A= RACINE_CARRÉ (ABS (x + 4)/2)


A= SQRT (ABS (x + 4)/2)

B= ABS (CARRÉ (x) * x)


B= ABS (SQR (x) * x)

C= RACINE_CARRÉ (CARRÉ (x) + CARRÉ (y)) / CARRÉ (x + 2)


C= SQRT (SQR (x) + SQR (y)) / SQR (x + 2)

D= (CARRÉ (x) * CARRÉ (x)) + (4 * x * CARRÉ (x)) + CARRÉ (x) + 2 * x + 1


D= (SQR (x) * SQR (x)) + (4 * x * SQR (x)) + SQR (x) + 2 * x + 1

Exercice 8 :
Supposons que a , b , c et d sont des variables de type numérique auxquelles on assigne les valeurs
suivantes :
Variable Type Valeur
a réel 5.7
b réel 8.2
c entier 7
d entier 4

On utilise ces variables dans les expressions numériques suivantes. Dans chaque cas, déterminer le
type de l'expression et la valeur qu'elle représente :

Expression Type Valeur


= SQR (5.7 + 8.2) / (7 + 4)
= SQR (13.9) / 11
SQR (a + b) / (c + d) Réel = 193.21 / 11
= 17.56
= 6 * (7 MOD 4)
6 * (c MOD d) Entier =6*3
= 18
= 6.0 * (7 MOD 4)
6.0 * (c MOD d) Réel = 6.0 * 3
= 18.0
= (7 DIV 4) + (7 MOD 4)
(c DIV d) + (c MOD d) Entier =1+3
=4

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

= (7 MOD 4) / 2
(c MOD d) / 2 Réel =3/2
= 1.5
= TRUNC (5.7 – 8.2)
TRUNC (a –b) Entier = TRUNC (- 2.5)
=-2
= TRUNC (5.7 – 8.2) DIV 7
= TRUNC (- 2.5) DIV 7
TRUNC (a – b) DIV c Entier
= - 2 DIV 7
=0
= (7 DIV 4) / (- 5.7)
(c DIV d) / (-a) Réel = 1 / (- 5.7)
= - 0.17
Exercice 9 :
Soit la séquence d’instructions suivantes :
X5
YX/2 Présenter le tableau de déclaration des objets utilisés dans cette séquence et
RTRONC (Y) justifier le choix de type.
Z X MOD 2
WX+Y

Expression Type Valeur


X5 Entier X=5
Y  X/2 Y = 5/2
Réel
= 2.5
R  TRONC (Y) R = TRONC (2.5)
Entier
=2
Z  X MOD 2 Z = 5 MOD 2
Entier
=2
W = 5 + 2.5
W  X+Y Réel
= 7.5

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

Série d’exercices n°2


Les structures de données
-Le type booléen-
Exercice 1 :
Evaluer les expressions suivantes:
a) 8 - 5 * 4 DIV 3 MOD 4 – (10 – 7)
b) 8 + 5 MOD 4 * 3 DIV 4 – (10 – 7)
c) (4 <= 4) AND (4< 4) OR (4 = 4) AND (4 <> 4)
d) (4 <= 4) OR (4< 4) AND (4 = 4) OR (4 <> 4)
e) (- 5<= 3) OR (1 > 3)
f) (5 > 3) XOR (-10 < 0)

Exercice 2 :
Evaluer Les expressions suivantes sachant que a=5, b=8, c=-2 :
A = NON ((a<b) ET NON (b>c))
B = (a<b) OU (a<c) ET (b<c)
C = a + 4 * b – 2 * (20 MOD c +3)
D = NON (a<b) ET (c>b)

Exercice 3 :
Evaluer les expressions logiques suivantes pour les différentes valeurs de x et y.

x y Fonctions logiques Résultat


2 6 ((x<=4) ET (y>5)) OU ((y<= 0) OU (x>= 1)) ………………..
0 1 ((x<=2) ET (x>=0)) OU (x = 5) ………………..
3 1 ( x-y>0) ET ((x+y) < 3*x) ………………..

Exercice 4 :
Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A , B , C et D
pour les deux cas suivants :

1) ( a,b,c,d )=(5,7,2,7)
2) ( a,b,c,d )=(4,2,1,9)
A := (a<b) AND (c>d)
B := (b=d) AND NOT(a<c)
C := NOT ((c+a=<b) OR (a>d))
D := (a+c <d) XOR (b*d>c)

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Exercice 5 :
Soit les déclarations suivantes :
Variable Type Valeur
X Réel 2.2
Y Réel 0.2
N Entier 20
Z Entier 2
B Booléen Vrai

Soient les expressions suivantes :

N1 ← (X + Y) * (X - Y) / (X - Z)
N2 ←1.2 * (N MOD Z)
N3 ←N DIV Z + Z MOD N
N4 ←N3 * Z DIV 4 * Z MOD N – N2
N5 ←NON ((N1=<12) OU (N3>=5) ET (N2 <>10)) ET B

En utilisant les valeurs des variables X , Y , Z , N et B , dans chaque cas , déterminer le type ainsi que
les valeurs de chacune des variables Ni.

Exercice 6 :
Evaluer les expressions suivantes :
A  (5<8) OU (TRONC (6.95) < 3)
B  (ARRONDI (-4.5) <= 5) ET (1>3)
C  NON ((5>3) OUex (10<30))
D  (2<18) OUex (-10 < TRONC (0.25))
E  (25>=3) OU (NON (-3<31))
F  NON ((3>12) ET (21< ARRONDI (-3.23)))

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

Correction de série
d’exercices n°2
Les structures de données
-Le type booléen-
Exercice 1 :
Evaluer les expressions suivantes :

a) 8 - 5 * 4 DIV 3 MOD 4 – (10 – 7) = 8 - 20 DIV 3 MOD 4 – 3


= 8 - 6 MOD 4 – 3
=8-2–3
=3

b) 8 + 5 MOD 4 * 3 DIV 4 – (10 – 7) = 8 + 1 * 3 DIV 4 – 3


= 8 + 3 DIV 4 – 3
=8+0–3
=5

c) (4 <= 4) AND (4< 4) OR (4 = 4) AND (4 <> 4) = TRUE AND FALSE OR TRUE AND FALSE
= FALSE OR FALSE
= FALSE

d) (4 <= 4) OR (4< 4) AND (4 = 4) OR (4 <> 4) = TRUE OR FALSE AND TRUE OR FALSE


= TRUE OR FALSE OR FALSE
= TRUE OR FALSE
= TRUE

e) (- 5<= 3) OR (1 > 3) = TRUE OR FALSE


= TRUE

f) (5 > 3) XOR (-10<0) = TRUE XOR TRUE


= FALSE

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

Exercice 2 :
Evaluer Les expressions suivantes sachant que a=5, b=8, c=-2 :
A = NON ((a<b) ET NON (b>c)) = NON ((5<8) ET NON (8>-2))
= NON (VRAI ET NON (VRAI))
= NON (VRAI ET FAUX)
= NON (VRAI)
= FAUX

B = (a<b) OU (a<c) ET (b<c) = (5<8) OU (5<-2) ET (8<-2)


= VRAI OU FAUX ET FAUX
= VRAI OU FAUX
= VRAI

C = a + 4 * b – 2 * (20 MOD c +3) = 5 + 4 * 8 – 2 * (20 MOD -2 +3)


= 5 + 4 * 8 – 2 * (0 +3)
=5+4*8 –2*3
= 5 + 32 – 6
= 37 – 6
= 31
D = NON (a<b) ET (c>b) = NON (5<8) ET (-2>8)
= NON (VRAI) ET FAUX
= FAUX ET FAUX
= FAUX
Exercice 3 :
Evaluer les expressions logiques suivantes pour les différentes valeurs de x et y.

x y Fonctions logiques Résultat


2 6 ((x<=4) ET (y>5)) OU ((y<= 0) OU (x>= 1)) VRAI
0 1 ((x<=2) ET (x>=0)) OU (x = 5) VRAI
3 1 ( x-y>0) ET ((x+y) < 3*x) VRAI

((x<=4) ET (y>5)) OU ((y<= 0) OU (x>= 1)) = ((2<=4) ET (6>5)) OU ((6<= 0) OU (2>= 1))
= (VRAI ET VRAI) OU (FAUX OU VRAI)
= VRAI OU VRAI
= VRAI

((x<=2) ET (x>=0)) OU (x = 5) = ((0<=2) ET (0>=0)) OU (0 = 5)


= (VRAI ET VRAI) OU FAUX
= VRAI OU FAUX
= VRAI
( x-y>0) ET ((x+y) < 3*x)
= (3-1>0) ET ((3+1) < 3*3)
= (2>0) ET (4 < 9)
= VRAI ET VRAI
= VRAI

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

Exercice 4 :
Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A , B , C et D
pour les deux cas suivants :

A := (a<b) AND (c>d) 1) ( a,b,c,d )=(5,7,2,7)


A = (5<7) AND (2>7)
= TRUE AND FALSE
= FALSE

2) ( a,b,c,d )=(4,2,1,9)
A = (4<2) AND (1>9)
= FALSE AND FALSE
= FALSE

B := (b=d) AND NOT(a<c) 1) ( a,b,c,d )=(5,7,2,7)


B = (7=7) AND NOT(5<2)
= TRUE AND NOT(FALSE)
= TRUE AND TRUE
= TRUE

2) ( a,b,c,d )=(4,2,1,9)
B = (2=9) AND NOT(4<1)
= FALSE AND NOT(FALSE)
= FALSE AND TRUE
= FALSE

C := NOT ((c+a=<b) OR (a>d)) 1) ( a,b,c,d )=(5,7,2,7)


C = NOT ((2+5=<7) OR (5>7))
= NOT (TRUE OR FALSE)
= NOT (TRUE)
= FALSE

2) ( a,b,c,d )=(4,2,1,9)
C = NOT ((1+4=<2) OR (4>9))
= NOT (FALSE OR FALSE)
= NOT (FALSE)
= TRUE

D := (a+c <d) XOR (b*d>c) 1) ( a,b,c,d )=(5,7,2,7)


D = (5+2<7) XOR (7*7>2)
= (7<7) XOR (49>2)
= FALSE XOR TRUE
= TRUE

2) ( a,b,c,d )=(4,2,1,9)
D = (4+1<9) XOR (2*9>1)
= (5<9) XOR (18>1)
= TRUE XOR TRUE
= FALSE

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

Exercice 5 :
Soit les déclarations suivantes :
Variable Type Valeur
X Réel 2.2
Y Réel 0.2
N Entier 20
Z Entier 2
B Booléen Vrai

Soient les expressions suivantes :

N1 ← (X + Y) * (X - Y) / (X - Z)
N2 ←1.2 * (N MOD Z)
N3 ←N DIV Z + Z MOD N
N4 ←N3 * Z DIV 4 * Z MOD N – N2
N5 ←NON ((N1=<12) OU (N3>=5) ET (N2 <>10)) ET B

En utilisant les valeurs des variables X , Y , Z , N et B , dans chaque cas , déterminer le type ainsi que
les valeurs de chacune des variables Ni.

N1 ← (X + Y) * (X - Y) / (X - Z) N1 = (2.2 + 0.2) * (2.2 - 0.2) / (2.2 - 2)


= 2.4 * 2 / 0.2
= 4.8 / 0.2
= 24.0 Réel

N2 ←1.2 * (N MOD Z) N2 = 1.2 * (20 MOD 2)


= 1.2 * 0
= 0 Réel

N3 ←N DIV Z + Z MOD N N3 = 20 DIV 2 + 2 MOD 20


= 10 + 2
= 12 Entier
N4 ←N3 * Z DIV 4 * Z MOD N – N2 N4 = 12 * 2 DIV 4 * 20 MOD 2 – 0
= 24 DIV 4 * 20 MOD 2 – 0
= 6 * 20 MOD 2
= 120 MOD 2
= 0 Entier
N5 ←NON ((N1=<12) OU (N3>=5) ET (N2 <>10)) ET B N5 = NON ((24=<12) OU (12>=5) ET (0
<>10)) ET Vrai
= NON (FAUX OU VRAI ET VRAI) ET VRAI
= NON (VRAI ET VRAI) ET VRAI
= NON (VRAI) ET VRAI
= FAUX ET VRAI
= FAUX Booléen

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

Exercice 6 :
Evaluer les expressions suivantes :
A  (5<8) OU (TRONC (6.95) < 3)
B  (ARRONDI (-4.5) <= 5) ET (1>3)
C  NON ((5>3) OUex (10<30))
D  (2<18) OUex (-10 < TRONC (0.25))
E  (25>=3) OU (NON (-3<31)
F  NON ((3>12) ET (21< ARRONDI (-3.23))

A  (5<8) OU (TRONC (6.95) < 3) A = (5<8) OU (TRONC (6.95) < 3)


= (5<8) OU (6<3)
= VRAI OU FAUX
= VRAI

B  (ARRONDI (-4.5) <= 5) ET (1>3) B = (ARRONDI (-4.5) <= 5) ET (1>3)


= (-4<= 5) ET (1>3)
= VRAI ET FAUX
= FAUX

C  NON ((5>3) OUex (10<30)) C = NON (VRAI OUex VRAI)


= NON (FAUX)
= VRAI

D  (2<18) OUex (-10 < TRONC (0.25)) D = (2<18) OUex (-10 < TRONC (0.25))
= (2<18) OUex (-10 < 0)
= VRAI OUex VRAI
= FAUX

E  (25>=3) OU (NON (-3<31)) E = (25>=3) OU (NON (-3<31))


= VRAI OU (NON (VRAI))
= VRAI OU FAUX
= VRAI

F  NON ((3>12) ET (21< ARRONDI (-3.23))) F = NON ((3>12) ET (21< ARRONDI (-3.23)))
= NON ((3>12) ET (21< -3))
= NON (FAUX ET FAUX)
= NON (FAUX)
= VRAI

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

Série d’exercices n°3


Les structures de données
-Le type booléen-
Exercice 1 :
Pour les différentes valeurs du couple des variables (X, Y), mettre dans la case correspondante V si
l’expression est vraie et F si elle est fausse :
Expression (1,5) (-1,0) (-5, -3) (1,1)
((X<Y) OU (X<=2)) ET (Y>=0) ………….. ………….. ………….. …………..
(X<Y) OU ((X<=2) ET (Y>=0)) ………….. ………….. ………….. …………..

Exercice 2 :
Compléter le tableau en évaluant les expressions logiques :

Valeurs de a, b, c et d Expressions Résultats


1)………………………
(a < b) ET (c > d) 2)………………………
1) (-1, 3, 2, 7) 3)………………………
1)………………………
NON (a < b) ET (c > d) 2)………………………
2) (1, 3, 2, 7)
3)………………………
1)………………………
3) (3, 11, 7, 2) (a > b) OU (c ≠ a) 2)………………………
3)………………………
1)………………………
(a + b < c) OU (a + d > c) 2)………………………
3)………………………

Exercice 3 :
Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A, B, C et D pour
les deux cas suivants :

1) ( a,b,c,d )=(2,4,6,6)
2) ( a,b,c,d )=(3,1,-2,10)
A := (a<= b) AND (c=d)
B := (b>d) OR NOT(a<>c)
C := NOT ((c-a > b) OR (c < d)) AND (a < c)
D:= (a+c<d) OR (b-d>c)

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

Exercice 4 :
Evaluer ces expressions pour a=3, b=5 , c=2 et x =FAUX.
a) x OU (a<c) ET (a-1<b)
b) (a>b) ET (NON (a<c))
c) NON (a>b) ET (a<c)
d) NON ((a>b) ET (a<c))
e) NON x OU (a<c) ET (a<b)
f) (a>b) ET NON x ET (a<b)

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

A) (p<q) OU (r >s)
B) (p<q) ET NON (r >s)
C) (p>q) OU (r<p)
D) (p+q <r) ET (p+q>r)

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

Correction de série
d’exercices n°3
Les structures de données
-Le type booléen-
Exercice 1 :
Pour les différentes valeurs du couple des variables (X, Y) , mettre dans la case correspondante V si
l’expression est vraie et F si elle est fausse :
Expression (1,5) (-1,0) (-5, -3) (1,1)
((X<Y) OU (X<=2)) ET (Y>=0) V V F V
(X<Y) OU ((X<=2) ET (Y>=0)) V V V V

Exercice 2 :
Compléter le tableau en évaluant les expressions logiques :

Valeurs de a, b, c et d Expressions Résultats

1) (-1 < 3) ET (2 > 7)


= VRAI ET FAUX
= FAUX
2) (1 < 3) ET (2 > 7)
(a < b) ET (c > d) = VRAI ET FAUX
1) (-1, 3, 2, 7) = FAUX
3) (3 < 11) ET (7 > 2)
2) (1, 3, 2, 7) = VRAI ET VRAI
= VRAI
1) NON (-1 < 3) ET (2 > 7)
3) (3, 11, 7, 2) = NON (VRAI) ET FAUX
= FAUX ET FAUX
= FAUX
NON (a < b) ET (c > d)
2) NON (1 < 3) ET (2 > 7)
= NON (VRAI) ET FAUX
= FAUX ET FAUX
= FAUX

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

3) NON (3 < 11) ET (7 > 2)


= NON (VRAI) ET VRAI
= FAUX ET VRAI
= FAUX

1) (-1 > 3) OU (2 ≠ -1)


= FAUX OU VRAI
= VRAI
2) (1 > 3) OU (2 ≠ 1)
(a > b) OU (c ≠ a) = FAUX OU VRAI
= VRAI
3) (3 > 11) OU (7 ≠ 3)
= FAUX OU VRAI
1) (-1, 3, 2, 7) = VRAI

1) (-1 + 3 < 2) OU (-1 + 7 > 2)


2) (1, 3, 2, 7)
= (2 < 2) OU (6 > 2)
= FAUX OU VRAI
= VRAI
3) (3, 11, 7, 2)
2) (1 + 3 < 2) OU (1 + 7 > 2)
= (4 < 2) OU (8 > 2)
(a + b < c) OU (a + d > c) = FAUX OU VRAI
= VRAI
3) (3 + 11 < 7) OU (3 + 2 > 7)
= (14 < 7) OU (5 > 7)
= FAUX OU FAUX
= FAUX

Exercice 3 :
Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A, B, C et D pour
les deux cas suivants :

1) ( a,b,c,d )=(2,4,6,6)
2) ( a,b,c,d )=(3,1,-2,10)
A := (a<= b) AND (c=d)
B := (b>d) OR NOT(a<>c)
C := NOT ((c-a > b) OR (c < d)) AND (a < c)
D:= (a+c<d) OR (b-d>c)

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

Valeurs Expressions Résultats

1) (2<= 4) AND (6=6)


= TRUE AND TRUE
= TRUE
A = (a<= b) AND (c=d)
2) (3<= 1) AND (-2=10)
= FALSE AND FALSE
= FALSE

1)B =(4>6) OR NOT(2<>6)


=FALSE OR NOT(TRUE)
=FALSE OR FALSE
=FALSE
B = (b>d) OR NOT(a<>c)
2)B=(1>10) OR NOT(3<>-
2)
=FALSE OR NOT(TRUE)
=FALSE OR FALSE
=FALSE

1) ( a,b,c,d )=(2,4,6,6) 1) C = NOT ((6-2 > 4) OR (6


< 6)) AND (2 < 6)
= NOT ((4 > 4) OR (6 < 6))
2) ( a,b,c,d )=(3,1,-2,10) AND (2 < 6)
= NOT (FALSE OR FALSE)
AND FALSE
= NOT (FALSE) AND FALSE
= TRUE AND FALSE
= FALSE
C = NOT ((c-a > b) OR (c < d)) AND (a < c)
2) C = NOT ((-2-3 > 1) OR(-2
< 10)) AND (3 < -2)
= NOT ((-5 > 1) OR(-2 < 10))
AND (3 < -2)
= NOT (FALSE OR TRUE)
AND FALSE
= NOT (TRUE) AND FALSE
= FALSE AND FALSE
= FALSE

1) D = (2+6<6) OR (4-6>6)
= (8<6) OR (-2>6)
= FALSE OR FALSE
= FALSE
D= (a+c<d) OR (b-d>c)
2) D=(3-2<10) OR (1-10>-2)
= (1<10) OR (-9>-2)
= TRUE OR FALSE
= TRUE

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation

Exercice 4 :
Evaluer ces expressions pour a=3, b=5 , c=2 et x =FAUX.
a) x OU (a<c) ET (a-1<b) = FAUX OU (3<2) ET (3-1<5)
= FAUX OU (3<2) ET (2<5)
= FAUX OU FAUX ET VRAI
= FAUX OU FAUX
= FAUX
b) (a>b) ET (NON (a<c)) = (3>5) ET (NON (3<2))
= FAUX ET (NON (FAUX))
= FAUX ET VRAI
= FAUX
c) NON (a>b) ET (a<c) = NON (3>5) ET (3<2)
= NON (FAUX) ET FAUX
= VRAI ET FAUX
= FAUX
d) NON ((a>b) ET (a<c)) = NON ((3>5) ET (3<2))
= NON (FAUX ET FAUX)
= NON (FAUX)
= VRAI
e) NON x OU (a<c) ET (a<b) = NON FAUX OU (3<2) ET (3<5)
= NON FAUX OU FAUX ET VRAI
= VRAI OU FAUX ET VRAI
= VRAI OU FAUX
= VRAI
f) (a>b) ET NON x ET (a<b) = (3>5) ET NON FAUX ET (3<5)
= FAUX ET NON FAUX ET VRAI
= FAUX ET VRAI ET VRAI
= FAUX ET VRAI
= FAUX
Exercice 5 :
Evaluer les expressions logiques en A, B, C, et D pour chacune des combinaisons (p, q, r, s) suivantes :
1) Pour ( p,q,r,s ) = ( -3, 5, 4, 9 )
2) Pour ( p,q,r,s ) = ( 3, 7, 4, 9 )
3) Pour ( p,q,r,s ) = ( 5, 13, 7, 3 )

A) (p<q) OU (r >s)
B) (p<q) ET NON (r >s)
C) (p>q) OU (r<p)
D) (p+q <r) ET (p+q>r)

Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation

Valeurs Expressions Résultats


1) (-3<5) OU (4 >9)
= VRAI OU FAUX
= VRAI
2) (3<7) OU (4 >9)
= VRAI OU FAUX
(p<q) OU (r >s) = VRAI
3) (5<13) OU (7 >3)
= VRAI OU VRAI
= VRAI
1) (-3<5) ET NON (4 >9)
= VRAI ET NON FAUX
= VRAI ET VRAI
= VRAI
2) (3<7) ET NON (4 >9)
= VRAI ET NON FAUX
(p<q) ET NON (r >s) = VRAI ET VRAI
= VRAI
3) (5<13) ET NON (7 >3)
1) Pour ( p,q,r,s ) = ( -3, 5, 4, 9 ) = VRAI ET NON VRAI
= VRAI ET FAUX
2) Pour ( p,q,r,s ) = ( 3, 7, 4, 9 ) = FAUX
1) (-3<5) OU (4 >-3)
3) Pour ( p,q,r,s ) = ( 5, 13, 7, 3 ) = VRAI OU VRAI
= VRAI
2) (3<7) OU (4 >3)
(p>q) OU (r<p) = VRAI OU VRAI
= VRAI
3) (5<13) OU (7 >5)
= VRAI OU VRAI
= VRAI
1) (-3+5 <4) ET (-3+5 >4)
= (2<4) ET (2>4)
= VRAI ET FAUX
= FAUX

2) (3+7 <4) ET (3+7 >4)


= (10<4) ET (10>4)
(p+q <r) ET (p+q>r)
= FAUX ET VRAI
= FAUX

3) (5+13 <7) ET (5+13 >7)


= (18<7) ET (18>7)
= FAUX ET VRAI
= FAUX

Enseignant : AHMED BELHASSEN 21


Algorithmique et programmation

Série d’exercices n°4


Les structures de données
-Le type caractère-
Exercice 1 :
Compléter le tableau ci-dessous.

x y z Expression Valeur
5 1 -5 NON(x>=y) OU (x> y+z) ………………
"a" "0" "M" x < SUCC(x) ET y >z ET z > MAJUS(x) ………………
2.4 2.33 2.6 ROUND(z)>TRUNC(y) ET FRAC(y) <INT(z) ………………
11 15 10 (x MOD 7)< (y DIV z) ………………
60 "a" 30 x+z>=ORD(y) ………………

Exercice 2 :
1) Evaluez les expressions suivantes :

"a">"A"
(SUCC ("v") > PRED ("r")) OU "?" > "1"
ORD ("A") + ORD (" ")
(MAJUS ("a") >= MAJUS ("A")) ET (CHR (65) > "A")

2) Evaluez les expressions suivantes pour c1 = "a" , c2 = "Z" , x = -2 , a = 3 , b = 5 et c = 2.

ORD (SUCC (c1)) + (ORD (c2))-100


CHR(x+ORD ("A"))
ORD (SUCC (MAJUS (c1))) + ABS (ORD (PRED (c2)) * x)
(b>c) ET NON (a>c) OU (b>ORD ("a"))

Exercice 3 :
X et Y deux variables de type STRING et Z de type INTEGER. Compléter le tableau suivant :

Instruction X Y Z
Y :=′ORNATEUR′ ……………………… ……………………… ………………………
X :=COPY (Y, 3,6) ……………………… ……………………… ………………………
DELETE (Y, 3,6) ……………………… ……………………… ………………………
Y :=CONCAT (Y, ′DI′) ……………………… ……………………… ………………………
INSERT (X, Y, 5) ……………………… ……………………… ………………………
Z :=POS (′DI′, Y) ……………………… ……………………… ………………………

Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation

Exercice 4 :
Soit les déclarations PASCAL suivantes :
I : INTEGER ; R : REAL ; C : CHAR ; S : STRING ;
1) Valider chacune des affectations en mettant dans la case correspondante la lettre (V) si elle est
vraie et la lettre (F) si elle est fausse.
2) Corriger l’instruction en question si elle est fausse.

……… S :=′Ord′ + ′re′ ; …………………………..


……… R :=1/2 ; …………………………..
……… I :=ORD (′A′) + ′32′ ; …………………………..
……… I :=PRED (′7′) ; …………………………..
……… S :=CHR (68) + A ; …………………………..
……… C :=MAJUS (CHR (97)) ; …………………………..

Exercice 5 :
Soient les variables suivantes :
ch1 = ′′Lunette′′
ch2=′′si′′
ch3=′′une′′
Compléter le tableau suivant :

Instruction Type Valeur


LLONG (SOUS_CHAINE (ch1, 2,3)) ………………………… L = ………………………
PPOS (′′E′′, ch1) ………………………… P = ………………………
nCONCAT(′′tuni′′,ch2)+ch1[LONG(ch1)] ………………………… n = ………………………
………………………… ch2 =……………..……...
INSERE (ch2, ch3, 2) ………………………… ch3 =……………..……...
EFFACE (ch1, 5,3) ………………………… ch1 =…………….………
………………………… d = ………………………
VALEUR (′′20,2′′, d, e) ………………………… e = ………………………
………………………… ……………………..……
CONVCH (2014, ch) ………………………… ch = ……………………..

Enseignant : AHMED BELHASSEN 23


Algorithmique et programmation

Correction de série
d’exercices n°4
Les structures de données
-Le type caractère-
Exercice 1 :
Compléter le tableau ci-dessous.

x y z Expression Valeur
5 1 -5 NON(x>=y) OU (x> y+z) VRAI
"a" "0" "M" x < SUCC(x) ET y >z ET z > MAJUS(x) FAUX
2.4 2.33 2.6 ROUND(z)>TRUNC(y) ET FRAC(y) <INT(z) VRAI
11 15 10 (x MOD 7)< (y DIV z) FAUX
60 "a" 30 x+z>=ORD(y) FAUX

NON(x>=y) OU (x> y+z) = NON (5>=1) OU (5> 1-5)


= NON (5>=1) OU (5> -4)
= NON (VRAI) OU VRAI
= FAUX OU VRAI
= VRAI
x < SUCC(x) ET y >z ET z > MAJUS(x) = "a" < SUCC ("a") ET "0" >"M" ET "M" > MAJUS ("a")
= "a" < "b" ET "0" >"M" ET "M" > "A"
= 97 < 98 ET 48 >77 ET 77 > 65
= VRAI ET FAUX ET VRAI
= FAUX ET VRAI
= FAUX
ROUND(z)>TRUNC(y) ET FRAC(y) <INT(z) = ROUND (2.6)>TRUNC (2.33) ET FRAC (2.33) <INT (2.6)
= (3 >2) ET (0.33 <3)
= VRAI ET VRAI
= VRAI
(x MOD 7)< (y DIV z) = (11 MOD 7) < (15 DIV 10)
=4<1
= FAUX
x+z>=ORD(y) = 60+30 >=ORD ("a")
= 90 >=97
= FAUX

Enseignant : AHMED BELHASSEN 24


Algorithmique et programmation

Exercice 2 :
1) Evaluez les expressions suivantes :

"a">"A" = 97 > 65
= VRAI
(SUCC ("v") > PRED ("r")) OU "?" > "1" = "w" > "q" OU "?" > "1"
= 119 > 113 OU 63 > 49
= VRAI OU VRAI
= VRAI
ORD ("A") + ORD (" ") = 65 + 32
= 97
(MAJUS ("a") >= MAJUS ("A")) ET (CHR (65) > "A") = "A" >= "A" ET "A" > "A"
= 65 >= 65 ET 65 > 65
= VRAI ET FAUX
= VRAI
2) Evaluez les expressions suivantes pour c1 = "a" , c2 = "Z" , x = -2 , a = 3 , b = 5 et c = 2.

ORD (SUCC (c1)) + (ORD (c2))-100 = ORD (SUCC ("a")) + (ORD ("Z"))-100
= ORD ("b") + (ORD ("Z"))-100
= 98 + 90 – 100
= 188 – 100 = 88
CHR(x+ORD ("A")) = CHR (-2+ORD ("A"))
= CHR (-2+65)
= CHR (63) = "?"
ORD (SUCC (MAJUS (c1))) + ABS (ORD (PRED (c2)) * x)
= ORD (SUCC (MAJUS ("a"))) + ABS (ORD (PRED ("Z")) * -2)
= ORD (SUCC ("A")) + ABS (ORD ("Y") * -2)
= ORD ("B") + ABS (ORD ("Y") * -2)
= 66 + ABS (89 * -2)
= 66 + ABS (-178)
= 66 + 178 = 244
(b>c) ET NON (a>c) OU (b>ORD ("a")) = (5>2) ET NON (3>2) OU (5>ORD ("a"))
= (5>2) ET NON (3>2) OU (5>97)
= VRAI ET NON (VRAI) OU FAUX
= VRAI ET FAUX OU FAUX
= FAUX OU FAUX = FAUX
Exercice 3 :
X et Y deux variables de type STRING et Z de type INTEGER. Compléter le tableau suivant :

Instruction X Y Z
Y :=′ORNATEUR′ ---- ′ORNATEUR′ ----
X :=COPY (Y, 3,6) ′NATEUR′ ′ORNATEUR′ ----
DELETE (Y, 3,6) ′NATEUR′ ′OR′ ----
Y :=CONCAT (Y, ′DI′) ′NATEUR′ ′ORDI′ ----
INSERT (X, Y, 5) ′NATEUR′ ′ORDINATEUR ′ ----
Z :=POS (′DI′, Y) ′NATEUR′ ′ORDINATEUR ′ 3

Enseignant : AHMED BELHASSEN 25


Algorithmique et programmation

Exercice 4 :
Soit les déclarations PASCAL suivantes :
I : INTEGER ; R : REAL ; C : CHAR ; S : STRING ;
1) Valider chacune des affectations en mettant dans la case correspondante la lettre (V) si elle est
vraie et la lettre (F) si elle est fausse.
2) Corriger l’instruction en question si elle est fausse.
V S :=′Ord′ + ′re′ ; ′Ordre′
V R :=1/2 ; 0.5
F I :=ORD (′A′) + ′32′ ; I :=ORD (′A′) + 32 ; 97
F I :=PRED (′7′) ; I :=PRED (7) ; 6
F S :=CHR (68) + A ; S :=CHR (68) + ′A′ ; ′DA′
V C :=MAJUS (CHR (97)) ; ′A′

Exercice 5 :
Soient les variables suivantes :
ch1 = ′′Lunette′′
ch2=′′si′′
ch3=′′une′′
Compléter le tableau suivant :

Instruction Type Valeur


LLONG (SOUS_CHAINE (ch1, 2,3)) Entier L=3
PPOS (′′E′′, ch1) Entier P=0
nCONCAT(′′tuni′′,ch2)+ch1[LONG(ch1)] Chaine n = ′′tunisie′′
ch2=′′si′′
INSERE (ch2, ch3, 2) Chaine
ch3=′′usine′′
EFFACE (ch1, 5,3) Chaine ch1 =′′Lune′′
d = 20.2
VALEUR (′′20,2′′, d, e) Réel
e=0
CONVCH (2014, ch) Chaine ch =′′2014′′

Enseignant : AHMED BELHASSEN 26


Algorithmique et programmation

Série d’exercices n°5


Les structures de données
-Le type chaine de
caractères-
Exercice 1 :
Evaluer les expressions suivantes :
a) ′TABLE′>′table′
b) LENGTH (′Informatique′)
c) POS (′T′, ′Table′)
d) COPY (′Table′, 1, 2)
e) CONCAT (′25′,′/′,′Mars′,′/′,′2000′)
Exercice 2 :
Soit les instructions suivantes : X"Internet"
Y"Réseau"
Z"pression"

Ecrivez les instructions en Pascal permettant de réaliser les objectifs suivants :


a) Obtenir la longueur L de la chaîne X.
b) Obtenir la chaîne CH1 : "seau" à partir de la chaîne Y.
c) Obtenir la chaîne CH2 : "Réseau Internet" à partir de la chaîne X et Y.
d) Modifier la chaîne Y par la chaîne "eau" en utilisant deux méthodes.
e) Modifier la chaîne Z par la chaîne "impression".
f) Obtenir la position P de la chaîne "net" dans la chaîne X.
Exercice 3 :
Evaluer les expressions suivantes sachant que : A=155, B=10, C= ′D′, D=81, E=′c′, F=′MY′
a) ((A DIV B) MOD (SQRT (D)) – 12
b) 6 + 2 * 5 DIV 3
c) SQRT (TRUNC (9.22)) MOD 2
d) ABS (ROUND (B + 1.3)-22) + B
e) LENGTH (PRED(C) + UPCASE (E))
f) CONCAT (DELETE (′RADIO′, 3, 3), F)
g) NON (A < 99) ET (ORD(C)=1) OU (CHR (97)=E)

Enseignant : AHMED BELHASSEN 27


Algorithmique et programmation

Exercice 4 :
Remplir le tableau en écrivant le résultat correspondant à chaque action.

Action Résultat
X"L'" + "élève" X =………………………………………
Y "de" + CHR (ORD ("e") + 14) Y = ……………………………………...
Z CONCAT ("infor","matique") Z =………………………………………
V SOUS-CHAINE ("programmation", 8,5) V =………………………………………
EFFACE (Y, POS ("f", Z) ,1) Y =………………………………………
W CONCAT (SOUS-CHAINE(X, 1,1), " ", Z, "est", X) W =………………………………………
X [1] "" X [2] "" X = ………………………………………

Exercice 5 :
Soient les variables X, Y, Z de type entier dont les valeurs sont les suivants :
X  2, Y  4, Z  3
Compléter le tableau suivant :

Expression Résultat Type du résultat


TX+Y+1 …………………. ………………….
W  CONCAT (′′X′′, ′′Y′′, ′′1′′) …………………. ………………….
EFFACE (W, X, X) …………………. ………………….
L  POS (′′X′′, ′′Y MOD X′′) …………………. ………………….
P  ARRONDI (2.54) + ORD (CHR(122)) …………………. ………………….
VAL (′′-327′′ + ′′68′′, M, E) …………………. ………………….
S  17 MOD 3 * 2 + ABS (-4) DIV 4 …………………. ………………….
CONVCH (SUCC (ALÉA(1)), A) ………………… ………………….
R  A+ ′′A′′> ′′2A′′ ………………….. ………………….

Exercice 6 :
Remplir le tableau en écrivant le résultat correspondant à chaque action.

Instruction Résultat
A  ″L’″ + ″informatique″ A=……………………………………
B  SOUS_CHAINE (″gourmande″, 5, 5) B=……………………………………
C  ″estimation″ C=……………………………………
B[2]  ″o″ B= …………………………………...
EFFACE (C, 1 ,6) C=……………………………………
A  CONCAT ( A , ″ est un ″ , B , ″ de ″, A[5] , A[3] , ″c″, C ) A=……………………………………

Enseignant : AHMED BELHASSEN 28


Algorithmique et programmation

Correction de série
d’exercices n°5
Les structures de données
-Le type chaine de
caractères-
Exercice 1 :
Evaluer les expressions suivantes :
a) ′TABLE′>′table′ = Faux
b) LENGTH (′Informatique′) = 12
c) POS (′T′, ′Table′) =1
d) COPY (′Table′, 1, 2) = ′Ta′
e) CONCAT (′25′,′/′,′Mars′,′/′,′2000′) = ′25/Mars/2000′

Exercice 2 :
Soit les instructions suivantes : X"Internet"
Y"Réseau"
Z"pression"

Ecrivez les instructions en Pascal permettant de réaliser les objectifs suivants :

a) Obtenir la longueur L de la chaîne X. L := LENGTH (X) ;


b) Obtenir la chaîne CH1 : "seau" à partir de la chaîne Y. CH1 := COPY (Y,3,4) ;
c) Obtenir la chaîne CH2 : "Réseau Internet" à partir de la CH2 := CONCAT (Y, ′ ′,X) ;
chaîne X et Y.
d) Modifier la chaîne Y par la chaîne "eau" en utilisant deux DELETE (Y, 1,3) ;
méthodes. Y := COPY (Y,4,3) ;
e) Modifier la chaîne Z par la chaîne "impression". Z := CONCAT (′ im′,Z) ;
f) Obtenir la position P de la chaîne "net" dans la chaîne X. P := COPY (X,6,3) ;

Enseignant : AHMED BELHASSEN 29


Algorithmique et programmation

Exercice 3 :
Evaluer les expressions suivantes sachant que : A=155, B=10, C= ′D′, D=81, E=′c′, F=′MY′
a) ((A DIV B) MOD (SQRT (D)) – 12 = ((155 DIV 10) MOD (SQRT (81)) – 12
= (15 MOD 9) – 12
= 6 – 12
=–6
b) 6 + 2 * 5 DIV 3 = 6 + 10 DIV 3
=6+3
=9
c) SQRT (TRUNC (9.22)) MOD 2 = SQRT (9) MOD 2
= 3 MOD 2
=1
d) ABS (ROUND (B + 1.3)-22) + B = ABS (ROUND (10 + 1.3)-22) + 10
= ABS (ROUND (11.3)-22) + 10
= ABS (11-22) + 10
= ABS (-11) + 10
= 11 + 10
= 21
e) LENGTH (PRED(C) + UPCASE (E)) = LENGTH (PRED (′D′) + UPCASE (′c′))
= LENGTH (′E′ + ′C′)
= LENGTH (′EC′)
=2
f) CONCAT (DELETE (′RADIO′, 3, 3), F) = CONCAT (DELETE (′RADIO′, 3, 3), ′MY′)
= CONCAT (′RA′, ′MY′)
= ′RAMY′
g) NON (A < 99) ET (ORD(C)=1) OU (CHR (97)=E) = NON (155 < 99) ET (ORD (′D′)=1) OU (CHR
(97)= ′c′)
= NON (155 < 99) ET (68=1) OU (′a′= ′c′)
= NON (FAUX) ET FAUX OU FAUX
= VRAI ET FAUX OU FAUX
= FAUX OU FAUX
= FAUX
Exercice 4 :
Remplir le tableau en écrivant le résultat correspondant à chaque action.

Action Résultat
X"L'" + "élève" X =″L’élève″
Y "de" + CHR (ORD ("e") + 14) Y = ″des″
Z CONCAT ("infor","matique") Z =″informatique″
V SOUS-CHAINE ("programmation", 8,5) V =″matio″
EFFACE (Y, POS ("f", Z) ,1) Y =″de″
W CONCAT (SOUS-CHAINE(X, 1,1), " ", Z, "est", X) W =″L’informatique et L’élève″
X [1] "" X [2] "" X = ″élève″

Enseignant : AHMED BELHASSEN 30


Algorithmique et programmation

Exercice 5 :
Soient les variables X, Y, Z de type entier dont les valeurs sont les suivants :
X  2, Y  4, Z  3
Compléter le tableau suivant :

Expression Résultat Type du résultat


TX+Y+1 7 Entier
W  CONCAT (′′X′′, ′′Y′′, ′′1′′) ′XY1′ Chaine
EFFACE (W, X, X) ′X′ Chaine
L  POS (′′X′′, ′′Y MOD X′′) 7 Entier
P  ARRONDI (2.54) + ORD (CHR(122)) 125 Entier
VAL (′′-327′′ + ′′68′′, M, E) -32768 Entier
S  17 MOD 3 * 2 + ABS (-4) DIV 4 5 Entier
CONVCH (SUCC (ALÉA(1)), A) A = ′1′ Chaine
R  A+ ′′A′′> ′′2A′′ R = Faux Booléen

Exercice 6 :
Remplir le tableau en écrivant le résultat correspondant à chaque action.

Instruction Résultat
A  ″L’″ + ″informatique″ A= ″L’informatique″
B  SOUS_CHAINE (″gourmande″, 5, 5) B= ″mande″
C  ″estimation″ C= ″estimation″
B[2]  ″o″ B= ″monde″
EFFACE (C, 1 ,6) C=″tion″
A  CONCAT ( A , ″ est un ″ , B , ″ de ″, A[5] , A[3] , ″c″, C ) A=″L’informatique est un monde
de fiction″

Enseignant : AHMED BELHASSEN 31


Algorithmique et programmation

Série d’exercices n°6


Les structures de données
-Le type scalaire énuméré-
Exercice 1 :
Soit le type Examen contenant les valeurs suivantes : Math, Anglais, Physique et Informatique.
1) Qu’appelle-t-on le type Examen décrit ci-dessus ?
2) Proposer une déclaration Pascal du type Examen en respectant l’ordre des valeurs proposées.
3) Compléter le tableau ci-dessous par les types et les valeurs des variables A, B et C après exécution
des instructions suivantes :
A  PRED (Informatique)
B  ORD (Anglais) * 8 / 4
C  (Math< Physique)

Variable Type Valeur


A ………………………… …………………………
B ………………………… …………………………
C ………………………… …………………………

Exercice 2 :
Soient les déclarations pascal suivantes :
TYPE
Personnel = (Ingénieur, Professeur, Comptable, Avocat, Docteur) ;
VAR
x : Personnel ;
1) Les affectations suivantes sont-elles correctes (Oui/Non) ?
x  Avocat …………………………
x  Prof …………………………

2) Evaluer les expressions suivantes :


ORD (Docteur) ………………………………
SUCC (Comptable) ………………………………
PRED (Professeur) ………………………………
Ingénieur < Avocat ………………………………

Enseignant : AHMED BELHASSEN 32


Algorithmique et programmation

Exercice 3 :
Soient les déclarations pascal suivantes :
TYPE
Option_Sportive = (Natation, Gymnastique, Athletisme, BasketBall, VolleyBall) ;
Choix_Fille : Natation..Athletisme ;
VAR
Sport : Option_Sportive ;
Choix : Choix_Fille ;

Evaluer les expressions suivantes :

a) CONCAT (MAJUS (CHR (ORD (Natation) +65)), ′′BC′′)


b) CARRE (ORD (SUCC(Gymnastique)))
c) Choix  BasketBall
d) (Athletisme ≥ Natation) OU NON (ABS (-5) = ORD (VolleyBall))
e) PRED(VolleyBall) ≠ TRONC(3.624) OUEX RACINE CARRE (4) = ORD (Athletisme)

Exercice 4 :
On donne ci-après la partie déclaration d’un programme :

CONST C = 3 ;
TYPE Fourniture = (stylo, crayon, gomme, colle, cahier, carnet) ;
Ensemble= 10..30 ;
VAR
g , f : Fourniture ;
e : Ensemble ;
i ,j :Integer ;
c1 : Boolean ;

Evaluer les expressions suivantes en mettant valide si l’instruction est valide et non valide dans le
cas contraire. En cas de validité de l’instruction donner la valeur de la variable et en cas d’invalidité,
justifier votre réponse.

a) g := ′cahier′;
b) READLN (f) ;
c) j :=ORD(f) * C * ROUND(2.5) ;
d) e := ORD (cahier) * ORD (carnet) ;
e) i := SUCC (ORD (gomme)) + TRUNC (6.30) ;
f) c1 := (ORD (stylo) = ORD (colle)) ;
g) e := ORD (stylo);

Enseignant : AHMED BELHASSEN 33


Algorithmique et programmation

Correction de série
d’exercices n°6
Les structures de données
-Le type scalaire énuméré-
Exercice 1 :
Soit le type Examen contenant les valeurs suivantes : Math, Anglais, Physique et Informatique.
1) Qu’appelle-t-on le type Examen décrit ci-dessus ?

Le type scalaire énuméré

2) Proposer une déclaration Pascal du type Examen en respectant l’ordre des valeurs proposées.

TYPE Examen = (Math, Anglais, Physique, Informatique) ;


VAR a : Examen ;

3) Compléter le tableau ci-dessous par les types et les valeurs des variables A, B et C après exécution
des instructions suivantes :
A  PRED (Informatique)
B  ORD (Anglais) * 8 / 4
C  (Math< Physique)
Variable Type Valeur
A Entier 3
B Réel 2.0
C Booléen Vrai
Exercice 2 :
Soient les déclarations pascal suivantes :
TYPE
Personnel = (Ingénieur, Professeur, Comptable, Avocat, Docteur) ;
VAR
x : Personnel ;
1) Les affectations suivantes sont-elles correctes (Oui/Non) ?
x  Avocat Oui
x  Prof Non

Enseignant : AHMED BELHASSEN 34


Algorithmique et programmation

2) Evaluer les expressions suivantes :


ORD (Docteur) 4
SUCC (Comptable) Avocat
PRED (Professeur) Ingénieur
Ingénieur < Avocat Vrai
Exercice 3 :
Soient les déclarations pascal suivantes :
TYPE
Option_Sportive = (Natation, Gymnastique, Athletisme, BasketBall, VolleyBall) ;
Choix_Fille : Natation..Athletisme ;
VAR
Sport : Option_Sportive ;
Choix : Choix_Fille ;

Evaluer les expressions suivantes :

a) CONCAT (MAJUS (CHR (ORD (Natation) +65)), ′′BC′′)


= CONCAT (MAJUS (CHR (0 +65)), ′′BC′′))
= CONCAT (MAJUS (CHR (65)), ′′BC′′)
= CONCAT (MAJUS (′′A′′), ′′BC′′)
= CONCAT (′′A′′, ′′BC′′)
= ′′ABC′′
b) CARRE (ORD (SUCC(Gymnastique))) = CARRE (ORD (Athletisme))
= CARRE (2)
=4
c) Choix  BasketBall Non Valide

d) (Athletisme ≥ Natation) OU NON (ABS (-5) = ORD (VolleyBall))


= (2 ≥ 0) OU NON (5 = 4)
= VRAI OU NON (FAUX)
= VRAI OU VRAI
= VRAI
e) PRED(VolleyBall) ≠ TRONC(3.624) OUEX RACINE CARRE (4) = ORD (Athletisme)
= BasketBall ≠ 3 OUEX 2 = 2
= 3 ≠ 3 OUEX 2 = 2
= FAUX OUEX VRAI
= VRAI

Enseignant : AHMED BELHASSEN 35


Algorithmique et programmation

Exercice 4 :
On donne ci-après la partie déclaration d’un programme :

CONST C = 3 ;
TYPE Fourniture = (stylo, crayon, gomme, colle, cahier, carnet) ;
Ensemble= 10..30 ;
VAR
g , f : Fourniture ;
e : Ensemble ;
i ,j :Integer ;
c1 : Boolean ;

Evaluer les expressions suivantes en mettant valide si l’instruction est valide et non valide dans le
cas contraire. En cas de validité de l’instruction donner la valeur de la variable et en cas d’invalidité,
justifier votre réponse.

a) g := ′cahier′; Non valide


b) READLN (f) ; Non valide
c) j :=ORD(f) * C * ROUND(2.5) ; j=4*3*2
= 24 Valide
d) e := ORD (cahier) * ORD (carnet) ; e=4*5
= 20 Valide
e) i := SUCC (ORD (gomme)) + TRUNC (6.30) ; i = SUCC (ORD (gomme)) + TRUNC (6.30)
= SUCC (2) + 6
=3+6
= 9 Valide
f) c1 := (ORD (stylo) = ORD (colle)) ; c1 = (ORD (stylo) = ORD (colle))
= (0 = 3)
= FAUX Valide
g) e := ORD (stylo); e = ORD (stylo)
= 0 Non valide

Enseignant : AHMED BELHASSEN 36


Algorithmique et programmation

Série d’exercices n°7


Les structures de données
-Les tableaux-
Exercice 1 :
Soit A et B deux tableaux d’entiers, de types VECT1 et VECT2 et de dimensions 5 et 3.
1) Déclarer les deux tableaux A et B.
2) Soit la séquence d’affectation suivante :

A[1] 20
A[2] 10
B[1]A[1]+A[2]
A[5]A[2]/A[1]
A[3]B[1] DIV 2
B[2] B[1] MOD A[1]
B[3]A[2] * 2+1
A[4](A[2] DIV 60) MOD 60
A[5] B[2] DIV A[2]
A[14]A[4]

a) Trouver les erreurs d’affectation dans la séquence donnée.


b) Quel est le contenu de chaque élément de deux tableau A et B.

Exercice 2 :
Soit trois tableaux T1, T2, T3 et soit les affectations suivantes :

T1[1]  "Mohammed" T2[3]  SOUS_CHAINE (T1[2],1,3)


T1[2]  " Ben Ali " T2[4]  CONCAT (T2[3], "i")
T1[3]  CONCAT (T1[1] , " ", T1[2] ) T3[1]  POS(T2[2], T2[1])
T2[1]  SOUS_CHAINE (T1[1],3,2) T3[2]  LONG (T1[1])
T1[4]  " nen " T3[3]  POS (T1[2],T1[3])
INSÈRE (T1[4], T2[2],1)

1) Quel est le contenu de chaque élément des trois tableaux.


2) Déclarer en pascal les tableaux T1, T2 et T3.

Enseignant : AHMED BELHASSEN 37


Algorithmique et programmation

Exercice 3 :
Soit T un tableau de 5 caractères et V un tableau de 5 entiers de types respectifs TAB1 et TAB2.
1) Faire la déclaration des tableaux au niveau algorithmique et au niveau du Pascal.
2) Représenter les nouveaux tableaux T et V après exécution successive des opérations d’affectation
suivantes :
T[1]  "D"
V[1]  ORD(T[1])
T[2]  SUCC(T[1])
V[2]  V[1] MOD 2 * 5
T[3]  SUCC(T[2])
V[3]  V[2] DIV 3 +8
T[4]  PRED(T[1])
V[4]  ORD(T[4])
T[5]  CHR(66)
V[5]  ORD(T[5])

Le code ASCII de "A"=65

Exercice 4 :
1) Soit T1 et T2 deux tableaux de type respectivement chaîne de caractères et booléen.
T1 est de type tab1 et de dimension 5
T2 set de type tab2 et de dimension 3
2) Soit la séquence d'affectation suivantes :
T1[1]  "Mohamed"
T1[2]  "Ali"
T1[3]  CONCAT (T1[1], T1[2])
T2[1]  (T1[1] < T1[2]) AND (T1[1] > T1[3])
T2[2]  NOT (T2[1])
T1[4]  CONCAT (SOUS_CHAINE (T1[1], 1, 1), SOUS_CHAINE (T1[1], 6, 2), ".", T1[2]))
T1[5]  CONCAT (EFFACE (T1[4], 1, 4), " ", "Salah")
T2[3]  ((LONG (T1[4]) < LONG (T1[5])) XOR (T1[1] <> T1[2])) OR NOT (T2[1])
Déclarer au niveau de l'analyse et en Pascal les deux tableaux T1 et T2.
3) Déterminer le contenu de deux tableaux T1 et T2.

Exercice 5 :
Soit T un tableau de 3 chaines de caractères et V un tableau de 2 entiers.
Soit la séquence des affectations suivante :

1) T[1]SOUS_CHAINE(′′communication′′,1,3)
2) T[2]CONCAT(′′sport′′,′′.′′,T[1])
3) V[1]POS(′′o′′, T[2])
4) CONVCH (2013, ch)
5) T[3]′′www.′′+ T[2]
6) INSERER (ch, T[3],11)
7) V[2]LONG(T[1])

1) Déclarer au niveau de l'analyse et en Pascal les deux tableaux T et V.


2) Déterminer le contenu de deux tableaux T et V.

Enseignant : AHMED BELHASSEN 38


Algorithmique et programmation

Série d’exercices n°8


Les structures de données
-Les tableaux-
Exercice 1 :
Soit deux tableaux P et Q de types respectifs Tab1 et Tab2 et de dimensions respectives 5 et 4.
Soit la séquence des affectations suivante :
P[1]"télé"
P[2] "chargement"
Q[1]CONCAT (P[1], P[2])
Q[2]SOUS_CHAINE (P[2], 1, LONG (P[1]) -1)
P[3] PRED(CHR(n+4)+ MAJUS( "? ")
CONVCH (LONG (Q[1]), P[4] )
INSÈRE (̎"e", ch1, 1)
Q[3]ch1
EFFACE (ch2, 1, 5)
Q[4] ch2
P[5] CHR(ORD("T" )) + PRED("D ") + SUCC("O")
1) Déclarer au niveau de l'analyse et en Pascal les deux tableaux P et Q.
2) Déterminer le contenu de deux tableaux P et Q sachant que :
n=62, ch1= ̎"mail"et ch2="hypermédia"
Exercice 2 :
Soit la séquence d’affectations suivante :
T[1]MAJUS ("b")
V[1]SOUS_CHAINE ("Pascal", 1, 3)
T[2]PRED (T[1])
CONVCH (2013, CH)
EFFACE (CH, 2,2)
V[2]CH
T[3]SUCC (T[1])
V[3]CONCAT (T[1], T[2])
V[4] "?"
1) Déclarer au niveau de l'analyse et en Pascal les deux tableaux T et V.
2) Déterminer le contenu de deux tableaux T et V.

Enseignant : AHMED BELHASSEN 39


Algorithmique et programmation

Exercice 3 :
Soit les déclarations pascal suivantes :
TYPE ETAT = (CELIBATAIRE, MARIE, DIVORCE, VEUF) ;
CIVIL = ARRAY [1 .. 2] OF ETAT ;
VAR B : CIVIL ;
PERSONNE : CELIBATAIRE .. DIVORCE ;

1) Quel est le type de la variable B ?


2) Quel est le type de la variable PERSONNE ?
3) Quelles sont les valeurs que peut prendre cette variable ?
4) Pour chacune des affectations suivantes, mettre V si l’affectation est permise et F sinon.

B[1]  CELIBATAIRE …. B[1]  "VEUF" ….


B[CELIBATAIRE]  TRUE …. B[2] 404 ….
B[2]  SUCC(VEUF) …. B[3] DIVORCE ….

5) Evaluer les expressions suivantes et donner le type du résultat :

Expression Valeur Type du résultat


ORD (CELIBATAIRE) ………………………… …………………………
PRED (MARIE) ………………………… …………………………
(MARIE) = 2 ………………………… …………………………
MARIE<= DIVORCE ………………………… …………………………
VEUF IN [PERSONNE] ………………………… …………………………
CHR (ORD (MARIE) + 67) ………………………… …………………………
SQR (ORD (VEUF) + 1) ………………………… …………………………
MARIE DANS [PERSONNE] ………………………… …………………………

Enseignant : AHMED BELHASSEN 40


Algorithmique et programmation

Série d’exercices n°9


Les structures simples
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MILLE_MARINE qui
convertit une distance mesurée en km, en sa mesure équivalente en milles marins sachant que 1 mille
marins = 1.852km).
Exemples :
D = 5 km donc d = 5 / 1.852 = 2.699 mille marins.
D = 8 km donc d = 8 / 1.852 = 4.319 mille marins.

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EUCLIDIENNE qui calcule
et affiche le quotient et le reste de la division Euclidienne de A par B.
Exemples :
A = 18 , B = 4 donc Q = 18 DIV 4 = 4, R = 18 MOD 4 = 2
A = 26 , B = 5 donc Q = 26 DIV 5 = 5, R = 26 MOD 5 = 1

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SURFACE_CERCLE qui
calcule et affiche la surface d'un cercle de rayon donné.
Exemples :
R = 3 donc S = 3.14 * 3 * 3 = 28.26
R = 5 donc S = 3.14 * 5 * 5 = 78.50

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EQUATION qui permet de
résoudre une équation de premier degré de la forme : a * x + b = 0.
Exemples :
a = 5 , b = 4 donc le résultat est x = - 4/5 = - 0.8
a = 4 , b = 9 donc le résultat est x = - 9/4 = - 2.25

Exercice 5 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SORTIE_INVERSE qui saisit
trois nombres dans un ordre donné et le fait sortir dans l'ordre opposé à l'entrée.
Exemples :
A = 4 , B = 5 , C = 9 donc le résultat est 9 , 5 , 4
A = 3 , B = 7 , C = 6 donc le résultat est 6 , 7 , 3

Enseignant : AHMED BELHASSEN 41


Algorithmique et programmation

Exercice 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PERMUT qui permute le
contenu de deux variables a et b lues au clavier puis affiche le résultat.
Exemples :
A = 18 , B = 35 donc le résultat est A = 35 B = 18
A = 13 , B = 27 donc le résultat est A = 27 B = 13

Exercice 7 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SUP_INF qui fait entrer
deux réels x et y et fait sortir leur sup et leur inf. On utilisera la fonction prédéfinie ABS qui donne la
valeur absolue d'un réel.
SUP = ((x + y) + │x –y│)/2
INF = ((x + y) - │x –y│)/2
Exemples :
x = 4.5 , y = 5.6 donc SUP = ((4.5 + 5.6) + │4.5 –5.6│)/2 = 5.6
INF = ((4.5 + 5.6) - │4.5 –5.6│)/2 = 4.5
x = 6.5 , y = 4.6 donc SUP = ((6.5 + 4.6) + │6.5 –4.6│)/2 = 6.5
INF = ((6.5 + 4.6) - │6.5 –4.6│)/2 = 4.6

Exercice 8 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TEMPS qui permet de
convertir une durée de temps donnée T en seconde, en nombre d’heures, minutes, et secondes.
Exemples :
T = 5000 donc le résultat est Heures = 1 Minutes = 23 Secondes = 20
T = 6100 donc le résultat est Heures = 1 Minutes = 41 Secondes = 40

Exercice 9 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé INVERSER_ENTIER qui
permet d’inverser un entier n donné de trois chiffres.
Exemples :
N = 528, le programme affichera 825.
N = 349, le programme affichera 943.

Exercice 10 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CUBIQUE qui permet de
saisir un entier naturel de trois chiffres puis d'affiche la somme cubique de ces chiffres.

N = 120 afficher S = 1 + 2 + 0 = 9
Exemples :

N = 435 afficher S = 4 + 3 + 5 = 216

Exercice 11 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHIFFRE qui lit un entier
formé de trois chiffres et insère le chiffre zéro 0 entre les chiffres de l'entier.
Exemples :
N = 125 Le résultat est N = 10205
N = 789 Le résultat est N = 70809

Enseignant : AHMED BELHASSEN 42


Algorithmique et programmation

Série d’exercices n°10


Les structures simples
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé BONJOUR qui saisit le
prénom de l'utilisateur et affiche l'invite suivante : Bonjour <Foulen>
Exemples :
ch = "Mohamed" le programme affichera Bonjour Mohamed
ch = "Aicha" le programme affichera Bonjour Aicha
ch = "Jamel" le programme affichera Bonjour Jamel

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NOMBRE qui permet de
déterminer le nombre de chiffres d’un entier donné.
Exemples :
N = 49, le programme affichera 2
N = 135, le programme affichera 3
N = 2013, le programme affichera 4

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHAINE qui permet de lire
une chaîne de caractère ch permuter le premier et le dernier caractère et afficher cette chaîne.
Exemples :
ch = "info", ch devient "onfi"
ch = "prog", ch devient "grop"

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHAINE permettant
d’afficher la longueur, le premier caractère, le caractère du milieu et le dernier caractère pour une
chaîne donnée.
Exemple :
Pour la chaîne : "table des codes ASCII"
On aura : Chaine de longueur : 21
Le premier caractère : t
Le caractère du milieu : c
Le dernier caractère : I

Enseignant : AHMED BELHASSEN 43


Algorithmique et programmation

Exercice 5 :
Soit C et CH deux variables données tel que C est un caractère et CH est une chaîne de caractère.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POSITION qui permet
d'afficher la deuxième position de C dans CH.
Exemples :
Pour C ="m" et CH ="programmation", le programme affichera : 8
Pour C ="r" et CH ="programmation", le programme affichera : 5
Pour C ="w" et CH ="programmation", le programme affichera : 0

Exercice 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CONCATENATION qui
permet de :
o Saisir deux entiers m et n.
o Concaténer l’entier m avec l’entier n
o Affecter le résultat de concaténation à une variable p puis afficher le résultat de concaténation.
Exemple : m = 167 et n =25 Le résultat de concaténation est p =16725.

Exercice 7 :
Pour traduire un mot français en latin, on place la première lettre du mot français à la fin et on ajoute
"us", exemple le mot homme.

h o m m e o m m e h
1 2 3 4 5 2 3 4 5 1

Et on ajoute "us", on aura ommehus.


Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LATIN réalisant cette
traduction.

Exercice 8 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME qui permet de lire
un entier N formé exactement de 4 chiffres et d'affecter chacun de ces chiffres dans un tableau T (T
étant un tableau de 6 éléments de type chaîne de caractères) de la façon suivante :
1) Le chiffre des milliers occupera la 1ére case du tableau T.
2) Le chiffre des centaines occupera la 2éme case du tableau T.
3) Le chiffre des dizaines occupera la 3éme case du tableau T.
4) Le chiffre des unités occupera la 4éme case du tableau T.
5) Dans le 5éme case de T, on met le caractère '='.
6) La dernière case du tableau T contiendra la somme des chiffres qui constituent l'entier N.

Exemple : Si N = 3751
T ′3′ ′7′ ′5′ ′1′ ′=′ ′16′
1 2 3 4 5 6

Enseignant : AHMED BELHASSEN 44


Algorithmique et programmation

Série d’exercices n°11


Les structures de
contrôle conditionnelles
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SIGNE permettant de lire
un entier x et d’afficher son signe : "positif", "négatif", ou "nul".
Exemples :
x = 5, le programme affichera positif.
x = 0, le programme affichera nul.
x = -3, le programme affichera négatif.

Exercice 2 :
Soit la fonction F définie sur R :
f (x)= 3 x + 1 si x >= 0
f (x)= x2 - 1 si x < 0
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL_f permettant de
calculer et d’afficher la valeur de f pour un entier x donné.
Exemples :
x = 3 donc f (3) = 3 * 3 + 1 = 10
x = -1 donc f (-1) = (-1) 2 * - 1 = 0

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DEGRE1 qui résout dans
l'ensemble des réels IR, une équation du premier degré à une inconnue x réelle de la forme :
ax + b = 0.
Exemples :
a = 5 , b = 0 donc le programme affichera Tout réel est solution.
a = 0 , b = 3 donc le programme affichera Pas de solution.
a = 2 , b = 4 donc le programme affichera Solution unique : - 4/2 = - 2

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISION permettant de
lire deux entiers, diviser le plus grand par le plus petit (division euclidienne).
Si le plus petit est nul, afficher un message d’erreur.

Enseignant : AHMED BELHASSEN 45


Algorithmique et programmation

Exercice 5 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SIGNE_SOMME qui permet
de lire deux entiers a et b et d’afficher la signe de leurs somme (sans calculer la somme).
Exercice 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CLASSEMENT _NBRE, qui
lit trois entiers, les permute de façon à les classer par ordre croissant puis affiche le résultat.
Exemples :
a = 5 , b = 0 , c = 3 donc le programme affichera 0 , 3 , 5
a = 4 , b = 8 , c = 2 donc le programme affichera 2 , 4 , 8
a = 9 , b = 6 , c = 1 donc le programme affichera 1 , 6 , 9

Enseignant : AHMED BELHASSEN 46


Algorithmique et programmation

Série d’exercices n°13


Les structures de
contrôle itératives
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PUISSANCE permettant de
saisir un entier a et un entier b puis calculer et afficher le résultat de l’opération ″ a à la puissance b″.
Sachant que ab = a*a*……..*a (b fois)

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME_CHIFFRES_PAIR,
qui permet de lire un entier N strictement positif, détermine et affiche l'entier S formé par la somme
des chiffres pairs qui figurent dans l'entier N.
Exemple:
Pour N=14276 la valeur de S est 4+2+6 = 12 Le programme SOMME_CHIFFRES_PAIR affichera le
résultat suivant: S=12

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOM_FACT qui permet de
calculer et d’afficher la somme des factorielles des chiffres d’un entier n donné (2 ≤ n ≤ 50).
(On donne aussi 0! = 1).
Exemple : Si n=13 alors 7 sera affiché (1! + 3 ! =7)

Enseignant : AHMED BELHASSEN 47


Algorithmique et programmation

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHIFFRE qui :
o Lit un entier positif NB de 3 chiffres minimum.
o Détermine le plus petit chiffre qui rentre dans la composition de ce nombre.
o Détermine le nombre d’apparition de ce chiffre dans le nombre NB.

Exercice 5 :
Tout nombre positif de deux chiffres n, tel que (chiffre des dizaines ≠ chiffre des unités), possède
une liste appelée " liste vers 9 ".
Le principe est le suivant : on calcule la différence entre n et son symétrique, le résultat trouvé subit le
même traitement, on répète ce processus jusqu'à obtenir une différence 9.
L’ensemble constitué par le nombre initial et les résultats des différences est appelé " liste vers 9 ".
Exemple :
1. Soit n=18 |18-81| =63  |63-36|=27 |27-72|=45  |45-54|=9  fin du traitement
La liste vers 9 est la suivante : 18 63 27 45 9
2. Soit n=74 |74 -47|=27 |27-72|=45 |45-54|=9  fin du traitement
La liste vers 9 est la suivante : 74 27 45 9
N.B : Utiliser la fonction prédéfinie ABS pour calculer la différence entre le résultat trouvé et son
symétrique.
Le calcul et l’affichage de chaque résultat sont deux traitements successifs.

Travail demandé :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LISTE_VERS_9 permettant
d’introduire un nombre n positif composé de deux chiffres obligatoirement différents, de générer et
d’afficher sa " liste vers 9 ".

Exercice 6 :
La suite de Syracuse :
A un entier n strictement positif on associe n/2 si n est pair et 3n+1 si n est impair.
En réappliquant cette transformation à l'entier obtenu, on définit un algorithme dit de Syracuse.
Bien qu'à ce jour personne n'en ait trouvé de démonstration, il semble que pour tout entier
strictement positif de départ on finisse toujours par arriver à 1.
Exemple : valeur de départ n=12
6 3 10 5 16 8 4 2 1
On doit appliquer 9 fois la transformation.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SYRACUSE permettant de
lire une valeur de départ proposée par l'utilisateur, afficher la liste des entiers obtenus jusqu'à 1, ainsi
que le nombre de fois qu'il est nécessaire d'appliquer la transformation pour y arriver.

Enseignant : AHMED BELHASSEN 48


Algorithmique et programmation

Correction de série
d’exercices n°13
Les structures de
contrôle itératives
Exercice 1 :
Analyse du problème
Nom : PUISSANCE
Résultat = Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p )
p = [ p ← 1 ] pour i de 1 à b faire
p←p*a
fin pour
a = donnée ( "a = ")
b = donnée ( "b = ")
Fin PUISSANCE
TDO
Objet Type/Nature
p,a,b,i Entier

Algorithme Traduction en PASCAL


0) Début PUISSANCE PROGRAM PUISSANCE ;
1) Ecrire ( " a = ") , lire(a) USES WINCRT ;
2) Ecrire ( " b = ") , lire(b) VAR p,a,b,i : INTEGER ;
3) p ← 1 BEGIN
pour i de 1 à b faire WRITE (' a = '); READLN (a);
p←p*a WRITE (' b = '); READLN (b);
fin pour p :=1 ;
4) Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p ) FOR i :=1 TO b DO
5) Fin PUISSANCE p := p*a ;
WRITELN (a,' à la puissance de ', b, ' = ' ,p ) ;
END.

Enseignant : AHMED BELHASSEN 49


Algorithmique et programmation

Exercice 2 :
Analyse du problème
Nom : SOMME_CHIFFRE_PAIR
Résultat = Ecrire (″La somme des chiffres pair de ″, n , ″ est égal à ″, s )
s= [ y ← n , s ← 0 ] Répéter
x ← y MOD 10
si ( x MOD 2 =0 ) alors
s← s+x
fin si
y ← y DIV 10
Jusqu’à ( y=0)
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >0 )
Fin SOMME_CHIFFRE_PAIR
TDO
Objet Type/Nature
s , n , x, y Entier

Algorithme Traduction en PASCAL


0) Début SOMME_CHIFFRE_PAIR PROGRAM SOMME_CHIFFRE_PAIR ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR s , n , x, y : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >0 ) REPEAT
2) y ← n s ← 0 WRITE (' N = ' );
Répéter READLN (n);
x ← y MOD 10
si ( x MOD 2 =0 ) alors UNTIL ( n > 0) ;
s← s+x y:=n ;
fin si s :=0 ;
y ← y DIV 10 REPEAT
Jusqu’à ( y=0) x:=y MOD 10;
IF ( x MOD 2 =0 ) THEN
3) Ecrire (″La somme des chiffres pair de ″, n , s:=s+x;
″ est égal à ″, s ); y:=y DIV 10 ;
UNTIL ( y =0 ) ;
4) Fin SOMME_CHIFFRE_PAIR WRITE (' La somme des chiffres pair de ', n , ' est
égal à ' , s );
END.

Enseignant : AHMED BELHASSEN 50


Algorithmique et programmation

Exercice 3 :
Analyse du problème
Nom : SOM_FACT
Résultat = Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty )
factx= [ factx ← 1 ] Pour i de x à 2 (pas = -1) faire
factx ← factx * i
Fin pour
facty= [ facty ← 1 ] Pour i de y à 2 (pas = -1) faire
facty ← facty * i
Fin pour
x ← n DIV 10
y ← n MOD 10
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n dans [ 2..50] )

Fin SOM_FACT
TDO
Objet Type/Nature
n , x , y , factx , facty , i Entier

Algorithme Traduction en PASCAL


0) Début SOM_FACT PROGRAM SOM_FACT ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , x , y , factx , facty , i : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n dans [ 2..50]) REPEAT
2) x ← n DIV 10 WRITE (' N = ' );
3) y ← n MOD 10 READLN (n);
4) factx ← 1 UNTIL ( n IN [ 2..50] );
Pour i de x à 2 (pas = -1) faire y:=n MOD 10;
factx ← factx * i x:=n DIV 10;
Fin pour factx:=1;
5) facty ← 1 FOR i:=x DOWNTO 2 DO factx:=factx*i;
Pour i de y à 2 (pas = -1) faire facty:=1;
factx ← factx * i FOR i:=y DOWNTO 2 DO facty:=facty*i;
Fin pour WRITELN ( x , ' ! + ' ,y , ' ! =',factx+facty);
6) Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty ) END.
7) Fin SOM_FACT

Enseignant : AHMED BELHASSEN 51


Algorithmique et programmation

Exercice 4 :
Analyse du problème
Nom : CHIFFRE
Résultat = Ecrire (″Le plus petit chiffre dans ″, n , ″est ″, petit , ″ et le nombre d’apparition = ″ , s )
petit= [y ← n , petit ← y MOD 10 ] Tant que ( y<>0 )faire
x ← y MOD 10
si ( petit > x ) alors
petit ← x
fin si
y ← y DIV 10
Fin tant que
s= [y ← n , s ← 0] Tant que ( y<>0 )faire
x ← y MOD 10
si ( petit > x ) alors
s← s+1
fin si
y ← y DIV 10
Fin tant que
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >=100 )
Fin CHIFFRE
TDO
Objet Type/Nature
n , y , petit , x ,s Entier

Algorithme Traduction en PASCAL


0) Début CHIFFRE PROGRAM CHIFFRE;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) , Lire (n ) VAR n , y , petit , x ,s : INTEGER ;
Jusqu’à ( n >=100 ) BEGIN
2) y ← n petit ← y MOD 10 REPEAT
Tant que ( y<>0 )faire WRITE ('N = '); READLN(n);
x ← y MOD 10 UNTIL n >=100;
si ( petit > x ) alors y:=n; petit := y MOD 10;
petit ← x WHILE( y<>0) DO
fin si BEGIN
y ← y DIV 10 x:=y MOD 10;
Fin tant que IF( petit > x ) THEN petit:=x;
3) y ← n s ← 0 y:=y DIV 10;
Tant que ( y<>0 )faire END;
x ← y MOD 10 y:=n; s:=0;
si ( petit > x ) alors WHILE ( y <>0 ) DO
s ← s+1 BEGIN
fin si x:=y MOD 10;
y ← y DIV 10 IF( x= petit ) THEN s:=s+1;
Fin tant que y:=y DIV 10;
4) Ecrire (″Le plus petit chiffre dans ″, n , ″ est END;
″, petit , ″ et le nombre d’apparition = ″ , s ) WRITELN ( 'Le plus petit chiffre dans ' , n , ' est '
5) Fin CHIFFRE ,petit ,' et le nombre d''apparition = ',s ); END.

Enseignant : AHMED BELHASSEN 52


Algorithmique et programmation

Exercice 5 :
Analyse du problème
Nom : LISTE_VERS_9
Résultat = Affichage
Affichage= [ ] Répéter
x ← n MOD 10
y ← n DIV 10
n ← ABS ( n - ( 10*x+y))
Ecrire (″ N = ″ )
Jusqu’à ( n = 9 )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
x ← n MOD 10
y ← n DIV 10
Jusqu’à ( n dans [10..99] ) ET ( x<>y)
Fin LISTE_VERS_9
TDO
Objet Type/Nature
x,y,n Entier

Algorithme Traduction en PASCAL


0) Début LISTE_VERS_9 PROGRAM LISTE_VERS_9;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR x,y,n : INTEGER ;
Lire (n ) BEGIN
x ← n MOD 10 REPEAT
y ← n DIV 10 WRITE ('N = ');
Jusqu’à ( n dans [10..99] ) ET ( x<>y) READLN(n);
2) Répéter x:=n MOD 10;
x ← n MOD 10 y:=n DIV 10;
y ← n DIV 10 UNTIL (n IN [10..99]) AND ( x<>y);
n← ABS ( n - ( 10*x+y)) REPEAT
Ecrire (″ N = ″ ) x:=n MOD 10;
Jusqu’à ( n = 9 ) y:=n DIV 10;
3) Fin LISTE_VERS_9 n:=ABS ( n - ( 10*x+y));
WRITE ( n :4);
UNTIL n=9;
END.

Enseignant : AHMED BELHASSEN 53


Algorithmique et programmation

Exercice 6 :
Analyse du problème
Nom : SYRACUSE
Résultat = Ecrire (″Le nombre de transformation est : ″, nb )
nb= [ nb ← 0 ]Répéter
si ( n MOD 2 = 0 ) alors
n ← n DIV 2
sinon n ← 3*n+1
fin si
Ecrire (n : 4 )
nb ← nb + 1
Jusqu’à ( n = 1 )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n > 0)
Fin SYRACUSE
TDO
Objet Type/Nature
n,nb Entier

Algorithme Traduction en PASCAL


0) Début SYRACUSE PROGRAM SYRACUSE;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n,nb : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n > 0 ) REPEAT
2) nb ← 0 WRITE ('N = ');
Répéter READLN(n);
si ( n MOD 2 = 0 ) alors UNTIL (n >0);
n ← n DIV 2 nb:=0;
sinon n ← 3*n+1 REPEAT
fin si IF ( n MOD 2=0 ) THEN
Ecrire (n :4 ) n:=n DIV 2
nb ← nb + 1 ELSE n:=3*n+1;
Jusqu’à ( n = 1 ) WRITE ( n :4);
3) Ecrire (″Le nombre de transformation est : ″, nb :=nb+1 ;
nb ) UNTIL n=1;
4) Fin SYRACUSE WRITELN ('Le nombre de transformation
est :',nb) ;
END.

Enseignant : AHMED BELHASSEN 54


Algorithmique et programmation

Série d’exercices n°14


Les structures de
contrôle itératives
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CODAGE, qui permet de lire
un mot non vide, le coder caractère par caractère, an ajoutant 2 à la valeur du code utilisé pour
représenter ce caractère, enfin affiche le mot codé. (Ainsi la lettre a (dont le code SCII est 97) sera
transformée en c (dont le code ASCII est 99).
Exemple :
"INFO2007" sera transformée en "KPHQ4229" Le programme CODAGE affiche le message suivant: la
chaîne codée est : KPHQ4229

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME_CHIFFRES, qui
permet de lire une chaîne de caractères CH commençant obligatoirement par une lettre alphabétique
majuscule (et supposée composée par des lettres et des chiffres), détermine et affiche l'entier S formé
par la somme des chiffres qui figurent dans la chaîne CH.
Exemple :
Pour CH='Ali12abc26' la valeur de S est 1+2+2+6 = 11 Le programme SOMME_CHIFFRES affichera le
résultat suivant : S = 11

Enseignant : AHMED BELHASSEN 55


Algorithmique et programmation

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NOMBRE VOYELLE, qui
permet de lire une chaîne de caractères CH non vide, détermine et affiche l'entier S formé par le
nombre des voyelles qui figurent dans la chaîne CH.
Exemple:
Pour CH='BASES DE DONNEES" la valeur de S est 6 Le programme NOMBRE_VOYELLE affichera le
résultat suivant: S = 6

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LATIN qui lit une phrase en
français et convertit ses mots en latin selon la méthode suivante :
Pour traduire un mot français en latin, placez tout d’abord la première lettre du mot français à la suite
de la dernière et ajoutez ″us″ de cette façon le mot « le » devient « elus », le mot « livre » devient
« ivrelus » et le mot « homme » devient « ommehus ». Les espaces entre les mots ne sont pas
modifiés. On suppose que la phrase en français est une suite de mots séparés par des espaces et ne
contient aucun caractère de ponctuation. Affichez ensuite la phrase en latin.

Exercice 5 :
On appelle poids d’un mot la somme des produits de la position de chaque voyelle contenue dans le
mot par son rang dans l’alphabet français. Une lettre a le même rang qu’elle soit écrite en majuscule
ou en minuscule.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POIDS qui calcule et affiche
le poids d’un mot donné.
Exemple : Le mot Epreuve a pour poids 165 car : (1*5) + (4*5) + (5*21) + (7*5) = 165

Enseignant : AHMED BELHASSEN 56


Algorithmique et programmation

Correction de série
d’exercices n°14
Les structures de
contrôle itératives
Exercice 1 :
Analyse du problème
Nom : CODAGE
Résultat = Ecrire (ch, ″ sera transformée en ″ , sch )
sch= [ sch ← ″ ″] Pour i de 1 à LONG (ch) faire
sch ← sch+CHR(ORD(ch[ i ])+2)
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin CODAGE
TDO
Objet Type/Nature
i Entier
ch ,sch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début CODAGE PROGRAM CODAGE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch,sch :STRING; i:INTEGER;
Lire (ch ) BEGIN
Jusqu’à ( ch <> ″ ″ ) REPEAT
2) sch ← ″ ″ WRITE ('Donner la chaine à tester :');
Pour i de 1 à LONG (ch) faire READLN(ch);
sch ← sch+CHR(ORD(ch[ i ])+2) UNTIL ch<>'';
Fin pour sch:='';
3) Ecrire (ch, ″ sera transformée en ″ , sch ) FOR i:=1 TO LENGTH(ch) DO
4) Fin CODAGE sch:=sch+CHR(ORD(ch[ i ])+2);
WRITELN (ch,' sera transformée en ',sch);
END.

Enseignant : AHMED BELHASSEN 57


Algorithmique et programmation

Exercice 2 :
Analyse du problème
Nom : SOMME_CHIFFRE
Résultat = Ecrire (″La somme des chiffres de ″, ch,″est :″,p )
p= [ p ← 0 ] Pour i de 1 à LONG (ch) faire
si ORD (ch[ i ]) dans [48..57] alors
p ← p+(ORD(ch [ i ])-48)
Fin si
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ ) ET(ORD(ch[1])dans [65..90])
Fin SOMME_CHIFFRE
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début SOMME_CHIFFRE PROGRAM SOMME_CHIFFRE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING;
Lire (ch ) i, p :INTEGER;
Jusqu’à ( ch <> ″ ″ )ET(ORD(ch[1])dans BEGIN
[65..90]) REPEAT
2) p ← 0 WRITE ('Donner la chaine à tester :');
Pour i de 1 à LONG (ch) faire READLN(ch);
si ORD (ch[ i ]) dans [48..57] alors UNTIL (ch<>'')AND(ORD(ch[1]) IN [65..90]);
p ← p+(ORD(ch [ i ])-48) p:=0;
Fin si FOR i:=1 TO LENGTH(ch) DO
Fin pour IF ORD(ch[ i ]) IN [48..57] THEN
3) Ecrire (″La somme des chiffres de ″, p:=p+(ORD(ch[ i ])-48);
ch,″est :″,p ) WRITELN (' La somme des chiffres de ', ch,' est :
4) Fin SOMME_CHIFFRE ',p);
END.

Enseignant : AHMED BELHASSEN 58


Algorithmique et programmation

Exercice 3 :
Analyse du problème
Nom : NOMBRE_VOYELLE
Résultat = Ecrire (″Le nombre des voyelles dans la chaine ″, ch , ″ est ″ , p )
p= [ p ←0 ] Pour i de 1 à LONG (ch) faire
Si ch [ i ] dans [″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] alors
p← p + 1
Fin si
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin NOMBRE_VOYELLE
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début NOMBRE_VOYELLE PROGRAM NOMBRE_VOYELLE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING;
Lire (ch ) i,p :INTEGER;
Jusqu’à ( ch <> ″ ″ ) BEGIN
2) p ← 0 REPEAT
Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
Si ch [ i ] dans READLN(ch);
[″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] UNTIL (ch<>'');
alors p:=0;
p← p + 1 FOR i:=1 TO LENGTH(ch) DO
Fin si IF ch[ i ] IN ['a','A','e','E','u','U','y','Y','o','O','i','I']
Fin pour THEN p:=p+1;
3) Ecrire (″Le nombre des voyelles dans la WRITELN (' Le nombre des voyelles dans la
chaine ″, ch, ″ est ″ , p ) chaine ', ch,' est : ',p);
4) Fin NOMBRE_VOYELLE END.

Enseignant : AHMED BELHASSEN 59


Algorithmique et programmation

Exercice 4 :
Analyse du problème
Nom : LATIN
Résultat = Ecrire (ch, ″ en latin est : ″ , ch2 )
ch2= [ ch1 ← ″ ″ ch2 ← ″ ″ ] Tant que LONG(ch) <>0 faire
p ←pos ( ″ ″,ch)
Si p<>0 alors
ch1← SOUS_CHAINE(ch,1,p-1)
ch1← ch1+ch1[1]+″us″
EFFACE (ch1,1,1)
EFFACE (ch,1,p)
Sinon si LONG(ch) > 0 alors
ch1← ch+ch[1]+″us″;
EFFACE(ch1,1,1);
EFFACE(ch,1,LONG(ch));
Fin si
ch2 ← ch2+ch1;
Fin tant que
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin LATIN
TDO
Objet Type/Nature
p Entier
ch ,ch1,ch2 Chaine de caractère

Algorithme Traduction en PASCAL


0) Début LATIN PROGRAM LATIN;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch,ch1,ch2:STRING;
Lire (ch ) p:INTEGER;
Jusqu’à ( ch <> ″ ″ ) BEGIN
2) ch1 ← ″ ″ ch2 ← ″ ″ REPEAT
Tant que LONG(ch) <>0 faire WRITE ('Donner la chaine à tester :');
p ←pos ( ″ ″,ch) READLN(ch);
si p<>0 alors UNTIL (ch<>'');
ch1← SOUS_CHAINE(ch,1,p-1) ch1:=''; ch2:='';
ch1← ch1+ch1[1]+″us″ WHILE (LENGTH(ch)<>0) DO
EFFACE (ch1,1,1) BEGIN
EFFACE (ch,1,p) p:=POS(' ',ch);
Sinon si LONG(ch) > 0 alors IF(p<>0)THEN
ch1← ch+ch[1]+″us″; BEGIN
EFFACE(ch1,1,1); ch1:=COPY(ch,1,p-1);
EFFACE(ch,1,LONG(ch)); ch1:=ch1+ch1[1]+'us ';
Fin si DELETE(ch1,1,1);
ch2 ← ch2+ch1; DELETE (ch,1,p);
Fin tant que END
3) Ecrire (ch, ″ en latin est : ″ , ch2 ) ELSE IF(LENGTH(ch)>0) THEN
4) Fin LATIN BEGIN

Enseignant : AHMED BELHASSEN 60


Algorithmique et programmation

ch1:=ch+ch[1]+'us ';
DELETE (ch1,1,1);
DELETE (ch,1,LENGTH(ch));
END;
ch2:=ch2+ch1;
END;
WRITELN (ch,' en latin est : ',ch2);
END.

Exercice 5 :
Analyse du problème :
Nom : POIDS
Résultat = Ecrire (″Le poids de mot ″, ch, ″ est ″ , p )
p= [ p ←0 ] Pour i de 1 à LONG (ch) faire
Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors
p ← p+(i *(ORD (ch[ i ])-96))
Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] alors
p ← p+(i *(ORD (ch[ i ])-64))
Fin si
Fin pour
ch=donnée ( ″ Donner la chaine à tester : ″ )
Fin POIDS
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début POIDS PROGRAM POIDS;
1) Ecrire (″Donner la chaine à tester :″ ) , Lire USES WINCRT;
(ch ) VAR i,p :INTEGER;
2) p ← 0 ch:STRING;
Pour i de 1 à LONG (ch) faire BEGIN
Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors WRITE('Donner la chaine à tester :');
p← p+(i *(ORD (ch[ i ])-96)) READLN(ch); p:=0 ;
Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] FOR i:=1 TO LENGTH(ch) DO
alors IF ch[ i ] IN ['a','e','u','y','i','o'] THEN
p← p+(i *(ORD (ch[ i ])-64)) p:=p+(i *(ORD (ch[ i ])-96))
Fin si ELSE IF ch[ i ] IN ['A','E','U','Y','I','O'] THEN
Fin pour p:=p+(i *(ORD (ch[ i ])-64));
3) Ecrire (″Le poids de mot ″, ch, ″ est ″ , p ) WRITELN ('Le poid de mot ',ch,' est ',p);
4) Fin POIDS END.

Enseignant : AHMED BELHASSEN 61


Algorithmique et programmation

Série d’exercices n°15


Les structures de
contrôle itératives
Exercice 1 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MAX_MIN permettant de
chercher le maximum et le minimum dans un tableau T d’entier de taille N (N saisie par l’utilisateur).

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé OCCURENCE permettant de
chercher l’occurrence d’un caractère C dans tableau de chaine de caractère.

Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EXISTE permettant de
remplir un tableau T avec N entiers lu au clavier, de lire un entier E et de vérifier sa présence dans ce
tableau et d’afficher son indice.
Exemple :
T 1 2 10 3 15 5 6 3

Si E = 10 l’ordinateur affiche 3 existe dans T à la position 2


Si E = 9 l’ordinateur affiche 9 n’existe pas dans T.

Enseignant : AHMED BELHASSEN 62


Algorithmique et programmation

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé OCCURRENCE_X qui
permet de remplir un tableau T de N entiers, puis lire un entier X et afficher :
o La position de première occurrence de X dans le tableau T.
o La position de dernière occurrence de X dans le tableau T.
o le nombre d’occurrence de X dans le tableau T.

Exemple : N=10, X=8


T 7 8 17 12 14 8 5 15 8 19
1 2 3 4 5 6 7 8 9 10

o La position de première occurrence de X dans T est : 2.


o La position de dernière occurrence de X dans T est : 9.
o Le nombre d’occurrence de X dans T est : 3.

Exercice 5 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PROD_SCALAIRE qui
permet de calculer et d’afficher le produit scalaire de deux tableaux A et B de n entiers positifs (n
étant un entier compris entre 5 et 50).
N.B : Le produit scalaire de deux tableaux A et B est donné par la formule suivante :
n
PS = ∑ A[i] * B[i]
i =1

Enseignant : AHMED BELHASSEN 63


Algorithmique et programmation

Correction de série
d’exercices n°15
Les structures de
contrôle itératives
Exercice 1 :
Analyse du problème
Nom : MIN_MAX
Résultat = Ecrire (″MIN =″ , min, ″MAX=″,max )
( min , max )= [ max ← t[1] , min ←t[1] ] pour i de 1 à n faire
si t[ i ]< min alors
min ← t[i]
fin si
si t[ i ]> min alors
max ← t[i]
fin si
fin pour
t=[ ] pour i de 1 à n faire
t[ i ] =donnée (″t[ ″, i , ″]=″ )
Fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ]
Fin MIN_MAX
TDO
Objet Type/Nature
n , i , min , max Entier
t Tableau de 100 entiers

Enseignant : AHMED BELHASSEN 64


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début MIN_MAX PROGRAM MIN_MAX ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR n , i , min , max :INTEGER;
Lire (n) t:ARRAY[1..100] OF INTEGER;
Jusqu’à n dans [ 2..100 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITE ('Donner la taille du tableau :');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..100];
3) max ← t[1] min ←t[1] FOR i:=1 TO n DO
pour i de 1 à n faire BEGIN
si t[ i ]< min alors WRITE('t[',i,']=');
min ← t[i] READLN(t[i]);
fin si END;
si t[ i ]> min alors min:=t[1] ; max:=t[1];
max ← t[i] FOR i:=1 TO n DO
fin si BEGIN
fin pour IF t[i] < min THEN min:=t[i];
4) Ecrire (″MIN =″ , min, ″MAX=″,max ) IF t[i] > max THEN max:=t[i];
5) Fin MIN_MAX END;
WRITELN('MIN = ' , min,' MAX = ',max);
END.

Exercice 2 :
Analyse du problème
Nom : OCCURENCE
Résultat = Ecrire (″Le nombre d''ocurrence de ″ , c, ″dans T ″,nbr)
nbr = [ nbr ← 0] pour i de 1 à n faire
ch ← t[ i ]
l ← LONG (ch)
pour j de 1 à l faire
si ch[ j ] = c alors
nbr ← nbr + 1
fin si
fin pour
fin pour
c=donnée (″Donner le caractère à chercher : ″)
t=[ ] pour i de 1 à n faire
t[ i ] =donnée (″t[ ″, i , ″]=″ )
Fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ]
Fin OCCURRENCE

Enseignant : AHMED BELHASSEN 65


Algorithmique et programmation

TDO
Objet Type/Nature
n , i , j , nbr , l Entier
t Tableau de 100 entiers
c Caractère
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début OCCURENCE PROGRAM OCCURENCE ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR n , i , j , nbr , l :INTEGER;
Lire (n) ch : STRING;
Jusqu’à n dans [ 2..100 ] c: CHAR;
2) pour i de 1 à n faire t : ARRAY[1..100] OF STRING ;
Ecrire ( ″t[ ″, i , ″]=″ ) BEGIN
Lire (t[i]) REPEAT
fin pour WRITE ('Donner la taille du tableau :');
3) Ecrire (″Donner le caractère à chercher : ″ ) READLN(n);
Lire (c) UNTIL n IN [2..100];
4) nbr ← 0 FOR i:=1 TO n DO
pour i de 1 à n faire BEGIN
ch ← t[ i ] WRITE('t[',i,']=');
l ← LONG (ch) READLN(t[i]);
pour j de 1 à l faire END;
si ch[ j ] = c alors WRITE ('Donner le caractère à chercher : ');
nbr ← nbr + 1 READLN(c);
fin si nbr:=0;
fin pour FOR i:=1 TO n DO
fin pour BEGIN
5) Ecrire (″Le nombre d''ocurrence de ″ , c, ch:= t[i] ; l:=LENGTH(ch);
″dans T ″,nbr) FOR j :=1 TO l DO
6) Fin OCCURENCE IF ch[j]=c THEN
nbr:=nbr+1;
END;
WRITELN ('Le nombre d''ocurrence de ' , c ,' dans
T =',nbr);
END.

Enseignant : AHMED BELHASSEN 66


Algorithmique et programmation

Exercice 3 :
Analyse du problème
Nom : EXISTE
Résultat = existance
existance =[ ] si(t[ i ] =e) alors
Ecrire (e, ″ existe dans T à la position ″ , i )
Sinon Ecrire (e, ″ n''existe pas dans T ″ )
Fin si
i=[ i ← 0] Ré pé ter
i ← i+1
Jusqu’à ( i=n) OU (t[ i ]=e)
e=donnée (″E=″)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..50 ]
Fin EXISTE
TDO
Objet Type/Nature
n,e,i Entier
t Tableau de 50 entiers

Algorithme Traduction en PASCAL


0) Début EXISTE PROGRAM EXISTE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,e,i: INTEGER;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..50] ;
3) Ecrire ( ″E=″ ) FOR i:=1 TO n DO
Lire (e) BEGIN
4) i ← 0 WRITE('t[',i,']='); READLN(t[i]);
Répéter END;
i ← i+1 WRITELN('E =');
Jusqu’à ( i=n) OU (t[ i ]=e) READLN(e);
5) si(t[ i ] =e) alors i:=0;
Ecrire (e, ″ existe dans T à la position ″ , i ) REPEAT
Sinon Ecrire (e, ″ n''existe pas dans T ″ ) i:=i+1;
Fin si UNTIL ( i=n) OR ( t[i] = e);
6) Fin EXISTE IF ( t[i] = e ) THEN
WRITELN ( e, ' existe dans T à la position ' ,i )
ELSE
WRITELN ( e ,' n''existe pas dans T ');
END.

Enseignant : AHMED BELHASSEN 67


Algorithmique et programmation

Exercice 4 :
Analyse du problème
Nom : OCCURENCE_X
Résultat = Ecrire (″Le nombre d''occurence de ″, x ,″est ″ ,s )
s= [ s←0 ] pour i de 1 à n faire
si(t[ i ] =x) alors
s ← s+1
fin si
fin pour
Dernier=[ ] si(t[ i ] =x) alors
Ecrire (″la dernière occurrence de″,x,″est à la position ″ ,i )
Sinon Ecrire (x,″ne figure pas dans T″ )
Fin si
i=[ i ← n+1] Ré pé ter
i ← i-1
Jusqu’à ( i=0) OU (t[ i ]=x)
Premier=[ ] si(t[ i ] =x) alors
Ecrire (″la première occurrence de″,x,″est à la position ″ ,i )
Sinon Ecrire (x,″ne figure pas dans T″ )
Fin si
i=[ i ← 0] Ré pé ter
i ← i+1
Jusqu’à ( i=n) OU (t[ i ]=x)
x=donnée (″X=″)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..50 ]
Fin OCCURENCE_X
TDO
Objet Type/Nature
n,x,s,i Entier
t Tableau de 50 entiers

Enseignant : AHMED BELHASSEN 68


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début OCCURENCE_X PROGRAM OCCURENCE_X;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,x,s,i :INTEGER ;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..50] ;
3) Ecrire ( ″X=″ ) FOR i:=1 TO n DO
Lire (x) BEGIN
4) i ← 0 WRITE('t[',i,']=');
Répéter READLN(t[i]);
i ← i+1 END;
Jusqu’à ( i=n) OU (t[ i ]=x) WRITELN('X=');
5) si(t[ i ] =x) alors READLN(x);
Ecrire (″la première occurrence de″,x,″est i:=0;
à la position ″ ,i ) REPEAT
Sinon Ecrire (x ,″ne figure pas dans T″ ) i:=i+1;
Fin si UNTIL ( i=n) OR (t[ i ] = x);
6) i ← n+1 IF ( t[i] = x ) THEN
Répéter WRITELN (' la première occurrence de ', x , '
i ← i-1 est à la position ' ,i )
Jusqu’à ( i=0) OU (t[ i ]=x) ELSE
7) si(t[ i ] =x) alors WRITELN ( x ,' ne figure pas dans T ');
Ecrire (″la dernière occurrence de″,x,″est i:=n+1;
à la position ″ ,i ) REPEAT
Sinon Ecrire (x,″ne figure pas dans T″ ) i:=i-1;
Fin si UNTIL ( i=0) OR ( t[ i ] = x );
8) s←0 IF ( t[i] = x) THEN
pour i de 1 à n faire WRITELN (' la dernière occurrence de ', x , ' est
si(t[ i ] =x) alors à la position ' ,i )
s ← s+1 ELSE
fin si WRITELN ( x ,' ne figure pas dans T ');
fin pour s:=0;
9) Ecrire (″Le nombre d''occurence de ″,x,″est ″ FOR i:=1 TO n DO
,s ) IF ( t[i]=x) THEN s:=s+1;
10) Fin OCCURENCE_X WRITELN(' Le nombre d''occurence de ' , x , '
est ' , s);
END.

Enseignant : AHMED BELHASSEN 69


Algorithmique et programmation

Exercice 5 :
Analyse du problème
Nom : PRODUIT_SCALAIRE
Résultat = Ecrire ( ″ Le produit scalaire est égale à ″,s )
s =[ s ← 0 ] pour i de 1 à n faire
s ← s+a[ i ]*b[ i ]
Fin pour
b=[ ] pour i de 1 à n faire
b[ i ]=donnée( ″b[ ″, i , ″]=″ )
fin pour
a=[ ] pour i de 1 à n faire
a[ i ]=donnée( ″a[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 5..50 ]
Fin PRODUIT_SCALAIRE
TDO
Objet Type/Nature
n,i Entier
a,b Tableau de 50 entiers
s Entier long

Algorithme Traduction en PASCAL


0) Début PRODUIT_SCALAIRE PROGRAM PRODUIT_SCALAIRE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR a,b :ARRAY[1..50]OF INTEGER;
Lire (n) n,i :INTEGER;
Jusqu’à n dans [ 5..50 ] s :LONGINT;
2) pour i de 1 à n faire BEGIN
Ecrire (″a[ ″, i , ″]=″ ) REPEAT
Lire (a[i]) WRITELN ('Donner la taille du tableau');
fin pour READLN(n);
3) pour i de 1 à n faire UNTIL n IN [5..50] ;
Ecrire (″b[ ″, i , ″]=″ ) FOR i:=1 TO n DO
Lire (b[i]) BEGIN
fin pour WRITE ('a[',i,']=');
4) s ← 0 READLN(a[i]);
pour i de 1 à n faire END;
s ← s+a[ i ]*b[ i ] WRITELN;
Fin pour FOR i:=1 TO n DO
5) Ecrire (″ Le produit scalaire est égale à ″,s ) BEGIN
6) Fin PRODUIT_SCALAIRE WRITE ('b[',i,']=');
READLN(b[i]);
END;
s:=0;
FOR i:=1 TO n DO s:=s+a[i]*b[i];
WRITELN (' Le produit scalaire est égale à ' , s);
END.

Enseignant : AHMED BELHASSEN 70


Algorithmique et programmation

Série d’exercices n°16


Les sous programmes
Travail demandé :
1) Analyser ces problèmes en le décomposant en modules.
2) Analyser chacun de ces modules.
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du
programme principal.

Exercice 1 :
On veut écrire un programme intitulé FACTORIELLE permettant de demander un nombre n>0 de
départ, et qui calcule sa factorielle.
Exemple : le factorielle de n=6, notée 6 ! , vaut 1 * 2 * 3 * 4 * 5 * 6 = 720.

Exercice 2 :
On veut écrire un programme intitulé SOMPROD permettant de calculer la somme et le produit de
tous les éléments du tableau T de n réels positifs avec n entre 5 et 25.

Exercice 3 :
Ecrire un programme en PASCAL intitulé TRIANGLE qui saisit une chaîne de caractères de longueur
minimal 3 et l’affiche sous la forme d’un triangle comme indiqué ci-dessous.
Exemple :
Si la chaîne saisie est "INTERNET", on aura :
I
IN
INT
INTE
INTER
INTERN
INTERNE
INTERNET

Enseignant : AHMED BELHASSEN 71


Algorithmique et programmation

Exercice 4 :
On veut écrire un programme intitulé SCALAIRE permettant de calculer le produit scalaire de deux
tableaux d’entier A et B de même taille n, avec 5<=n<=25.
Exemple :
A 8 7 2 1 0

B 5 2 4 6 1

S=A[1] * B[1] + A[2] * B[2] + A[3] * B[3] + A[4] * B[4] + A[5] * B[5]
S=8 * 5 + 7 * 2 + 2 * 4 + 1 * 6 + 0 * 1 = 68

Exercice 5 :
On veut écrire un programme intitulé SOMME permettant et d’afficher la somme Sn pour un entier n

3 5 7
positif donné en utilisant la formule ci-dessous.

 = 1 + + + + ⋯ + 2 ∗ − 1 
2 3 4
Exercice 6 :
Ecrire un programme en PASCAL intitulé AFFICHAGE permettant de lire un mot intitulé CHM
composé au moins de 5 caractères et d’afficher les chaînes de caractères suivantes :
• La chaîne formée par le premier et le dernier caractère de CHM
• La chaîne formée par les deux premiers et les deux derniers caractères de CHM
• Etc.
Exemple : Si la chaîne CHM contient "TURBO" alors le programme affichera :
TO
TUBO
TURRBO
TURBURBO
TURBOTURBO

Enseignant : AHMED BELHASSEN 72


Algorithmique et programmation

Série d’exercices n°17


Les sous programmes
Travail demandé :
1) Analyser ces problèmes en le décomposant en modules.
2) Analyser chacun de ces modules.
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du
programme principal.

Exercice 1 :
On veut écrire un programme intitulé COMBINAISON permettant de déterminer et afficher le nombre
de combinaison de p objets parmi n.

!
n et p sont deux entiers naturels strictement positifs



= avec n >= 
!  − !
Exercice 2 :
Ecrire un programme en PASCAL intitulé MOYENNE permettant de remplir deux tableaux P et Q de
taille maximales n (n <= 25) par des réels. Puis de ranger respectivement les éléments positifs de P
puis ceux de Q dans un tableau TPOS Ensuite calculer puis afficher la moyenne arithmétique des
éléments de TPOS.

Exercice 3 :
Un entier positif est dit parfait s’il égal à la somme de ses diviseurs (excepté lui-même).Par exemple 6
est parfait, car 6 = 1 + 2 + 3 ; de même 28 est parfait, car 28 = 1 + 2 + 4 + 7 + 14.
On veut écrire un programme intitulé PARF permettant de vérifier si un entier x est parfait ou non.

Exercice 4 :
Soit un tableau T de 20 entiers positifs. Ecrire un programme en PASCAL intitulé POSITION qui
permet d’afficher les éléments de T compris entre deux positions P1 et P2, leur moyenne
arithmétique, la valeur maximale et la valeur minimale contenues dans cet intervalle.
On donne 1 ≤ P1 < P2 ≤ 20.

Enseignant : AHMED BELHASSEN 73


Algorithmique et programmation

Exercice 5 :
Deux entiers naturels strictement positifs m et n sont dits nombre amis si et seulement si :
• la somme des diviseurs de m sauf lui-même est égale à n
• et la somme des diviseurs de n sauf lui-même est égale à m.
Exemple :
220 et 284 sont deux nombres amis. En effet :
D284 = {1, 2, 4, 71, 142, 284}
D220 = {1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110, 220}
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
Ecrire un programme en PASCAL intitulé AMIS qui permet de déterminer puis d’afficher si deux
entiers naturels donnés m et n sont amis ou non.

Exercice 6 :
Ecrire un programme en PASCAL intitulé BOUM qui réalise le traitement suivant :
- Choisir un entier n de l’intervalle [100, 500] et un entier m de l’intervalle [10,99]
- Afficher tous les entiers de l’intervalle [1, m] en remplaçant par le caractère "*" tous les diviseurs de
n ainsi que tous les entiers comportant dans leurs écritures le chiffre des unités de n.
Exemple d’exécution :
Si n = 100 et m = 20 alors la liste suivante sera affichée :
* * 3 * * 6 7 8 9 * 11 12 13 14 15 16 17 18 19 *

Exercice 7 :
On veut écrire un programme intitulé JUMEAUX qui permet de déterminer et d’afficher tous les
entiers jumeaux compris entre 1 et N (N est un entier donné supérieur à 2).
Deux nombres a et b sont dits jumeaux si a et b sont premiers et a = b + 2.
Exemple :
5 et 3 sont premiers, 5 = 3 + 2, donc 5 et 3 sont deux entiers jumeaux.

Enseignant : AHMED BELHASSEN 74


Algorithmique et programmation

Série d’exercices n°18


Les sous programmes
Travail demandé :
1) Analyser ces problèmes en le décomposant en modules.
2) Analyser chacun de ces modules.
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du
programme principal.

Exercice 1 :
On veut écrire un programme intitulé CALC_ARRANGEMENT permettant de calculer et d’afficher
l’arrangement de deux entiers données n et p tel que 1 ≤ p ≤n.

!
Sachant que :

= , "#$ %"#% 1 ≤  ≤


 − !
Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ECART permettant de
saisir un entier naturel n avec (5 < n < 20) et n réels à mettre dans un tableau A puis calculer la
moyenne arithmétique m des éléments de A et leur écart type S.
Sachant que :
. .

m =  ( A*i,  / n S = 3( A*i, − m 


/01 /01

Exercice 3 :
Ecrire un programme en PASCAL intitulé COMPOSE qui permet de saisir un entier positif N, composé
de trois chiffres , de déterminer et d’afficher tous les nombres qui peuvent être formés par les chiffres
de N, ainsi que le plus petit et le plus grand de ces nombres
Exemple :
Pour N = 427, le programme affichera :
Les nombres formés par les chiffres de 427 sont : 427, 472, 724, 742, 247, 274
Le plus petit nombre est 247
Le plus grand nombre est 742

Enseignant : AHMED BELHASSEN 75


Algorithmique et programmation

Exercice 4 :
La suite de Syracuse :
A un entier n strictement positif on associe n/2 si n est pair et 3n+1 si n est impair.
En réappliquant cette transformation à l'entier obtenu, on définit un algorithme dit de Syracuse.
Bien qu'à ce jour personne n'en ait trouvé de démonstration, il semble que pour tout entier
strictement positif de départ on finisse toujours par arriver à 1.
Exemple : valeur de départ n=12
6 3 10 5 16 8 4 2 1
On doit appliquer 9 fois la transformation.
On veut écrire un programme intitulé SYRACUSE permettant de lire une valeur de départ proposée
par l'utilisateur, afficher la liste des entiers obtenus jusqu'à 1, ainsi que le nombre de fois qu'il est
nécessaire d'appliquer la transformation pour y arriver.

Exercice 5 :

5₀ = 1
La suite fibonacci est définie par :

4 5₁ = 1
5 = 581 + 58
On veut écrire un programme en PASCAL intitulé FIBONACCI permettant de saisir un entier naturel n

les valeurs du rapport : 59 /59:1 .


strictement supérieur à 1 puis calculer et afficher pour toutes les valeurs de i inférieure ou égale à n,

Exercice 6 :
On veut écrire un programme intitulé PREMIER permettant de saisir un nombre n et d’afficher s’il est
premier ou non. En déduire l’algorithme de tous les nombres premiers situés entre 1 et 100.

Exercice 7 :
On veut écrire un programme intitulé MULTIPLICATION permettant de réaliser l’exploit de
multiplier deux nombres entiers n et m en n’utilisant que des multiplications/divisions par 2.
A chaque étape, n est divisé par 2 (division entière) et m est multiplié par 2.
Si n est impair, la valeur de m est ajoutée au futur résultat.
Exemple : 321 * 457 ; prod=0
n m Observations
321 457 n est impair donc futur résultat prod = 0 + m =457 et m = m*2 = 457
160 914 n est pair donc on n’ajoute pas ; m = m * 2 = 914
80 1828 n est pair donc on n’ajoute pas ; m = m * 2 = 1828
40 3656 n est pair donc on n’ajoute pas ; m = m * 2 = 3656
20 7312 n est pair donc on n’ajoute pas ; m = m * 2 = 7312
10 14624 n est pair donc on n’ajoute pas ; m = m * 2 = 145624
n est impair donc futur résultat prod = m * 2 =29248 et
5 29248
prod = prod + m = 457 + 29248 = 29705
2 58496 n est pair donc on n’ajoute pas ; m = m * 2 = 58496
n est impair donc résultat : m = m * 2 = 58496 ;
1 116992
prod = prod + m = 29705 + 116992 = 146697

Enseignant : AHMED BELHASSEN 76


Algorithmique et programmation

Série d’exercices n°19


Les algorithmes de tri
et de recherche
Travail demandé :
1) Analyser ces problèmes en le décomposant en modules.
2) Analyser chacun de ces modules.
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du
programme principal.

Exercice 1 :
On veut écrire un programme intitulé CHERCHE qui permet de chercher un caractère C dans un
tableau T de taille N (N saisie par l’utilisateur). La méthode de recherche à utiliser est la recherche
séquentielle.

Exercice 2 :
On veut écrire un programme intitulé TRI qui permet de remplir et trier par ordre décroissant les
éléments d’un tableau A de N entiers positifs dans un nouveau tableau B de même dimension. N étant
un entier vérifiant 5<=N<=25.
On utilisera la démarche suivante :
o Chercher le maximum du tableau A..
o Placer ce maximum dans le tableau B.
o Remplacer le maximum par -1 dans le tableau A. .
o Refaire les étapes 1, 2 et 3 jusqu’à ce que le tableau A soit entièrement composé par -1.

Exercice 3 :
On a vu une méthode de recherche qu’on appelle la recherche séquentielle. Une autre technique de
recherche en table est la recherche dichotomique et qui s’applique aux tableaux triés.
Supposons que la table des noms soit triée en ordre alphabétique (comme l’annuaire des PPT).
Au lieu de rechercher séquentiellement on compare la clé à chercher au nom qui se trouve au milieu
de la table des noms.

Enseignant : AHMED BELHASSEN 77


Algorithmique et programmation

Si c’est la même, on retourne le numéro de téléphone du milieu, sinon on recommence sur la première
moitié (ou la deuxième) si le nom recherché est plus petit (ou plus grand) que le nom rangé au milieu
de la table.
On veut écrire un programme intitulé RECHERCHE qui permet de chercher et déterminer le numéro
d’une personne X dans l’annuaire des PPT de taille N (5<=N<=50). Si X n’existe pas le numéro
retourné =-1.

Exemple :
Nom Tel
Ali 71256892
Lamia 72365489
Mouna 71457893
Mounir 73569742
Salah 75125487
Ramzi 77458215
Yacine 74586895
Zied 76156456

Si on cherche le numéro du nom "Ramzi", le programme nous retourne 77458215

Enseignant : AHMED BELHASSEN 78


Algorithmique et programmation

Correction de série
d’exercices n°19
Les algorithmes de tri
et de recherche
Exercice 1 :
Exemple : Message ← ″N’existe pas dans ″ et C=″Y″
T[1] <>C Message ← ″N’existe pas dans″ i=1

F H Y K P

T[2] <>C Message ← ″N’existe pas dans″ i=2

F H Y K P

T[3] = C Message ← ″existe dans T″ i=3

F H Y K P

Le parcours du tableau s’arrête ici puisque on a trouvé ″Y″ dans T. si ″Y″ n’existe pas dans T alors on
sort du parcours avec i = N+1.

Analyse du problème
Nom : CHERCHE
Résultat = Ecrire (C, Message)
Message = [Message ← ″N’existe pas dans T″, i ← 1] Tant que ( i<=n) ET ( T[ i ]<>C) Faire
i ← i+1
Fin Tant que
Si i<=n alors
Message ← ″existe dans T″
Fin si
C=donnée (″C =″)
t=[ ] pour i de 1 à n faire
T[ i ]=donnée( ″T[ ″, i , ″]=″ )
fin pour

Enseignant : AHMED BELHASSEN 79


Algorithmique et programmation

n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ]
Fin CHERCHE
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 100 caractères.

TDO
Objet Type/Nature
n,i Entier
C Caractère
Message Chaine
T TAB

Algorithme Traduction en PASCAL


0) Début CHERCHE PROGRAM CHERCHE ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) TYPE
Lire (n) TAB = ARRAY[1..100]OF CHAR ;
Jusqu’à n dans [ 2..100 ] VAR T: TAB ;
2) pour i de 1 à n faire n,i :INTEGER ;
Ecrire ( ″T[ ″, i , ″]=″ ) C : CHAR ;
Lire (T[i]) Message : STRING ;
fin pour BEGIN
3) Ecrire ( ″C =″ ) REPEAT
Lire (C) WRITELN ('Donner la taille du tableau');
4) Message ← ″N’existe pas dans T″, i ← 1 READLN(n);
Tant que ( i<=n) ET ( T[ i ]<>C) Faire UNTIL n IN [2..100] ;
i ← i+1 FOR i:=1 TO n DO
Fin Tant que BEGIN
Si i<=n alors WRITE('T[',i,']=');
Message ← ″existe dans T″ READLN(T[i]);
Fin si END;
5) Ecrire (C, Message) WRITELN('C=');
6) Fin CHERCHE READLN(C);
i:=1;
Message := ' N''existe pas dans T' ;
WHILE ( i<=n) AND ( T[ i ]<>C) DO
BEGIN
i:=i+1;
END;
IF ( i<=n) THEN
Message := ' existe dans T ' ;
WRITELN (C, Message) ;
END.

Enseignant : AHMED BELHASSEN 80


Algorithmique et programmation

Exercice 2 :
Analyse du programme principal :
Nom : Tri
Résultat = PROC Affiche (N , B)
PROC Tri_tab (N , A , B)
A = PROC Remplir (N , A)
N = PROC Taille (N)
Fin Tri
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 100 entiers.
TDO
Objet Type/Nature
N entier
A,B TAB
Affiche procédure
Tri_tab procédure
Remplir procédure
Taille procédure
Algorithme du programme principal :
0) DÉBUT Tri
1) PROC Taille (N)
2) PROC Remplir (N , A)
3) PROC Tri_tab (N , A , B)
4) PROC Affiche (N , B)
5) Fin Tri
Analyse de la procédure Taille :
DEF PROC Taille (var x : Entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez le nombre des éléments du tableau″)
Jusqu’à (x DANS [5..100])
Fin Taille
Algorithme de la procédure Taille :
0) DEF PROC Taille (var x : entier)
1) Répéter
Ecrire (″Donnez le nombre des éléments du tableau″)
Lire(x)
Jusqu’à (x DANS [5..100])
2) Fin Taille
Analyse de la procédure Remplir :
DEF PROC Remplir ( y : entier ; var vec : TAB)
Résultat = vec
vec =[ ] pour i de 1 à y faire
Répéter
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Jusqu’à (vec[i]>0)
fin pour
Fin Remplir

Enseignant : AHMED BELHASSEN 81


Algorithmique et programmation

TDOL
Objet Type/Nature
i entier
Algorithme de la procédure Remplir :
0) DEF PROC Remplir ( y : entier ; var vec : TAB)
1) pour i de 1 à y faire
Répéter
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (vec[i])
Jusqu’à (vec[i]>0)
fin pour
2) Fin Remplir
Analyse de la procédure Tri_tab :
DEF PROC Tri_tab ( N : entier ; var A , B : TAB)
Résultat = tab_trié
tab_trié =[ j ← 1 ] Répéter
m ← FN Max ( N , A)
si m <> -1 alors
B[ j ] ← A[ m ]
A[ m ] ← -1
j ← j +1
fin si
Jusqu’à (m=-1)
Fin Tri_tab
TDOL
Objet Type/Nature
j,m entier
Max Fonction
Algorithme de la procédure Tri_tab :
0) DEF PROC Tri_tab ( N : entier ; var A , B : TAB)
1) j ← 1
Répéter
m ← FN Max ( N , A)
si m <> -1 alors
B[ j ] ← A[ m ]
A[ m ] ← -1
j ← j +1
fin si
Jusqu’à (m=-1)
2) Fin Tri_tab
Analyse de la fonction Max :
DEF FN Max ( y : entier ; vec : TAB) :entier
Résultat = Max
Max =[ Max ← -1 , p ← -1 ] pour i de 1 à y faire
si ( vec[ i ] > p ) alors
p ← vec [ i ]
Max ← i
fin si
fin pour
Fin Max

Enseignant : AHMED BELHASSEN 82


Algorithmique et programmation

TDOL
Objet Type/Nature
p,i entier
Algorithme de la fonction Max :
0) DEF FN Max ( y : entier ; vec : TAB) :entier
1) Max ← -1 , p ← -1
pour i de 1 à y faire
si ( vec[ i ] > p ) alors
p ← vec [ i ]
Max ← i
fin si
fin pour
2) Fin Max
Analyse de la procédure Affiche :
DEF PROC Affiche (y : entier ; vec :TAB)
Résultat = affichage
affichage =[ ] pour i de 1 à y faire
Ecrire (vec[i])
fin pour
Fin Affiche
TDOL
Objet Type/Nature
i entier
Algorithme de la procédure Affiche :
0) DEF PROC Affiche (y : entier ; vec :TAB)
1) pour i de 1 à y faire
Ecrire (vec[i])
fin pour
2) Fin Affiche

Traduction en PASCAL
PROGRAM Tri ;
USES WINCRT;
TYPE
TAB = ARRAY [1..100] OF INTEGER;
VAR A , B :TAB;
N : INTEGER;
PROCEDURE Taille ( VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez le nombre des éléments du tableau');
READLN(x);
UNTIL (x IN [5..100]);
END;

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


VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN

Enseignant : AHMED BELHASSEN 83


Algorithmique et programmation

REPEAT
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[ i ]);
UNTIL (vec[ i ] > 0);
END;
END;

FUNCTION Max ( y : INTEGER ; vec : TAB) :INTEGER ;


VAR
p , i : INTEGER ;
BEGIN
Max := -1 ; p := -1 ;
FOR i :=1 TO y DO
IF ( vec[ i ] > p ) THEN
BEGIN
p :=vec [ i ] ;
Max := i ;
END ;
END ;

PROCEDURE Tri_tab ( N : INTEGER ; VAR A , B : TAB) ;


VAR
j , m : INTEGER ;
BEGIN
j := 1 ;
REPEAT
m := Max ( N , A) ;
IF m <> -1 THEN
BEGIN
B[ j ] := A[ m ] ;
A[ m ] :=-1 ;
j := j +1 ;
END ;
UNTIL (m=-1) ;
END ;

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


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

BEGIN
Taille (N) ;
Remplir (N , A) ;
Tri_tab (N , A , B) ;
Affiche (N , B) ;
END.

Enseignant : AHMED BELHASSEN 84


Algorithmique et programmation

Exercice 3 :
Exemple : Pour X =″Ramzi″ on obtient Num = 77458215
On a d=10 et g =1
Itération 1 :
i ← ( g + d ) DIV 2
i= 5
(X < nom [ i ] ) = FAUX donc X existe dans la partie de 6 à 10 ; g ← 6 et d=10 ; X <> nom [ i ] .

N Nom Tel Observations


1 Ali 71256892
2 Lamia 72365489
3 Mouna 71457893
4 Mounir 73569742
5 Nedia 78548971 i = 5 ; x < nom [ 5 ] ; on cherche dans la partie de 6 à 10
6 Salah 75125487
7 Ramzi 77458215
8 Tarak 71548981
9 Yacine 74586895
10 Zied 76156456

On a d=10 et g =6
Itération 2 :
i ← ( g + d ) DIV 2
i= 8
(X < nom [ i ] ) = VRAI donc X existe dans la partie de 6 à 7 ; g = 6 et d←7 ; X <> nom [ i ] .

N Nom Tel Observations


6 Salah 75125487
7 Ramzi 77458215
8 Tarak 71548981 i = 8 ; x < nom [ 8 ] ; on cherche dans la partie de 6 à 7
9 Yacine 74586895
10 Zied 76156456

On a d=7 et g =6
Itération 3 :
i ← ( g + d ) DIV 2
i= 6
(X < nom [ i ] ) = FAUX donc X existe dans la partie de 7 à 7 ; g ← 7 et d=7 ; X = nom [ i ] .

N Nom Tel Observations


6 Salah 75125487 i = 6 ; x > nom [ 6 ] ; on cherche dans la partie de 7 à 7
7 Ramzi 77458215

Enseignant : AHMED BELHASSEN 85


Algorithmique et programmation

Analyse du problème
Nom : RECHERCHE
Résultat = Ecrire (″Le numéro de la personne″ , X , ″ = ″ , num)
num = [ g ← 1, d ← N ] Répéter
i ← ( g+d ) DIV 2
si X <nom [ i ] alors
d ← i -1
sinon
g ← i+1
fin si
jusqu’à ( X = nom [ i ] ) OU ( g > d )
si X = nom [ i ] alors
num ← tel [ i ]
sinon
num ← -1
fin si
X=donnée (″X =″)
( nom , tel )=[ ] pour j de 1 à N faire
nom [ j ]=donnée( ″nom [ ″, j , ″]=″ )
tel [ j ]=donnée( ″tel [ ″, j , ″]=″ )
fin pour
N=[ ] Répéter
N=donnée (″Donner la taille du tableau :″)
Jusqu’à N dans [ 5..50 ]
Fin RECHERCHE
Tableau de déclaration des nouveaux types
Type
TAB1 = tableau de 100 chaines.
TAB2 = tableau de 100 entier long.

TDO
Objet Type/Nature
N , g, d , i , j Entier
num Entier long
X Chaine
nom TAB1
tel TAB2

Enseignant : AHMED BELHASSEN 86


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début RECHERCHE PROGRAM RECHERCHE ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) TYPE
Lire (N) TAB1 = ARRAY[1..100]OF STRING ;
Jusqu’à N dans [ 5..50 ] TAB2 = ARRAY[1..100]OF LONGINT ;
2) pour j de 1 à N faire VAR nom : TAB1 ; tel :TAB2 ;
Ecrire ( ″nom [ ″, j , ″]=″ ) N , g, d , i , j :INTEGER ;
Lire (nom[ j ]) num : LONGINT ;
Ecrire ( ″tel [ ″, j , ″]=″ ) X : STRING ;
Lire (tel[ j ]) BEGIN
fin pour REPEAT
3) Ecrire ( ″X =″ ) WRITELN ('Donner la taille du tableau');
Lire (X) READLN(N);
4) g ← 1, d ← N UNTIL N IN [5..50] ;
Répéter FOR j:=1 TO N DO
i ← ( g+d ) DIV 2 BEGIN
si X <nom [ i ] alors WRITE ('nom[',j,']=');
d ← i -1 READLN(nom[ j ]);
sinon WRITE ('tel[',j,']=');
g ← i+1 READLN(tel[ j ]);
fin si END;
jusqu’à ( X = nom [ i ] ) OU ( g > d ) WRITELN('X =');
si X = nom [ i ] alors READLN(X);
num ← tel [ i ] g := 1 ; d:= N ;
sinon REPEAT
num ← -1 i :=( g+d ) DIV 2 ;
fin si IF X <nom [ i ] THEN
5) Ecrire (″Le numéro de la personne″ , X , ″ = ″ d := i -1
, num) ELSE
6) Fin RECHERCHE g := i+1 ;
UNTIL ( X = nom [ i ] ) OR ( g > d ) ;
IF X = nom [ i ] THEN
num :=tel [ i ]
ELSE
num :=-1 ;
WRITELN (' Le numéro de la personne ' , X , ' = ' ,
num) ;
END.

Enseignant : AHMED BELHASSEN 87


Algorithmique et programmation

Série d’exercices
Les structures de
données & les structures
simples
Exercice 1 : Soit les déclarations suivantes :
Variable Type Valeur
X Real 2.2
Y Real 0.2
N Integer 20
Z Integer -2
T Char 'n'
B Boolean True

Soient les expressions suivantes :

N1 :=(X+Y)*(X-Y)/(X+Z) ;
N2 :=1.2*( N MOD Z ) ;
N3 :=N DIV Z + Z MOD N ;
N4 :=(‘a’ > T ) XOR ( ORD(‘A’) > N) ;
N5 :=N3 * Z DIV 4 * Z MOD N – N2 ;
N6 :=NOT((N1=<12 ) OR (N3>=5) AND ( N2 <>10)) AND B ;
En utilisant les valeurs des variables X,Y,Z,T et B , dans chaque cas , déterminer le type ainsi que les valeurs de
chacune des variables Ni sachant que ORD('A')=65.

Exercice 2 : Pour chacun des cas suivants, évaluer et donner le type des expressions logiques en A, B, C
et D pour les deux cas suivants :
1. ( a,b,c,d )=(5,7,2,7)
2. ( a,b,c,d )=(4,2,1,-9)

A := (a<b) AND (c>d)


B := (b=d) AND NOT(a<c)
C := NOT ((c+a=<b) OR (a>d))
D:= (a+c<d) XOR (b-d>c)

Enseignant : AHMED BELHASSEN 1


Algorithmique et programmation

Exercice 3 :
1. Donner l’expression booléenne valide permettant de vérifier la validité d’une heure donnée.
On donne les paramètre de l’heure : heure(h) , minute(m) , seconde(s).
2. Retaper une autre expression booléenne invalide permettant de vérifier cette fois si une heure donnée est
invalide.

Exercice 4 : Donner en algorithmique et en PASCAL l’équivalent de chacune des expressions


arithmétiques suivantes :

 x + 1² 2x² + 4x − 1 x³
A = B = |10 x + 2| D= −1
√x |x + 5| C =  x  + 2 
3

Exercice 5 : Dite si les expressions suivantes sont valides ou non (avec X désigne un réel et n désigne un
entier ) .

A) n ← m / 2 ( m est un entier pair )


B) X ← ABS(n)
C) n ← ABS(X)
D) X ← ( 2 * n - 1)/5

Exercice 6 : Déclarer les types qui permettent de stocker :


1. Les états de la matière : liquide , solide , gaz .
2. Une image noir et blanc de 512 * 512 pixels .

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


C1←″ ALGORITHME ″

C2←″ RECURRENT ″

Instruction Résultat
1) N ← Long(C2) N=
2) Insère (C2, C1, 11) C1=
3) N ← Long(C1) N=
4) N ← Pos (″N″, C2) N=
5) C3 ←Sous_chaîne (C1, 9,7) C3=
6) Efface (C2, 2,5) C2=
7) C3 ← C3 + C2 C3=

Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation

Exercice 8 : Donner le type et le résultat des expressions suivantes, ou bien dire si elles ne sont pas bien
formées.

1. ( 2 + 3 ) * 4 12. 6 MOD 4 * 2 DIV 3


2. 2 + ( 3 * 4 ) 13. FRAC ( ARRONDI ( 3.51) / 2 )
3. ( 3 * ( 1 + 2 ) ) + 4 14. 7 DIV ( ( 5 MOD 3) MOD 4)
4. SIN (0) * 5.0 15. FAUX OU NON FAUX ET VRAI
5. 2 + 3 * 4 16. ( 12 > 24 ) + ( 2 + 4 =12)
6. 2 * 3 + 4 DIV 3 17. ( 37 – 3 >= 14 ) – ‘a’ + 3
7. 2 + ( 3 + 4 * 2 ) * 5 18. PRED ( ‘b’ ) > ‘k’
8. ( 10 DIV 5 ) / 2 19. 12 > 3 > 4
9. TRONC ( 6/4) 20. NON ( 12 <> 3 * 16.8 / 4 ) ET VRAI
10. ENT ( 10 DIV 3 ) 21. 3 * COS ( 8.0 / ( 17 – ( 3 * 4 ) – 5 ) )
11. 8 + 4 * 3 DIV 2
Exercice 9 : Donner le type et la valeur des expressions E1, E2, E3, E4 :
A: =13.05; B= -27.53; C: = 42; D: =’c’

E1 := C + TRUNC ( B ) + ORD ( D )
E2:= PRED ( E1 ) – FRAC ( A1)
E3:= UPCASE ( CHR ( ROUND ( E2)))
E4:= (( ABS ( ROUND ( B ) ) + INT ( A )) > C ) OR NOT ( ODD ( C ))

Exercice 10 : Ecrire le résultat devant chacune des instructions suivantes :


Instruction Résultat
1) A ← ″L’″ + ″informatique″ A=
2) B ← Sous_chaîne (″gourmande″, 5 , 5) B=
3) C ← ″estimation″ C=
4) B[2] ← ″o″ B=
5) Efface (C, 1 ,6) C=
6) A ← Concat ( A , ″ est un ″ , B , ″ de A=
″, A[5] , A[3] , ″c″, C )

Exercice 11 :
Soient les instructions suivantes :
T1[2]  5
T2[3]  T1[2] + 2
T1[2]  T1[2] DIV 2
T2[1]  2 * T1[2]
T2[2]  T2[3] – T1[2]
T2[1]  T1[2] + 2 * T2[1]
T1[1]  T1[2] + 2 * T2[1]
T1[3]  T1[2]

Enseignant : AHMED BELHASSEN 3


Algorithmique et programmation

Quel est le contenu de chaque élément des deux tableaux .

T1 ……………………. …………….……… ……………………


1 2 3
T2 ……………………. …………….……… ……………………
1 2 3
Exercice 12 :
Soit N un entier donné, on suppose qu’il est formé de 4 chiffres. Rédiger une analyse, un algorithme et un
programme en PASCAL intitulé UNITÉ permettant d’afficher N selon chaque unité.

Exercice 13 : Cocher ce qui est une affectation :


1. Compteur := 3 + 2 ; 4. 20 := score ; 7. a + 3 := c ;
2. Nom := ″Patrick″ ; 5. highscore := score ; 8. a + b := c ;
3. i<10 ; 6. score :=score + 10 ;

Exercice 14 :

1. Faites tourner ces deux algorithmes :

Algorithme 1 Algorithme 2
a←0 a←8
b←5 b←3
c←b
d←b+a
a←d*d

2. Rajouter des instructions à l’algorithme 2 pour échanger les valeurs des deux variables en utilisant deux
méthodes : (Avec et sans) une variable auxiliaire.

Exercice 15 : Taper le programme suivant et observer les sorties écran :


Program Affichage ; n:=4.123456789; writeln ( m:10 );
Uses wincrt ; c:=’X’; writeln ( n:6:4 );
Var a,b : integer ; o:=true; writeln ( n:10:1 );
n,m : real; writeln ( a:4 ); writeln ( n:8:5 );
c:char; writeln ( c:2 ); writeln ( m:4:2 );
o:Boolean; writeln ( o:6 ); end.
begin writeln ( ‘ a = ‘ , a , ‘ et b = ‘, b
a:=4; );
b:=25; writeln ( n:20 );

Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

Exercice 16 :
Un commerçant vend 3 produits à 15, 20 et 35 Dinars. La TVA est de 6% sur le produit 1 et de 21 % sur les 2
autres.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MONTANT permettant de
calculer et d’afficher le montant hors TVA, la TVA et le total à payer après avoir introduit les quantités
commandées pour chaque produit.

NOTE : Le résultat de TVA et total à payer sera affiché avec 10 chiffres, dont 3 après la virgule pour les
réels.

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation

Correction de Série
d’exercices
Les structures de
données & les structures
simples
Exercice 1 :
Expression N1 N2 N3 N4 N5 N6
Type REAL REAL INTEGER BOOLEAN REAL BOOLEAN
Résultat 4 .8/0.2 = 24 1.2 * 0 =0 -10 + -2 =-12 FALSE XOR -12 NOT ( FALSE )
TRUE =TRUE AND TRUE=
TRUE

Exercice 2 :
Expression A B C D
Résultat 1 TRUE AND TRUE AND NOT NOT ( TRUE OR FALSE XOR
FALSE= FALSE ( FALSE ) = TRUE FALSE ) = NOT FALSE = FALSE
AND TRUE = ( TRUE )=FALSE
TRUE
Résultat 2 FALSE AND FALSE AND NOT NOT ( FALSE OR FALSE XOR
TRUE = FALSE ( FALSE ) = TRUE ) = TRUE =TRUE
FALSE AND NOT
TRUE = FALSE ( TRUE)=FALSE

Exercice 3 :
1. Valide := ( h >= 0) AND ( h < 24 ) AND ( m >= 0 ) AND ( m < 60 ) AND ( s >= 0 ) AND ( s <60 )
2. Invalide :=( h < 0) OR ( h > 23 ) OR ( m < 0) OR ( m > 59 ) OR ( s < 0 ) OR ( s > 59 )

Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation

Exercice 4 :
En A Carré ( x + 1 ) / Racine (x)
algorithme B ( 2 * carré (x)+ 4 * x -1) / Racine ( Abs ( x+5 ) )
C Racine ( Abs ( 10 * x + 2 ) / 3 ) + x
D ( ( x * carré (x)) / carré (x) + 2 ) ) - 1
En pascal A SQR ( x +1 ) / SQRT ( x)
B ( 2 * SQR ( x) + 4 * x -1 ) / SQRT(ABS(x+5))
C SQRT(ABS(10 * x + 2 ) / 3 ) + x
D ( ( x * SQR(x) )/ ( SQR(x) + 2 )) -1

Exercice 5 :

Expression A B C D
Oui / Non Non Oui Non Oui

Exercice 6 :
1. TYPE t_etat = ( liquide , solide , gaz ) ;
2. TYPE t_pixel = ( noir , blanc ) ;
TYPE t_image = ARRAY [1..512,1..512] of t_pixel ;

Exercice 7 :
C1←″ ALGORITHME ″

C2←″ RECURRENT ″

Instruction Résultat
1) N ← Long(C2) N=9
2) Insère (C2, C1, 11) C1=″ALGORITHMERECURRENT″
3) N ← Long(C1) N=19
4) N ← Pos (″N″, C2) N=8
5) C3 ←Sous_chaîne (C1, 9,7) C3=″MERECUR″
6) Efface (C2, 2,5) C2=″RENT″
7) C3 ← C3 + C2 C3=″MERECURRENT″

Exercice 8 :
1. Entier : 2 + 3 donne 5 , multiplié par 4 donne 20
2. Entier : 3 * 4 donne 12, ajouté à 2 donne 14
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 à + )

Enseignant : AHMED BELHASSEN 7


Algorithmique et programmation

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
7. Entier : donne 57 (4 * 2 puis ajouter 3 donne 11, multiplier par 5 puis ajouter 2)
8. Réel : donne 1.000
9. Entier : donne 1 : la fonction TRONC retourne un entier
10. Réel : donne 3 : la fonction ENT retourne un réel
11. Entier : donne 14 : 4 * 3 donne 12 divisé par 2 donne 6 ajouté à 8 donne 14
12. Entier : donne 1
13. Réel : donne 0
14. Entier : donne 3
15. Booléen : vrai
16. Erreur : booléen + booléen
17. Erreur : booléen – caractère
18. Booléen : faux
19. Erreur : 2 expressions de comparaisons sans opérateurs booléen ( 12 > 3 et 3 > 4 )
20. Booléen : faux
21. Erreur : division par 0
Exercice 9 :

Variable Type Valeur


E1 := 42 + (-27) + 99 Integer 114
E2 := 113 – 0.05 Real 112.95
E3 :=UPCASE ( CHR (113)) Char ‘Q’
E4 :=((27+13)> 42) OR NOT ( FALSE) Boolean True
E4 :=FALSE OR TRUE

Exercice 10 :
Instruction Résultat
1) A ← ″L’″ + ″informatique″ A= ″L’informatique″
2) B ← Sous_chaîne (″gourmande″, 5 , 5) B= ″mande″
3) C ← ″estimation″ C= ″estimation″
4) B[2] ← ″o″ B= ″monde″
5) Efface (C, 1 ,6) C=″tion″
6) A ← Concat ( A , ″ est un ″ , B , ″ de A=″L’informatique est un monde
″, A[5] , A[3] , ″c″, C ) de fiction″

Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

Exercice 11 :

T1 22 2 2
1 2 3
T2 10 5 7
1 2 3

Exercice 12 :
Analyse du problème
Nom : UNITÉ
Résultat : Ecrire ( N , ″ = ″, d , ″ * 1000 + ″, c , ″*100 + ″, b , ″*10+″, a)

d ← N DIV 1000
c ← N MOD 1000 DIV 100
b ← N MOD 100 DIV 10
a ← N MOD 10
N=donnée (″ donner un entier N de 4 chiffres ″ )
Fin UNITÉ
TDO
Objet Type/Nature
a,b,c,d Entier

Algorithme Traduction en PASCAL


0) Début UNITÉ PROGRAM UNITE ;
1) Ecrire (″ donner un entier N de 4 chiffres ″ ) USES WINCRT ;
Lire (N) VAR N,a,b,c,d :INTEGER ;
2) d←N DIV 1000 BEGIN
3) c←N MOD 1000 DIV 100 WRITELN ('donner un entier N de 4 chiffres ' ) ;
4) b←N MOD 100 DIV 10 READLN (N) ;
5) a←N MOD 10 d:=N DIV 1000;
6) Ecrire ( N , ″ = ″, d , ″ * 1000 + ″, c , ″*100 + ″, b c:=N MOD 1000 DIV 100;
, ″*10+″, a) b:=N MOD 100 DIV 10;
7) Fin UNITÉ a :=N MOD 10;
WRITELN ( N , ' = ', d , ' * 1000 + ', c , '*100 + ', b ,
'*10+', a) ;
END.

Exercice 13 :

N° 1 2 3 4 5 6 7 8
Affectation X X X X

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation

Exercice 14 :

1.
a b c d
0
5
5
5
25

a b
8
3
2.

Avec une variable Sans une variable


auxiliaire auxiliaire
temp ← a a←a+b
a← b b←a–b
b ← temp a←a–b

Exercice 15 :

Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation

Exercice 16 :
Analyse du problème
Nom : MONTANT
Résultat : Ecrire (″ Le total à payer est = ″, HTVA+TVA : 10 :3, ″DT.″)

HTVA ← p1 * 15 + p2 * 20 + p3 * 35
TVA← p1 * 15 * 6 / 100 + ( p2 * 20 + p3 * 35 ) * 21 / 100
( p1 , p2 , p3 )=donnée (″ Entrer la quantité de produit 1,2 et 3 ″ )
Fin MONTANT
TDO
Objet Type/Nature
p1,p2,p3 Entier
HTVA Entier long
TVA Réel

Algorithme Traduction en PASCAL


0) Début MONTANT PROGRAM MONTANT;
1) Ecrire (″ Entrer la quantité de produit 1,2 et 3 ″ ) USES WINCRT ;
Lire (p1), Lire (p2), Lire (p3) VAR
2) HTVA ← p1 * 15 + p2 * 20 + p3 * 35 p1,p2,p3 : INTEGER ;
3) TVA← p1 * 15 * 6 / 100 + ( p2 * 20 + p3 * 35 ) HTVA : LONGINT ;
* 21 / 100 TVA : REAL ;
4) Ecrire (″ Le total à payer est = ″, HTVA+TVA : BEGIN
10 :3, ″DT.″) WRITELN ('Entrer la quantité de produit 1,2 et 3' ) ;
5) Fin MONTANT READLN (p1) ;
READLN (p2) ;
READLN (p3) ;
HTVA := p1 * 15 + p2 * 20 + p3 * 35 ;
TVA := p1 * 15 * 6 / 100 + ( p2 * 20 + p3 * 35 ) * 21
/ 100 ;
WRITELN (' Le total à payer est = ', HTVA+TVA :
10 :3, 'DT.') ;
END.

Enseignant : AHMED BELHASSEN 11


Algorithmique et programmation

Série d’exercices
Les structures simples
Exercice 1 :Rédiger une analyse, un algorithme et un programme en PASCAL intitulé
SURFACE_CERCLE qui calcule et affiche la surface d'un cercle de rayon donné.

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


SORTIE_INVERSE qui saisit trois nombres dans un ordre donné et le fait sortir dans l'ordre opposé à
l'entrée.

Exercice 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISION qui
saisit un nombre rationnel comme couple d'entiers (p, q) et fait sortir ce nombre sous forme décimale.

Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation

Exercice 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé FUTUR qui
conjugue un verbe du premier groupe au futur. On ne traite pas les verbes irréguliers.

Exercice 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TEMPS qui
convertit en heures, minutes et secondes, une durée T en secondes. Il affiche le résultat sous la forme digitale
comme celle d'une montre électronique.

Exercice 6 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé BONJOUR qui
saisit le prénom de l'utilisateur et affiche l'invite suivante : Bonjour <Foulen>

Exercice 7 : Le matin, un automobiliste part avec un réservoir plein d'essence et un compteur marquant D
km. A la fin de la journée, il lui a fallu L litres pour remplir le réservoir. Le compteur marque F km.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé automobiliste qui lit les valeurs D,
F et L et fait sortir le taux de consommation de la voiture de l'automobiliste.

Enseignant : AHMED BELHASSEN 13


Algorithmique et programmation

Exercice 8 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SUP_INF qui fait
entrer deux réels x et y et fait sortir leur sup et leur inf. On utilisera la fonction prédéfinie ABS qui donne la
valeur absolue d'un réel.

SUP = ((x + y) + │x –y│)/2


INF = ((x + y) - │x –y│)/2

Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation

Correction de série
d’exercices
Les structures simples
Exercice 1 : La surface d'un cercle est Egale à p.R.² , où R est le rayon du cercle.
Analyse du problème
Nom : SURFACE_CERCLE
Résultat = Ecrire("Surface = ", Surface)
Surface ← p . Rayon . Rayon
Rayon = donnée ( "Donner le rayon : ")
Fin SURFACE_CERCLE
TDO
Objet Type/Nature
Surface , Rayon Réel
p Constante = 3.14

Algorithme Traduction en PASCAL


0) Début SURFACE_CERCLE PROGRAM SURFACE_CERCLE ;
1) Ecrire ("Donner le rayon : ") , lire(r) USES WINCRT ;
2) Surface ← pi . r . r CONST pi = 3.14;
3) Ecrire("Surface = ", s) VAR s, r : REAL;
4) Fin SURFACE_CERCLE
BEGIN
WRITELN('Donner le rayon : ');
READLN(r);
S := pi * r * r;
WRITELN ('Surface = ',s);
END.

Exercice 2 : Il s'agit de saisir trois nombres réels a, b et c et les faire sortir dans l'ordre c, b et a.
Analyse du problème
Nom : SORTIE_INVERSE
Résultat = Ecrire(c, b, a)
c = donnée ('c = ')
b = donnée ('b = ')
a = donnée ('a = ')
Fin SORTIE_INVERSE

Enseignant : AHMED BELHASSEN 15


Algorithmique et programmation

TDO
Objet Type / nature
a,b,c Réel

Algorithme Traduction en PASCAL


0) Début SORTIE_INVERSE PROGRAM SORTIE_INVERSE ;
1) Ecrire ("a = ") , lire(a) USES WINCRT ;
2) Ecrire ("b = ") ,lire (b) VAR a, b, c : REAL;
3) Ecrire("c = ") , lire (c) BEGIN
4) Ecrire(c, b, a) WRITE('a = '); READLN(a);
5) Fin SORTIE_INVERSE WRITE('b = '); READLN(b);
WRITE('c = '); READLN(c);
WRITELN(c, b, a);
END.

Exercice 3 : Il s'agit de faire la division décimale de p par q.


Analyse du problème
Nom : DIVISION
Résultat = Ecrire ( "La fraction est Egale à : ", p/q)
p = donnée ("Donner un entier numérateur : ")
q = donnée ("Donner un entier non nul dénominateur : ")
Fin DIVISION
TDO
Objet Type / nature
p ,q Entier

Algorithme Traduction en PASCAL


0) Début DIVISION PROGRAM DIVISION ;
1) Ecrire ("Donner un entier numérateur : "), lire(p) USES WINCRT ;
2) Ecrire ("Donner un entier non nul dénominateur VAR p, q : INTEGER;
: "), lire(q) BEGIN
3) Ecrire ( "La fraction est Egale à : "', p/q) WRITE ('Donner un entier numérateur : ');
4) Fin DIVISION READLN(p);
WRITE(' Donner un entier non nul dénominateur : ');
READLN(q);
WRITELN ('La fraction est Egale à : ', p/q);
END.

Exercice 4 :
Analyse du problème
Nom : FUTUR
Résultat = (1PS,2PS,3PS,1PP, 2PP,3PP)
1PS = Ecrire("Je ",verbe,"ai")
2PS = Ecrire("Tu ",verbe,"as")
3PS = Ecrire("Il ou elle ",verbe,"a")
1PP = Ecrire("Nous ",verbe,"ons")
2PP = Ecrire("Vous ",verbe,"ez")
3PP = Ecrire(Ils ou elles ", verbe, "ont")
verbe = donnée ("Donner un verbe du 1er groupe : ")
Fin FUTUR

Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation

TDO
Objet Type / nature
verbe Chaîne de caractères

Algorithme Traduction en PASCAL


0) Début FUTUR PROGRAM FUTUR ;
1) Ecrire ("Donner un verbe du 1er groupe : ") , lire USES WINCRT ;
(verbe) VAR verbe : STRING;
2) Ecrire("Je ",verbe,"ai") BEGIN
3) Ecrire("Tu ",verbe,"as") WRITELN('Donner un verbe du 1er groupe:');
4) Ecrire("Il ou elle ",verbe,"a") READLN(verbe);
5) Ecrire("Nous ",verbe,"ons") WRITELN('Je ',verbe,'ai');
6) Ecrire("Vous ",verbe,"ez") WRITELN('Tu ',verbe,'as');
7) Ecrire(Ils ou elles ", verbe, "ont") WRITELN('Il ou elle ',verbe,'a');
8) Fin FUTUR WRITELN('Nous ',verbe,'ons');
WRITELN('Vous ',verbe,'ez');
WRITELN('Ils ou elles ',verbe,'ont');
END .

Exercice 5 : La conversion à un format digital est de la forme : hh:mm:ss Exemple : 6:34:25


Analyse du problème
Nom : TEMPS
Résultat = Ecrire (hh, ":", mm,":", ss)
hh ← t DIV 3600
mm ← (t MOD 3600) DIV 60
ss ← t MOD 60
t = donnée ("Durée en secondes : ")
Fin TEMPS.
TDO
Objet Type / nature
t , hh , mm , ss Entier

Algorithme Traduction en PASCAL


0) Début TEMPS PROGRAM TEMPS ;
1) Ecrire ("Durée en secondes : ") , lire(t) USES WINCRT ;
2) hh ← t DIV 3600 Var hh, mm, ss, t : INTEGER;
3) mm ← (t MOD 3600) DIV 60 BEGIN
4) ss ← t MOD 60 WRITE('Durée en secondes : '); READLN(t);
5) Ecrire (hh,":" , mm , ":", ss) hh := t DIV 3600 ;
6) Fin TEMPS mm :=(t MOD 3600) DIV 60 ;
ss := T MOD 60 ;
WRITELN(hh,':', mm, ':' , ss) ;
END.

Exercice 6 :
Analyse du problème
Nom : BONJOUR
Résultat = Ecrire (″ Bonjour ″, Pre)
Pre = donnée ("Donner Votre prénom : ")
Fin BONJOUR

Enseignant : AHMED BELHASSEN 17


Algorithmique et programmation

TDO
Objet Type / nature
Pre Chaîne de caractères

Algorithme Traduction en PASCAL


0) Début BONJOUR PROGRAM BONJOUR ;
1) Ecrire ("Donner Votre prénom : ") , lire (Pre) USES WINCRT ;
2) Ecrire (″ Bonjour ″, Pre) VAR Pre : STRING;
3) Fin BONJOUR BEGIN
WRITELN (' Donner Votre prénom : ') ;
READLN(Pre);
WRITELN(' Bonjour ', Pre );
END .

Exercice 7 :
Analyse du problème
Nom : AUTOMOBILISTE
Résultat = Ecrire (″le taux de consommation de la voiture de l'automobiliste est ″, ( F – D )/L )
L = donnée ("Durant toute la journée la voiture a consommé ")
F = donnée ("A la fin de la journée le compteur est à : ")
D = donnée ("Au début de la journée le compteur est à : ")
Fin AUTOMOBILISTE
TDO
Objet Type / nature
F,D,L Réel

Algorithme Traduction en PASCAL


0) Début AUTOMOBILISTE PROGRAM AUTOMOBILISTE ;
1) Ecrire ("Au début de la journée le compteur est à USES WINCRT ;
: ") , lire (D) VAR F , D , L : REAL ;
2) Ecrire ("A la fin de la journée le compteur est à : BEGIN
") , lire (F) WRITELN (' Au début de la journée le compteur est
3) Ecrire ("Durant toute la journée la voiture a à : ') ;
consommé ") , lire (L) READLN(D);
4) Ecrire (″le taux de consommation de la voiture de WRITELN (' A la fin de la journée le compteur est à :
l'automobiliste est ″, ( F – D )/L ) ') ;
5) Fin AUTOMOBILISTE READLN(F);
WRITELN (' Durant toute la journée la voiture a
consommé ') ;
READLN(L);
WRITELN(' le taux de consommation de la voiture
de l''automobiliste est ', ( F – D )/L );
END .

Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

Exercice 8 :
Analyse du problème
Nom : SUP_INF
Résultat = Ecrire (″ SUP = ″, Sup , ″ INF = ″ , Inf )
Sup ← ((x + y) + Abs ( x –y))/2
Inf ← ((x + y) - Abs ( x –y))/2
y = donnée ("Donner y : ")
x = donnée ("Donner x : ")
Fin SUP_INF
TDO
Objet Type / nature
Sup , Inf , x , y Réel

Algorithme Traduction en PASCAL


0) Début SUP_INF PROGRAM SUP_INF ;
1) Ecrire ("Donner x : ") , lire (x) USES WINCRT ;
2) Ecrire ("Donner y : ") , lire (y) VAR Sup , Inf , x , y : REAL ;
3) Inf ← ((x + y) - Abs ( x –y))/2 BEGIN
4) Sup ← ((x + y) + Abs ( x –y))/2 WRITELN ( ' Donner x : ') ;
5) Ecrire (″ SUP = ″, Sup , ″ INF = ″ , Inf ) READLN(x );
6) Fin SUP_INF WRITELN (' Donner y : ') ;
READLN(y );
Inf := ((x + y) - Abs ( x –y))/2 ;
Sup :=((x + y) + Abs ( x –y))/2 ;
WRITELN(' SUP = ', Sup , ' INF = ' , Inf ) ;
END .

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation

Série d’exercices
Les structures de
contrôle conditionnelles
Exercice 1 :

X, Y et Z étant des variables numériques, on considère les deux séquences algorithmiques S1 et S2 suivantes :

S1 S2
…………. ………….
Si ( ((X<5) ou (Y>2)) et (Z>3) ) alors Si ( (X<5) et ( (Y>2) ou (Z>3) ) ) alors
X 1 X 1
Si (X - Y>=0) alors Si (Z - Y>0) alors
Z 0 Z 0
Fin si Fin si
Y Y+Z Y Y+Z
Sinon Sinon
X 2 X 2
ZY+Z ZY+Z
Fin si Fin si
Ecrire (X, Y, Z) Ecrire (X, Y, Z)
…………. ………….

Pour chacune de ces séquences, donner les valeurs après exécution de X, Y et Z dans les 3 cas suivants

1. X = 4 Y=1 Z=4
2. X = 4 Y=5 Z=4
3. X = 6 Y=5 Z=4

S1 S2
1. X = ….. Y = ….. Z = ….. 1. X = ….. Y = ….. Z = …..
2. X = ….. Y = ….. Z = ….. 2. X = ….. Y = ….. Z = …..
3. X = ….. Y = ….. Z = ….. 3. X = ….. Y = ….. Z = …..

Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation

Exercice 2 : Soient les deux séquences suivantes :

Séquence 1 Séquence 2

Si (a=b) OU (b>c) alors Si (a=b) ET (b>c) alors


Res a+b Res a+b
Sinon si (a<>c) OU (a>b) alors Sinon si (a >c) OU (a>b) alors
Res a*b Res a*b
Finsi Finsi

Ecrire (Res) Ecrire (Res)

Faire l’exécution de deux séquences en utilisant les valeurs suivantes : a=7, b=8 et c=3 et donner la valeur de
Res dans chaque cas .

Exercice 3 :
Soit l’algorithme suivant : .

0) DEBUT Inconnu
1) Ecrire ("Donner X= "), Lire(x)
2) Ecrire ("Donner Y= "), Lire(y)
3) CONVCH(x, ch1)
4) CONVCH(y, ch2)
5) SI (LONG (ch1)=2) ET (LONG (ch2)=2)
ALORS
a  x DIV 10
b  x MOD 10
c  y DIV 10
d  y MOD 10
r a*1000 + b*100 + c*10 + d
SINON
r0
FIN SI
6) Ecrire ("Le résultat est: ", r)
7) FIN Inconnu

1. Traduire cet algorithme en pascal


2. Donner les valeurs de a, b, c, d et r pour chacune des cas :

X Y a b c d r
36 85
29 374

3. Quelle est la condition portée par SINON au niveau de l’instruction n°5 ?


4. Quel est le rôle de cet algorithme ?
5. Donner un nom significatif au programme.

Enseignant : AHMED BELHASSEN 21


Algorithmique et programmation

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


permettant de lire deux entiers, diviser le plus grand par le plus petit (division euclidienne). Si le plus petit est
nul, afficher un message d’erreur.

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


permettant de demander le nom, le prénom, le sexe et l’état civil d’une personne, puis afficher :
″ Bonjour Monsieur / Madame / Mademoiselle X ″.
Exemple : Nom et prénom : ″ Ahmed Akermi ″ sexe = ″ M ″ état civil = ″ C ″ Alors le programme affiche :
″ Bonjour Monsieur Ahmed Akermi ″

Exercice 6 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DEGRE1 qui
résout dans l'ensemble des réels IR, une équation du premier degré à une inconnue x réelle de la forme :
ax + b = 0.

Exercice 7 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CINEMA.


Les deux programmes suivants ont pour objectif de calculer le prix d’une séance de cinéma en fonction des
règles suivantes :
- Le tarif réduit (3DT) est accordé aux étudiants tous les jours sauf le dimanche.
- Il est aussi accordé aux plus de 65 ans et aux moins de 18 ans du lundi au jeudi et pour tous le mercredi.
- Le tarif plein est de 4DT

Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation

Exercice 8 : On veut calculer le montant des impôts d'un salarié. La grille à utiliser est la suivante :

Salaire brut (sb) Taux d'impôt


sb < 150 dt 5%
150 dt < sb < 300 dt 10 %
300 < s < 600 dt 20%
600 dt < s 25 %

Rédiger une analyse, un algorithme et un programme en PASCAL intitulé IMPOT qui saisit le salaire et affiche
le montant des impôts et le salaire net.

Exercice 9 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé JOURS qui affiche
le nombre de jours d'un mois donné.

Exercice 10 : 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.
NB : Chercher deux méthodes pour la résolution de ce problème.

Exercice 11 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CLASSEMENT


_NBRE, qui lit trois entiers, les permute de façon à les classer par ordre croissant puis affiche le résultat.

Enseignant : AHMED BELHASSEN 23


Algorithmique et programmation

Exercice 12 : Un étudiant passe trois examens. Il est déclaré admis si :- soit, il a au moins 9 points à chaque
examen.- soit, la moyenne des trois examens est au moins égale à 10 points et la plus basse note est au moins
égale 8 points. * S'il n'est pas admis alors il est refusé.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ETUDIANT.

.
Exercice 13 : Pour les parents qui sortent le soir, une garde d'enfants offre pour eux ses services pour les
prix suivants :
- 1,250 dinars l'heure entre 18 h et 21 h.
- 4,800 dinars l'heure entre 21h et minuit.
On désire connaître le montant que doit payer les parents qui ont laissé leur(s) enfant(s) dans cette garde de
l'heure h1 à l'heure h2.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé GARDE_ENFANTS.

Exercice 14 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CALCUL qui lit
2 opérandes entières et 1 opérateur ( ′+′ , ′-′ , ′*′ , ′/′ , ′\′=DIV , ′%′ = MOD ) et affiche le résultat de
l’opération ou un message d’erreur (en cas de division par 0 et mauvais opérateur ).

Enseignant : AHMED BELHASSEN 24


Algorithmique et programmation

Exercice 15 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DEGRE2


permettant de résoudre l’équation du deuxième degré : ax²+bx+c = 0

Exercice 16 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SALAIRE qui
calcule le salaire de base et la commission d’un chauffeur de Taxi selon les formules suivantes :

Le salaire de base :

Si (Recette<=1000) OU (Kilomètres parcourus < 4000) Alors salaire de base = 400


Si (Recette >=1500) ET (Kilomètres parcourus >=5000) Alors salaire de base = 500
Salaire de base = 600 dans les autres cas.

La commission :

Si (Recette >1200) OU (Nombre Heures > 50) alors commission=20% * salaire de base
Si ( 40 < Nombre Heures <=50 ) alors commission = 10% * salaire de base
Commission = 5% * salaire de base dans les autres cas.

Exercice 17 : Une compagnie d’assurance d’automobile propose à ses clients quatre famille de tarifs
identifiables par une couleur, du moins au plus onéreux : tarifs bleu, vert, orange et rouge.

Le tarif dépend de la situation du conducteur :

- Un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit attribuer le tarif
rouge, si toutefois il n’a jamais été responsable d’accident. Sinon, la compagnie refuse de l’assurer.

- Un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans , ou de plus de 25 ans mais
titulaire du permis depuis moins de deux ans a le droit au tarif orange s’il n’a jamais provoqué d’accident, au
tarif rouge pour un accident sinon il est refusé .

- Un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bénéfice du tarif vert s’il n’est à
l’origine d’aucun accident et du tarif orange pour un accident , du tarif rouge pour deux accident et refusé au-
delà.

Enseignant : AHMED BELHASSEN 25


Algorithmique et programmation

- De plus, pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de la couleur
immédiatement la plus avantageuse (bleu) s’il n’est entré dans la maison depuis plus d’un an.

Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ASSURANCE permettant de saisir
les données nécessaires (sans contrôle de saisie) et de traiter ce problème.

Exercice 18 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POSITION permettant de
déterminer et d’afficher la position relative de deux cercles C1 et C2 du plan cartésien.
Les cercles sont définis par :
Le cercle C1 : Un centre A de coordonnées XA et YA données, Un rayon RA donné
Le cercle C2 : Un centre B de coordonnées XB et YB données, Un rayon RB donné
Les deux cercles peuvent être :
- Se coupent en un point
- Ne se coupent pas
- Se coupent en deux points

Ne se coupent pas Se coupent en un point Se coupent en deux points

On rappelle la formule de calcul de la distance entre deux points A et B du plan :


DAB= (YA − YB) 2 + ((XA − XB) 2

Enseignant : AHMED BELHASSEN 26


Algorithmique et programmation

Correction de série
d’exercices
Les structures de
contrôle conditionnelles
Exercice 1 :
S1 S2
4. X = 1 Y=1 Z=0 3. X = 1 Y = 1 Z=0
5. X = 1 Y=9 Z=4 4. X = 1 Y = 9 Z=4
6. X = 1 Y=5 Z=0 3. X = 2 Y = 5 Z=9

Exercice 2 : Séquence 1 : Res =15 Séquence 2 : Res=56


Exercice 3 :
Soit l’algorithme suivant : 1. program Inconnu ;
Uses wincrt ;
0) DEBUT Inconnu Var
1) Ecrire ("Donner X= "), Lire(x)
2) Ecrire ("Donner Y= "), Lire(y) x,y,a,b,c,d,r : integer ;
3) CONVCH(x, ch1) ch1, ch2 : string ;
4) CONVCH(y, ch2) begin
5) SI (LONG (ch1)=2) ET (LONG (ch2)=2) writeln ( ′ Donner X=′ ) ; readln(x) ;
ALORS writeln ( ′ Donner Y=′ ) ; readln(y) ;
str(x,ch1) ;
a  x DIV 10 str(y,ch2) ;
b  x MOD 10 if( length(ch1) =2 )AND ( length(ch2 ) = 2 )then
c  y DIV 10 begin
d  y MOD 10 a := x DIV 10 ;
r a*1000 + b*100 + c*10 + d b := x MOD 10 ;
c := y DIV 10 ;
SINON d := y MOD 10 ;
r0 r :=a*1000 + b*100 + c*10 + d ;
FIN SI end
6) Ecrire ("Le résultat est: ", r) else r:=0;
7) FIN Inconnu writeln ("Le résultat est: ", r) ;
end.

Enseignant : AHMED BELHASSEN 27


Algorithmique et programmation

2.
X Y a b c d r
36 85 3 6 8 5 3685
29 374 - - - - 0

3. (LONG (ch1) <>2) OR (LONG (ch2) <>2)


4. Transformer, concaténer, regrouper les deux entiers x et y dans un seul entier r.
5. Transformation, concaténation, regroupement.
Exercice 4 :
Analyse du problème
Nom : DIVISION
Résultat = division_euclidienne
division_euclidienne = [ ] Si n1=0 alors
Ecrire ( " Division impossible ")
Sinon Ecrire ( " Résultat = " , n2 DIV n1 )
Fin si
( n1 , n2 ) = [ ] Si n1> n2 alors
t ← n1
n1 ← n2
n2 ← t
Fin si
n1 = donnée ( "Premier nombre : ")
n2 = donnée ( "Deuxième nombre : ")
Fin DIVISION
TDO
Objet Type/Nature
t,n1,n2 Entier

Algorithme Traduction en PASCAL


0) Début DIVISION PROGRAM DIVISION ;
1) Ecrire ( "Premier nombre : ") , lire(n1) USES WINCRT ;
2) Ecrire ( "Deuxième nombre : ") , lire(n2) VAR t,n1,n2 : INTEGER ;
3) Si n1> n2 alors BEGIN
t ← n1 WRITELN (' Premier nombre : '); READLN (n1);
n1 ← n2 WRITELN (' Deuxième nombre : '); READLN (n2);
n2 ← t IF n1> n2 THEN
Fin si BEGIN
4) Si n1=0 alors t := n1 ;
Ecrire ( " Division impossible ") n1 :=n2 ;
Sinon Ecrire ( " Résultat = " , n2 DIV n1 ) n2 := t ;
Fin si END ;
5) Fin DIVISION IF n1=0 THEN
WRITELN (' Division impossible ' )
ELSE WRITELN ( ′ Résultat = ' , n2 DIV n1 ) ;
END.

Enseignant : AHMED BELHASSEN 28


Algorithmique et programmation

Exercice 5 :
Analyse du problème
Nom : ETAT_CIVIL
Résultat = Affichage_message
Affichage_message =[ sexe ← MAJUS ( sexe ) , etatcivil ← MAJUS (etatcivil ) ]
Si sexe=″ M ″ alors
Ecrire ( ″ Bonjour Monsieur ″ , nom )
Sinon si etatcivil=″ C ″ alors
Ecrire ( ″ Bonjour mademoiselle ″ , nom )
Sinon Ecrire ( ″ Bonjour madame ″ , nom )
Fin si
nom = donnée ( "Votre nom svp : ")
sexe = donnée ( "Sexe ( M/F ) : ")
etatcivil = Donnée ( "Etat civil ( C , M , D , V ) : ")
Fin ETAT_CIVIL
TDO
Objet Type / nature
nom Chaine
etatcivil, sexe Caractère

Algorithme Traduction en PASCAL


0) Début ETAT_CIVIL PROGRAM ETAT_CIVIL ;
1) Ecrire (" Votre nom svp : ") , lire(nom) USES WINCRT ;
2) Ecrire (" Sexe ( M/F ) : ") , lire (sexe) VAR nom : STRING[ 30 ] ;
3) Ecrire("Etat civil ( C , M ,D,V) : ") , lire (etatcivil) etatcivil , sexe : CHAR ;
4) sexe ← MAJUS ( sexe ) BEGIN
etatcivil ← MAJUS (etatcivil ) WRITELN(' Votre nom svp : '); READLN(nom );
Si sexe=″ M ″ alors WRITELN(' Sexe ( M/F ) : '); READLN(sexe);
Ecrire ( ″ Bonjour Monsieur ″ , nom ) WRITELN(' Etat civil ( C , M ,D,V)' ) ;
Sinon si etatcivil=″ C ″ alors READLN(etatcivil );
Ecrire ( ″ Bonjour mademoiselle ″ , nom ) sexe :=UPCASE ( sexe ) ;
Sinon Ecrire ( ″ Bonjour madame ″ , nom ) etatcivil :=UPCASE ( etatcivil ) ;
Fin si IF sexe= 'M' THEN
5) Fin ETAT_CIVIL WRITELN ( ' Bonjour Monsieur ' , nom )
ELSE IF etatcivil='C' THEN
WRITELN ( ' Bonjour mademoiselle ' , nom )
ELSE WRITELN ( ' Bonjour madame ' , nom );
END.

Exercice 6 :
Analyse du problème
Nom : DEGRE1
Résultat = Solution
Solution =[ ] si (a <> 0) alors
Ecrire("Solution unique : ", -b/a)
sinon si (b = 0) alors
Ecrire("Tout réel est solution ")
sinon Ecrire("Pas de solution")
Fin si
a = donnée ( " a = : ")
b = donnée ( " b = : ")
Fin DEGRE1

Enseignant : AHMED BELHASSEN 29


Algorithmique et programmation

TDO
Objet Type / nature
a,b Réel

Algorithme Traduction en PASCAL


0) Début DEGRE1 PROGRAM DEGRE1 ;
1) Ecrire ("a = "), Lire (a) USES WINCRT ;
2) Ecrire ("b = "), Lire (b) VAR a, b : REAL ;
3) si (a <> 0) alors BEGIN
Ecrire("Solution unique : ", -b/a) WRITELN ('a = ') ; READLN(a) ;
sinon si (b = 0) alors WRITELN ('b = ') ; READLN(b) ;
Ecrire("Tout réel est solution ") IF (a <> 0) THEN
sinon Ecrire("Pas de solution") WRITELN('Solution unique : ', -b/a)
Fin si ELSE IF (b = 0) THEN
4) Fin DEGRE1 WRITELN('Tout réel est solution ')
ELSE
WRITELN('Pas de solution');
END.

Exercice 7 :
Analyse du problème
Nom : CINEMA
Résultat = Ecrire ( Message )
Message =[ ] si ( tarif_reduit ) alors
Message ← ″ Le prix est 3DT ″
sinon Message ← ″ Le prix est 4DT ″
Fin si
tarif_reduit ← ( jour = 3 ) OU ( ( ( age <=18 ) OU ( age >=65 )) ET ( jour <=4 ) ) OU ( ( jour<>7 ) ET (
reponse = ' o ' ) )
reponse = donnée ( " Etes –vous étudiant ? o/n = : ")
age = donnée ( " Quel age avez-vous ? = : ")
jour = donnée ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ")
Fin CINEMA
TDO
Objet Type / nature
jour , age Entier
tarif_reduit Booléen
reponse Caractère
Message Chaine

Algorithme Traduction en PASCAL


0) Début CINEMA PROGRAM CINEMA ;
1) Ecrire ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : USES WINCRT ;
3 Jeu : 4 Ven :5 Sam : 6 Dim :7 " ) , Lire (jour) VAR jour , age : INTEGER ;
2) Ecrire ( " Quel age avez-vous ? = : " ), Lire (age) tarif_reduit : BOOLEAN ;
3) Ecrire ( "Etes –vous étudiant ? o/n =: ") reponse : CHAR ;
Lire (reponse) Message : STRING ;
4) tarif_reduit ← ( jour = 3 ) OU ( ( ( age <=18 ) BEGIN
OU ( age >=65 )) ET ( jour <=4 ) ) OU WRITELN (' Quel jour est-on ? Lun : 1 Mar : 2 Mer :
( ( jour<>7 ) ET ( reponse = ' o ' ) ) 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ') ;
5) si ( tarif_reduit ) alors READLN (jour) ;
Message ← ″ Le prix est 3DT ″ WRITELN (' Quel age avez-vous ? = : ');

Enseignant : AHMED BELHASSEN 30


Algorithmique et programmation

READLN(age) ;
sinon Message ← ″ Le prix est 4DT ″ WRITELN (' Etes –vous étudiant ? o/n =: ');
Fin si READLN(reponse) ;
6) Ecrire ( Message ) tarif_reduit := ( jour = 3 ) OR ( ( ( age <=18 ) OR
4) Fin CINEMA ( age >=65 )) AND ( jour <=4 ) ) OR
( ( jour<>7 ) AND ( reponse = ' o ' ) ) ;
IF (tarif_reduit ) THEN
Message :=' Le prix est 3DT '
ELSE
Message :=' Le prix est 4DT ' ;
WRITELN(Message);
END.
Autre méthode un peu plus complexe :
Analyse du problème
Nom : CINEMA
Résultat = Ecrire ( Message )
Message =[ ] si ( tarif_reduit ) alors
Message ← ″ Le prix est 3DT ″
sinon Message ← ″ Le prix est 4DT ″
Fin si
( age , reponse ) = [ tarif_reduit ← ( jour = 3 ) ]
Si ( jour <> 3) ET ( jour < 7 ) alors
age = donnée ( " Quel age avez-vous ? = : ")
Si ( ( ( age =<18 ) OU ( age >=65 )) ET ( jour =<4 ) ) alors
tarif_reduit ← Vrai
Sinon
reponse = donnée ( " Etes –vous étudiant ? o/n = : ")
tarif_reduit ← ( reponse = ' o ' )
fin si
fin si
jour = donnée ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ")
Fin CINEMA
TDO
Objet Type / nature
jour , age Entier
tarif_reduit Booléen
reponse Caractère
Message Chaine

Algorithme Traduction en PASCAL


0) Début CINEMA PROGRAM CINEMA ;
1) Ecrire ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : USES WINCRT ;
3 Jeu : 4 Ven :5 Sam : 6 Dim :7 " ) , Lire (jour) VAR jour , age : INTEGER ;
2) tarif_reduit ← ( jour = 3 ) tarif_reduit : BOOLEAN ;
Si ( jour <> 3) ET ( jour < 7 ) alors reponse : CHAR ;
Ecrire ( " Quel age avez-vous ? = : " ), Lire (age) Message : STRING ;
Si ( ( ( age =<18 ) OU ( age >=65 )) ET ( jour BEGIN
=<4 ) ) alors WRITELN (' Quel jour est-on ? Lun : 1 Mar : 2 Mer :
tarif_reduit ← Vrai 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ') ;
Sinon READLN (jour) ;
Ecrire ( "Etes –vous étudiant ? o/n =: ") tarif_reduit := ( jour = 3 ) ;
Lire (reponse) IF ( jour <> 3) AND ( jour < 7 ) THEN
tarif_reduit ← ( reponse = ' o ' ) BEGIN

Enseignant : AHMED BELHASSEN 31


Algorithmique et programmation

fin si WRITELN (' Quel age avez-vous ? = : ');


fin si READLN(age) ;
5) si ( tarif_reduit ) alors IF ( ( ( age <=18 ) OR( age >=65 )) AND ( jour <=4
Message ← ″ Le prix est 3DT ″ ) )THEN tarif_reduit := TRUE

sinon Message ← ″ Le prix est 4DT ″ ELSE


Fin si BEGIN
6) Ecrire ( Message ) WRITELN (' Etes –vous étudiant ? o/n =: ');
4) Fin CINEMA READLN(reponse) ;
tarif_reduit :=( reponse = ' o ' ) ;
END ;
END ;
IF (tarif_reduit ) THEN
Message :=' Le prix est 3DT '
ELSE
Message :=' Le prix est 4DT ' ;
WRITELN(Message);
END.

Exercice 8 :
Analyse du problème
Nom : IMPOT
Résultat = Ecrire ("Impots = " , impot , "salaire net = " , snet)
snet  sbrut – impot
impot = [ ] si (sbrut < 150) alors
impot  0.05 * sbrut
sinon si (sbrut < 300) alors
impot  0.1 * sbrut
sinon si (sbrut < 600) alors
impot  0.2 * sbrut
sinon
impot 0.25 * sbrut
Fin si
sbrut=donnée ("Salaire brut = ")
Fin IMPOT
TDO
Objet Type / nature
sbrut , impot , snet Réel

Algorithme Traduction en PASCAL


PROGRAM IMPOT ;
0) Début IMPOT USES WINCRT ;
1) Ecrire ("Salaire brut = "), Lire (sbrut) VAR sbrut , impot , snet : REAL ;
2) si (sbrut < 150) alors BEGIN
impot  0.05 * sbrut WRITELN (' Salaire brut = ') ; READLN (sbrut) ;
sinon si (sbrut < 300) alors IF (sbrut < 150) THEN
impot  0.1 * sbrut impot := 0.05 * sbrut
sinon si (sbrut < 600) alors ELSE IF (sbrut < 300) THEN
impot  0.2 * sbrut impot := 0.1 * sbrut
sinon ELSE IF (sbrut < 600) THEN
impot 0.25 * sbrut impot := 0.2 * sbrut

Enseignant : AHMED BELHASSEN 32


Algorithmique et programmation

Fin si ELSE
impot := 0.25 * sbrut ;
3) snet  sbrut – impot snet := sbrut – impot ;
4) Ecrire ("Impots = ", impot ,"salaire net =" , snet)
5) Fin IMPOT WRITELN( ' Impots = ', impot ,' salaire net =' , snet);
END.

Exercice 9 :
Il s'agit de déterminer le nombre de jours d'un mois donné. Le problème se pose pour le mois de février qui est
de 29 jours pour les années bissextiles. Une année est bissextile si elle est divisible par 4 quand elle est non
multiple de 100 sinon c'est son quotient par 100 qui doit être multiple de 4. Exemple : 1900 est une année non
bissextile par contre 2000 l'est.
On convient que le mois est saisi sous forme d'un entier ente 1 et 12.
Analyse du problème
Nom : JOURS
Résultat = Ecrire("Le nombre de jours du mois saisi est ", nbj)
nbj = [ nbj  31 ] si (m dans [ 4,6,9,11] ) alors
nbj  30
sinon
an=donnée ("Année : ")
nbj28
si (an MOD 400 = 0) OU ((an MOD 4 =0) ET (an MOD 100 <>0)) alors
nbj  29
Fin Si
Fin Si
m=donnée ("N° mois : ")
Fin JOURS
TDO
Objet Type / nature
nbj , m , an Entier

Algorithme Traduction en PASCAL


0) Début JOURS PROGRAM JOURS ;
1) Ecrire ("N° mois : "), Lire (m) USES WINCRT ;
2) nbj  31 VAR nbj , m , an : INTEGER ;
si (m dans [ 4,6,9,11] ) alors BEGIN
nbj  30 WRITELN (' N° mois : ') ; READLN (m) ;
sinon nbj:= 31 ;
Ecrire ("Année : "), Lire(an) IF (m IN [ 4 ,6,9,11 ] ) THEN
nbj28 nbj := 30
si (an MOD 400 = 0) OU ((an MOD 4 =0) ELSE
ET (an MOD 100) <>0)) alors BEGIN
nbj  29 WRITELN (' Année : ') ; READLN (an) ;
Fin Si nbj := 28;
Fin Si IF (an MOD 400 = 0) OR ((an MOD 4 =0)
AND (an MOD 100 <>0)) THEN
3) Ecrire ("Le nombre de jours du mois saisi est ", nbj := 29
nbj) END;
4) Fin JOURS WRITELN( ' Le nombre de jours du mois saisi est ',
nbj ); END.

Enseignant : AHMED BELHASSEN 33


Algorithmique et programmation

Exercice 10 :
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
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) ;

Enseignant : AHMED BELHASSEN 34


Algorithmique et programmation

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.

Deuxième méthode :
Nom : FORME_GEO
Résultat = Forme
Forme = [ ] Selon ( code ) Faire
″ c ″ : c1= donnée ("Entrer le coté : ")
Ecrire ("Surface : ", c1* c1)
″ r ″ : (c1,c2)= donnée ("Entrer les 2 cotés : ")
Ecrire ("Périmètre : ", (c1+c2)* 2 )
″ t ″ : (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 selon
code=donnée ("Entrer un code : c , r ou t ")
Fin FORME_GEO
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) Selon ( code ) Faire VAR c1 , c2 , c3 : INTEGER ;
″ c ″ : Ecrire ("Entrer le coté : ") , Lire(c1) Code : CHAR ;
Ecrire ("Surface : ", c1* c1) BEGIN
″r″: WRITELN (' Entrer un code : c , r ou t ') ;
Ecrire ("Entrer les 2 cotés : ") READLN (code) ;
Lire(c1) , Lire(c2) CASE ( code ) OF
Ecrire ("Périmètre : ", (c1+c2)* 2 ) 'c' : BEGIN
″t″: 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″) 'r' : BEGIN
Sinon Ecrire(″non isocèle″) WRITELN(' Entrer les 2 cotés : ' ) ;
Fin si READLN (c1) ;
Sinon READLN (c2) ;
Ecrire(″Mauvais code″) WRITELN (' Périmètre : ' , (c1+c2)* 2 ) ;
Fin si END ;

Enseignant : AHMED BELHASSEN 35


Algorithmique et programmation

3) Fin FORME_GEO 't' : 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 ;
END.

Exercice 11 :
Analyse du problème
Nom : CLASSEMENT_NBRE
Résultat = Classement
Classement = [ ]Si (a>=b) et (a>=c) alors
Si (b >=c) alors
Ecrire (″ les trois entiers en ordre croissante : ″ , a ,b, c )
Sinon
Ecrire (″ les trois entiers en ordre croissante : ″ , a ,c, b )
Fin si
Sinon Si (b>=a) et (b>=c) alors
Si (a >=c) alors
Ecrire (″ les trois entiers en ordre croissante : ″ , b ,a, c )
Sinon
Ecrire (″ les trois entiers en ordre croissante : ″ , b ,c, a )
Fin si
Sinon
Si (a >=b) alors
Ecrire (″ les trois entiers en ordre croissante : ″ , c ,a, b )
Sinon
Ecrire (″ les trois entiers en ordre croissante : ″ , c ,b, a )
Fin si
a=donnée ("donner le premier entier ")
b=donnée ("donner le deuxième entier ")
c=donnée ("donner le troisième entier ")
Fin CLASSEMENT_NBRE

TDO
Objet Type / nature
a,b,c Entier

Algorithme Traduction en PASCAL


0) Début CLASSEMENT_NBRE PROGRAM CLASSEMENT_NBRE ;
1) Ecrire (″ donner le premier entier ″), lire (a) USES WINCRT ;
2) Ecrire (″ donner le deuxième entier ″),lire (b) VAR a , b , c : INTEGER ;
3) Ecrire (″ donner le troisième entier ″), lire (c) BEGIN
4) Si (a>=b) et (a>=c) alors WRITELN ( ' donner le premier entier ' ) ;

Enseignant : AHMED BELHASSEN 36


Algorithmique et programmation

Si (b >=c) alors READLN (a) ;


Ecrire (″ les trois entiers en ordre WRITELN ( ' donner le deuxième entier ' ) ;
croissante : ″ , a ,b, c ) READLN (b) ;
Sinon WRITELN ( ' donner le troisième entier ' ) ;
Ecrire (″ les trois entiers en ordre READLN (c) ;
croissante : ″ , a ,c, b ) IF (a>=b) AND (a>=c) THEN
Fin si BEGIN
Sinon Si (b>=a) et (b>=c) alors IF (b>=c) THEN
Si (a >=c) alors WRITELN (' les trois entiers en ordre
Ecrire (″ les trois entiers en ordre croissante : ', a , b , c )
croissante : ″ , b ,a, c ) ELSE
Sinon WRITELN (' les trois entiers en ordre
Ecrire (″ les trois entiers en ordre croissante : ', a , c , b ) ;
croissante : ″ , b ,c, a ) END
Fin si ELSE IF (b>=a) AND (b>=c) THEN
Sinon BEGIN
Si (a >=b) alors IF (a>=c) THEN
Ecrire (″ les trois entiers en ordre WRITELN (' les trois entiers en ordre
croissante : ″ , c ,a, b ) croissante : ', b , a , c )
Sinon ELSE
Ecrire (″ les trois entiers en ordre WRITELN (' les trois entiers en ordre
croissante : ″ , c ,b, a ) croissante : ', b , c , a ) ;
Fin si END
5) Fin CLASSEMENT_NBRE ELSE
BEGIN
IF (a>=b) THEN
WRITELN (' les trois entiers en ordre
croissante : ', c , a , b )
ELSE
WRITELN (' les trois entiers en ordre
croissante : ', c , b , a ) ;
END ;
END.

Exercice 12 :
Analyse du problème
Nom : DECISION
Résultat = DEC
DEC = [ ] Si ( (Note1>=9) ET (Note2>=9) ET (Note3>=9) ) OU ( ( Moy >=10 ) ET ( Min >=8) ) alors

Ecrire (″ Admis ″ )
Sinon
Ecrire (″ Refusé ″ )
Fin si
Min = [ Min ← Note1]

Si (Note1>=Note2) ET (Note1>=Note3) ET (Note2>=Note3) alors


Min ← Note3
Sinon Si (Note1>=Note2) ET (Note1>=Note3) ET (Note3>=Note2) alors
Min ← Note2
Fin si
Moy ← ( Note1+ Note2 + Note3 ) / 3

Enseignant : AHMED BELHASSEN 37


Algorithmique et programmation

Note1=donnée ("donner la note d’examen num 1 ")


Note2=donnée ("donner la note d’examen num 2 ")
Note3=donnée ("donner la note d’examen num 3 ")
Fin DECISION
TDO
Objet Type / nature
Note1, Note2 Entier
,Note3, Min
Moy Réel

Algorithme Traduction en PASCAL


0) Début DECISION PROGRAM DECISION ;
1) Ecrire (″donner la note d’examen num 1 ″) USES WINCRT ;
Lire (Note1) VAR Note1, Note2 ,Note3, Min : INTEGER ;
2) Ecrire (″donner la note d’examen num 2 ″) Moy : REAL ;
Lire (Note 2) BEGIN
3) Ecrire (″donner la note d’examen num 3 ″) WRITELN ( ' donner la note d’’examen num 1 ' ) ;
Lire (Note 3) READLN (Note1) ;
4) Moy ← ( Note1+ Note2 + Note3 ) / 3 WRITELN ( ' donner la note d’’examen num 2 ' ) ;
5) Min ← Note1 READLN (Note2) ;
Si(Note1>=Note2)ET(Note1>=Note3)ET WRITELN ( ' donner la note d’’examen num 3 ' ) ;
(Note2>=Note3) alors READLN (Note3) ;
Min ← Note3 Moy := ( Note1+ Note2 + Note3 ) / 3 ;
Sinon Si(Note1>=Note2) ET (Note1>=Note3) ET Min := Note1 ;
(Note3>=Note2) alors IF(Note1>=Note2)AND(Note1>=Note3)AND
Min ← Note2 (Note2>=Note3) THEN
Fin si Min :=Note3
6) Si ((Note1>=9) ET (Note2>=9) ET ELSE IF (Note1>=Note2) AND (Note1>=Note3)
(Note3>=9) ) OU ( ( Moy >=10 ) ET ( Min >=8) ) AND (Note3>=Note2) THEN
alors Min :=Note2 ;
IF ((Note1>=9) AND (Note2>=9) AND
Ecrire (″ Admis ″ ) (Note3>=9) ) OR ( ( Moy >=10 ) AND ( Min >=8) )
Sinon THEN
Ecrire (″ Refusé ″ )
WRITELN ( ' Admis ' )
Fin si
ELSE
7) Fin DECISION WRITELN ( ' Refusé ' ) ;
END.

Exercice 13 :
Analyse du problème
Nom : GARDE_ENFANTS
Résultat = Ecrire ( ″ Le montant à payer est : ″ , M )
M = [ ] Si (h2 < =21) alors
M ← (h2-h1) * 1.250
Sinon Si (h1>=21) alors
M ← (h2-h1) * 4.800
Sinon M ← ( 21-h1) * 1.250+( h2-21) * 4.800
Fin si
h1=donnée ("donner l’heure de départ ")

Enseignant : AHMED BELHASSEN 38


Algorithmique et programmation

h2=donnée ("donner l’heure de fin ")


Fin GARDE_ENFANTS
TDO
Objet Type / nature
h1,h2 Entier
M Réel

Algorithme Traduction en PASCAL


0) Début GARDE_ENFANTS PROGRAM GARDE_ENFANTS ;
1) Ecrire (″donner l’heure de départ ″) USES WINCRT ;
Lire (h1) VAR h1,h2 : INTEGER ;
2) Ecrire (″donner l’heure de fin ″) M : REAL ;
Lire (h2) BEGIN
3) Si (h2 < =21) alors WRITELN ( ' donner l’’heure de départ ' ) ;
M ← (h2-h1) * 1.250 READLN (h1) ;
Sinon Si (h1>=21) alors WRITELN ( ' donner l’’heure de fin ' ) ;
M ← (h2-h1) * 4.800 READLN (h2) ;
Sinon M ← ( 21-h1) * 1.250+( h2-21) * 4.800
IF (h2 < = 21) THEN
Fin si
M := ( h2-h1) * 1.250
4) Ecrire ( ″ Le montant à payer est : ″ , M )
ELSE IF ( h1>=21) THEN
5) Fin GARDE_ENFANTS
M := ( h2-h1) * 4.800

ELSE M :=( 21-h1) * 1.250+( h2-21) * 4.800 ;


WRITELN (' Le montant à payer est : ' , M );
END.

Exercice 14 :
Analyse du problème
Nom : CALCUL
Résultat = opération
opération = [ ]Selon ( op ) Faire
″ +″ : Ecrire ("La somme vaut : ", n1* n2 )
″ - ″ : Ecrire ("La différence vaut : ", n1- n2 )
″ * ″ : Ecrire ("La multiplication vaut : ", n1 * n2 )
″ / ″ :Si ( n2<>0 ) alors
Ecrire ("La division vaut : ", n1 / n2 : 5 : 2)
Sinon Ecrire(″Erreur : /0 ″)
Fin si
″ \ ″ : Si ( n2<>0 ) alors
Ecrire ("La division entière vaut : ", n1 DIV n2 : 5 : 2)
Sinon Ecrire(″Erreur : /0 ″)
Fin si
″ %″ : Si ( n2<>0 ) alors
Ecrire ("Le Modulo vaut : ", n1 MOD n2 : 5 : 2)
Sinon Ecrire(″Erreur : /0 ″)
Fin si
Sinon

Enseignant : AHMED BELHASSEN 39


Algorithmique et programmation

Ecrire(″Mauvais opérateur ″)
Fin selon
( n1,n2,op) =donnée ("Entrer les 2 opérandes et l’opérateur ")
Fin CALCUL
TDO
Objet Type / nature
n1,n2 Entier
op Caractère

Algorithme Traduction en PASCAL


0) Début CALCUL PROGRAM CALCUL ;
1) Ecrire (″Entrer les 2 opérandes et l’opérateur ″) USES WINCRT ;
Lire (n1) Lire (h2) Lire (op) VAR n1,n2 : INTEGER ;
2) Selon ( op ) Faire op : CHAR ;
″ +″ : Ecrire ("La somme vaut : ", n1* n2 ) BEGIN
″ - ″ : Ecrire ("La différence vaut : ", n1- n2 ) WRITELN(' Entrer les 2 opérandes et l’’opérateur ' ) ;
″ * ″ : Ecrire ("La multiplication vaut : ", n1 * n2 ) READLN (n1) ; READLN (n2) ; READLN (op) ;
″ / ″ :Si ( n2<>0 ) alors CASE ( op ) OF
Ecrire ("La division vaut : ", n1 / n2 : 5 : 2) ' +' : WRITELN ('La somme vaut : ', n1* n2 ) ;
Sinon Ecrire(″Erreur : /0 ″) ' - ' : WRITELN ('La différence vaut : ', n1- n2 ) ;
Fin si ' * ' : WRITELN ('La multiplication vaut : ', n1 * n2 ) ;
″ \ ″ : Si ( n2<>0 ) alors '/ ' : IF ( n2<>0 ) THEN
Ecrire ("La division entière vaut :", n1 DIV n2 : 5 : 2) WRITELN ('La division vaut : ', n1 / n2 : 5 : 2)
Sinon Ecrire(″Erreur : /0 ″) ELSE WRITELN ('Erreur : /0 ' ) ;
Fin si ' \' : IF ( n2<>0 ) THEN
″ %″ : Si ( n2<>0 ) alors WRITELN (' La division entière vaut :',
Ecrire ("Le Modulo vaut : ", n1 MOD n2 : 5 : 2) n1 DIV n2 )
Sinon Ecrire(″Erreur : /0 ″) ELSE WRITELN (' Erreur : /0 ' ) ;
Fin si '%' : IF( n2<>0 ) THEN
Sinon WRITELN (' Le Modulo vaut : ' , n1 MOD n2 )
Ecrire(″Mauvais opérateur ″) ELSE WRITELN (' Erreur : /0 ' ) ;
Fin selon ELSE
WRITELN (' Mauvais opérateur ' ) ;
3) Fin CALCUL END ;
END.

Exercice 15 :
Analyse du problème
Nom : DEGRE2
Résultat = solution
solution = [ ]Si ( a= 0 ) alors
Si ( b <>0 ) alors
Ecrire ("L'équation est du premier degré et admet une racine ", -c/b : 5 :2 )
Sinon Si ( c <>0 ) alors
Ecrire ("L'équation est du premier degré et n'admet pas de racine ")
Sinon
Ecrire ("L'équation est indéterminé ")
Fin si
Sinon
delta ← b * b – 4*a*c
Si ( delta > 0 ) alors
Ecrire ("Deux racines réelles distincts : ", (-b – Racine(delta) / (2*a ) , ″et″ ,

Enseignant : AHMED BELHASSEN 40


Algorithmique et programmation

(-b + Racine(delta) / (2*a ) )


Sinon Si ( delta = 0 ) alors
Ecrire ("Une solution réelle double : " , -b/(2*a))
Sinon
Ecrire ("pas de solution")
Fin si
Fin si
a =donnée ("Donner le coefficient de x² ")
b =donnée ("Donner le coefficient de x ")
c =donnée ("Donner le terme indépendant ")
Fin DEGRE2
TDO
Objet Type / nature
a ,b , c , delta Réel

Algorithme Traduction en PASCAL


0) Début DEGRE2 PROGRAM DEGRE2 ;
1) Ecrire (″Donner le coefficient de x² ″) , Lire (a) USES WINCRT ;
2) Ecrire (″Donner le coefficient de x ″) , Lire (b) VAR a,b,c,delta : REAL ;
3) Ecrire (″Donner le terme indépendant ″) , Lire (c) BEGIN
4) WRITELN ( ' Donner le coefficient de x² ' ) ;
Si ( a= 0 ) alors READLN (a) ;
Si ( b <>0 ) alors WRITELN ( ' Donner le coefficient de x ' ) ;
Ecrire ("L'équation est du premier degré et READLN (b) ;
admet une racine ", -c/b : 5 :2 ) WRITELN ( ' Donner le terme indépendant ' ) ;
Sinon Si ( c <>0 ) alors READLN (c) ;
Ecrire ("L'équation est du premier degré et IF( a= 0 ) THEN
n'admet pas de racine ") IF ( b <>0 ) THEN
Sinon WRITELN ('L''équation est du premier degré et
Ecrire ("L'équation est indéterminé ") admet une racine ', -c/b : 5 :2 )
Fin si ELSE IF ( c <>0 ) THEN
Sinon WRITELN (' L'équation est du premier degré et
delta ← b * b – 4*a*c n''admet pas de racine ' )
Si ( delta > 0 ) alors ELSE
Ecrire ("Deux racines réelles distincts : ", (-b – WRITELN (' L''équation est indéterminé ' )
Racine(delta)) / (2*a ) , ″et″ , (-b + Racine(delta))
/ (2*a ) ) ELSE
Sinon Si ( delta = 0 ) alors BEGIN
Ecrire ("Une solution réelle double : " , delta := b * b – 4*a*c ;
-b/(2*a)) IF ( delta > 0 ) THEN
Sinon WRITELN (' Deux racines réelles distincts :' , (-b –
Ecrire ("pas de solution") SQRT(delta)) / (2*a ) , ' et ' , (-b + SQRT(delta))
Fin si / (2*a ) )
Fin si ELSE IF ( delta = 0 ) THEN
5) Fin DEGRE2 WRITELN ('Une solution réelle double : ' ,
-b/(2*a))
ELSE
WRITELN (' pas de solution ' ) ;
END ;
END.

Enseignant : AHMED BELHASSEN 41


Algorithmique et programmation

Exercice 16 :
Analyse du problème
Nom : SALAIRE
Résultat = Ecrire ( ″ Le salaire de base = ″ , sb , ″ et la commission = ″ , com )
com =[ ]
Si (r >1200) OU (nh > 50) alors
com ← 20% * sb
Sinon si ( nh > 40 ) ET (nh <=50 ) alors
com ← 10% * sb
Sinon com ← 5% * sb
Fin si
sb = [ ]
Si (r <=1000) OU (kp < 4000) alors
sb ← 400
Sinon si ( r >=1500 ) ET (kp>=5000 ) alors
sb ← 500
Sinon sb ← 600
Fin si

nh = donnée ( " Donner le nombre d’heure : ")


kp = donnée ( " Donner le nombre de Kilo : ")
r = donnée ( " Donner la recette : ")
Fin SALAIRE
TDO
Objet Type / nature
r , kp , nh ,sb ,com Réel

Algorithme Traduction en PASCAL


0) Début SALAIRE PROGRAM SALAIRE ;
1) Ecrire ( " Donner la recette : " ) , Lire (r) USES WINCRT ;
2)Ecrire ( " Donner le nombre de Kilo :" ), Lire (kp) VAR r ,kp,nh,sb,com: REAL ;
3) Ecrire ( " Donner le nombre d’heure : "),Lire (nh) BEGIN
4) Si (r <=1000) OU (kp < 4000) alors WRITELN (' Donner la recette : ' ) ;
sb ← 400 READLN (r) ;
Sinon si ( r >=1500 ) ET (kp>=5000 ) alors WRITELN (' Donner le nombre de Kilo : ' );
sb ← 500 READLN(kp) ;
Sinon sb ← 600 WRITELN (' Donner le nombre d’'heure : ');
Fin si READLN(nh) ;
5) Si (r >1200) OU (nh > 50) alors IF (r <=1000) OR (kp < 4000) THEN
com ← 0.2 * sb sb :=400
Sinon si (nh >40 ) ET (nh <=50 ) alors ELSE IF ( r >=1500 ) AND (kp>=5000 ) THEN
com ← 0.1 * sb sb :=500
Sinon com ← 0.05 * sb ELSE sb := 600 ;
Fin si IF (r >1200) OR (nh > 50) THEN
6) Ecrire ( ″ Le salaire de base = ″ , sb , ″ et la com := 0.2 * sb
commission = ″ , com ) ELSE IF ( nh> 40 ) AND (nh <=50 ) THEN
7) Fin SALAIRE com := 0.1 * sb
ELSE com := 0.05 * sb ;
WRITELN ( ' Le salaire de base = ' , sb , ' et la
commission = ' , com ) ;
END.

Enseignant : AHMED BELHASSEN 42


Algorithmique et programmation

Exercice 17 :
Analyse du problème
Nom : ASSURANCE
Résultat = Ecrire ( ″ Votre situation = ″ , situ )
situ =[ ] Si ( p = -1) alors
situ ← ″ Bleu ″
Sinon si ( p = 0 ) alors
situ ← ″ Vert ″
Sinon si ( p = 1 ) alors
situ ← ″ Orange ″
Sinon si ( p = 2 ) alors
situ ← ″ Rouge ″
Sinon
situ ← ″ Refusé ″
Fin si
p = [ p ← 0 , c1← age >=25 , c2←perm>=2 , c3 ← assur>=1 ]
Si non(c1) alors
p ← p+1
fin si
Si non(c2) alors
p ← p+1
fin si
p←p+acc
si ( p<3 ) ET c3 alors
p←p-1
fin si
age = donnée ( " Entrer l'âge : ")
perm = donnée ( " Entrer le nombre d’années de permis : ")
acc = donnée ( " Entrer le nombre d’accidents : ")
assur = donnée ( " Entrer le nombre d’années d’assurance : ")
Fin ASSURANCE

TDO
Objet Type / nature
age , perm , acc Entier
,assur ,p
c1,c2,c3 Booléen
situ Chaine de caractère

Algorithme Traduction en PASCAL


0) Début ASSURANCE PROGRAM ASSURANCE ;
1) Ecrire ( " Entrer l'âge : " ) , Lire (age) USES WINCRT ;
2)Ecrire ( "Entrer le nombre d’années de permis:" ), VAR age , perm , acc ,assur ,p : INTEGER ;
Lire (perm) c1,c2,c3 : BOOLEAN ;
3) Ecrire ( "Entrer le nombre d’accidents :"), situ :STRING;
Lire (acc) BEGIN
4) Ecrire ( " Entrer le nombre d’années WRITELN (' Entrer l''âge : ' ) ;
d’assurance : "), Lire (assur ) READLN (age) ;
5) c1← age >=25 WRITELN ('Entrer le nombre d’'années de permis:' );
6) c2←perm>=2 READLN(perm) ;

Enseignant : AHMED BELHASSEN 43


Algorithmique et programmation

7) c3 ← assur>=1 WRITELN (' Entrer le nombre d’'accidents : ');


8) p ← 0 READLN(acc) ;
Si non(c1) alors WRITELN ('Entrer le nombre d’'années d’'assurance :
p ← p+1 '); READLN (assur) ;
fin si c1:=age >=25 ;
Si non(c2) alors c2 :=perm>=2 ;
p ← p+1 c3 := assur>=1 ;
fin si p :=0 ;
p←p+acc IF NOT(c1) THEN
si ( p<3 ) ET c3 alors p := p+1 ;
p←p-1 IF NOT(c2) THEN
finsi p := p+1 ;
p :=p+acc ;
9) Si ( p = -1) alors IF ( p<3 ) AND c3 THEN
situ ← ″ Bleu ″ p :=p-1 ;
Sinon si ( p = 0 ) alors IF( p = -1) THEN
situ ← ″ Vert ″ situ :=' Bleu '
Sinon si ( p = 1 ) alors ELSE IF ( p = 0 ) THEN
situ ← ″ Orange ″ situ := ' Vert '
Sinon si ( p = 2 ) alors ELSE IF ( p = 1 ) THEN
situ ← ″ Rouge ″ situ := ' Orange '
Sinon ELSE IF ( p = 2 ) THEN
situ ← ″ Refusé ″ situ := ' Rouge '
Fin si ELSE
situ := ' Refusé ' ;
10) Ecrire ( ″ Votre situation = ″ , situ ) WRITELN ( ' Votre situation = ' , situ ) ;
11) Fin ASSURANCE END.

Exercice 18 :
Analyse du problème
Nom : POSITION
Résultat = Ecrire ( ″ La position des deux cercles C1 et C2 est : ″ , pos )
pos =[ ]
Si ( d > ( r1+r2)) alors
pos ← ″ Ne se coupent pas ″
Sinon si ( d < ( r1+r2))alors
pos ← ″ Se coupent en deux points ″
Sinon
pos ← ″ Se coupent en un point ″
Fin si
d ← Racine_carré( carré ( ya-yb) + carré( xa-xb))
r2= donnée (" Donner Le rayon de cercle C2 de centre B : ")
r1= donnée (" Donner Le rayon de cercle C1 de centre A : ")
yb = donnée ( " Donner l’ordonnée de point B : ")
xb = donnée ( " Donner l’abscisse de point B : ")
ya = donnée ( " Donner l’ordonnée de point A : ")
xa = donnée ( " Donner l’abscisse de point A : ")
Fin POSITION

Enseignant : AHMED BELHASSEN 44


Algorithmique et programmation

TDO
Objet Type / nature
xa, xb , ya ,yb ,r1,r2,d Réel
pos Chaine de caractère

Algorithme Traduction en PASCAL


0) Début POSITION PROGRAM POSITION ;
1) Ecrire ( " Donner l’abscisse de point A : " ) USES WINCRT ;
Lire (xa) VAR xa, xb , ya ,yb ,r1,r2,d : REAL ;
2)Ecrire ( " Donner l’ordonnée de point A : " ), pos :STRING;
Lire (ya) BEGIN
3) Ecrire ( " Donner l’abscisse de point B : " ) WRITELN (' Donner l’’abscisse de point A : ' ) ;
Lire (xb) READLN (xa) ;
4)Ecrire ( " Donner l’ordonnée de point B : " ), WRITELN (' Donner l’’ordonnée de point A : ' );
Lire (yb) READLN(ya) ;
3) Ecrire ( " Donner Le rayon de cercle C1 de WRITELN (' Donner l’’abscisse de point B : ' ) ;
centre A : "),Lire (r1) READLN (xb) ;
4) Ecrire ( " Donner Le rayon de cercle C2 de WRITELN (' Donner l’’ordonnée de point B : ' );
centre B :"), Lire (r2) READLN(yb) ;
5) d ← Racine_carré( carré ( ya-yb) + carré( xa-xb)) WRITELN (' Donner Le rayon de cercle C1 de centre
9) Si ( d > ( r1+r2)) alors A : ');
pos ← ″ Ne se coupent pas ″ READLN(r1) ;
Sinon si ( d < ( r1+r2))alors WRITELN (' Donner Le rayon de cercle C2 de centre
pos ← ″ Se coupent en deux points ″ B :'); READLN (r2) ;
Sinon d :=SQRT ( SQR ( ya-yb) + SQR( xa-xb)) ;
pos ← ″ Se coupent en un point ″
Fin si IF( d > ( r1+r2)) THEN
pos :=' Ne se coupent pas '
10) Ecrire ( ″ La position des deux cercles C1 et C2 ELSE IF ( d < ( r1+r2)) THEN
est : ″ , pos ) pos := ' Se coupent en deux points '
11) Fin POSITION ELSE
pos := ' Se coupent en un point ' ;

WRITELN ( ' La position des deux cercles C1 et C2


est : ' , pos ) ;
END.

Enseignant : AHMED BELHASSEN 45


Algorithmique et programmation

Série d’exercices
Les structures de
contrôle itératives
Exercice 1 :
Soit l’algorithme suivant : 1. Traduire cet algorithme en pascal .

0) Début inconnu 2. Donner les valeurs de P pour chacun des cas


1) Ecrire ("Donner A "), Lire (A) suivants :
1) Répéter
Ecrire (" Donner B ") a) A = 3 B= 5 P=………
Lire (B) b) A = 2 B= 4 P=………
Jusqu’à (B >=0) c) A = 4 B= 0 P=………
2) P  1
Pour i de 1 à B faire 3. En déduire le rôle de cet algorithme
P P*A
Fin pour
3) Ecrire (" P= ", P)
4) Fin inconnu

Exercice 2 :
Soit l’algorithme suivant :

0) Début inconnu
1) Répéter
Lire (NB)
Jusqu’à (NB > 0)
2) S  0
Répéter
S
 S + (NB MOD 10)
NB  NB DIV 10
Jusqu’à (NB = 0)
3) Ecrire(S)
4) Fin inconnu

Enseignant : AHMED BELHASSEN 46


Algorithmique et programmation

1. Traduire cet algorithme en pascal.


2. Donner les valeurs de S pour chacun des cas suivants :

NB=2435
S
NB

NB=21
S
NB

NB=599
S
NB

3. En déduire le rôle de cet algorithme.


4. Refaire l’algorithme précédent en remplaçant la structure itérative répéter….jusqu’à par la structure Tant
que…faire.

Exercice 3 :
Soit l’algorithme suivant :

0) Début Inconnu
1) Ecrire (" Donner un entier n = ")
Lire(n)
2) k ← 2 * n – 1
c←0
Répéter
c←c+k
k←k–2
Jusqu'à (k < 1)
3) Ecrire ("Le ……………… de l'entier ", n, " est ", c)
4) Fin Inconnu
1. Traduire cet algorithme en pascal.
2. Donner les valeurs de C pour chacun des cas suivants :

n=3
c
k

n=5
c
k

n=7
c
k
3. En déduire le rôle de cet algorithme
4. Refaire l’algorithme précédent en remplaçant la structure itérative répéter….jusqu’à par la structure Tant
que…faire.

Enseignant : AHMED BELHASSEN 47


Algorithmique et programmation

Exercice 4 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PUISSANCE permettant de saisir
un entier a et un entier b puis calculer et afficher le résultat de l’opération ″ a à la puissance b″. Sachant que ab =
a*a*……..*a (b fois)

Exercice 5 :
La somme des 6 premiers nombres entiers est égale à 21 :
1 + 2 + 3 + 4 + 5 +6 =21
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NOMBRE permettant de
déterminer et afficher le nombre N tel que :
1 + 2 + 3 + 4 + … +N = 13919

Exercice 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé JEU_AMELIORE qui demande de
trouver le nombre entre 0 et 100 choisi par l’ordinateur (en comptant les coups) et en aidant le joueur (en
précisant si c’est plus ou c’est moins). On utilisera la procédure RANDOMIZE et la fonction RANDOM (N)
pour que l’ordinateur donne un nombre de son choix.

Exercice 7 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CAL_SOM permettant de calculer la
somme d’entier allant de 1 à N (5 =<N =<100). Utiliser deux méthodes (les structures itératives : TANT
QUE …FAIRE et REPETER…JUSQU’A) pour résoudre ce problème.

Enseignant : AHMED BELHASSEN 48


Algorithmique et programmation

Exercice 8 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé REMPLACER permettant de :
- Choisir un entier n de l'intervalle [2,9] et un entier Max de l'intervalle [10,99]
- Afficher tous les entiers de l'intervalle [l, Max] en remplaçant par le caractère ‘*' tous les multiples de n ainsi
que tous les entiers dont l'écriture contient le chiffre n.
Exemple d'exécution :
Si n = 4 et Max = 18 alors la liste suivante sera affichée :
1 2 3 * 5 6 7 * 9 10 11 * 13 * 15 * 17 18

Exercice 9 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHIFFRE permettant d’afficher
tous les entiers naturels formés de quatre chiffres dont la somme donnera un entier d’un seul chiffre.
Exemple :
La somme des chiffres de l’entier 2004 est égale à 6 (2+0+0+4=6) et par conséquent l’entier 2004 sera
affiché.

Exercice 10 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NOMBRE_AMIS qui permet de
lire deux entiers X et Y strictement positifs, affiche "X et Y sont AMIS" ou "X et Y ne sont pas AMIS".
X et Y sont dits nombres AMIS si SX = Y et SY = X, avec:
- SX est la somme des diviseurs de X excepté lui-même,
- SY est la somme des diviseurs de Y excepté lui-même

Enseignant : AHMED BELHASSEN 49


Algorithmique et programmation

Exercice 11 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME_CHIFFRES_PAIR, qui
permet de lire un entier N strictement positif, détermine et affiche l'entier S formé par la somme des chiffres
pairs qui figurent dans l'entier N.
Exemple:
Pour N=14276 la valeur de S est 4+2+6 = 12 Le programme SOMME_CHIFFRES_PAIR affichera le
résultat suivant: S=12

Exercice 12 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PROGRESSION qui permet de lire
un entier N strictement positif et affiche :
- "OUI POUR N" si le chiffres de N forment une progression croissante. On pourra prendre comme sens : de
gauche à droite.
- "NON POUR N" dans le cas contraire.
Exemple :
Le nombre 5789 a des chiffres en progression croissante
Le nombre 187 a des chiffres qui ne forment pas une progression croissante

Exercice 13 :
Un nombre est dit parfait s’il est égal à la somme de ces diviseurs sauf lui-même.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PARFAIT permettant de lire un
entier N ( 1 < N < 100) et tester s’il est parfait ou non.
Exemple :
6 est parfait car 6= 1+2+3.
28 est parfait car 28 = 1+2+4+7+14.
10 n'est pas parfait car 10 ≠ 1 + 2 + 5

Exercice 14 : Deux entiers sont dits « jumeaux » s’ils sont premiers et impairs successifs.
Un entier est premier s’il n’est divisible que par 1 et par lui-même.
Exemples :
Les deux entiers 11 et 13 sont jumeaux car ils sont tous les deux premiers et pairs successifs.
Les deux entiers 29 et 31 sont jumeaux car ils sont tous les deux premiers et pairs successifs.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé JEMEAUX qui cherche et affiche
tous les couples d’entiers jumeaux de l’intervalle [1..100].

Enseignant : AHMED BELHASSEN 50


Algorithmique et programmation

Exercice 15 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOM_FACT qui permet de calculer
et d’afficher la somme des factorielles des chiffres d’un entier n donné (2 ≤ n ≤ 50).
(On donne aussi 0! = 1).
Exemple : Si n=13 alors 7 sera affiché (1! + 3 ! =7)

Exercice 16 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CHIFFRE qui :
- Lit un entier positif NB de 3 chiffres minimum.
- Détermine le plus petit chiffre qui rentre dans la composition de ce nombre.
- Détermine le nombre d’apparition de ce chiffre dans le nombre NB.

Exercice 17 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TRIANGLE qui lit un entier positif
N est différent de 0 et affiche un triangle comme suit :

Exemple : *
** *
Si N=3 on aura Si N=5 on aura **
***
***
****
*****

Enseignant : AHMED BELHASSEN 51


Algorithmique et programmation

Exercice 18 :
Tout nombre positif de deux chiffres n, tel que (chiffre des dizaines ≠ chiffre des unités), possède une liste
appelée " liste vers 9 ".
Le principe est le suivant : on calcule la différence entre n et son symétrique, le résultat trouvé subit le même
traitement, on répète ce processus jusqu'à obtenir une différence 9.
L’ensemble constitué par le nombre initial et les résultats des différences est appelé " liste vers 9 ".
Exemple :
1. Soit n=18 |18-81| =63  |63-36|=27 |27-72|=45  |45-54|=9  fin du traitement
La liste vers 9 est la suivante : 18 63 27 45 9
2. Soit n=74 |74 -47|=27 |27-72|=45 |45-54|=9  fin du traitement
La liste vers 9 est la suivante : 74 27 45 9
N.B : Utiliser la fonction prédéfinie ABS pour calculer la différence entre le résultat trouvé et son symétrique.
Le calcul et l’affichage de chaque résultat sont deux traitements successifs.
Travail demandé :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LISTE_VERS_9 permettant
d’introduire un nombre n positif composé de deux chiffres obligatoirement différents, de générer et d’afficher
sa " liste vers 9 ".

Exercice 19 :
La suite de Syracuse :
A un entier n strictement positif on associe n/2 si n est pair et 3n+1 si n est impair.
En réappliquant cette transformation à l'entier obtenu, on définit un algorithme dit de Syracuse.
Bien qu'à ce jour personne n'en ait trouvé de démonstration, il semble que pour tout entier strictement positif
de départ on finisse toujours par arriver à 1.
Exemple : valeur de départ n=12
6 3 10 5 16 8 4 2 1
On doit appliquer 9 fois la transformation.
Rédiger une analyse et un algorithme intitulé SYRACUSE permettant de lire une valeur de départ proposée
par l'utilisateur, afficher la liste des entiers obtenus jusqu'à 1, ainsi que le nombre de fois qu'il est nécessaire
d'appliquer la transformation pour y arriver.

Exercice 20 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POSITION qui détermine le
nombre et les positions d’une sous-chaine dans une chaine de caractère.
Exemple : ON dans la chaine ″ FONCTION ″, on affiche :
C’est trouvé à la position 2.
C’est trouvé à la position 7.
ON se trouve 2 fois dans la chaine ″ FONCTION ″

Enseignant : AHMED BELHASSEN 52


Algorithmique et programmation

Exercice 21 :
On appelle poids d’un mot la somme des produits de la position de chaque voyelle contenue dans le mot par
son rang dans l’alphabet français. Une lettre a le même rang qu’elle soit écrite en majuscule ou en minuscule.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POIDS qui calcule et affiche le
poids d’un mot donné.
Exemple : Le mot « Epreuve » a pour poids 165 car : (1*5) + (4*5) + (5*21) + (7*5) = 165

Exercice 22 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CODAGE, qui permet de lire un
mot non vide, le coder caractère par caractère, an ajoutant 2 à la valeur du code utilisé pour représenter ce
caractère, enfin affiche le mot codé. (Ainsi la lettre a (dont le code SCII est 97) sera transformée en c (dont le
code ASCII est 99).
Exemple :
"INFO2007" sera transformée en "KPHQ4229" Le programme CODAGE affiche le message suivant: la
chaîne codée est : KPHQ4229

Exercice 23 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME_CHIFFRES, qui permet
de lire une chaîne de caractères CH commençant obligatoirement par une lettre alphabétique majuscule (et
supposée composée par des lettres et des chiffres), détermine et affiche l'entier S formé par la somme des
chiffres qui figurent dans la chaîne CH.
Exemple :
Pour CH='Ali12abc26' la valeur de S est 1+2+2+6 = 11 Le programme SOMME_CHIFFRES affichera le
résultat suivant : S = 11

Exercice 24 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NOMBRE VOYELLE, qui permet
de lire une chaîne de caractères CH non vide, détermine et affiche l'entier S formé par le nombre des voyelles
qui figurent dans la chaîne CH.
Exemple:
Pour CH='BASES DE DONNEES" la valeur de S est 6 Le programme NOMBRE_VOYELLE affichera le
résultat suivant: S = 6

Enseignant : AHMED BELHASSEN 53


Algorithmique et programmation

Exercice 25 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LATIN qui lit une phrase en
français et convertit ses mots en latin selon la méthode suivante :
Pour traduire un mot français en latin, placez tout d’abord la première lettre du mot français à la suite de la
dernière et ajoutez ″us″ de cette façon le mot « le » devient « elus », le mot « livre » devient « ivrelus » et le mot
« homme » devient « ommehus ». Les espaces entre les mots ne sont pas modifiés. On suppose que la phrase
en français est une suite de mots séparés par des espaces et ne contient aucun caractère de ponctuation. Affichez
ensuite la phrase en latin.

Exercice 26 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé RENVERSE qui saisit une phrase
et l'affiche renversée. La phrase commence, obligatoirement, par une lettre et ses mots sont séparés par un seul
espace.
Exemple :
Votre phrase: Résultat:
ALGORITHME ET PROGRAMMATION PROGRAMMATION ET ALGORITHME

Exercice 27 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MOYENNE qui calcule la
moyenne de N nombres entrés successivement par l’utilisateur.

Exercice 28 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MAX_MIN permettant de chercher
le maximum et le minimum dans un tableau T d’entier de taille N (N saisie par l’utilisateur).

Enseignant : AHMED BELHASSEN 54


Algorithmique et programmation

Exercice 29 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé OCCURENCE permettant de
chercher l’occurrence d’un caractère C dans tableau de chaine de caractère.

Exercice 30 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TABLE_PYTHA permettant de
créer une table de Pythagore, c'est-à-dire une table ou l’intersection entre ligne et colonne représente la
multiplication des deux.
Exemple : Nombre_ligne_col = 4 donne :
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16

Exercice 31 : Soit l’algorithme suivant :


0) Début ALG 4) Pos ← 0
1) Répéter Pour i de N à 1 Faire
Ecrire ( ″ Donner un entier N ″ ) Si ( T[ i ] = S ) Alors
Lire (N) Pos ← i
Jusqu’à (N>=5 ) ET ( N=<15 ) Fin Si
2) Pour i de 1 à N Faire Fin Pour
Ecrire ( ″ Donner T [ ″ , i , ″ ] ″ ) 5) Si ( Pos = 0 ) Alors
Lire ( T[ i ]) Ecrire ( S , ″ n′existe pas ″)
Fin Pour Sinon
3) Ecrire ( ″ Donner une chaine ″ ) Ecrire ( S , ″ existe à la position ″ , Pos )
Lire ( S ) Fin Si
6) Fin ALG

Enseignant : AHMED BELHASSEN 55


Algorithmique et programmation

a) Quel est le rôle de cet algorithme.


b) Modifier l’action 4 du programme ALG en utilisant les boucles Répéter…Jusqu’à et Tant que…Faire
en donnant une solution optimale.

Exercice 32 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LOGIQUE permettant d’afficher
les fonctions logique ET, OU et OUEXCLUSIF.
Exemple : Pour ET l’affichage sera :
FAUX ET FAUX = FAUX.
FAUX ET VRAI = FAUX.
VRAI ET FAUX = FAUX.
VRAI ET VRAI = VRAI.

Exercice 33 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé OCCURRENCE_X qui permet de
remplir un tableau T de N entiers, puis lire un entier X et afficher :
- La position de première occurrence de X dans le tableau T.
- La position de dernière occurrence de X dans le tableau T.
- le nombre d’occurrence de X dans le tableau T.
Exemple : N=10, X=8
T 7 8 17 12 14 8 5 15 8 19
1 2 3 4 5 6 7 8 9 10
- La position de première occurrence de X dans T est : 2.
- La position de dernière occurrence de X dans T est : 9.
- Le nombre d’occurrence de X dans T est : 3.

Enseignant : AHMED BELHASSEN 56


Algorithmique et programmation

Exercice 34 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EXISTE permettant de remplir un
tableau T avec N entiers lu au clavier, de lire un entier E et de vérifier sa présence dans ce tableau et d’afficher
son indice.
Exemple :
T 1 2 10 3 15 5 6 3
Si E = 10 l’ordinateur affiche 3 existe dans T à la position 2
Si E = 9 l’ordinateur affiche 9 n’existe pas dans T.

Exercice 35 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SYMETRIE permettant de saisir les
éléments d'un tableau T de N entiers de trois chiffres chacun puis de chercher et d'afficher les nombres
symétriques de ce tableau.
Exemple :
Pour N=7
T 424 715 133 121 454 616 566
Le programme affichera : les nombres symétriques de T sont: 424, 121, 454 et 616

Exercice 36 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PARITE permettant de saisir N
(2 ≤ N ≤ 100) entiers dans un vecteur T et l’éclater en deux suivant la parité de chaque nombre.

Exemple :

T 5 4 2 7 6 5 1

Alors on aura :

TI 5 7 5 1

TP 4 2 6

Enseignant : AHMED BELHASSEN 57


Algorithmique et programmation

Exercice 37 : Soient T1 et T2 deux tableaux d’entiers de taille N (N est impair).


Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TRANSFERT permettant le
transfert des éléments de T1 et T2 selon le principe suivant :
Les éléments de rang impair de T1 seront rangés dans T2 en ordre inverse (de la droite vers la gauche) et les
éléments de rang pair de T1 seront rangés dans T2 (de la gauche vers la droite).

Exemple : N=9

T1 12 13 41 5 19 13 4 8 15
1 2 3 4 5 6 7 8 9

T2 13 5 13 8 15 4 19 41 12
1 2 3 4 5 6 7 8 9

Enseignant : AHMED BELHASSEN 58


Algorithmique et programmation

Exercice 38 :
La représentation des informations à l’intérieur de la machine est sous la forme d’une combinaison de 0 et 1
(Représentation binaire : exemple 0000010010001111).
La distance de Hamming entre les représentations binaires de deux entiers positifs est le nombre de positions
correspondant à des bits différents dans les deux écritures.
Exemple :
Si N1 = 45, il s’écrit en binaire 101101 et il est représenté par le tableau T1 :
0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Si N2 = 19, il s’écrit en binaire 10011 et il est représenté par le tableau T2 :

0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Distance de hamming = Nombre des bits différents


T 1[11] ≠ T2 [11]
 dh=1, T 1[12] ≠ T 2[12]  dh=2, T 1[13] ≠ T 2[13]  dh=3,
T 1[14] ≠ T 2[14]  dh=4, T 1[15] ≠ T 2[15]  dh=5
Travail demandé :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé HAMMING permettant de :
- Lire deux entiers N1 et N2 strictement positifs et inférieurs à 65536.
- D’initialiser deux tableaux T1 et T2 d’ordre 16 à zéro (chaque tableau est formé de 16 éléments).
- Convertir N1 et N2 en binaire :
« Convertir N1 en binaire en le divisant par 2 jusqu’à trouver un quotient égale à 0 (zéro) et stocker au fur et à
mesure le reste de chaque division dans le tableau T1 de taille 16 »
« Convertir N2 en binaire en le divisant par 2 jusqu’à trouver un quotient égale à 0 (zéro) et stocker au fur et à
mesure le reste de chaque division dans le tableau T2 de taille 16 »
- Calculer puis afficher la distance de Hamming entre les représentations binaires de deux entiers positifs N1
et N2.

Exercice 39 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé AFFICHE_CHAINE permettant :
 De remplir un tableau T de n chaînes de caractères (2<n<20). Chaque chaîne doit avoir un nombre de
caractères supérieur ou égal à son indice (i) dans le tableau.
 D’afficher pour chaque élément T[ i ] du tableau, les i premiers caractères de la chaîne.

Exemple : Soit T un tableau de 6 chaînes de caractères.

T Bit Modem Ecran Souris Processeur Mémoire


1 2 3 4 5 6
Le programme affiche les i premiers caractères de chaque T[i].
Explication :
Dans l’exemple précédent on affiche :
Pour T[1] le premier caractère de la chaîne

Enseignant : AHMED BELHASSEN 59


Algorithmique et programmation

Pour T[2] les 2 premiers caractères de la chaîne


Pour T[3] les 3 premiers caractères de la chaîne
Pour T[4] les 4 premiers caractères de la chaîne
Pour T[5] les 5 premiers caractères de la chaîne
Pour T[6] les 6 premiers caractères de la chaîne
Le programme affichera selon le format suivant (triangle) : B
Mo
Ecr
Sour
Proce
Mémoir

Exercice 40 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé PROD_SCALAIRE qui permet de
calculer et d’afficher le produit scalaire de deux tableaux A et B de n entiers positifs (n étant un entier compris
entre 5 et 50).
N.B : Le produit scalaire de deux tableaux A et B est donné par la formule suivante :
n
PS = ∑ A[i] * B[i]
i =1

Exercice 41 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé NB_SEQ, qu’à partir d’un tableau T
de N entiers, affiche toutes les séquences strictement croissantes, de ce tableau, ainsi que leur nombre.
Pour un tableau T de 15 éléments :

T 1 2 5 3 12 25 13 8 4 7 24 28 32 11 14

Enseignant : AHMED BELHASSEN 60


Algorithmique et programmation

Les séquences strictement croissantes sont : ( 1 , 2 , 5 ) , ( 3 , 12 , 25 ) , (13) , (8) , ( 4 , 7 , 24 , 28 , 32) , (11,14).


Le nombre de séquence est 6.

Exercice 42 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ZERO permettant de saisir les
éléments d’un tableau T de N entiers positifs ou nuls ( 5 ≤ N ≤ 20 ) et de déplacer tous les éléments nuls à la fin
du tableau .
Exemple :

Etat initial du tableau T : 4 0 8 0 -2 0 6 10 3

Etat final du tableau T :


4 8 -2 6 10 3 0 0 0

Enseignant : AHMED BELHASSEN 61


Algorithmique et programmation

Exercice 43 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé HISTOGRAMME permettant de
saisir les nombres des lettres (entre 1 et 15) ' A ' , ' B ', ' C ', puis afficher à l’aide de ces lettres un histogramme
comme représenté ci-dessous : NbrA = 1, NbrB = 5, NbrB = 3

B
B
B C
B C
A B C

Exercice 44 :
On désir programmer la commande Rechercher et remplacer du menu Edition d’un logiciel de traitement de
texte, qui, en fournissant le texte, un mot1 et un mot2, permet de remplacer toute occurrence de mot1 par mot2
dans texte.
Exemple :
Soit le texte suivant : ″ Les structures conditionnelles sont simples à comprendre. L’emploi des structures
conditionnelles rend la programmation plus intéressante. ″
Soit mot1 = ″conditionnelles″
Soit mot2 = ″itératives″
Le programme doit afficher : ″ Les structures itératives sont simples à comprendre. L’emploi des structures
itératives rend la programmation plus intéressante. ″

Exercice 45 :
Un CODEC est un logiciel compresseur décompresseur de fichiers. En effet, les suites de bits composant un
fichier comportent des similitudes comme 10000111. Plutôt que de stocker la totalité de cet octet, on gagne de
la place en écrivant 14031 (qui se lit un quatre zéros trois un). Cet octet (huit bits) retrouva ensuite son format
original à la décompression.
Il s’agit alors de saisir une chaîne de huit chiffres formée uniquement 0 et 1 pour désigner un octet puis la
compresser suivant le principe de compression du CODEC et enfin l’afficher.
Exemple : Si octet = ˝10010111˝ Alors l’octet compressé est : ˝1201031˝

Enseignant : AHMED BELHASSEN 62


Algorithmique et programmation

Exercice 46 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CODAGE permettant de coder un
message selon le procédé suivant : permuter chaque caractère d’indice pair avec le caractère qui le précède.

Exemple : Le codage de la chaîne de caractère : ″Baccalauréat″ donne ″aBcclauaérta″

Enseignant : AHMED BELHASSEN 63


Algorithmique et programmation

Correction de série
d’exercices
Les structures de
contrôle itératives
Exercice 1 :

Soit l’algorithme suivant : 1. Programme en PASCAL :


PROGRAM INCONNU ;
0) Début inconnu USES WINCRT ;
1) Ecrire ("Donner A "), Lire (A) VAR
1) Répéter A,B,P , i : INTEGER ;
Ecrire (" Donner B ") BEGIN
Lire (B) WRITELN (' Donner A '); READLN (A);
Jusqu’à (B >=0) REPEAT
2) P  1 WRITELN (' Donner B '); READLN (B);
Pour i de 1 à B faire UNTIL ( B >=0) ;
P P*A P:=1;
Fin pour FOR i:= 1 TO B DO
3) Ecrire (" P= ", P) P:=P*A ;
4) Fin inconnu WRITELN (' P= ', P);
END.

2.
a) A = 3 B= 5 P=243
b) A = 2 B= 4 P=16
c) A = 4 B= 0 P=1

3. Le rôle de cet algorithme est de calculer A à la puissance de B.

Enseignant : AHMED BELHASSEN 64


Algorithmique et programmation

Exercice 2 :
Soit l’algorithme suivant : 1. Programme en PASCAL :
PROGRAM INCONNU ;
0) Début inconnu USES WINCRT ;
1) Répéter VAR
Lire (NB) S,NB : INTEGER ;
Jusqu’à (NB > 0) BEGIN
2) S  0 REPEAT
Répéter READLN (NB);
S
 S + (NB MOD 10) UNTIL ( NB >0) ;
NB  NB DIV 10 S:=0;
Jusqu’à (NB = 0) REPEAT
3) Ecrire(S) S:=S+( NB MOD 10 );
4) Fin inconnu NB:= NB DIV 10;
UNTIL ( NB = 0) ;
WRITELN (S);
END.

2. Donner les valeurs de S pour chacun des cas suivants :

NB=2435
S 5 8 12 14
NB 243 24 2 0

NB=21
S 1 3
NB 2 0

NB=599
S 9 18 23
NB 59 5 0

3. Le rôle de cet algorithme est de calculer la somme des chiffres d’un entier donné.

4.
0) Début SOMME
1) Tant que (NB<=0) faire
Lire (NB)
Fin Tant que
2) S  0
Tant que (NB<>0) faire
S
 S + (NB MOD 10)
NB  NB DIV 10
Fin Tant que
3) Ecrire(S)
4) Fin inconnu

Enseignant : AHMED BELHASSEN 65


Algorithmique et programmation

Exercice 3 :
Soit l’algorithme suivant :

0) Début Inconnu 1. Programme en PASCAL :


PROGRAM INCONNU ;
1) Ecrire (" Donner un entier n = ") USES WINCRT ;
Lire(n) VAR
c, n , k : INTEGER ;
2) k ← 2 * n – 1 BEGIN
c←0 WRITELN (' Donner un entier n = ');
READLN (n);
Répéter
c←c+k k:=2*n-1 ;
k←k–2 c:=0 ;
Jusqu'à (k < 1) REPEAT
c:=c+k ;
3) Ecrire ("Le ……………… de l'entier ", n, k:= k-2 ;
" est ", c) UNTIL ( k <1 ) ;
4) Fin Inconnu WRITELN (' Le ……………… de l''entier ' , n , '
est ' , c );
END.

.
2.
n=3
c 5 8 9
k 3 1 -1

n=5
c 9 16 21 24 25
k 7 5 3 1 -1

n=7
c 13 24 33 40 45 48 49
k 11 9 7 5 3 1 -1

3. Le rôle de cet algorithme est de calculer le carré d’un entier n donné .


4.
0) Début Inconnu
1) Ecrire (" Donner un entier n = ")
Lire(n)
2) k ← 2 * n – 1
c←0
Tant que ( k>=1 ) faire
c←c+k
k←k–2
Fin tant que
3) Ecrire ("Le carré de l'entier ", n, " est ", c)
4) Fin Inconnu

Enseignant : AHMED BELHASSEN 66


Algorithmique et programmation

Exercice 4 :
Analyse du problème
Nom : PUISSANCE
Résultat = Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p )
p = [ p ← 1 ] pour i de 1 à b faire
p←p*a
fin pour
a = donnée ( "a = ")
b = donnée ( "b = ")
Fin PUISSANCE
TDO
Objet Type/Nature
p,a,b,i Entier

Algorithme Traduction en PASCAL


0) Début PUISSANCE PROGRAM PUISSANCE ;
1) Ecrire ( " a = ") , lire(a) USES WINCRT ;
2) Ecrire ( " b = ") , lire(b) VAR p,a,b,i : INTEGER ;
3) p ← 1 BEGIN
pour i de 1 à b faire WRITE (' a = '); READLN (a);
p←p*a WRITE (' b = '); READLN (b);
fin pour p :=1 ;
4) Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p ) FOR i :=1 TO b DO
5) Fin PUISSANCE p := p*a ;
WRITELN (a,' à la puissance de ', b, ' = ' ,p ) ;
END.
Exercice 5 :
Analyse du problème
Nom : NOMBRE
Résultat = Ecrire (″ 1+2+3+4+5+6+..........+ ″, i, ″ = 13919″)
i= [ i ← 1,s ← 0 ] Répéter
s ← s+i
i ← i+1
Jusqu’à ( s=13919 )
Fin NOMBRE
TDO
Objet Type/Nature
s,i Entier

Algorithme Traduction en PASCAL


0) Début NOMBRE PROGRAM NOMBRE ;
1) i ← 1 USES WINCRT ;
2) s ← 0 VAR i, s : INTEGER ;
3) Répéter BEGIN
s ← s+i i:=1 ; s:=0 ;
i ← i+1 REPEAT
Jusqu’à ( s=13919 ) s:=s+i ;
i:=i+1 ;
4) Ecrire (″ 1+2+3+4+5+6+.........+ ″, i, ″= 13919″) UNTIL ( s=13919 ) ;
5) Fin NOMBRE WRITELN('1+2+3+4+5+6+.......+', i ,' = 13919' );
END.

Enseignant : AHMED BELHASSEN 67


Algorithmique et programmation

Exercice 6 :
Analyse du problème
Nom : JEU_AMELIORE
Résultat = Ecrire (″ juste en ″ , nb , ″ coups ″ )
nb = [ nb ← 0, RANOMIZE, choix ← ALEA( 100 ) ]
Répéter
p ← nb + 1
rep = donnée (″ Donner un nombre ″ , nb ,″ ? ″ )
Si rep < choix alors
Ecrire ( ″ c’est plus ″ )
Sinon si rep> choix
Ecrire (″ c’est moins ″)
Sinon
Ecrire (″ c’est bien ″)
Fin si
Jusqu’à rep=choix
Fin JEU_AMELIORE
TDO
Objet Type/Nature
choix , rep ,nb Entier

Algorithme Traduction en PASCAL


0) Début JEU_AMELIORE PROGRAM JEU_AMELIORE ;
1) nb ← 0 USES WINCRT ;
RANOMIZE VAR choix , rep ,nb : INTEGER ;
choix ← ALEA( 100 ) BEGIN
Répéter nb :=0 ;
nb ← nb + 1 RANDOMIZE ;
Ecrire (″ Donner un nombre ″ , nb ,″ ? ″ ) choix :=RANDOM( 100 ) ;
Lire(rep) REPEAT
Si rep < choix alors nb:=nb+1 ;
Ecrire ( ″ c’est plus ″ ) WRITE (' Donner un nombre ',nb,' ? ' );
Sinon READLN (rep);
Ecrire (″ c’est moins ″) IF rep < choix THEN
WRITELN ( ' c''est plus ' )
Sinon ELSE IF rep>choix THEN
Ecrire (″ c’est bien ″) WRITELN ( ' c''est moins ')
Fin si ELSE
Jusqu’à rep=choix WRITELN (' c''est bien ') ;
UNTIL rep=choix;
2) Ecrire (″ juste en ″ , nb , ″ coups ″ ) WRITELN (' juste en ' , nb , ' coups ' ) ;
3) Fin JEU_AMELIORE END.

Enseignant : AHMED BELHASSEN 68


Algorithmique et programmation

Exercice 7 : Méthode 1 : en utilisant tant que…faire


Analyse du problème
Nom : CAL_SOM
Résultat = Ecrire (″ La somme = ″ , somme )
somme= [ somme ←0 , i ← 0 ]
Tant que ( i<=N ) faire
somme ← somme + i
i ← i+1
Fin tant que
N= [ ] Répéter
N=donnée ( ″ Donner un entier N : ″ )
Jusqu’à N dans [ 5..100]
Fin CAL_SOM
TDO
Objet Type/Nature
N, i ,somme Entier

Algorithme Traduction en PASCAL


0) Début CAL_SOM PROGRAM CAL_SOM ;
1) Répéter USES WINCRT ;
Ecrire (″Donner un entier N : ″ ) VAR N , i ,somme : INTEGER ;
Lire(N) BEGIN
Jusqu’à N dans [ 5..100] REPEAT
2) somme ←0 i ← 0 WRITE (' Donner un entier N : ' );
Tant que ( i<=N ) faire READLN (N);
somme ← somme + i UNTIL N IN [ 5..100] ;
i ← i+1 somme:=0;
Fin tant que i:=0 ;
3) Ecrire (″ La somme = ″ , somme ) WHILE ( i<=N ) DO
4) Fin CAL_SOM BEGIN
somme:=somme+i ;
i:=i+1 ;
END;
WRITELN (' La somme = ' , somme ) ;
END.

Méthode 2 : en utilisant Répéter…jusqu’à


Analyse du problème
Nom : CAL_SOM
Résultat = Ecrire (″ La somme = ″ , somme )
somme= [ somme ←0, i ← 1]
Répéter
somme ← somme + i
i ← i+1
Jusqu’à i > N
N= [ ] Répéter
N=donnée ( ″ Donner un entier N : ″ )
Jusqu’à N dans [ 5..100]

Fin CAL_SOM

Enseignant : AHMED BELHASSEN 69


Algorithmique et programmation

TDO
Objet Type/Nature
N, i ,somme Entier

Algorithme Traduction en PASCAL


0) Début CAL_SOM PROGRAM CAL_SOM ;
1) Répéter USES WINCRT ;
Ecrire (″Donner un entier N : ″ ) VAR N , i ,somme : INTEGER ;
Lire(N) BEGIN
Jusqu’à N dans [ 5..100] REPEAT
2) somme ←0 i ← 1 WRITE (' Donner un entier N : ' );
Répéter READLN (N);
somme ← somme + i UNTIL N IN [ 5..100] ;
i ← i+1 somme:=0;
Jusqu’à i > N i:=1 ;
3) Ecrire (″ La somme = ″ , somme ) REPEAT
4) Fin CAL_SOM somme:=somme+i ;
i:=i+1 ;
UNTIL i > N ;
WRITELN (' La somme = ' , somme ) ;
END.

Exercice 8 :
Analyse du problème
Nom : REMPLACER
Résultat = Affichage
Affichage= [ ] pour i de 1 à max faire
x ← i MOD 10
y ← i DIV 10
Si ( i MOD n =0 ) OU (x=n) OU (y=n) alors
Ecrire (″*″: 4)
Sinon
Ecrire ( i : 4 )
Fin si
Fin pour
max= [ ] Répéter
max=donnée ( ″ MAX = ″ )
Jusqu’à N dans [ 10..99 ]

n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à N dans [ 1..9 ]
Fin REMPLACER
TDO
Objet Type/Nature
i , max , n , x, y Entier

Enseignant : AHMED BELHASSEN 70


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début REMPLACER PROGRAM REMPLACER ;
1) Répéter USES WINCRT ;
Ecrire (″ MAX = ″ ) VAR i , max , n , x, y : INTEGER ;
Lire(max) BEGIN
Jusqu’à max dans [ 10..99] REPEAT
2) Répéter WRITE (' MAX = ' );
Ecrire (″ N = ″ ) READLN (max);
Lire(n) UNTIL max IN [ 10..99];
Jusqu’à n dans [ 2..9]
REPEAT
3) pour i de 1 à max faire WRITE (' N = ' );
x ← i MOD 10 READLN (n);
y ← i DIV 10 UNTIL n IN [ 2..9];
Si ( i MOD n =0 ) OU (x=n) OU (y=n) alors FOR i:=1 TO max DO
Ecrire (″*″: 4) BEGIN
Sinon x:=i MOD 10;
Ecrire (i : 4) y:=i DIV 10 ;
Fin si
Fin pour IF ( i MOD n =0 ) OR (x=n) OR (y=n) THEN
4) Fin REMPLACER WRITE ( '*': 4)
ELSE
WRITE (i : 4);
END;
END.

Exercice 9 :
Analyse du problème
Nom : CHIFFRE
Résultat = Affichage
Affichage= [ ] pour i de 1000 à 9999 faire
x ← i DIV 1000
y ← i MOD 1000 DIV 100
z← i MOD 1000 MOD 100 DIV 10
w← i MOD 10
n← x+y+z+w
Si ( n DIV 10 =0) alors
Ecrire (″La somme des chiffres de ″, i ,″est ″, n , ″ ( ″,x,″+″,y,″+″,z,″+″,w,″ = ″ ,n ,″ )″ )
Fin si
Fin pour
Fin CHIFFRE
TDO
Objet Type/Nature
i , z,w ,n ,x,y Entier

Algorithme Traduction en PASCAL


0) Début CHIFFRE PROGRAM CHIFFRE ;
1) pour i de 1000 à 9999 faire USES WINCRT ;
x ← i DIV 1000 VAR i , z,w ,n ,x,y : INTEGER ;
y ← i MOD 1000 DIV 100 BEGIN
z← i MOD 1000 MOD 100 DIV 10 FOR i: =1000 TO 9999 DO
w← i MOD 10 BEGIN

Enseignant : AHMED BELHASSEN 71


Algorithmique et programmation

n← x+y+z+w x:=i DIV 1000;


Si ( n DIV 10 =0) alors y:=i MOD 1000 DIV 100 ;
Ecrire (″La somme des chiffres de ″, i ,″est z:=i MOD 1000 MOD 100 DIV 10;
″, n , ″ ( ″,x,″+″,y,″+″,z,″+″,w,″ = ″ ,n ,″ )″ ) w:=i MOD 10;
Fin si n:=x+y+z+w;
Fin pour
2) Fin CHIFFRE IF ( n DIV 10 =0 ) THEN
WRITELN (' La somme des chiffres de ', i , '
est ', n , ' ( ',x,'+',y,'+',z,'+',w,' = ' ,n ,')' ) ;
END;
END.

Exercice 10 :
Analyse du problème
Nom : NOMBRE_AMIS
Résultat = Affichage
Affichage= [ ] si ( sy = x ) ET ( sx=y) alors
Ecrire (x , ″ et ″, y , ″ sont amis″)
Sinon
Ecrire (x , ″ et ″, y , ″ ne sont pas amis″)
Fin si
sx=[ sx ←0] pour i de 1 à ( x DIV 2) faire
Si ( x MOD i =0 ) alors
sx ←sx+i
Fin si
Fin pour
Sy=[ sy ←0] pour i de 1 à ( y DIV 2) faire
Si ( y MOD i =0 ) alors
sy ←sy+i
Fin si
Fin pour
y= [ ] Répéter
y=donnée (″ Y = ″)
Jusqu’à y > 0
x= [ ] Répéter
x=donnée (″ X = ″)
Jusqu’à x >0
Fin NOMBRE_AMIS
TDO
Objet Type/Nature
sx , sy , i , x , y Entier

Algorithme Traduction en PASCAL


0) Début NOMBRE_AMIS PROGRAM NOMBRE_AMIS;
1) Répéter USES WINCRT ;
Ecrire (″ X = ″ ) VAR sx , sy , i , x , y : INTEGER ;
Lire(x) BEGIN
Jusqu’à x > 0 REPEAT
2) Répéter WRITE (' X = ');
Ecrire (″ Y = ″ ) READLN(x);
Lire(y) UNTIL x >0 ;
Jusqu’à y > 0 REPEAT

Enseignant : AHMED BELHASSEN 72


Algorithmique et programmation

3) sx ←0 WRITE (' Y = ');


pour i de 1 à ( x DIV 2) faire READLN(y);
Si ( x MOD i =0 ) alors UNTIL y >0 ;
sx ←sx+i sx:=0;
Fin si FOR i:=1 TO ( x DIV 2) DO
Fin pour IF ( x MOD i =0 ) THEN
4) sy ←0 sx:=sx+i;
pour i de 1 à ( y DIV 2) faire sy:=0;
Si ( y MOD i =0 ) alors FOR i:=1 TO ( y DIV 2) DO
sy ←sy+i IF ( y MOD i =0 ) THEN
Fin si sy:=sy+i;
Fin pour
5) si ( sy = x ) ET ( sx=y) alors IF ( sy=x)AND (sx=y) THEN
Ecrire (x , ″ et ″, y , ″ sont amis″) WRITELN(x , ' et ', y , ' sont amis')
Sinon ELSE
Ecrire (x , ″ et ″, y , ″ ne sont pas amis″) WRITELN(x , ' et ', y , ' ne sont pas amis');
Fin si END.
4) Fin NOMBRE_AMIS

Exercice 11 :
Analyse du problème
Nom : SOMME_CHIFFRE_PAIR
Résultat = Ecrire (″La somme des chiffres pair de ″, n , ″ est égal à ″, s )
s= [ y ← n , s ← 0 ] Répéter
x ← y MOD 10
si ( x MOD 2 =0 ) alors
s← s+x
fin si
y ← y DIV 10
Jusqu’à ( y=0)
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >0 )
Fin SOMME_CHIFFRE_PAIR
TDO
Objet Type/Nature
s , n , x, y Entier

Algorithme Traduction en PASCAL


0) Début SOMME_CHIFFRE_PAIR PROGRAM SOMME_CHIFFRE_PAIR ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR s , n , x, y : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >0 ) REPEAT
2) y ← n s ← 0 WRITE (' N = ' );
Répéter READLN (n);
x ← y MOD 10
si ( x MOD 2 =0 ) alors UNTIL ( n > 0) ;
s← s+x y:=n ;
fin si s :=0 ;
y ← y DIV 10 REPEAT

Enseignant : AHMED BELHASSEN 73


Algorithmique et programmation

Jusqu’à ( y=0) x:=y MOD 10;


IF ( x MOD 2 =0 ) THEN
3) Ecrire (″La somme des chiffres pair de ″, n , ″ est s:=s+x;
égal à ″, s ); y:=y DIV 10 ;
UNTIL ( y =0 ) ;
4) Fin SOMME_CHIFFRE_PAIR WRITE (' La somme des chiffres pair de ', n , ' est
égal à ' , s );
END.

Exercice 12 :
Analyse du problème
Nom : PROGRESSION
Résultat = Affichage
Affichage= [ ] si croissante alors
Ecrire ( n , ″ forme une progression croissante ″ )
Sinon
Ecrire ( n , ″ne forme pas une progression croissante ″ )
Fin si
croissante = [ y ← n , mem ← y MOD 10 , croissante ← vrai ]
Répéter
y ← y DIV 10
x ← y MOD 10
si ( x > mem ) alors
croissante ← faux
fin si
mem ← x
Jusqu’à ( y=0) OU ( croissante = faux )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >0 )
Fin PROGRESSION
TDO
Objet Type/Nature
mem , n , x, y Entier
croissante Booléen

Algorithme Traduction en PASCAL


0) Début PROGRESSION PROGRAM PROGRESSION ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR mem , n , x, y : INTEGER ;
Lire (n ) croissante : BOOLEAN;
Jusqu’à ( n >0 ) BEGIN
2) y ← n REPEAT
mem ← y MOD 10 WRITE (' N = ' );
croissante ← vrai READLN (n);
Répéter
y ← y DIV 10 UNTIL ( n > 0 );
x ← y MOD 10 y:=n ;
si ( x > mem ) alors mem:=y MOD 10 ;
croissante ← faux croissante:=TRUE;
fin si
mem ← x REPEAT

Enseignant : AHMED BELHASSEN 74


Algorithmique et programmation

Jusqu’à ( y=0) OU ( croissante = faux ) y:=y DIV 10 ;


x:=y MOD 10 ;
3) si croissante alors IF ( x > mem ) THEN
Ecrire ( n , ″ forme une progression croissante ″ ) croissante:=FALSE;
Sinon mem:=x ;
Ecrire ( n , ″ne forme pas une progression UNTIL ( y = 0 ) OR ( croissante = FALSE) ;
croissante ″ ) IF ( croissante ) THEN
Fin si WRITE ( n , ' forme une progression croissante ')
4) Fin PROGRESSION ELSE
WRITE ( n , ' ne forme pas une progression
croissante '); END.

Exercice 13 :
Analyse du problème
Nom : PARFAIT
Résultat = Affichage
Affichage= [ ] si (s=n ) alors
Ecrire ( n , ″ est un entier parfait ″ )
Sinon
Ecrire ( n , ″ n''est pas un entier parfait ″ )
Fin si
s= [ s ← 0 ] Pour i de 1 à ( n DIV 2 ) faire
si ( n MOD i =0 ) alors
Ecrire( i : 4 )
s← s + i
fin si
Fin pour

n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >0 ) ET ( n <100 )
Fin PARFAIT
TDO
Objet Type/Nature
s, n , i Entier

Algorithme Traduction en PASCAL


0) Début PARFAIT PROGRAM PARFAIT ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR s, n , i : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >0 ) ET ( n <100 ) REPEAT
2) s ← 0 WRITE (' N = ' );
Pour i de 1 à ( n DIV 2 ) faire READLN (n);
si ( n MOD i =0 ) alors
Ecrire( i : 4 ) s← s + i UNTIL ( n > 0) AND ( n < 100) ;
fin si s:=0;
Fin pour FOR i:=1 TO ( n DIV 2 ) DO
IF ( n MOD i =0 ) THEN
3)si (s=n ) alors BEGIN
Ecrire ( n , ″ est un entier parfait ″ ) WRITE ( i:4 ) ;
Sinon s:=s+i;

Enseignant : AHMED BELHASSEN 75


Algorithmique et programmation

Ecrire ( n , ″ n''est pas un entier parfait ″ ) END;


Fin si IF (s=n ) THEN
4) Fin PARFAIT WRITELN ( n , ' est un entier parfait ')
ELSE
WRITELN ( n , ' n''est pas un entier parfait ');
END.

Exercice 14 :
Analyse du problème
Nom : JUMEAUX
Résultat = Affichage
Affichage= [ premier ← 0 ] pour j de 1 à 100 faire
s← 0
pour i de 2 à ( j DIV 2 ) faire
si( j MOD i =0 ) alors
s← s+i
Fin si
Fin pour
si (s=0 ) alors
si ( premier =j-2) alors
Ecrire ( premier , ″ et ″ , j)
Fin si
premier ← j
Fin si
Fin pour
Fin JUMEAUX
TDO
Objet Type/Nature
s, j , i , premier Entier

Algorithme Traduction en PASCAL


0) Début JUMEAUX PROGRAM JUMEAUX;
1) premier ← 0 USES WINCRT ;
pour j de 1 à 100 faire VAR s, j , i, premier : INTEGER ;
s← 0 BEGIN
pour i de 2 à ( j DIV 2 ) faire premier :=0;
si( j MOD i =0 ) alors FOR j:=1 TO 100 DO
s← s+i BEGIN
Fin si s:=0;
Fin pour FOR i:=2 TO ( j DIV 2 ) DO
si (s=0 ) alors BEGIN
si ( premier =j-2) alors IF ( j MOD i =0 ) THEN
Ecrire ( premier , ″ et ″ , j) s:=s+i ;
Fin si END;
premier ← j IF (s=0 ) THEN
Fin si BEGIN
Fin pour IF ( premier=j-2) THEN
2) Fin JUMEAUX WRITELN ( premier, ' et ' , j);
premier :=j;
END;
END;
END.

Enseignant : AHMED BELHASSEN 76


Algorithmique et programmation

Exercice 15 :
Analyse du problème
Nom : SOM_FACT
Résultat = Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty )
factx= [ factx ← 1 ] Pour i de x à 2 (pas = -1) faire
factx ← factx * i
Fin pour
facty= [ facty ← 1 ] Pour i de y à 2 (pas = -1) faire
facty ← facty * i
Fin pour
x ← n DIV 10
y ← n MOD 10
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n dans [ 2..50] )

Fin SOM_FACT
TDO
Objet Type/Nature
n , x , y , factx , facty , i Entier

Algorithme Traduction en PASCAL


0) Début SOM_FACT PROGRAM SOM_FACT ;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , x , y , factx , facty , i : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n dans [ 2..50]) REPEAT
2) x ← n DIV 10 WRITE (' N = ' );
3) y ← n MOD 10 READLN (n);
4) factx ← 1 UNTIL ( n IN [ 2..50] );
Pour i de x à 2 (pas = -1) faire y:=n MOD 10;
factx ← factx * i x:=n DIV 10;
Fin pour factx:=1;
5) facty ← 1 FOR i:=x DOWNTO 2 DO factx:=factx*i;
Pour i de y à 2 (pas = -1) faire facty:=1;
factx ← factx * i FOR i:=y DOWNTO 2 DO facty:=facty*i;
Fin pour WRITELN ( x , ' ! + ' ,y , ' ! =',factx+facty);
6) Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty ) END.
7) Fin SOM_FACT

Exercice 16 :
Analyse du problème
Nom : CHIFFRE
Résultat = Ecrire (″Le plus petit chiffre dans ″, n , ″est ″, petit , ″ et le nombre d’apparition = ″ , s )
petit= [y ← n , petit ← y MOD 10 ] Tant que ( y<>0 )faire
x ← y MOD 10
si ( petit > x ) alors
petit ← x
fin si
y ← y DIV 10
Fin tant que
s= [y ← n , s ← 0] Tant que ( y<>0 )faire

Enseignant : AHMED BELHASSEN 77


Algorithmique et programmation

x ← y MOD 10
si ( petit > x ) alors
s← s+1
fin si
y ← y DIV 10
Fin tant que
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >=100 )

Fin CHIFFRE
TDO
Objet Type/Nature
n , y , petit , x ,s Entier

Algorithme Traduction en PASCAL


0) Début CHIFFRE PROGRAM CHIFFRE;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , y , petit , x ,s : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n >=100 ) REPEAT
2) y ← n petit ← y MOD 10 WRITE ('N = ');
Tant que ( y<>0 )faire READLN(n);
x ← y MOD 10 UNTIL n >=100;
si ( petit > x ) alors y:=n;
petit ← x petit := y MOD 10;
fin si WHILE( y<>0) DO
y ← y DIV 10 BEGIN
Fin tant que x:=y MOD 10;
3) y ← n s ← 0 IF( petit > x ) THEN petit:=x;
Tant que ( y<>0 )faire y:=y DIV 10;
x ← y MOD 10 END;
si ( petit > x ) alors y:=n;
s ← s+1 s:=0;
fin si WHILE ( y <>0 ) DO
y ← y DIV 10 BEGIN
Fin tant que x:=y MOD 10;
4) Ecrire (″Le plus petit chiffre dans ″, n , ″ est ″, IF( x= petit ) THEN s:=s+1;
petit , ″ et le nombre d’apparition = ″ , s ) y:=y DIV 10;
5) Fin CHIFFRE END;
WRITELN ( 'Le plus petit chiffre dans ' , n , ' est '
,petit ,' et le nombre d''apparition = ',s );
END.

Exercice 17 :
Analyse du problème
Nom : TRIANGLE
Résultat = Affichage
Affichage= [ ch ← ″ ″ ] Pour i de 1 à n faire
ch ← ch + ″*″
Ecrire (ch)
Fin pour

Enseignant : AHMED BELHASSEN 78


Algorithmique et programmation

n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n >0 )
Fin TRIANGLE
TDO
Objet Type/Nature
n,i Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début TRIANGLE PROGRAM TRIANGLE;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n , i : INTEGER ;
Lire (n ) ch : STRING ;
Jusqu’à ( n > 0 ) BEGIN
2) ch ← ″ ″ REPEAT
Pour i de 1 à n faire WRITE ('N = ');
ch ← ch + ″*″ READLN(n);
Ecrire(ch) UNTIL n>0;
Fin pour ch:='';
3) Fin TRIANGLE FOR i:=1 TO n DO
BEGIN
ch:=ch+'*';
WRITELN(ch);
END;
END.

Exercice 18 :
Analyse du problème
Nom : LISTE_VERS_9
Résultat = Affichage
Affichage= [ ] Répéter
x ← n MOD 10
y ← n DIV 10
n ← ABS ( n - ( 10*x+y))
Ecrire (″ N = ″ )
Jusqu’à ( n = 9 )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
x ← n MOD 10
y ← n DIV 10
Jusqu’à ( n dans [10..99] ) ET ( x<>y)
Fin LISTE_VERS_9
TDO
Objet Type/Nature
x,y,n Entier

Algorithme Traduction en PASCAL


0) Début LISTE_VERS_9 PROGRAM LISTE_VERS_9;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR x,y,n : INTEGER ;
Lire (n ) BEGIN

Enseignant : AHMED BELHASSEN 79


Algorithmique et programmation

x ← n MOD 10 REPEAT
y ← n DIV 10 WRITE ('N = ');
Jusqu’à ( n dans [10..99] ) ET ( x<>y) READLN(n);
2) Répéter x:=n MOD 10;
x ← n MOD 10 y:=n DIV 10;
y ← n DIV 10 UNTIL (n IN [10..99]) AND ( x<>y);
n← ABS ( n - ( 10*x+y)) REPEAT
Ecrire (″ N = ″ ) x:=n MOD 10;
Jusqu’à ( n = 9 ) y:=n DIV 10;
3) Fin LISTE_VERS_9 n:=ABS ( n - ( 10*x+y));
WRITE ( n :4);
UNTIL n=9;
END.

Exercice 19 :
Analyse du problème
Nom : SYRACUSE
Résultat = Ecrire (″Le nombre de transformation est : ″, nb )
nb= [ nb ← 0 ]Répéter
si ( n MOD 2 = 0 ) alors
n ← n DIV 2
sinon n ← 3*n+1
fin si
Ecrire (n : 4 )
nb ← nb + 1
Jusqu’à ( n = 1 )
n= [ ] Répéter
n=donnée ( ″ N = ″ )
Jusqu’à ( n > 0)
Fin SYRACUSE
TDO
Objet Type/Nature
n,nb Entier

Algorithme Traduction en PASCAL


0) Début SYRACUSE PROGRAM SYRACUSE;
1) Répéter USES WINCRT ;
Ecrire (″ N = ″ ) VAR n,nb : INTEGER ;
Lire (n ) BEGIN
Jusqu’à ( n > 0 ) REPEAT
2) nb ← 0 WRITE ('N = ');
Répéter READLN(n);
si ( n MOD 2 = 0 ) alors UNTIL (n >0);
n ← n DIV 2 nb:=0;
sinon n ← 3*n+1 REPEAT
fin si IF ( n MOD 2=0 ) THEN
Ecrire (n :4 ) n:=n DIV 2
nb ← nb + 1 ELSE n:=3*n+1;
Jusqu’à ( n = 1 ) WRITE ( n :4);
3) Ecrire (″Le nombre de transformation est : ″, nb ) nb :=nb+1 ;

Enseignant : AHMED BELHASSEN 80


Algorithmique et programmation

4) Fin SYRACUSE UNTIL n=1;


WRITELN ('Le nombre de transformation est :',nb) ;
END.

Exercice 20 :
Analyse du problème
Nom : POSITION
Résultat = Ecrire (sch, ″ se trouve ″, n , ″ fois dans ″ ,ch )
n= [ l ← LONG(ch) , ls ← LONG(sch), n ← 0 ]
Pour i de 1 à l faire
j←1
Tant que( j<=l-ls+1 )ET(ch[i+j-1]=sch[j])faire
j ← j+1
Fin Tant que
Si j > ls alors
Ecrire ( ″ c’est trouvé à la position ″ ,i )
n ← n+1
Fin si
Fin pour
sch=donnée ( ″Donner la sous-chaine à trouver : ″ )
ch=donnée ( ″ Donner la chaine à tester : ″ )
Fin POSITION
TDO
Objet Type/Nature
i,j,n,l,ls Entier
ch,sch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début POSITION PROGRAM POSITION;
1) Ecrire (″Donner la chaine à tester :″ ) , Lire (ch ) USES WINCRT;
2) Ecrire (″Donner la sous-chaine à trouver :″ ) , VAR ch , sch : STRING;
Lire (sch ) i,j,n,l,ls: INTEGER;
3) l ← LONG(ch) , ls ← LONG(sch), n ← 0 BEGIN
Pour i de 1 à l faire WRITE('Donner la chaine à tester :');
j←1 READLN(ch);
Tant que( j<=l-ls+1 )ET(ch[i+j-1]=sch[j])faire WRITE('Donner la sous-chaine à trouver :');
j ← j+1 READLN(sch);
Fin Tant que l:=LENGTH(ch) ; ls:=LENGTH(sch);
Si j > ls alors n:=0;
Ecrire ( ″ c’est trouvé à la position ″ ,i ) FOR i:=1 TO l DO
n ← n+1 BEGIN
Fin si j:=1;
Fin pour WHILE ( j <=l-ls+1 ) AND (ch[i+j-1]=sch[j])
4) Ecrire (sch, ″ se trouve ″, n , ″ fois dans ″ ,ch ) DO j:=j+1;
5) Fin POSITION IF j>ls THEN
BEGIN
WRITELN('c''est trouvé à la position ',i);
n:=n+1;
END;
END;
WRITELN (sch , ' se trouve ',n, ' fois dans ' ,ch);
END.

Enseignant : AHMED BELHASSEN 81


Algorithmique et programmation

Exercice 21 :
Analyse du problème
Nom : POIDS
Résultat = Ecrire (″Le poids de mot ″, ch, ″ est ″ , p )
p= [ p ←0 ] Pour i de 1 à LONG (ch) faire
Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors
p ← p+(i *(ORD (ch[ i ])-96))
Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] alors
p ← p+(i *(ORD (ch[ i ])-64))
Fin si
Fin pour
ch=donnée ( ″ Donner la chaine à tester : ″ )
Fin POIDS
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début POIDS PROGRAM POIDS;
1) Ecrire (″Donner la chaine à tester :″ ) , Lire (ch ) USES WINCRT;
2) p ← 0 VAR i,p :INTEGER;
Pour i de 1 à LONG (ch) faire ch:STRING;
Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors BEGIN
p← p+(i *(ORD (ch[ i ])-96)) WRITE('Donner la chaine à tester :');
Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] alors READLN(ch); p:=0 ;
p← p+(i *(ORD (ch[ i ])-64)) FOR i:=1 TO LENGTH(ch) DO
Fin si IF ch[ i ] IN ['a','e','u','y','i','o'] THEN
Fin pour p:=p+(i *(ORD (ch[ i ])-96))
3) Ecrire (″Le poids de mot ″, ch, ″ est ″ , p ) ELSE IF ch[ i ] IN ['A','E','U','Y','I','O'] THEN
4) Fin POIDS p:=p+(i *(ORD (ch[ i ])-64));
WRITELN ('Le poid de mot ',ch,' est ',p);
END.

Exercice 22 :
Analyse du problème
Nom : CODAGE
Résultat = Ecrire (ch, ″ sera transformée en ″ , sch )
sch= [ sch ← ″ ″] Pour i de 1 à LONG (ch) faire
sch ← sch+CHR(ORD(ch[ i ])+2)
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin CODAGE
TDO
Objet Type/Nature
i Entier
ch ,sch Chaine de caractère

Enseignant : AHMED BELHASSEN 82


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début CODAGE PROGRAM CODAGE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch,sch :STRING;
Lire (ch ) i:INTEGER;
Jusqu’à ( ch <> ″ ″ ) BEGIN
2) sch ← ″ ″ REPEAT
Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
sch ← sch+CHR(ORD(ch[ i ])+2) READLN(ch);
Fin pour UNTIL ch<>'';
3) Ecrire (ch, ″ sera transformée en ″ , sch ) sch:='';
4) Fin CODAGE FOR i:=1 TO LENGTH(ch) DO
sch:=sch+CHR(ORD(ch[ i ])+2);
WRITELN (ch,' sera transformée en ',sch);
END.

Exercice 23 :
Analyse du problème
Nom : SOMME_CHIFFRE
Résultat = Ecrire (″La somme des chiffres de ″, ch,″est :″,p )
p= [ p ← 0 ] Pour i de 1 à LONG (ch) faire
si ORD (ch[ i ]) dans [48..57] alors
p ← p+(ORD(ch [ i ])-48)
Fin si
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ ) ET(ORD(ch[1])dans [65..90])
Fin SOMME_CHIFFRE
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début SOMME_CHIFFRE PROGRAM SOMME_CHIFFRE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING;
Lire (ch ) i, p :INTEGER;
Jusqu’à ( ch <> ″ ″ )ET(ORD(ch[1])dans [65..90]) BEGIN
2) p ← 0 REPEAT
Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
si ORD (ch[ i ]) dans [48..57] alors READLN(ch);
p ← p+(ORD(ch [ i ])-48) UNTIL (ch<>'')AND(ORD(ch[1]) IN [65..90]);
Fin si p:=0;
Fin pour FOR i:=1 TO LENGTH(ch) DO
3) Ecrire (″La somme des chiffres de ″, ch,″est :″,p ) IF ORD(ch[ i ]) IN [48..57] THEN
4) Fin SOMME_CHIFFRE p:=p+(ORD(ch[ i ])-48);
WRITELN (' La somme des chiffres de ', ch,' est : ',p);
END.

Enseignant : AHMED BELHASSEN 83


Algorithmique et programmation

Exercice 24 :
Analyse du problème
Nom : NOMBRE_VOYELLE
Résultat = Ecrire (″Le nombre des voyelles dans la chaine ″, ch , ″ est ″ , p )
p= [ p ←0 ] Pour i de 1 à LONG (ch) faire
Si ch [ i ] dans [″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] alors
p← p + 1
Fin si
Fin pour
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin NOMBRE_VOYELLE
TDO
Objet Type/Nature
i,p Entier
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début NOMBRE_VOYELLE PROGRAM NOMBRE_VOYELLE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING;
Lire (ch ) i,p :INTEGER;
Jusqu’à ( ch <> ″ ″ ) BEGIN
2) p ← 0 REPEAT
Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
Si ch [ i ] dans READLN(ch);
[″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] UNTIL (ch<>'');
alors p:=0;
p← p + 1 FOR i:=1 TO LENGTH(ch) DO
Fin si IF ch[ i ] IN ['a','A','e','E','u','U','y','Y','o','O','i','I']
Fin pour THEN p:=p+1;
3) Ecrire (″Le nombre des voyelles dans la chaine ″, WRITELN (' Le nombre des voyelles dans la chaine ',
ch, ″ est ″ , p ) ch,' est : ',p);
4) Fin NOMBRE_VOYELLE END.

Exercice 25 :
Analyse du problème
Nom : LATIN
Résultat = Ecrire (ch, ″ en latin est : ″ , ch2 )
ch2= [ ch1 ← ″ ″ ch2 ← ″ ″ ] Tant que LONG(ch) <>0 faire
p ←pos ( ″ ″,ch)
Si p<>0 alors
ch1← SOUS_CHAINE(ch,1,p-1)
ch1← ch1+ch1[1]+″us″
EFFACE (ch1,1,1)
EFFACE (ch,1,p)
Sinon si LONG(ch) > 0 alors
ch1← ch+ch[1]+″us″;
EFFACE(ch1,1,1);
EFFACE(ch,1,LONG(ch));

Enseignant : AHMED BELHASSEN 84


Algorithmique et programmation

Fin si
ch2 ← ch2+ch1;
Fin tant que
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( ch <> ″ ″ )
Fin LATIN
TDO
Objet Type/Nature
p Entier
ch ,ch1,ch2 Chaine de caractère

Algorithme Traduction en PASCAL


0) Début LATIN PROGRAM LATIN;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch,ch1,ch2:STRING;
Lire (ch ) p:INTEGER;
Jusqu’à ( ch <> ″ ″ ) BEGIN
2) ch1 ← ″ ″ ch2 ← ″ ″ REPEAT
Tant que LONG(ch) <>0 faire WRITE ('Donner la chaine à tester :');
p ←pos ( ″ ″,ch) READLN(ch);
si p<>0 alors UNTIL (ch<>'');
ch1← SOUS_CHAINE(ch,1,p-1) ch1:=''; ch2:='';
ch1← ch1+ch1[1]+″us″ WHILE (LENGTH(ch)<>0) DO
EFFACE (ch1,1,1) BEGIN
EFFACE (ch,1,p) p:=POS(' ',ch);
Sinon si LONG(ch) > 0 alors IF(p<>0)THEN
ch1← ch+ch[1]+″us″; BEGIN
EFFACE(ch1,1,1); ch1:=COPY(ch,1,p-1);
EFFACE(ch,1,LONG(ch)); ch1:=ch1+ch1[1]+'us ';
Fin si DELETE(ch1,1,1);
ch2 ← ch2+ch1; DELETE (ch,1,p);
Fin tant que END
ELSE IF(LENGTH(ch)>0) THEN
3) Ecrire (ch, ″ en latin est : ″ , ch2 ) BEGIN
4) Fin LATIN ch1:=ch+ch[1]+'us ';
DELETE (ch1,1,1);
DELETE (ch,1,LENGTH(ch));
END;
ch2:=ch2+ch1;
END;
WRITELN (ch,' en latin est : ',ch2);
END.

Exercice 26 :
Analyse du problème
Nom : RENVERSE
Résultat = Ecrire (″La chaine renversée est : ″ , ch1 )
ch1= [ ] Tant que (pos(″ ″,ch) <> 0) faire
p ← pos(″ ″,ch)
ch1← SOUS_CHAINE(ch,1,p-1)+ ″ ″+ ch1
EFFACE (ch,1,p)

Enseignant : AHMED BELHASSEN 85


Algorithmique et programmation

Fin tant que


ch1 ← ch + ″ ″ + ch1
ch=[ ] Répéter
ch=donnée ( ″ Donner la chaine à tester : ″ )
Jusqu’à ( MAJUS(ch [1] ) dans [ ″A″..″Z″]) ET(pos(″ ″,ch)= 0) ET (ch[ LONG(ch)] <> ' '))
Fin RENVERSE
TDO
Objet Type/Nature
p Entier
ch ,ch1 Chaine de caractère

Algorithme Traduction en PASCAL


0) Début RENVERSE PROGRAM RENVERSE;
1) Répéter USES WINCRT;
Ecrire (″Donner la chaine à tester :″ ) VAR ch,ch1:STRING;
Lire (ch ) p:INTEGER;
Jusqu’à ( MAJUS(ch [1] ) dans [ ″A″..″Z″])ET BEGIN
(pos(″ ″,ch)= 0) ET (ch[ LONG(ch)] <> ' ')) REPEAT
2) Tant que (POS (″ ″,ch) <> 0) faire WRITE ('Donner la chaine à tester :');
p ← POS (″ ″,ch) READLN(ch);
ch1← SOUS_CHAINE(ch,1,p-1)+ ″ ″+ ch1 UNTIL ((UPCASE (ch[1]) IN ['A'..'Z']) AND (POS('
EFFACE (ch,1,p) ',ch)= 0) AND (ch[ LENGTH(ch)] <> ' '));
Fin tant que WHILE (POS (' ',ch) <> 0) DO
3) ch1 ← ch + ″ ″ + ch1 BEGIN
4) Ecrire (″La chaine renversée est : ″ , ch1 ) p:= POS (' ',ch);
5) Fin RENVERSE ch1:= COPY(ch,1,p-1)+ ' ' + ch1;
DELETE(ch,1,p);
END;
ch1:= ch + ' ' + ch1;
WRITELN ('La chaine renversée est : ' , ch1);
END.

Exercice 27 :
Analyse du problème
Nom : MOYENNE
Résultat = Ecrire (″La moyenne est : ″ , moy :8 :3 )
moy ← total/n
total= [ total ← 0 ] pour i de 1 à n faire
note=donnée ( i ,″ ième note ? ″)
total ←total+note
Fin pour
n=donnée (″Nombre de notes à entrer :″)
Fin MOYENNE
TDO
Objet Type/Nature
n,i Entier
note , total , moy Réel

Algorithme Traduction en PASCAL


0) Début MOYENNE PROGRAM MOYENNE;
1) Ecrire (″Nombre de notes à entrer :″ ) , Lire (n) USES WINCRT;
2) total ← 0 VAR n , i:INTEGER;

Enseignant : AHMED BELHASSEN 86


Algorithmique et programmation

pour i de 1 à n faire note , total , moy :REAL ;


Ecrire ( i ,″ième note ? ″) BEGIN
Lire (note) WRITE ('Nombre de notes à entrer :');
total ←total+note READLN(n);
fin pour total :=0;
3) moy ← total/n FOR i:=1 TO n DO
4) Ecrire (″La moyenne est : ″ , moy :8 :3 ) BEGIN
5) Fin MOYENNE WRITE (i,' ième note ? ' );
READLN(note);
total:=total+note;
END;
moy:=total/n;
WRITELN ('La moyenne est :' , moy:8:3);
END.

Exercice 28 :
Analyse du problème
Nom : MIN_MAX
Résultat = Ecrire (″MIN =″ , min, ″MAX=″,max )
( min , max )= [ max ← t[1] , min ←t[1] ] pour i de 1 à n faire
si t[ i ]< min alors
min ← t[i]
fin si
si t[ i ]> min alors
max ← t[i]
fin si
fin pour
t=[ ] pour i de 1 à n faire
t[ i ] =donnée (″t[ ″, i , ″]=″ )
Fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ]
Fin MIN_MAX
TDO
Objet Type/Nature
n , i , min , max Entier
t Tableau de 100 entiers

Algorithme Traduction en PASCAL


0) Début MIN_MAX PROGRAM MIN_MAX ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR n , i , min , max :INTEGER;
Lire (n) t:ARRAY[1..100] OF INTEGER;
Jusqu’à n dans [ 2..100 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITE ('Donner la taille du tableau :');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..100];
3) max ← t[1] min ←t[1] FOR i:=1 TO n DO
pour i de 1 à n faire BEGIN
si t[ i ]< min alors WRITE('t[',i,']=');

Enseignant : AHMED BELHASSEN 87


Algorithmique et programmation

min ← t[i] READLN(t[i]);


fin si END;
si t[ i ]> min alors min:=t[1] ; max:=t[1];
max ← t[i] FOR i:=1 TO n DO
fin si BEGIN
fin pour IF t[i] < min THEN min:=t[i];
4) Ecrire (″MIN =″ , min, ″MAX=″,max ) IF t[i] > max THEN max:=t[i];
5) Fin MIN_MAX END;
WRITELN('MIN = ' , min,' MAX = ',max);
END.

Exercice 29 :
Analyse du problème
Nom : OCCURENCE
Résultat = Ecrire (″Le nombre d''ocurrence de ″ , c, ″dans T ″,nbr)
nbr = [ nbr ← 0] pour i de 1 à n faire
ch ← t[ i ]
l ← LONG (ch)
pour j de 1 à l faire
si ch[ j ] = c alors
nbr ← nbr + 1
fin si
fin pour
fin pour
c=donnée (″Donner le caractère à chercher : ″)
t=[ ] pour i de 1 à n faire
t[ i ] =donnée (″t[ ″, i , ″]=″ )
Fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ]
Fin OCCURENCE
TDO
Objet Type/Nature
n , i , j , nbr , l Entier
t Tableau de 100 entiers
c Caractère
ch Chaine de caractère

Algorithme Traduction en PASCAL


0) Début OCCURENCE PROGRAM OCCURENCE ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR n , i , j , nbr , l :INTEGER;
Lire (n) ch : STRING;
Jusqu’à n dans [ 2..100 ] c: CHAR;
2) pour i de 1 à n faire t : ARRAY[1..100] OF STRING ;
Ecrire ( ″t[ ″, i , ″]=″ ) BEGIN
Lire (t[i]) REPEAT
fin pour WRITE ('Donner la taille du tableau :');
3) Ecrire (″Donner le caractère à chercher : ″ ) READLN(n);
Lire (c) UNTIL n IN [2..100];
4) nbr ← 0 FOR i:=1 TO n DO

Enseignant : AHMED BELHASSEN 88


Algorithmique et programmation

pour i de 1 à n faire BEGIN


ch ← t[ i ] WRITE('t[',i,']=');
l ← LONG (ch) READLN(t[i]);
pour j de 1 à l faire END;
si ch[ j ] = c alors WRITE ('Donner le caractère à chercher : ');
nbr ← nbr + 1 READLN(c);
fin si nbr:=0;
fin pour FOR i:=1 TO n DO
fin pour BEGIN
5) Ecrire (″Le nombre d''ocurrence de ″ , c, ″dans T ch:= t[i] ; l:=LENGTH(ch);
″,nbr) FOR j :=1 TO l DO
6) Fin OCCURENCE IF ch[j]=c THEN
nbr:=nbr+1;
END;
WRITELN ('Le nombre d''ocurrence de ' , c ,' dans T
=',nbr);
END.

Exercice 30 :
Analyse du problème
Nom : TABLE_PYTHAGORE
Résultat = Affichage
Affichage = [ ] pour i de 1 à nbre_lig_col faire
pour j de 1 à nbre_lig_col faire
Ecrire (i*j:6)
fin pour
fin pour
nbre_lig_col=donnée (″Donner le nombre de lignes(colonnes) :″)
Ecrire (″ Bonjour . Je calcule une table de pythagore . Cette table est carrée.″ )
Fin TABLE_PYTHAGORE
TDO
Objet Type/Nature
i , j , nbr_lig_col Entier

Algorithme Traduction en PASCAL


0) Début TABLE_PYTHAGORE PROGRAM TABLE_PYTHAGORE;
1) Ecrire (″ Bonjour . Je calcule une table de USES WINCRT;
pythagore.Cette table est carrée.″ ) VAR nbre_lig_col , i ,j :INTEGER;
2) Ecrire(″Donner le nombre de lignes(colonnes):″ ) BEGIN
Lire (nbre_lig_col) WRITELN ('Bonjour . Je calcule une table de
3) pour i de 1 à nbre_lig_col faire pythagore.Cette table est carrée.');
pour j de 1 à nbre_lig_col faire WRITE ('Donner le nombre de lignes(colonnes) :');
Ecrire (i*j:6) READLN(nbre_lig_col);
fin pour WRITELN;
fin pour FOR i:=1 TO nbre_lig_col DO
4) Fin TABLE_PYTHAGORE BEGIN
FOR j :=1 TO nbre_lig_col DO
WRITE(i*j:6);
WRITELN;
WRITELN;
END;
END.

Enseignant : AHMED BELHASSEN 89


Algorithmique et programmation

Exercice 31 :
a) Cet algorithme permet de :
- Remplir un tableau T de N chaine de caractère, ensuite lire une chaine S.
- Chercher la première position du caractère S dans T.
- Si S existe, il affiche le message ″existe à la position ″ et sa première position dans T , sinon il affiche le
message ″n’existe pas″ .
b) Exemple : S=″Ecran″ Pos ← 0

T[1] <>S Pos=0 i=1 RAM Souris Unité Ecran CD

T[2] <>S Pos=0 i=2 RAM Souris Unité Ecran CD

T[3] <>S Pos=0 i=3 RAM Souris Unité Ecran CD

T[4] = S Pos=4 i=4 RAM Souris Unité Ecran CD

Solution avec Répéter…jusqu’à : Solution avec Tant que…Faire :


Pos ← 0, i ← 0 Pos ← 0, i ← 1
Répéter Tant que ( i<=N) ET ( T[ i ]<>S) Faire
i ← i+1 i ← i+1
Jusqu’à ( i >N) OU ( T[ i ]=S) Fin Tant que
Si i<=N alors Si i<=N alors
Pos ← i Pos ← i
Fin si Fin si

Exercice 32 :
Analyse du problème
Nom : LOGIQUE
Résultat = Affichage
Affichage = [ ] Ecrire (″Affichage de la fonction XOR ″ )
pour B de Faux à Vrai faire
Pour C de Faux à Vrai faire
Ecrire (B,″XOR″,C,″=″,B OUEX C)
fin pour
fin pour
Ecrire (″Affichage de la fonction OR″ )
pour B de Faux à Vrai faire
Pour C de Faux à Vrai faire
Ecrire (B,″OR ″,C,″ =″,B OU C)
fin pour
fin pour
Ecrire (″Affichage de la fonction AND ″ )
pour B de Faux à Vrai faire
Pour C de Faux à Vrai faire
Ecrire (B,″AND ″,C,″ =″,B ET C)
fin pour
fin pour
Fin LOGIQUE
TDO
Objet Type/Nature
B,C Booléen

Enseignant : AHMED BELHASSEN 90


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début LOGIQUE PROGRAM LOGIQUE;
1) Ecrire (″Affichage de la fonction AND ″ ) USES WINCRT ;
pour B de Faux à Vrai faire VAR B,C : BOOLEAN ;
Pour C de Faux à Vrai faire BEGIN
Ecrire (B,″AND ″,C,″ =″,B ET C) WRITELN ('Affichage de la fonction AND ');
fin pour FOR B:=FALSE TO TRUE DO
fin pour FOR C:=FALSE TO TRUE DO
2) Ecrire (″Affichage de la fonction OR″ ) WRITELN(B,' AND ',C,' = ',B AND C);
pour B de Faux à Vrai faire WRITELN ('Affichage de la fonction OR ');
Pour C de Faux à Vrai faire FOR B:=FALSE TO TRUE DO
Ecrire (B,″OR ″,C,″ =″,B OU C) FOR C:=FALSE TO TRUE DO
fin pour WRITELN(B,' OR ',C,' = ',B OR C);
fin pour WRITELN ('Affichage de la fonction XOR ');
3) Ecrire (″Affichage de la fonction XOR ″ ) FOR B:=FALSE TO TRUE DO
pour B de Faux à Vrai faire FOR C:=FALSE TO TRUE DO
Pour C de Faux à Vrai faire WRITELN(B,' XOR ',C,' = ',B XOR C);
Ecrire (B,″XOR″,C,″=″,B OUEX C) END.
fin pour
fin pour
4) Fin LOGIQUE

Exercice 33 :
Analyse du problème
Nom : OCCURENCE_X
Résultat = Ecrire (″Le nombre d''occurence de ″, x ,″est ″ ,s )
s= [ s←0 ] pour i de 1 à n faire
si(t[ i ] =x) alors
s ← s+1
fin si
fin pour
Dernier=[ ] si(t[ i ] =x) alors
Ecrire (″la dernière occurrence de″,x,″est à la position ″ ,i )
Sinon Ecrire (x,″ne figure pas dans T″ )
Fin si
i=[ i ← n+1] Répéter
i ← i-1
Jusqu’à ( i=0) OU (t[ i ]=x)
Premier=[ ] si(t[ i ] =x) alors
Ecrire (″la première occurrence de″,x,″est à la position ″ ,i )
Sinon Ecrire (x,″ne figure pas dans T″ )
Fin si
i=[ i ← 0] Répéter
i ← i+1
Jusqu’à ( i=n) OU (t[ i ]=x)
x=donnée (″X=″)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)

Enseignant : AHMED BELHASSEN 91


Algorithmique et programmation

Jusqu’à n dans [ 2..50 ]


Fin OCCURENCE_X
TDO
Objet Type/Nature
n,x,s,i Entier
t Tableau de 50 entiers

Algorithme Traduction en PASCAL


0) Début OCCURENCE_X PROGRAM OCCURENCE_X;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,x,s,i :INTEGER ;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..50] ;
3) Ecrire ( ″X=″ ) FOR i:=1 TO n DO
Lire (x) BEGIN
4) i ← 0 WRITE('t[',i,']=');
Répéter READLN(t[i]);
i ← i+1 END;
Jusqu’à ( i=n) OU (t[ i ]=x) WRITELN('X=');
5) si(t[ i ] =x) alors READLN(x);
Ecrire (″la première occurrence de″,x,″est à la i:=0;
position ″ ,i ) REPEAT
Sinon Ecrire (x ,″ne figure pas dans T″ ) i:=i+1;
Fin si UNTIL ( i=n) OR (t[ i ] = x);
6) i ← n+1 IF ( t[i] = x ) THEN
Répéter WRITELN (' la première occurrence de ', x , ' est à
i ← i-1 la position ' ,i )
Jusqu’à ( i=0) OU (t[ i ]=x) ELSE
7) si(t[ i ] =x) alors WRITELN ( x ,' ne figure pas dans T ');
Ecrire (″la dernière occurrence de″,x,″est à la i:=n+1;
position ″ ,i ) REPEAT
Sinon Ecrire (x,″ne figure pas dans T″ ) i:=i-1;
Fin si UNTIL ( i=0) OR ( t[ i ] = x );
8) s←0 IF ( t[i] = x) THEN
pour i de 1 à n faire WRITELN (' la dernière occurrence de ', x , ' est à
si(t[ i ] =x) alors la position ' ,i )
s ← s+1 ELSE
fin si WRITELN ( x ,' ne figure pas dans T ');
fin pour s:=0;
9) Ecrire (″Le nombre d''occurence de ″,x,″est ″ ,s ) FOR i:=1 TO n DO
10) Fin OCCURENCE_X IF ( t[i]=x) THEN s:=s+1;
WRITELN(' Le nombre d''occurence de ' , x , ' est
' , s);
END.

Enseignant : AHMED BELHASSEN 92


Algorithmique et programmation

Exercice 34 :
Analyse du problème
Nom : EXISTE
Résultat = existance
existance =[ ] si(t[ i ] =e) alors
Ecrire (e, ″ existe dans T à la position ″ , i )
Sinon Ecrire (e, ″ n''existe pas dans T ″ )
Fin si
i=[ i ← 0] Répéter
i ← i+1
Jusqu’à ( i=n) OU (t[ i ]=e)
e=donnée (″E=″)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..50 ]
Fin EXISTE
TDO
Objet Type/Nature
n,e,i Entier
t Tableau de 50 entiers

Algorithme Traduction en PASCAL


0) Début EXISTE PROGRAM EXISTE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,e,i: INTEGER;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..50] ;
3) Ecrire ( ″E=″ ) FOR i:=1 TO n DO
Lire (e) BEGIN
4) i ← 0 WRITE('t[',i,']=');
Répéter READLN(t[i]);
i ← i+1 END;
Jusqu’à ( i=n) OU (t[ i ]=e) WRITELN('E =');
5) si(t[ i ] =e) alors READLN(e);
Ecrire (e, ″ existe dans T à la position ″ , i ) i:=0;
Sinon Ecrire (e, ″ n''existe pas dans T ″ ) REPEAT
Fin si i:=i+1;
6) Fin EXISTE UNTIL ( i=n) OR ( t[i] = e);
IF ( t[i] = e ) THEN
WRITELN ( e, ' existe dans T à la position ' ,i )
ELSE
WRITELN ( e ,' n''existe pas dans T ');
END.

Enseignant : AHMED BELHASSEN 93


Algorithmique et programmation

Exercice 35 :
Analyse du problème
Nom : SYMETRIE
Résultat = Aff_sym
Aff_sym =[ ] pour i de 1 à n faire
a← t[i] DIV 100
b← t[i] MOD10
si ( a=b) alors
Ecrire (t[i] )
Fin si
Fin pour
t=[ ] pour i de 1 à n faire
Répéter
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
Jusqu’à ( t[i]>=100) ET ( t[i]<=999)
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..50 ]
Fin SYMETRIE
TDO
Objet Type/Nature
n,a,b,i Entier
t Tableau de 50 entiers

Algorithme Traduction en PASCAL


0) Début SYMETRIE PROGRAM SYMETRIE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t :ARRAY[1..50] OF INTEGER;
Lire (n) n,i,a,b:INTEGER;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Répéter WRITELN ('Donner la taille du tableau');
Ecrire ( ″t[ ″, i , ″]=″ ) READLN(n);
Lire (t[i]) UNTIL n IN [2..50] ;
Jusqu’à ( t[i]>=100) ET ( t[i]<=999) FOR i:=1 TO n DO
fin pour BEGIN
3) pour i de 1 à n faire REPEAT
a← t[i] DIV 100 WRITE('t[',i,']=');
b← t[i] MOD10 READLN(t[i]);
si ( a=b) alors UNTIL (t[i]>=100) AND (t[i]<=999);
Ecrire (t[i] ) END;
Fin si WRITE ('Les nombres symétriques sont : ') ;
Fin pour FOR i:=1 TO n DO
4) Fin SYMETRIE BEGIN
a:=t[i] DIV 100;
b:=t[i] MOD 10;
IF (a=b) THEN WRITE(t[i]:4);
END; END.

Enseignant : AHMED BELHASSEN 94


Algorithmique et programmation

Exercice 36 :
Analyse du problème
Nom : PARITE
Résultat = Affichage
Affichage =[ ] pour i de 1 à j faire
Ecrire( ″tp[ ″, i , ″]=″,tp[ i ] )
Fin pour
pour i de 1 à k faire
Ecrire( ″ti[ ″, i , ″]=″,ti[ i ] )
Fin pour
(tp , ti)= [ j ← 0 , k ← 0 ] pour i de 1 à n faire
si ( t[i] MOD 2 =0) alors
j ← j +1
tp[ j ] ← t[ i ]
sinon
k ← k +1
ti[ k ] ← t[ i ]
fin si
Fin pour
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..100 ] Fin PARITE
TDO
Objet Type/Nature
n,i,j,k Entier
t , tp , ti Tableau de 100 entiers

Algorithme Traduction en PASCAL


0) Début PARITE PROGRAM PARITE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t,tp,ti : ARRAY[1..100] OF INTEGER;
Lire (n) n,i,j,k : INTEGER;
Jusqu’à n dans [ 2..100 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..100] ;
3) j ← 0 k ← 0 FOR i:=1 TO n DO
pour i de 1 à n faire BEGIN
si ( t[i] MOD 2 =0) alors WRITE('t[',i,']=');
j ← j +1 READLN(t[i]);
tp[ j ] ← t[ i ] END;
sinon j:=0; k:=0;
k ← k +1 FOR i:=1 TO n DO
ti[ k ] ← t[ i ] BEGIN
fin si IF (t[i] MOD 2 =0)THEN
Fin pour BEGIN
4) pour i de 1 à j faire j:=j+1;
Ecrire( ″tp[ ″, i , ″]=″,tp[ i ] ) tp[j]:=t[i];

Enseignant : AHMED BELHASSEN 95


Algorithmique et programmation

Fin pour END


5) pour i de 1 à k faire ELSE
Ecrire( ″ti[ ″, i , ″]=″,ti[ i ] ) BEGIN
Fin pour k:=k+1;
6) Fin PARITE ti[k]:=t[i];
END;
END;
WRITELN ;
FOR i:=1 TO j DO WRITELN('tp[',i,']=',tp[i]);
WRITELN ;
FOR i:=1 TO k DO WRITELN('ti[',i,']=',ti[i]);
END.

Exercice 37 :
Analyse du problème
Nom : TRANSFERT
Résultat = Affichage
Affichage =[ ] pour i de 1 à n faire
Ecrire( ″p[ ″, i , ″]=″,p[ i ] )
Fin pour
p= [ j ← n , k ← 1 ] pour i de 1 à n faire
si ( i MOD 2 <>0) alors
p[ j ] ← t[ i ]
j ← j-1
sinon
p[ k ] ← t[ i ]
k ← k +1
fin si
Fin pour
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à ( n MOD 2 <>0)
Fin TRANSFERT
TDO
Objet Type/Nature
n,i,j,k Entier
t,p Tableau de 100 entiers

Algorithme Traduction en PASCAL


0) Début TRANSFERT PROGRAM TRANSFERT;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t ,p :ARRAY[1..100] OF INTEGER;
Lire (n) n,i,j,k : INTEGER;
Jusqu’à ( n MOD 2 <>0) BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL ( n MOD 2 <>0);
3) j ← n k ← 1 FOR i:=1 TO n DO

Enseignant : AHMED BELHASSEN 96


Algorithmique et programmation

pour i de 1 à n faire BEGIN


si ( i MOD 2 <>0) alors WRITE('t[',i,']=');
p[ j ] ← t[ i ] READLN(t[i]);
j←j-1 END;
sinon j:=n; k:=1;
p[ k ] ← t[ i ] FOR i:=1 TO n DO
k ← k +1 BEGIN
fin si IF (i MOD 2 <>0)THEN
Fin pour BEGIN
4) pour i de 1 à n faire p[j]:=t[i];
Ecrire( ″p[ ″, i , ″]=″,p[ i ] ) j:=j-1;
Fin pour END
5) Fin TRANSFERT ELSE
BEGIN
p[k]:=t[i];
k:=k+1;
END;
END;
WRITELN ;
FOR i:=1 TO n DO WRITELN('p[',i,']=',p[i]);
END.

Exercice 38 :
Analyse du problème
Nom : HAMMING
Résultat = Ecrire ( ″La distance de hamming est égale à : ″,dh)
dh =[ dh← 0 ] pour i de 1 à n faire
si ( t1[i]<>t2[i]) alors
dh ← dh+1
Fin si
Fin pour
t2= [x ← n2 i ← 16 ] Répéter
t2[ i ] ← x MOD 2
x ← x DIV 2
i ← i -1
Jusqu’à ( i < 1) OU ( x=0)
t1= [x ← n1 i ← 16 ] Répéter
t1[ i ] ← x MOD 2
x ← x DIV 2
i ← i -1
Jusqu’à ( i < 1) OU ( x=0)
(t1,t2)=pour i de 1 à 16 faire
t1[i] ← 0
t2[i] ← 0
fin pour
n1=donnée (″N1=″)
n2=donnée (″N2=″)
Fin HAMMING
TDO
Objet Type/Nature
n1 , i , x , n2 , dh Entier
t1 , t2 Tableau de 100 entiers

Enseignant : AHMED BELHASSEN 97


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début HAMMING PROGRAM HAMMING;
1) Ecrire (″N1=″ ) , Lire (n1) USES WINCRT;
2) Ecrire (″N2=″ ) , Lire (n2) VAR t1,t2:ARRAY[1..16] OF INTEGER;
3) pour i de 1 à 16 faire n1,i,x,n2,dh:INTEGER;
t1[i] ← 0 BEGIN
t2[i] ← 0 WRITE('N1=');
fin pour READLN(n1);
4) x ← n1 i ← 16 WRITE('N2=');
Répéter READLN(n2);
t1[ i ] ← x MOD 2 FOR i:=1 TO 16 DO
x ← x DIV 2 BEGIN
i ← i -1 t1[i]:=0; t2[i]:=0;
Jusqu’à ( i < 1) OU ( x=0) END;
5) x ← n2 i ← 16 x:=n1;
Répéter i:=16;
t2[ i ] ← x MOD 2 REPEAT
x ← x DIV 2 t1[i]:=x MOD 2 ;
i ← i -1 x:=x DIV 2;
Jusqu’à ( i < 1) OU ( x=0) i:=i-1;
6) dh← 0 UNTIL ( i < 1) OR ( x=0);
pour i de 1 à n faire WRITELN (n1 , ' en binaire est égal : ');
si ( t1[i]<>t2[i]) alors FOR i:=1 TO 16 DO WRITE(t1[i]:4);
dh ← dh+1 WRITELN;
Fin si x:=n2;
Fin pour i:=16;
7) Ecrire ( ″La distance de hamming est égale à : REPEAT
″,dh) t2[i]:=x MOD 2 ;
8) Fin HAMMING x:=x DIV 2;
i:=i-1;
UNTIL ( i < 1) OR ( x=0);
WRITELN (n2 , ' en binaire est égal : ');
FOR i:=1 TO 16 DO WRITE(t2[i]:4);
WRITELN; dh:=0;
FOR i:=1 TO 16 DO IF ( t1[i]<>t2[i]) THEN
dh:=dh+1;
WRITELN ('La distance de hamming est égale à :
',dh);
END.

Exercice 39 :
Analyse du problème
Nom : AFFICHE_TABLEAU
Résultat = Affichage
Affichage =[ ] pour i de 1 à n faire
Ecrire ( SOUS_CHAINE(t[i],1,i) )
Fin pour
t=[ ] pour i de 1 à n faire
Répéter
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
Jusqu’à ( LONG(t[i])>=i )

Enseignant : AHMED BELHASSEN 98


Algorithmique et programmation

fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..20 ]
Fin AFFICHE_TABLEAU
TDO
Objet Type/Nature
n,i Entier
t Tableau de 20 chaine
de caractère

Algorithme Traduction en PASCAL


0) Début AFFICHE_TABLEAU PROGRAM AFFICHE_TABLEAU;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t: ARRAY[1..20]OF STRING ;
Lire (n) n,i: INTEGER;
Jusqu’à n dans [ 2..20 ] BEGIN
2) pour i de 1 à n faire REPEAT
Répéter WRITELN ('Donner la taille du tableau');
Ecrire ( ″t[ ″, i , ″]=″ ) READLN(n);
Lire (t[i]) UNTIL n IN [2..20] ;
Jusqu’à ( LONG(t[i])>=i ) FOR i:=1 TO n DO
fin pour BEGIN
3) pour i de 1 à n faire REPEAT
Ecrire (SOUS_CHAINE(t[i],1,i) ) WRITE('t[',i,']=');
Fin pour READLN(t[i]);
4) Fin AFFICHE_TABLEAU UNTIL LENGTH(t[i])>=i ;
END;
FOR i:=1 TO n DO WRITELN(COPY(t[i],1,i));
END.
Exercice 40 :
Analyse du problème
Nom : PRODUIT_SCALAIRE
Résultat = Ecrire ( ″ Le produit scalaire est égale à ″,s )
s =[ s ← 0 ] pour i de 1 à n faire
s ← s+a[ i ]*b[ i ]
Fin pour
b=[ ] pour i de 1 à n faire
b[ i ]=donnée( ″b[ ″, i , ″]=″ )
fin pour
a=[ ] pour i de 1 à n faire
a[ i ]=donnée( ″a[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 5..50 ]
Fin PRODUIT_SCALAIRE
TDO
Objet Type/Nature
n,i Entier
a,b Tableau de 50 entiers
s Entier long

Enseignant : AHMED BELHASSEN 99


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début PRODUIT_SCALAIRE PROGRAM PRODUIT_SCALAIRE;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR a,b :ARRAY[1..50]OF INTEGER;
Lire (n) n,i :INTEGER;
Jusqu’à n dans [ 5..50 ] s :LONGINT;
2) pour i de 1 à n faire BEGIN
Ecrire (″a[ ″, i , ″]=″ ) REPEAT
Lire (a[i]) WRITELN ('Donner la taille du tableau');
fin pour READLN(n);
3) pour i de 1 à n faire UNTIL n IN [5..50] ;
Ecrire (″b[ ″, i , ″]=″ ) FOR i:=1 TO n DO
Lire (b[i]) BEGIN
fin pour WRITE ('a[',i,']=');
4) s ← 0 READLN(a[i]);
pour i de 1 à n faire END;
s ← s+a[ i ]*b[ i ] WRITELN;
Fin pour FOR i:=1 TO n DO
5) Ecrire (″ Le produit scalaire est égale à ″,s ) BEGIN
6) Fin PRODUIT_SCALAIRE WRITE ('b[',i,']=');
READLN(b[i]);
END;
s:=0;
FOR i:=1 TO n DO s:=s+a[i]*b[i];
WRITELN (' Le produit scalaire est égale à ' , s);
END.

Exercice 41 :
Analyse du problème
Nom : NB_SEQ
Résultat = Ecrire ( ″ Le nombre de séquence = ″,nb )
nb =[ nb ← 0 , i ← 1 ] Répéter
Ecrire (t[i])
i ←i+1
nb ← nb + 1
Tant que (i<=n) ET (t[i]>t[i-1]) faire
Ecrire ( ″,″,t[i])
i ←i+1
Fin tant que
Jusqu’à (i>n)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 2..50 ]
Fin NB_SEQ
TDO
Objet Type/Nature
n , nb , i Entier
t Tableau de 50 entiers

Enseignant : AHMED BELHASSEN 100


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début NB_SEQ PROGRAM NB_SEQ;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,nb,i:INTEGER;
Jusqu’à n dans [ 2..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire (″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..50] ;
3) nb ← 0 , i ← 1 FOR i:=1 TO n DO
Répéter BEGIN
Ecrire (t[i]) WRITE('t[',i,']=');
i ←i+1 READLN(t[i]);
nb ← nb + 1 END; WRITELN;
Tant que (i<=n) ET (t[i]>t[i-1]) faire i:=1; nb:=0;
Ecrire ( ″,″,t[i]) REPEAT
i ←i+1 WRITE(t[i]); i:=i+1; nb:=nb+1;
Fin tant que WHILE(i<=n) AND (t[i]>t[i-1]) DO
Jusqu’à (i>n) BEGIN
4) Ecrire ( ″ Le nombre de séquence = ″,nb ) WRITE(',',t[i]);
5) Fin NB_SEQ i:=i+1;
END; WRITELN;
UNTIL(i>n);
WRITELN ('Le nombre de séquence = ',nb);
END.
Exercice 42 :
Analyse du problème
Nom : ZERO
Résultat = Affichage
Affichage=[ ] pour i de 1 à n faire
Ecrire (t[i]:4)
fin pour
t=[ m ← n , i ← 1 ] Répéter
si(t[i] = 0) alors
pour j de i à m-1 faire
t[j] ← t[j+1]
fin pour
t[m] ← 0
m ← m-1
sinon
i ← i+1
fin si
Jusqu’à (i>m)
t=[ ] pour i de 1 à n faire
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour
n=[ ] Répéter
n=donnée (″Donner la taille du tableau :″)
Jusqu’à n dans [ 5..50 ]
Fin ZERO

Enseignant : AHMED BELHASSEN 101


Algorithmique et programmation

TDO
Objet Type/Nature
n,m,i,j Entier
t Tableau de 50 entiers

Algorithme Traduction en PASCAL


0) Début ZERO PROGRAM ZERO;
1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER;
Lire (n) n,m,i,j: INTEGER;
Jusqu’à n dans [ 5..50 ] BEGIN
2) pour i de 1 à n faire REPEAT
Ecrire (″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau');
Lire (t[i]) READLN(n);
fin pour UNTIL n IN [5..50] ;
3) m ← n , i ← 1 FOR i:=1 TO n DO
Répéter BEGIN
si(t[i] = 0) alors WRITE('t[',i,']=');
pour j de i à m-1 faire READLN(t[i]);
t[j] ← t[j+1] END; WRITELN;
fin pour i:=1; m:=n;
t[m] ← 0 REPEAT
m ← m-1 IF (t[i]=0)THEN
sinon BEGIN
i ← i+1 FOR j:=i TO m-1 DO t[j]:=t[j+1];
fin si t[m]:=0;
Jusqu’à (i>m) m:=m-1;
4) pour i de 1 à n faire END
Ecrire (t[i]:4 ) ELSE
fin pour i:=i+1;
5) Fin ZERO UNTIL(i>m);
FOR i:=1 TO n DO WRITE(t[i]:4);
END.

Exercice 43 :
Analyse du problème
Nom : HISTOGRAMME
Résultat = Affichage
Affichage=[ ] Répéter
si (a>=max) alors
Ecrire (″A″ :4)
sinon
Ecrire (″″ :4)
Fin si
si (b>=max) alors
Ecrire (″B″ :4)
sinon
Ecrire (″″ :4)
Fin si
si (c>=max) alors
Ecrire (″C″ :4)
sinon

Enseignant : AHMED BELHASSEN 102


Algorithmique et programmation

Ecrire (″″ :4)


Fin si
max ← max -1
Jusqu’à (max=0)

max=[ ] si ( a>b) ET ( a>c) alors


max ← a
sinon si ( b >c) alors
max ← b
sinon max ← c
fin si
(a,b,c)=[ ] Répéter
a=donnée (″Donner le nombre de la lettre A : ″)
b=donnée (″Donner le nombre de la lettre B : ″)
c=donnée (″Donner le nombre de la lettre C : ″)
Jusqu’à ( a dans [0..15] ) ET ( b dans [1..15] ) ET ( c dans [0..15] )
Fin HISTOGRAMME
TDO
Objet Type/Nature
a,b,c,max Entier

Algorithme Traduction en PASCAL


0) Début HISTOGRAMME PROGRAM HISTOGRAMME;
1) Répéter USES WINCRT;
Ecrire (″Donner le nombre de la lettre A : ″ ) VAR a,b,c,max :INTEGER;
Lire (a) BEGIN
Ecrire (″Donner le nombre de la lettre B : ″ ) REPEAT
Lire (b) WRITE ('Donner le nombre de la lettre A : ');
Ecrire (″Donner le nombre de la lettre C : ″ ) READLN(a);
Lire (c) WRITE ('Donner le nombre de la lettre B : ');
Jusqu’à ( a dans [0..15] ) ET ( b dans [1..15] ) ET READLN(b);
( c dans [0..15] ) WRITE ('Donner le nombre de la lettre C : ');
2) si ( a>b) ET ( a>c) alors READLN(c);
max ← a UNTIL (a IN [0..15])AND (b IN [1..15]) AND (c
sinon si ( b >c) alors IN [0..15]) ;
max ← b IF (a>b)AND(a>c) THEN
sinon max ← c max:=a
fin si ELSE IF( b>c) THEN max:=b
3) Répéter ELSE max:=c;
si (a>=max) alors REPEAT
Ecrire (″A″ :4) IF (a>=max)THEN WRITE('A':4)
sinon ELSE WRITE('':4);
Ecrire (″″ :4) WRITE('':4);
Fin si IF (b>=max)THEN WRITE('B':4)
si (b>=max) alors ELSE WRITE('':4);
Ecrire (″B″ :4) WRITE('':4);
sinon IF (c>=max)THEN WRITE('C':4)
Ecrire (″″ :4) ELSE WRITE('':4);
Fin si WRITE('':4);
si (c>=max) alors WRITELN;
Ecrire (″C″ :4) max:=max-1;
sinon UNTIL(max=0);
Ecrire (″″ :4) END.

Enseignant : AHMED BELHASSEN 103


Algorithmique et programmation

Fin si
max ← max -1
Jusqu’à (max=0)
4) Fin HISTOGRAMME

Exercice 44 :
Analyse du problème
Nom : RECHERCHE
Résultat = Ecrire (″Texte après modification: ″,texte )
texte=[ p ← POS (mot1,texte) , l1←LONG(mot1) ] Tant que (p<>0) faire
EFFACE (texte,p,l1)
INSERER (mot2,texte,p)
p ← POS (mot1,texte)
Fin tant que
mot2=donnée (″Tapez le mot à remplacer ″)
mot1=donnée (″Tapez le mot rechercher″)
texte=donnée (″Tapez votre texte″)
Fin RECHERCHE
TDO
Objet Type/Nature
p,l1 Entier
texte,mot1,mot2 Chaine de caractère

Algorithme Traduction en PASCAL


0) Début RECHERCHE PROGRAM RECHERCHE ;
1) Ecrire (″Tapez votre texte ″ ) , Lire (texte) USES WINCRT;
2) Ecrire (″Tapez le mot rechercher″ ) , Lire (mot1) VAR
3) Ecrire (″Tapez le mot à remplacer″ ) , Lire (mot2) texte,mot1,mot2: STRING;
4) p ← POS (mot1,texte) l1←LONG(mot1) p,l1:INTEGER;
Tant que (p<>0) faire BEGIN
EFFACE (texte,p,l1) WRITELN('Tapez votre texte');
INSERER (mot2,texte,p) READLN (texte);
p ← POS (mot1,texte) WRITELN ('Tapez le mot rechercher');
Fin tant que READLN (mot1);
5) Ecrire (″Texte après modification: ″,texte ) WRITELN ('Tapez le mot à remplacer');
6) Fin RECHERCHE READLN (mot2);
p:=POS(mot1,texte);
l1:=LENGTH(mot1);
WHILE p <> 0 DO
BEGIN
DELETE(texte,p,l1);
INSERT(mot2,texte,p);
p:=POS(mot1,texte);
END;
WRITELN ('Texte après modification: ',texte);
END.

Enseignant : AHMED BELHASSEN 104


Algorithmique et programmation

Exercice 45 :
Analyse du problème
Nom : CODEC
Résultat = Ecrire (″Si octet = ", octet , ″ Alors l''octet compressé est: ″, octet_com )
octet_com =[ i ←1] Répéter
occ ← 1
ok ← VRAI
Répéter
si (octet[i] = octet[i+1]) alors
occ ← occ + 1
i←i+1
sinon ok ← FAUX
Fin si
Jusqu’à NON (ok) OR (i > 8)
si occ = 1 alors
octet_com ← octet_com + octet[i]
sinon
CONVCH (occ,car)
octet_com ← octet_com + car + octet[i]
fin si
i←i+1
Jusqu’à (i > 8)
octet =[ ] Répéter
octet=donnée (″Tapez la valeur de l''octet″)
ok ← VRAI
i←1
l← LONG (octet)
Répéter
si (non (octet[i] dans [″0″,″1″])) alors
ok ←FAUX
Fin si
i←i+1
Jusqu’à NON (ok) OU (i > 8) ET (l = 8);
Jusqu’à (ok)
Fin CODEC
TDO
Objet Type/Nature
i,l,occ Entier
octet,octet_com,car Chaine de caractère
ok Booléen

Algorithme Traduction en PASCAL


0) Début CODEC PROGRAM CODEC;
1) Répéter USES WINCRT;
Ecrire (″Tapez la valeur de l''octet″), Lire(octet) VAR octet,octet_com:STRING[8];
ok ← VRAI car :STRING[1];
i←1 i,l,occ : INTEGER;
l← LONG (octet) ok : BOOLEAN;
Répéter BEGIN
si (non (octet[i] dans [″0″,″1″])) alors REPEAT
ok ←FAUX WRITELN ('Tapez la valeur de l''octet');
Fin si READLN (octet);

Enseignant : AHMED BELHASSEN 105


Algorithmique et programmation

i←i+1 ok := TRUE;
Jusqu’à NON (ok) OU (i > 8) ET (l = 8); i:= 1;
Jusqu’à (ok) l:=LENGTH(octet);
2) Répéter REPEAT
occ ← 1 IF (NOT (octet[i] IN ['0','1'])) THEN
ok ← VRAI ok := false;
Répéter i := i + 1;
si (octet[i] = octet[i+1]) alors UNTIL ((NOT ok) OR (i > 8) AND (l = 8));
occ ← occ + 1 UNTIL (ok);
i←i+1 i:=1;
sinon ok ← FAUX REPEAT
Fin si occ:=1; ok:=TRUE;
Jusqu’à NON (ok) OU (i > 8) REPEAT
si occ = 1 alors IF octet[i] = octet[i+1] THEN
octet_com ← octet_com + octet[i] BEGIN
sinon occ := occ + 1;
CONVCH (occ,car) i := i + 1;
octet_com ← octet_com + car + octet[i] END
fin si ELSE ok := false;
i←i+1 UNTIL ((NOT ok) OR (i > 8));
Jusqu’à (i > 8) IF occ = 1 THEN
octet_com:= octet_com + octet[i]
3) Ecrire (″Si octet = ", octet , ″ Alors l''octet ELSE
compressé est: ″, octet_com ) BEGIN
4) Fin CODEC STR(occ,car);
octet_com:= octet_com + car + octet[i];
END;
i:=i+1;
UNTIL (i > 8);
WRITELN ('Si octet = "',octet,'" Alors l''octet
compressé est: "',octet_com,'"');
END.

Exercice 46 :
Analyse du problème
Nom : CODAGE
Résultat = Ecrire (″Le codage de la chaîne de caractère: ", ch , ″ Donne ″, ch_codee )
ch_codee =[ ch_codee ← ch , i ←2 ] Répéter
ch_codee[i-1]← ch[i]
ch_codee[i]← ch[i-1]
i← i+2
Jusqu’à (i > 1)
ch =[ ] Répéter
ch=donnée(″Tapez une chaine″)
l ← LONG (ch)
Jusqu’à ( l dans [ 3..255] )
Fin CODAGE
TDO
Objet Type/Nature
i,l Entier
ch,ch_codee Chaine de caractère

Enseignant : AHMED BELHASSEN 106


Algorithmique et programmation

Algorithme Traduction en PASCAL


0) Début CODAGE PROGRAM CODAGE;
1) Répéter USES WINCRT;
Ecrire (″Tapez une chaine″), Lire(ch) VAR ch,ch_codee: STRING;
l ← LONG (ch) l,i:INTEGER;
Jusqu’à ( l dans [ 3..255] ) BEGIN
2) ch_codee ← ch , i ←2 REPEAT
Répéter WRITELN ('Tapez une chaîne');
ch_codee[i-1]← ch[i] READLN (ch);
ch_codee[i]← ch[i-1] l:=LENGTH(ch);
i← i+2 UNTIL (l IN [3..255]);
Jusqu’à (i > 1) ch_codee:=ch;
i:=2;
3) Ecrire (″Le codage de la chaîne de caractère: ", ch REPEAT
, ″ Donne ″, ch_codee ) ch_codee[i-1]:=ch[i];
4) Fin CODAGE ch_codee[i]:=ch[i-1];
i:=i+2;
UNTIL (i>l);
WRITELN ('Le codage de la chaîne de caractère:
"',ch,'" Donne "',ch_codee,'"');
END.

Enseignant : AHMED BELHASSEN 107


Algorithmique et programmation

Série d’exercices
Les sous programmes
Exercice 1 :
Soient les déclarations suivantes d’un programme Pascal :
La déclaration des objets globaux :
CONST c = 3 ;
VAR a , b : INTEGER ;
d , e : CHAR ;
r : BOOLEAN ;
- L’en-tête d’une fonction fct : FUNCTION fct( x : INTEGER ; y : CHAR) :BOOLEAN ;
- 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) r := fct (a , d ) ; 5) WRITELN ( fct ( e , b ) ) ; 9) a := fct ( a , d ) ;


2) a := prcd ( a , b ) ; 6) prcd ( a , c ) ; 10) prcd ( c , a) ;
3) prcd ( 5 , 3 ) ; 7) prcd (a , b , c) ; 11) prcd ( a ,b ) ;
4) r := fct ( 5 , 3 ) ; 8) IF fct ( a , d ) = fct ( b , e ) THEN r := fct(5 , ‘3’) ;

Exercice 2 :
On vous propose les actions suivantes :
- Remplir une matrice.
- Tester la primalité (premier ou non) d’un entier donné.
- Afficher les éléments positifs d’un tableau à une seule dimension.
1) Pour chacune des actions ci-dessus, indiquer si on peut utiliser une fonction ou on doit utiliser une
procédure. Expliquer la réponse.
2) Ecrire l’entête de chaque module proposé.

Exercice 3 :
Qu’affiche le programme suivant :
PROGRAM exemple ;
USES WINCRT;
VAR
x, y, z : INTEGER ;
FUNCTION test (a: INTEGER; VAR b :INTEGER ) :INTEGER ;
VAR r: INTEGER;
BEGIN
r := a + b ;
b := r DIV b ;
a:= a+1 ;
test := a+b ;
END ;

Enseignant : AHMED BELHASSEN 108


Algorithmique et programmation

BEGIN
x:= 5 ; y:=3 ; z :=4 ; test ( x , y ) ; WRITELN (‘x=’ , x , ‘ y=’ , y , ‘ z = ‘ , z ) ;
x:= 5 ; y:=3 ; z :=4 ; z :=test ( x , y ) ; WRITELN (‘x=’ , x , ‘ y=’ , y , ‘ z = ‘ , z ) ;
x:= 5 ; y:=3 ; z :=4 ; z :=test ( x+z , y ) ; WRITELN (‘x=’ , x , ‘ y=’ , y , ‘ z = ‘ , z ) ;
x:= 5 ; y:=3 ; z :=4 ; z :=test ( x , y+z ) ; WRITELN (‘x=’ , x , ‘ y=’ , y , ‘ z = ‘ , z ) ;
END. .

Exercice 4 :
Les programmes suivants devraient tous afficher 2010, or ils sont truffés d’erreurs (il peut y en avoir plusieurs
dans chaque Programme).Trouvez-les et proposez éventuellement une correction.
a) b)
PROGRAM exp1; PROGRAM exp2;
USES WINCRT; USES WINCRT;
PROCEDURE afficher (VAR x: INTEGER); VAR r : CHAR;
BEGIN FUNCTION fct (a, b : CHAR):BOOLEAN ;
WRITELN(x+4); BEGIN
END; IF a < > b THEN
BEGIN fct := 1005 ;
afficher (2006); END;
END. BEGIN
r := fct(’a’,’b’) ;
WRITELN (2*r) ;
END.

Exercice 5 :
PROGRAM exemple1;
VAR x, y, t : INTEGER;
{ La définition de la procedure Echange_xy }
PROCEDURE Echange_xy;
BEGIN
t := x;
x := y;
y := t;
END;
BEGIN { Programme principal }
x := 3;
y := 4;
WRITELN (x , ' ' , y) ;
Echange_xy ; { 1er appel de la procédure }
WRITELN (x , ' ' , y ) ;
Echange_xy ; { 2ème appel de la procédure }
WRITELN (x , ' ' , y ) ;
END.
1) Donner le résultat affiché par ce Programme.
2) Peut-on modifier le nombre des paramètres de la procédure Echange_xy tout en gardant le même rôle du
programme ? Expliquer. (Si envisageable, vous essayez d’indiquer toutes les possibilités).

Enseignant : AHMED BELHASSEN 109


Algorithmique et programmation

Exercice 6 : Soit la fonction Traitement suivante écrite en pascal :


FUNCTION Traitement (d , f : INTEGER ; T : tab) : ............................. ;
VAR
…………………………..
BEGIN
indmin := d ;
FOR i := d+1 TO f DO
IF (T[i] < T[indmin]) THEN
indmin := i ;
Traitement := indmin ;
END ;
1) Déterminer et compléter le type de cette fonction ainsi que la déclaration des variables locales.
2) Quelle est la valeur renvoyée par la fonction traitement si d=2, f=5 et le tableau T contient les éléments
suivants :
T -10 5 0 -6 10 13

3) Quel est le rôle de cette fonction ?

Exercice 7 :
Soit la fonction booléenne Verif suivante :
FUNCTION Verif (ch : STRING) : ……………………………… ;
VAR
…………….……. ;
………………….. ;
BEGIN
Test := false ;
Vc := 0 ;
REPEAT
Vc := Vc + 1 ;
IF NOT (UPCASE(ch[Vc]) in [‘A’..’Z’]) THEN
Test := true ;
UNTIL (Test) or (Vc = LENGTH (ch) );
………………………………………………………… ;
END ;
1) Compléter les pointillés par les données manquantes.
2) Que fait cette fonction ?

Exercice 8 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé FACTEURS_PREMIERS
permettant de décomposer un entier N donné (2 ≤ N ≤ 100) en produit de facteurs premiers et d’afficher N et
le produit de ses facteurs trouvés.
Exemple : Si N = 60 Alors on affiche 60 = 2 * 2 * 3 * 5
N.B : La solution doit comporter au moins deux modules.

Exercice 9 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SUPPRIMER permettant de
supprimer les espaces superflus dans une chaîne de caractère, contient au moins un espace.
Exemple :
Si la chaîne est "_ _ Travaux _ _ _ pratique _ _" Alors l’exécution du programme donnera la chaîne =
"Travaux _ pratique".
N.B : La solution doit comporter au moins deux modules.

Enseignant : AHMED BELHASSEN 110


Algorithmique et programmation

Exercice 10 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé RENVERSEE qui saisit une phrase
et l’affiche renversée. La phrase commence, obligatoirement, par une lettre et ses mots sont séparés par un seul
espace et ne se termine pas par un espace.
Exemple :
Votre phrase :"RESOLUTION DE PROBLEMES"
Résultat : "PROBLEMES DE RESOLUTION"
N.B : La solution doit comporter au moins deux modules.

Exercice 11 :
Soit le tableau T suivant :
10 7 9 7 10 6 7 4 8 8
Pour chaque élément de T on ne garde que sa première occurrence et on remplace les autres par 0.

10 7 9 0 0 6 0 4 8 0

Pour regrouper les éléments restant au début du tableau T.


10 7 9 6 4 8 0 0 0 0
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ELEMENTS_DIFFERENTS qui
fait le traitement ci-dessus pour un tableau T de n (2 ≤ n ≤ 20) entiers positifs non nuls et détermine et affiche
le nombre d’éléments différents de T.
N.B : La solution doit comporter au moins deux modules.

Exercice 12 :
Soit un tableau T de 20 entiers positifs. Rédiger une analyse, un algorithme et un programme en PASCAL
intitulé POSITION qui permet d’afficher les éléments de T compris entre deux positions P1 et P2, leur
moyenne arithmétique, la valeur maximale et la valeur minimale contenues dans cet intervalle.
On donne 1 ≤ P1 < P2 ≤ 20.
N.B : La solution doit comporter au moins deux modules.

Exercice 13 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ANAGRAMME qui permet de
saisir deux mots non vides MOT1 et MOT2 puis de déterminer si MOT2 est une anagramme de MOT1.
Une anagramme est un mot obtenu par transposition des lettres d’un autre mot (par exemple chien, chine sont
des anagrammes du mot niche).
N.B : La solution doit comporter au moins deux modules.

Exercice 14 :
Soit T un tableau de N éléments (2<N<200) de type caractère. Rédiger une analyse, un algorithme et un
programme en PASCAL intitulé EXISTANCE permettant de vérifier l’existence dans le tableau T d’un certain
nombre de mots saisis dans un tableau Tm de P éléments (2<P<20).
Exemple :
Tm BAC Canne Sujet

T L B S u j e t a B A C a n n e d

Remarques :
1. Les caractères de la chaîne recherchée doivent être adjacents dans le tableau T et non dispersés.
2. on remarque que les mots BAC, Canne et Sujet figurent dans le tableau T.
N.B : La solution doit comporter au moins deux modules.

Enseignant : AHMED BELHASSEN 111


Algorithmique et programmation

Exercice 15 :
Soit un tableau T1 contenant n lettres majuscules (de A à Z). n étant un entier compris entre 5 et 20.
On désire trier en ordre croissant les éléments de T1 et les ranger dans un tableau T2 en utilisant le principe
suivant :
1. Chercher la lettre qui a le plus petit code ASCII dans T1
2.a) Ranger cette lettre dans T2
b) Remplacer cette lettre par "*" dans T1
3. Répéter n fois les étapes 1 et 2.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TRIER qui permet de :
• Saisir les éléments de T1.
• Trier les éléments de T1 et les ranger dans T2.
• Afficher les éléments de T2.
N.B : La solution doit comporter au moins une fonction et deux procédures.

Exercice 16 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TRIER qui permet de trier par
ordre décroissant les éléments d’un tableau A de n entiers positifs dans un nouveau tableau B de même
dimension. N étant un entier vérifiant 5 < n < 25.
On utilisera la démarche suivante :
1. Chercher le maximum de A
2. Placer ce maximum dans B
3. Remplacer le maximum par -1 dans A
4. Refaire les étapes 1, 2 et 3 jusqu’à ce que le tableau A soit entièrement composé de -1.
N.B :
1) Prévoir l’affichage des éléments du tableau B
2) La solution doit comporter au moins une fonction et une procédure.

Exercice 17 :
Deux entiers naturels strictement positifs m et n sont dits nombre amis si et seulement si :
• la somme des diviseurs de m sauf lui-même est égale à n
• et la somme des diviseurs de n sauf lui-même est égale à m.
Exemple :
220 et 284 sont deux nombres amis. En effet :
D284 = {1, 2, 4, 71, 142, 284}
D220 = {1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110, 220}
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
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé AMIS qui permet de déterminer puis
d’afficher si deux entiers naturels donnés m et n sont amis ou non.
N.B : La solution doit comporter au moins une fonction et une procédure.

Exercice 18 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé BOUM qui réalise le traitement
suivant :
- Choisir un entier n de l’intervalle [100, 500] et un entier m de l’intervalle [10,99]
- Afficher tous les entiers de l’intervalle [1, m] en remplaçant par le caractère "*" tous les diviseurs de n ainsi
que tous les entiers comportant dans leurs écritures le chiffre des unités de n.
Exemple d’exécution :
Si n = 100 et m = 20 alors la liste suivante sera affichée :
* * 3 * * 6 7 8 9 * 11 12 13 14 15 16 17 18 19 *

Enseignant : AHMED BELHASSEN 112


Algorithmique et programmation

Exercice 19 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MOYENNE permettant de remplir
deux tableaux P et Q de taille maximales n (n <= 25) par des réels. Puis de ranger respectivement les éléments
positifs de P puis ceux de Q dans un tableau TPOS Ensuite calculer puis afficher la moyenne arithmétique des
éléments de TPOS.
N.B : La solution doit comporter au moins deux modules.

Exercice 20 :
On appelle moyenne olympique d’un ensemble de nombres la moyenne arithmétique de tous les nombres de cet
ensemble sauf le plus petit et le plus grand.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé OLYMPIQUE permettant de saisir
un tableau de N réels (5 ≤ N ≤ 20) distincts et d’afficher la moyenne olympique.
N.B : La solution doit comporter au moins trois modules.

Exercice 21 :
Soit l’algorithme suivant :
0) Début Exercice
1) [Lire (n)] Pour k de 1 à n répéter
Lire (T[k])
Fin Pour
2) Lire (v)
3) [trv ← faux, i ← 0] répéter
i←i+1
trv ← (T[i] = v)
Jusqu’à (i = n) ou (trv)
4) Si (trv) Alors
rt ← " est dans T "
Sinon rt ← " n’est pas dans T "
Fin Si
5) Ecrire (v, rt)
6) Fin Exercice
Questions :
1. Traduire cet algorithme en Pascal.
2. Que fait cet algorithme ? (Ecrire la réponse comme commentaire à la fin du programme).
3. Ajouter une fonction intitulée OCCURRENCES qui permet de chercher le nombre d’occurrences de la
valeur v dans T.
4. Modifier le programme principal pour qu’il affiche le nombre d’occurrences de la valeur v dans T, si elle
existe au moins une seule fois.
5. Ajouter les messages nécessaires avant la lecture de toutes les données

Exercice 22 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé FREQUENCE permettant de
déterminer et d’afficher la lettre alphabétique la plus utilisée dans un texte donné. Le texte étant saisi comme
une chaîne de caractères contenant n de caractères (5 ≤ n ≤ 20).Dans le cas d’ex aequo afficher toutes les lettres
ayant la plus grande fréquence.
N.B : La solution doit comporter au moins deux modules.

Enseignant : AHMED BELHASSEN 113


Algorithmique et programmation

Exercice 23 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé AFFICHAGE permettant de lire un
mot intitulé CHM composé au moins de 5 caractères et d’afficher les chaînes de caractères suivantes :
• La chaîne formée par le premier et le dernier caractère de CHM
• La chaîne formée par les deux premiers et les deux derniers caractères de CHM
• Etc.
Exemple : Si la chaîne CHM contient "TURBO" alors le programme affichera :
TO
TUBO
TURRBO
TURBURBO
TURBOTURBO
N.B: La solution doit comporter au moins deux modules.

Exercice 24 :
Deux joueurs lancent en même temps un dé dont les faces sont numérotées de 1 à 6. Le joueur qui obtiendra la
plus grande valeur aura un point. Le jeu s’arrête quand l’un des joueurs arrive le premier à un score de 10 points.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé JEU simulant ce jeu et afficher le
numéro du joueur gagnant.
On pourra utiliser la fonction prédéfinie RANDOM (n) qui retourne un entier de l’intervalle [0, n – 1].
N.B : La solution doit comporter au moins une fonction et une procédure.

Exercice 25 :
Soit T un tableau de n entiers (2 ≤ n ≤ 20). Rédiger une analyse, un algorithme et un programme en PASCAL
intitulé SEQUENCE qui saisit n et T puis affiche la valeur maximale V_max et la valeur minimale V_min
d’une séquence de T allant de i à j. (i et j sont deux entiers donnés vérifiant la condition i ≤ j ≤ n).
N.B : La solution doit comporter au moins deux modules.

Exercice 26 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé TRIANGLE qui saisi une chaîne de
caractères de longueur minimal 3 et l’affiche sous la forme d’un triangle comme indiqué ci-dessous.

Exemple :
Si la chaîne saisie est "INTERNET", on aura :
I
IN
INT
INTE
INTER
INTERN
INTERNE
INTERNET
N.B : La solution doit comporter au moins deux modules.

Exercice 27 :
Soit T un tableau de N caractères alphabétique (2<N<20)
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CRYPTER permettant de crypter
les données figurant dans le tableau T comme suit :
1. Convertir chaque caractère en sa représentation en code ASCII.
2. Permuter les chiffres des unités avec ceux des dizaines.

Enseignant : AHMED BELHASSEN 114


Algorithmique et programmation

3. Insérer le caractère correspondant à ce nouveau code ASCII dans un tableau R. Puis afficher le tableau R
obtenu.
Exemple :
Si N = 3 et
T "B" "A" "C"

A "8" "L"
Alors R =
"B" "8" "L"

Ord ("B")= 66, si on permute le chiffre de unité avec celui de dizaine on obtient le code ASCII du caractère "B"
Ord ("A")= 65, si on permute, on obtient (56) le code ASCII du caractère "8"
Ord ("C")= 67, si on permute, on obtient (76) le code ASCII du caractère "L"
N.B : La solution doit comporter au moins une fonction et une procédure.

Exercice 28 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé COMPOSE qui permet de saisir un
entier positif N, composé de trois chiffres , de déterminer et d’afficher tous les nombres qui peuvent être
formés par les chiffres de N, ainsi que le plus petit et le plus grand de ces nombres
Exemple :
Pour N = 427, le programme affichera :
Les nombres formés par les chiffres de 427 sont : 427, 472, 724, 742, 247, 274
Le plus petit nombre est 247
Le plus grand nombre est 742
N.B : La solution doit comporter au moins une fonction et une procédure.

Exercice 29 :
L’algorithme suivant est celui d’une fonction permettant de calculer la somme d’une partie d’éléments d’un
tableau T de n entiers, délimité par les indices p1 et p2.
0) DEF FN somme (T : TAB ; p1, p2 : entier) : entier ;
1) [s ← 0] Pour i de p1 à p2 faire
s ← s + T[i]
Fin Pour
2) somme ← s
3) Fin somme
En exploitant la fonction dont l’algorithme est ci-dessus, Rédiger une analyse, un algorithme et un programme
en PASCAL intitulé ECART_MINIMAL qui permet de :
• Saisir un tableau V de N entiers strictement positifs (5 ≤ n ≤ 20).
• Afficher l’indice (ind) de l’élément du tableau dont l’écart entre la somme (s1) des éléments qui le précédent
et celle des éléments qui le succèdent (s2) soit minimal
• Afficher les sommes s1 et s2 correspondantes
Exemple :
Pour le tableau T suivant :

11 3 9 24 30 7 4 14 16 21 13 16
1 2 3 4 5 6 7 8 9 10 11 12
Le programme affiche : S1 = 84, S2 = 80 et ind = 7
N.B : La solution doit comporter au moins une fonction et une procédure.

Enseignant : AHMED BELHASSEN 115


Algorithmique et programmation

Exercice 30 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISEURS_MULTIPLES qui
permet de déterminer et d’afficher tous les diviseurs suivis de tous les multiples d’un entier p donné, dans une
partie d’un tableau T de n entiers donnés. Cette partie est délimitée par deux indices ind_inf et ind_sup. Avec
(0 < ind_inf < ind_sup ≤ n ≤ 15)
Exemple :

25 32 43 4 32 72 80 15 24 2 48 56 10 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Pour n = 14, p = 8, ind_inf = 3 et ind_sup = 11, le programme affichera :
Les diviseurs de 8 sont : 4 2
Les multiples de 8 sont : 32 72 80 24 48
N.B : La solution doit comporter au moins une fonction et une procédure.

Exercice 31 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ROTATION qui saisit un entier
naturel suivi de n réels à placer dans un tableau A (avec 2 ≤ n ≤ 25).Ce programme mettra les éléments de A
dans un deuxième tableau B avec une rotation de k éléments, k étant un entier donné et tel que 0 < k < n.
Exemple :
Si n= 3 et
A 2.2 6 -1.5 30.12 8
Et k = 1 Alors
B 6 -1.5 30.12 8 2.2

Mais si k = 2 Alors
B -1.5 30.12 8 2.2 6

Et si k = 4 alors
B 8 2.2 6 -1.5 30.12

N.B : La solution doit comporter au moins deux modules.

Enseignant : AHMED BELHASSEN 116


Algorithmique et programmation

Correction de série
d’exercices
Les sous programmes
Exercice 1 :
1) Appel correct 7) Appel incorrect
2) Appel incorrect 8) Appel correct
3) Appel incorrect 9) Appel incorrect
4) Appel incorrect : types incompatibles 10) Appel correct
5) Appel incorrect : types incompatibles 11) Appel correct
6) Appel incorrect : types incompatibles

Exercice 2 :

1) - Remplir une matrice : le module utilisé est une procédure.


- Tester la primalité (premier ou non) d’un entier donné : le module utilisé est une fonction.
- Afficher les éléments positifs d’un tableau à une seule dimension : le module utilisé est une procédure.
2) DEF PROC remplir (var M : MAT ; nbre_ligne, nbre_colonne : entier)
DEF FN premier (n : entier) : booléen
DEF PROC afficher (t : TAB ; n : entier)

Exercice 3 :

x=5 y=3 z =4
x=5 y=3 z =8
x=5 y=3 z =14
x=5 y=3 z =7

Exercice 4 :
a) PROGRAM exp1;
USES WINCRT;
PROCEDURE afficher (x: INTEGER);
BEGIN
WRITELN(x+4);
END;
BEGIN

Enseignant : AHMED BELHASSEN 117


Algorithmique et programmation

afficher (2006);
END.

b) PROGRAM exp2;
USES WINCRT;
VAR r : INTEGER;
FUNCTION fct (a, b : CHAR):INTEGER ;
BEGIN
IF a <> b THEN
fct := 1005 ;
END;
BEGIN
r := fct('a','b') ;
WRITELN (2*r) ;
END.

Exercice 5 :

1) x =3 y =4 , x =4 y =3 , x =3 y =4
2) PROGRAM exemple1;
VAR x, y, t : INTEGER;
{ La définition de la procedure Echange_xy }
PROCEDURE Echange_xy ( VAR a :INTEGER ; VAR b : INTEGER);
BEGIN
t := a;
a := b;
b := t;
END;
BEGIN { Programme principal }
x := 3;
y := 4;
WRITELN (x , ' ' , y) ;
Echange_xy(x,y) ; { 1er appel de la procédure }
WRITELN (x , ' ' , y ) ;
Echange_xy(x,y) ; { 2ème appel de la procédure }
WRITELN (x , ' ' , y ) ;
END.

Exercice 6 :
1) FUNCTION Traitement (d , f : INTEGER ; T : tab) : INTEGER ;
VAR
indmin , i : INTEGER ;
BEGIN
indmin := d ;
FOR i := d+1 TO f DO
IF (T[i] < T[indmin]) THEN
indmin := i ;
Traitement := indmin
END ;
2) indmin = - 6
3) Le rôle de cette fonction est de chercher l’indice de minimum d’un tableau.

Enseignant : AHMED BELHASSEN 118


Algorithmique et programmation

Exercice 7 :

1) FUNCTION Verif (ch : STRING) : BOOLEAN ;


VAR
Test: BOOLEAN;
Vc :INTEGER ;
BEGIN
Test := false ;
Vc := 0 ;
REPEAT
Vc := Vc + 1 ;
IF NOT (UPCASE(ch[Vc]) in [‘A’..’Z’]) THEN
Test := true ;
UNTIL (Test) or (Vc = LENGTH (ch) );
Verif :=Test ;
END ;
2) Le rôle de cette fonction est de vérifier si la chaine ch contiendra des caractères non alphabétiques.

Exercice 8 :
Analyse du programme principal :
Nom : FACTEURS_PREMIERS
Résultat = PROC afficher (n,nb,T)
(T , nb )= PROC decomposer (n,T,nb)
n = PROC lire_taille (n)
Fin FACTEURS_PREMIERS
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 6 entiers.

TDO
Objet Type/Nature
n , r , nb entier
T TAB
afficher procédure
decomposer procédure
lire_taille procédure

Algorithme du programme principal :


0) DÉBUT FACTEURS_PREMIERS
1) PROC lire_taille (n)
2) PROC decomposer (n,T,nb)
3) PROC afficher (n,nb,T)
4) Fin FACTEURS_PREMIERS

Analyse de la procédure lire_taille :


DEF PROC lire_taille (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 lire_taille

Enseignant : AHMED BELHASSEN 119


Algorithmique et programmation

Algorithme de la procédure lire_taille :


0) DEF PROC lire_taille (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 lire
Analyse de la procédure decomposer :
DEF PROC decomposer ( x : entier ; var T:TAB ; var y : entier)
Résultat = décomposition
décomposition =[ d ← 2 , y ← 0 ] Répéter
r ← MOD d
q ← x DIV d
si r = 0 alors
y←y+1
T[y]← d
x←q
sinon
d ←d + 1
fin si
Jusqu’à (q=0)
Fin decomposer
TDOL
Objet Type/Nature
q,r,d entier

Algorithme de la procédure decomposer :


0) DEF PROC decomposer ( x : entier ; var T:TAB ; var y : entier)
1) d ← 2 , y ← 0
Répéter
r ← MOD d
q ← x DIV d
si r = 0 alors
y←y+1
T[y]← d
x←q
sinon
d ←d + 1
fin si
Jusqu’à (q=0)
2) Fin decomposer

Analyse de la procédure afficher :


DEF PROC afficher ( n,y : entier ; T:TAB )
Résultat = affichage
affichage =[ ] si y<>1 alors
pour i de 1 à (y-1) faire
Ecrire (T[i],″ * ″)
fin pour
Ecrire (T[i+1])
Sinon
Ecrire (T[1])
fin si

Enseignant : AHMED BELHASSEN 120


Algorithmique et programmation

Ecrire (n,″=″)
Fin afficher
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure decomposer :


0) DEF PROC afficher ( n,y : entier ; T:TAB )
1) Ecrire (n,″=″)
2) si y<>1 alors
pour i de 1 à (y-1) faire
Ecrire (T[i],″ * ″)
fin pour
Ecrire (T[i+1])
Sinon
Ecrire (T[1])
fin si
3) Fin afficher

Traduction en PASCAL
PROGRAM FACTEURS_PREMIERS;
USES WINCRT;
TYPE TAB = ARRAY [1..6] OF INTEGER;
VAR n , r , nb : INTEGER;
T: TAB;
PROCEDURE lire_taille (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 2 et 100');
READLN(x);
UNTIL (x IN [2..100]);
END;
PROCEDURE decomposer ( x : INTEGER ; VAR T:TAB ; VAR y:INTEGER);
VAR r,q,d :INTEGER;
BEGIN
d:= 2;
y:= 0;
REPEAT
r:= x MOD d;
q:= x DIV d;
IF r = 0 THEN
BEGIN
y:= y + 1;
T[y]:= d;
x:= q;
END
ELSE d:= d + 1;
UNTIL (q = 0);
END;
PROCEDURE afficher ( n,y : INTEGER ; T:TAB);
VAR i : INTEGER;
BEGIN
WRITE (n,' = ');

Enseignant : AHMED BELHASSEN 121


Algorithmique et programmation

IF y <> 1 THEN
BEGIN
FOR i := 1 TO y - 1 DO WRITE (T[i],' * ');
WRITELN (T[i+1])
END
ELSE WRITELN (T[1]);
END;
BEGIN
lire_taille (n);
decomposer (n,T,nb);
afficher (n,nb,T);
END.

Exercice 9 :
Analyse du programme principal :
Nom : SUPPRIMER
Résultat =Ecrire (″Votre chaîne Après suppression des espaces superflus =″ , chaine)
chaine = PROC superflus (chaine)
PROC lire_chaine (chaine)
Fin SUPPRIMER
TDO
Objet Type/Nature
chaine chaine de caractère
lire_chaine procédure
superflus procédure

Algorithme du programme principal :


0) DÉBUT SUPPRIMER
1) PROC lire_chaine (chaine)
2) PROC superflus (chaine)
3) Ecrire (″Votre chaîne Après suppression des espaces superflus =″ , chaine)
4) Fin SUPPRIMER

Analyse de la procédure lire_chaine :


DEF PROC lire_chaine (var ch : chaine de caractère)
Résultat = ch
ch=[ ] Répéter
ch= donnée (″Tapez une chaîne non vide″)
Jusqu’à (POS (″ ″,ch) > 0 )
Fin lire_chaine

Algorithme de la procédure lire_chaine :


0) DEF PROC lire_chaine (var ch : chaine de caractère)
1) Répéter
Ecrire (″Tapez une chaîne non vide ″)
Lire(ch)
Jusqu’à (POS (″ ″,ch) > 0 )
2) Fin lire_chaine

Enseignant : AHMED BELHASSEN 122


Algorithmique et programmation

Analyse de la procédure superflus :


DEF PROC superflus (var ch : chaine de caractère )
Résultat = ch
Traitement :
ch[ind]←″ ″
ch =[ p ← POS(″ ″,ch) , l ← LONG(ch) ] Tant que p<>0 faire
si(p=1) OU (l=p) OU (ch[p+1]=″ ″) alors
EFFACE (ch,p,1)
fin si
si (p<>1) ET (l<>p) ET (ch[p+1] <>″ ″) alors
ch[p]← ″*″
ind ← p
fin si
p ← POS (″ ″,ch)
fin tant que
Fin superflus
TDOL
Objet Type/Nature
l , p , ind entier

Algorithme de la procédure superflus :


0) DEF PROC superflus (var ch : chaine de caractère )
1) p ← POS(″ ″,ch) , l ← LONG(ch)
Tant que p<>0 faire
si(p=1) OU (l=p) OU (ch[p+1]=″ ″) alors
EFFACE (ch,p,1)
fin si
si (p<>1) ET (l<>p) ET (ch[p+1] <>″ ″) alors
ch[p]← ″*″
ind ← p
fin si
p ← POS (″ ″,ch)
fin tant que
2) ch[ind]←″ ″
3) Fin superflus

Traduction en PASCAL
PROGRAM SUPPRIMER;
USES WINCRT;
VAR chaine : STRING;
PROCEDURE lire_chaine (VAR ch : STRING);
BEGIN
REPEAT
WRITELN ('Tapez une chaîne non vide');
READLN (ch);
UNTIL (POS (' ',ch) > 0);
END;
PROCEDURE superflus (VAR ch:STRING);
VAR l,p,ind : INTEGER;
BEGIN
p:=POS(' ',ch);
l:=LENGTH(ch);
WHILE p <> 0 DO

Enseignant : AHMED BELHASSEN 123


Algorithmique et programmation

BEGIN
IF (p=1) OR (l=p) OR (ch[p+1]=' ') THEN
DELETE(ch,p,1);
IF (p<>1) AND (l<>p) AND (ch[p+1] <>' ') THEN
BEGIN
ch[p]:='*';
ind:=p;
END;
p:= POS(' ',ch);
END;
ch[ind]:=' ';
END;
BEGIN
lire_chaine(chaine);
superflus(chaine);
WRITELN ('Votre chaîne Après suppression des espaces superflus =' , chaine);
END.

Exercice 10 :
Analyse du programme principal :
Nom : RENVERSEE
Résultat =Ecrire (FN renverser (phrase))
phrase = PROC lire_chaine (phrase)
Fin RENVERSEE
TDO
Objet Type/Nature
phrase chaine de caractère
lire_chaine procédure
renverser fonction

Algorithme du programme principal :


0) DÉBUT RENVERSEE
1) PROC lire (phrase)
2) Ecrire (FN renverser (phrase))
3) Fin RENVERSEE

Analyse de la procédure lire_chaine :


DEF PROC lire_chaine (var ch : chaine de caractère)
Résultat = ch
ch=[ ] Répéter
ch= donnée (″Tapez votre phrase″)
Jusqu’à ((MAJUS (ch[1]) DANS [″A″..″Z″]) ET (POS (″ ″,ch)= 0) ET (ch [LONG(ch)] <> ″ ″))
Fin lire_chaine

Algorithme de la procédure lire_chaine :


0) DEF PROC lire_chaine (var ch : chaine de caractère)
1) Répéter
Ecrire (″Tapez votre phrase″)
Lire(ch)
Jusqu’à ((MAJUS (ch[1]) DANS [″A″..″Z″]) ET (POS (″ ″,ch)= 0) ET (ch [LONG(ch)] <> ″ ″))
2) Fin lire_chaine

Enseignant : AHMED BELHASSEN 124


Algorithmique et programmation

Analyse de la fonction renverser :


DEF PROC renverser (ch : chaine de caractère ) :chaine de caractère
Résultat = renverser
renverser ←ch1
ch1 ← ch + ″ ″ +ch1
ch =[ ] Tant que POS (″ ″,ch) <> 0 faire
p ← POS (″ ″,ch)
ch1← SOUS_CHAINE (ch,1, p-1)+ ″ ″+ ch1;
EFFACE (ch,1, p);
fin tant que
Fin renverser
TDOL
Objet Type/Nature
p entier
ch1 chaine de caractère

Algorithme de la fonction renverser :


0) DEF FN renverser (var ch : chaine de caractère ) :chaine de caractère
1) Tant que POS (″ ″,ch) <> 0 faire
p ← POS (″ ″,ch)
ch1← SOUS_CHAINE (ch,1, p-1)+ ″ ″+ ch1;
EFFACE (ch,1, p);
fin tant que
2) ch1 ← ch + ″ ″ +ch1
3) renverser ←ch1
4) Fin renverser

Traduction en PASCAL
PROGRAM RENVERSEE;
USES WINCRT;
VAR phrase : STRING;

PROCEDURE lire_chaine (VAR ch : STRING);


BEGIN
REPEAT
WRITELN ('Tapez votre phrase');
READLN (ch);
UNTIL ((UPCASE (ch[1]) IN ['A'..'Z']) AND (POS (' ',ch)= 0) AND (ch [LENGTH(ch)] <> ' '));
END;
FUNCTION renverser (ch : STRING):STRING;
VAR
p:INTEGER;
ch1:STRING;
BEGIN
WHILE (POS(' ',ch) <> 0) DO
BEGIN
p:= POS(' ',ch);
ch1:= COPY (ch,1, p-1)+ ' ' + ch1;
DELETE (ch,1, p);
END;
ch1:= ch + ' ' + ch1;
renverser:=ch1;
END;

Enseignant : AHMED BELHASSEN 125


Algorithmique et programmation

BEGIN
lire_chaine (phrase);
WRITELN (renverser(phrase));
END.

Exercice 11 :
Analyse du programme principal :
Nom : ELEMENTS_DIFFERENTS
Résultat = PROC afficher (T,n)
PROC regrouper (T,n)
PROC garder (T,n)
T = PROC lire_tableau (T,n)
n = PROC lire_entier (n)
Fin ELEMENTS_DIFFERENTS
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 20 entiers.

TDO
Objet Type/Nature
n entier
T TAB
afficher procédure
regrouper procédure
garder procédure
lire_tableau procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT ELEMENTS_DIFFERENTS
1) PROC lire_entier (n)
2) PROC lire_tableau (T,n)
3) PROC garder (T,n)
4) PROC regrouper (T,n)
5) PROC afficher (T,n)
6) Fin ELEMENTS_DIFFERENTS

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : Entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez le nombre des éléments du tableau″)
Jusqu’à (x DANS [2..20])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez le nombre des éléments du tableau″)
Lire(x)
Jusqu’à (x DANS [2.. 20])
2) Fin lire_entier

Enseignant : AHMED BELHASSEN 126


Algorithmique et programmation

Analyse de la procédure lire_tableau :


DEF PROC lire_tableau (var vec : TAB ; y : entier)
Résultat = vec
vec =[ ] pour i de 1 à y faire
Répéter
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Jusqu’à (vec[i]>0)
fin pour
Fin lire_tableau
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure lire_tableau :


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

Analyse de la procédure garder :


DEF PROC garder ( var vec : TAB ; y : entier )
Résultat = vec
vec =[ ] pour i de 1 à (y-1) faire
pour j de i+1 à y faire
si (vec[i]=vec[j]) alors
vec[j] ← 0
fin si
fin pour
fin pour
Fin garder
TDOL
Objet Type/Nature
i,j entier

Algorithme de la procédure garder :


0) DEF PROC garder ( var vec : TAB ; y : entier )
1) pour i de 1 à (y-1) faire
pour j de i+1 à y faire
si (vec[i]=vec[j]) alors
vec[j] ← 0
fin si
fin pour
fin pour
2) Fin garder

Enseignant : AHMED BELHASSEN 127


Algorithmique et programmation

Analyse de la procédure regrouper :


DEF PROC regrouper ( var vec : TAB ; var y : entier )
Résultat = ( vec,y )
vec ← vec1
y ← ind1
vec1 =[ vec1[1]←vec[1], ind1←1, ind2← y ] pour i de 2 à y faire
si (vec[i] >0) alors
ind1← ind1 + 1
vec1[ind1]← vec[i]
sinon
vec1[ind2]← vec[i]
ind2← ind2 - 1
fin si
fin pour
Fin regrouper
TDOL
Objet Type/Nature
ind1 , ind2 , i entier
vec1 TAB

Algorithme de la procédure regrouper :


0) DEF PROC regrouper ( var vec : TAB ; var y : entier )
1) vec1[1]←vec[1], ind1←1, ind2← y
pour i de 2 à y faire
si (vec[i] >0) alors
ind1← ind1 + 1
vec1[ind1]← vec[i]
sinon
vec1[ind2]← vec[i]
ind2 ← ind2 - 1
fin si
fin pour
2) y ← ind1
3) vec ← vec1
4) Fin regrouper

Analyse de la procédure afficher :


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

Algorithme de la procédure afficher :


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

Enseignant : AHMED BELHASSEN 128


Algorithmique et programmation

Traduction en PASCAL
PROGRAM ELEMENTS_DIFFERENTS;
USES WINCRT;
TYPE
TAB = ARRAY [1..20] OF INTEGER;
VAR T:TAB;
n:INTEGER;
PROCEDURE lire_entier ( VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez le nombre des éléments du tableau');
READLN(x);
UNTIL (x IN [2..20]);
END;

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


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

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


VAR i,j : INTEGER;
BEGIN
FOR i:=1 TO y-1 DO
FOR j:= i+1 TO y DO
IF vec[i] = vec[j] THEN vec[j]:=0;
END;
PROCEDURE regrouper (VAR vec: TAB ; VAR y:INTEGER);
VAR vec1 : TAB;
ind1 , ind2 , i : INTEGER;
BEGIN
vec1[1]:=vec[1];
ind1:=1;
ind2:=y;

FOR i:= 2 TO y DO
IF vec[i] > 0 THEN
BEGIN
ind1:= ind1 + 1;
vec1[ind1]:=vec[i];
END
ELSE
BEGIN
vec1[ind2]:=vec[i];
ind2:= ind2 - 1;
END;

Enseignant : AHMED BELHASSEN 129


Algorithmique et programmation

y:=ind1;
vec:=vec1;
END;
PROCEDURE afficher ( vec : TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO
WRITELN (vec[i]);
END;
BEGIN
lire_entier(n);
lire_tableau(T,n);
garder(T,n);
regrouper(T,n);
afficher(T,n);
END.

Exercice 12 :
Analyse du programme principal :
Nom : POSITION
Résultat = PROC afficher (T, P1, P2)
(P1, P2)= PROC lire_entier (P1,P2)
T = PROC remplir (T)
Fin POSITION
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 20 entiers.

TDO
Objet Type/Nature
P1, P2 entier
T TAB
afficher procédure
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT POSITION
1) PROC remplir (T)
2) PROC lire_entier (P1,P2)
3) PROC afficher (T, P1, P2)
4) Fin POSITION

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x ,y : Entier)
Résultat = (x,y)
(x,y) = [ ] Répéter
x ,y = donnée (″Tapez les deux Positions″)
Jusqu’à ((x DANS [1..y-1]) ET (y <= 20))
Fin lire_entier

Enseignant : AHMED BELHASSEN 130


Algorithmique et programmation

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x ,y : Entier)
1) Répéter
Ecrire (″Tapez les deux Positions″)
Lire(x , y)
Jusqu’à ((x DANS [1..y-1]) ET (y <= 20))
2) Fin lire_entier

Analyse de la procédure remplir :


DEF PROC remplir (var vec : TAB )
Résultat = vec
vec =[ ] pour i de 1 à 20 faire
Répéter
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Jusqu’à (vec[i]>0)
fin pour
Fin remplir
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure remplir :


0) DEF PROC remplir (var vec : TAB )
1) pour i de 1 à 20 faire
Répéter
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (vec[i])
Jusqu’à (vec[i]>0)
fin pour
2) Fin remplir

Analyse de la procédure afficher :


DEF PROC afficher ( vec : TAB ; x , y : entier )
Résultat = Ecrire (″Leur moyenne arithmétique =″,moy, ″La valeur maximale = ″,max ,″La valeur minimale =″,
min)
moy ← (moy / (y-x))
(moy , max, min) =[ max ←vec[x], min ←vec[x], moy ← 0 ] pour i de x à y faire
Ecrire (vec[i])
moy ← moy + vec[i]
si (min >vec[i] ) alors
min ←vec[i]
fin si
si (max <vec[i] ) alors
max ←vec[i]
fin si
fin pour
Fin afficher
TDOL
Objet Type/Nature
max , min , i entier
moy réel

Enseignant : AHMED BELHASSEN 131


Algorithmique et programmation

Algorithme de la procédure afficher :


0) DEF PROC afficher ( vec : TAB ; x , y : entier )
1) max ←vec[x], min ←vec[x], moy ← 0
pour i de x à y faire
Ecrire (vec[i])
moy ← moy + vec[i]
si (min >vec[i] ) alors
min ←vec[i]
fin si
si (max >vec[i] ) alors
max ←vec[i]
fin si
fin pour
2) moy ← (moy / (y-x))
3) Ecrire (″Leur moyenne arithmétique =″, moy , ″La valeur maximale = ″, max , ″La valeur minimale =″, min)
4) Fin afficher

Traduction en PASCAL
PROGRAM POSITION;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
VAR T : TAB;
P1,P2 : INTEGER;

PROCEDURE remplir (VAR vec : TAB);


VAR
i : INTEGER;
BEGIN
FOR i:=1 TO 20 DO
BEGIN
REPEAT
WRITELN ('Donnez la valeur de l"éléments N° ',i);
READLN (vec[i]);
UNTIL (vec[i] > 0);
END;
END;

PROCEDURE lire_entier (VAR x,y : INTEGER);


BEGIN
REPEAT
WRITELN ('Tapez les deux Positions');
READLN(x,y);
UNTIL ((x IN [1..y-1]) AND (y <= 20));
END;

PROCEDURE afficher (vec : TAB ; x,y : INTEGER);


VAR moy : REAL;
min,max,i : INTEGER;
BEGIN
min:=vec[x];
max:=vec[x];
moy:=0;
FOR i:= x TO y DO

Enseignant : AHMED BELHASSEN 132


Algorithmique et programmation

BEGIN
WRITELN (vec[i]);
moy:= moy + vec[i];
IF min > vec[i] THEN min:=vec[i];
IF max < vec[i] THEN max:=vec[i];
END;
moy:=(moy / (y-x));
WRITELN ('Leur moyenne arithmétique = ',moy:6:2 , 'La valeur maximale = ',max , 'La valeur minimale =
',min);
END;

BEGIN
remplir (T);
lire_entier (P1,P2);
afficher (T,P1,P2);
END.

Exercice 13 :
Analyse du programme principal :
Nom : ANAGRAMME
Résultat =Affichage
Affichage=[ ] si FN verifier (MOT1,MOT2) alors
Ecrire (MOT2,″ est une anagramme de″, MOT1)
sinon
Ecrire (MOT2,″n'est pas une anagramme de ″, MOT1)
fin si
(MOT1, MOT2)=PROC lire_chaine (MOT1,MOT2 )
Fin ANAGRAMME
TDO
Objet Type/Nature
MOT1, MOT2 chaine de caractère
lire_chaine procédure
verifier fonction

Algorithme du programme principal :


0) DÉBUT ANAGRAMME
1) PROC lire_chaine (MOT1, MOT2 )
2) si FN verifier (MOT1, MOT2) alors
Ecrire (MOT2,″ est une anagramme de″, MOT1)
sinon
Ecrire (MOT2,″n'est pas une anagramme de ″, MOT1)
fin si
3) Fin ANAGRAMME

Analyse de la procédure lire_chaine :


DEF PROC lire_chaine (var ch1,ch2 : chaine de caractère)
Résultat = (ch1, ch2)
(ch1,ch2)=[ ] Répéter
ch1= donnée (″Tapez votre premier mot″)
ch2= donnée (″Tapez votre deuxième mot″)
Jusqu’à ((ch1 <>″″) ET (ch2 <> ″″) ET (ch1 <> ch2))
Fin lire_chaine

Enseignant : AHMED BELHASSEN 133


Algorithmique et programmation

Algorithme de la procédure lire_chaine :


0) DEF PROC lire_chaine (var ch1,ch2 : chaine de caractère)
1) Répéter
Ecrire (″Tapez votre premier mot″)
Lire (ch1)
Ecrire (″Tapez votre deuxième mot″)
Lire (ch2)
Jusqu’à ((ch1 <>″″) ET (ch2 <> ″″) ET (ch1 <> ch2))
2) Fin lire_chaine

Analyse de la fonction verifier :


DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen
Résultat = verifier
verifier ← ok
ok =[ ok ← vrai , l ← LONG(ch2) ,ch3←″″]
si ( l <> LONG (ch1) ) alors
ok ← faux
sinon
pour i de 1 à l faire
ch3 ← ch3 + MAJUS (ch1[i])
fin pour
i←0
Répéter
p ← POS (MAJUS(ch2[i]),ch3)
si p = 0 alors
ok ← faux
sinon
i←i+1
ch3[p] ← ″*″
fin si
Jusqu’à (NON (ok) OU (i > l))
fin si
Fin verifier
TDOL
Objet Type/Nature
i,l,p entier
ok booléen
ch3 chaine de caractère

Algorithme de la fonction verifier :


0) DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen
1) ok ← vrai , l ← LONG(ch2) ,ch3←″″
si ( l <> LONG (ch1) ) alors
ok ← faux
sinon
pour i de 1 à l faire
ch3 ← ch3 + MAJUS (ch1[i])
fin pour
i←0
Répéter
p ← POS ( MAJUS(ch2[i]),ch3)
si p = 0 alors
ok ← faux

Enseignant : AHMED BELHASSEN 134


Algorithmique et programmation

sinon
i←i+1
ch3[p] ← ″*″
fin si
Jusqu’à (NON (ok) OU (i > l))
fin si
2) verifier ← ok
3) Fin verifier

Traduction en PASCAL
PROGRAM ANAGRAMME;
USES WINCRT;
VAR MOT1, MOT2 : STRING;
PROCEDURE lire_chaine (VAR ch1,ch2 : STRING);
BEGIN
REPEAT
WRITELN ('Tapez votre premier mot'); READLN (ch1);
WRITELN ('Tapez votre deuxième mot'); READLN (ch2);
UNTIL ((ch1 <> '') AND (ch2 <> '') AND (ch1 <> ch2));
END;
FUNCTION verifier (ch2, ch1 : STRING):BOOLEAN;
VAR ok : BOOLEAN ;
i, l , p :INTEGER;
ch3:STRING;
BEGIN
l :=LENGTH(ch2);
ok:= TRUE;
ch3:='';
IF l <> LENGTH (ch1) THEN ok:= FALSE
ELSE
BEGIN
FOR i:=1 TO l DO
ch3:= ch3 + UPCASE (ch1[i]);
i:= 1;
REPEAT
p:= POS (UPCASE(ch2[i]),ch3);
IF p = 0 THEN
ok:= FALSE
ELSE
BEGIN
i:= i + 1;
ch3[p] := '*';
END;
UNTIL ((NOT ok) OR (i > l));
END;
verifier := ok;
END;
BEGIN
lire_chaine (MOT1,MOT2);
IF verifier (MOT2,MOT1 ) THEN
WRITELN (MOT2,' est une anagramme de ', MOT1)
ELSE
WRITELN (MOT2,' n"est pas une anagramme de ', MOT1); END.

Enseignant : AHMED BELHASSEN 135


Algorithmique et programmation

Exercice 14 :
Analyse du programme principal :
Nom : EXISTANCE
Résultat = Affichage
Affichage=[ ] pour i de 1 à p faire
si FN verifier (Tm[i],T) alors
Ecrire (Tm[i],″ existe dans ″, T )
sinon
Ecrire (Tm[i],″ n'existe pas dans ″, T )
fin si
fin pour
Tm=PROC remplir_Tm (Tm,p)
p=PROC lire_p (p)
T = PROC remplir_T (T,n)
n = PROC lire_n(n)
Fin EXISTANCE
Tableau de déclaration des nouveaux types
Type
TAB1 = tableau de 200 caractère.
TAB2 = tableau de 20 chaine de caractère.

TDO
Objet Type/Nature
i,n,p entier
T TAB1
Tm TAB2
lire_n procédure
lire_p procédure
remplir_T procédure
remplir_Tm procédure
verifier fonction

Algorithme du programme principal :


0) DÉBUT EXISTANCE
1) PROC lire_n (n)
2) PROC remplir_T (T,n)
3) PROC lire_p (p)
4) PROC remplir_Tm (Tm,p)
5) pour i de 1 à p faire
si FN verifier (Tm[i],T) alors
Ecrire (Tm[i],″ existe dans ″, T )
sinon
Ecrire (Tm[i],″ n'existe pas dans ″, T )
fin si
fin pour
6) Fin EXISTANCE

Analyse de la procédure lire_n :


DEF PROC lire_n (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille du tableau T ″)

Enseignant : AHMED BELHASSEN 136


Algorithmique et programmation

Jusqu’à (x DANS [3..199])


Fin lire_n

Algorithme de la procédure lire_n :


0) DEF PROC lire_n (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau T ″)
Lire(x)
Jusqu’à (x DANS [3.. 199])
2) Fin lire_n

Analyse de la procédure remplir_T :


DEF PROC remplir_T (var vec : TAB1 ; y : entier)
Résultat = vec
vec =[ ] pour i de 1 à y faire
vec[i]=donnée (″Tapez le caractère N° ″, i)
fin pour
Fin remplir_T
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure remplir_T :


0) DEF PROC remplir_T (var vec : TAB1 ; y : entier)
1) pour i de 1 à y faire
Ecrire (″Tapez le caractère N° ″, i)
Lire (vec[i])
fin pour
2) Fin remplir_T

Analyse de la procédure lire_p :


DEF PROC lire_p (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez le nombre des mots″)
Jusqu’à (x DANS [3..19])
Fin lire_p

Algorithme de la procédure lire_p :


0) DEF PROC lire_p (var x : entier)
1) Répéter
Ecrire (″Donnez le nombre des mots″)
Lire(x)
Jusqu’à (x DANS [3.. 19])
2) Fin lire_p

Analyse de la procédure remplir_Tm :


DEF PROC remplir_Tm (var vec : TAB2 ; y : entier)
Résultat = vec
vec =[ ] pour i de 1 à y faire
vec[i]=donnée (″Donnez le mot N° ″, i)
fin pour
Fin remplir_Tm

Enseignant : AHMED BELHASSEN 137


Algorithmique et programmation

TDOL
Objet Type/Nature
i entier

Algorithme de la procédure remplir_T :


0) DEF PROC remplir_Tm (var vec : TAB2 ; y : entier)
1) pour i de 1 à y faire
Ecrire (″Donnez le mot N° ″, i)
Lire (vec[i])
fin pour
2) Fin remplir_Tm

Analyse de la fonction verifier :


DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen
Résultat = verifier
verifier =[ ] si ( POS (ch1,ch2)=0 ) alors
verifier ← faux
sinon
verifier ← vrai
fin si
Fin verifier

Algorithme de la fonction verifier :


0) DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen
1) si ( POS (ch1,ch2)=0 ) alors
verifier ← faux
sinon
verifier ← vrai
fin si
2) Fin verifier

Traduction en PASCAL
PROGRAM EXISTANCE;
USES WINCRT;
TYPE
TAB1 = ARRAY[1..199] OF CHAR;
TAB2 = ARRAY[1..19] OF STRING;
VAR
T : TAB1 ;
Tm : TAB2;
i,n,p : INTEGER;
PROCEDURE lire_n (VAR x :INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau T'); READLN(x);
UNTIL (x IN [3..199]);
END;
PROCEDURE lire_p ( VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez le nombre des mots');
READLN(x);
UNTIL (x IN [3..19]);

Enseignant : AHMED BELHASSEN 138


Algorithmique et programmation

END;
PROCEDURE remplir_T ( VAR vec : TAB1 ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
WRITELN ('Tapez le caractère N° ',i);
READLN (vec[i]);
END;
END;
PROCEDURE remplir_Tm ( VAR vec : TAB2 ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO
BEGIN
WRITELN ('Donnez le mot N° ',i);
READLN (vec[i]);
END;
END;
FUNCTION verifier ( ch1,ch2 : STRING):BOOLEAN;
BEGIN
IF POS (ch1,ch2) = 0 THEN
verifier:= FALSE
ELSE
verifier:= TRUE;
END;
BEGIN
lire_n(n);
remplir_T(T,n);
lire_p(p);
remplir_Tm (Tm,p);
FOR i:= 1 TO p DO
BEGIN
IF verifier (Tm[i],T) THEN
WRITELN (Tm[i],' existe dans ',T)
ELSE
WRITELN (Tm[i],' n"existe pas dans ',T);
END;
END.

Exercice 15 :
Analyse du programme principal :
Nom : TRIER
Résultat = PROC afficher (T2,n)
T2=[ ] pour i de 1 à n faire
p ← FN chercher (T1,n)
T2[i] ← T1[p]
T1[p]← ″*″
fin pour
T1 = PROC remplir (T1,n)
n = PROC lire_entier (n)
Fin TRIER

Enseignant : AHMED BELHASSEN 139


Algorithmique et programmation

Tableau de déclaration des nouveaux types


Type
TAB = tableau de 20 caractère.

TDO
Objet Type/Nature
n , i ,p entier
T1,T2 TAB
afficher procédure
chercher fonction
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT TRIER
1) PROC lire_entier (n)
2) PROC remplir (T1,n)
3) pour i de 1 à n faire
p ← FN chercher (T1,n)
T2[i] ← T1[p]
T1[p]← ″*″
fin pour
4) PROC afficher (T2,n)
5) Fin TRIER

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille de votre Tableau″)
Jusqu’à (x DANS [5..20])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille de votre Tableau″)
Lire(x)
Jusqu’à (x DANS [5.. 20])
2) Fin lire_entier

Analyse de la procédure remplir :


DEF PROC remplir (var T: TAB ; y : entier)
Résultat = T
T =[ ] pour i de 1 à y faire
Répéter
T[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Jusqu’à (T[i] DANS [″A″..″B″])
fin pour
Fin remplir
TDOL
Objet Type/Nature
i entier

Enseignant : AHMED BELHASSEN 140


Algorithmique et programmation

Algorithme de la procédure remplir :


0) DEF PROC remplir (var T : TAB ; y : entier)
1) pour i de 1 à y faire
Répéter
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (T[i])
Jusqu’à (T[i] DANS [″A″..″B″])
fin pour
2) Fin remplir

Analyse de la procédure afficher :


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

Algorithme de la procédure afficher :


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

Analyse de la fonction chercher :


DEF FN chercher (T :TAB ; y : entier) :entier
Résultat = chercher
chercher ← ind
ind =[ ind ← 0] pour i de 2 à y faire
si (T[i] <> ″*″) alors
si (T[ind] = ″*″) OU (T[ind] > T[i]) alors
ind ← i
fin si
fin si
fin pour
Fin chercher
TDOL
Objet Type/Nature
i , ind entier

Algorithme de la fonction chercher :


0) DEF FN chercher (T :TAB ; y : entier) :entier
1) ind ← 0
pour i de 2 à y faire
si (T[i] <> ″*″) alors
si (T[ind] = ″*″) OU (T[ind] > T[i]) alors
ind ← i
fin si
fin si

Enseignant : AHMED BELHASSEN 141


Algorithmique et programmation

fin pour
2) chercher ← ind
3) Fin chercher
Traduction en PASCAL
PROGRAM TRIER;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF CHAR;
VAR
T1,T2 : TAB;
n,i,p :INTEGER;

PROCEDURE lire_entier (VAR x : INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez la taille de votre Tableau');
READLN(x);
UNTIL (x IN [5..20]);
END;
PROCEDURE remplir ( VAR T:TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i := 1 TO y DO
BEGIN
REPEAT
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (T[i]);
UNTIL (T[i] IN ['A'..'Z']);
END;
END;
FUNCTION chercher (T:TAB; y : INTEGER):INTEGER;
VAR ind , i : INTEGER;
BEGIN
ind:= 1;
FOR i:= 2 TO y DO
IF (T[i] <> '*') THEN
IF (T[ind] = '*') OR (T[ind] > T[i]) THEN ind:= i;
chercher:= ind;
END;
PROCEDURE afficher ( T : TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO WRITELN(T[i]);
END;
BEGIN
lire_entier (n);
remplir(T1,n);
FOR i:= 1 TO n DO
BEGIN
p:= chercher(T1,n);
T2[i]:= T1[p];
T1[p]:= '*';
END;
afficher (T2,n); END.

Enseignant : AHMED BELHASSEN 142


Algorithmique et programmation

Exercice 16 :
Analyse du programme principal :
Nom : TRIER
Résultat = PROC afficher (B,n)
B=[ ] pour i de 1 à n faire
p ← FN maximum (A,n)
B[i] ← A[p]
A[p]← -1
fin pour
A= PROC remplir (A, n)
n = PROC lire_entier (n)
Fin TRIER
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 24 entier.

TDO
Objet Type/Nature
n, i ,p entier
A ,B TAB
afficher procédure
maximum fonction
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT TRIER
1) PROC lire_entier (n)
2) PROC remplir (A,n)
3) pour i de 1 à n faire
p ← FN maximum (A,n)
B[i] ← A[p]
A[p]← -1
fin pour
4) PROC afficher (B,n)
5) Fin TRIER

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille du tableau″)
Jusqu’à (x DANS [6..24])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau″)
Lire(x)
Jusqu’à (x DANS [6..24])
2) Fin lire_entier

Enseignant : AHMED BELHASSEN 143


Algorithmique et programmation

Analyse de la procédure remplir :


DEF PROC remplir (var T: TAB ; y : entier)
Résultat = T
T =[ ] pour i de 1 à y faire
Répéter
T[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Jusqu’à (T[i] > 0 )
fin pour
Fin remplir
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure remplir :


0) DEF PROC remplir (var T : TAB ; y : entier)
1) pour i de 1 à y faire
Répéter
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (T[i])
Jusqu’à (T[i] > 0 )
fin pour
2) Fin remplir

Analyse de la procédure afficher :


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

Algorithme de la procédure afficher :


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

Analyse de la fonction maximum :


DEF FN maximum (T :TAB ; y : entier) :entier
Résultat = maximum
maximum ← ind
ind =[ ind ← 1] pour i de 2 à y faire
si (T[i] > T[ind]) alors
ind ← i
fin si
fin pour
Fin maximum

Enseignant : AHMED BELHASSEN 144


Algorithmique et programmation

TDOL
Objet Type/Nature
i , ind entier
Algorithme de la fonction maximum :
0) DEF FN maximum (T :TAB ; y : entier) :entier
1) ind ← 1
pour i de 2 à y faire
si (T[i] > T[ind]) alors
ind ← i
fin si
fin pour
2) maximum ← ind
3) Fin maximum

Traduction en PASCAL
PROGRAM TRIER;
USES WINCRT;
TYPE TAB = ARRAY [1..24] OF INTEGER;
VAR A,B : TAB;
n,i,p : INTEGER;
PROCEDURE lire_entier (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN(x);
UNTIL (x IN [6..24]);
END;
PROCEDURE remplir (VAR T:TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO
REPEAT
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (T[i]);
UNTIL (T[i] > 0);
END;
FUNCTION maximum (T : TAB ; y : INTEGER):INTEGER;
VAR i , ind : INTEGER;
BEGIN
ind:=1;
FOR i:= 2 TO y DO
IF T[i] > T[ind] THEN ind := i;
maximum := ind;
END;
PROCEDURE afficher (T: TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO WRITELN(T[i]);
END;
BEGIN
lire_entier(n);
remplir(A,n);
FOR i:= 1 TO n DO

Enseignant : AHMED BELHASSEN 145


Algorithmique et programmation

BEGIN
p:= maximum(A,n);
B[i]:=A[p];
A[p]:=-1;
END;
WRITELN ('______________________');
afficher(B,n);
END.
Exercice 17 :
Analyse du programme principal :
Nom : AMIS
Résultat = affichage
affichage=[ ] si ((FN somme_div(m) - m) = n) ET ((FN somme_div(n) - n ) = m) alors
Ecrire (m,″ et ″,n,″ sont deux nombres amis″ )
sinon
Ecrire (m,″ et ″,n,″ ne sont pas deux nombres amis″ )
fin si
m= PROC lire_entier (m)
n = PROC lire_entier (n)
Fin AMIS
TDO
Objet Type/Nature
m,n entier
somme_div fonction
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT AMIS
1) PROC lire_entier (n)
2) PROC lire_entier (m)
3) si ((FN somme_div(m) - m) = n) ET ((FN somme_div(n) - n ) = m) alors
Ecrire (m,″ et ″,n,″ sont deux nombres amis″ )
sinon
Ecrire (m,″ et ″,n,″ ne sont pas deux nombres amis″ )
fin si
4) Fin AMIS

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez un entier strictement Positif″)
Jusqu’à (x > 0)
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez un entier strictement Positif″)
Lire(x)
Jusqu’à (x > 0)
2) Fin lire_entier

Enseignant : AHMED BELHASSEN 146


Algorithmique et programmation

Analyse de la fonction somme_div :


DEF FN somme_div (x : entier) :entier
Résultat = somme_div
somme_div ← s
s =[ s ← 1] pour i de 2 à x faire
si (x MOD i) alors
s← s+i
fin si
fin pour
Fin somme_div
TDOL
Objet Type/Nature
i,s entier

Algorithme de la fonction somme_div :


0) DEF FN somme_div (x: entier) :entier
1) s ← 1
pour i de 2 à x faire
si (x MOD i) alors
s← s+i
fin si
fin pour
2) somme_div ← s
3) Fin somme_div

Traduction en PASCAL
PROGRAM AMIS;
USES WINCRT;
VAR m,n : INTEGER;
PROCEDURE lire_entier (VAR x :INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez un entier strictement Positif'); READLN(x);
UNTIL (x > 0);
END;
FUNCTION somme_div (x : INTEGER): INTEGER;
VAR i,s : INTEGER;
BEGIN
s:=1;
FOR i:= 2 TO x DO
IF (x MOD i) = 0 THEN s:= s + i;
somme_div := s;
END;
BEGIN
lire_entier(m);
lire_entier(n);
IF ((somme_div(m) - m) = n) AND ((somme_div(n) - n ) = m) THEN
WRITELN (m,' et ',n,' sont deux nombres amis')
ELSE WRITELN (m,' et ',n,' ne sont pas deux nombres amis');
END.

Enseignant : AHMED BELHASSEN 147


Algorithmique et programmation

Exercice 18 :
Analyse du programme principal :
Nom : BOUM
Résultat = PROC afficher (m,n)
m= PROC lire_m (m)
n = PROC lire_n (n)
Fin BOUM
TDO
Objet Type/Nature
m,n entier
lire_n procédure
lire_m procédure
comporte fonction
afficher procédure
Algorithme du programme principal :
0) DÉBUT BOUM
1) PROC lire_n (n)
2) PROC lire_m (m)
3) PROC afficher (m,n)
4) Fin BOUM

Analyse de la procédure lire_n :


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

Algorithme de la procédure lire_n :


0) DEF PROC lire_n (var x : entier)
1) Répéter
Ecrire (″Donnez un entier compris entre 100 et 500″)
Lire(x)
Jusqu’à ( x DANS [100..200] )
2) Fin lire_n

Analyse de la procédure lire_m :


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

Algorithme de la procédure lire_m :


0) DEF PROC lire_m (var x : entier)
1) Répéter
Ecrire (″Donnez un entier compris entre 10 et 99″)
Lire(x)
Jusqu’à ( x DANS [10..99])
2) Fin lire_m

Enseignant : AHMED BELHASSEN 148


Algorithmique et programmation

Analyse de la fonction comporte :


DEF FN comporte (n,x : entier) :booléen
Résultat = comporte
comporte=[ ] si ( POS(ch1,ch2) > 0 ) alors
comporte ← vrai
sinon comporte ← faux
fin si
ch2=CONVCH (x, ch2)
ch1=CONVCH (u, ch1)
u ← n MOD 10
Fin comporte
TDOL
Objet Type/Nature
u entier
ch1,ch2 chaine de caractère

Algorithme de la fonction comporte :


0) DEF FN comporte (n,x : entier) :booléen
1) u ← n MOD 10
2) CONVCH (u, ch1)
3) CONVCH (x, ch2)
4) si (POS(ch1,ch2) > 0 ) alors
comporte ← vrai
sinon comporte ← faux
fin si
5) Fin comporte

Analyse de la procédure afficher :


DEF PROC afficher (m,n : entier)
Résultat = affichage
affichage =[ ] pour i de 1 à m faire
si (((n MOD i) = 0) OU FN comporte(n,i)) alors
Ecrire (″*″)
sinon
Ecrire (i ,″ ″)
fin si
fin pour
Fin afficher
TDOL
Objet Type/Nature
i entier
Algorithme de la procédure afficher :
0) DEF PROC afficher ( m,n : entier)
1) pour i de 1 à m faire
si (((n MOD i) = 0) OU FN comporte(n,i)) alors
Ecrire (″*″)
sinon
Ecrire (i ,″ ″)
fin si
fin pour
2) Fin afficher

Enseignant : AHMED BELHASSEN 149


Algorithmique et programmation

Traduction en PASCAL
PROGRAM BOUM;
USES WINCRT;
VAR n,m : INTEGER;
PROCEDURE lire_n (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 100 et 200');
READLN(x);
UNTIL (x IN [100..200]);
END;
PROCEDURE lire_m ( VAR x :INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre 10 et 99');
READLN(x);
UNTIL (x IN [10..99]);
END;
FUNCTION comporte (n,x : INTEGER):BOOLEAN;
VAR u : INTEGER;
ch1,ch2 :STRING;
BEGIN
u:= n MOD 10;
STR (u,ch1);
STR (x,ch2);
IF POS(ch1,ch2) > 0 THEN
comporte := TRUE
ELSE
comporte := FALSE;
END;
PROCEDURE afficher ( m,n : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO m DO
IF (((n MOD i) = 0) OR comporte(n,i)) THEN WRITE('* ')
ELSE WRITE(i,' ');
END;
BEGIN
lire_n(n);
lire_m(m);
afficher(m,n);
END.
Exercice 19 :
Analyse du programme principal :
Nom : MOYENNE
Résultat = Ecrire (″La moyenne arithmétique des éléments Positifs des deux tableau = ″, moy )
moy ←FN calculer (TPOS,nb)
TPOS= PROC ranger (P,Q,n,TPOS,nb)
Q= PROC remplir (Q, n)
P= PROC remplir (P, n)
n = PROC lire_entier (n)
Fin MOYENNE

Enseignant : AHMED BELHASSEN 150


Algorithmique et programmation

Tableau de déclaration des nouveaux types


Type
TAB1 = tableau de 25 réel.
TAB2 = tableau de 50 réel.

TDO
Objet Type/Nature
n , nb entier
P,Q TAB1
TPOS TAB2
moy réel
ranger procédure
calculer fonction
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT MOYENNE
1) PROC lire_entier (n)
2) PROC remplir (P, n)
3) PROC remplir (Q, n)
4) PROC ranger (P,Q,n,TPOS,nb)
5) moy ←FN calculer (TPOS,nb)
6) Ecrire (″La moyenne arithmétique des éléments Positifs des deux tableau = ″, moy )
7) Fin MOYENNE

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille maximale de deux tableaux″)
Jusqu’à (x DANS [1..25])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille maximale de deux tableaux″)
Lire(x)
Jusqu’à (x DANS [1..25])
2) Fin lire_entier

Analyse de la procédure remplir :


DEF PROC remplir (var T: TAB1 ; y : entier)
Résultat = T
T =[ ] pour i de 1 à y faire
T[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
fin pour
Fin remplir
TDOL
Objet Type/Nature
i entier

Enseignant : AHMED BELHASSEN 151


Algorithmique et programmation

Algorithme de la procédure remplir :


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

Analyse de la procédure ranger :


DEF PROC ranger (P,Q : TAB1 ; n : entier ; var TPOS :TAB2 ; var j :entier )
Résultat = rangement
rangement=[ j ← 0] pour i de 1 à n faire
si ( P[i] >= 0 ) alors
j ← j+1
TPOS[j] ← P[i]
fin si
fin pour
pour i de 1 à n faire
si ( Q[i] >= 0 ) alors
j ← j+1
TPOS[j] ← Q[i]
fin si
fin pour

Fin ranger
TDOL
Objet Type/Nature
i entier
Algorithme de la procédure ranger :
0) DEF PROC ranger ( P,Q : TAB1 ; n : entier ; var TPOS :TAB2 ; var j :entier )
1) j ← 0
pour i de 1 à n faire
si ( P[i] >= 0 ) alors
j ← j+1
TPOS[j] ← P[i]
fin si
fin pour
pour i de 1 à n faire
si ( Q[i] >= 0 ) alors
j ← j+1
TPOS[j] ← Q[i]
fin si
fin pour
2) Fin ranger

Analyse de la fonction calculer :


DEF FN calculer ( T :TAB2 ; nb : entier) :réel
Résultat = calculer
calculer ← s / nb
s =[ s ← T[1] ] pour i de 1 à nb faire
s ← s+T[i]
fin pour
Fin calculer

Enseignant : AHMED BELHASSEN 152


Algorithmique et programmation

TDOL
Objet Type/Nature
i entier
s réel

Algorithme de la fonction calculer :


0) DEF FN calculer (T :TAB2 ; nb : entier) :réel
1) s ← T[1]
pour i de 1 à nb faire
s ← s+T[i]
fin pour
2) calculer ← s / nb
3) Fin calculer

Traduction en PASCAL
PROGRAM MOYENNE;
USES WINCRT;
TYPE
TAB1 = ARRAY [1..25] OF REAL;
TAB2 = ARRAY [1..50] OF REAL;
VAR P,Q : TAB1 ;
TPOS : TAB2;
n,nb : INTEGER;
moy : REAL;
PROCEDURE lire_entier (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille maximale de deux tableaux');
READLN(x);
UNTIL (x IN [1..25]);
END;
PROCEDURE remplir (VAR T : TAB1 ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:=1 TO y DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN(T[i]);
END;
END;
PROCEDURE ranger (P,Q : TAB1 ;n : INTEGER; VAR TPOS : TAB2; VAR j:INTEGER);
VAR i : INTEGER;
BEGIN
j:=0;
FOR i:=1 TO n DO
IF P[i] >= 0 THEN
BEGIN
j := j + 1;
TPOS[j] := P[i];
END;
FOR i:= 1 TO n DO
IF Q[i] >= 0 THEN
BEGIN

Enseignant : AHMED BELHASSEN 153


Algorithmique et programmation

j := j + 1;
TPOS[j] := Q[i];
END;
END;
FUNCTION calculer ( T : TAB2 ; nb : INTEGER ):REAL;
VAR s : REAL;
i : INTEGER;
BEGIN
s:= T[1];
FOR i:=2 TO nb DO s := s + T[i];
calculer := s / nb;
END;
BEGIN
lire_entier(n);
remplir(P,n);
remplir(Q,n);
ranger(P,Q,n,TPOS,nb);
moy := calculer (TPOS,nb);
WRITELN ('La moyenne arithmétique des éléments Positifs des deux tableau = ',moy:7:3);
END.

Exercice 20 :
Analyse du programme principal :
Nom : OLYMPIQUE
Résultat = Ecrire (″La moyenne olympique de cet ensemble =″, moy )
moy ←FN moyenne_oly (T,N)
T= PROC remplir (T,N)
N = PROC lire_entier (N)
Fin OLYMPIQUE
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 20 réel.

TDO
Objet Type/Nature
N entier
T TAB
moy réel
moyenne_oly fonction
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT OLYMPIQUE
1) PROC lire_entier (N)
2) PROC remplir (T,N)
3) moy ←FN moyenne_oly (T,N)
4) Ecrire (″La moyenne olympique de cet ensemble =″, moy )
5) Fin OLYMPIQUE

Enseignant : AHMED BELHASSEN 154


Algorithmique et programmation

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille du tableau″)
Jusqu’à (x DANS [5..20])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau″)
Lire(x)
Jusqu’à (x DANS [5..20])
2) Fin lire_entier

Analyse de la procédure remplir :


DEF PROC remplir (var V: TAB ; y : entier)
Résultat = V
V =[ ] pour i de 1 à y faire
V[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 V: TAB ; y : entier)
1) pour i de 1 à y faire
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (V[i])
fin pour
2) Fin remplir

Analyse de la fonction moyenne_oly :


DEF FN moyenne_oly ( V: TAB ; y : entier ) :réel
Résultat = moyenne_oly
moyenne_oly ← (s - min - max) / (y - 2)
(s , max, min) =[ s ← V[1] , max ← s, min ←s ] pour i de 2 à y faire
s ← s + V[i]
si (min >V[i] ) alors
min ← V[i]
sinon si (max <V[i] ) alors
max ← V[i]
fin si
fin pour
Fin moyenne_oly
TDOL
Objet Type/Nature
i entier
max , min , s réel

Enseignant : AHMED BELHASSEN 155


Algorithmique et programmation

Algorithme de la fonction moyenne_oly :


0) DEF FN moyenne_oly ( V: TAB ; y : entier ) :réel
1) s ← V[1] , max ← s , min ←s
pour i de 2 à y faire
s ← s + V[i]
si (min >V[i] ) alors
min ← V[i]
sinon si (max <V[i] ) alors
max ← V[i]
fin si
fin pour
2) moyenne_oly ← (s - min - max) / (y - 2)
3) Fin moyenne_oly

Traduction en PASCAL
PROGRAM OLYMPIQUE;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF REAL;
VAR T : TAB;
N : INTEGER;
moy : REAL;
PROCEDURE lire_entier (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN(x);
UNTIL (x IN [5..20]);
END;
PROCEDURE remplir (VAR V: 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 (V[i]);
END;
END;
FUNCTION moyenne_oly (V : TAB; y : INTEGER):REAL;
VAR
i :INTEGER;
s,min,max :REAL;
BEGIN
s:= V[1];
min := s;
max := s;
FOR i:= 2 TO y DO
BEGIN
s:= s + V[i];
IF min > V[i] THEN min := V[i]
ELSE IF max < V[i] THEN max := V[i];
END;
moyenne_oly:= (s - min - max) / (y - 2);

Enseignant : AHMED BELHASSEN 156


Algorithmique et programmation

END;
BEGIN
lire_entier(N);
remplir(T,N);
moy := moyenne_oly (T,N);
WRITELN ('La moyenne olympique de cet ensemble = ',moy:7:3);
END.

Exercice 21 :
Traduction en PASCAL
PROGRAM Exercice;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR n,k,i,v : INTEGER;
T : TAB;
trv : BOOLEAN;
rt : STRING;
FUNCTION OCCURRENCES( x :INTEGER ; V : TAB ; y : INTEGER) : INTEGER;
VAR nb,i : INTEGER;
BEGIN
nb:=0;
FOR i:= 1 TO y DO
IF V[i] = x THEN nb := nb + 1;
OCCURRENCES := nb;
END;
BEGIN
WRITELN ('Donnez la taille de votre tableau');
READLN (n);
FOR k:= 1 TO n DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',k);
READLN(T[k]);
END;
WRITELN ('Tapez la valeur recherché');
READLN (v);
trv := FALSE;
i:= 0;
REPEAT
i := i + 1;
trv := (T[i] = v);
UNTIL ((i = n) or (trv));
IF (trv) THEN
BEGIN
STR (OCCURRENCES (v,T,n),rt);
rt := ' est dans T ' + rt + ' fois';
END
ELSE rt := ' n"est pas dans T';
WRITELN (v,rt);
END. {Ce programme permet de saisir n entiers dans le tableau T, et d'afficher si un entier v existe ou pas
dans ce tableau}

Enseignant : AHMED BELHASSEN 157


Algorithmique et programmation

Exercice 22 :
Analyse du programme principal :
Nom : FREQUENCE
Résultat = PROC afficher (T, FN indice_max (T))
T=PROC occurrences (texte, n , T)
texte= PROC lire_ch (texte,n)
n = PROC lire_entier (n)
Fin FREQUENCE
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 26 réel.

TDO
Objet Type/Nature
n entier
T TAB
texte chaine de caractère
indice_max fonction
occurrences procédure
lire_entier procédure
lire_ch procédure
afficher procédure

Algorithme du programme principal :


0) DÉBUT FREQUENCE
1) PROC lire_entier (n)
2) PROC lire_ch (texte,n)
3) PROC occurrences (texte, n , T)
4) PROC afficher (T, FN indice_max (T))
5) Fin FREQUENCE

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille de votre chaîne″)
Jusqu’à (x DANS [5..20])
Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille de votre chaîne″)
Lire(x)
Jusqu’à (x DANS [5..20])
2) Fin lire_entier

Analyse de la procédure lire_ch :


DEF PROC lire_ch (var ch : chaine de caractère ; x : entier )
Résultat = ch
ch=[ ] Répéter
ch= donnée (″Tapez votre chaîne″)

Enseignant : AHMED BELHASSEN 158


Algorithmique et programmation

Jusqu’à (LONG (ch) = x)


Fin lire_ch

Algorithme de la procédure lire_ch :


0) DEF PROC lire_ch (var ch : chaine de caractère ; x : entier )
1) Répéter
Ecrire (″Tapez une chaîne non vide ″)
Lire(ch)
Jusqu’à (LONG (ch) = x)
2) Fin lire_ch

Analyse de la procédure occurrences :


DEF PROC occurrences (ch : chaine de caractère ; y : entier ; var V: TAB )
Résultat = V
V =[ ] pour i de 1 à y faire
si ( MAJUS (ch[i]) DANS [″A″..″Z″] ) alors
V[MAJUS(ch[i])] ← V[MAJUS(ch[i])] + 1
fin si
fin pour
Fin occurrences
TDOL
Objet Type/Nature
i entier

Algorithme de la procédure occurrences :


0) DEF PROC occurrences (ch : chaine de caractère ; y : entier ; var V: TAB )
1) pour i de 1 à y faire
si ( MAJUS (ch[i]) DANS [″A″..″Z″] ) alors
V[MAJUS(ch[i])] ← V[MAJUS(ch[i])] + 1
fin si
fin pour
2) Fin occurrences

Analyse de la fonction indice_max :


DEF FN indice_max (V : TAB) :caractère
Résultat = indice_max
indice_max ← max
max =[ i ← ″A″, max ←i ] pour i de ″B″ à ″Z″ faire
si (V[i] > V[max]) alors
max ← i
fin si
fin pour
Fin indice_max

TDOL
Objet Type/Nature
i , max caractère

Algorithme de la fonction indice_max :


0) DEF FN indice_max ( V : TAB) :caractère
1) i ← ″A″, max ←i
pour i de ″B″ à ″Z″ faire
si (V[i] > V[max]) alors

Enseignant : AHMED BELHASSEN 159


Algorithmique et programmation

max ← i
fin si
fin pour
2) indice_max ← max
3) Fin indice_max

Analyse de la procédure afficher :


DEF PROC afficher ( V : TAB ; ind :caractère )
Résultat = affichage
affichage =[ ] pour i de ind à ″Z″ faire
si (V[ind] =V[i]) alors
Ecrire(i)
fin si
fin pour
Fin afficher

TDOL
Objet Type/Nature
i caractère

Algorithme de la procédure afficher :


0) DEF PROC afficher ( V : TAB ; ind :caractère )
1) pour i de ind à ″Z″ faire
si (V[ind] =V[i]) alors
Ecrire(i)
fin si
fin pour
2) Fin afficher

Traduction en PASCAL
PROGRAM FREQUENCE;
USES WINCRT;
TYPE TAB = ARRAY ['A'..'Z'] OF INTEGER;
VAR n : INTEGER;
T : TAB;
texte: STRING;
PROCEDURE lire_entier (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille de votre chaîne');
READLN(x);
UNTIL (x IN [5..20]);
END;
PROCEDURE lire_ch (VAR ch : STRING ; x :INTEGER);
BEGIN
REPEAT
WRITELN ('Tapez votre chaîne');
READLN (ch);
UNTIL (LENGTH (ch) = x);
END;
PROCEDURE occurrences (ch : STRING ; y : INTEGER; VAR V :TAB );
VAR i : INTEGER;
BEGIN

Enseignant : AHMED BELHASSEN 160


Algorithmique et programmation

FOR i:= 1 TO y DO
IF UPCASE (ch[i]) IN ['A'..'Z'] THEN
V[UPCASE(ch[i])] := V[UPCASE(ch[i])] + 1;
END;
FUNCTION indice_max(V:TAB) : CHAR;
VAR max,i : CHAR;
BEGIN
i:='A';
max := i;
FOR i:= 'B' TO 'Z' DO
IF V[i] > V[max] THEN max := i;
indice_max := max;
END;
PROCEDURE afficher (V:TAB ; ind:CHAR);
VAR i: CHAR;
BEGIN
WRITELN ('Le(s) lettre(s) alphabétique(s)le(s) plus utilisée(s):');
FOR i:=ind TO 'Z' DO
IF V[ind] = V[i] THEN WRITELN (i);
END;
BEGIN
lire_entier (n);
lire_ch (texte,n);
occurrences (texte,n,T);
afficher(T,indice_max(T));
END.

Exercice 23 :
Analyse du programme principal :
Nom : AFFICHAGE
Résultat = PROC afficher (CHM)
CHM =PROC lire_chaine (CHM)
Fin AFFICHAGE
TDO
Objet Type/Nature
CHM chaine de caractère
lire_chaine procédure
afficher procédure

Algorithme du programme principal :


0) DÉBUT AFFICHAGE
1) PROC lire_chaine (CHM)
2) PROC afficher (CHM)
3) Fin AFFICHAGE

Analyse de la procédure lire_chaine :


DEF PROC lire_chaine (var ch : chaine de caractère)
Résultat = ch
ch=[ ] Répéter
ch= donnée (″Tapez une chaîne″)
Jusqu’à (LONG (ch) >= 5)
Fin lire_chaine

Enseignant : AHMED BELHASSEN 161


Algorithmique et programmation

Algorithme de la procédure lire_chaine :


0) DEF PROC lire_chaine (var ch : chaine de caractère)
1) Répéter
Ecrire (″Tapez une chaîne″)
Lire (ch)
Jusqu’à (LONG (ch) >= 5)
2) Fin lire_chaine

Analyse de la procédure afficher :


DEF PROC afficher ( ch : chaine de caractère )
Résultat = affichage
affichage =[ ch1←″ ″ ] pour i de 1 à LONG (ch) faire
ch1 ← SOUS_CHAINE (ch,1,i) + SOUS_CHAINE (ch , LONG (ch) - i + 1, i )
Ecrire (ch1)
fin pour
Fin afficher

TDOL
Objet Type/Nature
i entier
ch1 chaine de caractère

Algorithme de la procédure afficher :


0) DEF PROC afficher ( ch : chaine de caractère )
1) ch1←″ ″
pour i de 1 à LONG (ch) faire
ch1 ← SOUS_CHAINE (ch,1,i) + SOUS_CHAINE (ch , LONG (ch) - i + 1, i )
Ecrire (ch1)
fin pour
2) Fin afficher

Traduction en PASCAL
PROGRAM AFFICHAGE;
USES WINCRT;
VAR CHM : STRING;
PROCEDURE lire_chaine (VAR ch : STRING);
BEGIN
REPEAT
WRITELN ('Tapez une chaîne');
READLN (ch);
UNTIL (LENGTH (ch) >= 5);
END;
PROCEDURE afficher ( ch : STRING);
VAR i : INTEGER;
ch1: STRING;
BEGIN
FOR i:= 1 TO LENGTH (ch) DO
BEGIN
ch1 := COPY (ch,1,i) + COPY (ch,LENGTH(ch) - i + 1,i);
WRITELN (ch1);
END;
END;

Enseignant : AHMED BELHASSEN 162


Algorithmique et programmation

BEGIN
lire_chaine (CHM);
afficher (CHM);
END.

Exercice 24 :
Analyse du programme principal :
Nom : JEU
Résultat = Ecrire (″Le joueur gagnant c"est le joueur N°″, FN gagnant (joueur1, joueur2))
(joueur1, joueur2)=PROC jouer (joueur1, joueur2)
Fin JEU
TDO
Objet Type/Nature
joueur1, joueur2 entier
jouer procédure
gagnant fonction

Algorithme du programme principal :


0) DÉBUT JEU
1) PROC jouer (joueur1, joueur2)
2) Ecrire (″Le joueur gagnant c"est le joueur N°″, FN gagnant (joueur1, joueur2))
3) Fin JEU

Analyse de la procédure jouer :


DEF PROC jouer (var score1, score2 : entier )
Résultat = (score1, score2)
(score1, score2)=[ score1 ←0, score2 ←0 , RANDOMIZE ] Répéter
l1 ← ALEA (6) + 1
l2 ← ALEA (6) + 1
Ecrire ( l1, ″ ″,l2)
si l1 > l2 alors
score1← score1 + 1
sinon si l1 < l2 alors
score2 ← score2 + 1
fin si
Jusqu’à ((score1 = 10) OU (score2 = 10))
Fin jouer

TDOL
Objet Type/Nature
l1,l2 entier
Algorithme de la procédure jouer :
0) DEF PROC jouer (var score1, score2 : entier )
1) score1 ←0, score2 ←0 , RANDOMIZE
Répéter
l1 ← ALEA (6) + 1
l2 ← ALEA (6) + 1
Ecrire ( l1, ″ ″,l2)
si l1 > l2 alors
score1← score1 + 1
sinon si l1 < l2 alors

Enseignant : AHMED BELHASSEN 163


Algorithmique et programmation

score2 ← score2 + 1
fin si
Jusqu’à ((score1 = 10) OU (score2 = 10))
2) Fin jouer

Analyse de la fonction gagnant :


DEF FN gagnant (score1, score2 : entier ) :entier
Résultat = gagnant
gagnant=[ ] si score1 > score2 alors
gagnant ← 1
sinon
gagnant ← 2
fin si
Fin gagnant

Algorithme de la fonction gagnant :


0) DEF FN gagnant (score1, score2 : entier ) :entier
1) si score1 > score2 alors
gagnant ← 1
sinon
gagnant ← 2
fin si
2) Fin gagnant

Traduction en PASCAL
PROGRAM JEU;
USES WINCRT;
VAR joueur1, joueur2 : INTEGER;
PROCEDURE jouer (VAR score1, score2 :INTEGER);
VAR l1,l2 : INTEGER;
BEGIN
score1 := 0; score2 := 0; RANDOMIZE;
REPEAT
l1 := RANDOM (6) + 1;
l2 := RANDOM (6) + 1;
WRITELN ( l1, ' ',l2);
IF l1 > l2 THEN score1 := score1 + 1
ELSE IF l1 < l2 THEN score2 := score2 + 1;
UNTIL ((score1 = 10) OR (score2 = 10));
END;
FUNCTION gagnant (score1,score2 : INTEGER): INTEGER;
BEGIN
IF score1 > score2 THEN gagnant := 1 ELSE gagnant := 2;
END;
BEGIN
jouer (joueur1,joueur2);
WRITELN ('Le joueur gagnant c"est le joueur N° ', gagnant (joueur1,joueur2));
END.

Enseignant : AHMED BELHASSEN 164


Algorithmique et programmation

Exercice 25 :
Analyse du programme principal :
Nom : SEQUENCE
Résultat = Ecrire (″La valeur maximal dans cet intervalle = ″,V_max ,″ La valeur minimal dans cet intervalle
=″, V_min)
V_min ← FN min (T,i,j)
V_max ← FN max (T,i,j)
j ←FN lire_entier (i,n)
i ←FN lire_entier (1,n)
T = PROC remplir (T,n)
n = PROC lire_n (n)
Fin SEQUENCE
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 20 entiers.

TDO
Objet Type/Nature
i,j,n,V_max,V_min entier
T TAB
min fonction
max fonction
lire_entier fonction
remplir procédure
lire_n procédure

Algorithme du programme principal :


0) DÉBUT SEQUENCE
1) PROC lire_n (n)
2) PROC remplir (T,n)
3) i ←FN lire_entier (1,n)
4) j ←FN lire_entier (i,n)
5) V_max ← FN max (T,i,j)
6) V_min ← FN min (T,i,j)
7) Ecrire (″La valeur maximal dans cet intervalle = ″,V_max ,″ La valeur minimal dans cet intervalle =″, V_min)
8) Fin SEQUENCE

Analyse de la procédure lire_n :


DEF PROC lire_n (var x : Entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille du tableau″)
Jusqu’à (x DANS [2..20])
Fin lire_n

Algorithme de la procédure lire_n :


0) DEF PROC lire_n (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau″)
Lire(x)
Jusqu’à (x DANS [2.. 20])
2) Fin lire_n

Enseignant : AHMED BELHASSEN 165


Algorithmique et programmation

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 fonction lire_entier :


DEF FN lire_entier ( x,y : entier) :entier
Résultat = lire_entier
lire_entier ← z
z=[ ] Répéter
z= donnée (″Donnez un entier compris entre ″, x , ″et″, y)
Jusqu’à (z DANS [x..y ])
Fin lire_entier
TDOL
Objet Type/Nature
z entier

Algorithme de la fonction lire_entier :


0) DEF FN lire_entier ( x,y : entier) :entier
1) Répéter
Ecrire (″Donnez un entier compris entre ″, x , ″et″, y)
Lire(z)
Jusqu’à (z DANS [x..y ])
2) lire_entier ← z
3) Fin lire_entier

Analyse de la fonction max :


DEF FN max (V :TAB ; x,y : entier) :entier
Résultat = max
max ← Vmax
Vmax =[ Vmax ← V[x] ] pour i de x+1 à y faire
si Vmax < V[i] alors
Vmax ← V[i]
fin si
fin pour
Fin max
TDOL
Objet Type/Nature
i,Vmax entier

Enseignant : AHMED BELHASSEN 166


Algorithmique et programmation

Algorithme de la fonction max :


0) DEF FN max (V :TAB ; x,y : entier) :entier
1) Vmax ← V[x]
pour i de x+1 à y faire
si Vmax < V[i] alors
Vmax ← V[i]
fin si
fin pour
2) max ← Vmax
3) Fin max

Analyse de la fonction min :


DEF FN min (V :TAB ; x,y : entier) :entier
Résultat = min
min ← Vmin
Vmin =[ Vmin ← V[x] ] pour i de x+1 à y faire
si Vmin > V[i] alors
Vmin ← V[i]
fin si
fin pour
Fin min
TDOL
Objet Type/Nature
i,Vmin entier

Algorithme de la fonction min :


0) DEF FN min (V :TAB ; x,y : entier) :entier
1) Vmin ← V[x]
pour i de x+1 à y faire
si Vmin > V[i] alors
Vmin ← V[i]
fin si
fin pour
2) min ← Vmin
3) Fin min

Traduction en PASCAL
PROGRAM SEQUENCE;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
VAR i,j,n,V_max,V_min : INTEGER;
T : TAB;
PROCEDURE lire_n (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN (x);
UNTIL (x IN [2..20]);
END;
PROCEDURE remplir (VAR V : TAB ; y : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO

Enseignant : AHMED BELHASSEN 167


Algorithmique et programmation

BEGIN
WRITELN ('Donnez la valeur de l"éléments N° ',i);
READLN (V[i]);
END;
END;
FUNCTION lire_entier (x,y : INTEGER):INTEGER;
VAR z : INTEGER;
BEGIN
REPEAT
WRITELN ('Donnez un entier compris entre ',x,' et ',y);
READLN (z);
UNTIL (z IN [x..y]);
lire_entier := z;
END;
FUNCTION max ( V: TAB; x,y: INTEGER):INTEGER;
VAR i, Vmax :INTEGER;
BEGIN
Vmax := V[x];
FOR i:= x + 1 TO y DO
IF Vmax < V[i] THEN Vmax := V[i];
max := Vmax;
END;
FUNCTION min (V:TAB;x,y:INTEGER):INTEGER;
VAR i,Vmin:INTEGER;
BEGIN
Vmin := V[x];
FOR i:= x + 1 TO y DO
IF Vmin > V[i] THEN Vmin := V[i];
min := Vmin;
END;
BEGIN
lire_n (n);
remplir (T,n);
i:=lire_entier (1,n);
j:=lire_entier (i,n);
V_max := max (T,i,j);
V_min := min (T,i,j);
WRITELN ('La valeur maximal dans cet intervalle = ',V_max, 'La valeur minimal dans cet intervalle =
',V_min);
END.

Exercice 26 :
Analyse du programme principal :
Nom : TRIANGLE
Résultat = PROC afficher (ch)
ch =PROC lire_chaine (ch)
Fin TRIANGLE
TDO
Objet Type/Nature
ch chaine de caractère
lire_chaine procédure
afficher procédure

Enseignant : AHMED BELHASSEN 168


Algorithmique et programmation

Algorithme du programme principal :


0) DÉBUT TRIANGLE
1) PROC lire_chaine (ch)
2) PROC afficher (ch)
3) Fin TRIANGLE

Analyse de la procédure lire_chaine :


DEF PROC lire_chaine (var ch : chaine de caractère)
Résultat = ch
ch=[ ] Répéter
ch= donnée (″Tapez une chaîne″)
Jusqu’à (LONG(ch) >= 3)
Fin lire_chaine

Algorithme de la procédure lire_chaine :


0) DEF PROC lire_chaine (var ch : chaine de caractère)
1) Répéter
Ecrire (″Tapez une chaîne″)
Lire (ch)
Jusqu’à (LONG(ch) >= 3)
2) Fin lire_chaine

Analyse de la procédure afficher :


DEF PROC afficher (ch : chaine de caractère )
Résultat = affichage
affichage =[ ] pour i de 1 à LONG (ch) faire
Ecrire ( SOUS_CHAINE (ch,1,i) )
fin pour
Fin afficher

TDOL
Objet Type/Nature
i entier

Algorithme de la procédure afficher :


0) DEF PROC afficher (ch : chaine de caractère )
1) pour i de 1 à LONG (ch) faire
Ecrire (SOUS_CHAINE (ch,1,i) )
fin pour
2) Fin afficher

Traduction en PASCAL
PROGRAM TRIANGLE;
USES WINCRT;
VAR ch : STRING;
PROCEDURE lire_chaine (VAR ch : STRING);
BEGIN
REPEAT
WRITELN ('Tapez une chaîne');
READLN (ch);
UNTIL (LENGTH (ch) >= 3);
END;
PROCEDURE afficher (ch:STRING);

Enseignant : AHMED BELHASSEN 169


Algorithmique et programmation

VAR i,l : INTEGER;


BEGIN
FOR i:= 1 TO LENGTH (ch) DO
WRITELN (COPY (ch,1,i));
END;
BEGIN
lire_chaine (ch);
afficher (ch);
END.

Exercice 27 :
Analyse du programme principal :
Nom : CRYPTER
Résultat = PROC afficher (R , N)
R=[ ] pour i de 1 à N faire
code1 ← ORD(T[i])
code2 ← FN permuter (code1)
R[i] ← CHR (code2)
fin pour
T = PROC remplir (T, N)
N = PROC lire_entier (N)
Fin CRYPTER
Tableau de déclaration des nouveaux types
Type
TAB = tableau de 20 caractère.

TDO
Objet Type/Nature
N, i ,code1,code2 entier
T, R TAB
afficher procédure
permuter fonction
remplir procédure
lire_entier procédure

Algorithme du programme principal :


0) DÉBUT CRYPTER
1) PROC lire_entier (N)
2) PROC remplir (T, N)
3) pour i de 1 à N faire
code1 ← ORD(T[i])
code2 ← FN permuter (code1)
R[i] ← CHR (code2)
fin pour
4) PROC afficher (R , N)
5) Fin CRYPTER

Analyse de la procédure lire_entier :


DEF PROC lire_entier (var x : entier)
Résultat = x
x=[ ] Répéter
x= donnée (″Donnez la taille du tableau″)

Enseignant : AHMED BELHASSEN 170


Algorithmique et programmation

Jusqu’à (x DANS [3..19])


Fin lire_entier

Algorithme de la procédure lire_entier :


0) DEF PROC lire_entier (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau″)
Lire(x)
Jusqu’à (x DANS [3..19])
2) Fin lire_entier

Analyse de la procédure remplir :


DEF PROC remplir (var V: TAB ; x : entier)
Résultat = V
V =[ ] pour i de 1 à x faire
V[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 V : TAB ; x : entier)
1) pour i de 1 à x faire
Ecrire (″Donnez la valeur de l"élément N° ″, i)
Lire (V[i])
fin pour
2) Fin remplir

Analyse de la procédure afficher :


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

Algorithme de la procédure afficher :


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

Analyse de la fonction chercher :


DEF FN permuter (x : entier) : entier
Résultat = permuter
permuter ← ((x DIV 100) * 100) + (u*10) + d
d ← (x MOD 100) DIV 10

Enseignant : AHMED BELHASSEN 171


Algorithmique et programmation

u ← x MOD 10
Fin permuter
TDOL
Objet Type/Nature
u,d entier

Algorithme de la fonction permuter :


0) DEF FN permuter (x : entier) :entier
1) u ← x MOD 10
2) d ← (x MOD 100) DIV 10
3) permuter ← ((x DIV 100) * 100) + (u*10) + d
4) Fin permuter

Traduction en PASCAL
PROGRAM CRYPTER;
USES WINCRT;
TYPE
TAB = ARRAY [1..19] OF CHAR;
VAR T,R : TAB;
N,i,code1,code2 :INTEGER;
PROCEDURE lire_entier (VAR x : INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN (x);
UNTIL (x IN [3..19]);
END;
PROCEDURE remplir (VAR V : TAB ; x : INTEGER);
VAR i : INTEGER;
BEGIN
FOR i:=1 TO x DO
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (V[i]);
END;
END;
FUNCTION permuter (x : INTEGER):INTEGER;
VAR u,d : INTEGER;
BEGIN
u:= x MOD 10;
d:= (x MOD 100) DIV 10;
permuter:= ((x DIV 100) * 100) + (u*10) + d;
END;

PROCEDURE afficher (V:TAB; y:INTEGER);


VAR i : INTEGER;
BEGIN
FOR i:= 1 TO y DO WRITELN (V[i]);
END;
BEGIN
lire_entier (N);
remplir (T,N);
FOR i:= 1 TO N DO

Enseignant : AHMED BELHASSEN 172


Algorithmique et programmation

BEGIN
code1 := ORD(T[i]);
code2 := permuter (code1);
R[i] := CHR (code2);
END;
afficher (R,N);
END.
Exercice 28 :
Traduction en PASCAL
PROGRAM COMPOSE;
USES WINCRT;
TYPE TAB = ARRAY[1..6] OF INTEGER ;
VAR N:INTEGER; T:TAB;
PROCEDURE lire_entier (VAR x:INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez un entier non nul composé de trois chiffres');
READLN (x);
UNTIL ((x >= 100) AND (x <= 999));
END;
PROCEDURE Former (VAR V:TAB; x : INTEGER);
VAR u,d,c : INTEGER;
BEGIN
c:= x DIV 100; d:= (x MOD 100) DIV 10; u := x MOD 10;
V[1] := x;
V[2] := (c*100) + (u*10) + d;
V[3] := (u*100) + (d*10) + c;
V[4] := (u*100) + (c*10) + d;
V[5] := (d*100) + (c*10) + u;
V[6] := (d*100) + (u*10) + c;
END;
PROCEDURE afficher (V:TAB);
VAR i:INTEGER;
BEGIN
FOR i:= 1 TO 6 DO WRITE (V[i]:5);
WRITELN;
END;
FUNCTION Min (V:TAB):INTEGER;
VAR i,x : INTEGER;
BEGIN
x:= V[1];
FOR i:= 2 TO 6 DO IF V[i] < x THEN x:= V[i];
Min := x;
END;
FUNCTION Max (V:TAB):INTEGER;
VAR i,x : INTEGER;
BEGIN
x:= V[1];
FOR i:= 2 TO 6 DO
IF V[i] > x THEN x:= V[i];
Max := x;
END;

Enseignant : AHMED BELHASSEN 173


Algorithmique et programmation

BEGIN
lire_entier (N);
Former (T,N);
WRITE ('Les nombres Formés par les chiffres de ',N,' sont:');
Afficher (T);
WRITELN ('Le plus petit nombre est ', Min (T), 'Le plus grand nombre est ', Max (T));
END.
Exercice 29 :
Traduction en PASCAL
PROGRAM ECART_MINIMAL;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
VAR v:TAB; n,i,s1,s2:INTEGER;
PROCEDURE lire_entier (VAR x:INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN (x);
UNTIL (x IN [5..20]);
END;
PROCEDURE saisir (VAR t:TAB ;n:INTEGER);
VAR i:INTEGER;
BEGIN
FOR i := 1 TO n DO
BEGIN
REPEAT
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (t[i]);
UNTIL (T[i] >= 0);
END;
END;

FUNCTION somme (T:TAB;p1,p2:INTEGER):INTEGER;


VAR
s,i :INTEGER;
BEGIN
s := 0;
FOR i := p1 TO p2 DO
s := s + t[i];
somme := s;
END;
BEGIN
lire_entier (n);
saisir (v,n);
i := 1;
REPEAT
i := i + 1;
s1 := somme (v,1,i-1);
s2 := somme (v,i+1,n);
UNTIL (s1 >= s2) OR (i = n-1);
WRITELN ('S1 = ',s1,' , S2 = ',s2,' et ind = ',i); END.

Enseignant : AHMED BELHASSEN 174


Algorithmique et programmation

Exercice 30 :
Traduction en PASCAL
PROGRAM DIVISEURS_MULTIPLES;
USES WINCRT;
TYPE TAB = ARRAY [1..15] OF INTEGER;
VAR ind_inf,ind_sup,n,p,i :INTEGER;
T:TAB;
diviseurs,multiples,ch: STRING ;

PROCEDURE lire_entier (VAR x:INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau');
READLN (x);
UNTIL ( x IN [1..15]);
END;

PROCEDURE remplir (VAR T:TAB; n:INTEGER);


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

FUNCTION diviseur (x,y:INTEGER):BOOLEAN;


BEGIN
diviseur := FALSE;
IF (y MOD x) = 0 THEN diviseur := TRUE;
END;
BEGIN
lire_entier (n);
remplir (T,n);
REPEAT
WRITELN ('Donnez l"indice supérieur');
READLN (ind_sup);
UNTIL ( ind_sup IN [2..n]);
REPEAT
WRITELN ('Donnez l"indice inférieur');
READLN (ind_inf);
UNTIL (ind_inf in [1..ind_sup-1]);
WRITELN ('Tapez l"entier qu"on cherche ces diviseurs et multiples');
READLN (p);
FOR i:= ind_inf TO ind_sup DO
IF T[i] < p THEN
BEGIN
IF diviseur(T[i],p) THEN
BEGIN
STR (T[i],ch);
diviseurs := diviseurs + ch + ' ';

Enseignant : AHMED BELHASSEN 175


Algorithmique et programmation

END;
END
ELSE
IF diviseur (p,T[i]) THEN
BEGIN
STR (T[i],ch);
multiples := multiples + ch + ' ';
END;
WRITELN ('Les diviseurs de ',p,' sont : ',diviseurs);
WRITELN ('Les multiples de ',p,' sont : ',multiples);
END.
Exercice 31 :
Traduction en PASCAL
PROGRAM ROTATION;
USES WINCRT;
TYPE
TAB = ARRAY [1..25] OF REAL ;
VAR
A,B:TAB;
n,k: INTEGER;
PROCEDURE lire_entier (VAR x :INTEGER);
BEGIN
REPEAT
WRITELN ('Donnez la taille du tableau A');
READLN (x);
UNTIL (x IN [2..25]);
END;

PROCEDURE remplir (VAR T: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 (T[i]);
END;
END;

PROCEDURE lire_k(VAR x,y:INTEGER);


BEGIN
REPEAT
WRITELN ('Donnez le nombre d"éléments de rotation');
READLN (x);
UNTIL (x IN [1..y-1]);
END;

PROCEDURE pivoter (VAR A,B:TAB;k,n:INTEGER);


VAR
i:INTEGER;
BEGIN
FOR i:= 1 TO n DO

Enseignant : AHMED BELHASSEN 176


Algorithmique et programmation

IF ((i - k) >= 1) THEN


B[i - k] := A[i]
ELSE
B[n - k + i] := A[i];
END;

PROCEDURE afficher (T:TAB;y:INTEGER);


VAR
i:INTEGER;
BEGIN
FOR i:= 1 TO y DO
WRITELN (T[i]:6:3);
END;
BEGIN
lire_entier (n);
remplir (A,n);
lire_k (k,n);
pivoter (A,B,k,n);
afficher (B,n);
END.

Enseignant : AHMED BELHASSEN 177

Das könnte Ihnen auch gefallen