ayuda programa bat!!

Iniciado por elboig, 4 Diciembre 2007, 19:10 PM

0 Miembros y 1 Visitante están viendo este tema.

elboig

Buenas!! Lo que necesito es un codigo para crear un programa BAT, es para hacer un ejercicio que no encuentro en ningun sitio lo que necesito es: Un codigo que calcule el factorial de un numero que se ponga como parametro muchas gracias para la gente que me ayude! :D lo he intentado hacer pero no hay manera k funcione... mirar:

rem factorial.bat <numero>
@echo off
set /A n=%1
set /A factorial=1
:1
set /A n0=%n%-1
set /A factorial=%factorial%*%n%*%n0%
set/A n=%n0%
if n0==1 goto 2
:goto1
:2
echo Factorial de %1 es %factorial%

nhaalclkiemr

para el parametro usa la variable %1

hice este code a ver si te sirve:

Código (dos) [Seleccionar]

@echo off
If "%1"=="" exit /b
set /a x=%1*1
if not "%1"=="%x%" exit /B
If %1 LSS 0 (
echo Error, no existe el factorial de un numero negativo
pause>NUL
exit
)
If %1 GTR 12 (
echo El numero al que se le va calcular el factorial es mayor que 12
echo El resultado sera erroneo!!
)
echo.
set /a res=1
for /L %%I IN (2,1,%1) DO set /A res=%%I*res
echo El factorial de %1 es %res%
pause>NUL
exit


Ya te advierto que solo muestra el factorial de un numero menor o igual que 12, ya que si el numero es mayor que 12 su factorial desborda la variable y te muestra un resultado erroneo...si me apetece otro dia miro si puedo arreglarlo...espero k te sirva...

Un saludo ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

elboig

#2
muchas gracias :)

si alguien sabe retocar ese codigo para obtener el factorial de un numero superior a 12.. estaria muy bien jjeje es este:

@echo off
If "%1"=="" exit /b
set /a x=%1*1
if not "%1"=="%x%" exit /B
If %1 LSS 0 (
echo Error, no existe el factorial de un numero negativo
pause>NUL
exit
)
If %1 GTR 12 (
echo El numero al que se le va calcular el factorial es mayor que 12
echo El resultado sera erroneo!!
)
echo.
set /a res=1
for /L %%I IN (2,1,%1) DO set /A res=%%I*res
echo El factorial de %1 es %res%
pause>NUL
exit

nhaalclkiemr

Jaja el code ya lo tenía puesto yo más arriba...

Yo pienso k no se puede pork las variables están limitadas a 32 bytes...contando numeros negativos, por lo k se keda en 16 bytes...

Aunke supongo k se podría expresar como producto de varios factores (k no desbordasen)...


por ejemplo: 15! = 479001600 * 2730

Pero no me apetece hacerlo...sería comprovar cada ciertas multiplicaciones si se desborda la variable y si lo hace almacena el valor y comienza otro...

weno de momento no me apetece hacerlo...algún día si lo hago lo pongo...

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%