Reto 11: El reto de ... Horus [Básico]

En esta sección plantearemos distintos retos para todos aquellos que lo quieran intentar resolver y mejorar su conocimiento de Access ;-)
emiliove
Colaborador
Reto04
Mensajes: 320
Registrado: Lun Nov 23, 2015 4:05 pm

Re: Reto 11: El reto de Horus

Mensajepor emiliove » Jue Jul 13, 2017 8:13 pm

Hola ximo

Yo por facilidad lo hice en excel (por mientras), puedes decir el(los) día(s) que te falla(n), para ver si a mi también.

Saludos.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 965
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Reto 11: El reto de Horus

Mensajepor Sveinbjorn » Jue Jul 13, 2017 8:26 pm

¡¡Emilio!!, ¡en Excel no vale!!!! ¡¡El reto es en Access!!! :lol: :lol: :lol:
Sveinbjorn El Rojo

Avatar de Usuario
ximo
Nivel 3
Reto08
Mensajes: 86
Registrado: Mar Dic 15, 2015 4:19 pm

Re: Reto 11: El reto de Horus

Mensajepor ximo » Jue Jul 13, 2017 10:33 pm

Hola Emilio,

Por ejemplo la fecha de hoy 13/7/2017 'Viernes', en fechas recientes siempre me da el día despues, en la fecha original del ejemplo 22/6/1983 la clava, Miércoles, si me voy a principios de siglo, 29/2/1908 va bien 'Sábado', hay que ir probando fechas al azar pero a mi personalmente me falla, incluso con tres versiones diferentes del original.

Sigo peleandome con ello, a ver si pillo el fallo/error y así poder mostrar tres o cuatro versiones de lo mismo.


Saludos, ximo
La incansable busqueda de información abre nuestras mentes.
http://www.numisoftware.com

Avatar de Usuario
Administrador
Administrador
Mensajes: 194
Registrado: Sab Oct 24, 2015 12:55 pm

Re: Reto 11: El reto de Horus

Mensajepor Administrador » Jue Jul 13, 2017 11:30 pm

Ximo, por supuesto que el algoritmo del reto está probado y requeteprobado y el funciona perfectamente (por Antonio, por nosotros y en las soluciones que nos han hecho llegar ya algunos usuarios)

Si no te funciona, es que algo no tienes bien en tu solución, obviamente. Repásalo con calma, que hasta agosto tienes tiempo.

Y por favor, en el hilo del foro publicad, mientras no esté finalizado, solo dudas relacionadas con el reto, no lo useis para comentar vuestro progreso en el mismo con mensajes tipo: "esto no me sale...", "ahora me sale casi bien..."
Ya veremos vuestra solución cuando nos la presenteis, y ya comprobaremos si funciona o no. ;)

Un saludo.
La Administración de Dudas Access Foro

JTrilloJ
Nivel 3
Reto05
Mensajes: 52
Registrado: Mar Dic 01, 2015 3:27 pm

Re: Reto 11: El reto de Horus

Mensajepor JTrilloJ » Vie Jul 14, 2017 4:19 pm

Ximo: La verdad es que en 1908 yo era un poco más joven que ahora y no recuerdo el día de la semana de una Fecha.
La de ayer si que recuerdo que era Jueves y hasta donde yo he llegado con las pruebas, esa está superada.
Un saludo y disculpa la broma.
Jacinto

Avatar de Usuario
Administrador
Administrador
Mensajes: 194
Registrado: Sab Oct 24, 2015 12:55 pm

Re: Reto 11: El reto de Horus

Mensajepor Administrador » Dom Ago 27, 2017 8:17 pm

Buenas tardes, amigas y amigos de Access!!

¿Qué mejor manera de despedir el último domingo de agosto con la solución al reto de este verano? :lol: :lol:

Primero unos comentarios “generales”:

El primer punto a mencionar es las distintas formas de lidiar con el “truco”: unos optasteis, como nosotros, por usar la división entera (\), mientras que otros optasteis por usar la función Int() o la función Fix().
Nos gustaría recordar que estas dos funciones no son exactamente idénticas, y si bien para valores positivos coinciden en el resultado, no así en los negativos, pues Int() devuelve el primer entero negativo menor o igual que el número, mientras que Fix() devuelve el primer entero negativo mayor o igual que el número.
Con un ejemplo queda más claro:
Int(-8,4) devuelve -9
Fix(-8,4) devuelve -8


También hemos visto una "sana preocupación" por controlar si los valores introducidos correspondían a una fecha válida. Os animamos a echar un ojo a cómo cada uno ha resuelto este tema. Como nos ha llamado la atención este punto nos gustaría remarcar de forma genérica los diversos sistemas que hemos visto (los mostramos sin un orden en concreto), añadiendo una de nuestra cosecha:
1.- Controlando cada uno de los elementos que conforman la fecha (soluciones de javi, ximo y lunasoft)
2.- Cerrando la introducción del valor a que sea, sí o sí, una fecha válida (solución de Marta)
3.- Dejando que Access controle la validez de la entrada a través del formato del textbox (solución de JTrilloJ)
4.- Salvo que se quiera expresamente indicar si el fallo está en el día, en el mes o en el año, tenéis a vuestra disposición la función IsDate(), que permite el control "en bloque" del valor introducido. Sería algo tan simple como, por ejemplo, algo así:

Código: Seleccionar todo

If Not IsDate(datos_en_formato_de_fecha) Then
MsgBox "Fecha errónea"
Exit Sub/Function
End if


Y ahora unos comentarios “particulares” a los participantes:

LunaSoft: solución reto
Ojo con la declaración de variables del módulo: DiaIntro y MesIntro, así declaradas, son Variant, mientras que YearIntro es Integer. Lo mismo para las variables OpX.
El control de la fecha errónea a través del Select Case es un tanto farragoso. Lo hubieras podido controlar simplemente usando IsDate(), con lo cual el control del mes se podría quedar en un If-ElseIf o un Select muy simple.

-Marta-: solución reto
Bonita manera de mostrar los resultados, no solo el final, sino los pasos intermedios.

Ximo: solución reto
Como el reto le debía parecer demasiado sencillo ( :roll: :lol: :lol: :lol: ) nos propone cuatro formas adicionales de resolver el reto, además de la solicitada. Además, resalta que el reto está basado en la llamada "Congruencia de Zeller", cosa que no mencionamos en el enunciado. Además, añade una función para saber si el año es bisiesto (que, por si no lo sabíais, sigue el razonamiento que indica Microsoft para determinar precisamente si un año es bisiesto o no - https://support.microsoft.com/es-es/hel ... -leap-year -).

Javiteran: solución reto
Además de resolverlo para Access, nos muestra cómo se resolvería en lenguaje T-SQL para usar en SQLServer.

JTrilloJ: solución reto
También le debía de parecer muy sencillo ( 8-) ;) ) y lo “complicó” añadiendo un santoral y efemérides para el día seleccionado.

Y aquí os dejamos el archivo con nuestras soluciones.

¡Ah! ¡Que se nos pasaba...! :? ... Todos habéis superado el reto. ¡¡¡Enhorabuena!!

Nos vemos en el próximo, que será más complicadillo.... :twisted: :twisted: :twisted:
La Administración de Dudas Access Foro

Avatar de Usuario
lunasoft
Nivel 3
Reto02
Mensajes: 56
Registrado: Mié Jun 21, 2017 3:45 pm

Re: Reto 11: El reto de Horus

Mensajepor lunasoft » Lun Ago 28, 2017 7:54 am

Gracias por la evaluación. Mi primer reto. :D :D :D :D

El motivo de no utilizar Isdate fue el comentario:

El reto consiste el desarrollar el algoritmo del enunciado y será lo que "evaluemos".

Ahora que si quieres (tú o cualquier otro/a con ganas) divagar y buscar un método alternativo, sin usar, directa o indirectamente, las funciones de fechas o formato predeterminadas de Access (Weekday, DateSerial, Format....) y presentarlo también, ¡adelante!. ¡Seguro que es interesante de ver!


En esta exclusión pensé que también estaba IsDate.

Espero ansioso el siguiente
Lunasoft

Avatar de Usuario
Neckkito
Moderador
Mensajes: 758
Registrado: Dom Oct 25, 2015 3:42 pm

Re: Reto 11: El reto de Horus

Mensajepor Neckkito » Lun Ago 28, 2017 8:47 am

Je, je... ¡Más papista que el Papa! :D

El uso de la función IsDate(), en este contexto, es para controlar la introducción del valor y es "ajeno" a lo que es el proceso solicitado en sí mismo. Dicho de otro modo, no interviene en las operaciones para calcular el resultado.

Es por ello por lo que, desde mi punto de vista, hubiera sido legítimo utilizarlo. Imagino que Svein estará de acuerdo conmigo :roll:

Pero bueno... buena apreciación ;)

Saludos.
Access MVP 2017-2019
http://bit.ly/NckAccess

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 965
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Reto 11: El reto de Horus

Mensajepor Sveinbjorn » Lun Ago 28, 2017 9:20 am

Totalmente de acuerdo, la limitación era para el proceso cálculo del día.

De todas formas, como ya nos olíamos que no iba a ser un tema pacífico, por eso hicimos la solución NkSv, en la que no se usan tampoco las funciones Day(), Month() y Year() para trocear la fecha de entrada y luego realizar los cálculos, como en la solución Svein o la de Horus.

También hubiera sido correcto que la función realice únicamente el cálculo del día de la semana y hacer las validaciones de fecha previamente a llamar a la función, por ejemplo:

Código: Seleccionar todo

Private Sub cmdCalcular_Click()
If Not IsDate(Me.txtFecha) Then
    MsgBox "Fecha incorrecta",vbOkOnly
    Me.txtFecha.SetFocus
Else
    Me.txtDiaSemana=fncCalculaDia(Me.txtFecha)
End If
End Sub


Saludos!
Sveinbjorn El Rojo

Avatar de Usuario
ximo
Nivel 3
Reto08
Mensajes: 86
Registrado: Mar Dic 15, 2015 4:19 pm

Re: Reto 11: El reto de Horus

Mensajepor ximo » Lun Ago 28, 2017 7:06 pm

Hola,

Veo que en la solución del creador (Horus) se usan las funciones (Day, Month y Year) cuando eran un pecado mortal en vez de venial :twisted: :twisted: :twisted: pero bien bromas aparte me lo he pasado genial :lol: :lol: :lol:


Saludos, ximo
La incansable busqueda de información abre nuestras mentes.
http://www.numisoftware.com


Volver a “El Reto de NkSv”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado