Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(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é :

n=int(input("saisir la valeur de n:"))
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...

def somme(m,j):
    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

Pied de page des forums