Vous êtes sur la page 1sur 6

Exercice

Bac Blanc 2014


Dans le cadre de la migration vers son nouvel nom commercial ooredoo, la
société mère a décidé d’organiser chaque semaine un jeu de chance pour ses
abonnés. Pour cela cette société vous demande d’écrire un programme qui gère
ce jeu.

 Saisir le nombre des participants N sachant que 5≤N≤100.


 Remplir le tableau T par le numéro de téléphone de chaque participant,
sachant que les numéros de téléphones sont des chaines de caractères de
8 chiffres dont le chiffre n°1 doit être 2.
 Calculer le nombre de chance pour chaque n° de Tel et le stocker dans
le tableau S.
Comment calculer le nombre de chance d’un n° de Tel ?
Nombre de chance = somme des chiffres de n°Tel multiplié par son
rang.
Exemple : Tel=29234560
Nombre de chance= 2*1+ 9*2+ 2*3+ 3*4+ 4*5+ 5*6+ 6*7+ 0*8 = 130
 Afficher les 33% premiers numéros de Téléphone ayant les plus grands
scores.

NB : Si le calcul de 33% des n°Tel ne donne pas un entier, on utilisera


l’arrondi du nombre trouvé.

Pour N=7

T= 24023456 20056782 29234560 25737286 26570694 23781269 21627839


1 2 3 4 5 6 7
S= 140 166 130 196 188 192 206
1 2 3 4 5 6 7
Le programme affichera

Les participants gagnants : 21627839 25737286

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 1/6


 Décomposition modulaire du problème

Programme
Principal

PROC PROC PROC Remplir_Score (N, T, PROC Tri_Score (N,var


Saisie(var N) Remplir_participant(N,var T) var S) T,var S)

FN verif(tel) FN PROC PermutScore (var


calculer_score(tel) x,y)

PROC PermutTel (var


x,y)

PROC Afficher (N, T)

 Analyse de programme principal :


Nom de programme : jeux  Algorithme de programme principal:
Résultat : Trait 0) Début jeux
Trait=[] PROC Afficher(Arrondi(n*0.33),Ttel) 1) PROC Saisir(N)
PROC Trier(N, Ttel,Tscore) 2) PROC Remplir_participant(N, Ttel)
PROC Remplir_Score(n,Ttel,Tscore) 3) PROC Remplir_Score(n,Ttel,Tscore)
PROC Remplir_participant(N, Ttel) 4) PROC Trier(N, Ttel,Tscore)
PROC Saisir(n) 5) PROC Afficher(Arrondi(n*0.33),Ttel)
Fin jeux 6) Fin jeux
T.D.N.T
Type
T_Tel=chaine de 8 caractères
TABTel= Tableau de taille 50 et de type T_Tel
TABScore= Tableau de taille 50 et de type entier

T.D.O Globaux
Objet T/N Rôle
N Entier stocker la taille du tableau
Ttel TABTel Stocker le n° de tel des participants
Tscore TABScore Stocker dans le tableau les scores de chaque participant
Saisir Procédure Saisir la taille du tableau
Remplir_participant Procédure Remplir le tableau par les n°tel des participants
Remplir_Score Procédure Remplir le tableau par les scores des participants
Trier Procédure Trier le tableau Tscore dans l’ordre décroissant
Afficher Procédure Afficher les gagnants

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 2/6


 Algorithme de la procédure Saisir
1) Répéter
écrire("Donner la valeur de N : ")
lire(x)
jusqu’à (5≤x)ET(x≤50)
2) Fin Saisir
 Algorithme de la procédure Remplir_participant
1) Pour i de 1 à N faire
Répéter
écrire("Tel[",i, "]=")
lire(T[i])
jusqu’à FN verif(T[i])
Fin Pour
2) Fin Remplir
T.D.O Locaux
Objet T/N Rôle
i Entier Compteur
verif Fonction Vérifier la validité d’un numéro de téléphone
 Algorithme de la fonction Vérif
1) i 2
2) Tant que (tel[i] dans ["0".."9"]) et (i<long(tel)) faire
ii+1
Fin Tant que
3) Verif (long(tel)≠8) et (tel[i] dans ["0".."9"]) et (tel[1] = "2")
Fin Verif
T.D.O Locaux
Objet T/N Rôle
i Entier Compteur
 Algorithme de la procédure Remplir_Score
1) Pour i de 1 à N faire
Tscore[i]FN calculer_score(Ttel[i])
Fin Pour
2) Fin Remplir_Score
T.D.O Locaux
Objet T/N Rôle
i Entier Compteur
calculer_score Fonction Calculer le nombre de chance d’un numéro de téléphone
 Algorithme de la Fonction calculer_score
1) [s0]pour i de 1 à long(tel) faire
valeur(tel[i],c,e)
ss+c*i
Fin pour
2) calculer_score  s
3) Fin

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 3/6


T.D.O Locaux
Objet T/N Rôle
i Entier Compteur
s Entier Calculer le nombre de chance d’un numéro de téléphone
c Entier Stocker un chiffre
e Entier Contient la position de l’erreur

 Algorithme de la procédure Tri_Score


1) Répéter
[Echangefaux]
pour i de 1 à n-1 faire
si Tscore[i]<Tscore[i+1] alors
PROC PermutScore(Tscore[i],Tscore[i+1])
PROC PermutTel(Ttel[i],Ttel[i+1])
Echangevrai
Fin Si
Fin Pour
Nn-1
Jusqu’à non(echange) ou (n=1)
2) Fin Trier
T.D.O Locaux
Objet T/N Rôle
i Entier Compteur
echange booléen Vérifier si on effectuer un parcours sans échange
PermutScore Procédure Permuter deux cases dans le tableau TScore
PermutTel Procédure Permuter deux cases dans le tableau Ttel

 Algorithme de la procédure PermutScore  Algorithme de la procédure PermutTel


1) auxx 1) auxx
2) xy 2) xy
3) yaux 3) yaux
4) Fin PermutScore 4) Fin PermutTel
T.D.O Locaux T.D.O Locaux
Objet T/N Rôle Objet T/N Rôle
aux Entier Variable auxiliaire aux T_TEL Variable auxiliaire

 Algorithme de la procédure Afficher


1) Pour i de 1 à N faire
Ecrire(Ttel[i])
Fin Pour
2) Fin Afficher
T.D.O Locaux

Objet T/N Rôle


i Entier Compteur

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 4/6


Programme Pascal
PROGRAM JEU;
USES wincrt ;
TYPE
T_Tel=string[8];
TABTel=Array[1..50] of T_Tel;
TABScore=Array[1..50] of integer;
VAR
n:integer;
Ttel:TABTel ;
Tscore:TABScore;
PROCEDURE Saisir(VAR N :integer);
BEGIN
repeat
Write('Donner le nombre de participants: ');
Readln(N) ;
until(N>=5)and(N<=50);
END;
PROCEDURE Remplir_participant(n:integer ; VAR Ttel: TABTel);
VAR i :integer ;
FUNCTION verif(tel:T_Tel):Boolean;
VAR i:integer;
BEGIN
i:=2;
While (tel[i] in ['0'..'9']) and (i<length(tel) do
i:=i+1;
verif :=( length(tel)<>8 ) and (tel[i] in ['0'..'9']) and (tel[1] ='2' );
END;
BEGIN
for i :=1 to n do
begin
writeln('==> Participant n° ',i);
repeat
Write('N°Tel: ');
Readln(Ttel[i]);
Until verif(Ttel[i]);
end;
END;
FUNCTION calculer_score(tel:T_Tel):integer;
VAR i,s,c,e:integer;
BEGIN
s:=0;
for i:=1 to length(tel) do
begin
val(tel[i],c,e);
s:=s+c*i;
end;
calculer_score:=s;
END;

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 5/6


PROCEDURE Remplir_Score(n:integer; Ttel:TABTel ; VAR Tscore:TABScore);
VAR i :integer ;
BEGIN
for i :=1 to n do
Tscore[i]:= calculer_score(Ttel[i]);
END;
PROCEDURE PermutScore(VAR x,y:integer);
VAR aux :integer ;
BEGIN
aux :=x ; x :=y ; y :=aux ;
END;
PROCEDURE PermutTel(VAR x,y:T_Tel);
VAR aux :T_Tel ;
BEGIN
aux :=x ; x :=y ; y :=aux ;
END;
PROCEDURE Trier(n:integer ; VAR Ttel:TABTel; VAR Tscore:TABScore) ;
VAR i :integer ;
echange:boolean;
BEGIN
repeat
echange:=false;
for i:=1 to n-1 do
begin
if Tscore[i]<Tscore[i+1] then
begin
PermutScore(Tscore[i],Tscore[i+1]) ;
PermutTel(Ttel[i],Ttel[i+1]) ;
echange:=true;
end;
end;
n:=n-1;
until not(echange) or (n=1);
END;
PROCEDURE Afficher(n:integer;Ttel:TABTel);
VAR i :integer ;
BEGIN
for i:=1 to n do
writeln(Ttel[i]);
END;
BEGIN
Saisir(N);
Remplir_participant(N, Ttel);
Remplir_Score(n,Ttel,Tscore);
writeln;
Trier(N, Ttel,Tscore);
writeln('============ Résultat du jeu ===============');
Afficher (round(n*0.3),Ttel);
END.

Enseignant : Idoudi Khaled Lycée Secondaire Haffouz Page : 6/6

Vous aimerez peut-être aussi