Conjecture de syracuse(suite de collatz)

Résolu/Fermé
annamir Messages postés 15 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 13 avril 2009 - 12 févr. 2009 à 17:32
 loupius - 12 févr. 2009 à 19:06
Bonjour,
Écrire un programme C qui lit un coefficient de départ a représentant le premier terme (entier positif) de la suite convergente suivante:
u0 = a et un+1 = un/2 si un est pair, un+1 = 3un + 1 si un est impair
Cette suite, appelée suite de Collatz (aussi connue sous le nom de conjecture de Syracuse), converge toujours vers la valeur 1 quelque soit le premier terme entier positif de la suite!

Voici un exemple de sortie du programme (le premier terme de la suite est 10):

Les termes de la suite avec a = 10 sont: 10, 5, 16, 8, 4, 2, 1
Nombre total de termes pour la convergence: 7
Terme maximum de la suite: 16

Remarque: Utiliser la spécification de conversion %d pour lire un entier ou écrire un entier.

Remarque: Votre programme doit calculer tant que l'utilisateur désire entrer un nouveau terme initial (donc, une boucle while)

4 réponses

annamir Messages postés 15 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 13 avril 2009 2
12 févr. 2009 à 18:44
et d'ailleurs, je l'ai déjà commencé, mais je voulais avoir une réponse pour comparer avec ce que j'ai fait,
#include <stdio>


int main()

{
long A;
int i;
printf("Quel est le nombre ? ");
scanf("%ld", &A);
do
{
if (A%2==0)
A = A / 2;
else
A = A * 3 + 1;
printf("%d\n" , A);

} while (A != 1);
system("PAUSE");
return 0;

}
le problème c'est que je comprends pas, ce que demande l'énoncé en disant''qui lit un coefficient de départ a représentant le premier terme'' et je sais si c'est ce que mon programme fait.
2
Ah non, ça marche pas comme ça! C'est toi qui fait l'exercice et c'est nous qui corrigeons, évidemment c'est plus long de faire que de corriger, mais c'est toi qui est demandeur et c'est à toi de faire l'effort!
La solution parait correcte (à part le 'printf("%d\n" , A);' qui devait être 'printf("%ld\n" , A);'.
Est-ce que ça marche?
Une remarque: Tu fais déjà une hypothèse concernant la convergence; en effet le 'while (A != 1);' signifie que tu connais déjà la solution. D'autre part c'est un peu dangereux de faire un tel 'while', car c'est le genre 'boucle éternelle'. Bien sûr, dans le cas présent ça marche, mais peut-être serait-il préférable d'écrire 'while ((A != 1) && (++boucle < 1000))' avec boucle = 0 avant le 'do'.
0
Bonjour

Dans l'énoncé, il n'y avait pas une troisième remarque disant que l'élève devait faire le travail lui-même ?

Ici, on donne des coups de pouce, mais on ne fera pas tes devoirs à ta place
Présente-nous un travail sérieusement commencé et dis-nous où tu as un problème, là nous pourrons t'aider.
1
Ca fait quelques minutes que j'avais envie de répondre, mais je n'arrivais pas à trouver une formulation... et j'ai bien fait d'attendre: la tienne est excellente.
Parfois je me demande si on ne nous prend pas pour des OS (oh non pas des sytèmes d'exploitation... mais des systèmes exploités!).
Il vaut mieux en rire, isn't ;-(o)
0
annamir Messages postés 15 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 13 avril 2009 2
12 févr. 2009 à 18:36
non, dans l'énoncé, il n'y avait pas une troisième remarque disant que l'élève devait faire le travail lui-même, puisque ce n'est pas un devoir, je débute en programmation et j'essaye de faire des exercices tirés de livres ou internet, mais j'y arrive pas alors je poste.
0
annamir Messages postés 15 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 13 avril 2009 2
12 févr. 2009 à 18:46
je veux dire je sais pas si c'est ce que mon programme fait.
0