elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Función año bisiesto de 3 líneas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Función año bisiesto de 3 líneas.  (Leído 6,795 veces)
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
[Batch] Función año bisiesto de 3 líneas.
« en: 5 Mayo 2009, 04:02 am »

La otra vez había hecho una función para saber si un año es bisiesto o no, y tenía muchas líneas. Ahora la he escrito en menos.

Código:
@echo off

call :esBisiesto 2008
echo.2008 : bisiesto : %errorlevel%
call :esBisiesto 2000
echo.2000 : bisiesto : %errorlevel%
call :esBisiesto 1900
echo.1999 : bisiesto : %errorlevel%
pause
goto :eof

:esBisiesto
::Funcion para saber si un anyo es bisiesto o no
::Autor: Carlos
::Devuelve 1 si es bisiesto y 0 si no lo es.
::Recibe un argumento con el anyo.
::Ejemplo: call :esBisiesto 2008
::Ejemplo: call :esBisiesto 2000
::Ejemplo: call :esBisiesto 1900
::Para ver el retorno deben expandir errorlevel
@setlocal enableextensions disabledelayedexpansion
@set /a b="(!(%~1%%4)&!!(%~1%%100))|!(%~1%%400)"
@exit /b %b%


« Última modificación: 27 Julio 2009, 07:43 am por 0x0309 » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Función año bisiesto de 3 líneas.
« Respuesta #1 en: 5 Mayo 2009, 07:04 am »

Excelente 0x0309, aun no sabia como usar los ! en el SET /a.

Saludos.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
M a t t

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: [Batch] Función año bisiesto de 3 líneas.
« Respuesta #2 en: 5 Mayo 2009, 07:24 am »

Supongo que también funcionaría:

Código:
:esBisiesto
setlocal enableextensions
set /a "etc=%~1/4*4"
if "%~1" equ "%etc%" (exit /b 1) else (exit /b 0)
« Última modificación: 5 Mayo 2009, 07:29 am por M a t t » En línea

0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [Batch] Función año bisiesto de 3 líneas.
« Respuesta #3 en: 5 Mayo 2009, 16:00 pm »

Supongo que también funcionaría:

Código:
:esBisiesto
setlocal enableextensions
set /a "etc=%~1/4*4"
if "%~1" equ "%etc%" (exit /b 1) else (exit /b 0)

Nada que ver, el algoritmo de año bisiesto no dice solamente que sea divisible por 4, por ejemplo: 1900 no es año bisiesto, ya que es divisible por 100 pero no por 400.
En línea

M a t t

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: [Batch] Función año bisiesto de 3 líneas.
« Respuesta #4 en: 5 Mayo 2009, 16:24 pm »

Ahh, yo pensaba que un año es bisiesto si es divisible por 4 y nada más.

Excelente código.
« Última modificación: 12 Mayo 2009, 02:21 am por M a t t » En línea

0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [Batch] Función año bisiesto de 3 líneas.
« Respuesta #5 en: 5 Mayo 2009, 16:33 pm »

He actualizado el código levemente, he añadido la palabra disabledelayedexpasion, ya que cuando se llamaba a la función con la expansión retardada activada se producía un error que decía: Sobran o faltan paréntesis.
Cuando se hacía esto:
Código:
setlocal enabledelayedexpansion
call :esBisiesto 2009
rem se producía el error.
rem ahora ha sido corregido.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(Solucionado) [Batch] Randomizar lineas en un txt? « 1 2 »
Scripting
Eleкtro 17 12,359 Último mensaje 31 Mayo 2014, 09:06 am
por Dsalomon
Ejecutar lineas de batch desde C++
Programación C/C++
kamykaze 5 7,466 Último mensaje 29 Abril 2013, 00:13 am
por daryo
[BATCH]limite en el tamaño de lineas
Scripting
z_ane_666 3 3,383 Último mensaje 4 Julio 2013, 22:23 pm
por zikotik
Batch que copie todas las lineas menos la ultima
Scripting
santi810 1 2,077 Último mensaje 27 Diciembre 2013, 19:37 pm
por Eleкtro
Duplica los las lineas creadas con la funcion fopen()
PHP
archowl 5 2,995 Último mensaje 1 Diciembre 2016, 02:48 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines