Bonjour, je dois faire cette exercice pour la semaine prochaine mais je n'ai absolument rien compris et j'aurai besoin d'aide.. Je vous laisse lire :
la suite de syracuse d'un entier non nul est la suite definie par recurrence par u0= N et, pour tout n E N : un+1= un/2 si un est pair ou 3un+1 si un est impair. Il existe une conjecture célèbre sur ces suites : quel que soit l'entier N, la suite de Syracuse d'un entier N contiendra le nombre 1 (et donc 2 et 4)
Cette conjecture porte le nom de conjecture de Collatz, du nom de son découvreur dans les années 1950.
A ce jour, elle n'est toujours pas démontrée... Une des pistes explorées, qui permet de démontrer aisément la conjecture pour 75% des entiers, utilise les temps de vol de cette suite. On appelle temps de vol d'une suite de Syracuse (un) le plus petit rang n de la suite tel que un=1. Parmi les suites de Syracuse des entiers inférieurs à 1000, quelle est celle qui a le plus grand temps de vol ?
Merci d'avance...
Bonjour,
1. Écris un algorithme qui calcule .
2. Écris un algorithme qui calcule le premier tel que .
Bonjour, le plus simple est d'écrire un algorithme qui calcule les temps de vol de tous les nombres de 1 à 1000 et affiche celui qui a le plus long.
Ecrit déjà l'algorithme qui calcule le temps de vol pour un N donné puis après tu le modifieras en l'encadrant par une boucle Pour P allant de 1 à 1000 et en captant le nombre qui aura le plus grand temps de vol.
Pour progresser dans les algorithmes, il faut se battre un peu avec. Si je te donne directement la solution, ça ne te fera pas progresser.
C'est le but de l'exercice...
Je t'écris l'algorithme qui calcule , avec , avec des trous pour t'aider :
Variables : N, P, U
Entrer N
Entrer P
Affecter la valeur ... à U
Si ... alors
Affecter la valeur ... à U
Fin si
Si ... alors
Affecter la valeur ... à U
Fin si
Afficher U
Bonjour.
Je suis dans le même cas que Marseillais-31 sauf que l'échéance est plus proche ...
En fait, j'ai trouvé le premier algorithme tout seul (avec seulement deux inconnues mais il marche quand même).
Cependant, je n'arrive pas à "capter le nombre qui aura le plus long temps de vol".
Merci d'avance pour votre aide.
Voilà toujours une solution sous algobox (on peut la copier/coller en mode editeur de texte ou en ligne sur proglab ).
Pour capter le nombre qui a le plus long temps de vol, regarde ce que j'ai fait. je fais varier k de 1 à 1000. Pour chaque k, je calcule le temps de vol, il est stocké dans la variable n.
Puis il suffit de tester si n est plus grand que le plus grand temps de vol calculé jusqu'à maintenant (Max dans l'algorithme), si oui on remplace Max par le nouveau n et on stocke le nouveau candidat (que j'ai appelé NN) en mettant k dans NN.
Et enfin en sortie de boucle , on affiche le vainqueur.
VARIABLES
u EST_DU_TYPE NOMBRE
n EST_DU_TYPE NOMBRE
k EST_DU_TYPE NOMBRE
Max EST_DU_TYPE NOMBRE
NN EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
Max PREND_LA_VALEUR 0
NN PREND_LA_VALEUR 0
POUR k ALLANT_DE 1 A 1000
DEBUT_POUR
u PREND_LA_VALEUR k
n PREND_LA_VALEUR 0
TANT_QUE (u != 1) FAIRE
DEBUT_TANT_QUE
n PREND_LA_VALEUR n+1
SI (u%2==0) ALORS
DEBUT_SI
u PREND_LA_VALEUR u/2
FIN_SI
SINON
DEBUT_SINON
u PREND_LA_VALEUR 3*u+1
FIN_SINON
FIN_TANT_QUE
SI (n > NN) ALORS
DEBUT_SI
NN PREND_LA_VALEUR k
Max PREND_LA_VALEUR n
FIN_SI
FIN_POUR
AFFICHER "le nombre qui a le temps de vol le plus grand est "
AFFICHER NN
AFFICHER " ; le temps de vol est de : "
AFFICHER Max
FIN_ALGORITHME
Merci beaucoup ! Mais es tu certain de ta réponse car avec l'algorithme que il y a plus haut, je ne trouve pas le même résultat
je ne le vois pas l'algorithme plus haut montre le moi, je te dirai s'il est plus credible ou non que celui-là.
L'algorithme que je t'avais proposé servait uniquement à calculer le p-ième terme la suite pour le premier terme N fixé.
Il y avait encore du travail pour arriver à un algorithme répondant au problème posé (voir celui de Glapion) !
Je lui fait confiance pour cela !
Essaye de comprendre l'algorithme et pose des questions si tu ne comprends pas certains points.
Lance ensuite l'algorithme pour avoir la réponse au problème posé.
Merci beaucoup. Je ne comprend pas juste la valeur NN dans ton algorithme. Merci d'avance..
Et merci a vous deux !
NN stocke le nombre k qui a le meilleurs temps de vol.
Au début il vaut 0 et à chaque fois que l'on trouve un nombre k qui a un meilleurs temps de vol, NN prend la valeur de k donc stocke le nombre qui a la meilleure performance.
Evidemment à la fin, on a essayé tous les nombres entre 1 et 1000 donc NN stocke le nombre vainqueur et on l'affiche (c'est ce qu'on cherche en fait).
Merci beaucoup. Je t'en remercie! Est ce que je peux te donner mon email pour tu m'envoies un message pour que j'ai le tiens et si un jour j'ai quelque chose a te demander, que je puisse t'envoyer un mail ? Ça serait très gentil de ta part
D'accord... Tant pis pour moi
J'ai trouver tes explications très clairs et c'est la première fois que je comprend aussi vite !
ha oui il y avait une erreur dans l'algorithme, c'est SI (n > Max) ALORS au lieu de SI (n > NN) ALORS
VARIABLES
u EST_DU_TYPE NOMBRE
n EST_DU_TYPE NOMBRE
k EST_DU_TYPE NOMBRE
Max EST_DU_TYPE NOMBRE
NN EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
Max PREND_LA_VALEUR 0
NN PREND_LA_VALEUR 0
POUR k ALLANT_DE 2 A 1000
DEBUT_POUR
u PREND_LA_VALEUR k
n PREND_LA_VALEUR 0
TANT_QUE (u != 1) FAIRE
DEBUT_TANT_QUE
n PREND_LA_VALEUR n+1
SI (u%2==0) ALORS
DEBUT_SI
u PREND_LA_VALEUR u/2
FIN_SI
SINON
DEBUT_SINON
u PREND_LA_VALEUR 3*u+1
FIN_SINON
FIN_TANT_QUE
SI (n > Max) ALORS
DEBUT_SI
NN PREND_LA_VALEUR k
Max PREND_LA_VALEUR n
FIN_SI
FIN_POUR
AFFICHER "le nombre qui a le temps de vol le plus grand est "
AFFICHER NN
AFFICHER " ; le temps de vol est de : "
AFFICHER Max
FIN_ALGORITHME
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :