SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
1 / 20
Introduction à l’algorithmique
Travaux dirigés (TD)
Correction
Youssouf EL ALLIOUI
p
y.elallioui@usms.ma
Série 1
FONCTIONS ET PROCEDURES
Exercice 5. 1.
Ecrire une fonction distance ayant comme paramètres 4 rèels 𝑥𝑎, 𝑦𝑎, 𝑥𝑏	𝑒𝑡	𝑦𝑏 qui représentent
les coordonnées de deux points 𝐴 et 𝐵 et qui renvoie la distance 𝐴𝐵. Tester cette fonction.
Solution
Fonction distance (xa:Rèel, xb:Rèel, ya:Rèel, yb:Rèel) : Rèel
Var AB : Rèel
Début
AB ← sqrt ((xa - xb)2
+ (ya - yb)2
)
distance ← AB
Fin
Tester cette fonction :
Algo test
Var xa, ya : Rèel
Var xb, yb : Rèel
Var distanceAB : Rèel
Début
Ecrire ("Entrer les cordonnées du point A : ")
Lire (xa, ya)
Ecrire ("Entrer les cordonnées de point B : ")
Lire (xb, yb)
distanceAB ← distance (xa, xb, ya, yb)
Ecrire ("AB = ", distanceAB)
Fin
2020
2 / 20
Exercice 5. 2.
Ecrire une fonction 𝑓 ayant en paramètre un entier et qui renvoie un booléen : 𝑂𝑈𝐼 si l'entier
est premier 𝑁𝑂𝑁 sinon. Tester cette fonction.
Solution
Fonction f (N : Entier) : Booleen
Var estPremier : Booleen
Var i : Entier
Début
estPremier ← Faux
Pour i ← 1 A N Faire
Si (N % i = 0) Alors
estPremier ← Vrai
f ← estPremier
Fin Si
Fin Pour
f ← estPremier
Fin
Tester cette fonction :
Algo test
Var N : Entier
Début
Ecrire ("Entrer un nombre entier : ")
Lire (N)
Si (f(N)) Alors
Ecrire (N, " est premier")
Sinon
Ecrire (N, " n’est pas premier")
Fin Si
Fin
Exercice 5. 3.
Ecrire une fonction 𝑠𝑤𝑎𝑝 ayant en paramètres 2 entiers a et b et qui échange les contenus de 𝑎
et de 𝑏. Tester cette fonction.
Solution
Procedure swap (A : Entier, B : Entier)
Var C : Entier
Début
C ← A
A ← B
B ← C
Fin
3 / 20
Tester cette fonction :
Algo test
Var A, B : Entier
Début
Ecrire ("Entrer le premier nombre : ")
Lire (A)
Ecrire ("Entrer le dexième nombre : ")
Lire (B)
swap (A, B)
Ecrire ("A : ", A)
Ecrire ("B : ", B)
Fin
Exercice 5. 4.
Etablir une fonction 𝑟é𝑠𝑜𝑢𝑑𝑟𝑒 permettant de calculer les solutions de l'équation :
(𝑬)	:		𝒂𝒙𝟐
+ 𝒃𝒙 + 𝒄 = 𝟎 𝒂, 𝒃	𝑒𝑡	𝒄 sont des réels
Cette fonction aura comme paramètres 𝒂, 𝒃 et 𝒄. On prendra garde à bien tester tous les cas
possibles :
• 𝑎 est nul, et l'équation est en fait une équation du premier degré. Exemple : 4𝑥 − 2 = 0
donne une unique solution 𝑥 = 0.5.
• Le discriminant 𝛥 = (𝑏"
− 	4 ∗ 𝑎 ∗ 𝑐) est nul, et il n'y a qu'une seule solution, appelée
racine double, au problème. Exemple : 2𝑥² + 4𝑥 + 2 = 0 donne 𝑥 = −1.
• Le discriminant 𝛥 est positif, et deux solutions existent : 𝑥# =
$%$√'
"∗)
et 𝑥" =
$%*√'
"∗)
.
Exemple : 2𝑥² + 𝑥 − 6 = 0 donne 𝑥# = 1.5 et 𝑥" = −2.
• Le discriminant 𝛥 est négatif, et il n'existe pas de solutions (réelles) au problème.
Exercice 5. 5.
Écrire les actions paramètres (procédure ou fonction) permettant de résoudre les problèmes
suivants :
1) Calcul de la somme de deux nombres entiers.
2) Calcul de la factorielle de N (N !).
3) Vérifier si un nombre entier A divise un nombre entier B.
4) Calcul du quotient et du reste de la division entière de deux nombres entiers A et B.
5) Vérifier si un caractère donné est une voyelle (voyelles : 'a', 'e', 'i', 'o', 'u', 'y').
6) Permet de permuter le contenu de deux variables rèelles.
7) Étant donné un entier A, calcule sa valeur absolue.
4 / 20
Solution
1) Calcul de la somme de deux nombres entiers.
Fonction somme (x : Entier, y : Entier) : Entier
Début
somme ← x + y
Fin
2) Calcul de la factorielle de N (N !).
Fonction factorielle (x : Entier) : Entier
Var i, fact : Entier
Début
Fact ← 1
Pour i ← 1 A x Faire
fact ← fact * i
Fin Pour
factorielle ← fact
Fin
3) Vérifier si un nombre entier A divise un nombre entier B.
Fonction divise (A : Entier, B : Entier) : booleen
Début
divise ← Faux
Si (B mod A = 0) Alors
divise ← vrai
Fin Si
Fin
4) Calcul du quotient et du reste de la division entière de deux nombres entiers A et B.
Procedure quotientDuReste (A : Entier, B : Entier)
Var Q, R : Entier
Début
Q ← 0
R ← 0
Tantque (R>=B) faire
R ← R mod B
Q ← Q + 1
Fin Tantque
Fin
5) Vérifier si un caractère donné est une voyelle (voyelles : 'a', 'e', 'i', 'o', 'u', 'y').
Fonction voyelle (c : Caractère) : Booleen
5 / 20
Var estVoyelle : Booleen
Début
estBooleen ← Faux
Si (c = 'a' OU c = 'e' OU c = 'i' OU c = 'o' OU c = 'u' OU c = 'y')
Alors
estBooleen ← Vrai
Fin Si
voyelle ← estBooleen
Fin
6) Permet de permuter le contenu de deux variables réelles.
Procedure permuter (A : Entier, B : Entier)
Var C : Entier
Début
C ← A
A ← B
B ← C
Fin
7) Étant donné un entier A, calcule sa valeur absolue.
Fonction valeurAbsolue (A : Entier) : Entier
Début
Si (A < 0) Alors
valeurAbsolue ← -A
Fin Si
valeurAbsolue ← A
Fin
6 / 20
Introduction à l’algorithmique
Travaux dirigés (TD)
Correction
Youssouf EL ALLIOUI
p
y.elallioui@usms.ma
Série 2
LA RÉCURSIVITÉ
Exercice 2. 1
Écrire les actions paramètres (procédure ou fonction) permettant de calculer la factorielle d’un
entier N (N !). Tester cette fonction.
Solution :
Fonction factorielle (x : Entier) : Entier
Var i, fact : Entier
Début
If (N = 0 OU N = 1) Alors
factorielle ← 1
Sinon
factorielle ← N * factorielle (N-1)
Fin Si
Fin
Tester cette fonction :
Algo test
Var N : Entier
Début
Ecrire ("Entrer un nombre entier : ")
Lire (N)
Ecrire (N, " ! = ", factorielle (N))
Fin
Exercice 2. 2
Expliquez les fonctionnalités des fonctions suivantes
2020
7 / 20
Fonction fct1 (x : Entier, y : Entier) : Entier
Début
Si (x = 0) Alors
fct1 ← y
Sinon
fct1 ← fct1 (x-1, x+y)
Fin Si
Fin
Solution :
La fonction fct1() calcule et retourne ((1 + 2 ... + x-1 + x) +y) qui est (x(x+1)/2) + y. Par
exemple, si x est 5 et y est 2, alors fct1 devrait retourner 15 + 2 = 17.
Exercice 2. 3
Expliquez les fonctionnalités des fonctions suivantes
Fonction fct2 (n : Entier) : Entier
Début
Si (n = 1) Alors
Fct2 ← 0
Sinon
Fct2 ← 1 + fct2 (n/2)
Fin Si
Fin
Solution :
La fonction calcule et renvoie le plus grand entier inférieur ou égal à log2(n). Par exemple, si n
est entre 8 et 15, fct2() renvoie 3. Si n est entre 16 et 31 alors fct2() renvoie 4.
Exercice 2. 4
Expliquez les fonctionnalités des fonctions suivantes
Procédure fct3 (n : Entier)
Début
Si (n = 0) Alors
retourne
Fin Si
Fct3 (n/2)
Écrire (n%2)
Fin
Solution :
La fonction fct3() affiche l'équivalent binaire d'un nombre n.Par exemple, si n est 21, alors
fct3() affiche 10101.
Exercice 2. 5
8 / 20
Expliquez les fonctionnalités des fonctions suivantes
Fonction fct4 (tab[] : Entier, n : Entier) : Entier
Début
x ← -1
Si (n = 1) Alors
fct4 ← tab [0]
Sinon
x ← fct4 (tab, n-1)
Fin Si
Si (x > tab[n-1]) Alors
fct4 ← x
Sinon
fct4 ← tab[n-1]
Fin Si
Fin
Solution :
fct4() renvoie la valeur maximale dans le tableau d'entrée tab[] de taille n.
Exercice 2. 6
Expliquez les fonctionnalités des fonctions suivantes
Fonction fct5 (a : Entier, b : Entier) : Entier
Début
Si (b = 0) Alors
fct5 ← 1
Fin Si
Si (b mod 2 = 0) Alors
fct5 ← fct5(a*a, b/2)
Fin Si
fct5 ← fct5(a*a, b/2) * 2
Fin
Solution :
fct5() renvoie ab
Exercice 2. 7
On souhaite écrire une fonction récursive qui calcule le carré d'un entier. Pour trouver un lien
entre 𝑐𝑎𝑟𝑟𝑒(𝑛) et 𝑐𝑎𝑟𝑟𝑒(𝑛 − 1), on utilise la formule donnée en énoncé : (𝑛 + 1)"
	=	𝑛"
	+
	2𝑛 + 	1. En changeant 𝑛 en 𝑛 − 1, la formule se réécrit 	𝑛"
=	(𝑛 − 1)"
+ 2(𝑛 − 1) + 1 d'où
𝑐𝑎𝑟𝑟𝑒(𝑛) = 𝑐𝑎𝑟𝑟𝑒(𝑛−) + 2 ∗ 𝑛 − 1. Dans le cas où 𝑛 est un entier négatif, on utilise le fait
que (−𝑛)"
	=	𝑛"
. On se ramène ainsi au cas où n est un entier positif. Les appels récursifs
successifs nous mènent au cas de base : si 𝑛	 = 	0, alors 𝑐𝑎𝑟𝑟𝑒(𝑛) = 0.
9 / 20
Solution :
Fonction carré (n : Entier) : Entier
Début
Si (n = 0) Alors
carré ← 0
Fin Si
Sinon Si (n < 0) Alors
carré ← carré (-n)
Sinon
carré ← carré (n-1) + 2*n - 1
Fin Si
Fin
Exercice 2. 8
On veut écrire une fonction récursive qui calcule la somme de 1 à un entier 𝑛 : 1 + 2 + 3 +·	·
	· +(𝑛 − 1) + 𝑛. On remarque que si on connaît 𝑠𝑜𝑚𝑚𝑒_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1), alors pour avoir
𝑠𝑜𝑚𝑚𝑒_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑓(𝑛) il suffit d'ajouter n au résultat précédent. On prend comme convention
que si 𝑛	 < 	1, alors la somme est nulle. Le cas de base est celui où n vaut 1, et dans ce cas la
somme vaut 1.
Solution :
De l'explication précédente on déduit :
Fonction somme_recursive (n : Entier) : Entier
Début
Si (n < 0) Alors
somme_recursive ← 0
Fin Si
Sinon Si (n = 1) Alors
somme_recursive ← 1
Sinon
somme_recursive ← somme_recursive (n-1) + n
Fin Si
Fin
Exercice 2. 9
Ecrire une fonction récursive qui calcule le produit de 1 à un entier 𝑛 : 1 ∗ 	2 ∗ 	3 ∗	·	·	·	∗		(𝑛 −
1 ∗ 	𝑛. On remarque que si on connaît 𝑝𝑟𝑜𝑑𝑢𝑖𝑡_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1), alors 𝑝𝑟𝑜𝑑𝑢𝑖𝑡+,-.+/01(3) =
𝑛 ∗ 𝑝𝑟𝑜𝑑𝑢𝑖𝑡_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1). On prend comme convention que si 𝑛	 < 	1, alors le produit
est nulle. Le cas de base est celui où n vaut 1 ou 0, et dans ce cas le produit vaut respectivement
1 et 0.
Solution :
De l'explication précédente on déduit :
Fonction produit_recursive (n : Entier) : Entier
Début
10 / 20
Si (n <= 0) Alors
produit_recursive ← 0
Fin Si
Sinon Si (n = 1) Alors
produit_recursive ← 1
Sinon
produit_recursive ← n * produit_recursive (n-1)
Fin Si
Fin
11 / 20
Introduction à l’algorithmique
Travaux dirigés (TD)
Correction
Youssouf EL ALLIOUI
p
y.elallioui@usms.ma
Série 3
LES FICHIERS
Exercice 3. 1
Soit le fichier NOMBRES.BIN qui contient une liste de nombres entiers. Écrire un algorithme
qui affiche les nombres du fichier, leur somme et leur moyenne.
Solution :
Algorithme Nombre
Var F : Fichier d’entier
Var X, S, Nb : Entier
Var M : Réel
Début
Assigner(F,’NOMBRES.BIN’)
Relire(F)
Nb ← 0
S ← 0
Tantque Non FDF(F) Faire
Lire(F,X) ; // Lire un élément du fichier
Ecrire(X) ; // affichage à l’écran
S ← S+X
Nb ← Nb+1
Fin Tanque
Si Nb≠0 Alors
M ← S/Nb
Ecrire(‘Somme des éléments =’,S,’ Moyenne=’,M)
Sinon
Ecrire(‘Fichier vide’)
Fin Si
Fermer(F)
Fin
Exercice 3. 2
Écrire un algorithme qui crée le fichier MOTS.TXT contenant une série de mots (longueur
maximale d'un mot: 20 caractères). La saisie des mots se terminera à l'introduction du symbole
'*' qui ne sera pas écrit dans le fichier.
2020
12 / 20
Écrire un algorithme qui affiche le nombre de mots ainsi que la longueur moyenne des mots
contenus dans le fichier MOTS.TXT. 3- Écrire un algorithme qui crée un deuxième fichier
MOTS10.TXT contenant les mots du fichier MOTS.TXT de plus de 10 caractères.
Solution :
Algorithme TraiteMot;
Var F,G :Fichier de chaine[20] ;
Var X : Chaine[20] ;
Var Nb : Entier
Var M : Réel
Début
/*question 1
Assigner(F,’MOTS.TXT’) ;
Reecrire(F) ; /*ouvrir F en écriture
Ecrire(‘Donner une suite de mots. Introduire le mot ‘*’
pour arrêter la saisie’) ;
Lire(X) ; /*Lire le premier mot à l’extérieur de la boucle
Tantque X≠’*’ Faire
Ecrire(F,X) ;
Lire(X) ; /*Lire le mot suivant
Fait ;
Fermer(F) ;
/*question 2
Nb←0 ;
M←0 ; /*on peut utiliser M pour la somme des longueurs puis
pour la moyenne
Relire(F) /*ouvrire F en lecture
Tantque Non FDF(F) Faire
Lire(F,X) ; /*Lire un élément du fichier
M←M+Taille(X) ;
Nb←Nb+1 ;
Fait ;
Si Nb≠0 Alors
M←M/Nb ;
Ecrire(‘Nombre de mots =’,Nb,’ Longueur Moyenne=’,M)
Sinon
Ecrire(‘Fichier vide’)
Fsi ;
Fermer(F) ;
/*question 3
Assigner(G,’MOTS10.TXT’) ;
Reecrire(G) ;
Relire(F) /*ouvrir G en écriture et F en lecture
Tantque Non FDF(F) Faire
Lire(F,X) ; /*Lire un élément du fichier
Si Taille(X)>10 Alors
Ecrire(G,X)
Fsi ;
Fait ;
Fermer(F) ;
13 / 20
Fermer(G) ;
Fin
Exercice 3. 3
Considérons le type enregistrement suivant :
Type Étudiant = Enregistrement
Matricule : Entier ;
Nom, Prénom : Chaine [20] ;
Moyenne : Réel ;
Fin;
Soit T un tableau d’au plus 100 étudiants. Écrire un algorithme permettant de recopier tous les
étudiants admis appartenant à T dans un fichier ADMIS de type étudiant. Un étudiant est admis
si sa moyenne est supérieure ou égale 10.
Solution :
Algorithme Étude
Type Étudiant = Enregistrement
Matricule : entier
Nom, Prénom : chaine [20] ;
Moyenne : réel
Fin
Var T : Tableau[1..100] de Étudiant
Var F : Fichier de Étudiant
Var X : Étudiant
Var I,N : Entier ;
Debut
Ecrire(‘Donner le nombre d’’etudiants’) ; /*lecture des
éléments du tableau
Repeter
Lire(N)
Jusqu’à N>0 et N≤100
Pour I←1 à N Faire
Avec X
Faire
Lire(Matricule)
Lire(Nom,Prenom)
Lire(Moyenne)
Fait
T[I]←X ; /*On peut utiliser directement T[I] et on
évite l’affectation ( en bleu )
Avec T[I]
Faire Lire(Matricule)
14 / 20
Lire(Nom,Prenom)
Lire(Moyenne)
Fait
Fait
/*création du fichier des admis
Assigner(F,’ADMIS’)
Reecrire(F)
Pour I←1 à N Faire
Si T[I].Moyenne)≥10 Alors
Ecrire(F,T[I])
Fsi; /*même remarque, on peut utiliser un
enregistrement X
X←T[I]
Si X.Moyenne)≥10 Alors
Ecrire(F,X)
Fsi
Fait
Fermer(F)
Fin
Exercice 3. 4
Soient les enregistrements suivants :
Type TDate = Enregistrement
Jour, mois, année : entier ;
Fin
Type TDiscipline = Enregistrement
Discipline : chaine [10] ;
Faculté : chaine [20] ;
Fin;
Type TEtudiant = Enregistrement
Nom, prénom : chaine [20] ;
DateN : TDate ;
Filière : TDiscipline ;
Fin;
Soit FEtudiant un fichier d’étudiants. Écrire un algorithme qui permet de :
- Remplir le fichier FEtudiant.
- Éclater le fichier FEtudiant en deux fichiers, F1 (étudiants de la faculté ‘FEI’) et F2
(étudiants des autres facultés).
Solution :
15 / 20
Algorithme Eclate
Type TDate = Enregistrement
Jour, mois, année : entier ;
Fin
Type TDiscipline = Enregistrement
Discipline : chaine [10] ;
Faculté : chaine [20] ;
Fin;
Type TEtudiant = Enregistrement
Nom, prénom : chaine [20] ;
DateN : TDate ;
Filière : TDiscipline ;
Fin;
Var Étudiant : TEtudiant ;
Var F, F1, F2 : Fuchier de TEtudiant ;
Var FEI, Autre : Booléen ;
Debut
Assigner(F,’FEtudiant’) ;
Réecrire(F) ;
Avec Etudiant, Etudiant.DateN, Etudiant.Filiere Faire
Ecrire(‘Nom :’) ;
Lire(Nom) ; /*Lire 1er nom à l’extérieur de la boucle
Tantque Nom<>’’ Faire
Ecrire(‘Prénom :’) ;
Lire(prenom) ;
Ecrire(‘Date de naissance :’) ;
Lire(Jour,mois,Annee) ;
Ecrire(‘Discipline, Faculté :’) ;
Lire(Discipline, Faculté) ;
Ecrire(F,Etudiant) ;
Ecrire(‘Nom :’) ;
Lire(Nom) ; /*Lire le nom suivant
Fait ;
Fait ;
Fermer(F) ;
Relire(F) ; /*Pour éviter de créer des fichiers vides,
on peut utiliser ces 2 indicateurs booléens, dans ce Cas
/*l’assignation et la création ne se font que si nous
trouvons un élément, après on remet le booléen à /*vrai
pour ne pas refaire ces opérations
/*CETTE OPERATION N’EST PAS OBLIGATOIRE MAIS MIEUX LA
SAVOIR
FEI ←Faux ;
Autre ←Faux ;
/*Si on n’utilise pas ces booléens, on doit assigner et
ouvrir les 2 fichiers en écriture à ce niveau
16 / 20
Assigner(F1,’FFEI’) ;
Réecrire(F1) ;
Assigner(F2,’FAutrer’);
Réecrire(F2);
Si FDF(F) Alors
Ecrire(‘Fichier vide’)
Sinon
Tantque Non FDF(F) Faire
Lire(F,Etudiant) ;
Avec Etudiant.Filiere Faire
Si Faculté =’FEI’ Alors
Si Non FEI Alors
Assigner(F1,’FFEI’) ;
Réecrire(F1) ;
FEI ←Vrai
Fsi ;
Ecrire(F1,Etudiant) ;
Sinon
Si Non Autre Alors
Assigner(F2,’FAutrer’);
Réecrire(F2);
Autre←Vrai
Fsi ;
Ecrire(F2,Etudiant) ;
Fsi ;
Fait ;
Fait ;
Fermer(F) ;
Si FEI Alors
Fermer(F1)
Fsi ;
Si Autre Alors
Fermer(F2)
Fsi ;
Fsi ;
Fin.
Exercice 3. 5
1) Soient F1 et F2 deux fichiers d’entiers strictement positifs et sans répétition.
Écrire un algorithme qui construit (crée) un fichier G d’entiers tel que G contient
pour chaque valeur de F1 la valeur et tous ses multiples appartenant à F2 (F1
et F2 sont supposés existants). Exemple :
F1 : 3 10 20 17
F2 : 3 6 19 60 40 30
G : 3 3 6 60 30 10 60 40 30 20 60 40 17
2) Écrire un algorithme qui permet à partir du fichier résultat (G) de générer un
autre fichier (H) contenant toutes les valeurs du fichier (G) (sans répétition) avec
leur nombre. Exemple :
H : 3 2 6 1 60 3 30 2 10 1 40 2 20 1 17 1
17 / 20
Solution :
1)
1)
18 / 20
Exercice 3. 6
Soit F un fichier d’entiers représentant des séquences de nombres séparées par un ou plusieurs
zéro. Écrire un algorithme qui réalise les traitements suivants :
1) A partir de F (fichier existant), crée un fichier G contenant pour chaque
séquence, la moyenne des nombres qui la constituent.
2) 2- Puis, Supprimer les valeurs nulles du fichier G. Exemple :
F : 0 0 1 4 3 7 0 0 0 6 -9 2 7 -6 0 -10 3 0 0
G : 3,75 0,00 -3,50 Avant suppression
G : 3,75 -3,50 Après suppression
Solution :
19 / 20
20 / 20
Introduction à l’algorithmique
Travaux dirigés (TD)
Correction
Youssouf EL ALLIOUI
p
y.elallioui@usms.ma
Série 4
LA COMPLEXITÉ ALGORITHMIQUE
2020

Contenu connexe

Tendances

Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
badr zaimi
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
Anass41
 
Coursalgorithmique
CoursalgorithmiqueCoursalgorithmique
Coursalgorithmique
nicodeff
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
mohamed_SAYARI
 

Tendances (20)

Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Exercices algo
Exercices algoExercices algo
Exercices algo
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Examen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesExamen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de données
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
Asd1
Asd1Asd1
Asd1
 
Examen principal + Correction ASD
Examen principal + Correction ASDExamen principal + Correction ASD
Examen principal + Correction ASD
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Coursalgorithmique
CoursalgorithmiqueCoursalgorithmique
Coursalgorithmique
 
Exo algo
Exo algoExo algo
Exo algo
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
algorithme tronc commun lycée
algorithme tronc commun lycéealgorithme tronc commun lycée
algorithme tronc commun lycée
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 

Similaire à 02 correction-td smi-s3-algo2

LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATION
borhen boukthir
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
DriNox NordisTe
 
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdfChapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
C00LiMoUn
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivité
salah fenni
 

Similaire à 02 correction-td smi-s3-algo2 (20)

Recursiviteeeeeeeeee
RecursiviteeeeeeeeeeRecursiviteeeeeeeeee
Recursiviteeeeeeeeee
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
LES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATIONLES ALGORITHMES D’APPROXIMATION
LES ALGORITHMES D’APPROXIMATION
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdfChapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
Chapitre 2 Les strucutures conditionnelles_18-19.ppt [Mode de compatibilité].pdf
 
Cours architecture
Cours architectureCours architecture
Cours architecture
 
5e8a000b9840a.pdf
5e8a000b9840a.pdf5e8a000b9840a.pdf
5e8a000b9840a.pdf
 
246242769 sequence-1-pdf
246242769 sequence-1-pdf246242769 sequence-1-pdf
246242769 sequence-1-pdf
 
coursAlgo_V5.pdf
coursAlgo_V5.pdfcoursAlgo_V5.pdf
coursAlgo_V5.pdf
 
Exercice exponontielle
Exercice exponontielleExercice exponontielle
Exercice exponontielle
 
Epreuve de mathématiques informatique (modélisation) Agro/Véto BCPST 2017
Epreuve de mathématiques informatique (modélisation) Agro/Véto BCPST 2017Epreuve de mathématiques informatique (modélisation) Agro/Véto BCPST 2017
Epreuve de mathématiques informatique (modélisation) Agro/Véto BCPST 2017
 
Video
VideoVideo
Video
 
Exercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivitéExercices en turbo pascal sur la récursivité
Exercices en turbo pascal sur la récursivité
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
CAPES maths 2019 composition 2
CAPES maths 2019 composition 2CAPES maths 2019 composition 2
CAPES maths 2019 composition 2
 
DS6-CB-sujet (1).pdf
DS6-CB-sujet (1).pdfDS6-CB-sujet (1).pdf
DS6-CB-sujet (1).pdf
 
Integrale
IntegraleIntegrale
Integrale
 
Exercice dérivabilité
Exercice dérivabilitéExercice dérivabilité
Exercice dérivabilité
 
algèbre de boole.pdf
algèbre de boole.pdfalgèbre de boole.pdf
algèbre de boole.pdf
 

Plus de L’Université Hassan 1er Settat

Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
L’Université Hassan 1er Settat
 

Plus de L’Université Hassan 1er Settat (6)

Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Chapitre 03 : Structures de contrôle
Chapitre 03 : Structures de contrôleChapitre 03 : Structures de contrôle
Chapitre 03 : Structures de contrôle
 
Chapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et InstructionsChapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et Instructions
 
Chapitre 01 - Notions de base
Chapitre 01 - Notions de baseChapitre 01 - Notions de base
Chapitre 01 - Notions de base
 

Dernier

Dernier (11)

Fiche de vocabulaire pour faire une appréciation
Fiche de vocabulaire pour faire une appréciationFiche de vocabulaire pour faire une appréciation
Fiche de vocabulaire pour faire une appréciation
 
Àma Gloria.pptx Un film tourné au Cap Vert et en France
Àma Gloria.pptx   Un film tourné au Cap Vert et en FranceÀma Gloria.pptx   Un film tourné au Cap Vert et en France
Àma Gloria.pptx Un film tourné au Cap Vert et en France
 
Réunion des directeurs de Jonzac - 15 mai 2024
Réunion des directeurs de Jonzac - 15 mai 2024Réunion des directeurs de Jonzac - 15 mai 2024
Réunion des directeurs de Jonzac - 15 mai 2024
 
Quitter la nuit. pptx
Quitter        la             nuit.   pptxQuitter        la             nuit.   pptx
Quitter la nuit. pptx
 
Nathanaëlle Herbelin.pptx Peintre française
Nathanaëlle Herbelin.pptx Peintre françaiseNathanaëlle Herbelin.pptx Peintre française
Nathanaëlle Herbelin.pptx Peintre française
 
rapport de stage gros oeuvre_compressed.pdf
rapport de stage gros oeuvre_compressed.pdfrapport de stage gros oeuvre_compressed.pdf
rapport de stage gros oeuvre_compressed.pdf
 
Texte avec différentes critiques positives, négatives ou mitigées
Texte avec différentes critiques positives, négatives ou mitigéesTexte avec différentes critiques positives, négatives ou mitigées
Texte avec différentes critiques positives, négatives ou mitigées
 
GHASSOUB _Seance 3_ measurement and evaluation in education.pptx
GHASSOUB _Seance 3_ measurement and evaluation in education.pptxGHASSOUB _Seance 3_ measurement and evaluation in education.pptx
GHASSOUB _Seance 3_ measurement and evaluation in education.pptx
 
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptxGHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
 
Un petit coin etwinning- Au fil des cultures urbaines
Un petit coin  etwinning- Au fil des cultures urbainesUn petit coin  etwinning- Au fil des cultures urbaines
Un petit coin etwinning- Au fil des cultures urbaines
 
Les débuts de la collection "Le livre de poche"
Les débuts de la collection "Le livre de poche"Les débuts de la collection "Le livre de poche"
Les débuts de la collection "Le livre de poche"
 

02 correction-td smi-s3-algo2

  • 1. 1 / 20 Introduction à l’algorithmique Travaux dirigés (TD) Correction Youssouf EL ALLIOUI p y.elallioui@usms.ma Série 1 FONCTIONS ET PROCEDURES Exercice 5. 1. Ecrire une fonction distance ayant comme paramètres 4 rèels 𝑥𝑎, 𝑦𝑎, 𝑥𝑏 𝑒𝑡 𝑦𝑏 qui représentent les coordonnées de deux points 𝐴 et 𝐵 et qui renvoie la distance 𝐴𝐵. Tester cette fonction. Solution Fonction distance (xa:Rèel, xb:Rèel, ya:Rèel, yb:Rèel) : Rèel Var AB : Rèel Début AB ← sqrt ((xa - xb)2 + (ya - yb)2 ) distance ← AB Fin Tester cette fonction : Algo test Var xa, ya : Rèel Var xb, yb : Rèel Var distanceAB : Rèel Début Ecrire ("Entrer les cordonnées du point A : ") Lire (xa, ya) Ecrire ("Entrer les cordonnées de point B : ") Lire (xb, yb) distanceAB ← distance (xa, xb, ya, yb) Ecrire ("AB = ", distanceAB) Fin 2020
  • 2. 2 / 20 Exercice 5. 2. Ecrire une fonction 𝑓 ayant en paramètre un entier et qui renvoie un booléen : 𝑂𝑈𝐼 si l'entier est premier 𝑁𝑂𝑁 sinon. Tester cette fonction. Solution Fonction f (N : Entier) : Booleen Var estPremier : Booleen Var i : Entier Début estPremier ← Faux Pour i ← 1 A N Faire Si (N % i = 0) Alors estPremier ← Vrai f ← estPremier Fin Si Fin Pour f ← estPremier Fin Tester cette fonction : Algo test Var N : Entier Début Ecrire ("Entrer un nombre entier : ") Lire (N) Si (f(N)) Alors Ecrire (N, " est premier") Sinon Ecrire (N, " n’est pas premier") Fin Si Fin Exercice 5. 3. Ecrire une fonction 𝑠𝑤𝑎𝑝 ayant en paramètres 2 entiers a et b et qui échange les contenus de 𝑎 et de 𝑏. Tester cette fonction. Solution Procedure swap (A : Entier, B : Entier) Var C : Entier Début C ← A A ← B B ← C Fin
  • 3. 3 / 20 Tester cette fonction : Algo test Var A, B : Entier Début Ecrire ("Entrer le premier nombre : ") Lire (A) Ecrire ("Entrer le dexième nombre : ") Lire (B) swap (A, B) Ecrire ("A : ", A) Ecrire ("B : ", B) Fin Exercice 5. 4. Etablir une fonction 𝑟é𝑠𝑜𝑢𝑑𝑟𝑒 permettant de calculer les solutions de l'équation : (𝑬) : 𝒂𝒙𝟐 + 𝒃𝒙 + 𝒄 = 𝟎 𝒂, 𝒃 𝑒𝑡 𝒄 sont des réels Cette fonction aura comme paramètres 𝒂, 𝒃 et 𝒄. On prendra garde à bien tester tous les cas possibles : • 𝑎 est nul, et l'équation est en fait une équation du premier degré. Exemple : 4𝑥 − 2 = 0 donne une unique solution 𝑥 = 0.5. • Le discriminant 𝛥 = (𝑏" − 4 ∗ 𝑎 ∗ 𝑐) est nul, et il n'y a qu'une seule solution, appelée racine double, au problème. Exemple : 2𝑥² + 4𝑥 + 2 = 0 donne 𝑥 = −1. • Le discriminant 𝛥 est positif, et deux solutions existent : 𝑥# = $%$√' "∗) et 𝑥" = $%*√' "∗) . Exemple : 2𝑥² + 𝑥 − 6 = 0 donne 𝑥# = 1.5 et 𝑥" = −2. • Le discriminant 𝛥 est négatif, et il n'existe pas de solutions (réelles) au problème. Exercice 5. 5. Écrire les actions paramètres (procédure ou fonction) permettant de résoudre les problèmes suivants : 1) Calcul de la somme de deux nombres entiers. 2) Calcul de la factorielle de N (N !). 3) Vérifier si un nombre entier A divise un nombre entier B. 4) Calcul du quotient et du reste de la division entière de deux nombres entiers A et B. 5) Vérifier si un caractère donné est une voyelle (voyelles : 'a', 'e', 'i', 'o', 'u', 'y'). 6) Permet de permuter le contenu de deux variables rèelles. 7) Étant donné un entier A, calcule sa valeur absolue.
  • 4. 4 / 20 Solution 1) Calcul de la somme de deux nombres entiers. Fonction somme (x : Entier, y : Entier) : Entier Début somme ← x + y Fin 2) Calcul de la factorielle de N (N !). Fonction factorielle (x : Entier) : Entier Var i, fact : Entier Début Fact ← 1 Pour i ← 1 A x Faire fact ← fact * i Fin Pour factorielle ← fact Fin 3) Vérifier si un nombre entier A divise un nombre entier B. Fonction divise (A : Entier, B : Entier) : booleen Début divise ← Faux Si (B mod A = 0) Alors divise ← vrai Fin Si Fin 4) Calcul du quotient et du reste de la division entière de deux nombres entiers A et B. Procedure quotientDuReste (A : Entier, B : Entier) Var Q, R : Entier Début Q ← 0 R ← 0 Tantque (R>=B) faire R ← R mod B Q ← Q + 1 Fin Tantque Fin 5) Vérifier si un caractère donné est une voyelle (voyelles : 'a', 'e', 'i', 'o', 'u', 'y'). Fonction voyelle (c : Caractère) : Booleen
  • 5. 5 / 20 Var estVoyelle : Booleen Début estBooleen ← Faux Si (c = 'a' OU c = 'e' OU c = 'i' OU c = 'o' OU c = 'u' OU c = 'y') Alors estBooleen ← Vrai Fin Si voyelle ← estBooleen Fin 6) Permet de permuter le contenu de deux variables réelles. Procedure permuter (A : Entier, B : Entier) Var C : Entier Début C ← A A ← B B ← C Fin 7) Étant donné un entier A, calcule sa valeur absolue. Fonction valeurAbsolue (A : Entier) : Entier Début Si (A < 0) Alors valeurAbsolue ← -A Fin Si valeurAbsolue ← A Fin
  • 6. 6 / 20 Introduction à l’algorithmique Travaux dirigés (TD) Correction Youssouf EL ALLIOUI p y.elallioui@usms.ma Série 2 LA RÉCURSIVITÉ Exercice 2. 1 Écrire les actions paramètres (procédure ou fonction) permettant de calculer la factorielle d’un entier N (N !). Tester cette fonction. Solution : Fonction factorielle (x : Entier) : Entier Var i, fact : Entier Début If (N = 0 OU N = 1) Alors factorielle ← 1 Sinon factorielle ← N * factorielle (N-1) Fin Si Fin Tester cette fonction : Algo test Var N : Entier Début Ecrire ("Entrer un nombre entier : ") Lire (N) Ecrire (N, " ! = ", factorielle (N)) Fin Exercice 2. 2 Expliquez les fonctionnalités des fonctions suivantes 2020
  • 7. 7 / 20 Fonction fct1 (x : Entier, y : Entier) : Entier Début Si (x = 0) Alors fct1 ← y Sinon fct1 ← fct1 (x-1, x+y) Fin Si Fin Solution : La fonction fct1() calcule et retourne ((1 + 2 ... + x-1 + x) +y) qui est (x(x+1)/2) + y. Par exemple, si x est 5 et y est 2, alors fct1 devrait retourner 15 + 2 = 17. Exercice 2. 3 Expliquez les fonctionnalités des fonctions suivantes Fonction fct2 (n : Entier) : Entier Début Si (n = 1) Alors Fct2 ← 0 Sinon Fct2 ← 1 + fct2 (n/2) Fin Si Fin Solution : La fonction calcule et renvoie le plus grand entier inférieur ou égal à log2(n). Par exemple, si n est entre 8 et 15, fct2() renvoie 3. Si n est entre 16 et 31 alors fct2() renvoie 4. Exercice 2. 4 Expliquez les fonctionnalités des fonctions suivantes Procédure fct3 (n : Entier) Début Si (n = 0) Alors retourne Fin Si Fct3 (n/2) Écrire (n%2) Fin Solution : La fonction fct3() affiche l'équivalent binaire d'un nombre n.Par exemple, si n est 21, alors fct3() affiche 10101. Exercice 2. 5
  • 8. 8 / 20 Expliquez les fonctionnalités des fonctions suivantes Fonction fct4 (tab[] : Entier, n : Entier) : Entier Début x ← -1 Si (n = 1) Alors fct4 ← tab [0] Sinon x ← fct4 (tab, n-1) Fin Si Si (x > tab[n-1]) Alors fct4 ← x Sinon fct4 ← tab[n-1] Fin Si Fin Solution : fct4() renvoie la valeur maximale dans le tableau d'entrée tab[] de taille n. Exercice 2. 6 Expliquez les fonctionnalités des fonctions suivantes Fonction fct5 (a : Entier, b : Entier) : Entier Début Si (b = 0) Alors fct5 ← 1 Fin Si Si (b mod 2 = 0) Alors fct5 ← fct5(a*a, b/2) Fin Si fct5 ← fct5(a*a, b/2) * 2 Fin Solution : fct5() renvoie ab Exercice 2. 7 On souhaite écrire une fonction récursive qui calcule le carré d'un entier. Pour trouver un lien entre 𝑐𝑎𝑟𝑟𝑒(𝑛) et 𝑐𝑎𝑟𝑟𝑒(𝑛 − 1), on utilise la formule donnée en énoncé : (𝑛 + 1)" = 𝑛" + 2𝑛 + 1. En changeant 𝑛 en 𝑛 − 1, la formule se réécrit 𝑛" = (𝑛 − 1)" + 2(𝑛 − 1) + 1 d'où 𝑐𝑎𝑟𝑟𝑒(𝑛) = 𝑐𝑎𝑟𝑟𝑒(𝑛−) + 2 ∗ 𝑛 − 1. Dans le cas où 𝑛 est un entier négatif, on utilise le fait que (−𝑛)" = 𝑛" . On se ramène ainsi au cas où n est un entier positif. Les appels récursifs successifs nous mènent au cas de base : si 𝑛 = 0, alors 𝑐𝑎𝑟𝑟𝑒(𝑛) = 0.
  • 9. 9 / 20 Solution : Fonction carré (n : Entier) : Entier Début Si (n = 0) Alors carré ← 0 Fin Si Sinon Si (n < 0) Alors carré ← carré (-n) Sinon carré ← carré (n-1) + 2*n - 1 Fin Si Fin Exercice 2. 8 On veut écrire une fonction récursive qui calcule la somme de 1 à un entier 𝑛 : 1 + 2 + 3 +· · · +(𝑛 − 1) + 𝑛. On remarque que si on connaît 𝑠𝑜𝑚𝑚𝑒_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1), alors pour avoir 𝑠𝑜𝑚𝑚𝑒_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑓(𝑛) il suffit d'ajouter n au résultat précédent. On prend comme convention que si 𝑛 < 1, alors la somme est nulle. Le cas de base est celui où n vaut 1, et dans ce cas la somme vaut 1. Solution : De l'explication précédente on déduit : Fonction somme_recursive (n : Entier) : Entier Début Si (n < 0) Alors somme_recursive ← 0 Fin Si Sinon Si (n = 1) Alors somme_recursive ← 1 Sinon somme_recursive ← somme_recursive (n-1) + n Fin Si Fin Exercice 2. 9 Ecrire une fonction récursive qui calcule le produit de 1 à un entier 𝑛 : 1 ∗ 2 ∗ 3 ∗ · · · ∗ (𝑛 − 1 ∗ 𝑛. On remarque que si on connaît 𝑝𝑟𝑜𝑑𝑢𝑖𝑡_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1), alors 𝑝𝑟𝑜𝑑𝑢𝑖𝑡+,-.+/01(3) = 𝑛 ∗ 𝑝𝑟𝑜𝑑𝑢𝑖𝑡_𝑟𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑒(𝑛 − 1). On prend comme convention que si 𝑛 < 1, alors le produit est nulle. Le cas de base est celui où n vaut 1 ou 0, et dans ce cas le produit vaut respectivement 1 et 0. Solution : De l'explication précédente on déduit : Fonction produit_recursive (n : Entier) : Entier Début
  • 10. 10 / 20 Si (n <= 0) Alors produit_recursive ← 0 Fin Si Sinon Si (n = 1) Alors produit_recursive ← 1 Sinon produit_recursive ← n * produit_recursive (n-1) Fin Si Fin
  • 11. 11 / 20 Introduction à l’algorithmique Travaux dirigés (TD) Correction Youssouf EL ALLIOUI p y.elallioui@usms.ma Série 3 LES FICHIERS Exercice 3. 1 Soit le fichier NOMBRES.BIN qui contient une liste de nombres entiers. Écrire un algorithme qui affiche les nombres du fichier, leur somme et leur moyenne. Solution : Algorithme Nombre Var F : Fichier d’entier Var X, S, Nb : Entier Var M : Réel Début Assigner(F,’NOMBRES.BIN’) Relire(F) Nb ← 0 S ← 0 Tantque Non FDF(F) Faire Lire(F,X) ; // Lire un élément du fichier Ecrire(X) ; // affichage à l’écran S ← S+X Nb ← Nb+1 Fin Tanque Si Nb≠0 Alors M ← S/Nb Ecrire(‘Somme des éléments =’,S,’ Moyenne=’,M) Sinon Ecrire(‘Fichier vide’) Fin Si Fermer(F) Fin Exercice 3. 2 Écrire un algorithme qui crée le fichier MOTS.TXT contenant une série de mots (longueur maximale d'un mot: 20 caractères). La saisie des mots se terminera à l'introduction du symbole '*' qui ne sera pas écrit dans le fichier. 2020
  • 12. 12 / 20 Écrire un algorithme qui affiche le nombre de mots ainsi que la longueur moyenne des mots contenus dans le fichier MOTS.TXT. 3- Écrire un algorithme qui crée un deuxième fichier MOTS10.TXT contenant les mots du fichier MOTS.TXT de plus de 10 caractères. Solution : Algorithme TraiteMot; Var F,G :Fichier de chaine[20] ; Var X : Chaine[20] ; Var Nb : Entier Var M : Réel Début /*question 1 Assigner(F,’MOTS.TXT’) ; Reecrire(F) ; /*ouvrir F en écriture Ecrire(‘Donner une suite de mots. Introduire le mot ‘*’ pour arrêter la saisie’) ; Lire(X) ; /*Lire le premier mot à l’extérieur de la boucle Tantque X≠’*’ Faire Ecrire(F,X) ; Lire(X) ; /*Lire le mot suivant Fait ; Fermer(F) ; /*question 2 Nb←0 ; M←0 ; /*on peut utiliser M pour la somme des longueurs puis pour la moyenne Relire(F) /*ouvrire F en lecture Tantque Non FDF(F) Faire Lire(F,X) ; /*Lire un élément du fichier M←M+Taille(X) ; Nb←Nb+1 ; Fait ; Si Nb≠0 Alors M←M/Nb ; Ecrire(‘Nombre de mots =’,Nb,’ Longueur Moyenne=’,M) Sinon Ecrire(‘Fichier vide’) Fsi ; Fermer(F) ; /*question 3 Assigner(G,’MOTS10.TXT’) ; Reecrire(G) ; Relire(F) /*ouvrir G en écriture et F en lecture Tantque Non FDF(F) Faire Lire(F,X) ; /*Lire un élément du fichier Si Taille(X)>10 Alors Ecrire(G,X) Fsi ; Fait ; Fermer(F) ;
  • 13. 13 / 20 Fermer(G) ; Fin Exercice 3. 3 Considérons le type enregistrement suivant : Type Étudiant = Enregistrement Matricule : Entier ; Nom, Prénom : Chaine [20] ; Moyenne : Réel ; Fin; Soit T un tableau d’au plus 100 étudiants. Écrire un algorithme permettant de recopier tous les étudiants admis appartenant à T dans un fichier ADMIS de type étudiant. Un étudiant est admis si sa moyenne est supérieure ou égale 10. Solution : Algorithme Étude Type Étudiant = Enregistrement Matricule : entier Nom, Prénom : chaine [20] ; Moyenne : réel Fin Var T : Tableau[1..100] de Étudiant Var F : Fichier de Étudiant Var X : Étudiant Var I,N : Entier ; Debut Ecrire(‘Donner le nombre d’’etudiants’) ; /*lecture des éléments du tableau Repeter Lire(N) Jusqu’à N>0 et N≤100 Pour I←1 à N Faire Avec X Faire Lire(Matricule) Lire(Nom,Prenom) Lire(Moyenne) Fait T[I]←X ; /*On peut utiliser directement T[I] et on évite l’affectation ( en bleu ) Avec T[I] Faire Lire(Matricule)
  • 14. 14 / 20 Lire(Nom,Prenom) Lire(Moyenne) Fait Fait /*création du fichier des admis Assigner(F,’ADMIS’) Reecrire(F) Pour I←1 à N Faire Si T[I].Moyenne)≥10 Alors Ecrire(F,T[I]) Fsi; /*même remarque, on peut utiliser un enregistrement X X←T[I] Si X.Moyenne)≥10 Alors Ecrire(F,X) Fsi Fait Fermer(F) Fin Exercice 3. 4 Soient les enregistrements suivants : Type TDate = Enregistrement Jour, mois, année : entier ; Fin Type TDiscipline = Enregistrement Discipline : chaine [10] ; Faculté : chaine [20] ; Fin; Type TEtudiant = Enregistrement Nom, prénom : chaine [20] ; DateN : TDate ; Filière : TDiscipline ; Fin; Soit FEtudiant un fichier d’étudiants. Écrire un algorithme qui permet de : - Remplir le fichier FEtudiant. - Éclater le fichier FEtudiant en deux fichiers, F1 (étudiants de la faculté ‘FEI’) et F2 (étudiants des autres facultés). Solution :
  • 15. 15 / 20 Algorithme Eclate Type TDate = Enregistrement Jour, mois, année : entier ; Fin Type TDiscipline = Enregistrement Discipline : chaine [10] ; Faculté : chaine [20] ; Fin; Type TEtudiant = Enregistrement Nom, prénom : chaine [20] ; DateN : TDate ; Filière : TDiscipline ; Fin; Var Étudiant : TEtudiant ; Var F, F1, F2 : Fuchier de TEtudiant ; Var FEI, Autre : Booléen ; Debut Assigner(F,’FEtudiant’) ; Réecrire(F) ; Avec Etudiant, Etudiant.DateN, Etudiant.Filiere Faire Ecrire(‘Nom :’) ; Lire(Nom) ; /*Lire 1er nom à l’extérieur de la boucle Tantque Nom<>’’ Faire Ecrire(‘Prénom :’) ; Lire(prenom) ; Ecrire(‘Date de naissance :’) ; Lire(Jour,mois,Annee) ; Ecrire(‘Discipline, Faculté :’) ; Lire(Discipline, Faculté) ; Ecrire(F,Etudiant) ; Ecrire(‘Nom :’) ; Lire(Nom) ; /*Lire le nom suivant Fait ; Fait ; Fermer(F) ; Relire(F) ; /*Pour éviter de créer des fichiers vides, on peut utiliser ces 2 indicateurs booléens, dans ce Cas /*l’assignation et la création ne se font que si nous trouvons un élément, après on remet le booléen à /*vrai pour ne pas refaire ces opérations /*CETTE OPERATION N’EST PAS OBLIGATOIRE MAIS MIEUX LA SAVOIR FEI ←Faux ; Autre ←Faux ; /*Si on n’utilise pas ces booléens, on doit assigner et ouvrir les 2 fichiers en écriture à ce niveau
  • 16. 16 / 20 Assigner(F1,’FFEI’) ; Réecrire(F1) ; Assigner(F2,’FAutrer’); Réecrire(F2); Si FDF(F) Alors Ecrire(‘Fichier vide’) Sinon Tantque Non FDF(F) Faire Lire(F,Etudiant) ; Avec Etudiant.Filiere Faire Si Faculté =’FEI’ Alors Si Non FEI Alors Assigner(F1,’FFEI’) ; Réecrire(F1) ; FEI ←Vrai Fsi ; Ecrire(F1,Etudiant) ; Sinon Si Non Autre Alors Assigner(F2,’FAutrer’); Réecrire(F2); Autre←Vrai Fsi ; Ecrire(F2,Etudiant) ; Fsi ; Fait ; Fait ; Fermer(F) ; Si FEI Alors Fermer(F1) Fsi ; Si Autre Alors Fermer(F2) Fsi ; Fsi ; Fin. Exercice 3. 5 1) Soient F1 et F2 deux fichiers d’entiers strictement positifs et sans répétition. Écrire un algorithme qui construit (crée) un fichier G d’entiers tel que G contient pour chaque valeur de F1 la valeur et tous ses multiples appartenant à F2 (F1 et F2 sont supposés existants). Exemple : F1 : 3 10 20 17 F2 : 3 6 19 60 40 30 G : 3 3 6 60 30 10 60 40 30 20 60 40 17 2) Écrire un algorithme qui permet à partir du fichier résultat (G) de générer un autre fichier (H) contenant toutes les valeurs du fichier (G) (sans répétition) avec leur nombre. Exemple : H : 3 2 6 1 60 3 30 2 10 1 40 2 20 1 17 1
  • 17. 17 / 20 Solution : 1) 1)
  • 18. 18 / 20 Exercice 3. 6 Soit F un fichier d’entiers représentant des séquences de nombres séparées par un ou plusieurs zéro. Écrire un algorithme qui réalise les traitements suivants : 1) A partir de F (fichier existant), crée un fichier G contenant pour chaque séquence, la moyenne des nombres qui la constituent. 2) 2- Puis, Supprimer les valeurs nulles du fichier G. Exemple : F : 0 0 1 4 3 7 0 0 0 6 -9 2 7 -6 0 -10 3 0 0 G : 3,75 0,00 -3,50 Avant suppression G : 3,75 -3,50 Après suppression Solution :
  • 20. 20 / 20 Introduction à l’algorithmique Travaux dirigés (TD) Correction Youssouf EL ALLIOUI p y.elallioui@usms.ma Série 4 LA COMPLEXITÉ ALGORITHMIQUE 2020