Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 25-07-2009 13:42:01
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
[Python] Caractéristiques du vol de la suite de Syracuse
Bonjour,
J'ai testé le programme proposé par SebastienB en le traduisant en Python...
Pour ceux qui ne veulent pas se reporter à la discussion ouverte à ce sujet dans la section "Café mathématique", voici la formulation mathématique rigoureuse proposée par SebastienB :
[tex]u:\begin{cases}\frac{u_n}{2}, & \text{Si $u_n$ est pair}\\3u_n + 1 & \text{Si $u_n$ est impair}\\ \end{cases}[/tex], [tex]\forall u_0 \in \mathbb{N^*},\; \;\exists n \in \mathbb{N} \;\;u_n = 1[/tex]
Quelques définitions :
* Temps de vol : c'est le plus petit indice n tel que $u_n = 1$
* Temps de vol en altitude : c'est le plus petit indice n tel que $u_n+1 < u_0$
* Altitude maximale : c'est la valeur maximale de la suite
# -*- coding: utf-8 -*-
print (' *** Vol de la suite de Syracuse ***\n')
i,u_n,tpsVol,tpsVolAlt,altMax,sortie = 0,0,0,0,0,0
while not sortie:
try:
u_0=abs(int(input('Entrez la valeur de départ :')))
sortie=1
except ValueError:
print("Ce n'est pas un nombre, veuillez recommencer s'il vous plaît")
print()
u_i = u_0
while u_n != 1 :
if u_i % 2 == 0:
u_i = u_i / 2;
else:
u_i = u_i * 3 + 1
if ( ( u_i <= u_0 ) and (i > 0) and (tpsVolAlt == 0) ):
tpsVolAlt = i
if ( altMax < u_i ):
altMax = u_i
u_n = u_i
i+=1
lg=max(len(str(i)),len(str(tpsVolAlt)),len(str(altMax)))
print()
print ("Temps de vol : ",str(i).rjust(lg))
print ("Temps de vol en altitude : ",str(tpsVolAlt).rjust(lg))
print ("Altitude maximale : ",str(altMax).rjust(lg))
Résultat :
Entrez la valeur de départ : 123456789
Temps de vol : 177
Temps de vol en altitude : 2
Altitude maximale : 370370368
@+
Arx Tarpeia Capitoli proxima...
Hors ligne