ISBS B1-ST01 Contrôle de programmation 2014-2015
3 Simulation (6 points)
Une population est divisée en éléments pouvant chacun avoir une position parmi deux sur
une question (êtes vous de gauche ou de droite ? êtes vous pour la légalisation du camembert au
lait cru ? etc.)
Un individu peut convaincre un autre individu et le faire adhérer à sa position.
Pour une simulation informatique, on prendra lst une liste de néléments valant 0ou 1.
3.1 Programmes utilitaires (2 points)
Le module python random (utilisable avec l’instruction import random) fournit entre autres
la fonction random.randrange(a) fournissant un nombre entier pseudo-aléatoire compris entre 0
(inclus) et a (exclus).
Écrire une fonction militant(lst) qui retourne un nombre aléatoire pouvant être un indice
de lst.
Écrire une fonction voisin(k, lst) qui retourne aléatoirement le numéro d’un des deux
voisins de kdans lst. On distinguera les cas où kest à une des deux extrémités de la liste (pas
de choix pour le voisin) et ceux où kest à l’intérieur (deux voisins possibles).
3.2 Un modificateur d’opinion (2 points)
Écrire la fonction modif(lst) qui modifie une liste lst selon le principe suivant :
– on choisit un militant dans la liste ;
– ce militant convainc un de ses deux voisins (au hasard s’il n’est pas en extrémité de liste)
d’adhérer à sa position.
Ainsi, à partie de la liste
[0,1,0,0,1]
si l’élément militant est l’élément no3(d’opinion 0) et que son voisin (choisi au hasard) est
l’élément no4, celui-ci prend l’opinion 0(s’il avait déjà eu l’opinion 0, il n’en aurait pas changé),
ce qui donnera la liste :
[0,1,0,0,0]
3.3 Le simulateur (2 points)
On peut montrer qu’au bout d’un temps fini, toute la population simulée aura la même
opinion.
Écrire une fonction simule(n) qui étant donné un nombre n, génère une liste aléatoire lst de
nopinions (0ou 1), puis applique à cette liste la fonction modif(lst) tant que les éléments de
la liste n’ont pas tous la même valeur, et enfin retourne le nombre d’appels à modif(lst).
— Fin de l’énoncé —
–3/3–