Concours Avenir 2024 - 2025 - sujet 4 mai 2024 - questions 9

Hans Amble - Maths au Lycée
10 abonnés
4 Vues de vidéo·24 déc. 2024
Bonjour à tous, aujourd'hui concours à venir, question numéro 9, c'est le sujet 2024 pour les terminales spécialités.
On est sur un programme en Python, la question est assez piégeante.
Donc ici l'algorithme, voici on va vraiment le décrypter, il y a 4 propositions,
on va appliquer donc faire tourner l'algorithme pour une valeur de grand N égale à 11,
et on vous demande que renvoie le programme.
Il y a 4 propositions, il s'agit d'un programme ici avec une boucle simple,
là on a un for, ici avec un range 1, N plus 1,
ici un calcul de termes successifs, et on renvoie justement la valeur de ce terme.
Quand on a ce genre de question, d'abord il faut regarder les 4 propositions, en quoi elles diffèrent.
Vous avez déjà à chaque fois u0 égale 4,
ce n'est pas là que va résider la différence.
Vous voyez bien que dans l'algorithme, on commence par mettre u égale 4,
ça veut dire que là, on va stocker dans la variable u, la valeur de u0.
Et donc le programme, on le devine tout de suite, va calculer les termes successifs de cette suite.
Il s'agit justement de trouver quelle est la suite, quelle est la récurrence qui définit cette suite,
quelle est la relation de récurrence qui va définir cette suite.
Il y a vraiment des choses à dire, tout d'abord sur le range,
parce qu'il y a des petites différences dans la question entre le mot indice 11 et onzième terme.
À chaque fois, vous avez soit terme d'indice 11 ou onzième terme, donc j'expliquerai la différence.
Et ensuite, il faut bien comprendre ici, que ça c'est très piégeant ce i.
Donc on va faire tourner le programme pour les premières valeurs de i.
Il faut comprendre que quand vous regardez les propositions, là il y a marqué –u plus 2 fois u plus 3,
on est tenté évidemment de répondre u n plus 1 égale –u n plus 2 n plus 3.
Il faudra faire la différence entre les termes et les indices,
mais vous voyez qu'on a envie de répondre ça, alors je vous le dis tout de suite, ça n'est pas la bonne réponse.
La bonne réponse, c'est la réponse b.
Donc si vous n'aviez pas trouvé b, écoutez bien les explications.
Tout d'abord, le range.
Alors vous avez un range ici 1, alors je vais prendre n égale 11, comme il est demandé dans le texte.
On met n égale 11 en entrée, donc ça veut dire qu'ici j'aurais 11 plus 1, 12, donc j'ai un range 1 à 12.
Ça veut dire que i prend les valeurs de 1 à 11, d'accord ?
C'est-à-dire que quand on met range 1 à 12, ça va de 1 à 11.
Ça veut dire que vous aurez ici, donc si vous comptez 11 boucles,
dans la première boucle il vaudra 1, dans la deuxième boucle il vaudra 2, etc.
Regardez ce qui se passe dans ce programme.
Au départ, on a donc u qui est égal à 4.
Ça, si on l'interprète, c'est u0 égale 4.
Maintenant on va calculer le deuxième terme de cette suite.
Ça c'est le premier terme, ce qu'on appelle le terme d'indice 0.
U0, l'indice, c'est le rang, c'est le 0 ici qui est écrit en dessous, dans position 1 d'indice.
Donc terme d'indice, l'indice c'est la position ici en bas à droite, donc ça c'est le terme d'indice 0.
Mais c'est le premier terme.
Ça veut dire que maintenant on va calculer le deuxième terme.
Donc première boucle, boucle numéro 1.
On a 11 boucles à faire dans la première boucle.
Donc i vaut 1.
Ça veut dire que quand on calcule, on va calculer moins u plus 2 fois i plus 3.
Ça veut dire qu'on va calculer moins u plus 2 fois 1 plus 3.
En termes de suite, ça fait u1 égale moins u0, parce que u c'est u, plus 2 fois...
Alors ici attention, là on a 1.
Là vous êtes ici pour n égale 0, donc ça veut dire que là on n'a pas 0, on a 1.
C'est à dire, ici attention, si j'appelle n égale 0, ici j'ai donc n plus 1.
Et ici vous voyez j'aurai n égale 1.
Et donc mon programme va calculer u.
Maintenant deuxième boucle, boucle 2.
Donc i vaudra 2.
Je calcule toujours moins u.
Par contre plus 2 fois 2 plus 3.
Donc en termes de récurrence, ça fait u2 égale moins u1 plus 2 fois...
Vous voyez ici là, j'appelle ça n, donc n vaut 2.
Ici n vaut 1.
Et ici j'aurai 1 de plus que n.
Donc encore une fois, j'aurai ici 1 plus 1 plus 3.
J'ai oublié ici d'écrire le plus 3.
Donc maintenant, vous avez bien compris, on se boucle.
Ça veut dire qu'à la fin, on va avoir calculé u11.
Donc déjà, à la fin, on aura u11.
Et u11, c'est le terme d'indice 11.
Ça n'est pas le 11e terme.
U11, c'est en fait le 12e terme.
Donc première chose, on calcule le terme d'indice 11.
Ça veut dire qu'on peut rayer 11e terme, 11e terme.
En fait ce programme, on part de u0 égale 4.
On fait 11 boucles, donc on calcule 11 termes de plus que u0.
En fait, si on doit compter, c'est le 12e terme.
Le terme d'indice 11.
Donc ça nous élimine déjà le rail B.
Alors maintenant, la relation de récurrence générale.
On a donc un plus 1.
Quand vous voulez calculer un terme,
vous prenez le précédent fois moins 1, donc moins un,
plus 2 fois i.
On a vu que i est en décalage par rapport au n qui est ici.
Donc c'est 2 fois n plus 1 plus 3.
Ça c'est le problème quand vous commencez un raisonnement.
Quand vous utilisez une boucle avec ici un range en 1.
Si vous voulez, par ce problème, il faut plutôt commencer un range en 0.
Donc ça, ça veut dire qu'on a un petit décalage.
Et si vous développez, ça fait moins un plus 2n plus 2 plus 3 plus 2n plus 5.
Et donc, c'est le résultat ici de la B
qu'il faut choisir, moins un plus 2n plus 5.
Pour avoir le résultat de la A, il aurait fallu changer
et mettre plutôt, pour avoir la A,
il aurait fallu mettre un range 0,
grand n dans ce cas-là, i commençait à 0.
Et là, vous auriez eu une suite qui était du n plus 1,
également moins un plus 2n plus 3.
Il n'y a pas besoin de décaler ce i qui aurait commencé alors à 0.
Alors que nous, dans notre raisonnement,
la première boucle fait commencer le i1.
Donc vous voyez, c'est une question très difficile.
Alors pour ceux que ça intéresse,
ça donne ceci sur un petit logiciel de Python,
c'est Tony, th4 2ny,
c'est celui que j'utilise parce qu'il est très compact.
Ici, j'ai rajouté des petites lignes pour afficher les termes.
Donc ici, je vais mettre,
on a algorithme mystère 11.
Donc ici, je mets ceci.
J'ai rajouté deux lignes pour des affichages.
Je fais tourner le programme.
Et ça donne ceci.
Vous voyez, u0 vaut 4, u1 vaut 1, etc.
Et si je fais tourner de 1 à...
1 à 11, 11 boucles.
Donc si je fais un range 1 à 12,
vous voyez que j'ai fait de u0 jusqu'à u11.
Un u0 était donné à la première ligne,
et après ça, c'est la première boucle qui me donne u1,
la deuxième, etc.
Petite coïncidence d'ailleurs,
pour ceux qui avaient programmé ça sur leur calculatrice.
Alors pour le concours, on n'a pas la machine,
mais si vous testez, en fait, u11 est égal à 11.
Donc cette question est terminée.
J'insiste, c'est vraiment une question piège.
Je pense que beaucoup d'élèves ont dû tomber dans le piège
parce que ce n'est pas toujours les jours
qu'on fait non plus du Python,
quand on est enterré en ASP Math,
on n'a pas toujours le temps d'aller dans les salles.
Il n'y aura pas toujours des salles qui peuvent accueillir
les 35 ou 36 ou 30 ou plus élèves.
Donc je vous souhaite une bonne fin de journée à tous,
et à bientôt pour d'autres
corrigés de ce concours à venir,
qui vraiment prépare bien pour le bac.
C'est assez sympa comme exercice à travailler,
donc je vous encourage vraiment
si vous avez un petit peu de temps pour réviser,
ça évite de se lancer dans des gros sujets,
mais ça permet quand même d'avoir une réflexion sur le programme.
