infernaleur a écrit:Salut,
le lien de ton travail est le même que le lien du sujet de mon côté tu peux modifier ?
GaBuZoMeu a écrit:Peux-tu mettre tes programmes entre des balises "code" de la fenêtre d'édition des messages ?
Ça sera plus simple pour tout le monde !
def affiche_nb_sup_a(a_max,n=50):
x = range(1, a_max + 1)
y = [nb_sup_a(a, n) for a in x]
plt.grid()
plt.bar(x, y, .2, color='b' )
plt.tittle("nombre de termes > u_O \n parmi \
les "+str(n)+" premiers")
plt.show()
dragzfx a écrit:GaBuZoMeu a écrit:Peux-tu mettre tes programmes entre des balises "code" de la fenêtre d'édition des messages ?
Ça sera plus simple pour tout le monde !
Bien sûr, voici le programme modèle:
- Code: Tout sélectionner
def affiche_nb_sup_a(a_max,n=50):
x = range(1, a_max + 1)
y = [nb_sup_a(a, n) for a in x]
plt.grid()
plt.bar(x, y, .2, color='b' )
plt.tittle("nombre de termes > u_O \n parmi \
les "+str(n)+" premiers")
plt.show()
from matplotlib import pyplot as plt
import numpy as np
def syracuse(a, n):
""" liste des n premiers termes de Syracuse
pour u_O = a
"""
sy = [a]
for i in range(n):
if sy[-1] % 2 == 0:
sy.append(sy[-1] // 2)
else:
sy.append(sy[-1] * 3 + 1)
return(sy)
n = 50
while True:
a = int(input("entier a = "))
if a == 0:
break
else:
plt.cla()
plt.grid()
plt.plot(range(n+1), syracuse(a, n),'o-')
plt.show()
def nb_sup_a(a, n):
""" nombre de valeurs > a parmi les n premiers
termes
"""
return(len([x for x in syracuse(a, n) if x > a]))
GaBuZoMeu a écrit:Ton programme marche bien.
Pour la fonction nb_sup_a(a, n), tu peux utiliser la liste produite par syracuse(a,n) et ensuite tu crées un compteur que tu initialises à 0 et incrémentes de 1 chaque fois que tu rencontres un entier >a en parcourant la liste.
Ta solution marche aussi
from matplotlib import pyplot as plt
import numpy as np
def syracuse(a, n):
""" liste des n premiers termes de Syracuse
pour u_0 = a
"""
sy = [a]
for i in range(n):
if sy[-1] % 2 == 0:
sy.append(sy[-1] // 2)
else:
sy.append(sy[-1] * 3 + 1)
return(sy)
def alti_max(a, n):
""" altitude maximale et indice pour la suite
de Syracuse de n termes avec u0 = a
"""
sy = syracuse(a, n)
m = max(sy)
return(m, sy.index(m))
def affiche_syracuse(n):
while True:
a = int(input("entier a = "))
if a == 0:
break
else:
plt.cla() #efface le graphe courant
plt.grid()
plt.plot(range(n+1), syracuse(a, n),'o-')
plt.show()
def nb_sup_a(a, n):
""" nombre de valeurs > a parmi les n premiers
termes
"""
return(len([x for x in syracuse(a, n) if x > a]))
def affiche_nb_sup_a(a_max, n=50):
x = range(1, a_max + 1)
y = [nb_sup_a(a, n) for a in x]
plt.grid()
plt.bar(x, y, .2, color='b' )
plt.title("nombre de termes > u_0 \n parmi \
les "+str(n)+" premiers")
plt.show()
if __name__ == "__main__":
affiche_nb_sup_a(100,n=50)
from matplotlib import pyplot as plt
import numpy as np
def syracuse(a, n):
""" liste des n premiers termes de Syracuse
pour u_O = a
"""
sy = [a]
for i in range(n):
if sy[-1] % 2 == 0:
sy.append(sy[-1] // 2)
else:
sy.append(sy[-1] * 3 + 1)
return(sy)
n = 50
while True:
a = int(input("entier a = "))
if a == 0:
break
else:
plt.cla()
plt.grid()
plt.plot(range(n+1), syracuse(a, n),'o-')
plt.show()
[27,---> 82 ---<, 41, 124, 62, 3...1132, 566]
fatal_error a écrit:slt,
jpense que tu t'es planté sur 27; 31; 47; 63; 71; 91
si tu print(syracuse(27,50))
tu obtiens
- Code: Tout sélectionner
[27,---> 82 ---<, 41, 124, 62, 3...1132, 566]
et tu déduis que 27 n'est __pas__ le maximum de la suite
Les a qui sont max de ta suite, par définition sont ceux tq nb_sup_a(a,n) vaut 0 (idem il n'existe aucun élément de la suite supérieur à a)
Enfin pour te mettre sur la piste, tu as observé les cycles 4,2,1,2,1.. tu peux postuler que 16 va donner 16,8,4,2,1,2,1...
Vous voulez donc dire que les valeurs qui sont le maximum de la suite sont les valeurs qui valent 0 dans mon diagramme
aussi son temps de vol est 0
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 32 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :