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:
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
Definir fecha_nacimiento Como Cadena Definir dia, mes, anio Como Entero Definir anio_completo, edad Como Entero
Definir: Declara variables con su tipoTipos usados:
Cadena(texto),Entero(números),Logico(verdadero/falso)
PASO 2: Arreglo de Días por Mes
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
Si Longitud(fecha_nacimiento) <> 8 Entonces
Escribir "❌ Error: El formato debe ser DD-MM-AA (8 caracteres)"
FinAlgoritmo
FinSiLongitud(): Función que cuenta caracteresFinAlgoritmo: Termina el programa si hay error
PASO 4: Extracción de Partes de la Fecha
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 cadenaConvertirANumero(): Convierte texto a número
PASO 5: Conversión de Año (2→4 dígitos)
Si anio >= 0 Y anio <= 99 Entonces
Si anio < 50 Entonces
anio_completo <- 2000 + anio
Sino
anio_completo <- 1900 + anio
FinSi
FinSiLógica: Años 00-49 → 2000-2049, años 50-99 → 1950-1999
PASO 6: Validaciones Múltiples
// 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
FinSiPASO 7: Validación de Días por Mes
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
FinSidias_por_mes[mes-1]: Accede al día máximo del mes correspondienteEjemplo: Si mes=3 (marzo) →
dias_por_mes[2]= 31
PASO 8: Validación Especial - 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
FinSiPASO 9: Cálculo de Edad
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:
=== 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:
✅ 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:
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:
// 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
Publicar un comentario