Suite de Colatz problème d'affichage

Bonjour !

je dois écrire un programme pour calculer les différents éléments de la suite de Collatz : le vol, l’altitude maximale du vol, la durée du vol en altitude et la durée du vol.

1er problème je ne sais pas comment définir la durée du vol en altitude (qui est égale au nombre d’étapes avant que le nouveau nombre soit inférieur au nombre de départ).

2è problème mon programme se lance, la fenêtre inputbox s’ouvre mais rien ne se passe. Aucun résultat ne s’affiche sur ma feuille.

Sub Collatz()

Dim nombre As Long 'entier positif choisi qui va servir au calcul de la suite

Dim alt_max As Long 'nombre le plus grand (fonction max)à faire à la fin surement

Dim durée_vol_alt As Long 'nombre d’étapes avec nombre > 1 (worksheet.application)

Dim durée_vol As Long[ 'nombre d’étape avec nombre <> 1(worksheet.application)

durée_vol = 0 'initialement 0 car aucune étape

durée_vol_alt = 0

alt_max = 0

nombre = 0

nombre = Application.InputBox("nombre = ", “Algorithme de Collatz, saisissez un nombre entre 1 et 1000”, “1”) 'ouvre une boite de dialogue pour choisir n

If nombre < 1 Or nombre > 1000 Then MsgBox (“saisie incorrecte”):

Exit Sub 'si saisie incorrecte arrete le programme et préviens l’utilisateur

Worksheets(“Feuil2”).Cells(1, 2).Value = “nombre choisi”

Worksheets(“Feuil2”).Cells(2, 2).Value = nombre

Do While nombre <> 1

If nombre Mod 2 = 0 Then

nombre = (nombre / 2) 'nouvelle valeur du nombre quand le nombre est pair

Else: nombre = (nombre * 3 + 1)

End If

If nombre > 1 Then

durée_vol = durée_vol + 1 '1 étape supplémentaire à chaque nouveau nombre différent de 1

Worksheets(“Feuil2”).Cells(durée_vol, 1).Value = nombre 'Affecter à chaque ligne de la colonne le nombre de chaque étape ie les étapes du vol

End If

'Je veux le max alt_max, c’est à dire le plus grand nombre se trouvant en colonne 1

Max = Application.Max(nombre)

Worksheets(“Feuil2”).Cells(2, 3).Value = Max

Worksheets(“Feuille”).Cells(1, 3).Value = “Altitude maximale”

Loop

End Sub

Pouvez vous m’aider ??

Merci d’avance :slight_smile:

Bonjour Syracuse,

Utilise les balises </> juste au-dessus du rectangle pour poster pour ton code afin d'améliorer la visibilité. D'autant qu'on traîne des caractères comme

Si tu as un fichier, il serait le bienvenue (voire indispensable).

2è problème mon programme se lance, la fenêtre inputbox s’ouvre mais rien ne se passe. Aucun résultat ne s’affiche sur ma feuille.

Forcément, tu fais exit sub tout de suite ... sans l'inclure dans la condition !

Fais a minima ceci

nombre = Application.InputBox("nombre = ", "Algorithme de Collatz, saisissez un nombre entre 1 et 1000", "1") 'ouvre une boite de dialogue pour choisir n
If nombre < 1 Or nombre > 1000 Then
    MsgBox ("saisie incorrecte"):
    Exit Sub 'si saisie incorrecte arrete le programme et préviens l’utilisateur
End If

Il faut indenter ton code sinon on ne saisit pas bien les boucles.

Bonjour merci de ta réponse, j'y penserai à l'avenir je ne savais pas :

Voici le fichier :

11suite.xlsm (15.10 Ko)

Et le code

Sub Collatz()
Dim nombre As Long 'entier positif choisi qui va servir au calcul de la suite
Dim alt_max As Long 'nombre le plus grand (fonction max)à faire à la fin surement
Dim durée_vol_alt As Long 'nombre d’étapes avec nombre > 1 (worksheet.application)
Dim durée_vol As Long[ 'nombre d’étape avec nombre <> 1(worksheet.application)

durée_vol = 0 'initialement 0 car aucune étape
durée_vol_alt = 0
alt_max = 0
nombre = 0

nombre = Application.InputBox("nombre = ", “Algorithme de Collatz, saisissez un nombre entre 1 et 1000”, “1”) 'ouvre une boite de dialogue pour choisir n
If nombre < 1 Or nombre > 1000 Then MsgBox (“saisie incorrecte”):
Exit Sub 'si saisie incorrecte arrete le programme et préviens l’utilisateur

Worksheets(“Feuil2”).Cells(1, 2).Value = “nombre choisi”
Worksheets(“Feuil2”).Cells(2, 2).Value = nombre

Do While nombre <> 1

If nombre Mod 2 = 0 Then
nombre = (nombre / 2) 'nouvelle valeur du nombre quand le nombre est pair

Else: nombre = (nombre * 3 + 1)
End If

If nombre > 1 Then
durée_vol = durée_vol + 1 '1 étape supplémentaire à chaque nouveau nombre différent de 1
Worksheets(“Feuil2”).Cells(durée_vol, 1).Value = nombre 'Affecter à chaque ligne de la colonne le nombre de chaque étape ie les étapes du vol
End If

'Je veux le max alt_max, c’est à dire le plus grand nombre se trouvant en colonne 1
Max = Application.Max(nombre)
Worksheets(“Feuil2”).Cells(2, 3).Value = Max
Worksheets(“Feuille”).Cells(1, 3).Value = “Altitude maximale”

Loop
End Sub

Merci Beaucoup

Le max

        'Je veux le max alt_max, c’est à dire le plus grand nombre se trouvant en colonne 1
        Max = Application.Max(Range("A:A"))

Illisible, évite les accents, surtout dans la conversion mac > PC

capture d ecran 300

Le nom de la feuille "Feuil2" n'existe pas !

Pour le max je comprends ce qu'il faut faire, cependant je voulais placer mes nombres obtenus dans la colonne a et je n'y arrive pas

Collatz a 2 T

Super ça fonctionne ! Merci beaucoup de m'avoir aidé !

Bonne journée

je ne sais pas comment définir la durée du vol en altitude (qui est égale au nombre d’étapes avant que le nouveau nombre soit inférieur au nombre de départ)

C'est pas clair, car si tu pars d'un nombre pair, tu descends tout de suite !
Rechercher des sujets similaires à "suite colatz probleme affichage"