Gestión de Datos de Pacientes en Hospitales: Implementación en C
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,64 KB
Gestión de Datos de Pacientes en Hospitales: Implementación en C
Supongamos que por cada unidad de un hospital se registra el número de días que se encuentra hospitalizado un paciente. Para ello, nuestro programa tendrá los tipos siguientes:
Tipo Unidad
- Nombre de tipo Cadena
- Array de enteros con los códigos de todos los pacientes pertenecientes a esa planta o unidad.
- Array de enteros con el número de días ingresado el paciente en dicha planta o unidad.
- Número de pacientes registrados (tamaño de los arrays anteriores). Máximo 50.
Tipo Hospital
- Código de identificación de tipo Cadena
- Array de Unidad con como máximo 30 elementos
- Número de unidades (tamaño del array anterior)
Ejercicios
1. Defina las constantes y tipos de datos más adecuados para cada uno de los tipos descritos. Defina también el tipo Lógico y Fichero. (1 Punto)
#define MAXCAR 256
#define MAXPAC 50
#define MAXUNI 30
typedef FILE* Fichero;
typedef enum {falso,cierto} Logico;
typedef char Cadena [MAXCAR];
typedef int TablaEnteros [MAXPAC];
typedef struct{
Cadena nombre;
TablaEnteros codigos;
TablaEnteros diasIngresados;
int numPacientes;
} Unidad;
typedef Unidad TablaUnidades[MAXUNI];
typedef struct{
Cadena codigo;
TablaUnidades unidades;
int numUnidades;
} Hospital;
2. Implemente una función que dado nomfich
un argumento de tipo Cadena, lea de un fichero de texto los códigos y días de ingreso de los pacientes, devolviendo un tipo Unidad que tenga como nombre el nombre del fichero (nomfich
). El primer valor del fichero será el número de pacientes y después cada código de paciente seguido del número de días que dicho paciente estuvo ingresado. (1 P)
Ejemplo fichero Cardiovascular 8 234 5 321 35 456 15 342 28 213 40 348 4 315 58 251 60 // la unidad cardiovascular tuvo 8 pacientes: el paciente 234 con 5 días ingresado, el paciente 321 con 35 días en la unidad, etc.
Unidad ejercicio2 (const Cadena nomfich){
Fichero f;
Unidad u;
int i;
f = fopen(nomfich, "r");
strcpy(u.nombre, nomfich);
if(f==NULL){
printf("Error");
} else {
fscanf ( f, "%d", &u.numPacientes);
for (i=0; i<u.numPacientes; i++){
fscanf(f, "%d", &u.codigos[i]);
fscanf(f, "%d", &u.diasIngresados[i]);
}
fclose(f);
}
return u;
}
3. Implemente una función que reciba una Unidad y devuelva el código del paciente que estuvo más días ingresado y sus días de estancia. Por ejemplo, para la planta Cardiovascular el paciente 251 estuvo 60 días ingresado (1 P)
void ejercicio3 (Unidad u, int *pdias, int *pcod){
int i;
*pdias= u.diasIngresados[0];
*pcod= u.codigos[0];
for (i=1; i<u.numPacientes; i++){
if (u.diasIngresados[i] > *pdias){
*pdias = u.diasIngresados[i];
*pcod = u.codigos[i];
}
}
}
4. Implemente una función que dado una Unidad y un valor (v) devuelva un array con los códigos de los pacientes con un ingreso mayor o igual a v. Por ejemplo, para la unidad Cardiovascular y v 30 días debería devolver un array con los códigos 321, 213, 315, 251. (1 P)
int ejercicio4 (Unidad u, int v, TablaEnteros t){
int i;
int j=0;
for (i=0; i<u.numPacientes; i++){
if (u.diasIngresados[i]>=v){
t[j]= u.codigos[i];
j++;
}
}
return j;
}
5. Implemente una función que reciba una Unidad y un entero representando un paciente, devolverá el número de días de ingreso ó -1 si no ha estado ingresado. Por ejemplo, para el paciente 456 debe devolver 15 días y para el paciente 851 -1. (1 P)
int ejercicio5 (Unidad u, int codigo){
int i;
int resul=-1;
for(i=0; i<u.numPacientes; i++){
if (u.codigos[i]==codigo){
resul=u.diasIngresados[i];
break;
}
}
return resul;
}
6. Implemente una función tal que dado una Unidad y un número entero (n) devuelva si todos los pacientes han estado ingresado como mínimo n días. Deberá devolver un valor de tipo lógico. (1 P)
Logico ejercicio6 (Unidad u, int n){
Logico resul = cierto;
int i;
for (i=0; i<u.numPacientes; i++){
if( u.diasIngresados[i]<n){
resul=falso;
break;
}
}
return resul;
}
7. Implemente una función tal que dado una Unidad devuelve el valor medio de los días de estancia de los pacientes ingresados (1 P)
double ejercicio7(Unidad u){
double resul=0.0;
int i;
for (i=0; i<u.numPacientes; i++){
resul= resul + u.diasIngresados[i];
}
return resul/u.numPacientes;
}
8. Usando la función 7 implemente una función tal que dado un Hospital devuelva el nombre de la Unidad con el tiempo de ingreso medio mayor de todo el Hospital y cuál es ese valor. (1,5 P)
double ejercicio8 (Hospital h, Cadena resul){
Unidad max= h.unidades[0];
double maxDiasIngresados= ejercicio7(h.unidades[0]);
int i;
for (i=1; i<h.numUnidades; i++){
if (ejercicio7(h.unidades[i])>maxDiasIngresados){
maxDiasIngresados=ejercicio7(h.unidades[i]);
max=h.unidades[i];
}
}
strcpy(resul, max.nombre);
return maxDiasIngresados;
}