if A GTR 0
if B GTR 0
...ACCIONES...si a > b
si a > c
mayor = a
si_no
mayor = c
finSi
si_no
si b>c
mayor = b
si_no
mayor = c
finSiif <cond> (
if <cond> (
...
) else (
...
)
) else (
...
)@ECHO OFF
IF %3 GTR %2 SHIFT /2
IF %2 GTR %1 SHIFT
ECHO El mayor es %1
el problema lo tengo el mas a bajo del programa en la parte de comprobar que parametros es mayor que no me entra en los else
@echo off
rem autor:ivan Garcia Miranda
rem fecha: 26 de mayo de 2011
echo ############################################
echo # Programa que pide 3 numeros por parametro#
echo # y calcula el mayor numero #
echo ############################################
echo la variable 1 es %1
echo la variable 2 es %2
echo la variable 3 es %3
echo.
if "%1"=="" goto falta1
if "%2"=="" goto falta2
if "%3"=="" goto falta3
goto calcula1
:calcula1
if %1 GTR 99 goto error
if %1 LSS 1 goto error
if %2 GTR 99 goto error
if %2 LSS 1 goto error
if %3 GTR 99 goto error
if %3 LSS 1 goto error
goto calcula
:calcula
if %3 GTR %2 shift /2
if %2 GTR %1 shift
echo el numero mayor es: %1
goto salir
:error
echo los parametros introducidos no estan entre 1 y 99
echo.
goto salir
:falta1
echo no existe el parametro 1
echo.
goto salir
:falta2
echo no existe el parametro 2
echo.
goto salir
:falta3
echo no existe el parametro 3
echo.
goto salir
:salir
echo.
echo programa creado por Ivan Garcia
echo.
echo ###################
echo # fin del programa#
echo ###################
), por si puedes sacar alguna idea, aunque Deschamps me ha dejado a la altura del betún usando así los parámetros, no se me había ocurrido
Básicamente he usado funciones para no repetir código.@echo off
cls
set "result=ok"
call:check_param result %1
call:check_param result %2
call:check_param result %3
if "%result%"=="ko" goto error_param
call:max result %1 %2
call:max result %result% %3
echo.El mayor numero entre %1, %2 y %3 es %result%
goto exit
:check_param
if "%~2"=="" (set "%~1=ko" & goto:eof)
if %~2 GTR 99 (set "%~1=ko" & goto:eof)
if %~2 LSS 1 (set "%~1=ko" & goto:eof)
goto:eof
:error_param
echo Error: Debes introducir 3 enteros entre el 1 y el 99, ambos incluidos
goto exit
:max
if %~2 GTR %~3 (
set "%~1=%~2" & goto:eof
) else (
set "%~1=%~3" & goto:eof
)
:exitamuchamu escribió:... ya que lo has hecho, pongo el que he hecho yo (sólo quería probar, hace un lustro que no toco batch ...
@ECHO OFF
IF [%3] EQU [] (
ECHO Faltan datos
GOTO:EOF )
SET PARAM=1
GOTO VALIDAR
:VALIDADO1
SET PARAM=2
GOTO VALIDAR
:VALIDADO2
SET PARAM=3
GOTO VALIDAR
:VALIDADO3
IF %3 GTR %2 SHIFT /2
IF %2 GTR %1 SHIFT
ECHO El valor mayor es %1
GOTO:EOF
:VALIDAR
CALL SET DATO=%%%PARAM%%%
IF %DATO% LEQ 99 ( IF %DATO% GEQ 1 GOTO VALIDADO%PARAM% )
ECHO El parámetro %PARAM% no es correcto