Aprendiendo a programar programando

    cabecera

terepebernal.com

Funciones de fecha en Pseudocódigo con PSeInt

Comparte si quieres

TwitterFacebookLinkedInWhatsApp


En este post podrás ver varios ejemplos de PSeInt, todas las funciones de fecha en pseudocódigo con PSeInt que he ido fabricando al escribir los post sobre Pseudocódigo y PSeInt de este blog. Son funciones relacionadas con fechas que pueden ser útiles y reutilizadas para futuros algoritmos, las he reunido aquí, para tenerlas más a mano. De surgir más las iré añadiendo en este post.

Ilustración calendarioAl seleccionar una función se muestra una descripción de lo que hace, un ejemplo y el código correspondiente.

Función dayWeekText

Esta función recibe el día de la semana (dW) como un número y lo devuelve (dWT) como texto. Si la función recibiera un número distinto de valores entre 1 y 7, devolvería un mensaje de error advirtiéndolo.

Ejemplo
Definir diaNumero Como Entero;
Definir diaTexto Como Cadena;
Escribir "Número (1 - 7): " Sin Saltar;
Leer diaNumero;

        diaTexto = dayWeekText(diaNumero);
Escribir "El día de la semana es: " + diaTexto;
Pseudocódigo
Funcion dWT <- dayWeekText(dW)
   // Declarar variables
   Definir dWT Como Cadena;

   Segun dW Hacer
       1:
          dWT="LUNES";
       2:
          dWT="MARTES";
       3:
          dWT="MIÉRCOLES";
       4:
          dWT="JUEVES";
       5:
          dWT="VIERNES";
       6:
          dWT="SÁBADO";
       7:
          dWT="DOMINGO";
       De Otro Modo:
          dWT="ERROR. EL DÍA DE LA SEMANA DEBERÍA ESTAR ENTRE LOS VALORES 1 Y 7.";
   Fin Segun
FinFuncion

Función monthText

Esta función recibe el mes (month) como un número y lo devuelve (mT) como texto. Si la función recibiera un valor distinto entre los valores 1 y 12, devolvería un mensaje de error advirtiéndolo.

Ejemplo
Definir mesNumero Como Entero;
Definir mesTexto Como Cadena;

Escribir "Número (1 - 12): " Sin Saltar;
Leer mesNumero;

mesTexto = monthText(mesNumero);
Escribir "El mes es: " + mesTexto;
Pseudocódigo
Funcion mT <- monthText(month)
   // Declara la variable mT, para contener el texto
   // del mes que corresponda y devolverlo
   Definir mT Como Cadena;
   // Dependiendo del número de mes, se le asigna a mT el texto correspondiente
   Segun month  Hacer
      1:
         mT = 'ENERO';
      2:
         mT = 'FEBRERO';
      3:
         mT = 'MARZO';
      4:
         mT = 'ABRIL';
      5:
         mT = 'MAYO';
      6:
         mT = 'JUNIO';
      7:
         mT = 'JULIO';
      8:
         mT = 'AGOSTO';
      9:
         mT = 'SEPTIEMBRE';
      10:
         mT = 'OCTUBRE';
      11:
         mT = 'NOVIEMBRE';
      12:
         mT = 'DICIEMBRE';
      De Otro Modo:
         mT = "ERROR. EL MES DEBERÍA ESTAR ENTRE LOS VALORES 1 Y 12.";
      FinSegun
FinFuncion

Función isLeapYear

Esta función recibe el año (year) y devuelve la variable (lY) de tipo booleano. Dependiendo de si el año es bisiesto o no, devolverá true o false. El año deberá estar entre los valores 1601 y 3000. Para ejecutarse correctamente necesitará la función yearOk.

Ejemplo
Definir anio Como Entero;
Definir OK, esBisiesto Como Logico;

Escribir "Año: " Sin Saltar;
Leer anio;

OK = yearOk(anio);
Si OK Entonces
   esBisiesto = isLeapYear(anio);

   Si esBisiesto Entonces
      Escribir "El año " + ConvertirATexto(anio) + " es bisiesto";
   SiNo
      Escribir "El año " + ConvertirATexto(anio) + " no es bisiesto";
   FinSi
SiNo
   Escribir "El año debe estar entre los valores 1601 y 3000.";
FinSi
Pseudocódigo
Funcion lY <- isLeapYear(year)
   Definir lY, OK Como Logico;

   OK = yearOk(anio);
   Si OK Entonces
      // Si el año es múltiplo de 4
      Si (year MOD 4==0) Entonces
         lY = Verdadero;
         // Si además es múltiplo de 100 y de 400
         Si ((year MOD 100!=0) O (year MOD 400==0)) Entonces
            lY = Verdadero;
         SiNo
            lY = Falso;
         FinSi
      SiNo
         lY = Falso;
      FinSi
   SiNo
      Escribir "ERROR. EL AÑO DEBE ESTAR ENTRE LOS VALORES 1601 Y 3000.";
   FinSi
FinFuncion

Función firstDayYear

Esta función recibe el año (year) y devuelve el día de la semana (dW), en formato número, en el que cae el primer día del año recibido en la variable year. El año deberá estar entre los valores 1601 y 3000, de lo contrario mostrará un mensaje de error advirtiéndolo. Para ejecutarse correctamente necesita las funciones yearOk e isLeapYear

Ejemplo
Definir anio Como Entero;
Definir diaSemana Como Entero;
Definir OK Como Logico;

Escribir "Año (1601 - 3000): " Sin Saltar;
Leer anio;

OK = yearOk(anio);

Si OK Entonces
   diaSemana = firstDayYear(anio);
   Escribir "El primer día del año " + ConvertirATexto(anio) Sin Saltar;
   Escribir " cae en " + dayWeekText(diaSemana);
SiNo
   Escribir "El año debe tener valores entre 1601 y 3000.";
FinSi
Pseudocódigo
Funcion dW <- firstDayYear(year)
   Definir dW,i Como Entero;
   Definir lY, OK Como Logico;

   OK = yearOk(year;)
   Si OK Entonces
      Si year==1601 Entonces
      // Si es 1601, el primer día del año es Lunes
         dW = 1;
      SiNo
      // Si el año es mayor que 1601
      // Buscar primer dia del año
         dW = 1;                          // Se comienza en lunes
         Para i=1602 Hasta year Hacer
         // Si el año anterior fue bisiesto el día de la semana
         // habrá que sumarle dos más, y sino uno.
            lY = isLeapYear(i-1);
            Si lY  Entonces
              dW = dW+2;
            SiNo
              dW = dW+1;
            FinSi
             // Si se llega a 8, es lunes
             Si dW==8  Entonces
               dW = 1;
             FinSi
             // Si se llega a 9, es martes
             Si dW==9  Entonces
               dW = 2;
             FinSi
         FinPara
   FinSi
FinFuncion

Función firstDayMonth

Esta función recibe el año (year) y mes (month) correspondientes y devuelve el día de la semana (dW), en formato número, en el que cae el primer día del mes y año recibidos en la variable month y year. El año deberá estar entre los valores 1601 y 3000, de lo contrario mostrará un mensaje de error advirtiéndolo. Para ejecutarse correctamente necesita las funciones isLeapYear y firstDayYear.

Ejemplo
Definir anio, mes Como Entero;
Definir diaSemana Como Entero;

Escribir "Año (1601 - 3000): " Sin Saltar;
Leer anio;
Escribir "Mes (1 - 12): " Sin Saltar;
Leer mes;

diaSemana = firstDayMonth(anio,mes);

Escribir "El primer día del mes " + monthText(mes) Sin Saltar;
Escribir " del año " + ConvertirATexto(anio) Sin Saltar;
Escribir " cae en " + dayWeekText(diaSemana);
Pseudocódigo

Funcion dW <- firstDayMonth(year,month)
   // Declarar variables
   Definir fDY,dW,i Como Entero;
   Definir lY Como Logico;

   lY = isLeapYear(year);                 // ¿Es un año bisiesto?
   fDY = firstDayYear(year);            // Primer día de la semana del año
   Para i=1 Hasta month Hacer
      // Si es enero, el primer día será el primer día del año
      Si i==1 Entonces
         dW = fDY;
      FinSi
      // Si es marzo, el primer día dependerá de si el año es bisiesto o no
      Si i==3 Entonces
         Si lY Entonces
            dW = dW+1;
         SiNo
            dW = dW;
         FinSi
      FinSi
      // Si es un mes precedido de otro de 31 días, se le sumarán 3 días
      Si (i==2) O (i==4) O (i==6) O (i==8) O (i==9) O (i==11) Entonces
         dW = dW+3;
      FinSi
      // Si es un mes precedido de otro de 30 días, se le sumarán 2 días
      Si (i==5) O (i==7) O (i==10) O (i==12) Entonces
          dW = dW+2;
      FinSi
      // Si llega a 8, es lunes
      Si dW==8 Entonces
         dW = 1;
      FinSi
      // Si llega a 9, es martes
      Si dW==9 Entonces
         dW = 2;
      FinSi
      // Si llega a 10, es miércoles
      Si dW==10 Entonces
         dW = 3;
      FinSi
   FinPara
FinFuncion

Función isDateOk

Esta función recibe una fecha (dateC), en formato texto , y devuelve la variable (OK), con un valor lógico dependiendo de si es una fecha correcta o no. Primero comprueba que tenga el formato (DD/MM/AAAA) o (DD-MM-AAAA), y después que la fecha sea válida. Igual que en las demás funciones, considera como valores buenos para el año que se encuentren entre 1601 y 3000. Para ejecutarse correctamente necesita las funciones separadorOK, isNumberDate, monthOK, yearOk y dayOk.

Ejemplo
Definir fecha Como Texto;
Definir fechaOK Como Logico;

Escribir 'INTRODUCE UNA FECHA (DD/MM/AAAA)....' Sin Saltar;
Leer fecha;

fechaOK = isDateOk(fecha);

Si fechaOK Entonces
   Escribir "La fecha " + fecha Sin Saltar;
   Escribir " es correcta.";
SiNo
   Escribir "La fecha no es correcta.";
FinSi
Pseudocódigo

Funcion OK <- isDateOk(dateC)
   // Declarar variables
   Definir OK Como Logico;
   Definir month, year, day Como Entero;

   lDate=Longitud(dateC);
   Si (lDate != 10) Entonces
      OK=Falso;	// La cadena no tiene 10 caracteres, luego es incorrecta
   SiNo
     // Comprobar si los caracteres de separación son los correctos
      OK=separadorOk(dateC);
      Si OK Entonces
         // Comprobar que los demás caracteres sean todos numéricos
         OK=isNumberDate(dateC);
         Si OK Entonces
            // Si todos son numéricos convertir a número para poder calcular
            day=ConvertirANumero(Subcadena(dateC,1,2));
            month=ConvertirANumero(Subcadena(dateC,4,5));
            year=ConvertirANumero(Subcadena(dateC,7,10));
            // Comprobar si el mes es correcto
            OK=monthOk(month);
            Si OK Entonces
               // Comprobar si el año es correcto
               OK=yearOK(year);
               Si OK Entonces
                  OK=dayOk(day,month,year);
               FinSi
            FinSi
         FinSi
      FinSi
   FinSi
FinFuncion

Función separadorOk

Esta función recibe una fecha (dateC), en formato texto , y devuelve la variable (OK), con un valor lógico dependiendo de si los caracteres separadores son los correctos o no. Es una función auxiliar de isDateOk.

Ejemplo
Definir fecha Como Texto;
Definir sepOK Como Logico;

Escribir 'INTRODUCE UNA FECHA (DD/MM/AAAA)....' Sin Saltar;
Leer fecha;

sepOK = separadorOk(fecha);

Si sepOK Entonces
   Escribir "Los separadores para la fecha son los correctos.";
SiNo
   Escribir "Los separadores para la fecha no son los correctos.";
FinSi
Pseudocódigo
Funcion OK <- separadorOk(dateC)
   Definir OK Como Logico;

   Si ((Subcadena(dateC,3,3)=='/') Y (Subcadena(dateC,6,6)=='/')) Entonces
      OK=Verdadero;
   SiNo
      Si ((Subcadena(dateC,3,3)=='-') Y (Subcadena(dateC,6,6)=='-')) Entonces
         OK=Verdadero;
      SiNo
         OK=Falso;
      FinSi
   FinSi
FinFuncion

Función isNumberDate

Esta función recibe una fecha (dateC), en formato texto , y devuelve la variable (OK), con un valor lógico dependiendo de si los caracteres del día, mes y año son numéricos. Es una función auxiliar de isDateOk y necesita para ejecutarse la función isNumber.

Ejemplo
Definir fecha Como Texto;
Definir sonNumeros Como Logico;

Escribir 'INTRODUCE UNA FECHA (DD/MM/AAAA)....' Sin Saltar;
Leer fecha;

sonNumeros= isNumberDate(fecha);

Si sonNumeros Entonces
   Escribir "Los caracteres del día, mes y año de la fecha son números.";
SiNo
   Escribir "Los caracteres del día, mes y año de la fecha no son números.";
FinSi
Pseudocódigo
Funcion OK <- isNumberDate(dateC)
   // Declarar variables
   Definir OK Como Logico;
   Definir i Como Entero;

   i=1;
   Mientras i<=10 Hacer
      Si (i==3) O (i==6) Entonces
         i=i+1;
      SiNo
         Si isNumber(Subcadena(dateC,i,i)) Entonces
            OK=Verdadero;
            i=i+1;
         SiNo
            OK=Falso;
            i=11;
         FinSi
      FinSi
   FinMientras
FinFuncion

Función isNumber

Esta función recibe un caracter (C), y devuelve la variable (OK), con un valor lógico dependiendo de si el caracter corresponde a un número entre 0 y 9. Es una función auxiliar de isNumberDate.

Ejemplo
Definir C Como Caracter;
Definir OK Como Logico;

Escribir 'INTRODUCE UN CARACTER NUMÉRICO (0 - 9)....' Sin Saltar;
Leer C;

OK = isNumber(C);

Si OK Entonces
   Escribir "El caracter es el número " Sin Saltar;
   Escribir C;
SiNo
   Escribir "El caracter introducido no es un número del 0 al 9.";
FinSi
Pseudocódigo
Funcion OK <- isNumber(C)
   //Declarar variables
   Definir i Como Entero;
   Definir OK Como Logico;
   Definir num Como Caracter;
   Dimension num[10];

   num[1]='0';
   num[2]='1';
   num[3]='2';
   num[4]='3';
   num[5]='4';
   num[6]='5';
   num[7]='6';
   num[8]='7';
   num[9]='8';
   num[10]='9';

   // Comprobar si es un número entre 0 y 9
   Para i=1 Hasta 10 Con Paso 1 Hacer
      Si (C==num[i]) Entonces
         OK = Verdadero;
         i = 10;         // Es un número, salir del bucle
      SiNo
         OK = Falso;         // No es un número
      FinSi
   Fin Para
FinFuncion

Función monthOk

Esta función recibe un mes (month), en formato numérico, y devuelve la variable (OK), con un valor lógico dependiendo de si el mes tiene un valor entre 1 y 12. Es una función auxiliar de isDateOk.

Ejemplo
Definir mes Como Entero;
Definir OK Como Logico;

Escribir 'INTRODUCE UN MES (1 - 12)....' Sin Saltar;
Leer mes;

OK = monthOk(mes);

Si OK Entonces
   Escribir "El mes introducido es " Sin Saltar;
   Escribir monthText(mes);
SiNo
   Escribir "El valor introducido no corresponde a un mes.";
FinSi
Pseudocódigo
Funcion OK <- monthOk(month)
   // Declarar variables
   Definir OK Como Logico;

   Si (month>=1 Y month<=12) Entonces
      OK=Verdadero;
   SiNo
      OK=Falso;
   FinSi
FinFuncion

Función yearOk

Esta función recibe un año (year) y devuelve la variable (OK), con un valor lógico dependiendo de si el año tiene un valor entre 1601 y 3000. Es una función auxiliar de isDateOk.

Ejemplo
Definir anio Como Entero;
Definir OK Como Logico;

Escribir 'INTRODUCE UN AÑO (1601 - 3000)....' Sin Saltar;
Leer anio;

OK = yearOk(anio);

Si OK Entonces
   Escribir "El año introducido es " Sin Saltar;
   Escribir anio;
SiNo
   Escribir "El año debe estar entre los valores 1601 y 3000.";
FinSi
Pseudocódigo
Funcion OK <- yearOk(year)
   // Declarar variables
   Definir OK Como Logico;

   Si (year>=1601 Y year<=3000) Entonces
      OK=Verdadero;
   SiNo
      OK=Falso;
   FinSi
FinFuncion

Función dayOk

Esta función recibe un día (day), un mes (month) y un año (year), y devuelve la variable (OK), con un valor lógico dependiendo de si la día es válido para ese mes y ese año. Es una función auxiliar de isDateOk y necesita para ejecutarse yearOk, monthOk e isLeapYear.

Ejemplo
Definir dia, mes, anio Como Entero;
Definir OK Como Logico;

Escribir 'INTRODUCE UN AÑO (1601 - 3000)....' Sin Saltar;
Leer anio;
Escribir 'INTRODUCE UN MES (1 - 12)....' Sin Saltar;
Leer mes;
Escribir 'INTRODUCE EL DÍA PARA EL MES Y EL AÑO....' Sin Saltar;
Leer dia;

OK = dayOk(dia,mes,anio);
Si OK Entonces
   Escribir "La fecha " Sin Saltar;
   Escribir ConvertirATexto(dia) + "/" Sin Saltar;
   Escribir ConvertirATexto(mes) + "/" Sin Saltar;
   Escribir ConvertirATexto(anio)Sin Saltar;
   Escribir " es válida.";
SiNo
   Escribir "La fecha introducida no es válida.";
FinSi
Pseudocódigo
Funcion OK <- dayOk(day,month,year)
   // Declarar variables
   Definir OK Como Logico;

   OK = yearOk(year);
   Si OK Entonces
      OK = monthOk(month);
      Si OK Entonces
         Si (day>=1 Y day<=31) Entonces
            Segun day Hacer
               31:
                  Si (month==1 O month==3 O month==5 O month==7 O month==8 O month==10 O month==12) Entonces
                     OK=Verdadero;
                  SiNo
                     OK=Falso;
                  FinSi
               30:
                  Si (month==2) Entonces
                     OK=Falso;
                  SiNo
                     OK=Verdadero;
                  FinSi
               29:
                  Si (month==1) O (month>=3 Y month<=12) O (month==2) Y (isLeapYear(year)) Entonces
                     OK=Verdadero;
                  SiNo
                     OK=Falso;
                  FinSi
                De Otro Modo:
                   OK=Verdadero;
            Fin Segun
         FinSi
      SiNo
         Escribir "ERROR. EL MES DEBE TENER UN VALOR ENTRE 1 Y 12.";
      FinSi
   SiNo
      Escribir "ERROR. EL AÑO DEBE TENER UN VALOR ENTRE 1601 Y 3000.";
   FinSi
FinFuncion

Puedes ver más sobre ejercicios básicos de Pseudocódigo y PSeInt en:

Si quieres estar al tanto de las novedades y publicaciones de esta página web

Suscríbete

Comparte si quieres

TwitterFacebookLinkedInWhatsApp

A V I S O

Hola, si sueles venir por aquí sabrás que desde el 2 de marzo de 2020 no he parado de responder a peticiones de ayuda para ejercicios de algoritmos en PSeint. Tengo que parar de hacerlo, al menos de momento, terminó el confinamiento por el Covid-19 y no me da la vida; he vuelto a trabajar y tengo que recuperar lo no trabajado, y además tengo un proyecto entre manos que no quiero desatender.

Aquí tienes un montón de ejemplos que te pueden servir de ayuda para resolver tu ejercicio. Si pulsas CTRL+F (buscar) y añades las palabras adecuadas puedes moverte por la página y encontrar lo que buscas.

Aún me queda por responder algunos comentarios y lo haré. Pero a partir de hoy (14 de Junio de 2020) desactivo los comentarios temporalmente, porque no voy a poder atenderlos, y tampoco contestaré a peticiones de ayuda que me lleguen al correo electrónico o redes sociales y que consistan en realizar ejercicios, no me importará ponerte un enlace a algún ejercicio que ya esté hecho y que crea que es similar y pueda ayudarte, pero poco más.

Lo siento, yo también estoy aprendiendo e intento ganarme la vida con esto.

El que aprende y aprende y no practica lo que sabe, es como el que ara y ara y no siembra.- (Platón)
  • Isaac Rodriguez dice:

    Escribir un algoritmo en pseudocodigo que acepte fechas escritas de modo usual y las visualice como tres números. Por ejemplo, la entrada: 15 febrero 2008 producirá la salida 15 2 2008.

    • terepebernal dice:

      ¡Hola Isaac! Saludos

      Algoritmo ejemploFecha
      	Definir fecha, sinespacios, dia, mes, anio  Como Cadena
      	Definir C Como Caracter
      	Definir i, digitosDia Como Entero
      	
      	Escribir "FECHA: " Sin Saltar
      	Leer fecha
      	
      	// Si el primer caracter de la cadena fecha es un espacio,
      	// quitar espacios en blanco iniciales de la cadena fecha
      	C<-Subcadena(fecha,1,1)
      	Si C==" "
      		i<-1 
      		Repetir 
      			C<-Subcadena(fecha,i,i)
      			Si C==" " Entonces
      				sinespacios <- Subcadena(fecha,i+1,Longitud(fecha))
      			FinSi
      			i <- i+1
      		Hasta Que !(C==" ")
      		fecha <- sinespacios
      	FinSi
      	
      	// Hasta el primer espacio, para hallar 
      	// el número de dígitos que tiene el día
      	i <- 1
      	digitosDia <- 0
      	Repetir
      		C<-Subcadena(fecha,i,i)
      		Si !(C==" ") Entonces
      			digitosDia <- digitosDia + 1
      		FinSi
      		i <- i+1
      	Hasta Que C==" "
      	
      	// Quitar espacios en blanco de la cadena fecha
      	sinespacios <- ""
      	Para i<-1 Hasta Longitud(fecha) Con Paso 1 Hacer
      		C<-Subcadena(fecha,i,i)
      		Si !(C==" ") Entonces
      			sinespacios <- sinespacios + Subcadena(fecha,i,i)
      		FinSi
      	FinPara
      	
      	fecha <- sinespacios
      	
      	dia <- Subcadena(fecha,1,digitosDia)
      	mes <- Subcadena(fecha, digitosDia+1, Longitud(fecha)-4)
      	anio <- Subcadena(fecha, Longitud(fecha)-3, Longitud(fecha))
      	
      	Escribir dia, " " Sin Saltar
      	
      	Si Mayusculas(mes)=='ENERO' Entonces
      		Escribir 1, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='FEBRERO' Entonces
      		Escribir 2, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='MARZO' Entonces
      		Escribir 3, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='ABRIL' Entonces
      		Escribir 4, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='MAYO' Entonces
      		Escribir 5, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='JUNIO' Entonces
      		Escribir 6, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='JULIO' Entonces
      		Escribir 7, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='AGOSTO' Entonces
      		Escribir 8, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='SEPTIEMBRE' Entonces
      		Escribir 9, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='OCTUBRE' Entonces
      		Escribir 10, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='NOVIEMBRE' Entonces
      		Escribir 11, " " Sin Saltar
      	FinSi
      	Si Mayusculas(mes)=='DICIEMBRE' Entonces
      		Escribir 12, " " Sin Saltar
      	FinSi
      	
      	Escribir anio
      FinAlgoritmo
  • Thiago dice:

    xfa, estoy aprendiendo PSeInt en el colegio, podrias ayudarme con un algoritmo para saber la edad exacta con mes, digamos 11 años 9 meses, gracias por tu ayuda

    • terepebernal dice:

      ¡Hola Thiago! No se si es lo que quieres. He intentado que estuvieran todas las opciones posibles, pero igual me he dejado algo. El algoritmo solo muestra la edad con años y meses, no días. Tampoco he verificado que la fecha estuviera bien escrita y fuera una fecha correcta, para así poder mejorar aún más el algoritmo. Aunque si quisieras podrías hacerlo, si buscas en esta página en el menú de más arriba hay varias funciones que te lo permiten. Trabajar con fechas en PSeInt es laborioso al no tener funciones propias para fecha, pues hay que tener en cuenta muchas cosas: años bisiestos, días según meses, …. En fin, espero que al menos pueda servirte de guía. Saludos

      Algoritmo cumpleMeses
      	Definir hoy, cumple Como Cadena
      	Definir aHoy, aCumple, mHoy, mCumple, dHoy, dCumple Como Entero
      	
      	Escribir "FECHA DE HOY: " Sin Saltar
      	Leer hoy
      	Escribir "FECHA DE NACIMIENTO: " Sin Saltar
      	Leer cumple
      	
      	aHoy <- ConvertirANumero(Subcadena(hoy,7,10))
      	mHoy <- ConvertirANumero(Subcadena(hoy,4,5))
      	dHoy <- ConvertirANumero(Subcadena(hoy,1,2))
      	
      	aCumple <- ConvertirANumero(Subcadena(cumple,7,10))
      	mCumple <- ConvertirANumero(Subcadena(cumple,4,5))
      	dCumple <- ConvertirANumero(Subcadena(cumple,1,2))
      	
      	Si (aHoy < aCumple)  Entonces
      		Escribir "La fecha actual es menor que la fecha de nacimiento"
      	FinSi
      	
      	Si (aHoy > aCumple) Y (mHoy > mCumple) Entonces
      		Escribir "EDAD = " Sin Saltar
      		Escribir ConvertirATexto(aHoy - aCumple) Sin Saltar
      		Escribir " AÑOS Y " Sin Saltar
      		Si (dHoy >= dCumple) Entonces
      			Escribir ConvertirATexto(mHoy - mCumple) Sin Saltar
      			Escribir " MESES"
      		SiNo
      			Escribir ConvertirATexto((mHoy-1) - mCumple) Sin Saltar
      			Escribir " MESES"
      		FinSi
      	FinSi
      	
      	Si (aHoy > aCumple) Y (mHoy < mCumple) Entonces
      		Escribir "EDAD = " Sin Saltar
      		Si (dHoy >= dCumple) Entonces
      			Escribir ConvertirATexto((aHoy-1) - aCumple) Sin Saltar
      			Escribir " AÑOS Y " Sin Saltar
      			Escribir ConvertirATexto((12-mCumple)+mHoy) Sin Saltar
      			Escribir " MESES"
      		SiNo
      			Escribir ConvertirATexto(aHoy - aCumple) Sin Saltar
      			Escribir " AÑOS Y " Sin Saltar
      			Escribir ConvertirATexto((12-mCumple)+(mHoy-1)) Sin Saltar
      			Escribir " MESES"
      		FinSi
      	FinSi
      	
      	Si (aHoy > aCumple) Y (mHoy == mCumple) Y (dHoy == dCumple) Entonces
      		Escribir ConvertirATexto(aHoy-aCumple) + "  AÑOS"
      	FinSi
      	
      	Si (aHoy == aCumple) Y (dHoy == dCumple) Entonces
      		Si (mHoy > mCumple) Entonces
      			Escribir ConvertirATexto(mHoy-mCumple) + "  MESES"
      		SiNo
      			Si (mHoy < mCumple) Entonces
      				Escribir "La fecha actual es menor que la fecha de nacimiento"
      			FinSi
      			Si (mHoy == mCumple) Entonces
      				Escribir "¡La fecha de nacimiento es hoy!"
      			FinSi
      		FinSi
      	FinSi
      FinAlgoritmo

A V I S O

Hola, si sueles venir por aquí sabrás que desde el 2 de marzo de 2020 no he parado de responder a peticiones de ayuda para ejercicios de algoritmos en PSeint. Tengo que parar de hacerlo, al menos de momento, terminó el confinamiento por el Covid-19 y no me da la vida; he vuelto a trabajar y tengo que recuperar lo no trabajado, y además tengo un proyecto entre manos que no quiero desatender.

Aquí tienes un montón de ejemplos que te pueden servir de ayuda para resolver tu ejercicio. Si pulsas CTRL+F (buscar) y añades las palabras adecuadas puedes moverte por la página y encontrar lo que buscas.

Aún me queda por responder algunos comentarios y lo haré. Pero a partir de hoy (14 de Junio de 2020) desactivo los comentarios temporalmente, porque no voy a poder atenderlos, y tampoco contestaré a peticiones de ayuda que me lleguen al correo electrónico o redes sociales y que consistan en realizar ejercicios, no me importará ponerte un enlace a algún ejercicio que ya esté hecho y que crea que es similar y pueda ayudarte, pero poco más.

Lo siento, yo también estoy aprendiendo e intento ganarme la vida con esto.

El que aprende y aprende y no practica lo que sabe, es como el que ara y ara y no siembra.- (Platón)