Vous êtes sur la page 1sur 64

Algorithmique et programmation Algorithmique et programmation

Exercice 5 :

Série d’exercices Donner le type et le résultat des expressions suivantes :


Action Résultat Type
S1 ← 5 + 37 MOD 10 * 2 + 5 / 2 S1=

Les structures de données S2 ←5 + 37 MOD (10 * 2) + 5 / 2


S3 ← ((13 DIV 3 * 2) < (13 MOD 3 * 2))
A ← SQR (ABS (-3))
S2=
S3=
A=
B ← 'A' + ''LI'' B=
C ← PRED ('D') C=
D ← SUCC ('A') + PRED ('O') + 'B' D=
Exercice 1 :
Evaluer les expressions suivantes :
Exercice 6 :
Expression Valeur Expression Valeur
4.5+Racine_Carré (8/2) ……………. Carré (ABS (1.1-5.4)) ……………. Donner les traces de l’algorithme suivant :
Racine_Carré ( TRONC (9.3)) ……………. TRONC (3.14) …………….
Exercice 2 : 0. Début séquence
Donner le résultat de chacune des expressions suivantes (sachant que x = 20) : 1. a ← 15>10 Séquence a b c
a ←10+20*5-2 a= ............. 2. b ← a ET (10>=20) 1 ………….. ………….. …………..
b ← x/4+2*6 b= ............. 3. c←3 2 ………….. ………….. …………..
4. a ← (c =< 3) ET a ET b 3 ………….. ………….. …………..
c ← 20 DIV 3+4 c= .............
d ← 123 MOD 5 DIV 2 d= ............. 5. c ←(c MOD 2) + (4 DIV c) 4 ………….. ………….. …………..
6. Fin séquence 5 ………….. ………….. …………..
e ← a/(4+2)*6 e= .............

Exercice 3 :
Exercice 7 :
Donner les traces de l’algorithme suivant :
Soit les déclarations suivantes :
0. Début séquence
1. a ←10 Séquence a b c
Variable Type Valeur
2. b ←20 1 ………….. ………….. …………..
X Réel 2.2
3. c←2 2 ………….. ………….. …………..
Y Réel 0.2
4. a ←a+b/3 3 ………….. ………….. …………..
N Entier 20
5. c ←b MOD 3 * 4 DIV c 4 ………….. ………….. …………..
Z Entier 2
6. FIN séquence 5 ………….. ………….. …………..
T Caractère 'n'
B Booléen Vrai
Exercice 4 :
Soit l’algorithme suivant : Soient les expressions suivantes :

0. Début Exercice N1 ← (X+Y)*(X-Y)/(X+Z)


TDO
1. a ← 15 .......... N2 ←1.2*(N MOD Z)
Objets Type/nature
2. b ← a /3 .......... a,b Entier N3 ←N DIV Z + Z MOD N
3. c ← a < b+15 .......... c Booléen N4 ← ('a' > T ) OUEX ( ORD(‘A’) > N)
4. d ← a DIV b .......... d Réel N5 ←N3 * Z DIV 4 * Z MOD N – N2
5. e ← c ET (a=b) ……. e Chaîne N6 ←NON((N1=<12 ) OU (N3>=5) ET ( N2 <>10)) ET B
6. Fin Exercice
En utilisant les valeurs des variables X,Y,Z,T et B , dans chaque cas , déterminer le type ainsi que les valeurs de
Indiquer devant chaque instruction si elle est valable ou non. chacune des variables Ni sachant que ORD('A')=65.

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 8 : Exercice 11 :
Evaluer les expressions suivantes tout en complétant le tableau ci-dessous : Soient les déclarations pascal suivantes :
A  (5<8) OU (TRONC (6.95) < 3) TYPE
B  (ARRONDI (-4.5) <= 5) ET (1>3) Personnel = (Ingénieur, Professeur, Comptable, Avocat, Docteur) ;
C  NON ((5>3) OUex (10<30))
D  (2<18) OUex (-10 < TRONC (0.25)) VAR
E  (25>=3) OU (NON (-3<31) x : Personnel ;
F  NON ((3>12) ET (21< ARRONDI (-3.23))
1) Les affectations suivantes sont-elles correctes (Oui/Non) ?
x ← Avocat …………………………
A B C D E F x ← Prof …………………………
…………… …………… …………… …………… …………… …………… 2) Evaluer les expressions suivantes :
ORD (Docteur) ………………………………
Exercice 9 : SUCC (Comptable) ………………………………
PRED (Professeur) ………………………………
Soit la séquence d’instructions suivante : Ingénieur < Avocat ………………………………
a ← 10 Exercice 12 :
b ← a + 2,5 Soit trois tableaux T1, T2, T3 et soit les affectations suivantes :
c←a∗b+4
d ← a MOD 2 T1[1]  "Mohammed" T2[3]  SOUS_CHAINE (T1[2],1,3)
e ← CONCAT (″vrai″,″faux″) T1[2]  " Ben Ali " T2[4]  CONCAT (T2[3], "i")
x ← e = ″vraifaux″ T1[3]  CONCAT (T1[1] , " ", T1[2] ) T3[1]  POS(T2[2], T2[1])
y ← LONG (e)+POS (″e″,e) T2[1]  SOUS_CHAINE (T1[1],3,2) T3[2]  LONG (T1[1])
z ← x ET (y=8) T1[4]  " nen " T3[3]  POS (T1[2],T1[3])
INSÈRE (T1[4], T2[2],1)
Pour chacune des variables donner son type et sa valeur .

Variable a b c d e x y z 1) Quel est le contenu de chaque élément des trois tableaux.


Valeur ………….. ………….. ………….. ………….. ………….. ………….. ………….. ………….. 2) Déclarer en pascal les tableaux T1, T2 et T3.
Type ………….. ………….. ………….. ………….. ………….. ………….. ………….. …………..
Exercice 13 :
Exercice 10 : Soit T un tableau de 5 caractères et V un tableau de 5 entiers de types respectifs TAB1 et TAB2.
Soit l’algorithme suivant : 1) Faire la déclaration des tableaux au niveau algorithmique et au niveau du Pascal.
0. Début Exercice 2) Représenter les nouveaux tableaux T et V après exécution successive des opérations d’affectation suivantes :
1. a ← 15
T[1]  "D"
2. b ← a MOD 2+3.5
V[1]  ORD(T[1])
3. c ← b*10+a DIV 4 T[2]  SUCC(T[1])
4. d ← "Devoir N°:" + CHR (49) V[2]  V[1] MOD 2 * 5
5. e ← LONG (d) T[3]  SUCC(T[2])
6. f ← d="devoir N°:1" V[3]  V[2] DIV 3 +8
7. Fin exercice T[4]  PRED(T[1])
V[4]  ORD(T[4])
Pour chacune des variables donner son type et sa valeur T[5]  CHR(66)
Variable a b c d e f V[5]  ORD(T[5])
Valeur ………….. ………….. ………….. ………….. ………….. …………..
Type ………….. ………….. ………….. ………….. ………….. ………….. Le code ASCII de "A"=65

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation

Exercice 14 :
Soit les déclarations pascal suivantes:

TYPE ETAT = (CELIBATAIRE, MARIE, DIVORCE, VEUF) ;


CIVIL = ARRAY [1 .. 2] OF ETAT ;

VAR B : CIVIL ;
PERSONNE : CELIBATAIRE .. DIVORCE ;

1) Quel est le type de la variable B ?


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

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


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

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

Expression Valeur Type du résultat


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

Enseignant : AHMED BELHASSEN 5


Algorithmique et programmation Algorithmique et programmation

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

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

Les structures simples


Exercice 1 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé BONJOUR qui
saisit le prénom de l'utilisateur et affiche l'invite suivante : Bonjour <Foulen> Exercice 5 : 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 2 :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 6 : 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 7 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SUP_INF qui fait
Exercice 3 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISION qui
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
saisit un nombre rationnel comme couple d'entiers (p, q) et fait sortir ce nombre sous forme décimale. valeur absolue d'un réel.

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


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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 8 : Le matin, un automobiliste part avec un réservoir plein d'essence et un compteur marquant D Exercice 14 :
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é CHAINE permettant d’afficher la
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé automobiliste qui lit les valeurs D, longueur, le premier caractère, le caractère du milieu et le dernier caractère pour une chaîne donnée.
F et L et fait sortir le taux de consommation de la voiture de l'automobiliste.
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 15 :
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.
Exercice 9 : Exemple : Si N = 120 afficher ૚૜ + ૛૜ + ૙૜ = 9
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é. Exercice 16 :
Exemple : pour N=2013, le programme affichera 4. 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
Exercice 10 : tableau de 6 éléments de type chaîne de caractères) de la façon suivante :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé INVERSER_ENTIER qui permet 1) Le chiffre des milliers occupera la 1ére case du tableau T.
d’inverser un entier n donné de trois chiffres. 2) Le chiffre des centaines occupera la 2éme case du tableau T.
Exemple : si N=528, le programme affichera 825. 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 '='.
Exercice 11 : 6) La dernière case du tableau T contiendra la somme des chiffres qui constituent l'entier N.
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. Exemple : Si N = 3751
Exemple : N=125 Le résultat est N=10205 T ′3′ ′7′ ′5′ ′1′ ′=′ ′16′
1 2 3 4 5 6
Exercice 17 :
Exercice 12 : 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
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CONCATENATION qui permet analyse, un algorithme et un programme en PASCAL intitulé POSITION qui permet d'afficher la deuxième
de : position de C dans CH.
- Saisir deux entiers m et n.
- Concaténer l’entier m avec l’entier n Exemple :
- Affecter le résultat de concaténation à une variable p puis afficher le résultat de concaténation. Pour C ="m" et CH ="programmation", le programme affichera : 8
Exemple : m = 167 et n =25 Le résultat de concaténation est p =16725. Pour C ="r" et CH ="programmation", le programme affichera : 5
Pour C ="w" et CH ="programmation", le programme affichera : 0
Exercice 13 :
Exercice 18 :
Pour traduire un mot français en latin, on place la première lettre du mot français à la fin et on ajoute "us", Une société fabrique des objets en plastique qu'elle peut emballer dans des caisses d'emballages de différentes
exemple le mot homme. capacités :
Caisse C1 : 230 unités
h o m m e o m m e h Caisse C2 : 12 unités
Caisse C3 : 1 unité
1 2 3 4 5 2 3 4 5 1
Et on ajoute "us", on aura ommehus.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CAISSE qui lit la quantité
commandée puis calcule, pour chaque type, le nombre minimum de caisses à utiliser.
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé LATIN réalisant cette traduction.
Exemple : pour 255 unités, il leurs faut une caisse C1, 2 caisses C2 et une caisse C3.

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Exercice 2 : Soient les deux séquences suivantes :


Série d’exercices Séquence 1 Séquence 2

Les structures de
Si (a=b) OU (b>c) alors Si (a=b) ET (b>c) alors
Res a+b Res a+b
Sinon si (a<>c) OU (a>b) alors Sinon si (a >c) OU (a>b) alors
Res a*b Res a*b

contrôle conditionnelles Finsi

Ecrire (Res)
Finsi

Ecrire (Res)

Faire l’exécution de deux séquences en utilisant les valeurs suivantes : a=7, b=8 et c=3 et donner la valeur de
Exercice 1 : Res dans chaque cas .

X, Y et Z étant des variables numériques, on considère les deux séquences algorithmiques S1 et S2 suivantes : Exercice 3 :
S1 S2 Soit l’algorithme suivant : .
…………. ………….
Si ( ((X<5) ou (Y>2)) et (Z>3) ) alors Si ( (X<5) et ( (Y>2) ou (Z>3) ) ) alors 0) DEBUT Inconnu
X 1 X 1 1) Ecrire ("Donner X= "), Lire(x)
Si (X - Y>=0) alors Si (Z - Y>0) alors 2) Ecrire ("Donner Y= "), Lire(y)
Z 0 Z 0 3) CONVCH(x, ch1)
Fin si Fin si 4) CONVCH(y, ch2)
Y Y+Z Y Y+Z 5) SI (LONG (ch1)=2) ET (LONG (ch2)=2)
Sinon Sinon ALORS
X 2 X 2 a  x DIV 10
ZY+Z ZY+Z b  x MOD 10
Fin si Fin si c  y DIV 10
Ecrire (X, Y, Z) Ecrire (X, Y, Z) d  y MOD 10
…………. …………. r a*1000 + b*100 + c*10 + d
SINON
r0
Pour chacune de ces séquences, donner les valeurs après exécution de X, Y et Z dans les 3 cas suivants FIN SI
6) Ecrire ("Le résultat est: ", r)
1. X = 4 Y=1 Z=4 7) FIN Inconnu
2. X = 4 Y=5 Z=4
3. X = 6 Y=5 Z=4 1. Traduire cet algorithme en pascal
2. Donner les valeurs de a, b, c, d et r pour chacune des cas :
S1 S2
X Y a b c d r
1. X = ….. Y = ….. Z = ….. 1. X = ….. Y = ….. Z = …..
36 85
2. X = ….. Y = ….. Z = ….. 2. X = ….. Y = ….. Z = …..
29 374
3. X = ….. Y = ….. Z = ….. 3. X = ….. Y = ….. Z = …..
3. Quelle est la condition portée par SINON au niveau de l’instruction n°5 ?
4. Quel est le rôle de cet algorithme ?
5. Donner un nom significatif au programme.

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 4 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé DIVISION Exercice 8 : On veut calculer le montant des impôts d'un salarié. La grille à utiliser est la suivante :
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.
Salaire brut (sb) Taux d'impôt
sb < 150 dt 5%
150 dt < sb < 300 dt 10 %
300 < s < 600 dt 20%
600 dt < s 25 %

Rédiger une analyse, un algorithme et un programme en PASCAL intitulé IMPOT qui saisit le salaire et affiche
le montant des impôts et le salaire net.
Exercice 5 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ETAT_CIVIL
permettant de demander le nom, le prénom, le sexe et l’état civil d’une personne, puis afficher :
″ Bonjour Monsieur / Madame / Mademoiselle X ″.
Exemple : Nom et prénom : ″ Ahmed Akermi ″ sexe = ″ M ″ état civil = ″ C ″ Alors le programme affiche :
″ Bonjour Monsieur Ahmed Akermi ″

Exercice 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 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 10 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé FORME_GEO


qui demande d’introduire un code : 'c' pour carré, 'r' pour rectangle et 't' pour triangle.
Le programme lit ensuite les dimensions du ou des cotés de la figure considérée.
Pour un carré, il affichera la valeur de la surface.
Pour un rectangle, il affichera la valeur de périmètre.
Exercice 7 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CINEMA. Pour un triangle, il affichera s’il est isocèle.
Les deux programmes suivants ont pour objectif de calculer le prix d’une séance de cinéma en fonction des NB : Chercher deux méthodes pour la résolution de ce problème.
règles suivantes :
- Le tarif réduit (3DT) est accordé aux étudiants tous les jours sauf le dimanche.
- Il est aussi accordé aux plus de 65 ans et aux moins de 18 ans du lundi au jeudi et pour tous le mercredi.
- Le tarif plein est de 4DT

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


_NBRE, qui lit trois entiers, les permute de façon à les classer par ordre croissant puis affiche le résultat.

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

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


permettant de résoudre l’équation du deuxième degré : ax²+bx+c = 0

Exercice 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 16 : Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SALAIRE qui
calcule le salaire de base et la commission d’un chauffeur de Taxi selon les formules suivantes :

Le salaire de base :

Si (Recette<=1000) OU (Kilomètres parcourus < 4000) Alors salaire de base = 400


Si (Recette >=1500) ET (Kilomètres parcourus >=5000) Alors salaire de base = 500
Salaire de base = 600 dans les autres cas.
. La commission :
Exercice 13 : Pour les parents qui sortent le soir, une garde d'enfants offre pour eux ses services pour les
prix suivants : Si (Recette >1200) OU (Nombre Heures > 50) alors commission=20% * salaire de base
- 1,250 dinars l'heure entre 18 h et 21 h. Si ( 40 < Nombre Heures <=50 ) alors commission = 10% * salaire de base
- 4,800 dinars l'heure entre 21h et minuit. Commission = 5% * salaire de base dans les autres cas.
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 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.
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 Le tarif dépend de la situation du conducteur :
l’opération ou un message d’erreur (en cas de division par 0 et mauvais opérateur ).
- Un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit attribuer le tarif
rouge, si toutefois il n’a jamais été responsable d’accident. Sinon, la compagnie refuse de l’assurer.

- Un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans , ou de plus de 25 ans mais
titulaire du permis depuis moins de deux ans a le droit au tarif orange s’il n’a jamais provoqué d’accident, au
tarif rouge pour un accident sinon il est refusé .

- Un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bénéfice du tarif vert s’il n’est à
l’origine d’aucun accident et du tarif orange pour un accident , du tarif rouge pour deux accident et refusé au-
delà.

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

- De plus, pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de la couleur
immédiatement la plus avantageuse (bleu) s’il n’est entré dans la maison depuis plus d’un an.

Rédiger une analyse, un algorithme et un programme en PASCAL intitulé ASSURANCE permettant de saisir
les données nécessaires (sans contrôle de saisie) et de traiter ce problème.

Exercice 18 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé POSITION permettant de
déterminer et d’afficher la position relative de deux cercles C1 et C2 du plan cartésien.
Les cercles sont définis par :
Le cercle C1 : Un centre A de coordonnées XA et YA données, Un rayon RA donné
Le cercle C2 : Un centre B de coordonnées XB et YB données, Un rayon RB donné
Les deux cercles peuvent être :
- Se coupent en un point
- Ne se coupent pas
- Se coupent en deux points

Ne se coupent pas Se coupent en un point Se coupent en deux points

On rappelle la formule de calcul de la distance entre deux points A et B du plan :


DAB= (YA − YB) 2 + ((XA − XB) 2

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

2.

Correction de série X
36
29
Y
85
374
a
3
-
b
6
-
c
8
-
d
5
-
r
3685
0

d’exercices 3. (LONG (ch1) <>2) OR (LONG (ch2) <>2)


4. Transformer, concaténer, regrouper les deux entiers x et y dans un seul entier r.
5. Transformation, concaténation, regroupement.
Exercice 4 :
Les structures de Analyse du problème
Nom : DIVISION
Résultat = division_euclidienne
division_euclidienne = [ ] Si n1=0 alors

contrôle conditionnelles Ecrire ( " Division impossible ")


Sinon Ecrire ( " Résultat = " , n2 DIV n1 )
Fin si
( n1 , n2 ) = [ ] Si n1> n2 alors
t ← n1
n1 ← n2
Exercice 1 : n2 ← t
Fin si
n1 = donnée ( "Premier nombre : ")
S1 S2
n2 = donnée ( "Deuxième nombre : ")
1. X = 1 Y=1 Z=0 1. X = 1 Y = 1 Z=0 Fin DIVISION
2. X = 1 Y=9 Z=4 2. X = 1 Y = 9 Z=4 TDO
3. X = 1 Y=5 Z=0 3. X = 2 Y = 5 Z=9 Objet Type/Nature
t,n1,n2 Entier
Exercice 2 : Séquence 1 : Res =15 Séquence 2 : Res=56
Exercice 3 : Algorithme Traduction en PASCAL
0) Début DIVISION PROGRAM DIVISION ;
Soit l’algorithme suivant : 1. program Inconnu ; 1) Ecrire ( "Premier nombre : ") , lire(n1) USES WINCRT ;
Uses wincrt ; 2) Ecrire ( "Deuxième nombre : ") , lire(n2) VAR t,n1,n2 : INTEGER ;
0) DEBUT Inconnu Var 3) Si n1> n2 alors BEGIN
1) Ecrire ("Donner X= "), Lire(x) t ← n1 WRITELN (' Premier nombre : '); READLN (n1);
2) Ecrire ("Donner Y= "), Lire(y) x,y,a,b,c,d,r : integer ; n1 ← n2 WRITELN (' Deuxième nombre : '); READLN (n2);
3) CONVCH(x, ch1) ch1, ch2 : string ; n2 ← t IF n1> n2 THEN
4) CONVCH(y, ch2) begin Fin si BEGIN
5) SI (LONG (ch1)=2) ET (LONG (ch2)=2) writeln ( ′ Donner X=′ ) ; readln(x) ; 4) Si n1=0 alors t := n1 ;
ALORS writeln ( ′ Donner Y=′ ) ; readln(y) ; Ecrire ( " Division impossible ") n1 :=n2 ;
str(x,ch1) ; Sinon Ecrire ( " Résultat = " , n2 DIV n1 ) n2 := t ;
a  x DIV 10 str(y,ch2) ; Fin si END ;
b  x MOD 10 if( length(ch1) =2 )AND ( length(ch2 ) = 2 )then 5) Fin DIVISION IF n1=0 THEN
c  y DIV 10 begin WRITELN (' Division impossible ' )
d  y MOD 10 a := x DIV 10 ; ELSE WRITELN ( ′ Résultat = ' , n2 DIV n1 ) ;
r a*1000 + b*100 + c*10 + d b := x MOD 10 ; END.
c := y DIV 10 ;
SINON d := y MOD 10 ;
r0 r :=a*1000 + b*100 + c*10 + d ;
FIN SI end
6) Ecrire ("Le résultat est: ", r) else r:=0;
7) FIN Inconnu writeln ("Le résultat est: ", r) ;
end.

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 5 : TDO
Analyse du problème Objet Type / nature
Nom : ETAT_CIVIL a,b Réel
Résultat = Affichage_message
Affichage_message =[ sexe ← MAJUS ( sexe ) , etatcivil ← MAJUS (etatcivil ) ] Algorithme Traduction en PASCAL
Si sexe=″ M ″ alors 0) Début DEGRE1 PROGRAM DEGRE1 ;
Ecrire ( ″ Bonjour Monsieur ″ , nom ) 1) Ecrire ("a = "), Lire (a) USES WINCRT ;
Sinon si etatcivil=″ C ″ alors 2) Ecrire ("b = "), Lire (b) VAR a, b : REAL ;
Ecrire ( ″ Bonjour mademoiselle ″ , nom ) 3) si (a <> 0) alors BEGIN
Sinon Ecrire ( ″ Bonjour madame ″ , nom ) Ecrire("Solution unique : ", -b/a) WRITELN ('a = ') ; READLN(a) ;
Fin si sinon si (b = 0) alors WRITELN ('b = ') ; READLN(b) ;
nom = donnée ( "Votre nom svp : ") Ecrire("Tout réel est solution ") IF (a <> 0) THEN
sexe = donnée ( "Sexe ( M/F ) : ") sinon Ecrire("Pas de solution") WRITELN('Solution unique : ', -b/a)
etatcivil = Donnée ( "Etat civil ( C , M , D , V ) : ") Fin si ELSE IF (b = 0) THEN
Fin ETAT_CIVIL 4) Fin DEGRE1 WRITELN('Tout réel est solution ')
TDO ELSE
Objet Type / nature WRITELN('Pas de solution');
nom Chaine END.
etatcivil, sexe Caractère
Exercice 7 :
Algorithme Traduction en PASCAL Analyse du problème
0) Début ETAT_CIVIL PROGRAM ETAT_CIVIL ; Nom : CINEMA
1) Ecrire (" Votre nom svp : ") , lire(nom) USES WINCRT ; Résultat = Ecrire ( Message )
2) Ecrire (" Sexe ( M/F ) : ") , lire (sexe) VAR nom : STRING[ 30 ] ; Message =[ ] si ( tarif_reduit ) alors
3) Ecrire("Etat civil ( C , M ,D,V) : ") , lire (etatcivil) etatcivil , sexe : CHAR ; Message ← ″ Le prix est 3DT ″
4) sexe ← MAJUS ( sexe ) BEGIN sinon Message ← ″ Le prix est 4DT ″
etatcivil ← MAJUS (etatcivil ) WRITELN(' Votre nom svp : '); READLN(nom ); Fin si
Si sexe=″ M ″ alors WRITELN(' Sexe ( M/F ) : '); READLN(sexe); tarif_reduit ← ( jour = 3 ) OU ( ( ( age <=18 ) OU ( age >=65 )) ET ( jour <=4 ) ) OU ( ( jour<>7 ) ET (
Ecrire ( ″ Bonjour Monsieur ″ , nom ) WRITELN(' Etat civil ( C , M ,D,V)' ) ; reponse = ' o ' ) )
Sinon si etatcivil=″ C ″ alors READLN(etatcivil ); reponse = donnée ( " Etes –vous étudiant ? o/n = : ")
Ecrire ( ″ Bonjour mademoiselle ″ , nom ) sexe :=UPCASE ( sexe ) ; age = donnée ( " Quel age avez-vous ? = : ")
Sinon Ecrire ( ″ Bonjour madame ″ , nom ) etatcivil :=UPCASE ( etatcivil ) ; jour = donnée ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ")
Fin si IF sexe= 'M' THEN Fin CINEMA
5) Fin ETAT_CIVIL WRITELN ( ' Bonjour Monsieur ' , nom ) TDO
ELSE IF etatcivil='C' THEN Objet Type / nature
WRITELN ( ' Bonjour mademoiselle ' , nom ) jour , age Entier
ELSE WRITELN ( ' Bonjour madame ' , nom ); tarif_reduit Booléen
END. reponse Caractère
Message Chaine
Exercice 6 :
Analyse du problème Algorithme Traduction en PASCAL
Nom : DEGRE1 0) Début CINEMA PROGRAM CINEMA ;
Résultat = Solution 1) Ecrire ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : USES WINCRT ;
Solution =[ ] si (a <> 0) alors 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 " ) , Lire (jour) VAR jour , age : INTEGER ;
Ecrire("Solution unique : ", -b/a) 2) Ecrire ( " Quel age avez-vous ? = : " ), Lire (age) tarif_reduit : BOOLEAN ;
sinon si (b = 0) alors 3) Ecrire ( "Etes –vous étudiant ? o/n =: ") reponse : CHAR ;
Ecrire("Tout réel est solution ") Lire (reponse) Message : STRING ;
sinon Ecrire("Pas de solution") 4) tarif_reduit ← ( jour = 3 ) OU ( ( ( age <=18 ) BEGIN
Fin si OU ( age >=65 )) ET ( jour <=4 ) ) OU WRITELN (' Quel jour est-on ? Lun : 1 Mar : 2 Mer :
a = donnée ( " a = : ") ( ( jour<>7 ) ET ( reponse = ' o ' ) ) 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ') ;
b = donnée ( " b = : ") 5) si ( tarif_reduit ) alors READLN (jour) ;
Fin DEGRE1 Message ← ″ Le prix est 3DT ″ WRITELN (' Quel age avez-vous ? = : ');

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

READLN(age) ; fin si WRITELN (' Quel age avez-vous ? = : ');


sinon Message ← ″ Le prix est 4DT ″ WRITELN (' Etes –vous étudiant ? o/n =: '); fin si READLN(age) ;
Fin si READLN(reponse) ; 5) si ( tarif_reduit ) alors IF ( ( ( age <=18 ) OR( age >=65 )) AND ( jour <=4
6) Ecrire ( Message ) tarif_reduit := ( jour = 3 ) OR ( ( ( age <=18 ) OR Message ← ″ Le prix est 3DT ″ ) )THEN tarif_reduit := TRUE
4) Fin CINEMA ( age >=65 )) AND ( jour <=4 ) ) OR
( ( jour<>7 ) AND ( reponse = ' o ' ) ) ; sinon Message ← ″ Le prix est 4DT ″ ELSE
IF (tarif_reduit ) THEN Fin si BEGIN
Message :=' Le prix est 3DT ' 6) Ecrire ( Message ) WRITELN (' Etes –vous étudiant ? o/n =: ');
ELSE 4) Fin CINEMA READLN(reponse) ;
Message :=' Le prix est 4DT ' ; tarif_reduit :=( reponse = ' o ' ) ;
WRITELN(Message); END ;
END. END ;
Autre méthode un peu plus complexe : IF (tarif_reduit ) THEN
Analyse du problème Message :=' Le prix est 3DT '
Nom : CINEMA ELSE
Résultat = Ecrire ( Message ) Message :=' Le prix est 4DT ' ;
Message =[ ] si ( tarif_reduit ) alors WRITELN(Message);
Message ← ″ Le prix est 3DT ″ END.
sinon Message ← ″ Le prix est 4DT ″
Fin si
( age , reponse ) = [ tarif_reduit ← ( jour = 3 ) ] Exercice 8 :
Si ( jour <> 3) ET ( jour < 7 ) alors Analyse du problème
age = donnée ( " Quel age avez-vous ? = : ") Nom : IMPOT
Si ( ( ( age =<18 ) OU ( age >=65 )) ET ( jour =<4 ) ) alors Résultat = Ecrire ("Impots = " , impot , "salaire net = " , snet)
tarif_reduit ← Vrai snet  sbrut – impot
Sinon impot = [ ] si (sbrut < 150) alors
reponse = donnée ( " Etes –vous étudiant ? o/n = : ") impot  0.05 * sbrut
tarif_reduit ← ( reponse = ' o ' ) sinon si (sbrut < 300) alors
fin si impot  0.1 * sbrut
fin si sinon si (sbrut < 600) alors
jour = donnée ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ") impot  0.2 * sbrut
Fin CINEMA sinon
TDO impot 0.25 * sbrut
Objet Type / nature Fin si
jour , age Entier sbrut=donnée ("Salaire brut = ")
tarif_reduit Booléen Fin IMPOT
reponse Caractère TDO
Message Chaine Objet Type / nature
sbrut , impot , snet Réel
Algorithme Traduction en PASCAL
0) Début CINEMA PROGRAM CINEMA ; Algorithme Traduction en PASCAL
1) Ecrire ( " Quel jour est-on ? Lun : 1 Mar : 2 Mer : USES WINCRT ; PROGRAM IMPOT ;
3 Jeu : 4 Ven :5 Sam : 6 Dim :7 " ) , Lire (jour) VAR jour , age : INTEGER ; 0) Début IMPOT USES WINCRT ;
2) tarif_reduit ← ( jour = 3 ) tarif_reduit : BOOLEAN ; 1) Ecrire ("Salaire brut = "), Lire (sbrut) VAR sbrut , impot , snet : REAL ;
Si ( jour <> 3) ET ( jour < 7 ) alors reponse : CHAR ; 2) si (sbrut < 150) alors BEGIN
Ecrire ( " Quel age avez-vous ? = : " ), Lire (age) Message : STRING ; impot  0.05 * sbrut WRITELN (' Salaire brut = ') ; READLN (sbrut) ;
Si ( ( ( age =<18 ) OU ( age >=65 )) ET ( jour BEGIN sinon si (sbrut < 300) alors IF (sbrut < 150) THEN
=<4 ) ) alors WRITELN (' Quel jour est-on ? Lun : 1 Mar : 2 Mer : impot  0.1 * sbrut impot := 0.05 * sbrut
tarif_reduit ← Vrai 3 Jeu : 4 Ven :5 Sam : 6 Dim :7 ') ; sinon si (sbrut < 600) alors ELSE IF (sbrut < 300) THEN
Sinon READLN (jour) ; impot  0.2 * sbrut impot := 0.1 * sbrut
Ecrire ( "Etes –vous étudiant ? o/n =: ") tarif_reduit := ( jour = 3 ) ; sinon ELSE IF (sbrut < 600) THEN
Lire (reponse) IF ( jour <> 3) AND ( jour < 7 ) THEN impot 0.25 * sbrut impot := 0.2 * sbrut
tarif_reduit ← ( reponse = ' o ' ) BEGIN

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

Fin si ELSE Exercice 10 :


impot := 0.25 * sbrut ; Analyse du problème
3) snet  sbrut – impot snet := sbrut – impot ; Nom : FORME_GEO
4) Ecrire ("Impots = ", impot ,"salaire net =" , snet) Résultat = Forme
5) Fin IMPOT WRITELN( ' Impots = ', impot ,' salaire net =' , snet); Forme = [ ] Si ( code = ″c″ ) alors
END. c1= donnée ("Entrer le coté : ")
Ecrire ("Surface : ", c1* c1)
Exercice 9 : Sinon si ( code = ″r″ ) alors
(c1,c2)= donnée ("Entrer les 2 cotés : ")
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 Ecrire ("Périmètre : ", (c1+c2)* 2 )
de 29 jours pour les années bissextiles. Une année est bissextile si elle est divisible par 4 quand elle est non Sinon si ( code = ″t″ ) alors
multiple de 100 sinon c'est son quotient par 100 qui doit être multiple de 4. Exemple : 1900 est une année non (c1,c2,c3)= donnée ("Entrer les 3 cotés : ")
bissextile par contre 2000 l'est. Si ( c1 = c2 ) OU ( c1=c3 ) OU ( c2=c3 ) alors
On convient que le mois est saisi sous forme d'un entier ente 1 et 12. Ecrire(″isocèle″)
Analyse du problème Sinon Ecrire(″non isocèle″)
Nom : JOURS Fin si
Résultat = Ecrire("Le nombre de jours du mois saisi est ", nbj) Sinon
nbj = [ nbj  31 ] si (m dans [ 4,6,9,11] ) alors Ecrire(″Mauvais code″)
nbj  30 Fin si
sinon code=donnée ("Entrer un code : c , r ou t ")
an=donnée ("Année : ") Fin FORME_GEO
nbj28 TDO
si (an MOD 400 = 0) OU ((an MOD 4 =0) ET (an MOD 100 <>0)) alors Objet Type / nature
nbj  29 c1,c2,c3 Entier
Fin Si code Caractère
Fin Si
m=donnée ("N° mois : ") Algorithme Traduction en PASCAL
Fin JOURS 0) Début FORME_GEO PROGRAM FORME_GEO ;
TDO 1) Ecrire ("Entrer un code : c , r ou t "), Lire (code) USES WINCRT ;
Objet Type / nature 2) Si ( code = ″c″ ) alors VAR c1 , c2 , c3 : INTEGER ;
nbj , m , an Entier Ecrire ("Entrer le coté : ") , Lire(c1) Code : CHAR ;
Ecrire ("Surface : ", c1* c1) BEGIN
Algorithme Traduction en PASCAL Sinon si ( code = ″r″ ) alors WRITELN (' Entrer un code : c , r ou t ') ;
0) Début JOURS PROGRAM JOURS ; Ecrire ("Entrer les 2 cotés : ") READLN (code) ;
1) Ecrire ("N° mois : "), Lire (m) USES WINCRT ; Lire(c1) , Lire(c2) IF ( code = 'c' ) THEN
2) nbj  31 VAR nbj , m , an : INTEGER ; Ecrire ("Périmètre : ", (c1+c2)* 2 ) BEGIN
si (m dans [ 4,6,9,11] ) alors BEGIN Sinon si ( code = ″t″ ) alors WRITELN (' Entrer le coté : ') ;
nbj  30 WRITELN (' N° mois : ') ; READLN (m) ; Ecrire ("Entrer les 3 cotés : ") READLN (c1) ;
sinon nbj:= 31 ; Lire(c1) , Lire(c2), Lire (c3) WRITELN ('Surface : ', c1* c1) ;
Ecrire ("Année : "), Lire(an) IF (m IN [ 4 ,6,9,11 ] ) THEN Si ( c1 = c2 ) OU ( c1=c3 ) OU ( c2=c3 ) alors END
nbj28 nbj := 30 Ecrire(″isocèle″) ELSE IF ( code = 'r' ) THEN
si (an MOD 400 = 0) OU ((an MOD 4 =0) ELSE Sinon Ecrire(″non isocèle″) BEGIN
ET (an MOD 100) <>0)) alors BEGIN Fin si WRITELN(' Entrer les 2 cotés : ' ) ;
WRITELN (' Année : ') ; READLN (an) ; Sinon READLN (c1) ;
nbj  29
nbj := 28; Ecrire(″Mauvais code″) READLN (c2) ;
Fin Si
IF (an MOD 400 = 0) OR ((an MOD 4 =0) Fin si WRITELN (' Périmètre : ' , (c1+c2)* 2 ) ;
Fin Si
AND (an MOD 100 <>0)) THEN 3) Fin FORME_GEO END
nbj := 29 ELSE IF ( code = 't' ) THEN
3) Ecrire ("Le nombre de jours du mois saisi est ",
END; BEGIN
nbj)
WRITELN( ' Le nombre de jours du mois saisi est ', WRITELN (' Entrer les 3 cotés : ' ) ;
4) Fin JOURS
nbj ); END. READLN(c1) ;
READLN(c2) ;

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

READLN(c3) ; 3) Fin FORME_GEO 't' : BEGIN


IF( c1 = c2 ) OR ( c1=c3 ) OR ( c2=c3 ) THEN WRITELN (' Entrer les 3 cotés : ' ) ;
WRITELN (' isocèle ' ) READLN(c1) ;
ELSE WRITELN (' non isocèle ') READLN(c2) ;
END READLN(c3) ;
ELSE IF( c1 = c2 ) OR ( c1=c3 ) OR ( c2=c3 ) THEN
WRITELN (' Mauvais code' ) ; WRITELN (' isocèle ' )
END. ELSE WRITELN (' non isocèle ');
END ;
Deuxième méthode : ELSE
Nom : FORME_GEO WRITELN (' Mauvais code' ) ;
Résultat = Forme END ;
Forme = [ ] Selon ( code ) Faire END.
″ c ″ : c1= donnée ("Entrer le coté : ")
Ecrire ("Surface : ", c1* c1) Exercice 11 :
″ r ″ : (c1,c2)= donnée ("Entrer les 2 cotés : ")
Analyse du problème
Ecrire ("Périmètre : ", (c1+c2)* 2 )
Nom : CLASSEMENT_NBRE
″ t ″ : (c1,c2,c3)= donnée ("Entrer les 3 cotés : ")
Résultat = Classement
Si ( c1 = c2 ) OU ( c1=c3 ) OU ( c2=c3 ) alors
Classement = [ ]Si (a>=b) et (a>=c) alors
Ecrire(″isocèle″)
Si (b >=c) alors
Sinon Ecrire(″non isocèle″)
Ecrire (″ les trois entiers en ordre croissante : ″ , a ,b, c )
Fin si
Sinon
Sinon
Ecrire (″ les trois entiers en ordre croissante : ″ , a ,c, b )
Ecrire(″Mauvais code″)
Fin si
Fin selon
Sinon Si (b>=a) et (b>=c) alors
code=donnée ("Entrer un code : c , r ou t ")
Si (a >=c) alors
Fin FORME_GEO
Ecrire (″ les trois entiers en ordre croissante : ″ , b ,a, c )
TDO
Sinon
Objet Type / nature
Ecrire (″ les trois entiers en ordre croissante : ″ , b ,c, a )
c1,c2,c3 Entier Fin si
code Caractère Sinon
Si (a >=b) alors
Algorithme Traduction en PASCAL Ecrire (″ les trois entiers en ordre croissante : ″ , c ,a, b )
0) Début FORME_GEO PROGRAM FORME_GEO ; Sinon
1) Ecrire ("Entrer un code : c , r ou t "), Lire (code) USES WINCRT ; Ecrire (″ les trois entiers en ordre croissante : ″ , c ,b, a )
2) Selon ( code ) Faire VAR c1 , c2 , c3 : INTEGER ; Fin si
″ c ″ : Ecrire ("Entrer le coté : ") , Lire(c1) Code : CHAR ; a=donnée ("donner le premier entier ")
Ecrire ("Surface : ", c1* c1) BEGIN b=donnée ("donner le deuxième entier ")
″r″: WRITELN (' Entrer un code : c , r ou t ') ; c=donnée ("donner le troisième entier ")
Ecrire ("Entrer les 2 cotés : ") READLN (code) ; Fin CLASSEMENT_NBRE
Lire(c1) , Lire(c2) CASE ( code ) OF
Ecrire ("Périmètre : ", (c1+c2)* 2 ) 'c' : BEGIN
″t″: WRITELN (' Entrer le coté : ') ; TDO
Ecrire ("Entrer les 3 cotés : ") READLN (c1) ; Objet Type / nature
Lire(c1) , Lire(c2), Lire (c3) WRITELN ('Surface : ', c1* c1) ; a,b,c Entier
Si (c1 =c2 )OU( c1=c3 )OU( c2=c3 )alors END ;
Ecrire(″isocèle″) 'r' : BEGIN Algorithme Traduction en PASCAL
Sinon Ecrire(″non isocèle″) WRITELN(' Entrer les 2 cotés : ' ) ; 0) Début CLASSEMENT_NBRE PROGRAM CLASSEMENT_NBRE ;
Fin si READLN (c1) ; 1) Ecrire (″ donner le premier entier ″), lire (a) USES WINCRT ;
Sinon READLN (c2) ; 2) Ecrire (″ donner le deuxième entier ″),lire (b) VAR a , b , c : INTEGER ;
Ecrire(″Mauvais code″) WRITELN (' Périmètre : ' , (c1+c2)* 2 ) ; 3) Ecrire (″ donner le troisième entier ″), lire (c) BEGIN
Fin si END ; 4) Si (a>=b) et (a>=c) alors WRITELN ( ' donner le premier entier ' ) ;

Enseignant : AHMED BELHASSEN 9 Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation Algorithmique et programmation

Si (b >=c) alors READLN (a) ; Note1=donnée ("donner la note d’examen num 1 ")
Ecrire (″ les trois entiers en ordre WRITELN ( ' donner le deuxième entier ' ) ; Note2=donnée ("donner la note d’examen num 2 ")
croissante : ″ , a ,b, c ) READLN (b) ; Note3=donnée ("donner la note d’examen num 3 ")
Sinon WRITELN ( ' donner le troisième entier ' ) ; Fin DECISION
Ecrire (″ les trois entiers en ordre READLN (c) ; TDO
croissante : ″ , a ,c, b ) IF (a>=b) AND (a>=c) THEN Objet Type / nature
Fin si BEGIN Note1, Note2 Entier
Sinon Si (b>=a) et (b>=c) alors IF (b>=c) THEN ,Note3, Min
Si (a >=c) alors WRITELN (' les trois entiers en ordre Moy Réel
Ecrire (″ les trois entiers en ordre croissante : ', a , b , c )
croissante : ″ , b ,a, c ) ELSE Algorithme Traduction en PASCAL
Sinon WRITELN (' les trois entiers en ordre
0) Début DECISION PROGRAM DECISION ;
Ecrire (″ les trois entiers en ordre croissante : ', a , c , b ) ;
1) Ecrire (″donner la note d’examen num 1 ″) USES WINCRT ;
croissante : ″ , b ,c, a ) END
Lire (Note1) VAR Note1, Note2 ,Note3, Min : INTEGER ;
Fin si ELSE IF (b>=a) AND (b>=c) THEN
2) Ecrire (″donner la note d’examen num 2 ″) Moy : REAL ;
Sinon BEGIN
Lire (Note 2) BEGIN
Si (a >=b) alors IF (a>=c) THEN
3) Ecrire (″donner la note d’examen num 3 ″) WRITELN ( ' donner la note d’’examen num 1 ' ) ;
Ecrire (″ les trois entiers en ordre WRITELN (' les trois entiers en ordre
Lire (Note 3) READLN (Note1) ;
croissante : ″ , c ,a, b ) croissante : ', b , a , c )
4) Moy ← ( Note1+ Note2 + Note3 ) / 3 WRITELN ( ' donner la note d’’examen num 2 ' ) ;
Sinon ELSE
5) Min ← Note1 READLN (Note2) ;
Ecrire (″ les trois entiers en ordre WRITELN (' les trois entiers en ordre
Si(Note1>=Note2)ET(Note1>=Note3)ET WRITELN ( ' donner la note d’’examen num 3 ' ) ;
croissante : ″ , c ,b, a ) croissante : ', b , c , a ) ;
(Note2>=Note3) alors READLN (Note3) ;
Fin si END
Min ← Note3 Moy := ( Note1+ Note2 + Note3 ) / 3 ;
5) Fin CLASSEMENT_NBRE ELSE
Sinon Si(Note1>=Note2) ET (Note1>=Note3) ET Min := Note1 ;
BEGIN
(Note3>=Note2) alors IF(Note1>=Note2)AND(Note1>=Note3)AND
IF (a>=b) THEN
Min ← Note2 (Note2>=Note3) THEN
WRITELN (' les trois entiers en ordre
Fin si Min :=Note3
croissante : ', c , a , b )
6) Si ((Note1>=9) ET (Note2>=9) ET ELSE IF (Note1>=Note2) AND (Note1>=Note3)
ELSE
(Note3>=9) ) OU ( ( Moy >=10 ) ET ( Min >=8) ) AND (Note3>=Note2) THEN
WRITELN (' les trois entiers en ordre
alors Min :=Note2 ;
croissante : ', c , b , a ) ;
IF ((Note1>=9) AND (Note2>=9) AND
END ;
Ecrire (″ Admis ″ ) (Note3>=9) ) OR ( ( Moy >=10 ) AND ( Min >=8) )
END.
Sinon THEN
Ecrire (″ Refusé ″ )
Exercice 12 : WRITELN ( ' Admis ' )
Analyse du problème Fin si
Nom : DECISION ELSE
Résultat = DEC 7) Fin DECISION WRITELN ( ' Refusé ' ) ;
DEC = [ ] Si ( (Note1>=9) ET (Note2>=9) ET (Note3>=9) ) OU ( ( Moy >=10 ) ET ( Min >=8) ) alors END.

Ecrire (″ Admis ″ )
Sinon
Ecrire (″ Refusé ″ )
Exercice 13 :
Analyse du problème
Fin si
Nom : GARDE_ENFANTS
Min = [ Min ← Note1]
Résultat = Ecrire ( ″ Le montant à payer est : ″ , M )
M = [ ] Si (h2 < =21) alors
Si (Note1>=Note2) ET (Note1>=Note3) ET (Note2>=Note3) alors
M ← (h2-h1) * 1.250
Min ← Note3
Sinon Si (h1>=21) alors
Sinon Si (Note1>=Note2) ET (Note1>=Note3) ET (Note3>=Note2) alors
M ← (h2-h1) * 4.800
Min ← Note2
Sinon M ← ( 21-h1) * 1.250+( h2-21) * 4.800
Fin si
Fin si
Moy ← ( Note1+ Note2 + Note3 ) / 3
h1=donnée ("donner l’heure de départ ")

Enseignant : AHMED BELHASSEN 11 Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation Algorithmique et programmation

h2=donnée ("donner l’heure de fin ") Ecrire(″Mauvais opérateur ″)


Fin GARDE_ENFANTS Fin selon
TDO ( n1,n2,op) =donnée ("Entrer les 2 opérandes et l’opérateur ")
Objet Type / nature Fin CALCUL
h1,h2 Entier TDO
M Réel Objet Type / nature
n1,n2 Entier
Algorithme Traduction en PASCAL op Caractère
0) Début GARDE_ENFANTS PROGRAM GARDE_ENFANTS ;
1) Ecrire (″donner l’heure de départ ″) USES WINCRT ; Algorithme Traduction en PASCAL
Lire (h1) VAR h1,h2 : INTEGER ; 0) Début CALCUL PROGRAM CALCUL ;
2) Ecrire (″donner l’heure de fin ″) M : REAL ; 1) Ecrire (″Entrer les 2 opérandes et l’opérateur ″) USES WINCRT ;
Lire (h2) BEGIN Lire (n1) Lire (h2) Lire (op) VAR n1,n2 : INTEGER ;
3) Si (h2 < =21) alors WRITELN ( ' donner l’’heure de départ ' ) ; 2) Selon ( op ) Faire op : CHAR ;
M ← (h2-h1) * 1.250 READLN (h1) ; ″ +″ : Ecrire ("La somme vaut : ", n1* n2 ) BEGIN
Sinon Si (h1>=21) alors WRITELN ( ' donner l’’heure de fin ' ) ; ″ - ″ : Ecrire ("La différence vaut : ", n1- n2 ) WRITELN(' Entrer les 2 opérandes et l’’opérateur ' ) ;
M ← (h2-h1) * 4.800 READLN (h2) ; ″ * ″ : Ecrire ("La multiplication vaut : ", n1 * n2 ) READLN (n1) ; READLN (n2) ; READLN (op) ;
Sinon M ← ( 21-h1) * 1.250+( h2-21) * 4.800 ″ / ″ :Si ( n2<>0 ) alors CASE ( op ) OF
IF (h2 < = 21) THEN Ecrire ("La division vaut : ", n1 / n2 : 5 : 2) ' +' : WRITELN ('La somme vaut : ', n1* n2 ) ;
Fin si Sinon Ecrire(″Erreur : /0 ″) ' - ' : WRITELN ('La différence vaut : ', n1- n2 ) ;
M := ( h2-h1) * 1.250 Fin si ' * ' : WRITELN ('La multiplication vaut : ', n1 * n2 ) ;
4) Ecrire ( ″ Le montant à payer est : ″ , M ) ″ \ ″ : Si ( n2<>0 ) alors '/ ' : IF ( n2<>0 ) THEN
ELSE IF ( h1>=21) THEN Ecrire ("La division entière vaut :", n1 DIV n2 : 5 : 2) WRITELN ('La division vaut : ', n1 / n2 : 5 : 2)
5) Fin GARDE_ENFANTS Sinon Ecrire(″Erreur : /0 ″) ELSE WRITELN ('Erreur : /0 ' ) ;
M := ( h2-h1) * 4.800 Fin si ' \' : IF ( n2<>0 ) THEN
″ %″ : Si ( n2<>0 ) alors WRITELN (' La division entière vaut :',
ELSE M :=( 21-h1) * 1.250+( h2-21) * 4.800 ; Ecrire ("Le Modulo vaut : ", n1 MOD n2 : 5 : 2) n1 DIV n2 )
WRITELN (' Le montant à payer est : ' , M ); Sinon Ecrire(″Erreur : /0 ″) ELSE WRITELN (' Erreur : /0 ' ) ;
END. Fin si '%' : IF( n2<>0 ) THEN
Sinon WRITELN (' Le Modulo vaut : ' , n1 MOD n2 )
Ecrire(″Mauvais opérateur ″) ELSE WRITELN (' Erreur : /0 ' ) ;
Exercice 14 : Fin selon ELSE
Analyse du problème WRITELN (' Mauvais opérateur ' ) ;
Nom : CALCUL 3) Fin CALCUL END ;
Résultat = opération END.
opération = [ ]Selon ( op ) Faire
″ +″ : Ecrire ("La somme vaut : ", n1* n2 )
″ - ″ : Ecrire ("La différence vaut : ", n1- n2 ) Exercice 15 :
″ * ″ : Ecrire ("La multiplication vaut : ", n1 * n2 ) Analyse du problème
″ / ″ :Si ( n2<>0 ) alors Nom : DEGRE2
Ecrire ("La division vaut : ", n1 / n2 : 5 : 2) Résultat = solution
Sinon Ecrire(″Erreur : /0 ″) solution = [ ]Si ( a= 0 ) alors
Fin si Si ( b <>0 ) alors
″ \ ″ : Si ( n2<>0 ) alors Ecrire ("L'équation est du premier degré et admet une racine ", -c/b : 5 :2 )
Ecrire ("La division entière vaut : ", n1 DIV n2 : 5 : 2) Sinon Si ( c <>0 ) alors
Sinon Ecrire(″Erreur : /0 ″) Ecrire ("L'équation est du premier degré et n'admet pas de racine ")
Fin si Sinon
″ %″ : Si ( n2<>0 ) alors Ecrire ("L'équation est indéterminé ")
Ecrire ("Le Modulo vaut : ", n1 MOD n2 : 5 : 2) Fin si
Sinon Ecrire(″Erreur : /0 ″) Sinon
Fin si delta ← b * b – 4*a*c
Sinon Si ( delta > 0 ) alors
Ecrire ("Deux racines réelles distincts : ", (-b – Racine(delta) / (2*a ) , ″et″ ,

Enseignant : AHMED BELHASSEN 13 Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation Algorithmique et programmation

(-b + Racine(delta) / (2*a ) ) Exercice 16 :


Sinon Si ( delta = 0 ) alors Analyse du problème
Ecrire ("Une solution réelle double : " , -b/(2*a)) Nom : SALAIRE
Sinon Résultat = Ecrire ( ″ Le salaire de base = ″ , sb , ″ et la commission = ″ , com )
Ecrire ("pas de solution") com =[ ]
Fin si Si (r >1200) OU (nh > 50) alors
Fin si com ← 20% * sb
a =donnée ("Donner le coefficient de x² ") Sinon si ( nh > 40 ) ET (nh <=50 ) alors
b =donnée ("Donner le coefficient de x ") com ← 10% * sb
c =donnée ("Donner le terme indépendant ") Sinon com ← 5% * sb
Fin DEGRE2 Fin si
TDO sb = [ ]
Objet Type / nature Si (r <=1000) OU (kp < 4000) alors
a ,b , c , delta Réel sb ← 400
Sinon si ( r >=1500 ) ET (kp>=5000 ) alors
Algorithme Traduction en PASCAL sb ← 500
0) Début DEGRE2 PROGRAM DEGRE2 ; Sinon sb ← 600
1) Ecrire (″Donner le coefficient de x² ″) , Lire (a) USES WINCRT ; Fin si
2) Ecrire (″Donner le coefficient de x ″) , Lire (b) VAR a,b,c,delta : REAL ;
3) Ecrire (″Donner le terme indépendant ″) , Lire (c) BEGIN nh = donnée ( " Donner le nombre d’heure : ")
4) WRITELN ( ' Donner le coefficient de x² ' ) ; kp = donnée ( " Donner le nombre de Kilo : ")
Si ( a= 0 ) alors READLN (a) ; r = donnée ( " Donner la recette : ")
Si ( b <>0 ) alors WRITELN ( ' Donner le coefficient de x ' ) ; Fin SALAIRE
Ecrire ("L'équation est du premier degré et READLN (b) ; TDO
admet une racine ", -c/b : 5 :2 ) WRITELN ( ' Donner le terme indépendant ' ) ; Objet Type / nature
Sinon Si ( c <>0 ) alors READLN (c) ; r , kp , nh ,sb ,com Réel
Ecrire ("L'équation est du premier degré et IF( a= 0 ) THEN
n'admet pas de racine ") IF ( b <>0 ) THEN Algorithme Traduction en PASCAL
Sinon WRITELN ('L''équation est du premier degré et 0) Début SALAIRE PROGRAM SALAIRE ;
Ecrire ("L'équation est indéterminé ") admet une racine ', -c/b : 5 :2 ) 1) Ecrire ( " Donner la recette : " ) , Lire (r) USES WINCRT ;
Fin si ELSE IF ( c <>0 ) THEN 2)Ecrire ( " Donner le nombre de Kilo :" ), Lire (kp) VAR r ,kp,nh,sb,com: REAL ;
Sinon WRITELN (' L'équation est du premier degré et 3) Ecrire ( " Donner le nombre d’heure : "),Lire (nh) BEGIN
delta ← b * b – 4*a*c n''admet pas de racine ' ) 4) Si (r <=1000) OU (kp < 4000) alors WRITELN (' Donner la recette : ' ) ;
Si ( delta > 0 ) alors ELSE sb ← 400 READLN (r) ;
Ecrire ("Deux racines réelles distincts : ", (-b – WRITELN (' L''équation est indéterminé ' ) Sinon si ( r >=1500 ) ET (kp>=5000 ) alors WRITELN (' Donner le nombre de Kilo : ' );
Racine(delta)) / (2*a ) , ″et″ , (-b + Racine(delta)) sb ← 500 READLN(kp) ;
/ (2*a ) ) ELSE Sinon sb ← 600 WRITELN (' Donner le nombre d’'heure : ');
Sinon Si ( delta = 0 ) alors BEGIN Fin si READLN(nh) ;
Ecrire ("Une solution réelle double : " , delta := b * b – 4*a*c ; 5) Si (r >1200) OU (nh > 50) alors IF (r <=1000) OR (kp < 4000) THEN
-b/(2*a)) IF ( delta > 0 ) THEN com ← 0.2 * sb sb :=400
Sinon WRITELN (' Deux racines réelles distincts :' , (-b – Sinon si (nh >40 ) ET (nh <=50 ) alors ELSE IF ( r >=1500 ) AND (kp>=5000 ) THEN
Ecrire ("pas de solution") SQRT(delta)) / (2*a ) , ' et ' , (-b + SQRT(delta)) com ← 0.1 * sb sb :=500
Fin si / (2*a ) ) Sinon com ← 0.05 * sb ELSE sb := 600 ;
Fin si ELSE IF ( delta = 0 ) THEN Fin si IF (r >1200) OR (nh > 50) THEN
5) Fin DEGRE2 WRITELN ('Une solution réelle double : ' , 6) Ecrire ( ″ Le salaire de base = ″ , sb , ″ et la com := 0.2 * sb
-b/(2*a)) commission = ″ , com ) ELSE IF ( nh> 40 ) AND (nh <=50 ) THEN
ELSE 7) Fin SALAIRE com := 0.1 * sb
WRITELN (' pas de solution ' ) ; ELSE com := 0.05 * sb ;
END ; WRITELN ( ' Le salaire de base = ' , sb , ' et la
END. commission = ' , com ) ;
END.

Enseignant : AHMED BELHASSEN 15 Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation Algorithmique et programmation

Exercice 17 : 7) c3 ← assur>=1 WRITELN (' Entrer le nombre d’'accidents : ');


Analyse du problème 8) p ← 0 READLN(acc) ;
Nom : ASSURANCE Si non(c1) alors WRITELN ('Entrer le nombre d’'années d’'assurance :
Résultat = Ecrire ( ″ Votre situation = ″ , situ ) p ← p+1 '); READLN (assur) ;
situ =[ ] Si ( p = -1) alors fin si c1:=age >=25 ;
situ ← ″ Bleu ″ Si non(c2) alors c2 :=perm>=2 ;
Sinon si ( p = 0 ) alors p ← p+1 c3 := assur>=1 ;
situ ← ″ Vert ″ fin si p :=0 ;
Sinon si ( p = 1 ) alors p←p+acc IF NOT(c1) THEN
situ ← ″ Orange ″ si ( p<3 ) ET c3 alors p := p+1 ;
Sinon si ( p = 2 ) alors p←p-1 IF NOT(c2) THEN
situ ← ″ Rouge ″ finsi p := p+1 ;
Sinon p :=p+acc ;
situ ← ″ Refusé ″ 9) Si ( p = -1) alors IF ( p<3 ) AND c3 THEN
Fin si situ ← ″ Bleu ″ p :=p-1 ;
p = [ p ← 0 , c1← age >=25 , c2←perm>=2 , c3 ← assur>=1 ] Sinon si ( p = 0 ) alors IF( p = -1) THEN
Si non(c1) alors situ ← ″ Vert ″ situ :=' Bleu '
p ← p+1 Sinon si ( p = 1 ) alors ELSE IF ( p = 0 ) THEN
fin si situ ← ″ Orange ″ situ := ' Vert '
Si non(c2) alors Sinon si ( p = 2 ) alors ELSE IF ( p = 1 ) THEN
p ← p+1 situ ← ″ Rouge ″ situ := ' Orange '
fin si Sinon ELSE IF ( p = 2 ) THEN
p←p+acc situ ← ″ Refusé ″ situ := ' Rouge '
si ( p<3 ) ET c3 alors Fin si ELSE
p←p-1 situ := ' Refusé ' ;
fin si 10) Ecrire ( ″ Votre situation = ″ , situ ) WRITELN ( ' Votre situation = ' , situ ) ;
age = donnée ( " Entrer l'âge : ") 11) Fin ASSURANCE END.
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 : ") Exercice 18 :
Fin ASSURANCE Analyse du problème
Nom : POSITION
Résultat = Ecrire ( ″ La position des deux cercles C1 et C2 est : ″ , pos )
pos =[ ]
TDO Si ( d > ( r1+r2)) alors
Objet Type / nature pos ← ″ Ne se coupent pas ″
age , perm , acc Entier Sinon si ( d < ( r1+r2))alors
,assur ,p pos ← ″ Se coupent en deux points ″
c1,c2,c3 Booléen Sinon
situ Chaine de caractère pos ← ″ Se coupent en un point ″
Fin si
Algorithme Traduction en PASCAL d ← Racine_carré( carré ( ya-yb) + carré( xa-xb))
0) Début ASSURANCE PROGRAM ASSURANCE ; r2= donnée (" Donner Le rayon de cercle C2 de centre B : ")
1) Ecrire ( " Entrer l'âge : " ) , Lire (age) USES WINCRT ; r1= donnée (" Donner Le rayon de cercle C1 de centre A : ")
2)Ecrire ( "Entrer le nombre d’années de permis:" ), VAR age , perm , acc ,assur ,p : INTEGER ; yb = donnée ( " Donner l’ordonnée de point B : ")
Lire (perm) c1,c2,c3 : BOOLEAN ; xb = donnée ( " Donner l’abscisse de point B : ")
3) Ecrire ( "Entrer le nombre d’accidents :"), situ :STRING; ya = donnée ( " Donner l’ordonnée de point A : ")
Lire (acc) BEGIN xa = donnée ( " Donner l’abscisse de point A : ")
4) Ecrire ( " Entrer le nombre d’années WRITELN (' Entrer l''âge : ' ) ; Fin POSITION
d’assurance : "), Lire (assur ) READLN (age) ;
5) c1← age >=25 WRITELN ('Entrer le nombre d’'années de permis:' );
6) c2←perm>=2 READLN(perm) ;

Enseignant : AHMED BELHASSEN 17 Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation

TDO
Objet Type / nature
xa, xb , ya ,yb ,r1,r2,d Réel
pos Chaine de caractère

Algorithme Traduction en PASCAL


0) Début POSITION PROGRAM POSITION ;
1) Ecrire ( " Donner l’abscisse de point A : " ) USES WINCRT ;
Lire (xa) VAR xa, xb , ya ,yb ,r1,r2,d : REAL ;
2)Ecrire ( " Donner l’ordonnée de point A : " ), pos :STRING;
Lire (ya) BEGIN
3) Ecrire ( " Donner l’abscisse de point B : " ) WRITELN (' Donner l’’abscisse de point A : ' ) ;
Lire (xb) READLN (xa) ;
4)Ecrire ( " Donner l’ordonnée de point B : " ), WRITELN (' Donner l’’ordonnée de point A : ' );
Lire (yb) READLN(ya) ;
3) Ecrire ( " Donner Le rayon de cercle C1 de WRITELN (' Donner l’’abscisse de point B : ' ) ;
centre A : "),Lire (r1) READLN (xb) ;
4) Ecrire ( " Donner Le rayon de cercle C2 de WRITELN (' Donner l’’ordonnée de point B : ' );
centre B :"), Lire (r2) READLN(yb) ;
5) d ← Racine_carré( carré ( ya-yb) + carré( xa-xb)) WRITELN (' Donner Le rayon de cercle C1 de centre
9) Si ( d > ( r1+r2)) alors A : ');
pos ← ″ Ne se coupent pas ″ READLN(r1) ;
Sinon si ( d < ( r1+r2))alors WRITELN (' Donner Le rayon de cercle C2 de centre
pos ← ″ Se coupent en deux points ″ B :'); READLN (r2) ;
Sinon d :=SQRT ( SQR ( ya-yb) + SQR( xa-xb)) ;
pos ← ″ Se coupent en un point ″
Fin si IF( d > ( r1+r2)) THEN
pos :=' Ne se coupent pas '
10) Ecrire ( ″ La position des deux cercles C1 et C2 ELSE IF ( d < ( r1+r2)) THEN
est : ″ , pos ) pos := ' Se coupent en deux points '
11) Fin POSITION ELSE
pos := ' Se coupent en un point ' ;

WRITELN ( ' La position des deux cercles C1 et C2


est : ' , pos ) ;
END.

Enseignant : AHMED BELHASSEN 19


Algorithmique et programmation Algorithmique et programmation

Exercice 4 :
Série d’exercices 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)

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

Exercice 2 : Exercice 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CAL_SOM permettant de calculer la Rédiger une analyse, un algorithme et un programme en PASCAL intitulé CODAGE, qui permet de lire un
somme d’entier allant de 1 à N (5 =<N =<100). 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 3 :
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: Exercice 7 :
Pour N=14276 la valeur de S est 4+2+6 = 12 Le programme SOMME_CHIFFRES_PAIR affichera le Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOMME_CHIFFRES, qui permet
résultat suivant : S=12 de lire une chaîne de caractères CH commençant obligatoirement par une lettre alphabétique majuscule (et
supposée composée par des lettres et des chiffres), détermine et affiche l'entier S formé par la somme des
chiffres qui figurent dans la chaîne CH.
Exemple :
Pour CH='Ali12abc26' la valeur de S est 1+2+2+6 = 11 Le programme SOMME_CHIFFRES affichera le
résultat suivant : S = 11

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 8 : Exercice 11 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MAX_MIN permettant de chercher Rédiger une analyse, un algorithme et un programme en PASCAL intitulé EXISTE permettant de remplir un
le maximum et le minimum dans un tableau T d’entier de taille N (N saisie par l’utilisateur). 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 9 :
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 12 :
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 :
Exercice 10 :
n
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 :
PS = ∑ A[i] * B[i]
i =1
- La position de première occurrence de X dans le tableau T.
- La position de dernière occurrence de X dans le tableau T.
- le nombre d’occurrence de X dans le tableau T.
Exemple : N=10, X=8
T 7 8 17 12 14 8 5 15 8 19
1 2 3 4 5 6 7 8 9 10
- La position de première occurrence de X dans T est : 2.
- La position de dernière occurrence de X dans T est : 9.
- Le nombre d’occurrence de X dans T est : 3.

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Exercice 2 : Méthode 1 : en utilisant tant que…faire


Correction de série Analyse du problème
Nom : CAL_SOM
Résultat = Ecrire (″ La somme = ″ , somme )
somme= [ somme ←0 , i ← 0 ]

d’exercices Tant que ( i<=N ) faire


somme ← somme + i
i ← i+1
Fin tant que

Les structures de N= [ ]

Fin CAL_SOM
Répéter
N=donnée ( ″ Donner un entier N : ″ )
Jusqu’à N dans [ 5..100]

contrôle itératives Objet


N, i ,somme
TDO
Type/Nature
Entier

Algorithme Traduction en PASCAL


0) Début CAL_SOM PROGRAM CAL_SOM ;
1) Répéter USES WINCRT ;
Exercice 1 : Ecrire (″Donner un entier N : ″ ) VAR N , i ,somme : INTEGER ;
Analyse du problème Lire(N) BEGIN
Nom : PUISSANCE Jusqu’à N dans [ 5..100] REPEAT
Résultat = Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p ) 2) somme ←0 i ← 0 WRITE (' Donner un entier N : ' );
p = [ p ← 1 ] pour i de 1 à b faire Tant que ( i<=N ) faire READLN (N);
p←p*a somme ← somme + i UNTIL N IN [ 5..100] ;
fin pour i ← i+1 somme:=0;
a = donnée ( "a = ") Fin tant que i:=0 ;
b = donnée ( "b = ") 3) Ecrire (″ La somme = ″ , somme ) WHILE ( i<=N ) DO
Fin PUISSANCE 4) Fin CAL_SOM BEGIN
TDO somme:=somme+i ;
Objet Type/Nature i:=i+1 ;
p,a,b,i Entier END;
WRITELN (' La somme = ' , somme ) ;
Algorithme Traduction en PASCAL END.
0) Début PUISSANCE PROGRAM PUISSANCE ;
1) Ecrire ( " a = ") , lire(a) USES WINCRT ; Méthode 2 : en utilisant Répéter…jusqu’à
2) Ecrire ( " b = ") , lire(b) VAR p,a,b,i : INTEGER ; Analyse du problème
3) p ← 1 BEGIN Nom : CAL_SOM
pour i de 1 à b faire WRITE (' a = '); READLN (a); Résultat = Ecrire (″ La somme = ″ , somme )
p←p*a WRITE (' b = '); READLN (b); somme= [ somme ←0, i ← 1]
fin pour p :=1 ; Répéter
4) Ecrire ( a , ″ à la puissance de ″ , b , ″ = ″, p ) FOR i :=1 TO b DO somme ← somme + i
5) Fin PUISSANCE p := p*a ; i ← i+1
WRITELN (a,' à la puissance de ', b, ' = ' ,p ) ; Jusqu’à i > N
END. N= [ ] Répéter
N=donnée ( ″ Donner un entier N : ″ )
Jusqu’à N dans [ 5..100]

Fin CAL_SOM

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

TDO fin si s :=0 ;


Objet Type/Nature y ← y DIV 10 REPEAT
N, i ,somme Entier Jusqu’à ( y=0) x:=y MOD 10;
IF ( x MOD 2 =0 ) THEN
Algorithme Traduction en PASCAL 3) Ecrire (″La somme des chiffres pair de ″, n , ″ est s:=s+x;
0) Début CAL_SOM PROGRAM CAL_SOM ; égal à ″, s ); y:=y DIV 10 ;
1) Répéter USES WINCRT ; UNTIL ( y =0 ) ;
Ecrire (″Donner un entier N : ″ ) VAR N , i ,somme : INTEGER ; 4) Fin SOMME_CHIFFRE_PAIR WRITE (' La somme des chiffres pair de ', n , ' est
Lire(N) BEGIN égal à ' , s );
Jusqu’à N dans [ 5..100] REPEAT END.
2) somme ←0 i ← 1 WRITE (' Donner un entier N : ' );
Répéter READLN (N); Exercice 4 :
somme ← somme + i UNTIL N IN [ 5..100] ; Analyse du problème
i ← i+1 somme:=0; Nom : SOM_FACT
Jusqu’à i > N i:=1 ; Résultat = Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty )
3) Ecrire (″ La somme = ″ , somme ) REPEAT factx= [ factx ← 1 ] Pour i de x à 2 (pas = -1) faire
4) Fin CAL_SOM somme:=somme+i ; factx ← factx * i
i:=i+1 ; Fin pour
UNTIL i > N ; facty= [ facty ← 1 ] Pour i de y à 2 (pas = -1) faire
WRITELN (' La somme = ' , somme ) ; facty ← facty * i
END. Fin pour
x ← n DIV 10
Exercice 3 : y ← n MOD 10
Analyse du problème n= [ ] Répéter
Nom : SOMME_CHIFFRE_PAIR n=donnée ( ″ N = ″ )
Résultat = Ecrire (″La somme des chiffres pair de ″, n , ″ est égal à ″, s ) Jusqu’à ( n dans [ 2..50] )
s= [ y ← n , s ← 0 ] Répéter
x ← y MOD 10 Fin SOM_FACT
si ( x MOD 2 =0 ) alors TDO
s← s+x Objet Type/Nature
fin si n , x , y , factx , facty , i Entier
y ← y DIV 10
Jusqu’à ( y=0) Algorithme Traduction en PASCAL
n= [ ] Répéter 0) Début SOM_FACT PROGRAM SOM_FACT ;
n=donnée ( ″ N = ″ ) 1) Répéter USES WINCRT ;
Jusqu’à ( n >0 ) Ecrire (″ N = ″ ) VAR n , x , y , factx , facty , i : INTEGER ;
Fin SOMME_CHIFFRE_PAIR Lire (n ) BEGIN
TDO Jusqu’à ( n dans [ 2..50]) REPEAT
Objet Type/Nature 2) x ← n DIV 10 WRITE (' N = ' );
s , n , x, y Entier 3) y ← n MOD 10 READLN (n);
4) factx ← 1 UNTIL ( n IN [ 2..50] );
Algorithme Traduction en PASCAL Pour i de x à 2 (pas = -1) faire y:=n MOD 10;
0) Début SOMME_CHIFFRE_PAIR PROGRAM SOMME_CHIFFRE_PAIR ; factx ← factx * i x:=n DIV 10;
1) Répéter USES WINCRT ; Fin pour factx:=1;
Ecrire (″ N = ″ ) VAR s , n , x, y : INTEGER ; 5) facty ← 1 FOR i:=x DOWNTO 2 DO factx:=factx*i;
Lire (n ) BEGIN Pour i de y à 2 (pas = -1) faire facty:=1;
Jusqu’à ( n >0 ) REPEAT factx ← factx * i FOR i:=y DOWNTO 2 DO facty:=facty*i;
2) y ← n s ← 0 WRITE (' N = ' ); Fin pour WRITELN ( x , ' ! + ' ,y , ' ! =',factx+facty);
Répéter READLN (n); 6) Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty ) END.
x ← y MOD 10 7) Fin SOM_FACT
si ( x MOD 2 =0 ) alors UNTIL ( n > 0) ;
s← s+x y:=n ;

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Exercice 5 : Algorithme Traduction en PASCAL


Analyse du problème 0) Début CODAGE PROGRAM CODAGE;
Nom : TRIANGLE 1) Répéter USES WINCRT;
Résultat = Affichage Ecrire (″Donner la chaine à tester :″ ) VAR ch,sch :STRING;
Affichage= [ ch ← ″ ″ ] Pour i de 1 à n faire Lire (ch ) i:INTEGER;
ch ← ch + ″*″ Jusqu’à ( ch <> ″ ″ ) BEGIN
Ecrire (ch) 2) sch ← ″ ″ REPEAT
Fin pour Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
n= [ ] Répéter sch ← sch+CHR(ORD(ch[ i ])+2) READLN(ch);
n=donnée ( ″ N = ″ ) Fin pour UNTIL ch<>'';
Jusqu’à ( n >0 ) 3) Ecrire (ch, ″ sera transformée en ″ , sch ) sch:='';
Fin TRIANGLE 4) Fin CODAGE FOR i:=1 TO LENGTH(ch) DO
TDO sch:=sch+CHR(ORD(ch[ i ])+2);
Objet Type/Nature WRITELN (ch,' sera transformée en ',sch);
n,i Entier END.
ch Chaine de caractère
Exercice 7 :
Algorithme Traduction en PASCAL Analyse du problème
0) Début TRIANGLE PROGRAM TRIANGLE; Nom : SOMME_CHIFFRE
1) Répéter USES WINCRT ; Résultat = Ecrire (″La somme des chiffres de ″, ch,″est :″,p )
Ecrire (″ N = ″ ) VAR n , i : INTEGER ; p= [ p ← 0 ] Pour i de 1 à LONG (ch) faire
Lire (n ) ch : STRING ; si ORD (ch[ i ]) dans [48..57] alors
Jusqu’à ( n > 0 ) BEGIN p ← p+(ORD(ch [ i ])-48)
2) ch ← ″ ″ REPEAT Fin si
Pour i de 1 à n faire WRITE ('N = '); Fin pour
ch ← ch + ″*″ READLN(n); ch=[ ] Répéter
Ecrire(ch) UNTIL n>0; ch=donnée ( ″ Donner la chaine à tester : ″ )
Fin pour ch:=''; Jusqu’à ( ch <> ″ ″ ) ET(ORD(ch[1])dans [65..90])
3) Fin TRIANGLE FOR i:=1 TO n DO Fin SOMME_CHIFFRE
BEGIN TDO
ch:=ch+'*'; Objet Type/Nature
WRITELN(ch); i,p Entier
END; ch Chaine de caractère
END.
Algorithme Traduction en PASCAL
Exercice 6 : 0) Début SOMME_CHIFFRE PROGRAM SOMME_CHIFFRE;
Analyse du problème 1) Répéter USES WINCRT;
Nom : CODAGE Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING;
Résultat = Ecrire (ch, ″ sera transformée en ″ , sch ) Lire (ch ) i, p :INTEGER;
sch= [ sch ← ″ ″] Pour i de 1 à LONG (ch) faire Jusqu’à ( ch <> ″ ″ )ET(ORD(ch[1])dans [65..90]) BEGIN
sch ← sch+CHR(ORD(ch[ i ])+2) 2) p ← 0 REPEAT
Fin pour Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :');
ch=[ ] Répéter si ORD (ch[ i ]) dans [48..57] alors READLN(ch);
ch=donnée ( ″ Donner la chaine à tester : ″ ) p ← p+(ORD(ch [ i ])-48) UNTIL (ch<>'')AND(ORD(ch[1]) IN [65..90]);
Jusqu’à ( ch <> ″ ″ ) Fin si p:=0;
Fin CODAGE Fin pour FOR i:=1 TO LENGTH(ch) DO
TDO 3) Ecrire (″La somme des chiffres de ″, ch,″est :″,p ) IF ORD(ch[ i ]) IN [48..57] THEN
Objet Type/Nature 4) Fin SOMME_CHIFFRE p:=p+(ORD(ch[ i ])-48);
i Entier WRITELN (' La somme des chiffres de ', ch,' est : ',p);
ch ,sch Chaine de caractère END.

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

Exercice 8 : Exercice 9 :
Analyse du problème Analyse du problème
Nom : MIN_MAX Nom : OCCURENCE
Résultat = Ecrire (″MIN =″ , min, ″MAX=″,max ) Résultat = Ecrire (″Le nombre d''ocurrence de ″ , c, ″dans T ″,nbr)
( min , max )= [ max ← t[1] , min ←t[1] ] pour i de 1 à n faire nbr = [ nbr ← 0] pour i de 1 à n faire
si t[ i ]< min alors ch ← t[ i ]
min ← t[i] l ← LONG (ch)
fin si pour j de 1 à l faire
si t[ i ]> min alors si ch[ j ] = c alors
max ← t[i] nbr ← nbr + 1
fin si fin si
fin pour fin pour
t=[ ] pour i de 1 à n faire fin pour
t[ i ] =donnée (″t[ ″, i , ″]=″ ) c=donnée (″Donner le caractère à chercher : ″)
Fin pour t=[ ] pour i de 1 à n faire
n=[ ] Répéter t[ i ] =donnée (″t[ ″, i , ″]=″ )
n=donnée (″Donner la taille du tableau :″) Fin pour
Jusqu’à n dans [ 2..100 ] n=[ ] Répéter
Fin MIN_MAX n=donnée (″Donner la taille du tableau :″)
TDO Jusqu’à n dans [ 2..100 ]
Objet Type/Nature Fin OCCURENCE
n , i , min , max Entier TDO
t Tableau de 100 entiers Objet Type/Nature
n , i , j , nbr , l Entier
Algorithme Traduction en PASCAL t Tableau de 100 entiers
0) Début MIN_MAX PROGRAM MIN_MAX ; c Caractère
1) Répéter USES WINCRT; ch Chaine de caractère
Ecrire (″Donner la taille du tableau :″ ) VAR n , i , min , max :INTEGER;
Lire (n) t:ARRAY[1..100] OF INTEGER; Algorithme Traduction en PASCAL
Jusqu’à n dans [ 2..100 ] BEGIN 0) Début OCCURENCE PROGRAM OCCURENCE ;
2) pour i de 1 à n faire REPEAT 1) Répéter USES WINCRT;
Ecrire ( ″t[ ″, i , ″]=″ ) WRITE ('Donner la taille du tableau :'); Ecrire (″Donner la taille du tableau :″ ) VAR n , i , j , nbr , l :INTEGER;
Lire (t[i]) READLN(n); Lire (n) ch : STRING;
fin pour UNTIL n IN [2..100]; Jusqu’à n dans [ 2..100 ] c: CHAR;
3) max ← t[1] min ←t[1] FOR i:=1 TO n DO 2) pour i de 1 à n faire t : ARRAY[1..100] OF STRING ;
pour i de 1 à n faire BEGIN Ecrire ( ″t[ ″, i , ″]=″ ) BEGIN
si t[ i ]< min alors WRITE('t[',i,']='); Lire (t[i]) REPEAT
min ← t[i] READLN(t[i]); fin pour WRITE ('Donner la taille du tableau :');
fin si END; 3) Ecrire (″Donner le caractère à chercher : ″ ) READLN(n);
si t[ i ]> min alors min:=t[1] ; max:=t[1]; Lire (c) UNTIL n IN [2..100];
max ← t[i] FOR i:=1 TO n DO 4) nbr ← 0 FOR i:=1 TO n DO
fin si BEGIN pour i de 1 à n faire BEGIN
fin pour IF t[i] < min THEN min:=t[i]; ch ← t[ i ] WRITE('t[',i,']=');
4) Ecrire (″MIN =″ , min, ″MAX=″,max ) IF t[i] > max THEN max:=t[i]; l ← LONG (ch) READLN(t[i]);
5) Fin MIN_MAX END; pour j de 1 à l faire END;
WRITELN('MIN = ' , min,' MAX = ',max); si ch[ j ] = c alors WRITE ('Donner le caractère à chercher : ');
END. nbr ← nbr + 1 READLN(c);
fin si nbr:=0;
fin pour FOR i:=1 TO n DO
fin pour BEGIN
5) Ecrire (″Le nombre d''ocurrence de ″ , c, ″dans T ch:= t[i] ; l:=LENGTH(ch);
″,nbr) FOR j :=1 TO l DO

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

6) Fin OCCURENCE IF ch[j]=c THEN fin pour UNTIL n IN [2..50] ;


nbr:=nbr+1; 3) Ecrire ( ″X=″ ) FOR i:=1 TO n DO
END; Lire (x) BEGIN
WRITELN ('Le nombre d''ocurrence de ' , c ,' dans T 4) i ← 0 WRITE('t[',i,']=');
=',nbr); Répéter READLN(t[i]);
END. i ← i+1 END;
Jusqu’à ( i=n) OU (t[ i ]=x) WRITELN('X=');
Exercice 10 : 5) si(t[ i ] =x) alors READLN(x);
Analyse du problème Ecrire (″la première occurrence de″,x,″est à la i:=0;
Nom : OCCURENCE_X position ″ ,i ) REPEAT
Résultat = Ecrire (″Le nombre d''occurence de ″, x ,″est ″ ,s ) Sinon Ecrire (x ,″ne figure pas dans T″ ) i:=i+1;
s= [ s←0 ] pour i de 1 à n faire Fin si UNTIL ( i=n) OR (t[ i ] = x);
si(t[ i ] =x) alors 6) i ← n+1 IF ( t[i] = x ) THEN
s ← s+1 Répéter WRITELN (' la première occurrence de ', x , ' est à
fin si i ← i-1 la position ' ,i )
fin pour Jusqu’à ( i=0) OU (t[ i ]=x) ELSE
Dernier=[ ] si(t[ i ] =x) alors 7) si(t[ i ] =x) alors WRITELN ( x ,' ne figure pas dans T ');
Ecrire (″la dernière occurrence de″,x,″est à la position ″ ,i ) Ecrire (″la dernière occurrence de″,x,″est à la i:=n+1;
Sinon Ecrire (x,″ne figure pas dans T″ ) position ″ ,i ) REPEAT
Fin si Sinon Ecrire (x,″ne figure pas dans T″ ) i:=i-1;
i=[ i ← n+1] Répéter Fin si UNTIL ( i=0) OR ( t[ i ] = x );
i ← i-1 8) s←0 IF ( t[i] = x) THEN
Jusqu’à ( i=0) OU (t[ i ]=x) pour i de 1 à n faire WRITELN (' la dernière occurrence de ', x , ' est à
Premier=[ ] si(t[ i ] =x) alors si(t[ i ] =x) alors la position ' ,i )
Ecrire (″la première occurrence de″,x,″est à la position ″ ,i ) s ← s+1 ELSE
Sinon Ecrire (x,″ne figure pas dans T″ ) fin si WRITELN ( x ,' ne figure pas dans T ');
Fin si fin pour s:=0;
i=[ i ← 0] Répéter 9) Ecrire (″Le nombre d''occurence de ″,x,″est ″ ,s ) FOR i:=1 TO n DO
i ← i+1 10) Fin OCCURENCE_X IF ( t[i]=x) THEN s:=s+1;
Jusqu’à ( i=n) OU (t[ i ]=x) WRITELN(' Le nombre d''occurence de ' , x , ' est
x=donnée (″X=″) ' , s);
t=[ ] pour i de 1 à n faire END.
t[ i ]=donnée( ″t[ ″, i , ″]=″ )
fin pour Exercice 11 :
n=[ ] Répéter Analyse du problème
n=donnée (″Donner la taille du tableau :″) Nom : EXISTE
Jusqu’à n dans [ 2..50 ] Résultat = existance
Fin OCCURENCE_X existance =[ ] si(t[ i ] =e) alors
TDO Ecrire (e, ″ existe dans T à la position ″ , i )
Objet Type/Nature Sinon Ecrire (e, ″ n''existe pas dans T ″ )
n,x,s,i Entier Fin si
t Tableau de 50 entiers i=[ i ← 0] Répéter
i ← i+1
Algorithme Traduction en PASCAL Jusqu’à ( i=n) OU (t[ i ]=e)
0) Début OCCURENCE_X PROGRAM OCCURENCE_X; e=donnée (″E=″)
1) Répéter USES WINCRT; t=[ ] pour i de 1 à n faire
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER; t[ i ]=donnée( ″t[ ″, i , ″]=″ )
Lire (n) n,x,s,i :INTEGER ; fin pour
Jusqu’à n dans [ 2..50 ] BEGIN n=[ ] Répéter
2) pour i de 1 à n faire REPEAT n=donnée (″Donner la taille du tableau :″)
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau'); Jusqu’à n dans [ 2..50 ]
Lire (t[i]) READLN(n); Fin EXISTE

Enseignant : AHMED BELHASSEN 9 Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation Algorithmique et programmation

TDO TDO
Objet Type/Nature Objet Type/Nature
n,e,i Entier n,i Entier
t Tableau de 50 entiers a,b Tableau de 50 entiers
s Entier long
Algorithme Traduction en PASCAL
0) Début EXISTE PROGRAM EXISTE; Algorithme Traduction en PASCAL
1) Répéter USES WINCRT; 0) Début PRODUIT_SCALAIRE PROGRAM PRODUIT_SCALAIRE;
Ecrire (″Donner la taille du tableau :″ ) VAR t:ARRAY[1..50]OF INTEGER; 1) Répéter USES WINCRT;
Lire (n) n,e,i: INTEGER; Ecrire (″Donner la taille du tableau :″ ) VAR a,b :ARRAY[1..50]OF INTEGER;
Jusqu’à n dans [ 2..50 ] BEGIN Lire (n) n,i :INTEGER;
2) pour i de 1 à n faire REPEAT Jusqu’à n dans [ 5..50 ] s :LONGINT;
Ecrire ( ″t[ ″, i , ″]=″ ) WRITELN ('Donner la taille du tableau'); 2) pour i de 1 à n faire BEGIN
Lire (t[i]) READLN(n); Ecrire (″a[ ″, i , ″]=″ ) REPEAT
fin pour UNTIL n IN [2..50] ; Lire (a[i]) WRITELN ('Donner la taille du tableau');
3) Ecrire ( ″E=″ ) FOR i:=1 TO n DO fin pour READLN(n);
Lire (e) BEGIN 3) pour i de 1 à n faire UNTIL n IN [5..50] ;
4) i ← 0 WRITE('t[',i,']='); Ecrire (″b[ ″, i , ″]=″ ) FOR i:=1 TO n DO
Répéter READLN(t[i]); Lire (b[i]) BEGIN
i ← i+1 END; fin pour WRITE ('a[',i,']=');
Jusqu’à ( i=n) OU (t[ i ]=e) WRITELN('E ='); 4) s ← 0 READLN(a[i]);
5) si(t[ i ] =e) alors READLN(e); pour i de 1 à n faire END;
Ecrire (e, ″ existe dans T à la position ″ , i ) i:=0; s ← s+a[ i ]*b[ i ] WRITELN;
Sinon Ecrire (e, ″ n''existe pas dans T ″ ) REPEAT Fin pour FOR i:=1 TO n DO
Fin si i:=i+1; 5) Ecrire (″ Le produit scalaire est égale à ″,s ) BEGIN
6) Fin EXISTE UNTIL ( i=n) OR ( t[i] = e); 6) Fin PRODUIT_SCALAIRE WRITE ('b[',i,']=');
IF ( t[i] = e ) THEN READLN(b[i]);
WRITELN ( e, ' existe dans T à la position ' ,i ) END;
ELSE s:=0;
WRITELN ( e ,' n''existe pas dans T '); FOR i:=1 TO n DO s:=s+a[i]*b[i];
END. WRITELN (' Le produit scalaire est égale à ' , s);
END.
Exercice 12 :
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

Enseignant : AHMED BELHASSEN 11 Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation Algorithmique et programmation

Exercice 4 :
Série d’exercices 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é.

Les structures de Exemple : Le mot « Epreuve » a pour poids 165 car : (1*5) + (4*5) + (5*21) + (7*5) = 165

contrôle itératives Exercice 5 :


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:
Exercice 1 : Pour CH='BASES DE DONNEES" la valeur de S est 6 Le programme NOMBRE_VOYELLE affichera le
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé REMPLACER permettant de : résultat suivant: S = 6
- 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 6 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé MAX_MIN permettant de chercher
le maximum et le minimum dans un tableau T d’entier de taille N (N saisie par l’utilisateur).

Exercice 2 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé 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 7 :
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 :
Exercice 3 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé SOM_FACT qui permet de calculer Pour N=7
et d’afficher la somme des factorielles des chiffres d’un entier n donné (2 ≤ n ≤ 50). T 424 715 133 121 454 616 566
(On donne aussi 0! = 1).
Exemple : Si n=13 alors 7 sera affiché (1! + 3 ! =7) Le programme affichera : les nombres symétriques de T sont: 424, 121, 454 et 616

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 9 :
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 8 :
Rédiger une analyse, un algorithme et un programme en PASCAL intitulé AFFICHE_CHAINE permettant :
 De remplir un tableau T de n chaînes de caractères (2<n<20). Chaque chaîne doit avoir un nombre de
caractères supérieur ou égal à son indice (i) dans le tableau.
 D’afficher pour chaque élément T[ i ] du tableau, les i premiers caractères de la chaîne.

Exemple : Soit T un tableau de 6 chaînes de caractères.

T Bit Modem Ecran Souris Processeur Mémoire


1 2 3 4 5 6
Le programme affiche les i premiers caractères de chaque T[i].
Explication :
Dans l’exemple précédent on affiche :
Pour T[1] le premier caractère de la chaîne
Pour T[2] les 2 premiers caractères de la chaîne
Pour T[3] les 3 premiers caractères de la chaîne
Pour T[4] les 4 premiers caractères de la chaîne
Pour T[5] les 5 premiers caractères de la chaîne
Pour T[6] les 6 premiers caractères de la chaîne
Le programme affichera selon le format suivant (triangle) : B
Mo
Ecr
Sour
Proce
Mémoir

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Algorithme Traduction en PASCAL

Correction de série 0) Début REMPLACER


1) Répéter
Ecrire (″ MAX = ″ )
PROGRAM REMPLACER ;
USES WINCRT ;
VAR i , max , n , x, y : INTEGER ;
Lire(max) BEGIN

d’exercices Jusqu’à max dans [ 10..99]


2) Répéter
Ecrire (″ N = ″ )
REPEAT
WRITE (' MAX = ' );
READLN (max);
Lire(n) UNTIL max IN [ 10..99];

Les structures de Jusqu’à n dans [ 2..9]

3) pour i de 1 à max faire


x ← i MOD 10
REPEAT
WRITE (' N = ' );
READLN (n);

contrôle itératives y ← i DIV 10


Si ( i MOD n =0 ) OU (x=n) OU (y=n) alors
Ecrire (″*″: 4)
Sinon
UNTIL n IN [ 2..9];
FOR i:=1 TO max DO
BEGIN
x:=i MOD 10;
Ecrire (i : 4) y:=i DIV 10 ;
Fin si
Fin pour IF ( i MOD n =0 ) OR (x=n) OR (y=n) THEN
Exercice 1 : 4) Fin REMPLACER WRITE ( '*': 4)
Analyse du problème ELSE
Nom : REMPLACER WRITE (i : 4);
Résultat = Affichage END;
Affichage= [ ] pour i de 1 à max faire END.
x ← i MOD 10
y ← i DIV 10
Si ( i MOD n =0 ) OU (x=n) OU (y=n) alors Exercice 2 :
Ecrire (″*″: 4) Analyse du problème
Sinon Nom : NOMBRE_AMIS
Ecrire ( i : 4 ) Résultat = Affichage
Fin si Affichage= [ ] si ( sy = x ) ET ( sx=y) alors
Fin pour Ecrire (x , ″ et ″, y , ″ sont amis″)
max= [ ] Répéter Sinon
max=donnée ( ″ MAX = ″ ) Ecrire (x , ″ et ″, y , ″ ne sont pas amis″)
Jusqu’à N dans [ 10..99 ] Fin si
sx=[ sx ←0] pour i de 1 à ( x DIV 2) faire
n= [ ] Répéter Si ( x MOD i =0 ) alors
n=donnée ( ″ N = ″ ) sx ←sx+i
Jusqu’à N dans [ 1..9 ] Fin si
Fin REMPLACER Fin pour
TDO Sy=[ sy ←0] pour i de 1 à ( y DIV 2) faire
Objet Type/Nature Si ( y MOD i =0 ) alors
i , max , n , x, y Entier 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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

TDO TDO
Objet Type/Nature Objet Type/Nature
sx , sy , i , x , y Entier n , x , y , factx , facty , i Entier

Algorithme Traduction en PASCAL Algorithme Traduction en PASCAL


0) Début NOMBRE_AMIS PROGRAM NOMBRE_AMIS; 0) Début SOM_FACT PROGRAM SOM_FACT ;
1) Répéter USES WINCRT ; 1) Répéter USES WINCRT ;
Ecrire (″ X = ″ ) VAR sx , sy , i , x , y : INTEGER ; Ecrire (″ N = ″ ) VAR n , x , y , factx , facty , i : INTEGER ;
Lire(x) BEGIN Lire (n ) BEGIN
Jusqu’à x > 0 REPEAT Jusqu’à ( n dans [ 2..50]) REPEAT
2) Répéter WRITE (' X = '); 2) x ← n DIV 10 WRITE (' N = ' );
Ecrire (″ Y = ″ ) READLN(x); 3) y ← n MOD 10 READLN (n);
Lire(y) UNTIL x >0 ; 4) factx ← 1 UNTIL ( n IN [ 2..50] );
Jusqu’à y > 0 REPEAT Pour i de x à 2 (pas = -1) faire y:=n MOD 10;
3) sx ←0 WRITE (' Y = '); factx ← factx * i x:=n DIV 10;
pour i de 1 à ( x DIV 2) faire READLN(y); Fin pour factx:=1;
Si ( x MOD i =0 ) alors UNTIL y >0 ; 5) facty ← 1 FOR i:=x DOWNTO 2 DO factx:=factx*i;
sx ←sx+i sx:=0; Pour i de y à 2 (pas = -1) faire facty:=1;
Fin si FOR i:=1 TO ( x DIV 2) DO factx ← factx * i FOR i:=y DOWNTO 2 DO facty:=facty*i;
Fin pour IF ( x MOD i =0 ) THEN Fin pour WRITELN ( x , ' ! + ' ,y , ' ! =',factx+facty);
4) sy ←0 sx:=sx+i; 6) Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty ) END.
pour i de 1 à ( y DIV 2) faire sy:=0; 7) Fin SOM_FACT
Si ( y MOD i =0 ) alors FOR i:=1 TO ( y DIV 2) DO
sy ←sy+i IF ( y MOD i =0 ) THEN
Fin si sy:=sy+i; Exercice 4 :
Fin pour Analyse du problème
5) si ( sy = x ) ET ( sx=y) alors IF ( sy=x)AND (sx=y) THEN Nom : POIDS
Ecrire (x , ″ et ″, y , ″ sont amis″) WRITELN(x , ' et ', y , ' sont amis') Résultat = Ecrire (″Le poids de mot ″, ch, ″ est ″ , p )
Sinon ELSE p= [ p ←0 ] Pour i de 1 à LONG (ch) faire
Ecrire (x , ″ et ″, y , ″ ne sont pas amis″) WRITELN(x , ' et ', y , ' ne sont pas amis'); Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors
Fin si END. p ← p+(i *(ORD (ch[ i ])-96))
4) Fin NOMBRE_AMIS Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] alors
p ← p+(i *(ORD (ch[ i ])-64))
Fin si
Fin pour
Exercice 3 : ch=donnée ( ″ Donner la chaine à tester : ″ )
Analyse du problème Fin POIDS
Nom : SOM_FACT TDO
Résultat = Ecrire ( n , ″ ! +″ , y , ″ ! =″ , factx+facty ) Objet Type/Nature
factx= [ factx ← 1 ] Pour i de x à 2 (pas = -1) faire i,p Entier
factx ← factx * i ch Chaine de caractère
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

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Algorithme Traduction en PASCAL Exercice 6 :


0) Début POIDS PROGRAM POIDS; Analyse du problème
1) Ecrire (″Donner la chaine à tester :″ ) , Lire (ch ) USES WINCRT; Nom : MIN_MAX
2) p ← 0 VAR i,p :INTEGER; Résultat = Ecrire (″MIN =″ , min, ″MAX=″,max )
Pour i de 1 à LONG (ch) faire ch:STRING; ( min , max )= [ max ← t[1] , min ←t[1] ] pour i de 1 à n faire
Si ch [ i ] dans [″a″,″e″,″u″,″y″,″i″,″o″] alors BEGIN si t[ i ]< min alors
p← p+(i *(ORD (ch[ i ])-96)) WRITE('Donner la chaine à tester :'); min ← t[i]
Sinon si ch [ i ]dans [″A″,″E″,″U″,″Y″,″I″,″O″] alors READLN(ch); p:=0 ; fin si
p← p+(i *(ORD (ch[ i ])-64)) FOR i:=1 TO LENGTH(ch) DO si t[ i ]> min alors
Fin si IF ch[ i ] IN ['a','e','u','y','i','o'] THEN max ← t[i]
Fin pour p:=p+(i *(ORD (ch[ i ])-96)) fin si
3) Ecrire (″Le poids de mot ″, ch, ″ est ″ , p ) ELSE IF ch[ i ] IN ['A','E','U','Y','I','O'] THEN fin pour
4) Fin POIDS p:=p+(i *(ORD (ch[ i ])-64)); t=[ ] pour i de 1 à n faire
WRITELN ('Le poid de mot ',ch,' est ',p); t[ i ] =donnée (″t[ ″, i , ″]=″ )
END. Fin pour
n=[ ] Répéter
Exercice 5 : n=donnée (″Donner la taille du tableau :″)
Analyse du problème Jusqu’à n dans [ 2..100 ]
Nom : NOMBRE_VOYELLE Fin MIN_MAX
Résultat = Ecrire (″Le nombre des voyelles dans la chaine ″, ch , ″ est ″ , p ) TDO
p= [ p ←0 ] Pour i de 1 à LONG (ch) faire Objet Type/Nature
Si ch [ i ] dans [″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] alors n , i , min , max Entier
p← p + 1 t Tableau de 100 entiers
Fin si
Fin pour Algorithme Traduction en PASCAL
ch=[ ] Répéter 0) Début MIN_MAX PROGRAM MIN_MAX ;
ch=donnée ( ″ Donner la chaine à tester : ″ ) 1) Répéter USES WINCRT;
Jusqu’à ( ch <> ″ ″ ) Ecrire (″Donner la taille du tableau :″ ) VAR n , i , min , max :INTEGER;
Fin NOMBRE_VOYELLE Lire (n) t:ARRAY[1..100] OF INTEGER;
TDO Jusqu’à n dans [ 2..100 ] BEGIN
Objet Type/Nature 2) pour i de 1 à n faire REPEAT
i,p Entier Ecrire ( ″t[ ″, i , ″]=″ ) WRITE ('Donner la taille du tableau :');
ch Chaine de caractère Lire (t[i]) READLN(n);
fin pour UNTIL n IN [2..100];
Algorithme Traduction en PASCAL 3) max ← t[1] min ←t[1] FOR i:=1 TO n DO
0) Début NOMBRE_VOYELLE PROGRAM NOMBRE_VOYELLE; pour i de 1 à n faire BEGIN
1) Répéter USES WINCRT; si t[ i ]< min alors WRITE('t[',i,']=');
Ecrire (″Donner la chaine à tester :″ ) VAR ch :STRING; min ← t[i] READLN(t[i]);
Lire (ch ) i,p :INTEGER; fin si END;
Jusqu’à ( ch <> ″ ″ ) BEGIN si t[ i ]> min alors min:=t[1] ; max:=t[1];
2) p ← 0 REPEAT max ← t[i] FOR i:=1 TO n DO
Pour i de 1 à LONG (ch) faire WRITE ('Donner la chaine à tester :'); fin si BEGIN
Si ch [ i ] dans READLN(ch); fin pour IF t[i] < min THEN min:=t[i];
[″a″,″A″,″e″,″E″,″u″,″U″,″y″,″Y″,″o″,″O″,″i″,″I″] UNTIL (ch<>''); 4) Ecrire (″MIN =″ , min, ″MAX=″,max ) IF t[i] > max THEN max:=t[i];
alors p:=0; 5) Fin MIN_MAX END;
p← p + 1 FOR i:=1 TO LENGTH(ch) DO WRITELN('MIN = ' , min,' MAX = ',max);
Fin si IF ch[ i ] IN ['a','A','e','E','u','U','y','Y','o','O','i','I'] END.
Fin pour THEN p:=p+1;
3) Ecrire (″Le nombre des voyelles dans la chaine ″, WRITELN (' Le nombre des voyelles dans la chaine ',
ch, ″ est ″ , p ) ch,' est : ',p);
4) Fin NOMBRE_VOYELLE END.

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

Exercice 7 : Exercice 8 :
Analyse du problème Analyse du problème
Nom : SYMETRIE Nom : AFFICHE_TABLEAU
Résultat = Aff_sym Résultat = Affichage
Aff_sym =[ ] pour i de 1 à n faire Affichage =[ ] pour i de 1 à n faire
a← t[i] DIV 100 Ecrire ( SOUS_CHAINE(t[i],1,i) )
b← t[i] MOD10 Fin pour
si ( a=b) alors t=[ ] pour i de 1 à n faire
Ecrire (t[i] ) Répéter
Fin si t[ i ]=donnée( ″t[ ″, i , ″]=″ )
Fin pour Jusqu’à ( LONG(t[i])>=i )
t=[ ] pour i de 1 à n faire fin pour
Répéter n=[ ] Répéter
t[ i ]=donnée( ″t[ ″, i , ″]=″ ) n=donnée (″Donner la taille du tableau :″)
Jusqu’à ( t[i]>=100) ET ( t[i]<=999) Jusqu’à n dans [ 2..20 ]
fin pour Fin AFFICHE_TABLEAU
n=[ ] Répéter TDO
n=donnée (″Donner la taille du tableau :″) Objet Type/Nature
Jusqu’à n dans [ 2..50 ] n,i Entier
Fin SYMETRIE t Tableau de 20 chaine
TDO de caractère
Objet Type/Nature
n,a,b,i Entier Algorithme Traduction en PASCAL
t Tableau de 50 entiers 0) Début AFFICHE_TABLEAU PROGRAM AFFICHE_TABLEAU;
1) Répéter USES WINCRT;
Algorithme Traduction en PASCAL Ecrire (″Donner la taille du tableau :″ ) VAR t: ARRAY[1..20]OF STRING ;
0) Début SYMETRIE PROGRAM SYMETRIE; Lire (n) n,i: INTEGER;
1) Répéter USES WINCRT; Jusqu’à n dans [ 2..20 ] BEGIN
Ecrire (″Donner la taille du tableau :″ ) VAR t :ARRAY[1..50] OF INTEGER; 2) pour i de 1 à n faire REPEAT
Lire (n) n,i,a,b:INTEGER; Répéter WRITELN ('Donner la taille du tableau');
Jusqu’à n dans [ 2..50 ] BEGIN Ecrire ( ″t[ ″, i , ″]=″ ) READLN(n);
2) pour i de 1 à n faire REPEAT Lire (t[i]) UNTIL n IN [2..20] ;
Répéter WRITELN ('Donner la taille du tableau'); Jusqu’à ( LONG(t[i])>=i ) FOR i:=1 TO n DO
Ecrire ( ″t[ ″, i , ″]=″ ) READLN(n); fin pour BEGIN
Lire (t[i]) UNTIL n IN [2..50] ; 3) pour i de 1 à n faire REPEAT
Jusqu’à ( t[i]>=100) ET ( t[i]<=999) FOR i:=1 TO n DO Ecrire (SOUS_CHAINE(t[i],1,i) ) WRITE('t[',i,']=');
fin pour BEGIN Fin pour READLN(t[i]);
3) pour i de 1 à n faire REPEAT 4) Fin AFFICHE_TABLEAU UNTIL LENGTH(t[i])>=i ;
a← t[i] DIV 100 WRITE('t[',i,']='); END;
b← t[i] MOD10 READLN(t[i]); FOR i:=1 TO n DO WRITELN(COPY(t[i],1,i));
si ( a=b) alors UNTIL (t[i]>=100) AND (t[i]<=999); END.
Ecrire (t[i] ) END;
Fin si WRITE ('Les nombres symétriques sont : ') ;
Fin pour FOR i:=1 TO n DO
4) Fin SYMETRIE BEGIN
a:=t[i] DIV 100;
b:=t[i] MOD 10;
IF (a=b) THEN WRITE(t[i]:4);
END; END.

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

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

Algorithme Traduction en PASCAL


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

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation Algorithmique et programmation

Exercice 3 :
Série d’exercices 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.

Les sous programmes Exercice 4 :


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 5 :
Travail demandé : 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.
1) Analyser ces problèmes en le décomposant en modules.
2) Analyser chacun de ces modules. Exemple :
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du 220 et 284 sont deux nombres amis. En effet :
programme principal. 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.
Exercice 1 : 284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110
Ecrire un programme en PASCAL intitulé TRIANGLE qui saisit une chaîne de caractères de longueur 220 = 1 + 2 + 4 + 71 + 142
minimal 3 et l’affiche sous la forme d’un triangle comme indiqué ci-dessous. Ecrire un programme en PASCAL intitulé AMIS qui permet de déterminer puis d’afficher si deux entiers
Exemple : naturels donnés m et n sont amis ou non.
Si la chaîne saisie est "INTERNET", on aura :
I
IN
Exercice 6 :
INT Ecrire un programme en PASCAL intitulé BOUM qui réalise le traitement suivant :
INTE - Choisir un entier n de l’intervalle [100, 500] et un entier m de l’intervalle [10,99]
INTER - Afficher tous les entiers de l’intervalle [1, m] en remplaçant par le caractère "*" tous les diviseurs de n ainsi
INTERN que tous les entiers comportant dans leurs écritures le chiffre des unités de n.
INTERNE Exemple d’exécution :
INTERNET 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 :
Exercice 2 : Ecrire un programme en PASCAL intitulé COMPOSE qui permet de saisir un entier positif N, composé de
Ecrire un programme en PASCAL intitulé AFFICHAGE permettant de lire un mot intitulé CHM composé au trois chiffres , de déterminer et d’afficher tous les nombres qui peuvent être formés par les chiffres de N, ainsi
moins de 5 caractères et d’afficher les chaînes de caractères suivantes : que le plus petit et le plus grand de ces nombres
• La chaîne formée par le premier et le dernier caractère de CHM Exemple :
• La chaîne formée par les deux premiers et les deux derniers caractères de CHM Pour N = 427, le programme affichera :
• Etc. Les nombres formés par les chiffres de 427 sont : 427, 472, 724, 742, 247, 274
Exemple : Si la chaîne CHM contient "TURBO" alors le programme affichera : Le plus petit nombre est 247
TO Le plus grand nombre est 742
TUBO
TURRBO
TURBURBO
TURBOTURBO

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Analyse de la procédure afficher :

Correction de série DEF PROC afficher (ch : chaine de caractère )


Résultat = affichage
affichage =[ ] pour i de 1 à LONG (ch) faire
Ecrire ( SOUS_CHAINE (ch,1,i) )

d’exercices Fin afficher


fin pour

TDOL

Les sous programmes Algorithme de la procédure afficher :


Objet
i
Type/Nature
entier

0) DEF PROC afficher (ch : chaine de caractère )


1) pour i de 1 à LONG (ch) faire
Ecrire (SOUS_CHAINE (ch,1,i) )
Exercice 1 : fin pour
Analyse du programme principal : 2) Fin afficher
Nom : TRIANGLE
Résultat = PROC afficher (ch) Traduction en PASCAL
ch =PROC lire_chaine (ch) PROGRAM TRIANGLE;
Fin TRIANGLE USES WINCRT;
TDO VAR ch : STRING;
Objet Type/Nature PROCEDURE lire_chaine (VAR ch : STRING);
ch chaine de caractère BEGIN
lire_chaine procédure REPEAT
afficher procédure WRITELN ('Tapez une chaîne');
READLN (ch);
Algorithme du programme principal : UNTIL (LENGTH (ch) >= 3);
0) DÉBUT TRIANGLE END;
1) PROC lire_chaine (ch) PROCEDURE afficher (ch:STRING);
2) PROC afficher (ch) VAR i,l : INTEGER;
3) Fin TRIANGLE BEGIN
FOR i:= 1 TO LENGTH (ch) DO
Analyse de la procédure lire_chaine : WRITELN (COPY (ch,1,i));
DEF PROC lire_chaine (var ch : chaine de caractère) END;
Résultat = ch BEGIN
ch=[ ] Répéter lire_chaine (ch);
ch= donnée (″Tapez une chaîne″) afficher (ch);
Jusqu’à (LONG(ch) >= 3) END.
Fin lire_chaine

Algorithme de la procédure lire_chaine :


Exercice 2 :
0) DEF PROC lire_chaine (var ch : chaine de caractère) Analyse du programme principal :
1) Répéter Nom : AFFICHAGE
Ecrire (″Tapez une chaîne″) Résultat = PROC afficher (CHM)
Lire (ch) CHM =PROC lire_chaine (CHM)
Jusqu’à (LONG(ch) >= 3) Fin AFFICHAGE
2) Fin lire_chaine TDO
Objet Type/Nature
CHM chaine de caractère
lire_chaine procédure
afficher procédure

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Algorithme du programme principal : UNTIL (LENGTH (ch) >= 5);


0) DÉBUT AFFICHAGE END;
1) PROC lire_chaine (CHM) PROCEDURE afficher ( ch : STRING);
2) PROC afficher (CHM) VAR i : INTEGER;
3) Fin AFFICHAGE ch1: STRING;
BEGIN
Analyse de la procédure lire_chaine : FOR i:= 1 TO LENGTH (ch) DO
DEF PROC lire_chaine (var ch : chaine de caractère) BEGIN
Résultat = ch ch1 := COPY (ch,1,i) + COPY (ch,LENGTH(ch) - i + 1,i);
ch=[ ] Répéter WRITELN (ch1);
ch= donnée (″Tapez une chaîne″) END;
Jusqu’à (LONG (ch) >= 5) END;
Fin lire_chaine BEGIN
Algorithme de la procédure lire_chaine : lire_chaine (CHM);
0) DEF PROC lire_chaine (var ch : chaine de caractère) afficher (CHM);
1) Répéter END.
Ecrire (″Tapez une chaîne″)
Lire (ch)
Jusqu’à (LONG (ch) >= 5)
2) Fin lire_chaine Exercice 3 :
Analyse du programme principal :
Analyse de la procédure afficher : Nom : POSITION
DEF PROC afficher ( ch : chaine de caractère ) Résultat = PROC afficher (T, P1, P2)
Résultat = affichage (P1, P2)= PROC lire_entier (P1,P2)
affichage =[ ch1←″ ″ ] pour i de 1 à LONG (ch) faire T = PROC remplir (T)
ch1 ← SOUS_CHAINE (ch,1,i) + SOUS_CHAINE (ch , LONG (ch) - i + 1, i ) Fin POSITION
Ecrire (ch1) Tableau de déclaration des nouveaux types
fin pour Type
Fin afficher TAB = tableau de 20 entiers.

TDOL TDO
Objet Type/Nature Objet Type/Nature
i entier P1, P2 entier
ch1 chaine de caractère T TAB
afficher procédure
Algorithme de la procédure afficher : remplir procédure
0) DEF PROC afficher ( ch : chaine de caractère ) lire_entier procédure
1) ch1←″ ″
pour i de 1 à LONG (ch) faire Algorithme du programme principal :
ch1 ← SOUS_CHAINE (ch,1,i) + SOUS_CHAINE (ch , LONG (ch) - i + 1, i ) 0) DÉBUT POSITION
Ecrire (ch1) 1) PROC remplir (T)
fin pour 2) PROC lire_entier (P1,P2)
2) Fin afficher 3) PROC afficher (T, P1, P2)
4) Fin POSITION
Traduction en PASCAL
PROGRAM AFFICHAGE; Analyse de la procédure lire_entier :
USES WINCRT; DEF PROC lire_entier (var x ,y : Entier)
VAR CHM : STRING; Résultat = (x,y)
PROCEDURE lire_chaine (VAR ch : STRING); (x,y) = [ ] Répéter
BEGIN x ,y = donnée (″Tapez les deux Positions″)
REPEAT Jusqu’à ((x DANS [1..y-1]) ET (y <= 20))
WRITELN ('Tapez une chaîne'); Fin lire_entier
READLN (ch);

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure lire_entier : Algorithme de la procédure afficher :


0) DEF PROC lire_entier (var x ,y : Entier) 0) DEF PROC afficher ( vec : TAB ; x , y : entier )
1) Répéter 1) max ←vec[x], min ←vec[x], moy ← 0
Ecrire (″Tapez les deux Positions″) pour i de x à y faire
Lire(x , y) Ecrire (vec[i])
Jusqu’à ((x DANS [1..y-1]) ET (y <= 20)) moy ← moy + vec[i]
2) Fin lire_entier si (min >vec[i] ) alors
min ←vec[i]
Analyse de la procédure remplir : fin si
DEF PROC remplir (var vec : TAB ) si (max >vec[i] ) alors
Résultat = vec max ←vec[i]
vec =[ ] pour i de 1 à 20 faire fin si
Répéter fin pour
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i) 2) moy ← (moy / (y-x))
Jusqu’à (vec[i]>0) 3) Ecrire (″Leur moyenne arithmétique =″, moy , ″La valeur maximale = ″, max , ″La valeur minimale =″, min)
fin pour 4) Fin afficher
Fin remplir
TDOL Traduction en PASCAL
Objet Type/Nature PROGRAM POSITION;
i entier USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
Algorithme de la procédure remplir : VAR T : TAB;
0) DEF PROC remplir (var vec : TAB ) P1,P2 : INTEGER;
1) pour i de 1 à 20 faire
Répéter PROCEDURE remplir (VAR vec : TAB);
Ecrire (″Donnez la valeur de l"élément N° ″, i) VAR
Lire (vec[i]) i : INTEGER;
Jusqu’à (vec[i]>0) BEGIN
fin pour FOR i:=1 TO 20 DO
2) Fin remplir BEGIN
REPEAT
Analyse de la procédure afficher : WRITELN ('Donnez la valeur de l"éléments N° ',i);
DEF PROC afficher ( vec : TAB ; x , y : entier ) READLN (vec[i]);
Résultat = Ecrire (″Leur moyenne arithmétique =″,moy, ″La valeur maximale = ″,max ,″La valeur minimale =″, UNTIL (vec[i] > 0);
min) END;
moy ← (moy / (y-x)) END;
(moy , max, min) =[ max ←vec[x], min ←vec[x], moy ← 0 ] pour i de x à y faire
Ecrire (vec[i]) PROCEDURE lire_entier (VAR x,y : INTEGER);
moy ← moy + vec[i] BEGIN
si (min >vec[i] ) alors REPEAT
min ←vec[i] WRITELN ('Tapez les deux Positions');
fin si READLN(x,y);
si (max <vec[i] ) alors UNTIL ((x IN [1..y-1]) AND (y <= 20));
max ←vec[i] END;
fin si
fin pour PROCEDURE afficher (vec : TAB ; x,y : INTEGER);
Fin afficher VAR moy : REAL;
TDOL min,max,i : INTEGER;
Objet Type/Nature BEGIN
max , min , i entier min:=vec[x];
moy réel max:=vec[x];
moy:=0;
FOR i:= x TO y DO

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

BEGIN Analyse de la procédure lire_entier :


WRITELN (vec[i]); DEF PROC lire_entier (var x : entier)
moy:= moy + vec[i]; Résultat = x
IF min > vec[i] THEN min:=vec[i]; x=[ ] Répéter
IF max < vec[i] THEN max:=vec[i]; x= donnée (″Donnez la taille maximale de deux tableaux″)
END; Jusqu’à (x DANS [1..25])
moy:=(moy / (y-x)); Fin lire_entier
WRITELN ('Leur moyenne arithmétique = ',moy:6:2 , 'La valeur maximale = ',max , 'La valeur minimale =
',min); Algorithme de la procédure lire_entier :
END; 0) DEF PROC lire_entier (var x : entier)
1) Répéter
BEGIN Ecrire (″Donnez la taille maximale de deux tableaux″)
remplir (T); Lire(x)
lire_entier (P1,P2); Jusqu’à (x DANS [1..25])
afficher (T,P1,P2); 2) Fin lire_entier
END.
Analyse de la procédure remplir :
DEF PROC remplir (var T: TAB1 ; y : entier)
Exercice 4 : Résultat = T
Analyse du programme principal : T =[ ] pour i de 1 à y faire
Nom : MOYENNE T[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Résultat = Ecrire (″La moyenne arithmétique des éléments Positifs des deux tableau = ″, moy ) fin pour
moy ←FN calculer (TPOS,nb) Fin remplir
TPOS= PROC ranger (P,Q,n,TPOS,nb) TDOL
Q= PROC remplir (Q, n) Objet Type/Nature
P= PROC remplir (P, n) i entier
n = PROC lire_entier (n) Algorithme de la procédure remplir :
Fin MOYENNE 0) DEF PROC remplir (var T: TAB1 ; y : entier)
Tableau de déclaration des nouveaux types 1) pour i de 1 à y faire
Type Ecrire (″Donnez la valeur de l"élément N° ″, i)
TAB1 = tableau de 25 réel. Lire (T[i])
TAB2 = tableau de 50 réel. fin pour
2) Fin remplir
TDO Analyse de la procédure ranger :
Objet Type/Nature DEF PROC ranger (P,Q : TAB1 ; n : entier ; var TPOS :TAB2 ; var j :entier )
n , nb entier Résultat = rangement
P,Q TAB1 rangement=[ j ← 0] pour i de 1 à n faire
TPOS TAB2 si ( P[i] >= 0 ) alors
moy réel j ← j+1
ranger procédure TPOS[j] ← P[i]
calculer fonction fin si
remplir procédure fin pour
lire_entier procédure pour i de 1 à n faire
si ( Q[i] >= 0 ) alors
Algorithme du programme principal : j ← j+1
0) DÉBUT MOYENNE TPOS[j] ← Q[i]
1) PROC lire_entier (n) fin si
2) PROC remplir (P, n) fin pour
3) PROC remplir (Q, n)
4) PROC ranger (P,Q,n,TPOS,nb) Fin ranger
5) moy ←FN calculer (TPOS,nb) TDOL
6) Ecrire (″La moyenne arithmétique des éléments Positifs des deux tableau = ″, moy ) Objet Type/Nature
7) Fin MOYENNE i entier

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure ranger : UNTIL (x IN [1..25]);


0) DEF PROC ranger ( P,Q : TAB1 ; n : entier ; var TPOS :TAB2 ; var j :entier ) END;
1) j ← 0 PROCEDURE remplir (VAR T : TAB1 ; y : INTEGER);
pour i de 1 à n faire VAR i : INTEGER;
si ( P[i] >= 0 ) alors BEGIN
j ← j+1 FOR i:=1 TO y DO
TPOS[j] ← P[i] BEGIN
fin si WRITELN ('Donnez la valeur de l"élément N° ',i);
fin pour READLN(T[i]);
pour i de 1 à n faire END;
si ( Q[i] >= 0 ) alors END;
j ← j+1 PROCEDURE ranger (P,Q : TAB1 ;n : INTEGER; VAR TPOS : TAB2; VAR j:INTEGER);
TPOS[j] ← Q[i] VAR i : INTEGER;
fin si BEGIN
fin pour j:=0;
2) Fin ranger FOR i:=1 TO n DO
Analyse de la fonction calculer : IF P[i] >= 0 THEN
DEF FN calculer ( T :TAB2 ; nb : entier) :réel BEGIN
Résultat = calculer j := j + 1;
calculer ← s / nb TPOS[j] := P[i];
s =[ s ← T[1] ] pour i de 1 à nb faire END;
s ← s+T[i] FOR i:= 1 TO n DO
fin pour IF Q[i] >= 0 THEN
Fin calculer BEGIN
TDOL j := j + 1;
Objet Type/Nature TPOS[j] := Q[i];
i entier END;
s réel END;
FUNCTION calculer ( T : TAB2 ; nb : INTEGER ):REAL;
Algorithme de la fonction calculer : VAR s : REAL;
0) DEF FN calculer (T :TAB2 ; nb : entier) :réel i : INTEGER;
1) s ← T[1] BEGIN
pour i de 1 à nb faire s:= T[1];
s ← s+T[i] FOR i:=2 TO nb DO s := s + T[i];
fin pour calculer := s / nb;
2) calculer ← s / nb END;
3) Fin calculer BEGIN
lire_entier(n);
Traduction en PASCAL remplir(P,n);
PROGRAM MOYENNE; remplir(Q,n);
USES WINCRT; ranger(P,Q,n,TPOS,nb);
TYPE moy := calculer (TPOS,nb);
TAB1 = ARRAY [1..25] OF REAL; WRITELN ('La moyenne arithmétique des éléments Positifs des deux tableau = ',moy:7:3);
TAB2 = ARRAY [1..50] OF REAL; END.
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);

Enseignant : AHMED BELHASSEN 9 Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation Algorithmique et programmation

Exercice 5 : TDOL
Analyse du programme principal : Objet Type/Nature
Nom : AMIS i,s entier
Résultat = affichage
affichage=[ ] si ((FN somme_div(m) - m) = n) ET ((FN somme_div(n) - n ) = m) alors Algorithme de la fonction somme_div :
Ecrire (m,″ et ″,n,″ sont deux nombres amis″ ) 0) DEF FN somme_div (x: entier) :entier
sinon 1) s ← 1
Ecrire (m,″ et ″,n,″ ne sont pas deux nombres amis″ ) pour i de 2 à x faire
fin si si (x MOD i) alors
m= PROC lire_entier (m) s← s+i
n = PROC lire_entier (n) fin si
Fin AMIS fin pour
TDO 2) somme_div ← s
Objet Type/Nature 3) Fin somme_div
m,n entier
somme_div fonction Traduction en PASCAL
lire_entier procédure PROGRAM AMIS;
Algorithme du programme principal : USES WINCRT;
0) DÉBUT AMIS VAR m,n : INTEGER;
1) PROC lire_entier (n) PROCEDURE lire_entier (VAR x :INTEGER);
2) PROC lire_entier (m) BEGIN
3) si ((FN somme_div(m) - m) = n) ET ((FN somme_div(n) - n ) = m) alors REPEAT
Ecrire (m,″ et ″,n,″ sont deux nombres amis″ ) WRITELN ('Donnez un entier strictement Positif'); READLN(x);
sinon UNTIL (x > 0);
Ecrire (m,″ et ″,n,″ ne sont pas deux nombres amis″ ) END;
fin si FUNCTION somme_div (x : INTEGER): INTEGER;
4) Fin AMIS VAR i,s : INTEGER;
Analyse de la procédure lire_entier : BEGIN
DEF PROC lire_entier (var x : entier) s:=1;
Résultat = x FOR i:= 2 TO x DO
x=[ ] Répéter IF (x MOD i) = 0 THEN s:= s + i;
x= donnée (″Donnez un entier strictement Positif″) somme_div := s;
Jusqu’à (x > 0) END;
Fin lire_entier BEGIN
Algorithme de la procédure lire_entier : lire_entier(m);
0) DEF PROC lire_entier (var x : entier) lire_entier(n);
1) Répéter IF ((somme_div(m) - m) = n) AND ((somme_div(n) - n ) = m) THEN
Ecrire (″Donnez un entier strictement Positif″) WRITELN (m,' et ',n,' sont deux nombres amis')
Lire(x) ELSE WRITELN (m,' et ',n,' ne sont pas deux nombres amis');
Jusqu’à (x > 0) END.
2) Fin lire_entier
Analyse de la fonction somme_div :
DEF FN somme_div (x : entier) :entier
Résultat = somme_div
somme_div ← s
s =[ s ← 1] pour i de 2 à x faire
si (x MOD i) alors
s← s+i
fin si
fin pour
Fin somme_div

Enseignant : AHMED BELHASSEN 11 Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation Algorithmique et programmation

Exercice 6 : Analyse de la fonction comporte :


Analyse du programme principal : DEF FN comporte (n,x : entier) :booléen
Nom : BOUM Résultat = comporte
Résultat = PROC afficher (m,n) comporte=[ ] si ( POS(ch1,ch2) > 0 ) alors
m= PROC lire_m (m) comporte ← vrai
n = PROC lire_n (n) sinon comporte ← faux
Fin BOUM fin si
TDO ch2=CONVCH (x, ch2)
Objet Type/Nature ch1=CONVCH (u, ch1)
m,n entier u ← n MOD 10
Fin comporte
lire_n procédure
TDOL
lire_m procédure
Objet Type/Nature
comporte fonction
u entier
afficher procédure
ch1,ch2 chaine de caractère
Algorithme du programme principal :
0) DÉBUT BOUM
Algorithme de la fonction comporte :
1) PROC lire_n (n)
0) DEF FN comporte (n,x : entier) :booléen
2) PROC lire_m (m)
1) u ← n MOD 10
3) PROC afficher (m,n)
2) CONVCH (u, ch1)
4) Fin BOUM
3) CONVCH (x, ch2)
4) si (POS(ch1,ch2) > 0 ) alors
Analyse de la procédure lire_n :
comporte ← vrai
DEF PROC lire_n (var x : entier)
sinon comporte ← faux
Résultat = x
fin si
x=[ ] Répéter
5) Fin comporte
x= donnée (″Donnez un entier compris entre 100 et 500″)
Jusqu’à ( x DANS [100..200] )
Analyse de la procédure afficher :
Fin lire_n
DEF PROC afficher (m,n : entier)
Résultat = affichage
Algorithme de la procédure lire_n :
affichage =[ ] pour i de 1 à m faire
0) DEF PROC lire_n (var x : entier)
si (((n MOD i) = 0) OU FN comporte(n,i)) alors
1) Répéter
Ecrire (″*″)
Ecrire (″Donnez un entier compris entre 100 et 500″)
sinon
Lire(x)
Ecrire (i ,″ ″)
Jusqu’à ( x DANS [100..200] )
fin si
2) Fin lire_n
fin pour
Fin afficher
Analyse de la procédure lire_m :
TDOL
DEF PROC lire_m (var x : entier)
Résultat = x Objet Type/Nature
x=[ ] Répéter i entier
x= donnée (″Donnez un entier compris entre 10 et 99″)
Jusqu’à ( x DANS [10..99])
Fin lire_m Algorithme de la procédure afficher :
0) DEF PROC afficher ( m,n : entier)
Algorithme de la procédure lire_m : 1) pour i de 1 à m faire
0) DEF PROC lire_m (var x : entier) si (((n MOD i) = 0) OU FN comporte(n,i)) alors
1) Répéter Ecrire (″*″)
Ecrire (″Donnez un entier compris entre 10 et 99″) sinon
Lire(x) Ecrire (i ,″ ″)
Jusqu’à ( x DANS [10..99]) fin si
2) Fin lire_m fin pour
2) Fin afficher

Enseignant : AHMED BELHASSEN 13 Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation Algorithmique et programmation

Traduction en PASCAL Exercice 7 :


PROGRAM BOUM; Traduction en PASCAL
USES WINCRT; PROGRAM COMPOSE;
VAR n,m : INTEGER; USES WINCRT;
PROCEDURE lire_n (VAR x : INTEGER); TYPE TAB = ARRAY[1..6] OF INTEGER ;
BEGIN VAR N:INTEGER; T:TAB;
REPEAT PROCEDURE lire_entier (VAR x:INTEGER);
WRITELN ('Donnez un entier compris entre 100 et 200'); BEGIN
READLN(x); REPEAT
UNTIL (x IN [100..200]); WRITELN ('Donnez un entier non nul composé de trois chiffres');
END; READLN (x);
PROCEDURE lire_m ( VAR x :INTEGER); UNTIL ((x >= 100) AND (x <= 999));
BEGIN END;
REPEAT PROCEDURE Former (VAR V:TAB; x : INTEGER);
WRITELN ('Donnez un entier compris entre 10 et 99'); VAR u,d,c : INTEGER;
READLN(x); BEGIN
UNTIL (x IN [10..99]); c:= x DIV 100; d:= (x MOD 100) DIV 10; u := x MOD 10;
END; V[1] := x;
FUNCTION comporte (n,x : INTEGER):BOOLEAN; V[2] := (c*100) + (u*10) + d;
VAR u : INTEGER; V[3] := (u*100) + (d*10) + c;
ch1,ch2 :STRING; V[4] := (u*100) + (c*10) + d;
BEGIN V[5] := (d*100) + (c*10) + u;
u:= n MOD 10; V[6] := (d*100) + (u*10) + c;
STR (u,ch1); END;
STR (x,ch2); PROCEDURE afficher (V:TAB);
IF POS(ch1,ch2) > 0 THEN VAR i:INTEGER;
comporte := TRUE BEGIN
ELSE FOR i:= 1 TO 6 DO WRITE (V[i]:5);
comporte := FALSE; WRITELN;
END; END;
PROCEDURE afficher ( m,n : INTEGER); FUNCTION Min (V:TAB):INTEGER;
VAR i : INTEGER; VAR i,x : INTEGER;
BEGIN BEGIN
FOR i:= 1 TO m DO x:= V[1];
IF (((n MOD i) = 0) OR comporte(n,i)) THEN WRITE('* ') FOR i:= 2 TO 6 DO IF V[i] < x THEN x:= V[i];
ELSE WRITE(i,' '); Min := x;
END; END;
BEGIN FUNCTION Max (V:TAB):INTEGER;
lire_n(n); VAR i,x : INTEGER;
lire_m(m); BEGIN
afficher(m,n); x:= V[1];
END. 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.

Enseignant : AHMED BELHASSEN 15 Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation Algorithmique et programmation

Exercice 4 :
Série d’exercices Soit T un tableau de N éléments (2<N<200) de type caractère. Ecrire 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).

Les sous programmes Exemple :


Tm

T L
BAC

B S
Canne

u j
Sujet

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.
Travail demandé :
Exercice 5 :
1) Analyser ces problèmes en le décomposant en modules. On appelle moyenne olympique d’un ensemble de nombres la moyenne arithmétique de tous les nombres de cet
2) Analyser chacun de ces modules. ensemble sauf le plus petit et le plus grand.
3) En déduire l’algorithme de résolution relatif à chacun de ces modules ainsi que celui du Ecrire un programme en PASCAL intitulé OLYMPIQUE permettant de saisir un tableau de N réels (5 ≤ N ≤
programme principal. 20) distincts et d’afficher la moyenne olympique.

Exercice 1 : Exercice 6 :
Ecrire un programme en PASCAL intitulé FACTEURS_PREMIERS permettant de décomposer un entier N Soit T un tableau de n entiers (2 ≤ n ≤ 20). Ecrire un programme en PASCAL intitulé SEQUENCE qui saisit
donné (2 ≤ N ≤ 100) en produit de facteurs premiers et d’afficher N et le produit de ses facteurs trouvés. 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.
Exemple : Si N = 60 Alors on affiche 60 = 2 * 2 * 3 * 5 (i et j sont deux entiers donnés vérifiant la condition i ≤ j ≤ n).

Exercice 2 : Exercice 7 :
Soit le tableau T suivant : Ecrire 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
10 7 9 7 10 6 7 4 8 8 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)
Pour chaque élément de T on ne garde que sa première occurrence et on remplace les autres par 0. Exemple :

10 7 9 0 0 6 0 4 8 0 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 regrouper les éléments restant au début du tableau T.
Pour n = 14, p = 8, ind_inf = 3 et ind_sup = 11, le programme affichera :
10 7 9 6 4 8 0 0 0 0 Les diviseurs de 8 sont : 4 2
Les multiples de 8 sont : 32 72 80 24 48
Ecrire un programme en PASCAL intitulé ELEMENTS_DIFFERENTS qui fait le traitement ci-dessus pour
un tableau T de n (2 ≤ n ≤ 20) entiers positifs non nuls et détermine et affiche le nombre d’éléments différents
de T.

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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure lire_taille :

Correction de série 0) DEF PROC lire_taille (var x : entier)


1) Répéter
Ecrire (″Donnez un entier compris entre 2 et 100″)
Lire(x)

d’exercices Jusqu’à (x DANS [2..100])


2) Fin lire
Analyse de la procédure decomposer :
DEF PROC decomposer ( x : entier ; var T:TAB ; var y : entier)

Les sous programmes Résultat = décomposition


décomposition =[ d ← 2 , y ← 0 ] Répéter
r ← MOD d
q ← x DIV d
si r = 0 alors
y←y+1
T[y]← d
Exercice 1 : x←q
Analyse du programme principal : sinon
Nom : FACTEURS_PREMIERS d ←d + 1
Résultat = PROC afficher (n,nb,T) fin si
(T , nb )= PROC decomposer (n,T,nb) Jusqu’à (q=0)
n = PROC lire_taille (n) Fin decomposer
Fin FACTEURS_PREMIERS TDOL
Tableau de déclaration des nouveaux types Objet Type/Nature
Type q,r,d entier
TAB = tableau de 6 entiers.
Algorithme de la procédure decomposer :
TDO 0) DEF PROC decomposer ( x : entier ; var T:TAB ; var y : entier)
Objet Type/Nature 1) d ← 2 , y ← 0
n , r , nb entier Répéter
T TAB r ← MOD d
afficher procédure q ← x DIV d
si r = 0 alors
decomposer procédure
y←y+1
lire_taille procédure
T[y]← d
x←q
Algorithme du programme principal :
sinon
0) DÉBUT FACTEURS_PREMIERS
d ←d + 1
1) PROC lire_taille (n)
fin si
2) PROC decomposer (n,T,nb)
Jusqu’à (q=0)
3) PROC afficher (n,nb,T)
2) Fin decomposer
4) Fin FACTEURS_PREMIERS
Analyse de la procédure afficher :
Analyse de la procédure lire_taille :
DEF PROC afficher ( n,y : entier ; T:TAB )
DEF PROC lire_taille (var x : Entier)
Résultat = affichage
Résultat = x
affichage =[ ] si y<>1 alors
x=[ ] Répéter
pour i de 1 à (y-1) faire
x= donnée (″Donnez un entier compris entre 2 et 100″)
Ecrire (T[i],″ * ″)
Jusqu’à (x DANS [2..100])
fin pour
Fin lire_taille
Ecrire (T[i+1])
Sinon
Ecrire (T[1])
fin si

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Ecrire (n,″=″) IF y <> 1 THEN


Fin afficher BEGIN
TDOL FOR i := 1 TO y - 1 DO WRITE (T[i],' * ');
Objet Type/Nature WRITELN (T[i+1])
i entier END
ELSE WRITELN (T[1]);
Algorithme de la procédure decomposer : END;
0) DEF PROC afficher ( n,y : entier ; T:TAB ) BEGIN
1) Ecrire (n,″=″) lire_taille (n);
2) si y<>1 alors decomposer (n,T,nb);
pour i de 1 à (y-1) faire afficher (n,nb,T);
Ecrire (T[i],″ * ″) END.
fin pour
Ecrire (T[i+1])
Sinon Exercice 2 :
Ecrire (T[1]) Analyse du programme principal :
fin si Nom : ELEMENTS_DIFFERENTS
3) Fin afficher Résultat = PROC afficher (T,n)
PROC regrouper (T,n)
Traduction en PASCAL PROC garder (T,n)
PROGRAM FACTEURS_PREMIERS; T = PROC lire_tableau (T,n)
USES WINCRT; n = PROC lire_entier (n)
TYPE TAB = ARRAY [1..6] OF INTEGER; Fin ELEMENTS_DIFFERENTS
VAR n , r , nb : INTEGER; Tableau de déclaration des nouveaux types
T: TAB; Type
PROCEDURE lire_taille (VAR x : INTEGER); TAB = tableau de 20 entiers.
BEGIN
REPEAT TDO
WRITELN ('Donnez un entier compris entre 2 et 100'); Objet Type/Nature
READLN(x); n entier
UNTIL (x IN [2..100]); T TAB
END; afficher procédure
PROCEDURE decomposer ( x : INTEGER ; VAR T:TAB ; VAR y:INTEGER); regrouper procédure
VAR r,q,d :INTEGER; garder procédure
BEGIN lire_tableau procédure
d:= 2;
lire_entier procédure
y:= 0;
Algorithme du programme principal :
REPEAT
0) DÉBUT ELEMENTS_DIFFERENTS
r:= x MOD d;
1) PROC lire_entier (n)
q:= x DIV d;
2) PROC lire_tableau (T,n)
IF r = 0 THEN
3) PROC garder (T,n)
BEGIN
4) PROC regrouper (T,n)
y:= y + 1;
5) PROC afficher (T,n)
T[y]:= d;
6) Fin ELEMENTS_DIFFERENTS
x:= q;
END
Analyse de la procédure lire_entier :
ELSE d:= d + 1;
DEF PROC lire_entier (var x : Entier)
UNTIL (q = 0);
Résultat = x
END;
x=[ ] Répéter
PROCEDURE afficher ( n,y : INTEGER ; T:TAB);
x= donnée (″Donnez le nombre des éléments du tableau″)
VAR i : INTEGER;
Jusqu’à (x DANS [2..20])
BEGIN
Fin lire_entier
WRITE (n,' = ');

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure lire_entier : fin pour


0) DEF PROC lire_entier (var x : entier) 2) Fin garder
1) Répéter Analyse de la procédure regrouper :
Ecrire (″Donnez le nombre des éléments du tableau″) DEF PROC regrouper ( var vec : TAB ; var y : entier )
Lire(x) Résultat = ( vec,y )
Jusqu’à (x DANS [2.. 20]) vec ← vec1
2) Fin lire_entier y ← ind1
Analyse de la procédure lire_tableau : vec1 =[ vec1[1]←vec[1], ind1←1, ind2← y ] pour i de 2 à y faire
DEF PROC lire_tableau (var vec : TAB ; y : entier) si (vec[i] >0) alors
Résultat = vec ind1← ind1 + 1
vec =[ ] pour i de 1 à y faire vec1[ind1]← vec[i]
Répéter sinon
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i) vec1[ind2]← vec[i]
Jusqu’à (vec[i]>0) ind2← ind2 - 1
fin pour fin si
Fin lire_tableau fin pour
TDOL Fin regrouper
Objet Type/Nature TDOL
i entier Objet Type/Nature
ind1 , ind2 , i entier
Algorithme de la procédure lire_tableau : vec1 TAB
0) DEF PROC lire_tableau (var vec : TAB ; y : entier) Algorithme de la procédure regrouper :
1) pour i de 1 à y faire 0) DEF PROC regrouper ( var vec : TAB ; var y : entier )
Répéter 1) vec1[1]←vec[1], ind1←1, ind2← y
Ecrire (″Donnez la valeur de l"élément N° ″, i) pour i de 2 à y faire
Lire (vec[i]) si (vec[i] >0) alors
Jusqu’à (vec[i]>0) ind1← ind1 + 1
fin pour vec1[ind1]← vec[i]
2) Fin lire_tableau sinon
vec1[ind2]← vec[i]
Analyse de la procédure garder : ind2 ← ind2 - 1
DEF PROC garder ( var vec : TAB ; y : entier ) fin si
Résultat = vec fin pour
vec =[ ] pour i de 1 à (y-1) faire 2) y ← ind1
pour j de i+1 à y faire 3) vec ← vec1
si (vec[i]=vec[j]) alors 4) Fin regrouper
vec[j] ← 0
fin si Analyse de la procédure afficher :
fin pour DEF PROC afficher (vec :TAB ; y : entier)
fin pour Résultat = affichage
Fin garder affichage =[ ] pour i de 1 à y faire
TDOL Ecrire (vec[i])
Objet Type/Nature fin pour
i,j entier Fin afficher
TDOL
Algorithme de la procédure garder : Objet Type/Nature
0) DEF PROC garder ( var vec : TAB ; y : entier ) i entier
1) pour i de 1 à (y-1) faire Algorithme de la procédure afficher :
pour j de i+1 à y faire 0) DEF PROC afficher (vec :TAB ; y : entier)
si (vec[i]=vec[j]) alors 1) pour i de 1 à y faire
vec[j] ← 0 Ecrire (vec[i])
fin si fin pour
fin pour 2) Fin afficher

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

Traduction en PASCAL y:=ind1;


PROGRAM ELEMENTS_DIFFERENTS; vec:=vec1;
USES WINCRT; END;
TYPE PROCEDURE afficher ( vec : TAB ; y : INTEGER);
TAB = ARRAY [1..20] OF INTEGER; VAR i : INTEGER;
VAR T:TAB; BEGIN
n:INTEGER; FOR i:= 1 TO y DO
PROCEDURE lire_entier ( VAR x : INTEGER); WRITELN (vec[i]);
BEGIN END;
REPEAT BEGIN
WRITELN ('Donnez le nombre des éléments du tableau'); lire_entier(n);
READLN(x); lire_tableau(T,n);
UNTIL (x IN [2..20]); garder(T,n);
END; regrouper(T,n);
afficher(T,n);
PROCEDURE lire_tableau (VAR vec : TAB ; y : INTEGER); END.
VAR i : INTEGER;
BEGIN Exercice 3 :
FOR i := 1 TO y DO
Analyse du programme principal :
BEGIN
Nom : POSITION
REPEAT
Résultat = PROC afficher (T, P1, P2)
WRITELN ('Donnez la valeur de l"élément N° ',i);
(P1, P2)= PROC lire_entier (P1,P2)
READLN (vec[i]);
T = PROC remplir (T)
UNTIL (vec[i] > 0);
Fin POSITION
END;
Tableau de déclaration des nouveaux types
END;
Type
PROCEDURE garder (VAR vec : TAB ; y : INTEGER); TAB = tableau de 20 entiers.
VAR i,j : INTEGER;
BEGIN TDO
FOR i:=1 TO y-1 DO Objet Type/Nature
FOR j:= i+1 TO y DO P1, P2 entier
IF vec[i] = vec[j] THEN vec[j]:=0; T TAB
END; afficher procédure
PROCEDURE regrouper (VAR vec: TAB ; VAR y:INTEGER); remplir procédure
VAR vec1 : TAB; lire_entier procédure
ind1 , ind2 , i : INTEGER;
BEGIN Algorithme du programme principal :
vec1[1]:=vec[1]; 0) DÉBUT POSITION
ind1:=1; 1) PROC remplir (T)
ind2:=y; 2) PROC lire_entier (P1,P2)
3) PROC afficher (T, P1, P2)
FOR i:= 2 TO y DO 4) Fin POSITION
IF vec[i] > 0 THEN
BEGIN Analyse de la procédure lire_entier :
ind1:= ind1 + 1; DEF PROC lire_entier (var x ,y : Entier)
vec1[ind1]:=vec[i]; Résultat = (x,y)
END (x,y) = [ ] Répéter
ELSE x ,y = donnée (″Tapez les deux Positions″)
BEGIN Jusqu’à ((x DANS [1..y-1]) ET (y <= 20))
vec1[ind2]:=vec[i]; Fin lire_entier
ind2:= ind2 - 1;
END;

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure lire_entier : Algorithme de la procédure afficher :


0) DEF PROC lire_entier (var x ,y : Entier) 0) DEF PROC afficher ( vec : TAB ; x , y : entier )
1) Répéter 1) max ←vec[x], min ←vec[x], moy ← 0
Ecrire (″Tapez les deux Positions″) pour i de x à y faire
Lire(x , y) Ecrire (vec[i])
Jusqu’à ((x DANS [1..y-1]) ET (y <= 20)) moy ← moy + vec[i]
2) Fin lire_entier si (min >vec[i] ) alors
min ←vec[i]
Analyse de la procédure remplir : fin si
DEF PROC remplir (var vec : TAB ) si (max >vec[i] ) alors
Résultat = vec max ←vec[i]
vec =[ ] pour i de 1 à 20 faire fin si
Répéter fin pour
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i) 2) moy ← (moy / (y-x))
Jusqu’à (vec[i]>0) 3) Ecrire (″Leur moyenne arithmétique =″, moy , ″La valeur maximale = ″, max , ″La valeur minimale =″, min)
fin pour 4) Fin afficher
Fin remplir
TDOL Traduction en PASCAL
Objet Type/Nature PROGRAM POSITION;
i entier USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
Algorithme de la procédure remplir : VAR T : TAB;
0) DEF PROC remplir (var vec : TAB ) P1,P2 : INTEGER;
1) pour i de 1 à 20 faire
Répéter PROCEDURE remplir (VAR vec : TAB);
Ecrire (″Donnez la valeur de l"élément N° ″, i) VAR
Lire (vec[i]) i : INTEGER;
Jusqu’à (vec[i]>0) BEGIN
fin pour FOR i:=1 TO 20 DO
2) Fin remplir BEGIN
REPEAT
Analyse de la procédure afficher : WRITELN ('Donnez la valeur de l"éléments N° ',i);
DEF PROC afficher ( vec : TAB ; x , y : entier ) READLN (vec[i]);
Résultat = Ecrire (″Leur moyenne arithmétique =″,moy, ″La valeur maximale = ″,max ,″La valeur minimale =″, UNTIL (vec[i] > 0);
min) END;
moy ← (moy / (y-x)) END;
(moy , max, min) =[ max ←vec[x], min ←vec[x], moy ← 0 ] pour i de x à y faire
Ecrire (vec[i]) PROCEDURE lire_entier (VAR x,y : INTEGER);
moy ← moy + vec[i] BEGIN
si (min >vec[i] ) alors REPEAT
min ←vec[i] WRITELN ('Tapez les deux Positions');
fin si READLN(x,y);
si (max <vec[i] ) alors UNTIL ((x IN [1..y-1]) AND (y <= 20));
max ←vec[i] END;
fin si
fin pour PROCEDURE afficher (vec : TAB ; x,y : INTEGER);
Fin afficher VAR moy : REAL;
TDOL min,max,i : INTEGER;
Objet Type/Nature BEGIN
max , min , i entier min:=vec[x];
moy réel max:=vec[x];
moy:=0;
FOR i:= x TO y DO

Enseignant : AHMED BELHASSEN 9 Enseignant : AHMED BELHASSEN 10


Algorithmique et programmation Algorithmique et programmation

BEGIN Algorithme du programme principal :


WRITELN (vec[i]); 0) DÉBUT EXISTANCE
moy:= moy + vec[i]; 1) PROC lire_n (n)
IF min > vec[i] THEN min:=vec[i]; 2) PROC remplir_T (T,n)
IF max < vec[i] THEN max:=vec[i]; 3) PROC lire_p (p)
END; 4) PROC remplir_Tm (Tm,p)
moy:=(moy / (y-x)); 5) pour i de 1 à p faire
WRITELN ('Leur moyenne arithmétique = ',moy:6:2 , 'La valeur maximale = ',max , 'La valeur minimale = si FN verifier (Tm[i],T) alors
',min); Ecrire (Tm[i],″ existe dans ″, T )
END; sinon
Ecrire (Tm[i],″ n'existe pas dans ″, T )
BEGIN fin si
remplir (T); fin pour
lire_entier (P1,P2); 6) Fin EXISTANCE
afficher (T,P1,P2);
END. Analyse de la procédure lire_n :
Exercice 4 : DEF PROC lire_n (var x : entier)
Analyse du programme principal : Résultat = x
Nom : EXISTANCE x=[ ] Répéter
Résultat = Affichage x= donnée (″Donnez la taille du tableau T ″)
Affichage=[ ] pour i de 1 à p faire Jusqu’à (x DANS [3..199])
si FN verifier (Tm[i],T) alors Fin lire_n
Ecrire (Tm[i],″ existe dans ″, T )
sinon Algorithme de la procédure lire_n :
Ecrire (Tm[i],″ n'existe pas dans ″, T ) 0) DEF PROC lire_n (var x : entier)
fin si 1) Répéter
fin pour Ecrire (″Donnez la taille du tableau T ″)
Tm=PROC remplir_Tm (Tm,p) Lire(x)
p=PROC lire_p (p) Jusqu’à (x DANS [3.. 199])
T = PROC remplir_T (T,n) 2) Fin lire_n
n = PROC lire_n(n)
Fin EXISTANCE Analyse de la procédure remplir_T :
Tableau de déclaration des nouveaux types DEF PROC remplir_T (var vec : TAB1 ; y : entier)
Type Résultat = vec
vec =[ ] pour i de 1 à y faire
TAB1 = tableau de 200 caractère.
vec[i]=donnée (″Tapez le caractère N° ″, i)
TAB2 = tableau de 20 chaine de caractère.
fin pour
Fin remplir_T
TDO
TDOL
Objet Type/Nature
Objet Type/Nature
i,n,p entier i entier
T TAB1
Tm TAB2 Algorithme de la procédure remplir_T :
lire_n procédure 0) DEF PROC remplir_T (var vec : TAB1 ; y : entier)
lire_p procédure 1) pour i de 1 à y faire
remplir_T procédure Ecrire (″Tapez le caractère N° ″, i)
remplir_Tm procédure Lire (vec[i])
verifier fonction fin pour
2) Fin remplir_T

Enseignant : AHMED BELHASSEN 11 Enseignant : AHMED BELHASSEN 12


Algorithmique et programmation Algorithmique et programmation

Analyse de la procédure lire_p : Traduction en PASCAL


DEF PROC lire_p (var x : entier) PROGRAM EXISTANCE;
Résultat = x USES WINCRT;
x=[ ] Répéter TYPE
x= donnée (″Donnez le nombre des mots″) TAB1 = ARRAY[1..199] OF CHAR;
Jusqu’à (x DANS [3..19]) TAB2 = ARRAY[1..19] OF STRING;
Fin lire_p VAR
T : TAB1 ;
Algorithme de la procédure lire_p : Tm : TAB2;
0) DEF PROC lire_p (var x : entier) i,n,p : INTEGER;
1) Répéter PROCEDURE lire_n (VAR x :INTEGER);
Ecrire (″Donnez le nombre des mots″) BEGIN
Lire(x) REPEAT
Jusqu’à (x DANS [3.. 19]) WRITELN ('Donnez la taille du tableau T'); READLN(x);
2) Fin lire_p UNTIL (x IN [3..199]);
END;
Analyse de la procédure remplir_Tm : PROCEDURE lire_p ( VAR x : INTEGER);
DEF PROC remplir_Tm (var vec : TAB2 ; y : entier) BEGIN
Résultat = vec REPEAT
vec =[ ] pour i de 1 à y faire WRITELN ('Donnez le nombre des mots');
vec[i]=donnée (″Donnez le mot N° ″, i) READLN(x);
fin pour UNTIL (x IN [3..19]);
Fin remplir_Tm END;
TDOL PROCEDURE remplir_T ( VAR vec : TAB1 ; y : INTEGER);
Objet Type/Nature VAR i : INTEGER;
i entier BEGIN
FOR i := 1 TO y DO
Algorithme de la procédure remplir_T : BEGIN
0) DEF PROC remplir_Tm (var vec : TAB2 ; y : entier) WRITELN ('Tapez le caractère N° ',i);
1) pour i de 1 à y faire READLN (vec[i]);
Ecrire (″Donnez le mot N° ″, i) END;
Lire (vec[i]) END;
fin pour PROCEDURE remplir_Tm ( VAR vec : TAB2 ; y : INTEGER);
2) Fin remplir_Tm VAR i : INTEGER;
BEGIN
Analyse de la fonction verifier : FOR i:= 1 TO y DO
DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen BEGIN
Résultat = verifier WRITELN ('Donnez le mot N° ',i);
verifier =[ ] si ( POS (ch1,ch2)=0 ) alors READLN (vec[i]);
verifier ← faux END;
sinon END;
verifier ← vrai FUNCTION verifier ( ch1,ch2 : STRING):BOOLEAN;
fin si BEGIN
Fin verifier IF POS (ch1,ch2) = 0 THEN
verifier:= FALSE
Algorithme de la fonction verifier : ELSE
0) DEF FN verifier (ch1,ch2 : chaine de caractère ) :booléen verifier:= TRUE;
1) si ( POS (ch1,ch2)=0 ) alors END;
verifier ← faux BEGIN
sinon lire_n(n);
verifier ← vrai remplir_T(T,n);
fin si lire_p(p);
2) Fin verifier remplir_Tm (Tm,p);

Enseignant : AHMED BELHASSEN 13 Enseignant : AHMED BELHASSEN 14


Algorithmique et programmation Algorithmique et programmation

FOR i:= 1 TO p DO Algorithme de la procédure lire_entier :


BEGIN 0) DEF PROC lire_entier (var x : entier)
IF verifier (Tm[i],T) THEN 1) Répéter
WRITELN (Tm[i],' existe dans ',T) Ecrire (″Donnez la taille du tableau″) , Lire(x)
ELSE Jusqu’à (x DANS [5..20])
WRITELN (Tm[i],' n"existe pas dans ',T); 2) Fin lire_entier
END; Analyse de la procédure remplir :
END. DEF PROC remplir (var V: TAB ; y : entier)
Résultat = V
V =[ ] pour i de 1 à y faire
V[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
Exercice 5 : fin pour
Analyse du programme principal : Fin remplir
Nom : OLYMPIQUE TDOL
Résultat = Ecrire (″La moyenne olympique de cet ensemble =″, moy ) Objet Type/Nature
moy ←FN moyenne_oly (T,N) i entier
T= PROC remplir (T,N) Algorithme de la procédure remplir :
N = PROC lire_entier (N) 0) DEF PROC remplir (var V: TAB ; y : entier)
Fin OLYMPIQUE 1) pour i de 1 à y faire
Tableau de déclaration des nouveaux types Ecrire (″Donnez la valeur de l"élément N° ″, i)
Type Lire (V[i])
TAB = tableau de 20 réel. fin pour
2) Fin remplir
TDO Analyse de la fonction moyenne_oly :
Objet Type/Nature DEF FN moyenne_oly ( V: TAB ; y : entier ) :réel
N entier Résultat = moyenne_oly
T TAB moyenne_oly ← (s - min - max) / (y - 2)
moy réel (s , max, min) =[ s ← V[1] , max ← s, min ←s ] pour i de 2 à y faire
moyenne_oly fonction s ← s + V[i]
remplir procédure si (min >V[i] ) alors
lire_entier procédure min ← V[i]
sinon si (max <V[i] ) alors
Algorithme du programme principal : max ← V[i]
0) DÉBUT OLYMPIQUE fin si
1) PROC lire_entier (N) fin pour
2) PROC remplir (T,N) Fin moyenne_oly
3) moy ←FN moyenne_oly (T,N) TDOL
4) Ecrire (″La moyenne olympique de cet ensemble =″, moy ) Objet Type/Nature
5) Fin OLYMPIQUE i entier
max , min , s réel
Analyse de la procédure lire_entier : Algorithme de la fonction moyenne_oly :
DEF PROC lire_entier (var x : entier) 0) DEF FN moyenne_oly ( V: TAB ; y : entier ) :réel
Résultat = x 1) s ← V[1] , max ← s , min ←s
x=[ ] Répéter pour i de 2 à y faire
x= donnée (″Donnez la taille du tableau″) s ← s + V[i]
Jusqu’à (x DANS [5..20]) si (min >V[i] ) alors
Fin lire_entier min ← V[i]
sinon si (max <V[i] ) alors
max ← V[i]
fin si
fin pour
2) moyenne_oly ← (s - min - max) / (y - 2)
3) Fin moyenne_oly

Enseignant : AHMED BELHASSEN 15 Enseignant : AHMED BELHASSEN 16


Algorithmique et programmation Algorithmique et programmation

Traduction en PASCAL Exercice 6 :


PROGRAM OLYMPIQUE; Analyse du programme principal :
USES WINCRT; Nom : SEQUENCE
TYPE TAB = ARRAY [1..20] OF REAL; Résultat = Ecrire (″La valeur maximal dans cet intervalle = ″,V_max ,″ La valeur minimal dans cet intervalle
VAR T : TAB; =″, V_min)
N : INTEGER; V_min ← FN min (T,i,j)
moy : REAL; V_max ← FN max (T,i,j)
PROCEDURE lire_entier (VAR x : INTEGER); j ←FN lire_entier (i,n)
BEGIN i ←FN lire_entier (1,n)
REPEAT T = PROC remplir (T,n)
WRITELN ('Donnez la taille du tableau'); n = PROC lire_n (n)
READLN(x); Fin SEQUENCE
UNTIL (x IN [5..20]); Tableau de déclaration des nouveaux types
END; Type
PROCEDURE remplir (VAR V: TAB ; y :INTEGER); TAB = tableau de 20 entiers.
VAR
i :INTEGER; TDO
BEGIN Objet Type/Nature
FOR i:= 1 TO y DO i,j,n,V_max,V_min entier
BEGIN T TAB
WRITELN ('Donnez la valeur de l"élément N° ',i); min fonction
READLN (V[i]); max fonction
END; lire_entier fonction
END;
remplir procédure
FUNCTION moyenne_oly (V : TAB; y : INTEGER):REAL;
lire_n procédure
VAR
i :INTEGER;
Algorithme du programme principal :
s,min,max :REAL;
0) DÉBUT SEQUENCE
BEGIN
1) PROC lire_n (n)
s:= V[1];
2) PROC remplir (T,n)
min := s;
3) i ←FN lire_entier (1,n)
max := s;
4) j ←FN lire_entier (i,n)
FOR i:= 2 TO y DO
5) V_max ← FN max (T,i,j)
BEGIN
6) V_min ← FN min (T,i,j)
s:= s + V[i];
7) Ecrire (″La valeur maximal dans cet intervalle = ″,V_max ,″ La valeur minimal dans cet intervalle =″, V_min)
IF min > V[i] THEN min := V[i]
8) Fin SEQUENCE
ELSE IF max < V[i] THEN max := V[i];
END;
Analyse de la procédure lire_n :
moyenne_oly:= (s - min - max) / (y - 2);
DEF PROC lire_n (var x : Entier)
END;
Résultat = x
BEGIN
x=[ ] Répéter
lire_entier(N);
x= donnée (″Donnez la taille du tableau″)
remplir(T,N);
Jusqu’à (x DANS [2..20])
moy := moyenne_oly (T,N);
Fin lire_n
WRITELN ('La moyenne olympique de cet ensemble = ',moy:7:3);
END.
Algorithme de la procédure lire_n :
0) DEF PROC lire_n (var x : entier)
1) Répéter
Ecrire (″Donnez la taille du tableau″)
Lire(x)
Jusqu’à (x DANS [2.. 20])
2) Fin lire_n

Enseignant : AHMED BELHASSEN 17 Enseignant : AHMED BELHASSEN 18


Algorithmique et programmation Algorithmique et programmation

Analyse de la procédure remplir : Algorithme de la fonction max :


DEF PROC remplir (var vec : TAB ; y : entier) 0) DEF FN max (V :TAB ; x,y : entier) :entier
Résultat = vec 1) Vmax ← V[x]
vec =[ ] pour i de 1 à y faire pour i de x+1 à y faire
vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i) si Vmax < V[i] alors
fin pour Vmax ← V[i]
Fin remplir fin si
TDOL fin pour
Objet Type/Nature 2) max ← Vmax
i entier 3) Fin max

Algorithme de la procédure remplir : Analyse de la fonction min :


0) DEF PROC remplir (var vec : TAB ; y : entier) DEF FN min (V :TAB ; x,y : entier) :entier
1) pour i de 1 à y faire Résultat = min
Ecrire (″Donnez la valeur de l"élément N° ″, i) min ← Vmin
Lire (vec[i]) Vmin =[ Vmin ← V[x] ] pour i de x+1 à y faire
fin pour si Vmin > V[i] alors
2) Fin remplir Vmin ← V[i]
fin si
Analyse de la fonction lire_entier : fin pour
DEF FN lire_entier ( x,y : entier) :entier Fin min
Résultat = lire_entier TDOL
lire_entier ← z Objet Type/Nature
z=[ ] Répéter i,Vmin entier
z= donnée (″Donnez un entier compris entre ″, x , ″et″, y)
Jusqu’à (z DANS [x..y ]) Algorithme de la fonction min :
Fin lire_entier 0) DEF FN min (V :TAB ; x,y : entier) :entier
TDOL 1) Vmin ← V[x]
Objet Type/Nature pour i de x+1 à y faire
z entier si Vmin > V[i] alors
Vmin ← V[i]
Algorithme de la fonction lire_entier : fin si
0) DEF FN lire_entier ( x,y : entier) :entier fin pour
1) Répéter 2) min ← Vmin
Ecrire (″Donnez un entier compris entre ″, x , ″et″, y) 3) Fin min
Lire(z)
Jusqu’à (z DANS [x..y ]) Traduction en PASCAL
2) lire_entier ← z PROGRAM SEQUENCE;
3) Fin lire_entier USES WINCRT;
TYPE TAB = ARRAY [1..20] OF INTEGER;
Analyse de la fonction max : VAR i,j,n,V_max,V_min : INTEGER;
DEF FN max (V :TAB ; x,y : entier) :entier T : TAB;
Résultat = max PROCEDURE lire_n (VAR x : INTEGER);
max ← Vmax BEGIN
Vmax =[ Vmax ← V[x] ] pour i de x+1 à y faire REPEAT
si Vmax < V[i] alors WRITELN ('Donnez la taille du tableau');
Vmax ← V[i] READLN (x);
fin si UNTIL (x IN [2..20]);
fin pour END;
Fin max PROCEDURE remplir (VAR V : TAB ; y : INTEGER);
TDOL VAR i : INTEGER;
Objet Type/Nature BEGIN
i,Vmax entier FOR i:= 1 TO y DO

Enseignant : AHMED BELHASSEN 19 Enseignant : AHMED BELHASSEN 20


Algorithmique et programmation Algorithmique et programmation

BEGIN REPEAT
WRITELN ('Donnez la valeur de l"éléments N° ',i); WRITELN ('Donnez la taille du tableau');
READLN (V[i]); READLN (x);
END; UNTIL ( x IN [1..15]);
END; END;
FUNCTION lire_entier (x,y : INTEGER):INTEGER;
VAR z : INTEGER; PROCEDURE remplir (VAR T:TAB; n:INTEGER);
BEGIN VAR i : INTEGER;
REPEAT BEGIN
WRITELN ('Donnez un entier compris entre ',x,' et ',y); FOR i := 1 TO n DO
READLN (z); BEGIN
UNTIL (z IN [x..y]); WRITELN ('Donnez la valeur de l"élément N° ', i);
lire_entier := z; READLN (T[i]);
END; END;
FUNCTION max ( V: TAB; x,y: INTEGER):INTEGER; END;
VAR i, Vmax :INTEGER;
BEGIN FUNCTION diviseur (x,y:INTEGER):BOOLEAN;
Vmax := V[x]; BEGIN
FOR i:= x + 1 TO y DO diviseur := FALSE;
IF Vmax < V[i] THEN Vmax := V[i]; IF (y MOD x) = 0 THEN diviseur := TRUE;
max := Vmax; END;
END; BEGIN
FUNCTION min (V:TAB;x,y:INTEGER):INTEGER; lire_entier (n);
VAR i,Vmin:INTEGER; remplir (T,n);
BEGIN REPEAT
Vmin := V[x]; WRITELN ('Donnez l"indice supérieur');
FOR i:= x + 1 TO y DO READLN (ind_sup);
IF Vmin > V[i] THEN Vmin := V[i]; UNTIL ( ind_sup IN [2..n]);
min := Vmin; REPEAT
END; WRITELN ('Donnez l"indice inférieur');
BEGIN READLN (ind_inf);
lire_n (n); UNTIL (ind_inf in [1..ind_sup-1]);
remplir (T,n); WRITELN ('Tapez l"entier qu"on cherche ces diviseurs et multiples');
i:=lire_entier (1,n); READLN (p);
j:=lire_entier (i,n); FOR i:= ind_inf TO ind_sup DO
V_max := max (T,i,j); IF T[i] < p THEN
V_min := min (T,i,j); BEGIN
WRITELN ('La valeur maximal dans cet intervalle = ',V_max, 'La valeur minimal dans cet intervalle = IF diviseur(T[i],p) THEN
',V_min); BEGIN
END. STR (T[i],ch);
diviseurs := diviseurs + ch + ' ';
END;
Exercice 7 : END
Traduction en PASCAL ELSE
PROGRAM DIVISEURS_MULTIPLES; IF diviseur (p,T[i]) THEN
USES WINCRT; BEGIN
TYPE TAB = ARRAY [1..15] OF INTEGER; STR (T[i],ch);
VAR ind_inf,ind_sup,n,p,i :INTEGER; multiples := multiples + ch + ' ';
T:TAB; END;
diviseurs,multiples,ch: STRING ; WRITELN ('Les diviseurs de ',p,' sont : ',diviseurs);
WRITELN ('Les multiples de ',p,' sont : ',multiples);
PROCEDURE lire_entier (VAR x:INTEGER); END.
BEGIN

Enseignant : AHMED BELHASSEN 21 Enseignant : AHMED BELHASSEN 22


Algorithmique et programmation Algorithmique et programmation

Exercice 3 :
Série d’exercices 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 :

Les algorithmes de tri et - Chercher le maximum du tableau A..


- Placer ce maximum dans le tableau B.
- Remplacer le maximum par -1 dans le tableau A. .
- Refaire les étapes 1, 2 et 3 jusqu’à ce que le tableau A soit entièrement composé par -1.

de recherche Travail demandé :


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

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.

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

Exercice 2 :
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

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

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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Tableau de déclaration des nouveaux types

Correction de série Type


TAB = tableau de 100 caractères.

TDO

d’exercices Objet
n,i
C
Type/Nature
Entier
Caractère
Message Chaine

Les algorithmes de tri et Algorithme


T TAB

Traduction en PASCAL
0) Début CHERCHE PROGRAM CHERCHE ;

de recherche 1) Répéter
Ecrire (″Donner la taille du tableau :″ )
Lire (n)
USES WINCRT;
TYPE
TAB = ARRAY[1..100]OF CHAR ;
Jusqu’à n dans [ 2..100 ] VAR T: TAB ;
2) pour i de 1 à n faire n,i :INTEGER ;
Ecrire ( ″T[ ″, i , ″]=″ ) C : CHAR ;
Exercice 1 : Lire (T[i]) Message : STRING ;
fin pour BEGIN
Exemple : Message ← ″N’existe pas dans ″ et C=″Y″
3) Ecrire ( ″C =″ ) REPEAT
T[1] <>C Message ← ″N’existe pas dans″ i=1
Lire (C) WRITELN ('Donner la taille du tableau');
4) Message ← ″N’existe pas dans T″, i ← 1 READLN(n);
F H Y K P
Tant que ( i<=n) ET ( T[ i ]<>C) Faire UNTIL n IN [2..100] ;
T[2] <>C Message ← ″N’existe pas dans″ i=2
i ← i+1 FOR i:=1 TO n DO
Fin Tant que BEGIN
F H Y K P
Si i<=n alors WRITE('T[',i,']=');
T[3] = C Message ← ″existe dans T″ i=3
Message ← ″existe dans T″ READLN(T[i]);
Fin si END;
F H Y K P
5) Ecrire (C, Message) WRITELN('C=');
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
6) Fin CHERCHE READLN(C);
parcours avec i = N+1.
i:=1;
Message := ' N''existe pas dans T' ;
Analyse du problème WHILE ( i<=n) AND ( T[ i ]<>C) DO
Nom : CHERCHE BEGIN
Résultat = Ecrire (C, Message) i:=i+1;
Message = [Message ← ″N’existe pas dans T″, i ← 1] Tant que ( i<=n) ET ( T[ i ]<>C) Faire END;
i ← i+1 IF ( i<=n) THEN
Fin Tant que Message := ' existe dans T ' ;
Si i<=n alors WRITELN (C, Message) ;
Message ← ″existe dans T″ END.
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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 2 : fin si
jusqu’à ( X = nom [ i ] ) OU ( g > d )
Exemple : Pour X =″Ramzi″ on obtient Num = 77458215 si X = nom [ i ] alors
On a d=10 et g =1 num ← tel [ i ]
Itération 1 : sinon
i ← ( g + d ) DIV 2 num ← -1
i= 5 fin si
(X < nom [ i ] ) = FAUX donc X existe dans la partie de 6 à 10 ; g ← 6 et d=10 ; X <> nom [ i ] . X=donnée (″X =″)
( nom , tel )=[ ] pour j de 1 à N faire
N Nom Tel Observations nom [ j ]=donnée( ″nom [ ″, j , ″]=″ )
1 Ali 71256892 tel [ j ]=donnée( ″tel [ ″, j , ″]=″ )
2 Lamia 72365489 fin pour
N=[ ] Répéter
3 Mouna 71457893
N=donnée (″Donner la taille du tableau :″)
4 Mounir 73569742
Jusqu’à N dans [ 5..50 ]
5 Nedia 78548971 i = 5 ; x < nom [ 5 ] ; on cherche dans la partie de 6 à 10 Fin RECHERCHE
6 Salah 75125487 Tableau de déclaration des nouveaux types
7 Ramzi 77458215 Type
8 Tarak 71548981 TAB1 = tableau de 100 chaines.
9 Yacine 74586895 TAB2 = tableau de 100 entier long.
10 Zied 76156456
On a d=10 et g =6 TDO
Itération 2 : Objet Type/Nature
i ← ( g + d ) DIV 2 N , g, d , i , j Entier
i= 8 num Entier long
(X < nom [ i ] ) = VRAI donc X existe dans la partie de 6 à 7 ; g = 6 et d←7 ; X <> nom [ i ] .
X Chaine
nom TAB1
N Nom Tel Observations
tel TAB2
6 Salah 75125487
7 Ramzi 77458215
8 Tarak 71548981 i = 8 ; x < nom [ 8 ] ; on cherche dans la partie de 6 à 7 Algorithme Traduction en PASCAL
9 Yacine 74586895 0) Début RECHERCHE PROGRAM RECHERCHE ;
10 Zied 76156456 1) Répéter USES WINCRT;
Ecrire (″Donner la taille du tableau :″ ) TYPE
On a d=7 et g =6 Lire (N) TAB1 = ARRAY[1..100]OF STRING ;
Itération 3 : Jusqu’à N dans [ 5..50 ] TAB2 = ARRAY[1..100]OF LONGINT ;
i ← ( g + d ) DIV 2 2) pour j de 1 à N faire VAR nom : TAB1 ; tel :TAB2 ;
i= 6 Ecrire ( ″nom [ ″, j , ″]=″ ) N , g, d , i , j :INTEGER ;
(X < nom [ i ] ) = FAUX donc X existe dans la partie de 7 à 7 ; g ← 7 et d=7 ; X = nom [ i ] . Lire (nom[ j ]) num : LONGINT ;
Ecrire ( ″tel [ ″, j , ″]=″ ) X : STRING ;
Lire (tel[ j ]) BEGIN
N Nom Tel Observations
fin pour REPEAT
6 Salah 75125487 i = 6 ; x > nom [ 6 ] ; on cherche dans la partie de 7 à 7
3) Ecrire ( ″X =″ ) WRITELN ('Donner la taille du tableau');
7 Ramzi 77458215
Lire (X) READLN(N);
4) g ← 1, d ← N UNTIL N IN [5..50] ;
Analyse du problème Répéter FOR j:=1 TO N DO
Nom : RECHERCHE i ← ( g+d ) DIV 2 BEGIN
Résultat = Ecrire (″Le numéro de la personne″ , X , ″ = ″ , num) si X <nom [ i ] alors WRITE ('nom[',j,']=');
num = [ g ← 1, d ← N ] Répéter d ← i -1 READLN(nom[ j ]);
i ← ( g+d ) DIV 2 sinon WRITE ('tel[',j,']=');
si X <nom [ i ] alors g ← i+1 READLN(tel[ j ]);
d ← i -1 fin si END;
sinon jusqu’à ( X = nom [ i ] ) OU ( g > d ) WRITELN('X =');
g ← i+1

Enseignant : AHMED BELHASSEN 3 Enseignant : AHMED BELHASSEN 4


Algorithmique et programmation Algorithmique et programmation

si X = nom [ i ] alors READLN(X); Algorithme de la procédure Taille :


num ← tel [ i ] g := 1 ; d:= N ; 0) DEF PROC Taille (var x : entier)
sinon REPEAT 1) Répéter
num ← -1 i :=( g+d ) DIV 2 ; Ecrire (″Donnez le nombre des éléments du tableau″)
fin si IF X <nom [ i ] THEN Lire(x)
5) Ecrire (″Le numéro de la personne″ , X , ″ = ″ , d := i -1 Jusqu’à (x DANS [5..100])
num) ELSE 2) Fin Taille
6) Fin RECHERCHE g := i+1 ;
UNTIL ( X = nom [ i ] ) OR ( g > d ) ; Analyse de la procédure Remplir :
IF X = nom [ i ] THEN DEF PROC Remplir ( y : entier ; var vec : TAB)
num :=tel [ i ] Résultat = vec
ELSE vec =[ ] pour i de 1 à y faire
num :=-1 ; Répéter
WRITELN (' Le numéro de la personne ' , X , ' = ' , vec[i]=donnée (″Donnez la valeur de l"élément N° ″, i)
num) ; Jusqu’à (vec[i]>0)
END. fin pour
Fin Remplir
Exercice 3 : TDOL
Analyse du programme principal : Objet Type/Nature
Nom : Tri i entier
Résultat = PROC Affiche (N , B) Algorithme de la procédure Remplir :
PROC Tri_tab (N , A , B) 0) DEF PROC Remplir ( y : entier ; var vec : TAB)
A = PROC Remplir (N , A) 1) pour i de 1 à y faire
N = PROC Taille (N) Répéter
Fin Tri Ecrire (″Donnez la valeur de l"élément N° ″, i)
Tableau de déclaration des nouveaux types Lire (vec[i])
Type Jusqu’à (vec[i]>0)
TAB = tableau de 100 entiers. fin pour
2) Fin Remplir
TDO
Analyse de la procédure Tri_tab :
Objet Type/Nature
DEF PROC Tri_tab ( N : entier ; var A , B : TAB)
N entier
Résultat = tab_trié
A,B TAB
tab_trié =[ j ← 1 ] Répéter
Affiche procédure m ← FN Max ( N , A)
Tri_tab procédure si m <> -1 alors
Remplir procédure B[ j ] ← A[ m ]
Taille procédure A[ m ] ← -1
Algorithme du programme principal : j ← j +1
0) DÉBUT Tri fin si
1) PROC Taille (N) Jusqu’à (m=-1)
2) PROC Remplir (N , A) Fin Tri_tab
3) PROC Tri_tab (N , A , B) TDOL
4) PROC Affiche (N , B) Objet Type/Nature
5) Fin Tri j,m entier
Max Fonction
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

Enseignant : AHMED BELHASSEN 5 Enseignant : AHMED BELHASSEN 6


Algorithmique et programmation Algorithmique et programmation

Algorithme de la procédure Tri_tab : Traduction en PASCAL


0) DEF PROC Tri_tab ( N : entier ; var A , B : TAB) PROGRAM Tri ;
1) j ← 1 USES WINCRT;
Répéter TYPE
m ← FN Max ( N , A) TAB = ARRAY [1..100] OF INTEGER;
si m <> -1 alors VAR A , B :TAB;
B[ j ] ← A[ m ] N : INTEGER;
A[ m ] ← -1 PROCEDURE Taille ( VAR x : INTEGER);
j ← j +1 BEGIN
fin si REPEAT
Jusqu’à (m=-1) WRITELN ('Donnez le nombre des éléments du tableau');
2) Fin Tri_tab READLN(x);
UNTIL (x IN [5..100]);
Analyse de la fonction Max : END;
DEF FN Max ( y : entier ; vec : TAB) :entier
Résultat = Max PROCEDURE Remplir (y : INTEGER ; VAR vec : TAB);
Max =[ Max ← -1 , p ← -1 ] pour i de 1 à y faire VAR i : INTEGER;
si ( vec[ i ] > p ) alors BEGIN
p ← vec [ i ] FOR i := 1 TO y DO
Max ← i BEGIN
fin si REPEAT
fin pour WRITELN ('Donnez la valeur de l"élément N° ',i);
Fin Max READLN (vec[ i ]);
TDOL UNTIL (vec[ i ] > 0);
Objet Type/Nature END;
p,i entier END;

Algorithme de la fonction Max : FUNCTION Max ( y : INTEGER ; vec : TAB) :INTEGER ;


0) DEF FN Max ( y : entier ; vec : TAB) :entier VAR
1) Max ← -1 , p ← -1 p , i : INTEGER ;
pour i de 1 à y faire BEGIN
si ( vec[ i ] > p ) alors Max := -1 ; p := -1 ;
p ← vec [ i ] FOR i :=1 TO y DO
Max ← i IF ( vec[ i ] > p ) THEN
fin si BEGIN
fin pour p :=vec [ i ] ;
2) Fin Max Max := i ;
Analyse de la procédure Affiche : END ;
DEF PROC Affiche (y : entier ; vec :TAB) END ;
Résultat = affichage
affichage =[ ] pour i de 1 à y faire PROCEDURE Tri_tab ( N : INTEGER ; VAR A , B : TAB) ;
Ecrire (vec[i]) VAR
fin pour j , m : INTEGER ;
Fin Affiche BEGIN
TDOL j := 1 ;
Objet Type/Nature REPEAT
i entier m := Max ( N , A) ;
Algorithme de la procédure Affiche : IF m <> -1 THEN
0) DEF PROC Affiche (y : entier ; vec :TAB) BEGIN
1) pour i de 1 à y faire B[ j ] := A[ m ] ;
Ecrire (vec[i]) A[ m ] :=-1 ;
fin pour j := j +1 ;
2) Fin Affiche END ;

Enseignant : AHMED BELHASSEN 7 Enseignant : AHMED BELHASSEN 8


Algorithmique et programmation

UNTIL (m=-1) ;
END ;

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


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

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

Enseignant : AHMED BELHASSEN 9


Algorithmique et programmation Algorithmique et programmation

Travail demandé :

Série d’exercices Exercice 5 :


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

La suite de Syracuse :

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

récurrents Exemple : valeur de départ n=12


6 3 10
On doit appliquer 9 fois la transformation.
5 16 8 4 2 1

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 1 :
On veut écrire un programme intitulé SOMPROD permettant de calculer la somme et le produit de tous les Travail demandé :
éléments du tableau T de n réels positifs avec n entre 5 et 25. - Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.
Travail demandé :
- Décomposez le problème en modules. Exercice 6 :
- Analysez chaque modules et en déduire les algorithmes correspondantes. On veut écrire un programme intitulé SOMME permettant et d’afficher la somme Sn pour un entier n positif
Exercice 2 :
3 5 7
donné en utilisant la formule ci-dessous.

 = 1     ⋯  2 ∗   1 
On veut écrire un programme intitulé MATRICE permettant de calculer le produit d’une matrice d’entier C de
taille N*M avec N et M entre 1 et 25.
4 2 6
2 3 4
La matrice C = 2 3 7 avec P=∑ (  ∗  )
Travail demandé :
6 7 9
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.

Travail demandé : Exercice 7 :


- Décomposez le problème en modules.
₀  1
La suite fibonacci est définie par :
- Analysez chaque modules et en déduire les algorithmes correspondantes.
Exercice 3 :  ₁  1
On veut écrire un programme intitulé QUID permettant de calculer la fonction suivante :    !"   !
Quid (n) = 1 si n=0
= Quid (n-1) * n si n est impair On veut écrire un programme intitulé FIBONACCI permettant de saisir un entier naturel n strictement
= Quid (n-2) * n si n pour les autres cas Avec 0 <=n<=18. supérieur à 1 puis calculer et afficher pour toutes les valeurs de i inférieure ou égale à n, les valeurs du rapport :
# /#%" .
Travail demandé :
- Décomposez le problème en modules. Travail demandé :
- Analysez chaque modules et en déduire les algorithmes correspondantes. - Décomposez le problème en modules.
Exercice 4 : - Analysez chaque modules et en déduire les algorithmes correspondantes.
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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Exercice 4 :
Série d’exercices 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.

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

arithmétiques Exercice 5 :
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.

Travail demandé :
Exercice 1 : - Décomposez le problème en modules.
On veut écrire un programme intitulé FACTORIELLE permettant de demander un nombre n>0 de départ, et - Analysez chaque modules et en déduire les algorithmes correspondantes.
qui calcule sa factorielle. Exercice 6 :
Exemple : le factorielle de n=6, notée 6 ! , vaut 1 * 2 * 3 * 4 * 5 * 6 = 720. 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
Travail demandé : (division entière) et m est multiplié par 2.
- Décomposez le problème en modules. Si n est impair, la valeur de m est ajoutée au futur résultat.
- Analysez chaque modules et en déduire les algorithmes correspondantes. Exemple : 321 * 457 ; prod=0

Exercice 2 : n m Observations
On veut écrire un programme intitulé COMBINAISON permettant de déterminer et afficher le nombre de 321 457 n est impair donc futur résultat prod = 0 + m =457 et m = m*2 = 457
combinaison de p objets parmi n. 160 914 n est pair donc on n’ajoute pas ; m = m * 2 = 914
n et p sont deux entiers naturels strictement positifs 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
 = avec n >= 

! −  ! 10 14624 n est pair donc on n’ajoute pas ; m = m * 2 = 145624
Travail demandé : 5 29248 n est impair donc futur résultat prod = m * 2 =29248 et
- Décomposez le problème en modules. prod = prod + m = 457 + 29248 = 29705
- Analysez chaque modules et en déduire les algorithmes correspondantes. 2 58496 n est pair donc on n’ajoute pas ; m = m * 2 = 58496
1 116992 n est impair donc résultat : m = m * 2 = 58496 ;
prod = prod + m = 29705 + 116992 = 146697
Exercice 3 :
On veut écrire un programme intitulé CALC_ARRANGEMENT permettant de calculer et d’afficher Travail demandé :
l’arrangement de deux entiers données n et p tel que 1 ≤ p ≤n. - Décomposez le problème en modules.
Sachant que : - Analysez chaque modules et en déduire les algorithmes correspondantes.
! Exercice 7 :
 On veut écrire un programme intitulé JUMEAUX qui permet de déterminer et d’afficher tous les entiers
 = ,   1 ≤  ≤ 
 −  ! jumeaux compris entre 1 et N (N est un entier donné supérieur à 2).
Travail demandé : Deux nombres a et b sont dits jumeaux si a et b sont premiers et a = b + 2.
- Décomposez le problème en modules. Exemple :
- Analysez chaque modules et en déduire les algorithmes correspondantes. 5 et 3 sont premiers, 5 = 3 + 2, donc 5 et 3 sont deux entiers jumeaux.

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

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2


Algorithmique et programmation Algorithmique et programmation

Travail demandé :

Série d’exercices Exercice 3 :


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

Les algorithmes x

d’approximations 30 cm

Exercice 1 :
x
A
30 cm
Un fabriquant envisage la production de boites de lait en carton obtenues selon le patron ci-dessous.
a On veut écrire un programme intitulé BOITE permettant de déterminer la valeur de x pour laquelle le volume
O P d’une boite est maximal.

Travail demandé :
- Décomposez le problème en modules.
- Analysez chaque modules et en déduire les algorithmes correspondantes.
B C
x M N Exercice 4 :
Soit un triangle équilatéral dont le coté mesure a en cm. On inscrit dans ce triangle un rectangle MNPQ.
On pose BM=x.
On veut écrire un programme intitulé AIRE permettant de déterminer la valeur de x tel que l’aire du rectangle X
soit maximale.
Travail demandé : Y
- Décomposez le problème en modules. R
- Analysez chaque modules et en déduire les algorithmes correspondantes.
Exercice 2 :
Chaque page d’un livre à imprimer comporte un rectangle d’aire 300cm² pour le texte, des marges mesurant 2cm
sur les bords horizontaux et 1.5 cm sur les bords verticaux.
On veut écrire un programme intitulé PAGE permettant de déterminer les dimensions des pages pour que la Soit C un cercle de rayon R. On construit un rectangle ABCD inscrit dans C.
consommation du papier soit minimale. On veut écrire un programme intitulé PERIMETRE permettant de déterminer les dimensions du rectangle
pour que son périmètre soit égal à P. NB : 4*R <= P <= 6*R.
2
Travail demandé :
- Décomposez le problème en modules.
x - Analysez chaque modules et en déduire les algorithmes correspondantes.

300cm² 1.5

Enseignant : AHMED BELHASSEN 1 Enseignant : AHMED BELHASSEN 2

Vous aimerez peut-être aussi