problème conjecture de Syracuse sous vba

dorian57290

XLDnaute Nouveau
Bonjour, je dois établir la conjecture de Syracuse sous vba, mais j'ai un problème lors de l’exécution de la boucle do while.
En ce qui concerne le temps de vol en altitude je ne sais pas comment l’intégrer dans la boucle surement avec une nouvelle variable mais je n'ai pas trouver l'astuce ( je n'ai peut être pas compris le sujet aussi lol ) .

Pouvez vous m'aiguiller et voir ce qui ne va pas dans ma procédure ??


merci de votre aide cordialement.
 

Pièces jointes

  • syracuse exo.xlsm
    14.9 KB · Affichages: 79
  • sujet syracuse.xlsx
    285.3 KB · Affichages: 78

dorian57290

XLDnaute Nouveau
Re : problème conjecture de Syracuse sous vba

merci à cause de cette petite erreur ma boucle ne fonctionné pas ! il me reste plus qu'a trouver pour l'altitude maximale. Peut-on comparer une valeur saisie dans une aplication.inputbox à ma boucle ?
 

PMO2

XLDnaute Accro
Re : problème conjecture de Syracuse sous vba

Peut être cela peut vous aider. Les éléments s'inscrivent dans une nouvelle feuille.
Code:
Sub syracuse()
Dim nombre As Long
Dim tps_vol As Long
Dim max As Long
Dim cpt&
Dim T()
'---
nombre = Application.InputBox("Saisir un nombre entre 1 et 1000:", "conjecture de syracuse", Type:=1)

If nombre < 1 Or nombre > 1000 Then
  MsgBox ("saisie incorrecte")
  Exit Sub
End If

max = nombre
tps_vol = 0

Do While nombre <> 1
  cpt& = cpt& + 1
  ReDim Preserve T(1 To 2, 1 To cpt&)
  T(1, cpt&) = cpt&  'rang
  T(2, cpt&) = nombre 'nombre
  
  If nombre Mod 2 = 0 Then
    nombre = nombre / 2
    tps_vol = tps_vol + 1
  Else
    nombre = (nombre * 3) + 1
    tps_vol = tps_vol + 1
  End If
  
  If max < nombre Then max = nombre
Loop
'--- Résultats dans une nouvelle feuille ---
Sheets.Add
ActiveSheet.Range("a1:b" & cpt& & "") = Application.WorksheetFunction.Transpose(T)
MsgBox "temps de vol:" & tps_vol & vbNewLine & "altitude maximale:" & max

End Sub
 

dorian57290

XLDnaute Nouveau
Re : problème conjecture de Syracuse sous vba

Bonjour Paf et PM02,

Merci pour vos réponses, je ne connais pas du tous la fonction Redim Preserve. Je ne comprend pas ce que tu as fait au niveau du compteur avec la variable T. Pourrais tu m'expliquer ce qui ce passe concrètement dans le programme ?

Merci pour votre aides, actuellement mon programme fonctionne mais au niveau du temps de vol en altitude je n'arrive pas a trouver la meilleur programmation.
 

PMO2

XLDnaute Accro
Re : problème conjecture de Syracuse sous vba

Merci pour vos réponses, je ne connais pas du tous la fonction Redim Preserve. Je ne comprend pas ce que tu as fait au niveau du compteur avec la variable T. Pourrais tu m'expliquer ce qui ce passe concrètement dans le programme ?

Merci pour votre aides, actuellement mon programme fonctionne mais au niveau du temps de vol en altitude je n'arrive pas a trouver la meilleur programmation.

OK.
Alors peut être comme cela
Code:
Option Explicit

Sub syracuse()
Dim nombreBase As Long
Dim nombre As Long
Dim tps_vol As Long
Dim tps_vol_altitude As Long
Dim max As Long
Dim cpt&  'compteur du tableau dynamique
Dim T()   'tableau dynamique
'---
nombreBase = Application.InputBox("Saisir un nombre entre 1 et 1000:", "conjecture de syracuse", Type:=1)

If nombreBase < 1 Or nombre > 1000 Then
  MsgBox ("saisie incorrecte")
  Exit Sub
End If

nombre = nombreBase
max = nombre
tps_vol = 0

'--- D'après ce que j'ai compris (???), il faut
'--- écarter la valeur max. On démarre donc à -1
tps_vol_altitude = -1

Do While nombre <> 1

  '### Le tableau dynamique ###
  '--- Incrémentation du compteur
  cpt& = cpt& + 1
  '--- Redimensionnement du tableau dynamique
  '--- Il y a 2 dimensions (seule la dernière dimension peut être redimensionnée)
  '--- On utilise Preserve pour ne pas écraser l'existant (ce qui a déjà été écrit)
  ReDim Preserve T(1 To 2, 1 To cpt&)
  '--- Renseigne la 1ère dimension (ligne 1, colonne compteur)
  T(1, cpt&) = cpt&  'rang
  '--- Renseigne la 2ème dimension (ligne 2, colonne compteur)
  T(2, cpt&) = nombre 'nombre
  '############################
  
  If nombre Mod 2 = 0 Then
    nombre = nombre / 2
    tps_vol = tps_vol + 1
  Else
    nombre = (nombre * 3) + 1
    tps_vol = tps_vol + 1
  End If
  
  If max < nombre Then max = nombre
  
  If nombre > nombreBase Then tps_vol_altitude = tps_vol_altitude + 1
  
  
Loop

'### Inscription du tableau dans une nouvelle feuille ###
Sheets.Add    'Création d'une nouvelle feuille
'--- Comme seule la dernière dimension peut être redimensionnée,
'--- on transpose le tableau (les colonnes tableau deviennent des
'--- lignes Excel, les lignes tableau deviennent des colonnes Excel)
ActiveSheet.Range("a1:b" & cpt& & "") = Application.WorksheetFunction.Transpose(T)
'#########################################################

MsgBox "temps de vol:" & tps_vol & vbNewLine & "altitude maximale:" & max & vbLf & "temps de vol en altitude:" & tps_vol_altitude

End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : problème conjecture de Syracuse sous vba

Bonjour à tous.


D'accord, pierrejean : pour une fois qu'on a un problème amusant, amusons-nous !

De là à y apporter une solution, il y a de la marge. Dommage, ça pourrait valoir une médaille Fields...


Bonne soirée.


ℝOGER2327
#7993


Samedi 7 Phalle 142 (*Saint Patrobas, pompier - fête Suprême Quarte)
30 Thermidor An CCXXIII, 6,9470h - moulin
2015-W34-1T16:40:22Z
 

Pièces jointes

  • Syracuse.xlsm
    112.3 KB · Affichages: 64

pierrejean

XLDnaute Barbatruc
Re : problème conjecture de Syracuse sous vba

Bonjour à tous

Bonjour ROGER

Il n’était pas dans mes intentions de démontrer ce qui restera probablement une conjecture mais de donner quelques pistes pour répondre au problème posé
Et j'avoue avoir renoncé à tout saisir de cette brillante démonstration
 

ROGER2327

XLDnaute Barbatruc
Re : problème conjecture de Syracuse sous vba

Bonjour à tous.

Bonjour pierrejean.


Plus qu'à votre message, ma remarque finale fait référence à la formulation de la demande par notre ami, qui a écrit :
(...) je dois établir la conjecture de Syracuse sous vba (...)
Dans l'article que cite dorian57290 sans en donner l'origine, on lit notamment : « En dépit de la simplicité de son énoncé, cette conjecture défie depuis de nombreuses années les mathématiciens. Paul Erdős a dit à propos de la conjecture de Syracuse : « les mathématiques ne sont pas encore prêtes pour de tels problèmes ». »

Jeff Lagarias dit « Paul Erdos commented concerning the intractability of the 3x+1 problem: "Mathematics is not yet ready for such problems." ».

C'est pourquoi je me suis permis cette taquinerie à son encontre. À défaut d'établir, nous illustrons sans prétention à prouver, ce qui n'est déjà pas si mal...​


Bonne journée.


ℝOGER2327
#7997


Dimanche 8 Phalle 142 (Sainte Léda, ajusteuse - fête Suprême Tierce)
1[SUP]er[/SUP] Fructidor An CCXXIII, 3,8750h - prune
2015-W34-2T09:18:00Z
 

Discussions similaires

Réponses
12
Affichages
389

Statistiques des forums

Discussions
312 479
Messages
2 088 744
Membres
103 944
dernier inscrit
Stbj