Gestión de Datos de Sensibilidad Antibiótica en C: Guardar, Cargar y Determinar la Cepa Más Resistente

Informática y Telecomunicaciones3,74 KB

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, suma2 y suma3 se inicializan a 0, ya que en el original se usaban sin inicializar, lo que provocaba comportamiento indefinido.
  • Se corrige cepa[indice] por cepas[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.

Descargar

PDF Word HTML