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