Autor Tema: Explicacion y hacer un algoritmo segun las fechas designadas en pseint  (Leído 954 veces)

Gatoxzerot

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Buenas tardes, me encuentro estudiando mas el pseint pero hay algunas cosas que no entiendo su definicion o logica. El otro dia con el profesor nos enseño un algoritmo para hallar los dias trasncurridos del año y los dias que faltaban para acabarse, al terminarlo no termino de convencerme al 100% su logica de como es que funciona, por lo cual me podrían explicar por favor. Por otra parte como ejercicio nos dejo hacer, lo mismo solo que esta ves entre 2 fechas designadas calcular los dias que ella tiene. Otra cosa importante a considerar es que no utilizamos los comandos completos, solo hasta el "para" de ahi "funcion" aun no nos enseña, asi como tampoco utilizamos otras palabras que sirven para programar, apenas utilizamos verdadero y falso nomas. Sin mas que decir, mediante este algoritmo, me pueden explicar y formular entre 2 fechas, gracias. :'(
Algoritmo:

Algoritmo DIAS_TRANSCURRIDOS
   // REPORTE EL NÚMERO DE DÍAS QUE TRANCURRIERON DESDE EL
   // PRIMER DÍA ÚTIL DEL AÑO.
   // EJM.: INGRESE FECHA: 30/12/2023 REPORTE: 364
   Definir D, DD, M, MM, TD Como Entero
   Definir OK Como Logico
   OK <- Falso
   Repetir
      Escribir "INGRESE MES [1..12]: "
      Leer M
   Hasta Que M >= 1 Y M <= 12
   Repetir
      Escribir "AHORA DÍA [1..31]: "
      Leer D
      Segun M Hacer
         1,3,5,7,8,10,12:
            Si D >= 1 y D <= 31 Entonces
               // DD <- 31
               OK <- Verdadero
            SiNo
               Escribir "Día ingresado incorrecto. Vuelva a intentarlo!"
            FinSi
         4,6,9,11: DD <- 30
            Si D >= 1 y D <= 30 Entonces
               // DD <- 30
               OK <- Verdadero
            SiNo
               Escribir "Día ingresado incorrecto. Vuelva a intentarlo!"
            FinSi
         De Otro Modo:
            Si D >= 1 y D <= 28 Entonces
               // DD <- 28
               OK <- Verdadero
            SiNo
               Escribir "Día ingresado incorrecto. Vuelva a intentarlo!"
            FinSi
      Fin Segun
   Hasta Que OK
   TD <- 0   // INICIALIZAR ACUMULADOR DE TOTAL DE DIAS
   Para MM <- 1 Hasta M-1 Con Paso 1 Hacer
      Segun MM Hacer
         1,3,5,7,8,10,12: DD <- 31
         4,6,9,11: DD <- 30
         De Otro Modo:
            DD <- 28
      Fin Segun
      TD <- TD + DD   // ACTUALIZAR ACUMULADOR DE TOTAL DE DIAS
   Fin Para
   Escribir "EL TOTAL DE DÍAS TRANSCURRIDOS ES ", TD + D
   Escribir "FALTAN ", 365 - TD - D, " DIÁS PARA CULMINAR AÑO 2023"
FinAlgoritmo


Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Hola.

A ver, toda la "magia" de contar los días transcurridos ocurre en este bucle
Código: [Seleccionar]
   TD <- 0   // INICIALIZAR ACUMULADOR DE TOTAL DE DIAS
   Para MM <- 1 Hasta M-1 Con Paso 1 Hacer
      Segun MM Hacer
         1,3,5,7,8,10,12: DD <- 31
         4,6,9,11: DD <- 30
         De Otro Modo:
            DD <- 28
      Fin Segun
      TD <- TD + DD   // ACTUALIZAR ACUMULADOR DE TOTAL DE DIAS
   Fin Para

Lo que hace es recorrer los meses completos que hay desde enero hasta el mes de la fecha introducida y acumular los días que tienes cada uno de esos mes.

Algunos meses pueden tener 31 días, otros pueden tener 30 y luego está Febrero que tiene 28 (29 si es año bisiesto, pero esto no se está teniendo en cuenta para simplificar)
Para esto, se usá el "Según...."
Citar
Segun MM Hacer
         1,3,5,7,8,10,12: DD <- 31
         4,6,9,11: DD <- 30
         De Otro Modo: (Febrero)
            DD <- 28
      Fin Segun

Una vez se han acumulado los días de esos meses completos, solo queda sumar los días del último mes "no completo", es decir, los días indicados en la fecha que ha introducido el usuario.

Imagina que nos dan la fecha 05/04/2023.
Comenzamos de momento con 0 días acumulados:
Código: [Seleccionar]
diasAcumulados = 0
Bien, el bucle recorre todos los meses completos hasta el mes indicado, que no estará completo y por tanto no cuenta en el bucle.
Código: [Seleccionar]
Para MM <- 1 Hasta M-1 Con Paso 1 HacerEs decir, nos han dado el mes 4, pues el bucle va a recorrer los meses 1,2 y 3

Empezamos por el mes 1(Enero), ¿cuántos días tiene?.
Pues mediante el "Según..." vemos que tiene 31 días
Citar
Segun MM Hacer
         1,3,5,7,8,10,12: DD <- 31
         4,6,9,11: DD <- 30
         De Otro Modo: (Febrero)
            DD <- 28
      Fin Segun

Por tanto, acumulamos 31 días a los 0 días iniciales.
Código: [Seleccionar]
diasAcumulados = 0 + 31 = 31
Pasamos al siguiente mes, el 2, que el "Según..." nos dice que tiene 28 días más para acumular:
Código: [Seleccionar]
diasAcumulados = 31 + 28 = 59
Llegamos al mes 3, que también tiene 31 días acumulables:
Código: [Seleccionar]
diasAcumulados = 59 + 31 = 90
Ok, ya hemos recorrido todos los meses completos, los 1,2 y 3.
El 4 no está completo, pero como la fecha indicada es 05/04/2023, pues sabemos que de este cuarto mes han transcurrido 5 días, así que los acumulamos también
Código: [Seleccionar]
diasAcumulados = 90 + 5 = 95
Y ya tenemos el resultado. Desde el 01/01/2023 hasta el 05/04/2023, han transcurrido 95 días.


Supongamos estas dos fechas
Inicio = 05/03/2023
Fin = 23/06/02023
Hacer lo mismo entre dos fechas indicadas por el usuario, básicamente es el mismo procedimiento.
Solo cambia que ahora el bucle "Para..." no comienza en el mes 1. Ha de comenzar en el mes indicado en la fecha de inicio (se puede llamar Mi) hasta el mes indicado como fecha final(Mf)


Citar
   Para MM <- Mi Hasta Mf-1 Con Paso 1 Hacer
      Segun MM Hacer
         1,3,5,7,8,10,12: DD <- 31
         4,6,9,11: DD <- 30
         De Otro Modo:
            DD <- 28
      Fin Segun
      TD <- TD + DD   // ACTUALIZAR ACUMULADOR DE TOTAL DE DIAS
   Fin Para

Cuando termine el bucle, igual que en el ejercicio de antes, habrá que sumar a los días acumulados los días indicados en la fecha Final.

Pero además, habrá que RESTAR los días indicados en la fecha de Inicio.
Hemos propuesto como ejemplo esta fecha de inicio: 05/03/2023
En el bucle "Para...", el mes 3 lo hemos contado como si fuera un mes completo y hemos acumulado 31 días para ese mes.
Pero no es correcto, porque la fecha comienza el día 5. Así que esos 5 días habría que restarlos al total acumulado.

Por tanto, al terminar el bucle, al total acumulado hay que sumarle los días de la fecha Final (Df) y restarle el día indicado en la fecha de Inicio(Di).


Otra diferencia es que convendría validar que la fecha que te han dado como fecha Inicial, es realmente anterior a la fecha que te dan como Final.

Pero yo antes que eso, me ocuparía de conseguir hacer bien el cálculo entre dos fechas indicados por el usuario.
Y ya luego, si hubiera tiempo, añadir código para validar las fechas indicadas.

Espero que hayas entendido la lógica de estos procesos. Intenta desarrollar el código y comparte por aquí si no te sale, a ver si podemos ayudarte.

Saludos.
« Última modificación: 06 de Junio 2023, 18:01 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".