Je viens de publier un programme et je voudrais éviter de propager de mauvaises solutions à une conjecture. Je l’ai comparé aux résultats du site Dcode : https://www.dcode.fr/conjecture-syracuse
Voici un lien vers mon programme :
http://ti-pla.net/a2585235
Je suis "étudiant" en Terminale S, tout conseil est le bien venu.
Je sais bien que les puristes veulent un joli While, ce que j’aurais très bien pu faire, mais cela me plaisait de procéder de la sorte.
Sinon, je ne fais pas de fautes particulières ?
Je me suis demandé si je devais mettre absolument tous les résultats des étapes dans une liste, mais j’ai jugé cela inutile ; alors, ne l’aie pas fait. Ai-je eu tort ?
Je vous remercie pour votre aide généreuse jusqu’à présent.
- Code: Tout sélectionner
Define LibPub syracuse(n)=
//Version 1.0
Prgm
k:=1
p:=n
Disp "For :",n
Disp " "
Lbl a
If ((n+1)/(2))≠floor(((n+1)/(2))) Then
((n)/(2))→n
Disp n
k+1→k
Else
3*n+1→n
Disp n
k+1→k
EndIf
If n=1 Then
Disp "Étapes :",k
l1:={p,k}
DelVar n,k,p
Stop
EndIf
Goto a
EndPrgm
- Code: Tout sélectionner
Define LibPub syracuse(n)=
//Version 1.3
Prgm
If n=0 Then
n:=floor(((randInt(9,2000000000))/(2))+1)
EndIf
k:=1
p:=n
g:=n
Disp "For :",n
Disp " "
Lbl a
If ((n+1)/(2))≠floor(((n+1)/(2))) Then
(( n)/(2))→n
If n>g Then
g:=n
EndIf
Disp n
k+1→k
Else
3*n+1→n
If n>g Then
g:=n
EndIf
Disp n
k+1→k
EndIf
If n=1 Then
Disp "For :",p
Disp "Max altitude :",g
Disp "Flying time :",k
l1:={p,g,k}
DelVar n,k,p,g
Stop
EndIf
Goto a
EndPrgm
- Code: Tout sélectionner
Define LibPub syracuse(n)=
//Version 1.4
Prgm
©Ce sont des nombres qui donnent de grandes valeurs maximums et un temps de vol assez long, ou bien dont le déroulement d’étapes de calculs est amusant à regarder en détail.
©syracuse(10709980568908647)
©syracuse(87381)
If n=−1 Then
n:=floor(((randInt(−1000000000000,−1))/(2))+1)
EndIf
If n=0 Then
q:=9
m:=80000000000000
Request "Minimum rand :",q,0
Request "Maximum rand :",m,0
n:=floor(((randInt(q,m))/(2))+1)
EndIf
If n=1 Then
n:=floor(((randInt(9,88888888888888))/(2))+1)
EndIf
If n=2 Then
n:=floor(((randInt(9,1000000000000))/(2))+1)
EndIf
k:=1
p:=n
g:=n
b:=n
Disp "For :",n
Disp " "
Lbl a
If ((n+1)/(2))≠floor(((n+1)/(2))) Then
((n)/(2))→n
If n>g Then
g:=n
EndIf
If n<b Then
b:=n
EndIf
Disp n
k+1→k
Else
3*n+1→n
If n>g Then
g:=n
EndIf
If n<b Then
b:=n
EndIf
Disp n
k+1→k
EndIf
If n=1 Then
Disp "For :",p
Disp "Max altitude :",g
Disp "Flying time :",k
l1:={p,g,k}
DelVar n,q,m,k,p,g,b
Stop
EndIf
If n=−5 Then
Disp "For :",p
Disp "Min altitude :",b
Disp "Flying time :",k
l2:={p,b,k}
DelVar n,q,m,k,p,g,b
Stop
EndIf
Goto a
EndPrgm