Problème 3A+1 en batch

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
mlkgiosn
Batcheur occasionnel
Messages : 4
Enregistré le : 10 juin 2021 12:20

Problème 3A+1 en batch

Message par mlkgiosn »

Bonjour.

Je viens de m'inscrire sur le forum car je ne bosse pas du tout dans le domaine informatique mais je m'intéresse simplement à la programmation, j'ai vraiment les bases de chez bases dans plusieurs langage dont le batch mais je suis sans doute pas très expérimenté par rapport à vous.

Pour m'entrainer, j'ai fait un programme testant le problème 3A+1 (pour l'histoire c'est "on prend n'importe quel chiffre, si pair on le divise par 2 sinon on le multiplie par 3 et on y ajoute 1, on recommence avec le résultat, on finit toujours par revenir à 1, même si personne n'a réussi à prouver que ça fonctionnait pour tous les nombres existant).

J'ai réussi à faire ça, en demandant à l'utilisateur de rentrer le nombre qu'il veut tester, et ça fonctionne.

Maintenant j'aimerai améliorer le programme, pour qu'il teste de lui-même, d'abord 1, puis 2, puis 3, etc... sauf qu'il s'avère que c'est plus compliqué que je pensais, auriez-vous une idée ?

Je donne mon script actuel :

Code : Tout sélectionner

@echo off

:eofa

set /p result= Chiffre a tester:

:eof

set/a variable=result %%2

if %result%==1 (
echo %result%
echo FINI
goto eofa)

if %variable% ==0 (
echo %result%
set/a result = result /2
goto eof)

if not %variable% ==0 (
echo %result%
set/a result = 3*result +1
goto eof)


barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Problème 3A+1 en batch

Message par barnabe0057 »

Bonjour,

Pour tester les chiffres de 1 à 3 :

Code : Tout sélectionner

@echo off

for /L %%A in (1,1,3) do call :traitement %%A

exit

:traitement

set result=%1
set /a variable=%result% %%2

if %variable% equ 0 (
echo %result%
set /a result=%result% / 2
goto :eof
)

if %variable% neq 0 (
echo %result%
set /a result=%result% * 3 + 1
goto :eof
)
mlkgiosn
Batcheur occasionnel
Messages : 4
Enregistré le : 10 juin 2021 12:20

Re: Problème 3A+1 en batch

Message par mlkgiosn »

Essayé sans succès, dommage, je pensais pas que ça pouvait être si difficile.
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Problème 3A+1 en batch

Message par barnabe0057 »

Cette fois j'ai bien testé ça fonctionne comme attendu :

Code : Tout sélectionner

@echo off
setlocal enableextensions enabledelayedexpansion

for /L %%A in (1,1,3) do call :traitement %%A

echo. & pause
exit

:traitement
echo. & echo ^>^>^>^>^> on prend le chiffre %1
set "result=%1"
set "suite=%1"

:boucle
set /a variable=!result! %% 2

if %variable% equ 0 (
	set /a result=!result! / 2
	set "suite=!suite! !result!"
)

if %variable% neq 0 (
	set /a result=!result! * 3 + 1
	set "suite=!suite! !result!"
)

if !result! equ 1 (
	echo !suite!
	goto :eof
)
goto :boucle
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: Problème 3A+1 en batch

Message par barnabe0057 »

Voilà une nouvelle version qui est testée et qui fonctionne :

Code : Tout sélectionner

@echo off
mode con cols=65 lines=50

for /L %%A in (1,1,15) do call :traitement %%A

echo. & pause
exit

:traitement
echo. & echo ^>^>^>^>^> on prend le chiffre %1
set "result=%1"
set "suite=%1"

:boucle
set /a variable=%result% %% 2

if %variable% equ 0 set /a result=%result% / 2
if %variable% neq 0 set /a result=%result% * 3 + 1

set "suite=%suite% %result%"

if %result% equ 1 (
	echo %suite%
	goto :eof
)
goto :boucle
mlkgiosn
Batcheur occasionnel
Messages : 4
Enregistré le : 10 juin 2021 12:20

Re: Problème 3A+1 en batch

Message par mlkgiosn »

barnabe0057 a écrit : 16 juin 2021 10:53 Voilà une nouvelle version qui est testée et qui fonctionne :

Code : Tout sélectionner

@echo off
mode con cols=65 lines=50

for /L %%A in (1,1,15) do call :traitement %%A

echo. & pause
exit

:traitement
echo. & echo ^>^>^>^>^> on prend le chiffre %1
set "result=%1"
set "suite=%1"

:boucle
set /a variable=%result% %% 2

if %variable% equ 0 set /a result=%result% / 2
if %variable% neq 0 set /a result=%result% * 3 + 1

set "suite=%suite% %result%"

if %result% equ 1 (
	echo %suite%
	goto :eof
)
goto :boucle
Désolé je mets le temps (vraiment le temps lol) à répondre, mais je tiens quand même à remercier, faut y penser quand quelqu'un nous aide ou mieux, nous donne des solutions ;) .

On se demande comment on fait quand on n'avait pas internet et qu'il fallait faire sans l'aide de ceux qui sont largement meilleurs que nous :D .

J'ai réussi dans d'autre langages (Python et C), mais en batch c'est plus compliqué je trouve.
Répondre