Vous êtes sur la page 1sur 12

Correction Série d’exercices : Les Sous Programmes

Exercice 1
 Décomposition en modules
Un module responsable du :
 Remplissage du tableau-> le module remplit le tableau et ne retourne aucune valeur-> procédure
 La Détermination du plus petit élément-> le module retourne une seule valeur-> fonction
 La Détermination de l’indice du plus petit élément-> le module retourne une seule valeur-> fonction
 La Détermination de l’occurrence du plus petit élément-> le module retourne une seule valeur-> fonction
 Analyse du programme principal
Nom : Petit_Occ_Min
S LDE OU
6 Résultat=Ecrire (" le plus petit élément est :", P, "Son premier P
indice est :", ind, "Son nombre d’occurrence est :" Occ) Occ
5 Occ← FN Occurrence (T,n,P) Ind
4 Ind← FN indice (T,n,P) N
3 P← FN petit (T,n) Saisie
2 T= PROC Saisie (T, n) Petit
1 Répéter Indice
N=donnée ("Saisir la taille du tableau :") Occurrence
Jusqu'à (n dans [5..20])
7 Fin Petit_Occ_Min
T.D.O
Objet Type/nature rôle
P Entier Contenir la valeur du plus petit élément
Occ Entier Contenir la valeur des occurrences du plus petit élément
Ind Entier Contenir la valeur des indices du plus petit élément
N Entier Contenir la taille du tableau
Saisie Procédure Procédure responsable du remplissage du tableau T
Petit Fonction Procédure responsable de la détermination du plus petit élément dans le tableau
Indice Fonction Procédure responsable de la détermination de l’indice du plus petit élément dans
le tableau
Occurrence Fonction Procédure responsable de la détermination du nombre d’occurrences du plus
petit élément dans le tableau
 Algorithme du programme principal
0) Début Petit_Occ_Min
1) Répéter
N=donnée ("Saisir la taille du tableau :")
Jusqu'à (n dans [5..20])
2) PROC Saisie (T, n)
3) P← FN petit (T,n)
4) Ind← FN indice (T,n,P)
5) Occ← FN Occurrence (T,n,P)
6) Ecrire (" le plus petit élément est :", P, "Son premier indice est :", ind, "Son nombre d’occurrence
est :" Occ)
7) Fin Petit_Occ_Min

Prof. : Mlle Mejri Hanen Page 1 / 12


 Analyse de la procédure saisie
DEF PROC Saisie(VAR T : tab, n :integer) TDO
S LDE OU Objet Type/nature Rôle
Résultat=T i i Entier compteur
1 T= [] Pour i de 1 à n faire
T[i]=donnée( Saisir un entier :)
Fin pour
2 Fin Saisie

 Algorithme de la procédure saisie


0) DEF PROC Saisie (VAR T : tab, n :integer)
1) Pour i de 1 à n faire
T[i]=donnée( Saisir un entier :)
Fin pour
2) Fin Saisie
 Analyse de la fonction petit
DEF FN petit(T : tab, n :integer) TDO
S LDE OU Objet Type/nature Rôle
Résultat=petit I I Entier Compteur
2 Petit← min min min Entier Contenir la valeur du
1 min= [min← T[1]] plus petit élément
Pour i de 2 à n faire d’un tableau
Si T[i]<min alors min← T[i]
Fin si
3 Fin pour
Fin petit
 Algorithme de la fonction petit
0) DEF FN petit(VAR T : tab, n :integer)
1) [min← T[1]]
Pour i de 2 à n faire
Si T[i]<min alors min← T[i]
Fin si
Fin pour
2) Petit← min
3) Fin PETIT
 Analyse de la fonction INDICE
DEF FN indice (T : tab, n :integer,P :integer) TDO
S LDE OU Objet Type/nature Rôle
Résultat= indice I I Entier Compteur
2 indice ← ind ind ind Entier Contenir la valeur de
1 ind= [exist← faux,i← 1] l’indice du plus petit
Répéter élément d’un tableau
Si T[i]=P alors exist← vrai
Ind← i
Fin si
Jusqu’a (i=n) ou (exist)
3 Fin indice

Prof. : Mlle Mejri Hanen Page 2 / 12


 Algorithme de la fonction indice
0) DEF FN indice(T : tab, n :integer,P :integer)
1) [exist← faux,i← 1]
Répéter
Si T[i]=P alors exist← vrai
Ind← i
Fin si
Jusqu’a (i=n) ou (exist)
2) indice ← ind
3) Fin indice
 Analyse de la fonction OCCURRENCE
DEF FN occurrence (T : tab, TDO
n :integer,P :integer) Objet Type/nature Rôle
S LDE OU I Entier Compteur
Résultat= occurrence I occ Entier Contenir le nombre
2 occurrence ← occ occ des occurrences du
1 occ = [occ← 0] plus petit élément
Pour i de 1 à n faire d’un tableau
Si T[i]=P alors occ← occ+1
Fin si
Fin pour
3 Fin occurrence
 Algorithme de la fonction occurrence
0) DEF FN occurrence (T : tab, n :integer,P :integer)
1) [occ← 0]
Pour i de 1 à n faire
Si T[i]=P alors occ← occ+1
Fin si
Fin pour
2) occurrence ← occ
3) Fin occurrence
Exercice 2
 Décomposition en modules
Un module responsable de :
 La recherche du nombre de diviseurs d’un entier donné-> le module retourne une seule valeur-> fonction
 La Détermination du maximum des diviseurs et du nombre correspondant à ce maximum ->le module
retourne deux valeurs-> Procédure
 Analyse du programme principal
Nom : NBRE_MAX
S LDE OU
2 Résultat=Ecrire ("le nombre qui a le plus grand nombre de Max
divisuers :", Nb, "avec un nombre de diviseurs :", Max) Nb
1 Nb,Max= [Max← 0] NbDiv
Pour i de 100 à 500 faire I
NbDiv← FN NbreDeDiviseurs(i) NbreDeDiviseurs
PROC Maximum (NbDiv,i,Max,Nb) Maximum
Fin pour
3 Fin NBRE_MAX

Prof. : Mlle Mejri Hanen Page 3 / 12


T.D.O
Objet Type/nature rôle
Max Entier Contenir le plus grand nombre de diviseurs pour un entier entre 100 à 500
Nb Entier Contenir le nombre ayant le plus grand nombre de diviseurs
NbDiv Entier Contenir le nombre de diviseurs d’un entier donné
I Entier Compteur
NbreDeDiviseurs Fonction Fonction qui retourne le nombre de diviseurs d’un entier donné
Maximum procédure Procédure qui détermine le maximum du nombre de diviseurs et le nombre
correspondant
 Algorithme du programme principal
0) Début NBRE_MAX
1) [Max← 0]
Pour i de 100 à 500 faire
NbDiv← FN NbreDeDiviseurs(i)
PROC Maximum (NbDiv,Max,Nb)
Fin pour
2) Ecrire ("le nombre qui a le plus grand nombre de divisuers :", Nb, "avec un nombre de
diviseurs :", Max)
3) Fin NBRE_MAX
 Analyse de la fonction NbreDeDiviseurs
DEF FN NbreDeDiviseurs (n:integer) :integer TDO
S LDE OU Objet Type/nature Rôle
Résultat= NbreDeDiviseurs J J Entier Compteur
2 NbreDeDiviseurs← Div Div Div Entier Contenir le nombre
1 Div= [Div← 0] de diviseurs d’un
Pour j de 1 à n faire entier donné
Si (n mod j=0) alors Div← Div+0
Fin pour
3 Fin NbreDeDiviseurs
 Algorithme de la fonction NbreDeDiviseurs
0) DEF FN NbreDeDiviseurs (n:integer) :integer
1) [Div← 0]
Pour j de 1 à n faire
Si (n mod j=0) alors Div← Div+0
Fin pour
2) Fin NbreDeDiviseurs
 Analyse de la procédure Maximum
Algorithme de la procédure Maximum
DEF Proc Maximum(Div,n : integer, 0) DEF Proc Maximum(Div,n : integer, Var
Var Max:integer, Var Nbre:integer) Max:integer, Var Nbre:integer)
S LDE OU 1) Si Div>Max alors Max← Div
Résultat=Max,Nbre Nbre←n
2 Max,Nbre= [] Fin si
1 Si Div>Max alors Max← Div 2) Fin Maximum
Nbre←n
Fin si
3 Fin Maximum

Prof. : Mlle Mejri Hanen Page 4 / 12


Exercice 3
 Décomposition en modules
Un module responsable :
 De la saisie de la taille du tableau--> le module retourne une seule valeur-> fonction
 Du remplissage du tableau (un tableau comprend plusieurs valeurs) ->le module retourne deux valeurs->
Procédure
 De la recherche d’un élément t[i] dans le reste du tableau c'est-à-dire à partir de la position i+1. Ce
module est responsable aussi à faire avancer les éléments du tableau lorsqu’on trouve un élément à la
position j tel que t[i]=t[j]
Exemple
10 7 9 7 10 6 7 4 8 3
Pour i =1, t[i]=10. Le second élément de valeur 10 se trouve à la position j=5. Ainsi, on remplace t[j] par le
vide, puis, on fait avancer les éléments restants du tableau
Remplacer par le vide
10 7 9 7 6 7 4 8 3
Avancer les éléments restants
10 7 9 7 6 7 4 8 3
 Analyse du programme principal
Nom : Modifier_Tab
S LDE OU
Résultat= solution Afficher
4 Solution= Proc afficher(t,n) Chercher_avancer
3 T= pour i de 1 à n faire saisieN
Proc chercher_avancer(t[i],i+1,t,n) remplirT
Fin pour t
2 T= Proc remplirT(t,n) n
1 N<-FN saisieN i
5 Fin Modifier_Tab

T.D.O
Objet Type/nature rôle
Afficher Procédure Responsable d’afficher le contenu d’un tableau d’entiers
Chercher_avancer Procédure Responsable de chercher les occurrences d’un élément dans un tableau, de
les remplacer par le vide et de faire avancer les éléments restants du tableau
saisieN Fonction Retourne la taille du tableau
remplirT Procédure Responsable du remplissage d’un tableau d’entiers
t Tab Contenir n entiers
n Entier Contenir la taille d’un tableau d’entiers
i entier compteur

T.D.T

Type

Tab=tableau de 20 entiers

Prof. : Mlle Mejri Hanen Page 5 / 12


 Algorithme du programme principal
0) Début Modifier_Tab
1) N<-FN saisieN
2) Proc remplirT(t,n)
3) Pour i de 1 à n faire
Proc chercher_avancer(t[i],i+1,t,n)
Fin pour
4) Proc afficher(t,n)
5) Fin Modifier_Tab
 Analyse de la fonction saisieN
DEF FN saisieN : entier TDO
S LDE OU Objet Type/nature Rôle
Résultat= saisieN n n Entier Contenir la taille d’un
2 saisieN ← n Entier tableau
1 répéter
n=donnée("saisir la taille du tableau")
jusqu'à n dans [2..20]
3 Fin saisieN
 Algorithme de la fonction saisieN
0) DEF FN saisieN : entier
1) Répéter
Ecrire ("saisir la taille du tableau"), lire (n)
Jusqu’à n dans [2..20]
2) Fin saisieN
 Analyse de la procédure remplirT
Algorithme de la procédure remplirT
DEF Proc remplirT(var t:tab,n: entier) 0) DEF Proc remplirT (var t:tab,n: entier)
S LDE OU 1) Pour i de 1 à n faire
Résultat=T i Lire(T[i])
1 T= [] Fin pour
Pour i de 1 à n faire 2) Fin remplirT
T[i]=donnée
Fin pour
2 Fin remplirT
 Analyse de la procédure afficher
Algorithme de la procédure afficher
DEF Proc afficher (t:tab,n:entier) 3) DEF Proc afficher (t:tab,n: entier)
S LDE OU 4) Pour i de 1 à n faire
Résultat=T i Ecrire(T[i])
1 T= [] Fin pour
Pour i de 1 à n faire 5) Fin afficher
Ecrire(T[i])
Fin pour
2 Fin afficher

Prof. : Mlle Mejri Hanen Page 6 / 12


 Analyse de la procédure chercher_avancer
DEF Proc chercher_avancer(e,p :entier ;var TDO
t :tab ; n :entier) Objet Type/nature Rôle
S LDE OU I Entier
Résultat=T I Erreur de
Algorithme Entier
la procédure afficher
1 T= [] Ch ch
0) DEF ChaîneProc dechercher_avancer(e,p :entier ;var
Pour I de p à n faire erreur t :tab caractères
; n :entier)
Si (t[i]=e) alors 1) Pour I de p à n faire
convch(e,ch) Si (t[i]=e) alors
ch<-'''' convch(e,ch)
valeur(ch,t[i],erreur) ch<-''''
PROC avancer(t,i,n) valeur(ch,t[i],erreur)
Fin si PROC avancer(t,i,n)
Fin pour Fin si
2 Fin chercher_avance Fin pour
2) Fin chercher_avance

TDO
Analyse de la procédure avancer Objet Type/nature Rôle
DEF Proc avancer (var t:tab;p,n:entier) I Entier compteur
S LDE OU
Résultat=T i
1 T= []
Pour I de p à n faire Algorithme de la procédure avancer
2 PROC permut(t[i],t[i+1]) 3) DEF Proc avancer (var t:tab;p,n:entier)
Fin chercher_avance 4) Pour I de p à n faire
PROC permut(t[i],t[i+1])
Fin pour
5) Fin avancer

Analyse de la procédure permut


DEF Proc permut(var x,y :entier)
S LDE OU
Résultat=x,y z
X,y=
1 Z<-x
2 X<-y
3 Y<-z
4 Fin permut

Prof. : Mlle Mejri Hanen Page 7 / 12


Exercice 4
 Décomposition en modules
Un module responsable de :
 La détermination du mot le plus long dans une phrase -> le module retourne une seule valeur-> fonction
 Le renversement d’une phrase -> le module retourne une seule valeur-> fonction

 Analyse du programme principal


Nom : Traitement
S LDE OU
4 Résultat= Ecrire("la phrase renversé : ",ph2, "le mot le plus long Ph2
dans cette phrase :", motlong) Motlong
Ph2,motlong= Phrase
3 motlong1<-FN motlongF(phrase) motlongF
2 ph2<-FN renverser(phrase) renverser
1 Phrase= donnée("saisir une phrase:")
5 Fin Traitement

T.D.O
Objet Type/nature rôle
Ph2 Chaîne de caractères Contenir la phrase renversée
Motlong Chaîne de caractères Contenir le mot le plus long dans la phrase
Phrase Chaîne de caractères Contenir une phrase
motlongF Fonction Responsable de déterminer le mot le plus long dans une phrase
renverser Fonction Responsable de renverser une phrase
 Algorithme du programme principal
0) Début Traitement
1) Ecrire ("saisir une phrase:")
Lire (phrase)
2) ph2<-FN renverser(phrase)
3) motlong1<-FN motlongF(phrase)
4) Ecrire ("la phrase renversé : ", ph2, "le mot le plus long dans cette phrase :", motlong)
5) Fin Traitement
 Analyse de la fonction renverser
DEF FN renverser(phrase :chaîne) :chaîne TDO
S LDE OU Objet Type/nature Rôle
Résultat= renverser Ph1 Ph1 Chaîne de caractères
4 Renverser<-ph1 J J Entier
1 [ph1<-'''', j<-long(ph),n<-long(ph)] N N Entier
Pour i=n à 1 (pas=-1) faire I I Entier
si ph[i]=" " alors mot mot Chaîne de caractères
mot<-souschaine(ph,i+1,j-i)
j<- i-1
ph1<-concat(ph1,mot, " ")
fin si
fin pour
2 [i<-1,mot<-'''']
répéter
mot<-concat(mot,ph[i])
i<-i+1
jusqu’a(ph[i]=' ')

Prof. : Mlle Mejri Hanen Page 8 / 12


3 ph1<-concat(ph1,mot)
5 Fin renverser
 Algorithme de la fonction renverser
0) DEF FN renverser(phrase :chaîne) :chaîne
1) [ph1<-'''', j<-long(ph),n<-long(ph)]
Pour i=n à 1 (pas=-1) faire
si ph[i]=" " alors
mot<-souschaine(ph,i+1,j-i)
j<- i-1
ph1<-concat(ph1,mot, " ")
fin si
TDO de la fonction motlongF
fin pour
2) [i<-1,mot<-'''']
répéter Objet Type/nature Rôle
mot<-concat(mot,ph[i]) Motlong1 Chaîne de caractères
i<-i+1 J Entier
jusqu’a(ph[i]=' ') Mot Chaîne de caractères
3) ph1<-concat(ph1,mot) I Entier
4) Renverser<-ph1 taille Entier
5) Fin renverser
 Analyse de la fonction motlongF
DEF FN motlongF(phrase:chaine):chaine
S LDE OU
5 Résultat= motlongF Motlong1 Algorithme de la fonction motlongF
motlongF<-motlong1 J 3) DEF FN motlongF(phrase:chaine):chaine
1 [motlong<-''",j<-1] Mot 4) [motlong<-''",j<-1]
Pour I de 1 à long(ph) faire I Pour I de 1 à long(ph) faire
si ph[i]=" " alors taille si ph[i]=" " alors
mot<-copy(ph,j,i-j) mot<-copy(ph,j,i-j)
j<-i+1 j<-i+1
taille<-long(mot) taille<-long(mot)
fin si fin si
si (taille>long(motlong)) alors si (taille>long(motlong)) alors
motlong<-mot motlong<-mot
fin si fin si
fin pour fin pour
{dernier mot} 5) Mot<-concat(ph,j,i-j+1)
2 Mot<-concat(ph,j,i-j+1) 6) Taille<-long(mot)
3 Taille<-long(mot) 7) si (taille>long(motlong)) alors
4 si (taille>long(motlong)) alors motlong<-mot
motlong<-mot fin si
fin si 8) Fin motlongF

6 Fin motlongF

Prof. : Mlle Mejri Hanen Page 9 / 12


Exercice 5
 Décomposition en modules
Un module responsable de :
 La détermination du plus petit élément dans le tableau -> le module retourne une seule valeur-> fonction
 La détermination du plus grand élément dans le tableau -> le module retourne une seule valeur->
fonction
 La détermination de la moyenne olympique -> le module retourne une seule valeur-> fonction
 Remplissage du tableau -> le module retourne plusieurs valeurs-> procédure
 L’existence d’un élément dans un tableau -> le module retourne une seule valeur-> fonction
 La saisie de la taille du tableau -> le module retourne une seule valeur-> fonction

 Analyse du programme principal


Nom : Traitement
S LDE OU
6 Résultat= Ecrire ("la moyenne olympique des éléments du tableau :", Moyenne) Moyenne
5 Moyenne<-FN Moy(t,n,p,g) T
4 P<-FN petit(t,n) N
3 g<-FN grand(t,n) P
2 t= PROC remplir(t,n) G
1 n<-FN saisieN N
7 fin Traitement Petit
Moy
Grand
Remplir
saisieN

T.D.O
Objet Type/nature rôle
Moyenne Réel Contenir la moyenne olympique
T Tab Tableau de n réels
N Entier Contenir la taille du tableau
P Entier Contenir le plus petit élément du tableau
G Entier Contenir le plus grand élément du tableau
Petit Fonction Responsable de déterminer le plus petit élément du tableau
Moy Fonction Responsable de calculer la moyenne olympique des éléments du tableau
Grand Fonction Responsable de déterminer le plus grand élément du tableau
Remplir Procédure Responsable du remplissage du tableau
saisieN fonction Responsable de la saisie de la taille du tableau
 Algorithme du programme principal
0) Début Traitement
1) n<-FN saisieN
2) PROC remplir(t,n)
3) g<-FN grand(t,n)
4) P<-FN petit(t,n)
5) Moyenne<-FN Moy(t,n,p,g)
6) Ecrire ("la moyenne olympique des éléments du tableau :", Moyenne)
7) fin Traitement

Prof. : Mlle Mejri Hanen Page 10 / 12


 Analyse de la fonction saisieN
DEF FN saisieN : entier TDO
S LDE OU Objet Type/nature Rôle
Résultat= saisieN n n Entier Contenir la taille d’un
2 saisieN ← n tableau
1 répéter
n=donnée("saisir la taille du tableau")
jusqu'à n dans [5..20]
3 Fin saisieN
 Algorithme de la fonction saisieN
0) DEF FN saisieN : entier
1) Répéter
Ecrire ("saisir la taille du tableau"), lire (n)
Jusqu’à n dans [5..20]
2) Fin saisieN
 Analyse de la procédure remplir
Algorithme de la procédure remplir
DEF Proc remplirT(var t:tab,n: entier) 6) DEF Proc remplirT (var t:tab,n: entier)
S LDE OU 7) Pour i de 1 à n faire
Résultat=T i Lire(T[i])
1 T= [] Si (i<>1) alors
Pour i de 1 à n faire Tant que(existant(t[i],t,i-1) faire
T[i]=donnée T[i]=donnée
Si (i<>1) alors Fin tant que
[exist<- FN existant(t[i],t,i-1] Fin si
Tant que(exist) faire Fin pour
T[i]=donnée 8) Fin remplir
Fin tant que
Fin si
2 Fin pour
Fin remplir
 Analyse de la fonction existant
Algorithme de la fonction existant
DEF FN existant 0) DEF FN existant
(e :entier ;t :tab ;p :entier) :booléen (e :entier ;t :tab ;p :entier) :booléen
S LDE OU 1) répéter
Résultat=existant I si t[i]=e alors exist<-vrai
2 Existant<-exist exist sinon si t[i]<>n alors i<-i+1
1 exist= [] fin si
répéter fin si
si t[i]=e alors exist<-vrai jusqu'à ((i=n)ou(exist))
sinon si t[i]<>n alors i<-i+1
fin si 2) Existant<-exist
fin si 3) Fin existant
jusqu'à ((i=n)ou(exist))
3 Fin existant

Prof. : Mlle Mejri Hanen Page 11 / 12


 Analyse de la fonction petit
DEF FN petit(t :tab ;n :entier) :real Algorithme de la fonction existant
S LDE OU 0) DEF FN petit(t :tab ;n :entier) :real [min<-
Résultat=petit Min t[1]]
2 petit<-min i 1) pour i de 2 à n faire
1 min= [min<-t[1]] si (t[i]<min) alors min<-t[i]
pour i de 2 à n faire fin si
si (t[i]<min) alors min<-t[i] fin pour
fin si 2) petit<-min
fin pour 3) Fin petit
3 Fin petit
 Analyse de la fonction grand
Algorithme de la fonction existant
DEF FN grand(t :tab ;n :entier) :real 0) DEF FN grand (t :tab ;n :entier) :real
S LDE OU 1) [max<-t[1]]
Résultat=grand Max pour i de 2 à n faire
2 grand<-max i si (t[i]<max) alors max<-t[i]
1 max= [max<-t[1]] fin si
pour i de 2 à n faire fin pour
si (t[i]>max) alors max<-t[i] 2) grand<-max
fin si 3) Fin grand
fin pour
3 Fin grand
 Analyse de la fonction Moy
Algorithme de la fonction Moy
DEF FN Moy(t :tab ;n :entier ;p,g :real) :real 4) DEF FN Moy(t :tab ;n :entier ;p,g :real)
S LDE OU :real
Résultat=Moy M 5) [s<-0]
3 Moy<-m S pour i de 1 à n faire
2 M<-s/(n-2) i si ((t[i]<>p)et(t[i]<>g)) alors
1 m= [s<-0] s<-s+t[i]
pour i de 1 à n faire fin si
si ((t[i]<>p)et(t[i]<>g)) alors fin pour
s<-s+t[i] 6) M<-s/(n-2)
fin si 7) Moy<-m
fin pour 8) Fin grand
4 Fin Moy

Prof. : Mlle Mejri Hanen Page 12 / 12

Vous aimerez peut-être aussi