Vous êtes sur la page 1sur 3

ENSA de Safi 2017/2018 3GI : Algorithmique avancée

DS N°1
Les candidats sont informés que le soin apporté à la rédaction et à la présentation des copies
seront des éléments pris en compte dans la notation.
Remarques générales:
 L'épreuve se compose de deux problèmes indépendants,
 Le candidat doit mentionner le langage adopté (Algorithmique, C ou Python) à
l’entête de la première page de sa copie.
 Les questions non traitées peuvent être admises pour aborder les questions ultérieures.

Problème I

On se propose d’écrire un programme qui permet de convertir un entier positif en base


décimale (base 10) en octal (base 8). Pour ce faire vous êtes amenés à créer les fonctions
suivantes :
1. Ecrire une fonction d’entête : puiss8 ( i ) qui permet de retourner 8i
(8 puissance i)

La conversion d’un nombre décimal en octal est obtenu par la récupération des restes des
divisions successive du nombre par 8.
Exemple :
(289)10=( ? )8

289 8

Coefficient d’ordre 0 = 1 36 8

Coefficient d’ordre 1 = 4 4 8

Coefficient d’ordre 2= 4 0 8

Coefficient d’ordre 3= 0 0

Ainsi : (289)10=( 0441)8

2. Ecrire une fonction d’entête : def coeff8 (m , i) : qui retourne le ième


coefficient du nombre m en base 8 et
 déterminer sa complexité
Exemples :
- L’appel de la fonction coeff8 (289 , 0) retourne 1
- L’appel de la fonction coeff8 (289 , 2) retourne 4

3. Ecrire une fonction d’entête : conversion (m ) (m est supposé 0<=m<84 ) qui


retourne la valeur de m en octal sous forme d’une liste de ses coefficients, en
appelant la fonction coeff8 ( ).
 déterminer sa complexité

Pr A.CHOUKRI Page 1
ENSA de Safi 2017/2018 3GI : Algorithmique avancée

NB : Un nombre convertis en octal par notre application est formés, nécessairement,


de 4 chiffres.
Exemples :
 La décomposition de m= 289 en octal est [0,4,4,1]
 La décomposition de m= 13 en octal est [0,0,1,5]
 La décomposition de m= 4095 (m=84 -1) en octal est [7,7,7,7]

4. Ecrire une fonction récursive d'entête Base10( a ) : qui retourne la valeur


décimale d'un nombre octal passée en argument sous forme d’une liste :
 Déterminer sa complexité

Exemple :
>>> base10 ( [0,4,2,1] )
289

Rappel :
(an…..a1a0)8= (a0* 80 + a1* 81 +…..+ an* 8n)10

Problème II
On se propose de créer une application permettant d’analyser les notes des N étudiants de la 3GI en ce
devoir surveillé. Une telle analyse nécessite le calcul d’un ensemble d’indicateurs tel que la note
maximale, la note minimale, la moyenne de la classe, médiane …
Les notes sont enregistrées dans une liste nommée Note
Les étudiants sont identifiés par leurs numéros d’ordre.
Exemple : N=9
0 1 2 3 4 5 6 7 8
Note 12 3 14 0 14 14 20 0 6
Où Note[i] représente la note de l'étudiant i.

1) Ecrire la fonction Moy(Note) : qui retourne la moyenne de la classe.


2) L’écart type est une mesure de la dispersion statistique d’un ensemble de valeurs autour d’une
1 n
valeur moyenne. Ecart type=  (notei  moyenne) 2
n i 1
n : Nombre de notes
moyenne : Moyenne de notes
 Ecrire la fonction EcartType(Note) : qui calcule et retourne l’écart type de l’ensemble
des notes obtenues par les étudiants.
 Déterminer sa complexité

3) A présent, on cherche à attribuer à chaque étudiant son classement. Pour ce faire on aura
besoin d’une autre liste nommée occuNote de 21 cellules (0 à 20). La liste occuNote
contiendra l’occurrence (Nombre d’apparition) de chaque valeur (note) de la liste Note :
occuNote[i] : contiendra l’occurrence de la valeur i dans la liste Note
Exemple : A partir de l’exemple ci-dessus de la liste Note, on obtiendra la liste occuNote
suivante :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
occuNote 2 0 0 1 0 0 1 0 0 0 0 0 1 0 3 0 0 0 0 0 1

a. Ecrire la fonction calculOccNote (Note) : qui prend en paramètre la liste Note, crée ,
et retourne la liste occuNote correspondante.

Pr A.CHOUKRI Page 2
ENSA de Safi 2017/2018 3GI : Algorithmique avancée

b. On calcule ensuite à partir de la liste occuNote, une troisième liste qu’on nommera
Place. Chaque case i de Place contiendra le nombre de notes supérieures ou égales à i.

Exemple : A partir de la liste occuNote ci-dessus, on obtiendra la liste Place suivante :


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Place 9 7 7 7 6 6 6 5 5 5 5 5 5 4 4 1 1 1 1 1 1

c. A partir de Note, occuNote et Place, on établit finalement le classement de chaque


étudiant dans une Quatrième liste qu’on nommera classFinal :

Pour classer l’étudiant i :


 On cherche la note de l’étudiant i : t=Note[i]
 Puis, on cherche l’occurrence de cette note : occuNote[t]
 Puis, on cherche le nombre de notes supérieure ou égale à Note[i] : Place[t]
 le classement final de l’étudiant i est : Place[t] - occuNote[t]+1

Exemple 1: Pour trouver le classement de l’étudiant i=4 :


 On cherche la note de l’étudiant i=4 : Note[4]=14
 Puis, on cherche l’occurrence de cette note : occuNote[14]=3
 Puis, on cherche le nombre de notes supérieures ou égales à Note[4] :
Place[14]=4
 le classement final de l’étudiant 4 est donc : Place[14] - occuNote[14]+1=2

Exemple 2: A partir des listes Note, occuNote et Place ci-dessus, on obtiendra la liste
classFinal suivante :
0 1 2 3 4 5 6 7 8
classFinal 5 7 2 8 2 2 1 8 6

classFinal [ i ] : Classement de l’étudiant i

 Ecrire la fonction Classement (Note, occuNote, Place) : qui crée et retourne


la liste classFinal correspondante et déterminer sa complexité

4) La médiane d’un ensemble de valeurs est la valeur m telle que le nombre de valeurs
supérieures ou égales à m équivaut le nombre de valeurs inférieures ou égales à m.
Pour déterminer la médiane d’une liste, il suffit d'ordonner ses valeurs et localiser la valeur
située au centre. (Pour un tableau de taille paire, la fonction retourne la moyenne des deux
valeurs situées au centre).
Ecrire la fonction Mediane(Note) : qui prend en paramètre la liste Note et qui retourne sa
médiane.
5) Ecrire une fonction récursive affEnv(Note) : qui affiche à l’envers les éléments de la liste
Note (du dernier au premier).

Pr A.CHOUKRI Page 3