Algorithmique et programmation
Session de contrôle
Correction
Exercice 1 (3 points = 0,25 * 12)
a) Un module est dit récursif, s’il comporte dans son corps :
F au plus un appel à lui même
F au moins deux appels à lui même
V un ou plusieurs appels à lui-même
b) Une fonction récursive doit comporter :
V un appel récursif en changeant au moins la valeur d’un paramètre
V une condition d’arrêt de l’appel récursif
F des variables locales
c) Lors de l’exécution d’un traitement récursif :
V le dernier appel doit être traité en premier
F le premier appel doit être traité en premier
F le dernier appel doit être traité en dernier
d) Un traitement récurrent dépend :
F toujours d’un seul traitement précédent
F de zéro traitement précédent
V d’un ou de plusieurs traitement(s) précédent(s)
Exercice 2 (4,5 points)
1. L’algorithme de la fonction Calcul :
0) Def Fn Calcul (epsilon:Réel) : Réel
1) X0
Répéter
XprecX
XCos(Xprec)
Jusqu’à (Abs(X-Xprec) ≤ epsilon)
2) CalculX
3) Fin Calcul
Page 1 sur 7
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
X Réel Contenir le cosinus d’un réel
Xprec Réel Contenir la valeur précédente de X
2. L’algorithme de la fonction Surface :
0) Def Fn Surface (epsilon:Réel) : Réel
1) n1 , PFn Calcul(epsilon), SFn Sur(0,p,n)
Répéter
nn+1
AsS
SFn Sur(0,P,n)
Jusqu’à (Abs(S-As) ≤ epsilon)
2) Surface S
3) Fin Surface
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
n Entier Le nombre des subdivisions
S Réel Contenir la valeur de la surface
As Réel Sauvegarder la valeur précédente de la surface
P Réel Contenir une valeur approchée à epsilon prés de P tel que cos(P)=P
Calcul Fonction Déterminer une valeur approchée à epsilon prés de P tel que cos(P)=P
Sur Fonction Calculer une valeur approchée de la surface
L’algorithme de la fonction Sur
0) Def Fn Sur (a,b:Réel ; n:Entier) : Réel
1) h(b-a)/n, xa, s(cos(a)-a + cos(b)-b)/2
Pour i de 1 à n-1 Faire
xx+h
ss+cos(x)-x
Fin Pour
2) Surh*s
3) Fin Sur
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
h Réel Contenir la valeur du diamètre
x Réel Contenir la valeur de l’abscisse
s Réel Contenir la somme des ordonnées
i Entier Compteur
Exercice 3 (4 points)
1)-a) L’algorithme de la fonction dichotomie :
0) Def Fn Dichotomie (T:Tab ; g,d,k:Octet) : Octet
1) Mil (g+d) DIV 2
Si (g>d) Alors Dichotomie g
Sinon Si (T[mil]=k) Alors Dichotomie mil
Sinon Si (T[mil]>k) Alors Dichotomie Dichotomie (T, g, mil-1, k)
Sinon Si (T[mil]< k) Alors Dichotomie Dichotomie (T, mil+1, d, k)
FinSi
2) Fin Dichotomie
Page 2 sur 7
1)-b) Le tableau de déclarations du nouveau type :
Type
Tab= Tableau de 20 Entiers
1)-c) Le tableau de déclarations des objets locaux :
Objet Type/Nature Rôle
Mil Octet Contenir l’indice du milieu
2)
0) Def Proc TriInsertionDichotomique (Var T:Tab ; N:Octet)
1) Pour i de 2 à N Faire
XT[i]
PFn Dichotomie(T,1,i-1,X)
Si (P< i) Alors
Proc Decalage(T,P,i-1)
T[P]X
Fin Si
Fin Pour
2) Fin TriInsertionDichotomie
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
i Octet Compteur
X Octet Sauvegarder la valeur de l’élément d’indice i
P Octet Contenir l’indice de la position d’insertion
Dichotomie Fonction Rechercher la position d’insertion
Decalage Procédure Décaler des éléments du vecteur T
L’algorithme de la procédure Decalage
0) Def Proc Decalage (Var T:Tab;deb,fin: Octet)
1) Pour j de fin à deb (pas= - 1) Faire
T[j+1] T[j]
Fin Pour
2) Fin Decalage
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
j Octet Compteur
Exercice 4 (4 points)
1) L’association au fichier "F_intens.dat" : Associer (F, "C:\F_intens.dat")
2) Le tableau de déclarations du nouveau type :
Type
Mesure = Enregistrement
Temps : Entier long
Intensite : Réel
Fin Mesure
Valeurs = Fichier de Mesure
Nb : pour le champ Temps on acceptera tout type numérique.
Page 3 sur 7
3) L’algorithme de la procédure Remplir :
0) Def Proc Remplir (Var F:Valeurs)
1) Recréer(F)
Répéter
Ecrire ("Saisir le temps "), Lire([Link])
Ecrire ("Saisir l’intensité relatif au temps saisi "), Lire([Link])
Ecrire(F, E)
Répéter
Ecrire ("Voulez-vous saisir les valeurs d’une expérience (O/N) ? ")
Lire(Rep)
Jusqu’à Rep dans["O","N"]
Jusqu’à Rep = "N"
2) Fermer(F)
3) Fin Remplir
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
E Mesure Contenir le temps et l’intensité d’une mesure
Rep Caractère Contenir la réponse de l’utilisateur
4) L’algorithme de la fonction Verifier :
0) Def Fn Verifier (Var F:Valeurs ) : Booléen
1) Ouvrir(F), Nbr0
Tantque Non(Fin_Fichier(F)) Faire
Lire(F, E)
T [Link]
MesPrat[Link]
MesTh(1-Exp(-T/2))/25
Si Abs(MesPrat - MesTh)<0.001 Alors NbrNbr+1
FinSi
Fin Tantque
2) Verifier Nbr>(90*Taille_Fichier(F)/100)
3) Fermer(F)
4) Fin Verifier
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
E Mesure Contenir le temps et l’intensité d’une mesure
Nbr Entier Long Contenir le nombre des expériences dont la différence entre la
valeur expérimentale et la valeur théorique ne dépasse pas 10-3
T Entier Long Contenir le temps d’une mesure
MesPrat Réel Contenir la mesure pratique
MesTh Réel Contenir la mesure théorique
Page 4 sur 7
Exercice 5 (4.5 points)
1) Les nombres distincts dans la base 3 sont : 0, 1, 2, 10, 12, 20, 21, 102, 120, 201 et 210
2) Développement des algorithmes des modules :
a. La fonction Convert
0) Def Fn Convert (D:Entier ; B:Octet) : Chaîne
1) R ""
Répéter
Reste D mod B
Si Reste<10 Alors RChr(48 + Reste) + R
Sinon RChr(55 + Reste) + R
Fin Si
DD div B
Jusqu’à D = 0
2) ConvertR
3) Fin Convert
Le tableau de déclarations des objets locaux
Objet Type/Nature Rôle
R Chaîne Contenir l’équivalent dans la base B du nombre décimal D
Reste Octet Contenir le reste de la division entière par B
b. La fonction Distinct
0) Def Fn Distinct (R : Chaine) : Booléen
1) Si Long[R] = 1 Alors Distinct Vrai
Sinon Si Pos(R[1], SousChaine(R,2,Long(R) -1))>0 Alors Distinct Faux
Sinon Distinct Fn Distinct(SousChaine(R,2,Long(R)-1))
Fin Si
2) Fin Distinct
Page 5 sur 7
Barème
N.B. :
On acceptera toute autre solution correcte.
On n’accepte que les solutions sous forme d’algorithme.
0.25 par erreur
0.25 de la note attribuée au TDO si la colonne Rôle est omise ou erronée.
Exercice n°1 : (3 points = 12 * 0.25)
On accepte les réponses V, F, Vrai, Faux
1. F-F-V 2. V-V-F 3. V-F-F 4. F-F-V
Exercice n°2 : (4.5 points)
a) Fonction calcul (epsilon) : (2 points)
Tâches Points
Entête 0.25
Initialisation 0.25
Boucle + condition d’arrêt 0.5= 0.25+0.25
Modification de la valeur de x 0.5
Affectation du résultat au nom de la fonction 0.25
TDO 0.25
b) Fonction Surface (epsilon) (2.5 points)
Tâches Points
Entête 0.25
Appel de la fonction calcul 0.25
Boucle + condition d’arrêt 0.5
Incrémentation du nombre d’intervalles 0.25
Calcul de la surface (initialisations + boucle + affectations) 0.75 = 0.25 * 3
Affectation du résultat au nom de la fonction 0.25
TDO 0.25
Exercice n°3 : (4 points)
a) Placement des instructions aux bons endroits : (0.75 point = 0.25 *3)
b) TDNT Tab : (0.25 point)
c) TDOL : (0.25 point)
d) Module tri par insertion dichotomique : (2.75 points)
Tâches Points
Entête 0.25
Boucle 0.25
Sauvegarde de T[i] 0.25
Recherche de la position d’insertion (Appel de la fonction Dichotomie + 0.5= 0.25+0.25
paramètres)
Décalage (boucle + affectation) 0.75 = 0.5+ 0.25
Affectation d’insertion de T[i] 0.25
TDO 0.5
Page 6 sur 7
Exercice n°4 : (4 points)
1. Association : (0.25 point)
2. TDNT (enregistrement + fichier) : (0.5 point= 0.25+0.25)
3. Remplissage du fichier F_intensite.dat : (1.25 points)
Tâches Points
Création du fichier + Fermeture du fichier 0.25
Boucle + condition d’arrêt 0.25
Lecture du temps + Lecture de l’intensité 0.25
Ecriture dans le fichier 0.25
Lecture de la réponse (O/N) 0.25
4. Vérification de la réussite de l’expérience : (1.75points)
Tâches Points
Ouverture du fichier + Fermeture du fichier 0.25
Initialisation du nombre d’expériences réussies 0.25
Parcours du fichier 0.25
Lecture des valeurs expérimentales : temps + intensité 0.25
Calcul théorique de l’intensité 0.25
Comparaison + incrémentation du nombre d’expériences réussies 0.25
Affectation du résultat de vérification du degré de réussite 0.25
NB : Les Entêtes +les TDO des deux questions 3°/ et 4°/ : 0.25 point
Exercice n°5 : (4.5 points)
1. Nombres distincts dans la base 3 : (1 point)
2. Algorithme du module Convert : (2.25 points)
Tâches Points
Entête 0.25
Initialisation 0.25
Boucle + condition d’arrêt 0.25
Calcul du reste 0.25
Test par rapport à 10 0.25
Affectation cas reste 10 0.25
Affectation cas reste = 10 0.25
Calcul du quotient 0.25
TDO 0.25
3. Algorithme du module Distinct : (1.25 points)
Tâches Points
Entête 0.25
Parcours de la chaîne 0.25
Vérification de l’unicité de chaque caractère 0.50
Affectation du résultat au nom de la fonction 0.25
Page 7 sur 7