FoxPro/Visual FoxPro - Saber cuando un año es bisiesto

   
Vista:

Saber cuando un año es bisiesto

Publicado por Daniel (13 intervenciones) el 07/04/2008 01:20:44
Hola a todos
En Java para citar un lenguaje cualquiera hay una formula
como la siguiente para saber si un año es bisiesto

if ((año % 4 == 0) && ((año % 100 != 0) || (año % 400 == 0)))
System.out.println("El año es bisiesto");
else
System.out.println("El año no es bisiesto");

Me podrían decir si se puede hacer algo parecido en
Foxpro para Windows y como...?

Un gran abrazo
Daniel(Argentina)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Saber cuando un año es bisiesto

Publicado por Plinio (7771 intervenciones) el 07/04/2008 03:44:57
Como siempre mas facil y mas rapido en fox

IF MOD(año,2) = 0 && Bisiesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Saber cuando un año es bisiesto

Publicado por Luighi (105 intervenciones) el 07/04/2008 17:24:46
La mayoría de los países usamos el Calendario Gregoriano
y para este calendario, la teoría establece que:

Un año es bisiesto si es divisible por 4, excepto el último de cada siglo (aquellos divisibles por 100), que para ser bisiestos, también deben ser divisibles por 400

Fuente: http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto

Entonces, traducido ésto a código Visual Foxpro, se interpretaría así:

IF MOD(año,4)=0 AND (MOD(año,100)#0 OR MOD(año,400)=0)
MESSAGEBOX('El año es bisiesto')
ELSE
MESSAGEBOX('El año no es bisiesto')
ENDIF

Precisamente la condición es la misma a la que usas en Java

y MOD() es una función propia de Visual Foxpro que devuelve el resto de dividir un número entre otro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Gonzalez

Saber cuando un año es bisiesto

Publicado por Mauricio Gonzalez (1368 intervenciones) el 08/04/2008 02:38:38
IIF(MOD(YEAR(DATE( )), 4) = 0, 'ES BISIESTO', 'NO ES BISIESTO')
Se usa 4 digitos para el año para evitar estar comparando años del siglo pasado con el actual, eje: 53 para 1953 y 08 para 2008
Espero te ayude esto, saludos!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Saber cuando un año es bisiesto

Publicado por Daniel (13 intervenciones) el 08/04/2008 04:41:44
Hola Mauricio
(Muchas gracias a Plinio y Luighi por responder)

Elegí para contestar tú post porque me pareció el mas conciso
y porqué es la manera que me mas me gusta para programar
(con la menor escritura posible lograr lo deseado).-
Pero me parece qué tú código tiene un error, según lo que vos
me propones el año 1800 es bisiesto pero según la cuenta qué
yo hago con la calculadora no lo es.-

Nota
Son bisiestos todos los años divisibles por 4, excluyendo los que sean divisibles por 100, pero no los que sean divisibles por 400.
------------------------------------------------------
año = 2008
DO WHILE.T.
sinobis = IIF(MOD(año, 4) = 0, 'ES BISIESTO', 'NO ES BISIESTO')
CLEAR
WAIT WINDOWS "" + ALLTRIM(STR(año)) + " " + sinobis
año = año - 4
IF año < 1800
EXIT
ENDIF
ENDDO
RETURN
------------------------------------------------------

Me podrias decir si a tú código le falta halgo o yo estoy equivocado...?

Un gran abrazo
Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Gonzalez

Saber cuando un año es bisiesto

Publicado por Mauricio Gonzalez (1368 intervenciones) el 08/04/2008 18:32:36
Daniel, no se si te has dado cuenta de algo, pero tu mismo me has dado la razon:
1800 segun mi rutina es bisiesto pero segun tu calculadora no lo es, que bueno que descubriste la excepcion a la regla, pero si tu dice que se excluyen los que sean divisibles por 100, pero no los que sean divisibles por 400.
1800 / 400 = 18 / 4 = 4.2 y mas fraccion hasta donde tu quieras....
entonces te recomiendo , poner antes del comando que te envie estos filtros y otros que descubras y la rutina que te envie te resultara:
IF SUBSTR(YEAR,6,2) = 0 && SUPONGAMOS QUE ES 1800
IF MOD(YEAR / 400) <> 0 && 1800 NO ENTRA...
IIF(MOD(YEAR(DATE( )), 4) = 0, 'ES BISIESTO', 'NO ES BISIESTO')
ENDIF
ENDIF
*---*
Bueno Daniel, espero que con esta nueva rutina si te funcione a la perfeccion, saludos!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar