Trabajas en una compañía que ofrece seguros de vida y de gastos
Trabajas en una compañía que ofrece seguros de vida y de gastos
médicos. La empresa está desarrollando una herramienta tecnológica,
para que los agentes puedan calcular el monto de una póliza. Para dicho
cálculo, se consideran varios factores de riesgo, entre los que se encuentra
6
la edad. Por ello, el contratante debe llenar un formulario, incluyendo su
fecha de nacimiento. Como primer reto, deberás calcular la edad del
cliente al momento de la cotización.
La captura de la fecha de nacimiento debe ser en
una sola cadena de texto con formato DD-MM-AA
Debes validar que es una fecha valida:
Para simplificar el algoritmo tomaremos el
dia 29 de febrero como invalido
El año de nacimiento debe ser mayor 1900
No olvides validar si el cliente ya cumplio años en
la fecha de captura o aun no
Cálculo de Edad para Seguros - Explicación Paso a Paso
📋 PROBLEMA COMPLETO
Necesitamos calcular la edad de un cliente para una póliza de seguros, validando que:
La fecha de nacimiento tenga formato DD-MM-AA
Sea una fecha válida (considerando 29 de febrero como inválido)
El año sea mayor a 1900
Determinar si ya cumplió años en la fecha actual
🔍 PRIMERO: Lógica en 2 Pasos
Paso 1: Validación de la Fecha
SI la fecha tiene formato correcto (DD-MM-AA) Y
los días/meses son válidos Y
el año > 1900 Y
no es 29 de febrero
ENTONCES fecha válida
SINO errorPaso 2: Cálculo de Edad
edad = año_actual - año_nacimiento
SI (mes_actual < mes_nacimiento) O
(mes_actual == mes_nacimiento Y día_actual < día_nacimiento)
ENTONCES edad = edad - 1 # No ha cumplido años todavía💻 SEGUNDO: Pseudocódigo Detallado
INICIO
// Paso 1: Capturar y validar fecha
LEER fecha_nacimiento (formato DD-MM-AA)
// Validar formato básico
SI longitud(fecha_nacimiento) ≠ 8 O no tiene guiones ENTONCES
MOSTRAR "Error: Formato debe ser DD-MM-AA"
TERMINAR
FIN SI
// Separar en partes
dia = extraer primeros 2 caracteres
mes = extraer caracteres 4-5
año = extraer últimos 2 caracteres
// Convertir a números y ajustar año
año_completo = 1900 + año (si año ≥ 0) O 2000 + año (si año < 100)
// Validaciones específicas
SI año_completo ≤ 1900 ENTONCES error
SI mes < 1 O mes > 12 ENTONCES error
SI dia < 1 O dia > días_del_mes(mes, año_completo) ENTONCES error
SI mes = 2 Y dia = 29 ENTONCES error // 29 de febrero inválido
// Paso 2: Calcular edad
OBTENER fecha_actual (día, mes, año actuales)
edad = año_actual - año_completo
// Verificar si ya cumplió años
SI mes_actual < mes_nacimiento ENTONCES
edad = edad - 1
SINO SI mes_actual = mes_nacimiento Y día_actual < día_nacimiento ENTONCES
edad = edad - 1
FIN SI
MOSTRAR "Edad calculada: " + edad
FIN🎯 TERCERO: Analogía (Como una Receta de Cocina)
Fecha de Nacimiento = Receta de un Pastel
Formato DD-MM-AA = La receta debe tener ingredientes en orden exacto
Validar día/mes = Verificar que las cantidades de harina/huevos sean posibles
Año > 1900 = La receta no puede ser de antes de que existieran los hornos modernos
29 de febrero inválido = Como un día "fantasma" que no cuenta
Cálculo de Edad = Contar Velas del Pastel
Año actual - año nacimiento = Número total de velas que debería tener
Verificar si ya cumplió = ¿Ya pasó el día de tu cumpleaños este año?
NO ha cumplido: Quitar 1 vela (todavía usa la cantidad del año pasado)
YA cumplió: Dejar todas las velas correspondientes
🔨 CUARTO: Descomposición en Partes Más Pequeñas
SECCIÓN 1: Validación de Formato
# Estructura: String → Lista
# Algoritmo: División por separador
fecha_separada = fecha.split("-")
SI longitud(fecha_separada) ≠ 3 ENTONCES errorSECCIÓN 2: Validación de Valores Numéricos
# Estructura: Conversión String a Int
# Algoritmo: Validación por rangos
dia = convertir_a_numero(fecha_separada[0])
mes = convertir_a_numero(fecha_separada[1])
año = convertir_a_numero(fecha_separada[2])
SI mes < 1 O mes > 12: error
SI dia < 1: errorSECCIÓN 3: Validación de Días por Mes
# Estructura: Array de días por mes
# Algoritmo: Búsqueda en tabla
dias_por_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
max_dias = dias_por_mes[mes-1]
# Validar año bisiesto (pero 29 febrero sigue inválido)
SI es_bisiesto(año) Y mes = 2: max_dias = 28 # Forzamos máximo 28
SI dia > max_dias: errorSECCIÓN 4: Cálculo de Edad Exacta
# Estructura: Fechas como tuplas (día, mes, año)
# Algoritmo: Comparación fecha actual vs fecha nacimiento
hoy = obtener_fecha_actual()
edad = hoy.año - nacimiento.año
# Condición para ajustar edad
SI (hoy.mes < nacimiento.mes) O
(hoy.mes == nacimiento.mes Y hoy.dia < nacimiento.dia):
edad = edad - 1🏗️ ESTRUCTURAS DE DATOS Y ALGORITMOS POR SECCIÓN
1. Validación de Formato
Estructura:
String(cadena de texto)Algoritmo:
split("-")para dividir la fechaEste ciclo/condición: Verificar que tenga exactamente 3 partes después de dividir
2. Conversión y Validación Básica
Estructura:
Arraypara días por mes[31, 28, 31, ...]Algoritmo: Conversión
stringaintcon manejo de erroresEsta condición:
if mes >= 1 and mes <= 12para validar mes
3. Validación de Días Específicos
Estructura:
Arrayindexado por mesAlgoritmo: Acceso por índice
dias_por_mes[mes-1]Esta condición:
if dia > max_diaspara validar día máximo
4. Cálculo de Edad Exacta
Estructura:
Tuplaoobjetopara fecha (día, mes, año)Algoritmo: Resta de años + condición de ajuste
Esta condición:
if (mes_actual, dia_actual) < (mes_nac, dia_nac)para verificar si ya cumplió
✅ SOLUCIÓN FINAL INTEGRADA
Cada parte se resuelve secuencialmente, donde la salida de una sección es la entrada de la siguiente. Si cualquier validación falla, el proceso se detiene inmediatamente.
Flujo completo: Entrada → Validar formato → Validar valores → Validar fechas específicas → Calcular edad → Mostrar resultado
Comentarios
Publicar un comentario