Exemples d'exercices
d'algorithmique corrigés avec
l'analyse descendante via
pseudo-code
EX N°1
Soit la suite définie par :
• Le premier terme U0 est un entier donné qui dépasse 1.
• Le terme Un est égal à la somme des carrés des chiffres de
Cette suite est soit périodique ou stationnaire (constante). Établir les
analyses puis les algorithmes permettant d'afficher les termes de la
suite si elle est constante ou les termes de la période si la suite est
périodique.
Solution
Analyse
Résultat = Proc Affiche (P,N,T)
(P,N,T)=[N0,T[0]U0]
Répéter
NN+1
T[N]Fn SCC(T[N-1])
PFn
Recherche(T[N],0,N-1,T)
Jusqu'à (T[N]=1) ou (P>=0)
U0=[ ]
Répéter
U0=Donnée("Donner un entier
>1 ")
Jusqu'à U0>1
Le tableau de déclaration des nouveaux types
Type
Tab = Tableau de 21 Entiers {les cases sont
numérotées à partir de 0}
Le tableau de déclaration des objets globaux
Objet Type/Natu Rôle
re
P Entier …….
N Entier …….
U0 Entier …….
1
T Tab …….
SCC Fonction …….
Recherc Fonction …….
he
Algorithme
0) Début Ex1
1) Répéter
Écrire("Donner un entier >1 ")
Lire(U0)
Jusqu'à U0>1
2) N0, T[0]U0
Répéter
NN+1
T[N]Fn SCC(T[N-1])
PFn
Recherche(T[N],0,N-1,T)
Jusqu'a (T[N]=1) ou (P>=0)
3) Proc Affiche(P,N,T)
4) Fin Ex1
• Analyse de la fonction SCC (Version itérative)
Analyse
Résultat= SCC
SCCS
S=[S0]
Répéter
SS+Carré(N mod
10)
N N div 10
Jusqu'à N =0
Le tableau de déclaration des objets locaux
Obj Type/Natu Rôle
et re
S Entier …….
Algorithme
0) Def Fn SCC(N:Entier):Entier
1) S0
Répéter
SS+Carré(N mod 10)
NN div 10
Jusqu'à N = 0
2
2) SCCS
3) Fin SCC
• Analyse de la fonction SCC (Version Récursive)
Analyse
Résultat= [ ]
Si N=0 Alors SCC0
Sinon
SCCFn SCC(N div10)+ Carré(N
mod 10)
Fin Si
Algorithme
0) Def Fn SCC(N:Entier):Entier
1) Si N=0 Alors SCC0
Sinon
SCCFn SCC(N div 10)+ Carré(N mod
10)
Fin Si
2) Fin SCC
• Analyse de la fonction Recherche (Version Itérative)
Analyse
Résultat= Recherche
Recherche=[ ]
Si T[I]=X Alors Recherche I
Sinon Recherche -1
Fin Si
I= [ ID-1 ]
Répéter
I I+1
Jusqu'à (T[I]=X) ou(I=F)
Le tableau de déclaration des objets locaux
Obj Type/Natu Rôle
et re
I Entier …….
Algorithme
0) Def Fn Recherche(X,D,F:Entier;
T:Tab)Entier
3
1) ID-1
Répéter
II+1
Jusqu'à (T[I]=X) ou(I=F)
2) Si T[I]=X Alors Recherche I
Sinon Recherche -1
Fin Si
3) Fin Recherche
• Analyse de la fonction Recherche (Version
Récursive)
Analyse
Résultat= [ ]
Si T[D]=X Alors Recherche D
Sinon Si D>F Alors Recherche
-1
Sinon
Recherche Fn
Recherche(X,D+1,F,T)
Fin Si
Algorithme
0) Def Fn Recherche(X,D,F:Entier; T:Tab)Entier
1) Si T[D]=X Alors Recherche D
Sinon Si D>F Alors Recherche -1
Sinon Recherche Fn
Recherche(X,D+1,F,T)
Fin Si
2) Fin Recherche
• Analyse de la procédure Affiche
Analyse
Résultat= [ ]
Si T[N]=1 Alors
Pour I de 0 à N Faire
Écrire(T[I])
Fin Pour
Sinon
Pour I de P à N faire
Écrire(T[I])
Fin Pour
4
Fin si
Le tableau de déclaration des objets locaux
Obj Type/Natu Rôle
et re
I Entier …….
Algorithme
0) Def Proc Affiche(P,N:Entier;
T:Tab)
1) Si T[N]=1 Alors
Pour I de 0 à N Faire
Écrire(T[I])
Fin Pour
Sinon
Pour I de P à N faire
Écrire(T[I])
Fin Pour
Fin si
2) Fin Affiche
EX N°2
Établir les analyses et les algorithmes permettant de déterminer les
deux entiers A et B qui représentent respectivement le numérateur
et le dénominateur de la somme des N fractions d'entiers.
Exemple:
Solution
Analyse
Résultat= Écrire("La somme est =
",A,"/",B)
(A,B)=Proc
Somme(N,Num,Den,A,B)
N=[ ]
Répéter
N = donnée ("N = ")
Jusqu'à N dans[1..50]
(Num,Den)=Proc
Lecture(N,Num,Den)
Le tableau de déclaration des nouveaux types
5
Type
Tab = Tableau de 50
Entiers
Le tableau de déclaration des objets globaux
Obje Type/Nat Rôl
t ure e
A Entier …….
B Entier …….
N Entier …….
Num Tab …….
Den Tab …….
Lectu Procédure …….
re
Som Procédure …….
me
Algorithme
0) Début Ex4
1) Répéter
Écrire("N = "), Lire(N)
Jusqu'à N dans [1..50]
2) Proc Lecture(N,Num,Den)
3) Proc somme(N,Num,Den,A,B)
4) Écrire("La somme est =
",A,"/",B)
5) Fin Ex4
• Analyse de la procédure Lecture
Analyse
Résultat= (Num,Den)
(Num,Den) = [ ]
Pour I de 1 à N faire
Num[I]=Donnée ("Num[",I,"]=")
Répéter
Den[I]=Donnée
("Den[",I,"]=")
Jusqu'à Den[I]<>0
XFn
PGCD(Abs(Num[I]),Abs(Den[I]))
Num[I]Num[I] div X
Den[I]Den[I] div X
Fin Pour
6
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
I Entier …….
PGC Fonction …….
D
Algorithme
0) Def Proc Lecture(N:Entier; Var
Num,Den: Tab)
1) Pour I de 1 à N faire
Écrire("Num[",I,"]="), Lire(Num[I])
Répéter
Écrire("Den[",I,"]="), Lire(Den[I])
Jusqu'à Den[I]<>0
XFn
PGCD(Abs(Num[I]),Abs(Den[I]))
Num[I]Num[I] div X
Den[I]Den[I] div X
Fin Pour
2) Fin Lecture
• Analyse de la procédure Somme
Analyse
Résultat= (A,B)
(A,B) = [A0, B1 ]
Pour I de 1 à N faire
AA*Den[I]+B*Num[I]
BB*Den[I]
XFn
PGCD(Abs(A),Abs(B))
AA div X
BB div X
Fin Pour
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
I Entier …….
PGC Fonction …….
D
Algorithme
7
0) Def Proc Somme (N:Entier; Num,Den:Tab;
Var A,B:Entier)
1) A0, B1
Pour I de 1 à N faire
AA*Den[I]+B*Num[I]
BB*Den[I]
XFn PGCD(Abs(A),Abs(B))
AA div X
BB div X
Fin Pour
2)Fin Somme
• Analyse de la procédure PGCD
Analyse
Résultat= [ ]
Si B = 0 Alors PGCD A
Sinon PGCD Fn PGCD(B, A
mod B)
Fin Si
Algorithme
0) Def Fn PGCD(A,B:Entier):Entier
1) Si B = 0 Alors PGCD A
Sinon PGCD Fn PGCD(B, A
mod B)
Fin Si
2) Fin PGCD
EX N°3
Établir les analyses et les algorithmes permettant de convertir
un nombre romain R vers son équivalent arabe A.
Exemples:
R A
"MMMXXIX" 302
9
"DCCCLIV" 854
"MCMLXXVII 197
I" 8
"MMX" 201
0
Solution
8
Analyse
Résultat=Écrire(A)
AFn convar(R)
R=Donnée("Saisir un nombre
romain ")
Le tableau de déclaration des objets globaux
Obje Type/Nat Rôl
t ure e
A Entier …….
R Chaine …….
Conv Fonction …….
ar
Algorithme
0) Début Ex6
1) Écrire("Saisir un nombre
romain)
Lire(R)
2) AFn convar(R)
3) Écrire(A)
4) Fin Ex6
• Analyse de la fonction Convar version Itérative
Analyse
Résultat = Convar
ConvarS
S=[SFn Chiffre(R[Long(R)]]
Pour I de 1 à Long(R) -1 Faire
Si Fn Chiffre(R[I])<Fn Chiffre(R[I+1])
Alors SS-Fn Chiffre(R[I])
sinon
SS+Fn Chiffre(R[I])
Fin Si
Fin Pour
Le tableau de déclaration des objets locaux
Obje Type/Nat Rôl
t ure e
I Entier …….
S Entier …….
9
Chiffr Fonction …….
e
Algorithme
0) Def Fn Convar(R:Chaine):Entier
1) SFn Chiffre(R[Long(R)]
Pour I de 1 à Long(R) -1 Faire
Si Fn Chiffre(R[I])<Fn
Chiffre(R[I+1])
Alors SS-Fn Chiffre(R[I])
Sinon SS+Fn Chiffre(R[I])
Fin Si
Fin Pour
2) ConvarS
3) Fin Convar
• Analyse de la fonction Convar version Récursive
Analyse
Résultat = [ ]
Si Long(R) =0 Alors Convar0 sinon
Si Long(R) =1 Alors ConvarFn Chiffre(R[1])
Sinon Si Fn Chiffre(R[1])<Fn Chiffre(R[2]) Alors
Convar Fn Convar(Souchaine(R,2, Long(R)-1)-Fn Chiffre(R[1])
Sinon Convar Fn Convar(Souchaine(R,2, Long(R)-1)+Fn
Chiffre(R[1])
Fin Si
Le tableau de déclaration des objets locaux
Obje Type/Nat Rôl
t ure e
Chiffr Fonction …….
e
Algorithme
0) Def Fn Convar(R:Chaine):Entier
1) Si Long(R) =0 Alors Convar0 sinon
Si Long(R) =1 Alors ConvarFn Chiffre(R[1])
Sinon Si Fn Chiffre(R[1])<Fn Chiffre(R[2]) Alors
Convar Fn Convar(Souchaine(R,2, Long(R)-1)-Fn
Chiffre(R[1])
10
Sinon Convar Fn Convar(Souchaine(R,2, Long(R)-1)+Fn
Chiffre(R[1])
Fin Si
2) Fin Convar
• Analyse de la fonction Chiffre
Analyse
Résultat = Chiffre
ChiffreN
N =[ ]
Selon Majus(C) Faire
"I": N1
"V":N5
"X":N10
"L":N50
"C":N100
"D":N500
"M":N1000
Fin Selon
EX N°4
Soit une entreprise qui comporte un nombre fini d’employés ;
Chaque employé est caractérisé par un code (Numérotation
automatique), un nom, un salaire, une catégorie (1-2-3 ou 4), un
sexe et une ancienneté.
Établir un algorithme qui permet la création d’un fichier contenant
les employés, la saisie des employés (cette saisie se termine par un
salaire nul qui ne doit pas être tenu en compte), puis augmenter les
salaire par un montant qui est égale au double de l’ancienneté enfin
créer un fichier comportant les hommes dans l’ordre décroissant des
catégories et afficher les résultats calculés.
Solution
Analyse
Résultat=Proc Affiche(Ff)
Proc Affiche(H)
Ff= Proc Augmenter(F)
F=Proc Saisie(F)
H=Proc Hommes(Ff,H)
Le tableau de déclaration des nouveaux types
Type
11
Employe=Enregistreme
nt
Code: Mot
Cat, Anc: Octet
Nom:
chaine[30]
Sal: Réel
Sexe: Caractère
Fin Employe
Entreprise= Fichier
d'employe
Le tableau de déclaration des objets globaux
Objet Type/Natu Rôle
re
F Entreprise …….
H Entreprise …….
Affiche Procédure …….
Augmentat Procédure …….
ion
Saisie Procédure …….
Hommes Procédure …….
• Analyse de la procédure saisie
Analyse
Résultat=F
F = [Associer(F,"c:\[Link]"),
recréer(f), I0]
Répéter
II+1
[Link]I
[Link]=donnée ("……….")
Répéter
[Link]=donnée("………")
Jusqu'à [Link]>=0
Répéter
[Link]=donnée("………")
Jusqu'à [Link] dans[1..4]
Répéter
[Link]=donnée("………")
Jusqu'à [Link]
dans["F","f","H","h"]
Répéter
12
[Link]=donnée("………")
Jusqu'à [Link] >=0
Si [Link]>0 Alors Écrire(F,E)
Fin Si
Jusqu'à [Link]=0
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
E Employe …….
Algorithme
0) Def Proc saisie(var f:Entreprise)
1) Associer(F,"c:\[Link]"),
recréer(f), I0
Répéter
II+1
[Link]I
[Link]=donnée ("……….")
Répéter
[Link]=donnée("………")
Jusqu'à [Link]>=0
Répéter
[Link]=donnée("………")
Jusqu'à [Link] dans[1..4]
Répéter
[Link]=donnée("………")
Jusqu'à [Link]
dans["F","f","H","h"]
Répéter
[Link]=donnée("………")
Jusqu'à [Link] >=0
Si [Link]>0 Alors Écrire(F,E)
Fin Si
Jusqu'à [Link]=0
2) Fermer(f)1
3) Fin saisie
• Analyse de la procédure Augmentation
Analyse
1
Pour sécuriser les données d'un fichier, il est recommandé de fermer le fichier après tout traitement.
13
Résultat=F
F = [Ouvrir(F) ]
Pour I de 0 à Taille_fichier(F)-1 Faire
Lire(F,E)
[Link][Link]+2*[Link]
Pointer(F,I)
Écrire(F,E)
Fin Pour
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
E Employe …….
I Entier …….
Algorithme
0) DEF Proc Augmentation(Var
F:Entreprise)
1) Ouvrir(F)
Pour I de 0 à Taille_fichier(F)-1 Faire
Lire(F,E)
[Link][Link]+2*[Link]
Pointer(F,I)
Écrire(F,E)
Fin Pour
2) Fermer(F)
3) Fin Augmentation
• Analyse de la procédure Hommes
Analyse
Résultat=H
H = [Associer(H,"c:\[Link]"), recréer(H) ]
Pour I de 4 à 1Faire
Ouvrir(F)
Pour K de 0 à Taille_fichier(F)-1 Faire
Lire(F,E)
Si [Link]=I Alors Écrire(H,I)
Finsi
Fin Pour
Fin Pour
14
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
E Employe …….
I Entier …….
K Entier …….
Algorithme
0) Def Proc Hommes(Var
F,H:Entreprise)
1) Associer(H,"c:\[Link]"),
recréer(H)
Pour I de 4 à 1 Faire
Ouvrir(F)
Pour K de 0 à Taille_fichier(F)-1
Faire
Lire(F,E)
Si [Link]=I Alors Écrire(H,I)
Finsi
Fin Pour
Fin Pour
2) Fermer(F)
3) Fermer(H)
4) Fin Hommes
• Analyse de la procédure Affiche
Analyse
Résultat= [Ouvrir(F)]
Pour K de 0 à Taille_fichier(F)-1 Faire
Lire(F,E)
Avec E Faire
Écrire(Code:3, Nom:30, Sal:8:3, Sexe:3,
Anc:3, Cat:3)
Fin avec
Fin Pour
Le tableau de déclaration des objets locaux
Obj Type/Nat Rôl
et ure e
15
E Employe …….
K Entier …….
Algorithme
0) Def Proc Affiche(Var F:Entreprise)
1) Ouvrir(F)
Pour K de 0 à Taille_fichier(F)-1 Faire
Lire(F,E)
Avec E Faire
Écrire(Code:3, Nom:30, Sal:8:3, Sexe:3, Anc:3,
Cat:3)
Fin avec
Fin Pour
2) Fermer(F)
3) Fin Affiche
16