Ejercicio 2 - Disseny del programa principal i re… · Fundamentos de Programación I URV 2015

Tema: Disseny del programa principal i resolució integrada de problemes · Del examen Examen Segunda Convocatoria 2015-2016 (2015)

Enunciado

Ejercicio 2 (10 puntos). Procesamiento y diagnóstico de informes médicos

Se desea analizar informes clínicos recibidos secuencialmente por el teclado para predecir si un paciente padece determinadas enfermedades en función de los síntomas citados.

La entrada está compuesta por un número indeterminado de informes que concluyen con la palabra reservada "FINAL". A su vez, el final de cada informe individual viene marcado por la palabra clave "FIINFORME". Cada informe contiene ordenadamente:

Identificación del paciente: una única palabra que agrupa apellidos y nombre (de longitud no superior a MAX_P).

Fecha: día, mes y año separados mediante espacios.

Cuerpo del informe: una secuencia indeterminada de palabras (longitud máxima de cada una: MAX_P), delimitadas por un único espacio en blanco. El texto no contendrá signos ortográficos complejos, tildes ni apóstrofes (estos han sido sustituidos por espacios).

Ejemplo de entrada:

Rivera_Josep_Maria

11 02 2013

El paciente presenta una infeccion pulmonar y respiratoria Empezo con una tos inocente y se convirtio en una fiebre alta Siente fatiga y la fiebre y las nauseas le provocaba escalofrios Al subirle la fiebre empezaron a producirse alucinaciones FIINFORME FINAL

Condiciones del problema:

En un informe no se registrarán más de 25 síntomas válidos ( MAX_SIMP_INF = 25).

No es necesario contemplar errores en la entrada.

Los síntomas hallados en el informe pueden guardarse en una tabla de códigos enteros (pudiendo estar o no repetidos).

Una enfermedad se considerará probable si al menos el 70% de sus síntomas figuran en la lista de códigos del informe.

Al término del procesamiento global, se emitirá un resumen con el total de informes analizados y la media de enfermedades probables por informe (promedio = 100×total_enfermedadestotal_informes100 \times \frac{\text{total\_enfermedades}}{\text{total\_informes}}).

Se solicita resolver mediante diseño descendente:

a)

[1 punto] Definir la estructura de datos (constantes y tipos en pseudocódigo) para contener la información precisa de los síntomas del informe.

b)

[9 puntos] Desarrollar el algoritmo completo estructurado en subprogramas (en pseudocódigo): extracción de síntomas, diagnóstico de enfermedades probables y algoritmo principal con bucle de control de la secuencia y estadísticas finales.

Enunciado: Ejercicio 2 - Disseny del programa principal i re… · Fundamentos de Programación I URV 2015

Solución

Según los criterios oficiales de corrección

a. (1p) Definir la estructura de datos para contener la información precisa.

Solución: ```pseudocode constants MAX_P := 60; MAX_TAULA_SIMP := 1000; MAX_ENF := 100; MAX_SIMP_INF := 25; fconst tipus taula_codis_inf: taula [MAX_SIMP_INF] de enter; ftipus ```

b. (9p) Desarrollar el algoritmo completo estructurado en subprogramas.

Solución: ```pseudocode // Subprograma para procesar el cuerpo de un informe y extraer los códigos de los síntomas citados acció extreure_simptomes_informe (s_cat: taula de simptoma_tipus, dim_cat: enter, var codis_detectats: taula_codis_inf, var num_codis: enter) és var paraula: taula [MAX_P] de caràcters; cod: enter; fvar inici num_codis := 0; llegir_cadena(paraula, MAX_P, ' '); mentre (no comparar_cadenes(paraula, "FIINFORME")) fer cod := cercar_simptoma(paraula, s_cat, dim_cat); si (cod != -1) i (num_codis < MAX_SIMP_INF) llavors codis_detectats[num_codis] := cod; num_codis := num_codis + 1; fsi llegir_cadena(paraula, MAX_P, ' '); fmentre facció // Subprograma para evaluar patologías probables (coincidencia >= 70%) funció diagnosticar_enfermetats (enf: taula_enfermetats_tipus, n_enf: enter, codis_inf: taula_codis_inf, n_codis: enter) retorna enter és var i, probables: enter; pct: real; fvar inici probables := 0; per (i := 0; i < n_enf; i := i + 1) fer pct := percentatge_simptomes(enf[i], codis_inf, n_codis); si pct >= 70.0 llavors probables := probables + 1; escriure(" - Malaltia probable: "); escriure_cadena(enf[i].nom); escriure(" (Probabilitat: ", pct, "%)"); fsi fper retorna probables; ffunció // Algoritmo principal Algorisme avaluacio_informes és var cataleg_simptomes: taula [MAX_TAULA_SIMP] de simptoma_tipus; llista_malalties: taula [MAX_ENF] de enfermetat_tipus; num_simptomes_cat, num_malalties_cat: enter; pacient: taula [MAX_P] de caràcters; dia, mes, any: enter; simptomes_pacient: taula_codis_inf; num_simptomes_pacient: enter; total_informes, total_malalties_detectades: enter; malalties_informe: enter; mitjana: real; fvar inici // Carga previa de bases de datos de referencia num_simptomes_cat := llegir_simptomes(cataleg_simptomes, MAX_TAULA_SIMP); num_malalties_cat := llegir_enfermetats(llista_malalties, MAX_ENF, MAX_P); total_informes := 0; total_malalties_detectades := 0; // Lectura del primer elemento de la secuencia llegir_cadena(pacient, MAX_P, ' '); mentre (no comparar_cadenes(pacient, "FINAL")) fer total_informes := total_informes + 1; llegir(dia, mes, any); escriure("--------------------------------------------------"); escriure("Pacient: "); escriure_cadena(pacient); escriure("Data: ", dia, "/", mes, "/", any); // Extracción de síntomas del texto extreure_simptomes_informe(cataleg_simptomes, num_simptomes_cat, simptomes_pacient, num_simptomes_pacient); // Análisis de diagnósticos malalties_informe := diagnosticar_enfermetats(llista_malalties, num_malalties_cat, simptomes_pacient, num_simptomes_pacient); total_malalties_detectades := total_malalties_detectades + malalties_informe; // Lectura del siguiente paciente o centinela FINAL llegir_cadena(pacient, MAX_P, ' '); fmentre // Resumen final acumulado escriure("=================================================="); escriure("Total informes tractats: ", total_informes); si total_informes > 0 llavors mitjana := (100.0 * total_malalties_detectades) / total_informes; escriure("Promig de malalties per informe (*100): ", mitjana); sino escriure("No s'ha processat cap informe."); fsi falgorisme ```

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Ejercicio 1.d - Disseny del programa principal i… · 2015 · Ejercicio 1 · 2015 ›

Más ejercicios de Disseny del programa principal i resolució integrada de problemes