Exercices TD Gestion des appels téléphoniques
Télécharger PDFGestion des appels téléphoniques
Le but de cet exercice est de gérer les appels (reçus, émis et manqués) des clients d’un opérateur téléphonique. Ces appels sont stockés dans une matrice (M) à n lignes (n est le nombre d’appels enregistrés). Chaque ligne de la matrice contient les informations relatives à un appel donné. Il s’agit du numéro de téléphone (appelé ou appelant) représenté par dix caractères (première colonne), la durée d’appel en minutes (deuxième colonne) et le type de l’appel (-1 si reçu, 1 si émis et 0 si manqué) (troisième colonne) en plus de l’heure (cinq caractères) et la date (dix caractères) stockés respectivement dans la quatrième et la cinquième colonne.
Exemple de la matrice des appels (M)
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
Définition de la matrice en Python
Une matrice en Python est, en fait, un tableau de tableaux. La matrice M peut être définie 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']]
Rappel sur les chaînes de caractères
Les chaînes de caractères sont représentées en Python par les types str. Pour affecter une chaîne de caractère à une variable, il suffit d’écrire S='BONJOUR'. Cette chaîne peut, en fait, être considérée comme un tableau de caractères (non modifiable), où chacune de ses cases contient un seul caractère.
Exercices
Les fonctions demandées dans les exercices peuvent être utilisées par la suite même si vous n’avez pas pu les définir.
Q.1. (2pts) Ecrire une fonction d’entête sousChaine(S, d, f) permettant de retourner la sous chaine de S contenant les caractères de S se trouvant entre la position d et f.
Exemple : Si S='0654342310', alors l’appel suivant sousChaine(S, 2, 5) retournera la chaîne ‘5434’.
Q.2. Définir une liste noire pour chaque client
Vu que certains clients sont dérangés par certains numéros qui les appellent entre minuit et 8h (inclues), on envisage définir, pour chaque client, une liste noire qui contiendra tous les numéros qui ont appelé au moins une fois dans cette période.
Q.6.a. (2pts) Ecrivez une fonction d’entête appartient(num, liste) qui retourne True si le numéro num figure dans le tableau liste et False sinon.
Q.6.b. (3pts) Ecrivez, ensuite, une fonction d’entête listeNoire(M) qui retourne un tableau contenant ces numéros.
Q.3. (3pts) Pour une étude statistique, nous voulons définir pour chaque client les numéros qu’il a appelé ou qui l’ont appelé.
Pour ce faire, on vous demande d’écrire une fonction d’entête numeros(M) qui retourne un tableau contenant tous ces numéros à l’exception des numéros publicitaires (les numéros publicitaires commencent par ‘08’). Attention : Un numéro ne doit pas apparaitre plus qu’une fois.
Q.4. (4pts) Dans une deuxième étape, on souhaite créer, pour chaque client, une matrice qui contiendra la durée totale des appels reçu de chaque numéro, la durée totale des appels effectués vers chaque numéro et également le nombre d’appels manqués pour chaque numéro (à l’exception des numéros publicitaires).
Pour ce faire, écrivez une fonction d’entête statistique(M) qui retourne une matrice de quatre colonnes et n lignes (n est le nombre de numéros appelant, appelé ou manqué). La première colonne de la matrice contiendra les numéros du téléphone, la deuxième, la durée des appels reçus de ce numéro, la troisième, la durée des appels vers ce numéro et la quatrième, le nombre des appels manqués.
Q.5. (2pts) Pour des contraintes mémoire, il n’est 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 effectués le mois 03/2014 et la date d’aujourd’hui est 29/03/2014. Ecrivez une fonction d’entête nettoyage(M) qui met à zéro toutes les lignes contenant ces numéros.
Q.6. La matrice obtenue dans cette étape contient des lignes nulles au milieu. Ainsi, on souhaite déplacer 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 définir les fonctions suivantes :
Q.6.a. (1,5pts) Ecrivez une fonction d’entête echanger(M, i, j) qui permet d’échanger la ligne i avec la ligne j.
Q.6.b. (2,5pts) Ecrivez une fonction d’entête tasser(M) qui permet de déplacer toutes les lignes nulles à la fin de la matrice.
FAQ
Q1: Comment définir une matrice en Python?
Une matrice en Python est un tableau de tableaux. Par exemple, une matrice M peut être définie 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']].
Q2: Comment extraire une sous-chaîne d'une chaîne de caractères en Python?
Pour extraire une sous-chaîne d'une chaîne de caractères en Python, vous pouvez utiliser la fonction sousChaine(S, d, f) qui retourne la sous-chaîne de S contenant les caractères de S se trouvant entre la position d et f. Par exemple, si S='0654342310', alors l’appel suivant sousChaine(S, 2, 5) retournera la chaîne ‘5434’.
Q3: Comment gérer les appels publicitaires et les appels de plus de deux semaines?
Pour gérer les appels publicitaires et les appels de plus de deux semaines, vous pouvez utiliser la fonction nettoyage(M) qui met à zéro toutes les lignes contenant ces numéros. Par exemple, si la date d’aujourd’hui est 29/03/2014, tous les appels de plus de deux semaines seront supprimés.