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;
}

Entradas relacionadas: