Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 10-03-2019 11:49:33
- selena09
- Membre
- Inscription : 10-03-2019
- Messages : 1
Exercices Maths langage Python
Bonjour à tous , je suis arrivée à une question de mon exercice ou je ne comprend plus voici la question :
Proposer un algorithme en langage Python permettant de calculer pour tout n ∈ N\{0} la somme suivante :
S= 1 + 1/2 + ··· + 1/i + ··· + 1/n
Quelle est la valeur du plus petit entier n telle que S ≥ mois + jour de votre naissance ? Avec Janvier = 1 · · · Décembre = 12.
Alors le premier problème c'est que je comprend pas la question qu'est-ce-que je dois faire sachant qu'on à peine vu le langage python on a juste recopier un programme qui n'a rien à voir avec celui là . Après plusieurs recherche je pense que je dois faire une boucle de la forme :
n=int(input("saisir la valeur de n:"))
S=0
for i in range (n):
print('i=',i)
S=S+1
print('S='S)
Sauf que je sais pas trop quoi mettre dedans dans l'exercice on parle de Janvier=1 et decembre=12 je dois remplacer n par ces valeurs ? , et qu'est ce que i ? les pointillés correspondent à quoi ?
J'avoue que je suis perdue à cette question pourtant les autres étaient plus abordables mais elles n'ont aucun rapport . Si quelqu'un pouvait m'expliquer comment on procède ça serai génial car j'aimerai bien comprendre si un jour il le met dans un contrôle . Merci à tous et très bonne journée .
Hors ligne
#2 10-03-2019 15:09:20
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : Exercices Maths langage Python
Salut,
Tu as deux algos à écrire en Python ?
En ce qui concerne la somme S, plusieurs remarques.
1. Les boucles en Python, ça commence, par défaut, à 0 (zéro) :
for i in range(n):
est une forme raccourcie de :
for i in range(0,n):
2. La boucle for i in range(0,n): non seulement commence à 0, mais s'arrête à n-1
3. Correction :
for i in range(1,n):
est plus clair
4. Pourquoi la correction avec i qui démarre de 1 ?
Ton prof a précisé [tex]\forall\, n\, \in \mathbb N \setminus 0[/tex]
Pourquoi élimine-t-il le zéro ?
5. Tu n'en vois pas l'intérêt, d'autant que de 0 à n-1 ou de 1 n il y a n termes, parce que tu as zappé qq ch de précis dans l'énoncé :
Ta Somme S tu l'as écrite : S=S+1
A chaque itération (tour de boucle) tu ajoutes 1 : ce n'est pas ce que demande l'énoncé...
Regarde plus attentivement :
S= 1 + 1/2 + ··· + 1/i + ··· + 1/n
Je te le récris de façon plus précise :
S= 1 +1/2 + 1/3+ 1/4 +....+ 1/n
Ce n'est pas 1 qu'on ajoute à chaque itération mais 1/2, 1/3, 1/4... soit 1/i et si i commence à 0 tu vas demander à Python d'ajouter 1/0 à S...,
Tu crois que tu n'auras pas droit à un joli message d'erreur ?
Attention à l'indentation, sinon plantage...
Corrigé :
S=0
for i in range (1,n+1):
print('i=',i)
S=S+1/i
print(" S =",S)
(J'ai décalé le S = vers la droite, améliorant la lisibilité)
Pour n = 20, voilà ce qu'on obtient :
i= 1
S = 1.0
i= 2
S = 1.5
i= 3
S = 1.8333333333333333
i= 4
S = 2.083333333333333
i= 5
S = 2.283333333333333
i= 6
S = 2.4499999999999997
i= 7
S = 2.5928571428571425
i= 8
S = 2.7178571428571425
i= 9
S = 2.8289682539682537
i= 10
S = 2.9289682539682538
i= 11
S = 3.0198773448773446
i= 12
S = 3.103210678210678
i= 13
S = 3.180133755133755
i= 14
S = 3.251562326562327
i= 15
S = 3.3182289932289937
i= 16
S = 3.3807289932289937
i= 17
S = 3.439552522640758
i= 18
S = 3.4951080781963135
i= 19
S = 3.547739657143682
i= 20
S = 3.597739657143682
En ce qui concerne :
Quelle est la valeur du plus petit entier n telle que S ≥ mois + jour de votre naissance ? Avec Janvier = 1 · · · Décembre = 12.
Je ne crois pas qu'on te demande du Python...
Ah, si ! Je crois que j'ai compris. Les deux sont liés...
Mais alors, je me demande comment tu pouvais savoir ça...
Il faut refaire une boucle qui s'arrête pour S >=mois+jour
Mais ça n'a pas de sens, mois +jour vaut au maximum 43 (12+31)
S=0
J'ai cherché quelle était la valeur de S
pour n = 1 000 000...
Réponse : 14,37....
pour n =10 000 000
Réponse : 16,69....
pour n= 100 000 000
Réponse : 18,99
pour n= 1 000 000 000
Réponse : 21,3
Si l'un(e) de tes camarades avait le "malheur" d'être né(e) un 31/12n pour que S>=43, il faudrait que la boucle Python aille jusqu'à une valeur de n comprise entre $10^{18}$ et $10^{19}$ soit entre 1 000 000 000 000 000 000 et 10 000 000 000 000 000 000...
Alors déjà que pour n= 1 000 000 000, Python a mis plus d'1/4 h pour trouver la somme, pour $n=10^{18}$, il faut multiplier ce temps par plus d'1 milliard...
Alors, bien sûr, on peut écrire l'algorithme, mais quant à le faire fonctionner pour mois + jour =18, ça prend une grosse poignée de secondes, alors au-delà...
Créer une fonction est ce qu'il y a de moins pénible...
S,n=0,0
while S<m+j:
n+=1
S+=1/n
return n,S
Sans la Console, lorsque tu es face a à :
>>>| avec barre curseur clignotante tu copies ce code, et tu le colles à la place de la barre clignotante et tu appuies 2 fois sur Entrée.
Tu retrouves alors :
>>> |
La fonction est en mémoire et peiy resservit tant que tu veux, sans la retaper...
Juste faire ce qui suit...
Tu vas demander par input
le n° du mois de naissance entre 1 et 12. Appelle-le m
le n° du jour de naissance entre 1 et 31, s m et j. Appelle-le j
Enfin, tu tapes : somme(12,3) et Entrée pour vérifier que ça marche...Python répond : (1835421, 15.000000378267234)
Le plus petit n pour S>15 est 1 835 241n la somme s vaut alors 15.000000378267234..
Et en toute innocence (hum, hum ^_^), si on t'interroge tu diras que pour m+j>15, c'est trop long que tu es obligée d'arrêter Python et tu demandes pourquoi...
Je m'absente jusque vers 19 h...
@+
Hors ligne
Pages : 1
Discussion fermée







