Cálculo de Edad en PSeInt - Explicación Completa

 Cálculo de Edad en PSeInt - Explicación Completa

Te muestro el código completo en pseudocódigo de PSeInt:

pseudocode
Algoritmo CalculoEdadSeguros
    Definir fecha_nacimiento Como Cadena
    Definir dia, mes, anio Como Entero
    Definir anio_completo, edad Como Entero
    Definir dia_actual, mes_actual, anio_actual Como Entero
    Definir fecha_valida Como Logico
    Definir dias_por_mes Como Entero[12]
    
    // Inicializar arreglo de días por mes
    dias_por_mes[0] <- 31  // Enero
    dias_por_mes[1] <- 28  // Febrero
    dias_por_mes[2] <- 31  // Marzo
    dias_por_mes[3] <- 30  // Abril
    dias_por_mes[4] <- 31  // Mayo
    dias_por_mes[5] <- 30  // Junio
    dias_por_mes[6] <- 31  // Julio
    dias_por_mes[7] <- 31  // Agosto
    dias_por_mes[8] <- 30  // Septiembre
    dias_por_mes[9] <- 31  // Octubre
    dias_por_mes[10] <- 30 // Noviembre
    dias_por_mes[11] <- 31 // Diciembre
    
    Escribir "=== CALCULADORA DE EDAD PARA SEGUROS ==="
    Escribir "Ingrese fecha de nacimiento (DD-MM-AA): "
    Leer fecha_nacimiento
    
    // PASO 1: Validar formato básico DD-MM-AA
    Si Longitud(fecha_nacimiento) <> 8 Entonces
        Escribir "❌ Error: El formato debe ser DD-MM-AA (8 caracteres)"
        FinAlgoritmo
    FinSi
    
    Si SubCadena(fecha_nacimiento, 3, 3) <> "-" O SubCadena(fecha_nacimiento, 6, 6) <> "-" Entonces
        Escribir "❌ Error: Debe usar guiones como separadores"
        FinAlgoritmo
    FinSi
    
    // PASO 2: Extraer día, mes y año
    dia <- ConvertirANumero(SubCadena(fecha_nacimiento, 1, 2))
    mes <- ConvertirANumero(SubCadena(fecha_nacimiento, 4, 5))
    anio <- ConvertirANumero(SubCadena(fecha_nacimiento, 7, 8))
    
    // PASO 3: Convertir año de 2 a 4 dígitos
    Si anio >= 0 Y anio <= 99 Entonces
        Si anio < 50 Entonces
            anio_completo <- 2000 + anio
        Sino
            anio_completo <- 1900 + anio
        FinSi
    Sino
        anio_completo <- anio
    FinSi
    
    // PASO 4: Validar año > 1900
    Si anio_completo <= 1900 Entonces
        Escribir "❌ Error: El año debe ser mayor a 1900"
        FinAlgoritmo
    FinSi
    
    // PASO 5: Validar mes (1-12)
    Si mes < 1 O mes > 12 Entonces
        Escribir "❌ Error: El mes debe estar entre 01 y 12"
        FinAlgoritmo
    FinSi
    
    // PASO 6: Validar días por mes
    Si dia < 1 Entonces
        Escribir "❌ Error: El día no puede ser menor a 01"
        FinAlgoritmo
    FinSi
    
    // Ajustar febrero para años bisiestos (pero 29 sigue inválido)
    Si (anio_completo % 4 = 0 Y anio_completo % 100 <> 0) O (anio_completo % 400 = 0) Entonces
        dias_por_mes[1] <- 28  // Forzamos máximo 28 días
    FinSi
    
    max_dias <- dias_por_mes[mes-1]
    Si dia > max_dias Entonces
        Escribir "❌ Error: El día ", dia, " no es válido para el mes ", mes
        FinAlgoritmo
    FinSi
    
    // PASO 7: Validar que no sea 29 de febrero
    Si mes = 2 Y dia = 29 Entonces
        Escribir "❌ Error: El 29 de febrero no es válido para este cálculo"
        FinAlgoritmo
    FinSi
    
    // PASO 8: Obtener fecha actual (simulada para PSeInt)
    Escribir "Ingrese la fecha actual (DD-MM-AAAA): "
    Leer fecha_actual_str
    
    // Extraer fecha actual
    dia_actual <- ConvertirANumero(SubCadena(fecha_actual_str, 1, 2))
    mes_actual <- ConvertirANumero(SubCadena(fecha_actual_str, 4, 5))
    anio_actual <- ConvertirANumero(SubCadena(fecha_actual_str, 7, 10))
    
    // PASO 9: Calcular edad base
    edad <- anio_actual - anio_completo
    
    // PASO 10: Verificar si ya cumplió años este año
    Si mes_actual < mes Entonces
        edad <- edad - 1
    Sino
        Si mes_actual = mes Entonces
            Si dia_actual < dia Entonces
                edad <- edad - 1
            FinSi
        FinSi
    FinSi
    
    // PASO 11: Mostrar resultados
    Escribir ""
    Escribir "✅ FECHA VALIDADA CORRECTAMENTE"
    Escribir "📅 Fecha de nacimiento: ", dia, "-", mes, "-", anio_completo
    Escribir "📅 Fecha actual: ", dia_actual, "-", mes_actual, "-", anio_actual
    Escribir "👤 Edad calculada: ", edad, " años"
    Escribir ""
    
    // Información adicional sobre cumpleaños
    Si mes_actual = mes Y dia_actual = dia Entonces
        Escribir "🎉 ¡Feliz cumpleaños! Hoy cumples ", edad, " años"
    Sino
        Si mes_actual < mes O (mes_actual = mes Y dia_actual < dia) Entonces
            Escribir "📌 Aún no cumples años este año"
        Sino
            Escribir "✅ Ya cumpliste años este año"
        FinSi
    FinSi
    
FinAlgoritmo

🔍 EXPLICACIÓN PASO A PASO EN PSEINT

PASO 1: Declaración de Variables

pseudocode
Definir fecha_nacimiento Como Cadena
Definir dia, mes, anio Como Entero
Definir anio_completo, edad Como Entero
  • Definir: Declara variables con su tipo

  • Tipos usados: Cadena (texto), Entero (números), Logico (verdadero/falso)

PASO 2: Arreglo de Días por Mes

pseudocode
Definir dias_por_mes Como Entero[12]
dias_por_mes[0] <- 31  // Enero
dias_por_mes[1] <- 28  // Febrero
// ... etc
  • Arreglo: Estructura que almacena múltiples valores

  • Índices: Van de 0 a 11 (para 12 meses)

PASO 3: Validación de Longitud

pseudocode
Si Longitud(fecha_nacimiento) <> 8 Entonces
    Escribir "❌ Error: El formato debe ser DD-MM-AA (8 caracteres)"
    FinAlgoritmo
FinSi
  • Longitud(): Función que cuenta caracteres

  • FinAlgoritmo: Termina el programa si hay error

PASO 4: Extracción de Partes de la Fecha

pseudocode
dia <- ConvertirANumero(SubCadena(fecha_nacimiento, 1, 2))
mes <- ConvertirANumero(SubCadena(fecha_nacimiento, 4, 5))
anio <- ConvertirANumero(SubCadena(fecha_nacimiento, 7, 8))
  • SubCadena(cadena, inicio, fin): Extrae parte de una cadena

  • ConvertirANumero(): Convierte texto a número

PASO 5: Conversión de Año (2→4 dígitos)

pseudocode
Si anio >= 0 Y anio <= 99 Entonces
    Si anio < 50 Entonces
        anio_completo <- 2000 + anio
    Sino
        anio_completo <- 1900 + anio
    FinSi
FinSi
  • Lógica: Años 00-49 → 2000-2049, años 50-99 → 1950-1999

PASO 6: Validaciones Múltiples

pseudocode
// Validar año
Si anio_completo <= 1900 Entonces
    Escribir "❌ Error: El año debe ser mayor a 1900"
    FinAlgoritmo
FinSi

// Validar mes
Si mes < 1 O mes > 12 Entonces
    Escribir "❌ Error: El mes debe estar entre 01 y 12"
    FinAlgoritmo
FinSi

PASO 7: Validación de Días por Mes

pseudocode
max_dias <- dias_por_mes[mes-1]
Si dia > max_dias Entonces
    Escribir "❌ Error: El día ", dia, " no es válido para el mes ", mes
    FinAlgoritmo
FinSi
  • dias_por_mes[mes-1]: Accede al día máximo del mes correspondiente

  • Ejemplo: Si mes=3 (marzo) → dias_por_mes[2] = 31

PASO 8: Validación Especial - 29 de Febrero

pseudocode
Si mes = 2 Y dia = 29 Entonces
    Escribir "❌ Error: El 29 de febrero no es válido para este cálculo"
    FinAlgoritmo
FinSi

PASO 9: Cálculo de Edad

pseudocode
edad <- anio_actual - anio_completo

Si mes_actual < mes Entonces
    edad <- edad - 1
Sino
    Si mes_actual = mes Entonces
        Si dia_actual < dia Entonces
            edad <- edad - 1
        FinSi
    FinSi
FinSi

🧪 EJEMPLO DE EJECUCIÓN EN PSEINT

Entrada del Usuario:

text
=== CALCULADORA DE EDAD PARA SEGUROS ===
Ingrese fecha de nacimiento (DD-MM-AA): 15-08-90
Ingrese la fecha actual (DD-MM-AAAA): 20-03-2024

Salida del Programa:

text
✅ FECHA VALIDADA CORRECTAMENTE
📅 Fecha de nacimiento: 15-8-1990
📅 Fecha actual: 20-3-2024
👤 Edad calculada: 33 años

📌 Aún no cumples años este año

Otro Ejemplo con Error:

text
Ingrese fecha de nacimiento (DD-MM-AA): 30-02-85
❌ Error: El día 30 no es válido para el mes 2

🎯 VERSIÓN MEJORADA CON FUNCIONES

Si quieres una versión más modular, aquí está con funciones:

pseudocode
// Función para validar fecha
Funcion resultado <- ValidarFecha(dia, mes, anio)
    Definir resultado Como Logico
    Definir dias_por_mes Como Entero[12]
    
    // Inicializar días por mes
    dias_por_mes[0] <- 31; dias_por_mes[1] <- 28; dias_por_mes[2] <- 31
    dias_por_mes[3] <- 30; dias_por_mes[4] <- 31; dias_por_mes[5] <- 30
    dias_por_mes[6] <- 31; dias_por_mes[7] <- 31; dias_por_mes[8] <- 30
    dias_por_mes[9] <- 31; dias_por_mes[10] <- 30; dias_por_mes[11] <- 31
    
    resultado <- Verdadero
    
    Si anio <= 1900 Entonces
        resultado <- Falso
    FinSi
    
    Si mes < 1 O mes > 12 Entonces
        resultado <- Falso
    FinSi
    
    Si dia < 1 O dia > dias_por_mes[mes-1] Entonces
        resultado <- Falso
    FinSi
    
    Si mes = 2 Y dia = 29 Entonces
        resultado <- Falso
    FinSi
FinFuncion

// Función para calcular edad
Funcion edad <- CalcularEdad(dia_nac, mes_nac, anio_nac, dia_act, mes_act, anio_act)
    Definir edad Como Entero
    
    edad <- anio_act - anio_nac
    
    Si mes_act < mes_nac Entonces
        edad <- edad - 1
    Sino
        Si mes_act = mes_nac Y dia_act < dia_nac Entonces
            edad <- edad - 1
        FinSi
    FinSi
FinFuncion

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos