Examen de Fundamentos de Programación I URV 2015 · Segunda Convocatoria 2015-2016

Examen de Fundamentos de Programación I de la URV (Grado en Ingeniería Informática) 2015, Segunda Convocatoria 2015-2016: 6 problemas con solución. Gratis.

Temas del examen: Esquema de cerca amb aturada anticipada · Subprogrames: accions, funcions i pas de paràmetres · Taules unidimensionals i bidimensionals · Tipus definits per l'usuari: registres i taules de registres · Disseny del programa principal i resolució integrada de problemes

Ejercicio 1.a - Tipus definits per l'usuari: regi… · Tipus definits per l'usuari: registres i taules de registres

Subprogramas de soporte predefinidos (disponibles)

acció llegir_cadena (var c1: taula de caràcters, dim: enter, sentinella: caràcter): efectúa la lectura por teclado de una cadena hasta hallar el centinela o alcanzar la capacidad máxima dim, añadiendo el terminador '\0'.

acció copiar_cadena (c_ori: taula de caràcter, var c_destí: taula de caràcter): copia el contenido de la cadena origen en la de destino.

acció escriure_cadena (cadena: taula de caràcters): imprime la cadena indicada por el canal estándar.

funció comparar_cadenes (c1, c2: taula de caràcters) retorna booleà: evalúa la igualdad léxica sin distinguir entre mayúsculas y minúsculas (insensible a la capitalización).

Ejercicio 1. Enfermedades y síntomas

Un centro hospitalario requiere una aplicación informática para extraer estadísticas y asociar informes médicos con patologías concretas.

En primer término se dispone del catálogo de síntomas clínicos (máximo MAX_TAULA_SIMP = 1000 síntomas), caracterizados cada uno por su identificador numérico (código entero) y su denominación textual (de tamaño máximo MAX_P = 60 caracteres). Se cuenta ya con la siguiente declaración y función de lectura implementada:

constant

MAX_P:= 60;

MAX_TAULA_SIMP:= 1000;

fconst

tipus

registre simptoma_tipus és

codi: enter;

nom: taula [MAX_P] de caràcters;

fregistre

ftipus

funció llegir_simptomes (var simptomes: taula de simptoma_tipus, dim: enter) retorna enter; Por otra parte, se proporciona un archivo secundario con los registros de patologías (hasta un máximo de 100 enfermedades). Cada entrada contiene: nombre de la enfermedad (hasta MAX_P caracteres), fecha de alta o inclusión (día, mes y año), cantidad de síntomas vinculados a la patología y la relación de identificadores enteros de dichos síntomas (como máximo 10 síntomas por enfermedad). Ejemplo de formato en fichero:

PULMONIA 10/2/2013 5: 2034, 5764, 1911, 1002, 1001

MALARIA 5/5/2005 10: 1001, 994, 303, 17, 452, 987, 1023, 98, 987, 32

a. Diseñar la definición formal de los tipos de datos necesarios para guardar íntegramente la información de las enfermedades del fichero en pseudocódigo.

Ejercicio 1.b - Subprogrames: accions, funcions i… · Subprogrames: accions, funcions i pas de paràmetres

Subprogramas de soporte predefinidos (disponibles)

acció llegir_cadena (var c1: taula de caràcters, dim: enter, sentinella: caràcter): efectúa la lectura por teclado de una cadena hasta hallar el centinela o alcanzar la capacidad máxima dim, añadiendo el terminador '\0'.

acció copiar_cadena (c_ori: taula de caràcter, var c_destí: taula de caràcter): copia el contenido de la cadena origen en la de destino.

acció escriure_cadena (cadena: taula de caràcters): imprime la cadena indicada por el canal estándar.

funció comparar_cadenes (c1, c2: taula de caràcters) retorna booleà: evalúa la igualdad léxica sin distinguir entre mayúsculas y minúsculas (insensible a la capitalización).

Ejercicio 1. Enfermedades y síntomas

Un centro hospitalario requiere una aplicación informática para extraer estadísticas y asociar informes médicos con patologías concretas.

En primer término se dispone del catálogo de síntomas clínicos (máximo MAX_TAULA_SIMP = 1000 síntomas), caracterizados cada uno por su identificador numérico (código entero) y su denominación textual (de tamaño máximo MAX_P = 60 caracteres). Se cuenta ya con la siguiente declaración y función de lectura implementada:

constant

MAX_P:= 60;

MAX_TAULA_SIMP:= 1000;

fconst

tipus

registre simptoma_tipus és

codi: enter;

nom: taula [MAX_P] de caràcters;

fregistre

ftipus

funció llegir_simptomes (var simptomes: taula de simptoma_tipus, dim: enter) retorna enter; Por otra parte, se proporciona un archivo secundario con los registros de patologías (hasta un máximo de 100 enfermedades). Cada entrada contiene: nombre de la enfermedad (hasta MAX_P caracteres), fecha de alta o inclusión (día, mes y año), cantidad de síntomas vinculados a la patología y la relación de identificadores enteros de dichos síntomas (como máximo 10 síntomas por enfermedad). Ejemplo de formato en fichero:

PULMONIA 10/2/2013 5: 2034, 5764, 1911, 1002, 1001

MALARIA 5/5/2005 10: 1001, 994, 303, 17, 452, 987, 1023, 98, 987, 32

b. Escribir exclusivamente la cabecera del subprograma encargado de leer las enfermedades desde el archivo y cargarlas en la estructura de datos definida, devolviendo el número real de patologías leídas (como mucho 100).

Ejercicio 1.c.1 - Esquema de cerca amb aturada an… · Esquema de cerca amb aturada anticipada

Subprogramas de soporte predefinidos (disponibles)

acció llegir_cadena (var c1: taula de caràcters, dim: enter, sentinella: caràcter): efectúa la lectura por teclado de una cadena hasta hallar el centinela o alcanzar la capacidad máxima dim, añadiendo el terminador '\0'.

acció copiar_cadena (c_ori: taula de caràcter, var c_destí: taula de caràcter): copia el contenido de la cadena origen en la de destino.

acció escriure_cadena (cadena: taula de caràcters): imprime la cadena indicada por el canal estándar.

funció comparar_cadenes (c1, c2: taula de caràcters) retorna booleà: evalúa la igualdad léxica sin distinguir entre mayúsculas y minúsculas (insensible a la capitalización).

Ejercicio 1. Enfermedades y síntomas

Un centro hospitalario requiere una aplicación informática para extraer estadísticas y asociar informes médicos con patologías concretas.

En primer término se dispone del catálogo de síntomas clínicos (máximo MAX_TAULA_SIMP = 1000 síntomas), caracterizados cada uno por su identificador numérico (código entero) y su denominación textual (de tamaño máximo MAX_P = 60 caracteres). Se cuenta ya con la siguiente declaración y función de lectura implementada:

constant

MAX_P:= 60;

MAX_TAULA_SIMP:= 1000;

fconst

tipus

registre simptoma_tipus és

codi: enter;

nom: taula [MAX_P] de caràcters;

fregistre

ftipus

funció llegir_simptomes (var simptomes: taula de simptoma_tipus, dim: enter) retorna enter; Por otra parte, se proporciona un archivo secundario con los registros de patologías (hasta un máximo de 100 enfermedades). Cada entrada contiene: nombre de la enfermedad (hasta MAX_P caracteres), fecha de alta o inclusión (día, mes y año), cantidad de síntomas vinculados a la patología y la relación de identificadores enteros de dichos síntomas (como máximo 10 síntomas por enfermedad). Ejemplo de formato en fichero:

PULMONIA 10/2/2013 5: 2034, 5764, 1911, 1002, 1001

MALARIA 5/5/2005 10: 1001, 994, 303, 17, 452, 987, 1023, 98, 987, 32

c.1. Subprograma que reciba el nombre de un síntoma y la tabla de síntomas, y localice y retorne su código asociado (o -1 si el síntoma no figura en el catálogo). Sin imprimir por pantalla nada en su interior.

Ejercicio 1.c.2-1.c.3 - Taules unidimensionals i… · Taules unidimensionals i bidimensionals

Subprogramas de soporte predefinidos (disponibles)

acció llegir_cadena (var c1: taula de caràcters, dim: enter, sentinella: caràcter): efectúa la lectura por teclado de una cadena hasta hallar el centinela o alcanzar la capacidad máxima dim, añadiendo el terminador '\0'.

acció copiar_cadena (c_ori: taula de caràcter, var c_destí: taula de caràcter): copia el contenido de la cadena origen en la de destino.

acció escriure_cadena (cadena: taula de caràcters): imprime la cadena indicada por el canal estándar.

funció comparar_cadenes (c1, c2: taula de caràcters) retorna booleà: evalúa la igualdad léxica sin distinguir entre mayúsculas y minúsculas (insensible a la capitalización).

Ejercicio 1. Enfermedades y síntomas

Un centro hospitalario requiere una aplicación informática para extraer estadísticas y asociar informes médicos con patologías concretas.

En primer término se dispone del catálogo de síntomas clínicos (máximo MAX_TAULA_SIMP = 1000 síntomas), caracterizados cada uno por su identificador numérico (código entero) y su denominación textual (de tamaño máximo MAX_P = 60 caracteres). Se cuenta ya con la siguiente declaración y función de lectura implementada:

constant

MAX_P:= 60;

MAX_TAULA_SIMP:= 1000;

fconst

tipus

registre simptoma_tipus és

codi: enter;

nom: taula [MAX_P] de caràcters;

fregistre

ftipus

funció llegir_simptomes (var simptomes: taula de simptoma_tipus, dim: enter) retorna enter; Por otra parte, se proporciona un archivo secundario con los registros de patologías (hasta un máximo de 100 enfermedades). Cada entrada contiene: nombre de la enfermedad (hasta MAX_P caracteres), fecha de alta o inclusión (día, mes y año), cantidad de síntomas vinculados a la patología y la relación de identificadores enteros de dichos síntomas (como máximo 10 síntomas por enfermedad). Ejemplo de formato en fichero:

PULMONIA 10/2/2013 5: 2034, 5764, 1911, 1002, 1001

MALARIA 5/5/2005 10: 1001, 994, 303, 17, 452, 987, 1023, 98, 987, 32

c.2. Subprograma que reciba un año natural y la tabla con las enfermedades almacenadas, y determine el recuento de enfermedades cuya fecha de inclusión sea estrictamente posterior al año facilitado.

c.3. Subprograma que reciba el registro de una enfermedad concreta y una lista/tabla de códigos de síntomas, y devuelva el porcentaje (sobre el total de síntomas de la enfermedad) de aquellos que se encuentran presentes en dicha tabla de códigos.

Ejercicio 1.d - Disseny del programa principal i… · Disseny del programa principal i resolució integrada de problemes

Subprogramas de soporte predefinidos (disponibles)

acció llegir_cadena (var c1: taula de caràcters, dim: enter, sentinella: caràcter): efectúa la lectura por teclado de una cadena hasta hallar el centinela o alcanzar la capacidad máxima dim, añadiendo el terminador '\0'.

acció copiar_cadena (c_ori: taula de caràcter, var c_destí: taula de caràcter): copia el contenido de la cadena origen en la de destino.

acció escriure_cadena (cadena: taula de caràcters): imprime la cadena indicada por el canal estándar.

funció comparar_cadenes (c1, c2: taula de caràcters) retorna booleà: evalúa la igualdad léxica sin distinguir entre mayúsculas y minúsculas (insensible a la capitalización).

Ejercicio 1. Enfermedades y síntomas

Un centro hospitalario requiere una aplicación informática para extraer estadísticas y asociar informes médicos con patologías concretas.

En primer término se dispone del catálogo de síntomas clínicos (máximo MAX_TAULA_SIMP = 1000 síntomas), caracterizados cada uno por su identificador numérico (código entero) y su denominación textual (de tamaño máximo MAX_P = 60 caracteres). Se cuenta ya con la siguiente declaración y función de lectura implementada:

constant

MAX_P:= 60;

MAX_TAULA_SIMP:= 1000;

fconst

tipus

registre simptoma_tipus és

codi: enter;

nom: taula [MAX_P] de caràcters;

fregistre

ftipus

funció llegir_simptomes (var simptomes: taula de simptoma_tipus, dim: enter) retorna enter; Por otra parte, se proporciona un archivo secundario con los registros de patologías (hasta un máximo de 100 enfermedades). Cada entrada contiene: nombre de la enfermedad (hasta MAX_P caracteres), fecha de alta o inclusión (día, mes y año), cantidad de síntomas vinculados a la patología y la relación de identificadores enteros de dichos síntomas (como máximo 10 síntomas por enfermedad). Ejemplo de formato en fichero:

PULMONIA 10/2/2013 5: 2034, 5764, 1911, 1002, 1001

MALARIA 5/5/2005 10: 1001, 994, 303, 17, 452, 987, 1023, 98, 987, 32

d. Diseñar un algoritmo principal que, coordinando los subprogramas anteriores:

Cargue los datos de síntomas y de enfermedades.

Pida al usuario un año y muestre el mensaje con el formato: xx malalties posteriors a l'any aaaa.

Pida la denominación de un síntoma e imprima en pantalla su código correspondiente o bien notifique si no existe.

Ejercicio 2 - Disseny del programa principal i re… · Disseny del programa principal i resolució integrada de problemes

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.

También puedes estudiar por temas

Practica un tema con ejercicios de los exámenes de todos los años, mezclados.

Ver los 7 temas

Otras convocatorias de 2015

Examen Segundo Parcial. Evaluación Continua 2015-2016 (2015)