Para un programa del curro, he tenido que hacer un calculador de plazos que calcule en días o meses y en días naturales, o laborables o judiciales (sábados no laborables).
Me he divertido un montón haciendo el algoritmo del cálculo y se me ha ocurrido que puede ser divertido para todos. Decir que no me ha gustado la solución que he hecho, aunque funciona, pero me gustaría ver, si alguno se atreve con el reto, cómo lo enfrenta.
Para hacerlo más fácil, os adjunto un proyecto que ya lo lleva todo salvo el algoritmo:
Por supuesto, el día calculado tampoco puede ser ni festivo ni no laborable según el tipo de cómputo.
Se me animen que no es tan difícil y es divertido. Mi solución no tiene más de 30 líneas.
El Reto De Los Calendarios
Subject: El Reto De Los Calendarios
Last edited by shordi on Saturday, 11 April 2015, 09:04; edited 1 time in total
Last edited by shordi on Saturday, 11 April 2015, 09:04; edited 1 time in total
Retocalendarios-0.0.1.tar.gz | ||
Description: | Download |
|
Filename: | Retocalendarios-0.0.1.tar.gz | |
Filesize: | 4.3 KB | |
Downloaded: | 91 Time(s) |
Retocalendarios-0.0.1.tar.gz | ||
Description: | Download |
|
Filename: | Retocalendarios-0.0.1.tar.gz | |
Filesize: | 4.3 KB | |
Downloaded: | 91 Time(s) |
Retocalendarios-0.0.1.tar.gz | ||
Description: | Download |
|
Filename: | Retocalendarios-0.0.1.tar.gz | |
Filesize: | 4.3 KB | |
Downloaded: | 91 Time(s) |
Subject: Re: El Reto De Los Calendarios
Last edited by Shell on Saturday, 11 April 2015, 08:53; edited 1 time in total
¿ Cómo te apañaste con los festivos ?. ¿ Festivos nacionales ?.
Si hablamos de fiestas de cada región, varía un poco la cosa. Jeje..:-D
Día hábil y natural
Saludos
Si hablamos de fiestas de cada región, varía un poco la cosa. Jeje..:-D
Día hábil y natural
Saludos
Last edited by Shell on Saturday, 11 April 2015, 08:53; edited 1 time in total
Subject: Re: El Reto De Los Calendarios
Pues con una tabla de festivos (en el ejemplo del reto la función la hace el listbox, al que he tecleado los festivos de Castilla-la mancha para 2015). Nosotros trabajamos sólo en Castilla-La Mancha y Madrid, por lo del Supremo y la audiencia Nacional, pero se puede introducir cualquier comunidad Autónoma. A lo de las fiestas locales no he llegado, pero tras comentarlo con los abogados hemos llegado a la conclusión de que no es importante: si hay alguna fiesta local, símplemente se calcula un plazo inferior en un día al plazo real, cosa que no es grave. (Al revés sería terrible)
Esta es la pantalla del programa que les permite reiniciar el año y meter las fiestas haciendo doble click en cada día.
Ellos seleccionan la comunidad Autónoma y meten todas las fiestas. Se tarda unos dos minutos al inicio del año.
Citar:
Pues con una tabla de festivos (en el ejemplo del reto la función la hace el listbox, al que he tecleado los festivos de Castilla-la mancha para 2015). Nosotros trabajamos sólo en Castilla-La Mancha y Madrid, por lo del Supremo y la audiencia Nacional, pero se puede introducir cualquier comunidad Autónoma. A lo de las fiestas locales no he llegado, pero tras comentarlo con los abogados hemos llegado a la conclusión de que no es importante: si hay alguna fiesta local, símplemente se calcula un plazo inferior en un día al plazo real, cosa que no es grave. (Al revés sería terrible)
Esta es la pantalla del programa que les permite reiniciar el año y meter las fiestas haciendo doble click en cada día.
Ellos seleccionan la comunidad Autónoma y meten todas las fiestas. Se tarda unos dos minutos al inicio del año.
Subject: Re: El Reto De Los Calendarios
Buena idea el uso de la tabla.
Hay fiestas como la semana santa que se puede calcular. En este ejemplo se calcula el domingo de pascua.
Habría que restar siete días para el Domingo de Ramos.
Saludos
Hay fiestas como la semana santa que se puede calcular. En este ejemplo se calcula el domingo de pascua.
'El algoritmo de esta aplicación permite determinar la fecha de la Pascua (día y mes).
'Es valido desde el año 1583, siguiente a la implantación del calendario Gregoriano.(15/10/1582) "dd/mm/yy".
'El calendario gregoriano acumula un error de un día al cabo de 3314 años.
'Luego el equinoccio de primavera (21 de marzo) del año 1582 + 3314 = 4896 tendra lugar el dia
'20 de marzo (un día antes)
'Por este motivo este algoritmo no es valido para calcular la Pascua de los años posteriores al 4896.
'
'Las fechas extremas de la Pascua son el 22 de marzo (cae en esta fecha si el 22 es domingo) y 25 de Abril
'(cae en esta fecha si el 20 de Marzo es plenilunio.)
'Luego la Pascua puede caer en cualquier día que se encuentre dentro de ambas fechas mencionada (35 días de variación)
Private meses As String[] = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
Private q As Integer
Private z As Integer
Private r As Integer
Private y As Integer
Public Sub _new()
End
Public Sub Form_Open()
Me.Center
End
Public Sub BtnAyuda_Click()
FormAyuda.ShowModal()
End
Public Sub btnCalcular_Click()
Dim a, b, c, d, e, f, g, h, i, k, j, l, m, n, x As Integer
If IsNumber(txtyear.Text) Then
x = CInt(txtyear.Text)
Else
txtyear.Text = ""
Return
Endif
If x < 1583 Or x >= (1582 + 3314) Then
txtyear.Text = ""
Return
Endif
z = x
y = 19
Calculo
a = r
z = x
y = 100
Calculo
b = q
c = r
z = b
y = 4
Calculo
d = q
e = r
z = b + 8
y = 25
Calculo
'Limite
z = 32 + 2 * e + 2 * i - h - j
y = 7
Calculo
k = r
z = a + 11 + h + 22 * k
y = 451
Calculo
l = q
z = h + k - 7 * l + 114
y = 31
Calculo
m = q - 1 'resto 1 para indice 0
n = r
'Limite
f = q
z = b - f + 1
y = 3
Calculo
g = q
z = 19 * a + b - d - g + 15
y = 30
Calculo
h = r
z = c
y = 4
Calculo
i = q
j = r
z = 32 + 2 * e + 2 * i - h - j
y = 7
Calculo
k = r
z = a + 11 + h + 22 * k
y = 451
Calculo
l = q
z = h + k - 7 * l + 114
y = 31
Calculo
m = q - 1 'resto 1 para indice 0
n = r
Message.Info("La pascua del año " & x & " es el día " & (n + 1) & " del més de " & meses[m])
End
Public Sub Calculo()
q = Int(z / y)
r = z Mod y
End
'Es valido desde el año 1583, siguiente a la implantación del calendario Gregoriano.(15/10/1582) "dd/mm/yy".
'El calendario gregoriano acumula un error de un día al cabo de 3314 años.
'Luego el equinoccio de primavera (21 de marzo) del año 1582 + 3314 = 4896 tendra lugar el dia
'20 de marzo (un día antes)
'Por este motivo este algoritmo no es valido para calcular la Pascua de los años posteriores al 4896.
'
'Las fechas extremas de la Pascua son el 22 de marzo (cae en esta fecha si el 22 es domingo) y 25 de Abril
'(cae en esta fecha si el 20 de Marzo es plenilunio.)
'Luego la Pascua puede caer en cualquier día que se encuentre dentro de ambas fechas mencionada (35 días de variación)
Private meses As String[] = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
Private q As Integer
Private z As Integer
Private r As Integer
Private y As Integer
Public Sub _new()
End
Public Sub Form_Open()
Me.Center
End
Public Sub BtnAyuda_Click()
FormAyuda.ShowModal()
End
Public Sub btnCalcular_Click()
Dim a, b, c, d, e, f, g, h, i, k, j, l, m, n, x As Integer
If IsNumber(txtyear.Text) Then
x = CInt(txtyear.Text)
Else
txtyear.Text = ""
Return
Endif
If x < 1583 Or x >= (1582 + 3314) Then
txtyear.Text = ""
Return
Endif
z = x
y = 19
Calculo
a = r
z = x
y = 100
Calculo
b = q
c = r
z = b
y = 4
Calculo
d = q
e = r
z = b + 8
y = 25
Calculo
'Limite
z = 32 + 2 * e + 2 * i - h - j
y = 7
Calculo
k = r
z = a + 11 + h + 22 * k
y = 451
Calculo
l = q
z = h + k - 7 * l + 114
y = 31
Calculo
m = q - 1 'resto 1 para indice 0
n = r
'Limite
f = q
z = b - f + 1
y = 3
Calculo
g = q
z = 19 * a + b - d - g + 15
y = 30
Calculo
h = r
z = c
y = 4
Calculo
i = q
j = r
z = 32 + 2 * e + 2 * i - h - j
y = 7
Calculo
k = r
z = a + 11 + h + 22 * k
y = 451
Calculo
l = q
z = h + k - 7 * l + 114
y = 31
Calculo
m = q - 1 'resto 1 para indice 0
n = r
Message.Info("La pascua del año " & x & " es el día " & (n + 1) & " del més de " & meses[m])
End
Public Sub Calculo()
q = Int(z / y)
r = z Mod y
End
Habría que restar siete días para el Domingo de Ramos.
Saludos
FechaSemanaSanta2.tar.gz | ||
Description: | Download |
|
Filename: | FechaSemanaSanta2.tar.gz | |
Filesize: | 8.13 KB | |
Downloaded: | 92 Time(s) |
FechaSemanaSanta2.tar.gz | ||
Description: | Download |
|
Filename: | FechaSemanaSanta2.tar.gz | |
Filesize: | 8.13 KB | |
Downloaded: | 92 Time(s) |
FechaSemanaSanta2.tar.gz | ||
Description: | Download |
|
Filename: | FechaSemanaSanta2.tar.gz | |
Filesize: | 8.13 KB | |
Downloaded: | 92 Time(s) |
Page 1 of 1
You cannot post new topicsYou cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events
This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Generation Time: 0.1716s (PHP: -7% SQL: 107%)
SQL queries: 27 - Debug Off - GZIP Enabled