Beruflich Dokumente
Kultur Dokumente
Chapitre
Les structures de
données
Objectifs spécifiques :
Plan de chapitre :
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
Exemple
PI Constante = 3.14
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 ;
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 :
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
Exemple m Réel
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 :
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
Remarque : Le langage PASCAL a cinq types entiers prédéfinis. Chaque type a un domaine de
définition spécifique.
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).
v) Applications :
Application 1 :
Est ce qu’on peut utiliser le type entier pour représenter les quantités suivantes :
E = 13 + 52 MOD 10 * 3 - 5 / 2 = 13 + 2 * 3 - 5/2
= 13 + 6 - 2.5
= 19 - 2.5
= 16.5
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 ?
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
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
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 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)
x³
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.
10
10*x/2+x 2+
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
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.
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.
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
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
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.
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 :
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.
Objet Type/nature
Nom Chaine
Général
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"
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
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"
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
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"
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)
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′′.
Types
Nom de type = (valeur 1, valeur 2, valeur 3, ……………..)
Objet Type/nature
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)
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 : <, >, <=, >=, =, <>
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)
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 :
b) Déclaration :
En algorithme :
Types
Nom de type = borne_inf..borne_sup
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
Objet Type/nature
mois_actuel mois
j jours
En PASCAL :
TYPE mois = 1..12 ;
jours = 1..31 ;
VAR mois_actuel : mois ;
j : jours ;
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.
g) e := ORD (stylo); = 0.
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.
c) Déclaration :
En algorithme :
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 ;
Exemple :
VAR Moyenne : ARRAY [1..5] OF REAL ;
VAR DC : ARRAY [1..5] OF REAL;
VAR Tnom : ARRAY [1..30] OF STRING;
Types
T-Moy = Tableau de 5 réel
T-DC = Tableau de 5 réel
Nom = Tableau de 30 chaînes de caractères
Objets Type/Nature
Moyenne T-Moy
DC T-DC
Tnom Nom
En PASCAL :
d) Applications :
Application 1 :
Soient les instructions suivantes :
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
Objets Type/Nature
T TAB1
V TAB2
En 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 "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 "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
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 :
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 :
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 ;
Types
Nom du type = tableau de taille et de type
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.
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
Objets Type/Nature
M Tableau 3 colonnes et 3 lignes d’entiers
En PASCAL :
VAR M : ARRAY [ 1..3 , 1..3 ] OF INTEGER ;
5 2 7
M 3 6 7
5 5 15
Chapitre
Les structures simples
Objectifs spécifiques :
Plan du chapitre :
I) L’affectation
II) L’opération de sortie
III) L’opération d’entrée
Temps prévue : 4h
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
x ← 50 0 0 0
50 50 50
y ← 340 0 0 0
50 340 50
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
33 217 x + y - 190
67 217 467
17 557 34
67 217 651
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 :
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
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.
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
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
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) ;
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.
Chapitre
Les structures de
contrôle
conditionnelles
Objectifs spécifiques :
Plan :
Temps prévue : 6h
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 ;
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
• 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;
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
Moyenne ] ] ] ]
10 12 14 16
Faible Passable
Bien Très Bien
Assez Bien
Solution :
Vrai
Si moy < 10 Mention ← "Faible"
moy <12
Faux Mention ← "Passable"
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°.
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
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
Chapitre
Les structures de
contrôle itératives
Objectifs spécifiques :
Plan :
Temps prévue : 8h
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
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
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
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
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 :
{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) ;
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
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
3) Vocabulaire et syntaxe :
{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
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
Chapitre
Les sous programmes
Objectifs spécifiques :
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
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.
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
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).
3) Vocabulaire et syntaxe :
En analyse
DEF FN nom_de_la_fonction (arguments : type_arguments) : type_de_résultat
Résultat = nom_de_la fonction
nom_de_la_fonction ← expression
………………………..
Fin nom_de_la_fonction
En algorithme
0) DEF FN nom_de_la_fonction (arguments : type_arguments) : type_de_résultat
1)………………………….
2)…………………………
………………………….
n-1 ) nom_de_la_fonction ← expression
n) Fin nom_de_la_fonction
En PASCAL
FUNCTION nom_de_la_fonction (arguments : type_arguments) : type_de_résultat ;
TYPE
Déclaration des types locaux ;
VAR
Déclaration des variables locaux ;
BEGIN
Instructions de la fonction ;
nom_de_la_fonction := expression ;
END ;
4) 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 ;
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
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.
Constatations :
D’après cette activité on remarque qu’il y a un bloc d’instructions qui se répète (au niveau d’affichage
de mot1 et celle de mot2).
Solution :
Pour éviter cette répétition, on peut isoler ce bloc d’instructions qui se répète et d’en faire un
module et d’appeler ce module autant de fois que nécessaire.
On remarque aussi que le résultat de ce module n’est pas unique, donc on ne peut pas utiliser une
fonction.
Ce pour cette raison on peut utiliser le deuxième type de sous-programme : la procédure.
2) Définition :
Les procédures sont des sous-programmes qui peuvent avoir plusieurs résultats (Le nombre
des résultats retournés par une procédure est appartient à [0..n]). Le seul cas ou la procédure
retourne 0 résultat c’est le cas de procédure d’affichage. Une fonction est un cas particulier de
procédure.
3) Vocabulaire et syntaxe :
En analyse
DEF PROC nom_de_la_procédure (arguments : type_arguments)
Résultat =
………………………..
Fin nom_de_la_procédure
En algorithme
0) DEF PROC nom_de_la_procédure (arguments : type_arguments)
1)………………………….
2)…………………………
………………………….
n) Fin nom_de_la_procédure
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 ;
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.
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.
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.
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.
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.
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.
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.
Sens du transfert :
Programme appelant Sous-programme appelé
Sens du transfert :
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.
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
Chapitre
Les algorithmes
avancées
Objectifs spécifiques :
Plan :
Temps prévue : 8h
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.
TDO
Objet Type/Nature
N entier
T TAB
Affiche Procédure
Remplir Procédure
Lecture Procédure
Tri_selection Procédure
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
Traduction en PASCAL
PROGRAM Tri_methode_par_selection ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;
BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_selection (T, N) ;
Affiche (T, N) ;
END.
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.
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
Traduction en PASCAL
PROGRAM Tri_methode_a_bulles ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;
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;
BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_bulles (T, N) ;
Affiche (T, N) ;
END.
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
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.
TDO
Objet Type/Nature
N entier
T TAB
Affiche Procédure
Remplir Procédure
Lecture Procédure
Tri_insertion Procédure
Traduction en PASCAL
PROGRAM Tri_methode_par_insertion ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N : INTEGER;
T: TAB;
BEGIN
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[i]);
END;
END;
BEGIN
Lecture (N) ;
Remplir (T, N) ;
Tri_insertion (T, N) ;
Affiche (T, N) ;
END.
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
Traduction en PASCAL
PROGRAM Recherche_seq ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N , x : INTEGER;
T: TAB; res : STRING ;
BEGIN
Lecture (N) ;
Remplir (T, N) ;
Saisir_x ( x );
IF (Recherche(T, N, x) = TRUE) THEN
res :=′ existe dans T ′
ELSE
res := ′ n′′existe pas dans T ′ ;
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.
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
Traduction en PASCAL
PROGRAM Recherche_dech ;
USES WINCRT;
TYPE TAB = ARRAY [1..100] OF INTEGER;
VAR N , x : INTEGER;
T: TAB; res : STRING ;
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.
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 :
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
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
Exercice 3 :
Evaluez les expressions suivantes :
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
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
ea/(4+2)*6 = 108 / ( 4 + 2 ) * 6
= 108 / 6 * 6
= 18 * 6
= 108
Exercice 7 :
Ecrire les formules suivantes en algorithmique et en Pascal :
A= B =| x3| C= D = x4+4x3+x2+2x+1
Équivalents
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 :
= (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
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.
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)
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
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)))
Correction de série
d’exercices n°2
Les structures de données
-Le type booléen-
Exercice 1 :
Evaluer les expressions suivantes :
c) (4 <= 4) AND (4< 4) OR (4 = 4) AND (4 <> 4) = TRUE AND FALSE OR TRUE AND FALSE
= FALSE OR FALSE
= FALSE
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
((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
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 :
2) ( a,b,c,d )=(4,2,1,9)
A = (4<2) AND (1>9)
= FALSE AND FALSE
= FALSE
2) ( a,b,c,d )=(4,2,1,9)
B = (2=9) AND NOT(4<1)
= FALSE AND NOT(FALSE)
= FALSE AND 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
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
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
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))
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
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
Exercice 2 :
Compléter le tableau en évaluant les expressions logiques :
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)
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)
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 :
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)
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
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)
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")
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) ……………………… ……………………… ………………………
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.
Exercice 5 :
Soient les variables suivantes :
ch1 = ′′Lunette′′
ch2=′′si′′
ch3=′′une′′
Compléter le tableau suivant :
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
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
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 :
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 :
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=……………………………………
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"
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″
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 :
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″
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 …………………………
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 ;
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);
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 ?
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 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
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[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]
Exercice 2 :
Soit trois tableaux T1, T2, T3 et soit les affectations suivantes :
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])
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])
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 ;
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
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 :
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
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
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
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
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.
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
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)
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
TDO
Objet Type/Nature
n , i , j , nbr , l Entier
t Tableau de 100 entiers
c Caractère
ch Chaine de caractère
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
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
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
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
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
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.
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.
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 :
. .
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
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
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
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.
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
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
F H Y K P
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
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
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
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
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;
REPEAT
WRITELN ('Donnez la valeur de l"élément N° ',i);
READLN (vec[ i ]);
UNTIL (vec[ i ] > 0);
END;
END;
BEGIN
Taille (N) ;
Remplir (N , A) ;
Tri_tab (N , A , B) ;
Affiche (N , B) ;
END.
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 ] .
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 ] .
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 ] .
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
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
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)
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.
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 ) .
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=
Exercice 8 : Donner le type et le résultat des expressions suivantes, ou bien dire si elles ne sont pas bien
formées.
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 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]
Exercice 14 :
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 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.
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 )
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 à + )
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 :
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″
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
Exercice 13 :
N° 1 2 3 4 5 6 7 8
Affectation X X X X
Exercice 14 :
1.
a b c d
0
5
5
5
25
a b
8
3
2.
Exercice 15 :
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
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 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.
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.
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.
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
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
TDO
Objet Type / nature
a,b,c Réel
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
TDO
Objet Type / nature
verbe Chaîne de caractères
Exercice 6 :
Analyse du problème
Nom : BONJOUR
Résultat = Ecrire (″ Bonjour ″, Pre)
Pre = donnée ("Donner Votre prénom : ")
Fin BONJOUR
TDO
Objet Type / nature
Pre Chaîne de caractères
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
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
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 = …..
Séquence 1 Séquence 2
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
X Y a b c d r
36 85
29 374
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 8 : On veut calculer le montant des impôts d'un salarié. La grille à utiliser est la suivante :
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 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 ).
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 :
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.
- 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à.
- 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
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
2.
X Y a b c d r
36 85 3 6 8 5 3685
29 374 - - - - 0
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
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
TDO
Objet Type / nature
a,b Réel
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
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
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
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
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
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
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
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]
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 ")
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
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
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″ ,
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
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
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
TDO
Objet Type / nature
xa, xb , ya ,yb ,r1,r2,d Réel
pos Chaine de caractère
Série d’exercices
Les structures de
contrôle itératives
Exercice 1 :
Soit l’algorithme suivant : 1. Traduire cet algorithme en pascal .
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
NB=2435
S
NB
NB=21
S
NB
NB=599
S
NB
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.
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.
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
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].
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 **
***
***
****
*****
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 ″
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
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).
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 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.
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
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
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
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
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.
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
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 :
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˝
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.
Correction de série
d’exercices
Les structures de
contrôle itératives
Exercice 1 :
2.
a) A = 3 B= 5 P=243
b) A = 2 B= 4 P=16
c) A = 4 B= 0 P=1
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.
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
Exercice 3 :
Soit l’algorithme suivant :
.
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
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
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
Fin CAL_SOM
TDO
Objet Type/Nature
N, i ,somme Entier
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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));
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
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)
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
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
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
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
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
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
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 :″)
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
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
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
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
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
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 )
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
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
TDO
Objet Type/Nature
n,m,i,j Entier
t Tableau de 50 entiers
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
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
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
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
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
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 ;
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).
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.
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
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.
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 *
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.
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.
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.
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
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 :
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
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.
Exercice 7 :
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
Ecrire (n,″=″)
Fin afficher
TDOL
Objet Type/Nature
i entier
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,' = ');
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
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
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
Traduction en PASCAL
PROGRAM RENVERSEE;
USES WINCRT;
VAR phrase : STRING;
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
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;
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;
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
Traduction en PASCAL
PROGRAM POSITION;
USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
VAR T : TAB;
P1,P2 : INTEGER;
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
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.
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
TDOL
Objet Type/Nature
i entier
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]);
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
TDO
Objet Type/Nature
n , i ,p entier
T1,T2 TAB
afficher procédure
chercher fonction
remplir procédure
lire_entier procédure
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;
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
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
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
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.
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
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
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
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
TDOL
Objet Type/Nature
i entier
s réel
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
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
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);
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}
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
TDOL
Objet Type/Nature
i , max caractère
max ← i
fin si
fin pour
2) indice_max ← max
3) Fin indice_max
TDOL
Objet Type/Nature
i caractère
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
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
TDOL
Objet Type/Nature
i entier
ch1 chaine de caractère
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;
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
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
score2 ← score2 + 1
fin si
Jusqu’à ((score1 = 10) OU (score2 = 10))
2) Fin jouer
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.
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
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
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
TDOL
Objet Type/Nature
i entier
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);
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
u ← x MOD 10
Fin permuter
TDOL
Objet Type/Nature
u,d entier
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;
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;
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;
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 ;
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;