Informatique Pour Tous page 3/3 PCSI1 2016-2017
Pas très compliqué. Il faut faire une double boucle sur les lignes, puis les éléments d’une ligne, en ne prenant
que les éléments de la diagonale pour ne pas compter 2 fois le même conflit. 8 copies à peu près correctes.
b) Exprimer la complexité de cette fonction en fonction de n.
Résultat classique pour 2 boucles imbriquées. Il FAUT justifier le résultat.
Écrire en Python une fonction
nb_vol_par_niveau_relatif(
nb_vol_par_niveau_relatif(nb_vol_par_niveau_relatif(
nb_vol_par_niveau_relatif(regulation)
regulation)regulation)
regulation)
qui prend en paramètre une
régulation (liste de n entiers) et qui renvoie une liste de 3 entiers
[a, b, c]
[a, b, c] [a, b, c]
[a, b, c]
dans laquelle a est le nombre
de vols à leurs niveaux RFL, b le nombre de vols au-dessus de leurs niveaux RFL et c le nombre de vols
au-dessous de leurs niveaux RFL.
Peu de copies s’essayent à cette question mais avec réussite (6 copies correctes sur 8).
a) Écrire en Python une fonction
cout_regulation(
cout_regulation(cout_regulation(
cout_regulation(regulation)
regulation)regulation)
regulation)
qui prend en paramètre une liste
représentant une régulation et qui renvoie le coût de celle-ci.
Question mal comprise. Il faut commencer par créer la liste des vols avant de calculer le coût de chacun.
b) Évaluer la complexité de cette fonction en fonction de n.
Il y a encore deux boucles imbriquées.
c) Déduire de la question a) une fonction
cout_RFL()
cout_RFL()cout_RFL()
cout_RFL()
qui renvoie le coût de la régulation pour la-
quelle chaque avion vole à son RFL.
pas traitée.
d) Combien existe-t-il de régulations possibles pour n vols ?
3 réponses correctes mais elles ne sont pas justifiées.
e) Est-il envisageable de calculer les coûts de toutes les régulations possibles pour trouver celle de
cout minimal ?
La réponse est souvent affirmée sans justification.
On suppose importées les fonctions suivantes, que l’on pourra utiliser :
exp(x)
exp(x)exp(x)
exp(x)
qui renvoie l’exponentielle de x ;
randint(0,n)
randint(0,n)randint(0,n)
randint(0,n)
qui renvoie un entier tiré au sort dans [0, n] ;
random()
random()random()
random()
qui renvoie un réel tiré au sort dans [0, 1]. Ainsi, un événement qui ne se produit que si
random() <= p
random() <= prandom() <= p
random() <= p
a une probabilité p de se produire.
Écrire en Python une fonction
recuit(
recuit(recuit(
recuit(regulation)
regulation)regulation)
regulation)
qui modifie la liste
regulation
regulationregulation
regulation
passée en paramètre
en appliquant l’algorithme du recuit simulé. On fera débuter l’algorithme avec la valeur T = 1000 et à
chaque étape la valeur de T sera diminuée de 1%. L’algorithme se terminera lorsque T < 1.
Pratiquement pas traitée. C’est évidemment une question difficile. Voir les commentaires dans le corrigé.
Conclusion :
Le sujet était un peu difficile car il demandait de se rappeler ce qui a été fait depuis le début de
l’année. La moitié des copies montre qu’il n’en reste presque rien . Pour ces étudiants, il faut sérieu-
sement se poser la question d’adapter les méthodes d’apprentissage pour ne pas oublier le lende-
main ce qui est appris la veille. C’est indispensable pour une deuxième année profitable.
Il faut bien se rendre compte que les questions de la partie III ne représentent qu’une infime partie
de l’épreuve posée effectivement au concours.
Pour terminer, il faut souligner que, comme dans les autres matières, une réponse non justifiée n’est
pas acceptée. Une réponse commençant par « OUI » ou « NON » non plus.