Exercices corrigés — Algorithmique — Listes (1ère spé)
✏️ Exercices — Algorithmique : Listes
Thèmes : listes Python • indices • génération en extension / par ajouts / en compréhension • parcours • itération • conditions • fonctions • programmation modulaire • suites • dérivation • simulation.
Objectif : écrire, lire, expliquer et justifier des algorithmes au niveau Première Spécialité Mathématiques.
Exercice 1 — Lire une liste et ses indices
1ère SpéOn considère la liste Python
L = [12, 5, 8, 21, 7].
- (a) Donner le premier élément de
L. - (b) Donner l’élément d’indice 2.
- (c) Donner le dernier élément en utilisant un indice négatif.
- (d) Donner la taille de la liste et préciser les indices valides non négatifs.
Exercice 2 — Modifier, ajouter et supprimer
1ère SpéOn part de L = [4, 9, 3, 6, 9]. Les
opérations des questions (a), (b) et (c) sont exécutées dans cet
ordre sur la même liste.
- (a) Écrire l’instruction qui remplace 3 par 10.
- (b) Ajouter 15 à la fin de la liste.
- (c) Supprimer la première occurrence de 9.
- (d) Donner la liste finale après les trois opérations.
Exercice 3 — Trois façons de générer une liste
1ère SpéOn veut construire la liste des carrés des entiers de 1 à 5.
- (a) Donner cette liste en extension.
- (b) Écrire un programme qui la construit par ajouts
successifs avec
append. - (c) Écrire la même liste en compréhension.
- (d) Expliquer pourquoi les trois écritures produisent la même liste.
Exercice 4 — Parcours direct, test et accumulateur
1ère SpéOn considère L = [-2, 5, 0, 7, -1].
- (a) Dans la boucle
for x in L:, quelles valeurs prend successivementx? - (b) Combien d’éléments de
Lsont strictement positifs ? - (c) Calculer la somme des éléments strictement positifs.
- (d) Écrire un programme qui calcule cette somme sans utiliser
sum.
Exercice 5 — Parcours par indices et modification
1ère SpéOn considère L = [3, 7, 2, 9, 4].
- (a) Donner les indices parcourus par
range(len(L)). - (b) Donner la valeur de
L[3]. - (c) Écrire un programme qui double uniquement les éléments situés à un indice pair.
- (d) Donner la liste obtenue après exécution du programme.
Exercice 6 — Somme, moyenne et programmation modulaire
1ère SpéOn considère L = [7, 11, 9, 13, 10].
- (a) Calculer la somme des éléments.
- (b) En déduire la moyenne.
- (c) Écrire une fonction
somme(L)qui renvoie la somme sans utilisersum. - (d) Écrire une fonction
moyenne(L)qui réutilise la fonctionsomme.
Exercice 7 — Produit d’une liste et factorielle
1ère SpéOn considère L = [1, 2, 3, 4, 5, 6].
- (a) Calculer le produit de tous les éléments de
L. - (b) Pourquoi un accumulateur de produit doit-il être initialisé à 1 et non à 0 ?
- (c) Écrire une fonction
produit(L)sans utiliser de fonction prédéfinie de produit. - (d) Relier le résultat à \(6!\) et
donner une compréhension qui génère la liste
[1,2,3,4,5,6].
Exercice 8 — Minimum, maximum et invariant de parcours
1ère SpéOn considère la liste non vide
L = [-5, 12, 3, 12, -9, 7].
- (a) Donner le minimum et le maximum de
L. - (b) Calculer l’amplitude
maximum - minimum. - (c) Écrire une fonction
extremes(L)qui renvoie la liste[minimum, maximum]sans utiliserminnimax. - (d) Justifier la correction de l’algorithme en formulant ce que
représentent
minietmaxiaprès chaque itération.
Exercice 9 — Recherche de la première occurrence
1ère SpéOn considère L = [4, 7, 2, 7, 9].
- (a) La valeur 7 est-elle présente ?
- (b) Quel est l’indice de sa première occurrence ?
- (c) Écrire une fonction
premier_indice(L, a)qui renvoie le premier indice oùaapparaît, et-1siaest absent. - (d) Donner
premier_indice(L, 6)et expliquer le rôle dureturnplacé dans la boucle.
Exercice 10 — Compter et sommer au-dessus d’un seuil
1ère SpéOn considère L = [5, 12, 17, 9, 21, 6, 14] et le seuil
10.
- (a) Lister les valeurs strictement supérieures à 10.
- (b) Combien y en a-t-il ?
- (c) Calculer leur somme.
- (d) Écrire une fonction
bilan_seuil(L, s)qui renvoie[nombre, somme]des valeurs strictement supérieures às.
Exercice 11 — Filtrer avec une condition logique
1ère SpéOn considère L = [-4, -1, 0, 2, 5, 7, 10]. On veut
conserver les valeurs \(x\) telles que
\(0\le x<7\).
- (a) Donner la liste des valeurs conservées.
- (b) Pourquoi 0 est-il conservé alors que 7 ne l’est pas ?
- (c) Construire la liste
Rpar ajouts successifs. - (d) Écrire la même construction en compréhension.
Exercice 12 — Liste en compréhension et inéquation
1ère SpéOn exécute
L = [n for n in range(-5, 6) if n*n - 4 <= 0].
- (a) Résoudre dans \(\mathbb{R}\) l’inéquation \(n^2-4\le0\).
- (b) En déduire la liste
L. - (c) Expliquer pourquoi -2 et 2 appartiennent à la liste.
- (d) On définit
R = [2*n + 1 for n in L]. DonnerR.
Exercice 13 — Fonction de filtrage réutilisable
1ère SpéOn considère L = [-2, 1, 4, 7, 10, 13].
- (a) Écrire une fonction
dans_intervalle(L, a, b)qui renvoie les éléments deLappartenant à l’intervalle fermé \([a;b]\). - (b) Donner
dans_intervalle(L, 3, 10). - (c) Réécrire le cœur du traitement avec une liste en compréhension.
- (d) Donner
dans_intervalle(L, 0, 5)et expliquer en quoi cette fonction illustre la programmation modulaire.
Exercice 14 — Suite explicite, liste de valeurs et zéros
1ère SpéOn définit \(u_n=n^2-3n+2\) pour \(n\in\mathbb{N}\). On construit les valeurs pour \(n=0,1,\ldots,6\).
- (a) Donner la liste
L = [u_n for n in range(7)]. - (b) Construire la liste
Rdes indicesitels queL[i] == 0. - (c) Factoriser \(u_n\) et expliquer le
lien avec les indices contenus dans
R. - (d) Écrire en Python la compréhension qui construit directement
Rà partir deL.
Exercice 15 — Suite récurrente et recherche d’un seuil
1ère SpéOn définit \(u_0=150\) et, pour tout entier \(n\ge0\), \(u_{n+1}=0{,}8u_n+45\).
- (a) Calculer \(u_1\), \(u_2\) et \(u_3\).
- (b) Donner la liste des cinq premiers termes \([u_0,u_1,u_2,u_3,u_4]\).
- (c) Écrire une boucle
whilequi détermine le plus petit rangntel que \(u_n\ge220\). - (d) Donner ce rang et vérifier le caractère minimal du résultat avec \(u_{n-1}\) et \(u_n\).
Exercice 16 — Fibonacci : variables, boucle et liste
1ère SpéOn veut produire les premiers termes de la suite de Fibonacci avec le programme incomplet suivant :
a = 0
b = 1
L = [a, b]
for k in range(6):
c = ...
a = ...
b = ...
L.append(b)
- (a) Compléter les trois affectations manquantes.
- (b) Donner la liste finale
L. - (c) Quelle est la longueur de
Let pourquoi ? - (d) Vérifier sur la liste obtenue que chaque terme à partir du troisième est la somme des deux précédents.
Exercice 17 — Liste de taux de variation et dérivée
1ère SpéOn considère \(f(x)=x^2\), le point
d’abscisse \(a=1\) et la liste
H = [1, 0.5, 0.1, 0.01]. Pour \(h\ne0\), on définit \(m(h)=\dfrac{f(1+h)-f(1)}{h}\).
- (a) Simplifier exactement \(m(h)\).
- (b) Construire la liste
Mdes valeurs de \(m(h)\) pour les valeurs deH. - (c) Écrire une compréhension Python qui construit
Mdirectement à partir deH. - (d) À quelle valeur les éléments de
Msemblent-ils se rapprocher lorsque \(h\) se rapproche de 0 ? Interpréter cette valeur.
Exercice 18 — Échantillon simulé : moyenne et fréquence
1ère SpéUne simulation fournit l’échantillon
L = [0, 1, 2, 1, 3, 2, 1, 2].
- (a) Donner la taille de l’échantillon et la somme des valeurs.
- (b) Calculer la moyenne de l’échantillon, sous forme exacte puis décimale.
- (c) Calculer la fréquence d’apparition de la valeur 2, sous forme exacte puis décimale.
- (d) Écrire une fonction
moyenne_echantillon(L)qui renvoie la moyenne sans utilisersum.
Exercice 19 — Simulation de Monte-Carlo avec deux listes
1ère SpéOn simule cinq points dans le carré \([-1;1]\times[-1;1]\) à l’aide de deux
listes parallèles : X = [0.2, -0.6, 0.8, 0.1, -0.9] et
Y = [0.3, 0.4, 0.7, -0.8, 0.3]. Un point est dans le disque
unité si \(x^2+y^2\le1\).
- (a) Écrire le test Python qui décide si le point d’indice
iest dans le disque unité. - (b) Combien des cinq points sont dans le disque ?
- (c) L’estimation de \(\pi\) est donnée
par \(p=4\dfrac{c}{5}\), où
cest le nombre de points dans le disque. Calculerp. - (d) Expliquer pourquoi on augmente en pratique le nombre de points simulés lorsqu’on cherche une meilleure estimation.
Exercice 20 — Synthèse : liste, filtre, moyenne et raisonnement
1ère SpéOn construit L = [k*k - 6*k + 10 for k in range(7)] puis
R = [x for x in L if x > 0 and x % 2 == 0].
- (a) Calculer la liste
L. - (b) Calculer la liste
Ret expliquer le rôle des deux conditions reliées parand. - (c) Calculer la moyenne des éléments de
R. - (d) Déterminer le minimum de
L, préciser à quel indice il est atteint, puis justifier ce résultat en écrivant \(k^2-6k+10\) sous forme canonique.
Exercice 21 — Deux modèles de croissance : premier dépassement
1ère SpéDeux quantités évoluent selon \(A_n=5000+120n\) et \(B_n=4200\times1{,}04^n\), pour \(n\in\mathbb{N}\).
- (a) Calculer \(A_9\), \(A_{10}\), \(B_9\) et \(B_{10}\).
- (b) Écrire un programme Python utilisant une boucle
whilepour déterminer le premier rang où \(B_n>A_n\). - (c) Modifier le programme pour mémoriser, dans deux listes
LAetLB, toutes les valeurs calculées jusqu’au dépassement. - (d) Donner le premier rang de dépassement et justifier qu’il est minimal.
Exercice 22 — Suite arithmético-géométrique : seuil de proximité
1ère SpéOn définit \(u_0=0\) et \(u_{n+1}=0{,}6u_n+8\).
- (a) Calculer \(u_1\), \(u_2\) et \(u_3\).
- (b) En posant \(v_n=u_n-20\), montrer que \((v_n)\) est géométrique puis établir \(u_n=20-20\times0{,}6^n\).
- (c) Écrire une boucle qui construit la liste des termes jusqu’au premier rang vérifiant \(|u_n-20|<0{,}05\).
- (d) Déterminer ce rang et vérifier le caractère minimal avec les deux termes consécutifs concernés.
Exercice 23 — Détecter et corriger une donnée incohérente
1ère SpéUne suite de valeurs issue d’un modèle quadratique devrait avoir des secondes différences constantes égales à 4. On reçoit pourtant L = [5, 10, 19, 33, 49, 70].
- (a) Construire la liste
Ddes premières différencesL[i+1]-L[i]. - (b) Construire la liste
Edes secondes différences et expliquer pourquoi les données sont incohérentes. - (c) On sait qu’une seule donnée est fausse et qu’il s’agit de
L[3]. Déterminer sa valeur correcte. - (d) Après correction, déterminer l’expression \(u_n=an^2+bn+c\) qui génère la liste.
Exercice 24 — Moyennes glissantes sur une série de mesures
1ère SpéOn dispose de la série L = [18, 20, 19, 25, 26, 27, 21, 20]. Pour chaque indice possible i, on définit la moyenne glissante d’ordre 3 par \(m_i=\dfrac{L[i]+L[i+1]+L[i+2]}{3}\).
- (a) Combien de moyennes glissantes peut-on calculer ?
- (b) Construire la liste
Mde ces moyennes, sous forme exacte puis décimale au centième. - (c) Déterminer la plus grande moyenne glissante et les trois mesures qui lui correspondent.
- (d) Écrire une fonction
moyennes_glissantes(L)qui renvoie la listeM.
Exercice 25 — Produit scalaire : filtrer des points
1ère SpéDans un repère orthonormé, on donne \(A(1;2)\), \(B(5;-1)\) et la liste de points C = [[4,6], [-2,-2], [7,7], [10,14]].
- (a) Calculer les coordonnées du vecteur \(\overrightarrow{AB}\).
- (b) Construire la liste des produits scalaires \(\overrightarrow{AB}\cdot\overrightarrow{AC_i}\) pour les quatre points.
- (c) En déduire les points \(C_i\) pour lesquels le triangle \(ABC_i\) est rectangle en \(A\).
- (d) Déterminer une équation cartésienne de la droite contenant tous ces points et passant par \(A\).
Exercice 26 — Probabilité exacte par énumération des issues
1ère SpéOn lance deux dés équilibrés à six faces. On représente une issue par une liste [a,b], où a et b sont les résultats des deux dés.
- (a) Que contient
issues = [[a,b] for a in range(1,7) for b in range(1,7)]et quelle est sa longueur ? - (b) Construire la liste
favdes issues pour lesquelles la somme des deux dés est supérieure ou égale à 10, puis donner sa longueur. - (c) En déduire la probabilité de l’événement \(S\) : « la somme est au moins 10 ».
- (d) Sachant que \(S\) est réalisé, calculer la probabilité d’obtenir un double.
Exercice 27 — Optimisation discrète et dérivée
1ère SpéPour un entier \(x\) compris entre 0 et 60, un bénéfice est modélisé par \(B(x)=-2x^2+120x-1000\).
- (a) Écrire une compréhension Python qui construit la liste
Pdes bénéfices pourxallant de 0 à 60. - (b) Écrire un algorithme, sans utiliser
maxniindex, qui renvoie le bénéfice maximal et la valeur dexcorrespondante. - (c) Donner le résultat de l’algorithme et vérifier les valeurs pour \(x=29,30,31\).
- (d) Retrouver et justifier ce maximum par l’étude de la dérivée de \(B\) sur \([0;60]\).
Exercice 28 — Probabilité conditionnelle à partir de deux listes
1ère SpéSur 20 individus, on code par 1 la réalisation d’un événement et par 0 son absence. La liste M = [1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0] code l’événement « malade » et T = [1,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0,1,0,1,0] code l’événement « test positif ».
- (a) Déterminer les effectifs de \(M\), de \(T\) et de \(M\cap T\).
- (b) En déduire \(P(M)\) et \(P(T)\) dans cet échantillon.
- (c) Calculer \(P_T(M)\) et \(P_M(T)\).
- (d) Écrire une fonction
proba_conditionnelle(A, B)qui renvoie la fréquence deA==1parmi les positions oùB==1.
Exercice 29 — Intersection droite-cercle par compréhension
1ère SpéOn cherche les points à coordonnées entières qui appartiennent simultanément à la droite \(y=x+1\) et au cercle \(x^2+y^2=25\).
- (a) En remplaçant \(y\) par \(x+1\), résoudre l’équation obtenue.
- (b) Donner les deux points d’intersection.
- (c) Écrire une compréhension Python qui construit directement la liste de ces points pour
xentier de -5 à 5. - (d) Vérifier par le calcul que les deux points obtenus satisfont bien les deux équations.
Exercice 30 — Synthèse : capital soumis à des taux variables
1ère SpéUn capital initial de 10 000 € subit successivement les taux annuels taux = [3, -2, 5, 4, -1, 6], exprimés en pourcentage. Après un taux \(t\), le capital est multiplié par \(1+\dfrac{t}{100}\).
- (a) Écrire une fonction
capitaux(C0, taux)qui renvoie la liste contenant le capital initial puis le capital après chacune des six années. - (b) Calculer les sept capitaux, arrondis au centime pour la présentation.
- (c) Construire la liste des gains algébriques annuels et déterminer l’année du gain le plus élevé.
- (d) Calculer le taux d’évolution global sur les six années et expliquer pourquoi il n’est pas égal à la somme des six taux annuels.