Manejo de Datos de Pacientes y Muestras en C

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,03 KB

Definición de Constantes y Tipos de Datos

1. Tipo Paciente

  • Código de identificación (Cadena)
  • Array de enteros con 720 (24x30) valores de presión sanguínea tomados hora a hora durante un mes.
  • Array de reales con un máximo de 1000 elementos que miden el nivel de expresión genética del paciente sometido a cierta experimentación.
  • Número de genes (tamaño del array anterior).

2. Tipo Muestra

  • Código del experimento (Cadena)
  • Array de máximo 100 pacientes.
  • Número de pacientes (tamaño del array anterior).
#define MAXCAR 256
#define MAXPRE 720
#define MAXGEN 1000
#define MAXPAC 100

typedef FILE* fichero;
typedef enum {false, true} Logico;
typedef char Cadena[MAXCAR];
typedef int TablaEnteros[MAXPRE];
typedef double TablaReales[MAXGEN];

typedef struct {
    Cadena codigoIden;
    TablaEnteros presiones;
    TablaReales expresionGen;
    int numGenes;
} Paciente;

typedef Paciente TablaPacientes[MAXPAC];

typedef struct {
    Cadena codigo;
    TablaPacientes pacientes;
    int numPacientes;
} Muestra;

Implementación de Funciones

1. Lectura de Datos de Presión Sanguínea

void ejercicio1(const Cadena nomfich, TablaEnteros t) {
    fichero f;
    int i;

    f = fopen(nomfich, "r");
    if (f == NULL) {
        printf("Error");
    } else {
        for (i = 0; i < MAXPRE; i++) {
            fscanf(f, "%d", &t[i]);
        }
        fclose(f);
    }
}

2. Cálculo de Día y Hora

void ejercicio2(int n, int *pdia, int *phora) {
    *pdia = n / 24 + 1;
    *phora = n % 24;
}

3. Valor Máximo de Presión Sanguínea

int ejercicio3(Paciente p) {
    int i;
    int max = p.presiones[0];
    for (i = 1; i < MAXPRE; i++) {
        if (p.presiones[i] > max) {
            max = p.presiones[i];
        }
    }
    return max;
}

4. Búsqueda de un Valor de Presión Sanguínea

int ejercicio4(Paciente p, int vpres) {
    int pos = -1;
    int i;
    for (i = 0; i < MAXPRE; i++) {
        if (p.presiones[i] == vpres) {
            pos = i;
            break;
        }
    }
    return pos;
}

5. Día y Hora de la Máxima Presión Sanguínea

void ejercicio5(Paciente p, int *ph, int *pd) {
    ejercicio2(ejercicio4(p, ejercicio3(p)), ph, pd);
}

6. Verificación de Presión Sanguínea Mayor o Igual a un Valor

Logico ejercicio6(Paciente p, int vpres) {
    int i;
    Logico resul = false;
    for (i = 0; i < MAXPRE; i++) {
        if (p.presiones[i] >= vpres) {
            resul = true;
            break;
        }
    }
    return resul;
}

7. Conteo de Valores de Expresión Genética Mayores a un Valor

int ejercicio7(Paciente p, double expgen) {
    int cont = 0;
    int i;
    for (i = 0; i < p.numGenes; i++) {
        if (p.expresionGen[i] > expgen) {
            cont++;
        }
    }
    return cont;
}

8. Conteo de Valores de Expresión Genética en una Muestra

int ejercicio8(Muestra m, double expgen) {
    int i;
    int sum = 0;
    for (i = 0; i < m.numPacientes; i++) {
        sum = sum + ejercicio7(m.pacientes[i], expgen);
    }
    return sum;
}

9. Creación de un Paciente desde un Fichero

Paciente creaPaciente(Cadena nombre) {
    Paciente p;
    strcpy(p.codigoIden, nombre);
    ejercicio1(nombre, p.presiones);
    p.numGenes = 0;
    return p;
}

10. Filtrado de Pacientes por Presión Sanguínea

Muestra ejercicio10(Muestra m, int vpres) {
    Muestra res;
    int i, j = 0;
    strcpy(res.codigo, m.codigo);
    strcat(res.codigo, "2");
    for (i = 0; i < m.numPacientes; i++) {
        if (ejercicio6(m.pacientes[i], vpres)) {
            res.pacientes[j] = m.pacientes[i];
            j++;
        }
    }
    res.numPacientes = j;
    return res;
}

Entradas relacionadas: