Vous êtes sur la page 1sur 14

Problme 1. Bac2010.

On se On se propose d'crire une analyse et un algorithme dun programme Tri


qui permet de remplir un tableau T par n entiers distincts puis de former et
dafficher un autre tableau Res qui va contenir les n entiers du tableau T classs
en ordre croissant selon le principe suivant: Pour chaque lment du tableau T :
1) Dterminer le nombre Nbr dlments de T qui lui sont infrieurs ou gaux.
2) Placer cet lment dans la position Nbr du tableau Res.
Exemple : pour les lments du tableau suivant :

Lentier T[1] = 3 a 2 lments qui lui sont inferieurs ou gaux (3 et 0), il


sera plac dans la position 2 du tableau Res.

Lentier T[2] = 14 a 7 lments qui lui sont inferieurs ou gaux (3, 14, 0,
9, 5, 8 et 4) il sera plac dans la position 7 du tableau Res.

ainsi de suite pour les autres lments


Le tableau Res aura les lments placs dans un ordre croissant comme suit :

Questions :
1- Analyser le problme en le dcomposant en modules et dduire un
algorithme du programme principal.
2- Analyser chacun des modules proposs.
Analyse du Programme Principal
Rsultat = Affiche Tableau tri
[]Pour i de 1 N faire
Ecrire("RES[",i, "]= ",RES[i])
RES=PROC Trier(N,T,RES)
(N,T)= PROC Lecture(N,T)
Tableau de dclaration de Nouveaux Types
Types
TAB = Tableau de 50 entiers
Tableau de dclaration des Objets
Objet
Type/Nature
Rle
N
Entier
Dimension du tableau.
T
Tab
Tableau dentiers.
RES
Tab
Tableau tri
i
entier
compteur
Trier
procdure
Permet de trier le tableau T dans RES
Lecture
Procdure
Permet la saisie contrle de N et le
remplissage du tableau T avec contrle.
Analyse de la procdure Lecture :
1

DEF PROC Lecture(var N:entier;Var T:tab)


Rsultat =N,T
T= []rpter
Distinct Vrai
[] Pour i de 1 N Faire
T= Donne ("T[",i, "]= ")
FinPour
[] Pour i de 1 N Faire
[] Pour j de i+1 n Faire
[]Si t[i]= t[j] alors distinct faux FINSI
FinPour
FinPour
[] Si NON distinct alors Ecrire("Saisir des lments distincts") FINSI
Jusqu distinct= Vrai
N= []Rpter
N= donne("N= ")
Jusqu' (N>=2) et (N<=100)
Fin Lecture
Objet
Distinct
i
j

Tableau de dclaration des Objets


Type/Nat
Rle
ure
Boolen
Pour sassurer que le tableau contient des
lments distincts
Entier
Compteur
Entier
Compteur

Analyse de la procdure Trier:


DEF PROC Trier(N:entier;T:tab; var RES:TAB)
Rsultat=RES
[]Pour i de 1 n faire
[ K 0] Pour j de 1 n do
[]SI t[j] < t[i] Alors k k+1 Finsi
FinPour
RES[K+1] t[i]
FinPour
Fin Trier
Tableau de dclaration des Objets
Obje Type/Nat
Rle
t
ure
i
Entier
Compteur
j
Entier
Compteur
K
Entier
Lindice de lemplacement des bonnes places des lments
dans le tableau RES
LES ALGORITHMES :
Algorithme du programme Principal
0) Dbut Prog_Princ
1) PROC Lecture(N,T)
2) PROC Trier(N,T,RES)
3) Pour i de 1 N Faire
Ecrire("RES[",i, "]= ",RES[i])
4) Fin Prog_Princ
2

Algorithme de la procdure Lecture


0) DEF PROC Lecture(var N:entier;Var T:tab)
1) Rpter
Ecrire("N= ")
Lire(N)
Jusqu' (N>=2) et (N<=100)
2) Rpter
Distinct Vrai
Pour i de 1 N Faire
Ecrire("T[",i, "]= ")
Lire(T[i])
FinPour
Pour i de 1 N Faire
Pour j de i+1 n Faire
SI t[i]= t[j] alors Distinct Faux FINSI
FinPour
FinPour
SI (NON distinct) Alors Ecrire("Saisir des lments distincts") Finsi
Jusqu (distinct= Vrai)
3) Fin Lecture
Algorithme de la procdure Trier
0) DEF PROC Trier(N:entier;T:tab; var RES:TAB)
1) Pour i de 1 n faire
K0
Pour j de 1 n do
Si T[j] < T[i] Alors
K k+1
FinSi
FinPour
RES[K+1] T[i]
FinPour
2) FIN Trier

Problme 2.Bac2009.
On se On se propose d'crire un programme permettant de remplir deux tableaux
V1 et V2 respectivement par N et M entiers (avec N et M deux entiers de
l'intervalle [2..20] et les lments de V1 et V2 sont saisis dans un ordre
strictement croissant), puis de fusionner les lments de ces deux tableaux dans
un tableau V3 en liminant les redondances et en gardant l'ordre croissant des
lments. Enfin, le programme affichera les lments du tableau V3. Exemple :
Si N =5, M = 7 et les lments des deux tableaux V1 et V2 sont:

Alors le tableau V3 contiendra les lments suivants:


Travail demand:
1- Analyser le problme en le dcomposant en modules.
2- Analyser chacun des modules proposs.
3- En dduire un algorithme du programme principal ainsi que ceux des
modules envisags.
3

Nom = Distinct
Rsultat = Proc Afficher (K, V3)
(K, V3) = Proc Fusion (N, M, V1, V2, K, V3)
(N, V1) = Proc Saisie (N, V1)
(M, V2) = Proc Saisie (M, V2)
Fin Distinct
Tableau de dclaration des nouveaux types
Type
Tabd =Tableau de 20 entiers
Tabr = Tableau de 40 entiers
T.D.O.G
Nom
Type
Rle
K
Entier
Longueur du tableau final V3
N
Entier
Longueur du tableau V1
M
Entier
Longueur du tableau V2
V1
Tabd
Tableau donn
V2
Tabd
Tableau donn
V3
Tabr
Tableau final
Afficher
Procdure
Affiche le tableau final
Saisie
Procdure
Saisie dun tableau et sa longueur
Fusion
Procdure
Fusionne V1 et V2 dans V3 sans
redondance
DEF PROC Saisie (var Nb : entier ; var T :Tabd)
Rsultat = Nb, T
Nb = [ ] Rpter
Nb = donne
Jusqu Nb dans [2..20]
T= [ T[1] = donne]
Pour i de 2 Nb faire
Rpter
T[i]=donne
Jusqu T[i] > T[i-1]
Fin pour
Fin Saisie
T.D.O.L
Nom Type
Rle
i
Entier
Compteur
DEF PROC Fusion (N, M : Entier ; V1, V2 : Tabd ; Var K : Entier ; Var V3 :
Tabr)
Rsultat = K, V3
(K,V3)=[i1, j 1, K 0]Rpter
K K+1
Si V1[i]<V2[j] alors
V3[K] V1[i]
i i+1
Sinon Si V1[i]=V2[j] alors
V3[K] V1[i]
i i+1
j j+1
Sinon
4

V3[K] V2[j]
j j+1

FinSi
FinSi
Jusqu (i>N) ou (j>M)
Si j>M Alors
Pour c de i N faire
K K+1
V3[K] V1[c]
Fin pour
Sinon
Pour c de j M faire
K K+1
V3[K] V2[c]
Fin Pour
FinSi
Fin Fusion

Nom
i
j
c

T.D.O.L
Type
Rle
Entier
compteur
Entier
compteur
Entier
compteur

DEF PROC afficher ( Nb : entier ; T :tabr)


Rsultat = [ ]
Pour i de 1 Nb faire
Ecrire (T[i])
Fin pour
Fin Afficher
Nom
I

T.D.O.L
Type
Rle
Entier
compteu
r

Les algorithmes
Programme Principal
0) Dbut Distinct
1) Proc Saisie (N, V1)
2) Proc Saisie (M, V2)
3) Proc Fusion (N, M, V1, V2, K, V3)
4) Proc Afficher (K, V3)
5) Fin Distinct
Procdure Saisie
0) DEF PROC saisie (Var Nb : Entier ; Var T :Tabd)
1) Rpter
Lire (Nb)
Jusqu Nb dans [2..20]
2) lire(T[1])
3) Pour i de 2 Nb faire
Rpter
Lire (T[i])
5

Jusqu T[i] >T[i-1]


Fin pour
4) Fin saisie
Procdure Fusion
0) DEF PROC Fusion (N, M : entier ; V1,V2 : tabd ; var K : entier ; var V3 :
tabr)
1) i1, j 1, K 0
Rpter
K K+1
Si V1[i]<V2[j] alors
V3[K] V1[i]
i i+1
Sinon Si V1[i]=V2[j] alors
V3[K] V1[i]
i i+1
j j+1
Sinon
V3[K] V2[j]
j j+1
FinSI
FinSi
Jusqu (i>N) ou (j>M)
2) Si j>M Alors
Pour c de i N faire
K K+1
V3[K] V1[c]
Fin pour
Sinon
Pour c de j M faire
K K+1
V3[K] V2[c]
Fin Pour
FinSi
3) Fin Fusion
Procdure Afficher
0) DEF PROC Afficher ( Nb : entier ; T :tabr)
1) Pour i de 1 Nb faire
Ecrire (T[i])
Fin pour
2) Fin Afficher

Problme 3.Bac2008.
On se propose dcrire un programme qui permet de saisir une chane non vide
de 100 caractres au maximum et qui dtermine et affiche les informations
suivantes :
Le nombre total de caractres dans la chane
le nombre doccurrences de chaque lettre alphabtique figurant dans la chane
(sans distinction entre minuscule et majuscule)
le nombre total de caractres non alphabtiques.
N.B. On suppose que les lettres accentues ne sont pas considres comme des
lettres alphabtiques.
6

Exemple: Pour la chane: Ceci est une preuve du baccalaurat.Le programme


devra afficher le rsultat suivant: Votre texte comporte 37 caractres dont:
4 fois la lettre A 1 fois la lettre B 4 fois la lettre C 1 fois la lettre D 5 fois la lettre E
1 fois la lettre I 1 fois la lettre L 1 fois la lettre N 1 fois la lettre P 2 fois la lettre R
1 fois la lettre S 2 fois la lettre T 4 fois la lettre U 1 fois la lettre V et 8 caractres
non alphabtiques.
Questions :
1- Quelles sont les structures de donnes utiliser pour rsoudre ce
problme ? Justifier le choix de chaque structure propose.
2- Analyser le problme en le dcomposant en modules.
3- Analyser chacun des modules envisags dans lanalyse du programme
principal.
4- Dduire de ce qui prcde lalgorithme du programme principal ainsi que
les algorithmes des modules envisags.
NOM = nbre_lettres
Rsultat = (Ecrire(" Votre texte comporte " , longueur(ch), " caractres dont : "),
PROC afficher(LET), crire(" et " , NLET, " caractres non alphabtiques.")
(LET, NLET) = PROC decompte(ch, LET, NLET)
ch = REPETER
ch=DONNEE ("Chane traiter :")
JUSQU'A (longueur (ch) dans [1..100])
Fin nbre_lettres
Tableau de dclaration des nouveaux types
TYPE
TLET tableau de 26 entiers et dont les indices sont "A",
"B", , "Z"
NOM
afficher
decompt
e
LET
NLET
ch

Tableau de dclaration des objets


TYPE
ROLE
procdure permet d'afficher les lments du tableau avec les
commentaires relatifs
procdure permet de dterminer la dcomposition de la chane
TLET
Entier
Chaine[10
0]

ses lments comportent respectivement le nombre


d'une lettre de la chane ch
le nombre de caractres non alphabtiques
chane traiter

Analyse des modules


Analyse du module afficher
DEFPROC afficher(TL : TLET)
Rsultat = affiche_lettres
affiche_lettres = [ ] Pour c de "A" "Z" faire
[ ] Si (TL[c] 0) alors
Ecrire(TL[c], " fois la lettre ", c)
FinSi
FinPour
Fin afficher

Tableau de dclaration des objets locaux


NOM
TYPE
ROLE
c
caractre compteur et en mme temps
indice
Analyse du module decompte
DEFPROC decompte(cht : chaine[100] ; VAR TL : TLET ; VAR NLT : entier)
Rsultat = (TL, NLT)
(TL, NLT) = [lLong(cht), NLT _ 0, PROC init(TL)]
Pour i de 1 l Faire
[c Majus(cht[i])] Si (c dans ["A".."Z"]) alors
TL[c] TL[c] + 1
Sinon
NLT NLT + 1
FinSi
FinPour
Fin decompte
NOM
l
init
i
c

Tableau de dclaration des objets locaux


TYPE
ROLE
entier
longueur de la chane
procdure locale
sert initialiser 0 les lments du
dcompte
tableau TL
entier
compteur
caractre
compteur

Analyse du module init


DEFPROCinit(VAR TL : TLET)
Rsultat = TL
TL = [ ] Pour c de "A" "Z" Faire
TL[c] 0
FinPour
Fin init
Tableau de dclaration des objets locaux
NOM
TYPE
ROLE
c
caractr compteur et en mme temps
e
indice
Les algorithmes
Algorithme du programme principal
0) Debut nbre_lettres
1) REPETER
Ecrire ("Chane traiter :")
Lire(ch)
JUSQU'A (longueur (ch) dans [1..100])
2) PROC decompte(ch, LET, NLET)
3) Ecrire(" Votre texte comporte " , longueur(ch), " caractres dont : ")
PROC afficher(LET)
Ecrire(" et " , NLET, " caractres non alphabtiques.")
4) Fin nbre_lettres

Algorithmes des modules


Algorithme du module afficher
0) DEFPROCafficher(TL : TLET)
1) Pour c de "A" "Z" faire
Si (TL[c] 0) alors
Ecrire(TL[c], " fois la lettre ", c)
FinSi
FinPour
2) Fin afficher
Algorithme du module decompte et init
0) DEFPROC decompte(cht : chaine[100] ; VAR TL : TLET ; VAR NLT : entier)
1) lLong(cht)
2) PROC init(LT)
3) Pour i de 1 l Faire
c Majus(cht[i])
Si (c dans ["A".."Z"]) alors
TL[c] TL[c]+1
Sinon
NLT NLT + 1
FinSi
FinPour
4) Fin decompte
Algorithme du module init
0) DEFPROC init(VAR TL : TLET)
1) Pour c de "A" "Z" Faire
TL[c] 0
FinPour
2) Fin init

Problme 4.Bac2005.
Le conseil scientifique dune institution est form de m membres avec 10 m
20 et m impair. Pour dcider de lachat de micro-ordinateurs, les membres du
conseil effectuent un vote. Cette opration est informatise. Chacun des
membres exprime son avis par la saisie dun seul caractre qui peut tre :
F ou f pour Favorable,
D ou d pour Dfavorable,
N ou n pour Neutre.
On vous demande dcrire un programme qui affichera la dcision prendre par
le conseil sachant quelle est:
Reporte si le pourcentage des neutres est strictement suprieur 50 %, sinon
elle est
Accepte si le pourcentage des favorables est strictement suprieur celui des
dfavorables et Refuse dans le cas contraire.
N.B. Votre programme devra faire des saisies contrles suivant les indications
cites prcdemment.
Questions :
1- Analyser ce problme en le dcomposant en modules.
2- Analyser le programme principal ainsi que chacun des modules envisags.
3- En dduire les algorithmes correspondants.

10

11

12

Problme 5.Bac2006.
Soient deux tableaux T1 et T2 contenant chacun n lments distincts deux
deux (2<n<100). On appelle intersection de T1 et T2 lensemble des lments
communs ces deux tableaux. On se propose dcrire un programme qui range
les lments de lintersection des deux tableaux dans un tableau INTER puis
affiche les trois tableaux T1, T2 et INTER.
Questions :
1- Analyser ce problme en le dcomposant en modules.
2- Analyser chacun des modules proposs.
3- Dduire un algorithme du programme principal ainsi que ceux des
modules.

13

14

Vous aimerez peut-être aussi