Foros aprenderaprogramar.com
		Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Gatoxzerot en 05 de Junio 2023, 22:29
		
			
			- 
				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
 
 
- 
				Hola.
 
 A ver, toda la "magia" de contar los días transcurridos ocurre en este bucle
    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...."
 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:
 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.
 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
 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.
 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:
 diasAcumulados = 31 + 28 = 59
 Llegamos al mes 3, que también tiene 31 días acumulables:
 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
 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)
 
 
    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.