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