Vous êtes sur la page 1sur 4

Samir ANTER Page 1

Centre des classes prparatoires Anne 2013-2014


SALMANE EL FARISSI Deuxime trimestre
SALE Samir ANTER
Devoir surveill en Informatique
Dur : 2h
N. B. : La qualit de la rdaction, la clart et la prcision des raisonnements entreront pour une part importante
dans lapprciation des copies.
Le but de cet exercice est de grer les appels (reus, mis et manqus) des clients dun
oprateur tlphonique. Ces appels sont stocks dans une matrice (M) n lignes (n est le
nombre dappels enregistrs). Chaque ligne de la matrice contient les informations relatives
un appel donn. Il sagit du numro de tlphone (appel ou appelant) reprsent par dix
caractres (premire colonne), la dur dappel en minutes (deuxime colonne) et le type de
lappel (-1 si reu, 1 si mis et 0 si manqu) (troisime colonne) en plus de lheure (cinq
caractres) et la date (dix caractres) stocks respectivement dans la quatrime et la cinquime
colonne.
Un exemple de la matrice des appels (M) est reprsente ci-dessous :
0654342310 5 -1 00h23 31/03/2014
0660324524 0 0 15h10 30/03/2014
0660324524 50 1 15h10 15/03/2014
0660324524 10 1 15h10 22/03/2014
0846394503 60 -1 19h03 01/02/2014
0654394503 13 -1 05h40 04/02/2014
Une matrice en python est, en fait, un tableau de tableaux. Or comme nous lavons
mentionn dans le cours, les tableaux (comme nous les avons dfinies) peuvent contenir des
donnes de nature diffrentes (entier, chaine de caractres, etc). Ainsi, la matrice M peut tre
dfinie comme suit :
M=[['0654342310',5,-1,'10h23','31/05/2012'],['0660324524',15,0,'11h10','30/05/2012'],
['0846394503',60,-1,'09h03','01/06/2012'],['0654394503',13,1,'09h40','01/06/2012']]
Le numro du tlphone du premier appel est ainsi M[0][0]. La dure du troisime
appel est M[2][1], etc.
Rappel sur les chaines de caractres :
Les chanes de caractres sont reprsentes en Python par les types str. Pour affecter
une chaine de caractre une variable, il suffit dcrire S='BONJOUR'. Cette chaine peut, en


Samir ANTER Page 2

fait, tre considre comme un tableau de caractres (non modifiable), o chacune de ses
cases contient un seul caractre. Ainsi, elle peut tre schmatise comme suit :
B O N J O U R
Ceci implique que le premier caractre de S est exprime par S[0], le deuxime par S[1]
et le dernier par S[len(S)-1] o len est une fonction prdfinie qui calcule la langueur de la
chaine passe en paramtre.
Les oprateurs de comparaison ==, != , < , > , <= et >= peuvent tre
galement appliqus sur les chaines de caractres. Ainsi les expressions 06>=00,
09>08, 05<08 et 0654342310== 0654342310 valent True.
N.B : Il est noter que les fonctions demandes dans les exercices peuvent tre
utilises par la suite mme si vous navez pas pu les dfinir.
Q.1. (2pts) Ecrire une fonction dentte sousChaine(S, d, f) permettant de retourner la sous-
chaine de S contenant les caractres de S se trouvant entre la position d et f.
Exemple :
Si S=0654342310, alors lappel suivant sousChaine(S, 2, 5) retournera la
chaine 5434.
Q.2. Vu que certains clients sont drangs par certains numros qui les appellent entre minuit
et 8h (inclues), on envisage dfinir, pour chaque client, une liste noire qui contiendra
tous les numros qui ont appel au moins une fois dans cette priode. Il est clair quun
numro ne doit pas apparaitre plus quune fois dans la liste noire. Ainsi, il faut, avant de
linsrer, vrifier sil ny figure pas dj.
Exemple :
Dans lexemple ci-dessus, les numros 0654342310 et 0654394503 devront
apparaitre dans la liste noire.
Q.6.a. (2pts) Ecrivez une fonction dentte appartient(num, liste) qui retourne True si
le numro num figure dans le tableau liste et False sinon.
Q.6.b. (3pts) Ecrivez, ensuite, une fonction dentte listeNoire(M) qui retourne un
tableau contenant ces numros.
Q.3. (3pts) Pour une tude statistique, nous voulons dfinir pour chaque client les numros
quil a appel ou qui lont appel. Pour ce faire, on vous demande dcrire une fonction


Samir ANTER Page 3

dentte numeros(M) qui retourne un tableau contenant tous ces numros lexception
des numros publicitaires (les numros publicitaires commencent par 08).
Attention : Un numro ne doit pas apparaitre plus quune fois.
Q.4. (4pts) Dans une deuxime tape, on souhaite crer, pour chaque client, une matrice qui
contiendra la dur totale des appels reu de chaque numro, la dur totale des appels
effectus vers chaque numro et galement le nombre dappels manqus pour chaque
numro ( lexception des numros publicitaires). Pour ce faire, crivez une fonction
dentte statistique(M) qui retourne une matrice de quatre colonnes et n lignes (n et le
nombre de numros appelant, appel ou manqu). La premire colonne de la matrice
contiendra les numros du tlphone, la deuxime, la durs des appels reus de ce
numro, la troisime, la durs des appels vers ce numro et la quatrime, le nombre des
appels manqus.
Exemple :
Soit la matrice (M) des appels ci-dessous:
0654342310 5 -1 17h23 08/03/2014
0654342310 3 1 09h23 27/03/2014
0654342310 9 -1 10h23 04/03/2014
0654342310 0 0 09h23 19/03/2014
0654342310 4 1 14h23 17/03/2014
0660324524 0 0 11h10 01/03/2014
0660324524 46 1 15h10 30/03/2014
0660324524 0 0 16h10 25/03/2014
0846394503 60 -1 19h03 22/03/2014
0654394507 13 1 05h40 04/03/2014
Lappel de la fonction statistique retournera la matrice suivante :
0654342310 14 7 1
0660324524 0 46 2
0654394507 0 13 0
Q.5. (2pts) Pour des contraintes mmoire, il nest pas raisonnable de garder tous les appels.
Pour cette raison, on envisage supprimer tous les appels publicitaires ou de plus de deux
semaines. Pour des raisons de simplification, on suppose que tous les appels ont taient
effectus le mois 03/2014 et la date daujourdhui est 29/03/2014. Ecrivez une fonction
dentte nettoyage(M) qui met zro toutes les lignes contenant ces numros.
Lappel de cette fonction sur la matrice M suivante :


Samir ANTER Page 4

0654342310 5 -1 17h23 08/03/2014
0654342310 3 1 09h23 27/03/2014
0654342310 9 -1 10h23 04/03/2014
0654342310 0 0 09h23 19/03/2014
0654342310 4 1 14h23 17/03/2014
0660324524 0 0 11h10 01/03/2014
0660324524 46 1 15h10 30/03/2014
0660324524 0 0 16h10 25/03/2014
0846394503 60 -1 19h03 22/03/2014
0654394507 13 1 05h40 04/03/2014
Rendra M ainsi :
0 0 0 0 0
0654342310 3 1 09h23 27/03/2014
0 0 0 0 0
0654342310 0 0 09h23 19/03/2014
0654342310 4 1 14h23 17/03/2014
0 0 0 0 0
0660324524 46 1 15h10 30/03/2014
0660324524 0 0 16h10 25/03/2014
0 0 0 0 0
0 0 0 0 0
Q.6. La matrice obtenue dans cette tape contient des lignes nulles au milieu. Ainsi, on
souhaite dplacer ces lignes nulles la fin de la matrice. Pour simplifier, on suppose que
deux lignes successives ne peuvent pas tre nulles. Pour ce faire nous allons dfinir les
fonctions suivantes :
Q.6.a. (1,5pts) Ecrivez une fonction dentte echanger(M, i, j) qui permet dchanger
la ligne i avec la ligne j.
Q.6.b. (2,5pts) Ecrivez une fonction dentte tasser(M)q ui permet de dplacer toutes
les lignes nulles la fin de la matrice.
0 0 0 0 0
0654342310 3 1 09h23 27/03/2014
0 0 0 0 0
0654342310 0 0 09h23 12/03/2014
0654342310 4 1 14h23 17/03/2014
0 0 0 0 0
0660324524 46 1 15h10 30/03/2014
0660324524 25 0 16h10 25/03/2014
0 0 0 0 0
0 0 0 0 0
0654342310 3 1 09h23 27/03/2014
0654342310 0 0 09h23 12/03/2014
0654342310 4 1 14h23 17/03/2014
0660324524 46 1 15h10 30/03/2014
0660324524 25 0 16h10 25/03/2014
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Avant lappel de la fonction Aprs lappel de la fonction

Vous aimerez peut-être aussi