Gestión de Datos de Sensibilidad Antibiótica en C: Guardar, Cargar y Determinar la Cepa Más Resistente
Gestión de datos de sensibilidad antibiótica en lenguaje C
A continuación se presentan tres funciones en lenguaje C que permiten guardar, cargar y procesar datos de sensibilidad de distintas cepas bacterianas frente a varios antibióticos.
1. Guardar los datos en un fichero
void guardarDatos(char cepas[NUM_CEPAS][MAX_NOMBRE], float sensibilidad[NUM_CEPAS][NUM_ANTIB])
{
int i, j;
FILE *f;
f = fopen("DATOS.txt", "w");
if (f == NULL) {
printf("Fichero no encontrado");
return;
}
fprintf(f, "\t");
for (i = 0; i < NUM_ANTIB; i++) {
fprintf(f, "Antib%d\t", i);
}
fprintf(f, "\n");
for (i = 0; i < NUM_CEPAS; i++) {
fprintf(f, "%s\t", cepas[i]);
for (j = 0; j < NUM_ANTIB; j++) {
fprintf(f, "%.2f\t", sensibilidad[i][j]);
}
fprintf(f, "\n");
}
fclose(f);
}
2. Mostrar los datos desde el fichero
void mostrarDatosFichero(char cepas[NUM_CEPAS][MAX_NOMBRE], float sensibilidad[NUM_CEPAS][NUM_ANTIB])
{
int i, j;
FILE *f = fopen("DATOS.txt", "r");
if (f == NULL) {
printf("No se pudo abrir correctamente el fichero para leer\n");
return;
}
char encabezado[100];
fgets(encabezado, 100, f);
for (i = 0; i < NUM_CEPAS; i++) {
fscanf(f, "%s", cepas[i]);
for (j = 0; j < NUM_ANTIB; j++) {
fscanf(f, "%f", &sensibilidad[i][j]);
}
}
fclose(f);
printf("Datos cargados desde el archivo:\n");
printf("\t");
for (i = 0; i < NUM_ANTIB; i++) {
printf("Antib%d\t", i);
}
printf("\n");
for (i = 0; i < NUM_CEPAS; i++) {
printf("%s\t", cepas[i]);
for (j = 0; j < NUM_ANTIB; j++) {
printf("%.2f\t", sensibilidad[i][j]);
}
printf("\n");
}
}
Nota
En el código original, el bucle de impresión de valores recorría NUM_CEPAS en lugar de NUM_ANTIB, y el de encabezados también usaba NUM_CEPAS. Se ha corregido para usar NUM_ANTIB, que es el número correcto de columnas.
3. Determinar la cepa más resistente
void cepaMasResistente(char cepas[NUM_CEPAS][MAX_NOMBRE], float sensibilidad[NUM_CEPAS][NUM_ANTIB])
{
int i, indice;
float suma1 = 0, suma2 = 0, suma3 = 0, sumaresistencia;
for (i = 0; i < NUM_ANTIB; i++) {
suma1 = suma1 + sensibilidad[0][i];
}
for (i = 0; i < NUM_ANTIB; i++) {
suma2 = suma2 + sensibilidad[1][i];
}
for (i = 0; i < NUM_ANTIB; i++) {
suma3 = suma3 + sensibilidad[2][i];
}
if (suma1 > suma2 && suma1 > suma3) {
sumaresistencia = suma1;
indice = 0;
} else if (suma2 > suma1 && suma2 > suma3) {
sumaresistencia = suma2;
indice = 1;
} else {
sumaresistencia = suma3;
indice = 2;
}
printf("La cepa más resistente es %s, por lo que la sensibilidad total es de %.2f\n", cepas[indice], sumaresistencia);
}
Notas
- Las variables
suma1,suma2ysuma3se inicializan a0, ya que en el original se usaban sin inicializar, lo que provocaba comportamiento indefinido. - Se corrige
cepa[indice]porcepas[indice]. - Se mantiene la lógica original, que suma la sensibilidad de cada cepa y selecciona la de mayor suma. Cabe señalar que, según el enunciado, una mayor suma de sensibilidad indicaría mayor sensibilidad y no mayor resistencia; si la intención es identificar la más resistente, debería buscarse la suma menor.