Algorithmique et programmation
- 1
Exercice 1
FacileOn considère le programme Python suivant :
L = [3, 8, 1, 6, 4] s = 0 for x in L: s = s + x print(s / len(L))- Quelle valeur affiche ce programme ?
- Que représente cette valeur pour la liste
L? - Modifier ce programme pour qu'il affiche la valeur maximale de la liste sans utiliser la fonction
max.
Voir un indice
La boucle
for x in Lparcourt les éléments de la liste. Pour le maximum, initialise une variable avec le premier élément puis compare.Voir la correction
- La somme des éléments est . La liste contient éléments, donc le programme affiche .
- C'est la moyenne des éléments de la liste.
- Un programme possible :
L = [3, 8, 1, 6, 4] m = L[0] for x in L: if x > m: m = x print(m)Ce programme affiche .
- 2
Exercice 2
FacileSoit la liste définie en compréhension :
L = [k*k for k in range(1, 7)].- Écrire cette liste en extension (donner tous ses éléments).
- Écrire, en extension, la liste
M = [2*k+1 for k in range(5)]. - Écrire en compréhension la liste des cubes des entiers de à .
Voir un indice
range(1, 7)produit les entiers (la borne de droite est exclue).range(5)produit .Voir la correction
range(1, 7)donne , donc les carrés : .range(5)donne , donc : .[k**3 for k in range(1, 6)], qui vaut .
- 3
Exercice 3
FacileOn dispose d'une liste
notescontenant les notes d'une classe.- Écrire une instruction qui ajoute la note à la fin de la liste.
- Écrire une instruction qui supprime le premier élément de la liste.
- Écrire une fonction
compte\_reussite(notes)qui renvoie le nombre de notes supérieures ou égales à .
Voir un indice
On ajoute avec
.append(...)et on supprime avecdelou.pop(...). Pour compter, on utilise un compteur initialisé à .Voir la correction
notes.append(15).del notes[0](ounotes.pop(0)).- Une fonction possible :
def compte_reussite(notes): c = 0 for note in notes: if note >= 10: c = c + 1 return cLa variable
ccompte les notes supérieures ou égales à . - 4
Exercice 4
FacileOn considère la suite définie par et .
- Calculer et .
- On souhaite déterminer le plus petit entier tel que . Écrire une fonction Python
seuil()qui renvoie cet entier.
Voir un indice
On calcule les termes successifs dans une boucle
whiletant que la condition n'est pas atteinte, en incrémentant un compteur.Voir la correction
- et .
- La suite converge vers (point fixe de ) en croissant, donc le seuil existe. Programme :
def seuil(): u = 5 n = 0 while u <= 5.9: u = 0.5 * u + 3 n = n + 1 return nOn calcule : , . La fonction renvoie .
- 5
Méthode de Héron pour
MoyenOn veut approcher par la méthode de Héron : on définit la suite et
- Calculer et (valeurs exactes).
- Compléter la fonction Python ci-dessous pour qu'elle renvoie une valeur approchée de à près :
def heron(): x = 2 while abs(x*x - 2) > ...... : x = ...... return xVoir un indice
La condition d'arrêt teste si est assez proche de . Le pas de la boucle applique la formule de récurrence.
Voir la correction
- 6
Résolution par dichotomie
MoyenOn cherche une solution de l'équation avec sur par dichotomie. On admet que est continue et strictement croissante, avec et .
- Justifier que l'équation admet une unique solution dans .
- On donne le programme suivant :
def f(x): return x**3 + x - 1 def dicho(n): a = 0 b = 1 for i in range(n): m = (a + b) / 2 if f(m) < 0: a = m else: b = m return (a + b) / 2Effectuer les deux premières itérations (donner et après chaque tour).
- Après itérations, quelle est la précision (largeur de l'intervalle) obtenue sur ?
Voir un indice
À chaque étape on garde la moitié de l'intervalle où change de signe. La largeur est divisée par à chaque tour.
Voir la correction
- 7
Simulation du lancer de deux dés
MoyenOn simule le lancer de deux dés équilibrés à six faces et on s'intéresse à la somme obtenue. On donne :
from random import randint def simulation(N): L = [] for i in range(N): d1 = randint(1, 6) d2 = randint(1, 6) L.append(d1 + d2) freq = 0 for s in L: if s == 7: freq = freq + 1 return freq / N- Que renvoie la fonction
simulation(N)? - Calculer la probabilité théorique d'obtenir une somme égale à .
- Vers quelle valeur la quantité renvoyée doit-elle se rapprocher lorsque devient grand ? Quel résultat de probabilité le justifie ?
Voir un indice
randint(1, 6)renvoie un entier entre et inclus. Dénombre les couples dont la somme vaut parmi les possibles.Voir la correction
- Que renvoie la fonction
- 8
Exercice 8
DifficileOn calcule les coefficients binomiaux à l'aide du triangle de Pascal, fondé sur la relation
On propose la fonction suivante qui construit la ligne du triangle sous forme de liste :
def ligne_pascal(n): L = [1] for k in range(n): L.append(1) for i in range(len(L) - 2, 0, -1): L[i] = L[i] + L[i-1] return L- Exécuter
ligne\_pascal(4)à la main et donner la liste obtenue. - Expliquer pourquoi la boucle interne parcourt les indices en sens décroissant (de la droite vers la gauche).
- En déduire la valeur de .
Voir un indice
Voir la correction
- Exécuter
- 9
Exercice 9
DifficileOn estime par la méthode de Monte-Carlo. On tire des points au hasard dans le carré et on compte ceux qui tombent dans le quart de disque de centre et de rayon .
from random import random def monte_carlo(N): dedans = 0 for i in range(N): x = random() y = random() if x*x + y*y <= 1: dedans = dedans + 1 return 4 * dedans / N- La fonction
random()renvoie un réel de . Justifier la présence du facteur . - Un point tiré dans le carré tombe dans le quart de disque avec une certaine probabilité . Calculer .
- Expliquer pourquoi
monte\_carlo(N)fournit une estimation de , et indiquer comment améliorer la précision.
Voir un indice
Voir la correction
- La fonction
