Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MartaR95 en 22 Diciembre 2017, 05:45 am



Título: Programa en C
Publicado por: MartaR95 en 22 Diciembre 2017, 05:45 am
Hola! Hoy he estado haciendo un ejercicio de lenguaje c relacionado con el tema de los ficheros. A pesar de que el programa se ejecuta, no ha salido bien, practicamente muestra por pantalla el contenido del archivo de texto, no muestra el calculo de la media ni nada.  Podeis echarme una mano?? Gracias! :) Os dejo aqui el enunciado y mi programa:


La Unión Europea quiere recolectar datos sobre pacientes ingresado con síntomas de la gripe A. Por esto, cada hospital debe enviar un archivo de texto con los datos relativos a la medida de la temperatura de los pacientes al momento del ingreso.

Los ficheros deberán de tener una estructura establecida por la Unión Europea. Un ejemplo de tal fichero es el siguiente:
#Archivos con medidas de temperaturas de pacientes sanos y con gripe A #origen: Hospital Virgen Macarena, Sevilla, Spain #BEGIN DATA A FLUE #números de medidas pacientes con gripe A #other comments NUMBER SAMPLES 8 36.5 38.9 39 38.2 37.6 40 38.2 39.3 HEALTHY #números de medidas pacientes sanos NUMBER SAMPLES 6 36.3 36.7 35.9 36.3 36.4 36.2 #END OF DATA
Las líneas que empiezan por # son comentarios. La línea siguiente a la línea que contiene la frase “NUMBER SAMPLES” contienen el número de medidas enviadas (por ejemplo 8 en el caso del ejemplo de pacientes con gripe A). A continuación se encuentran los datos (fíjese que hay 8 números reales separados por espacios).
Escriba un programa que lea un fichero en este formato, y calcule la media de los pacientes sanos y de los pacientes con gripe A, imprimiendo por pantalla el resultado.

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100

float calcula_media(float [],int);

void main()
{
    FILE*fp;
    char cad[TAM];
    char nombre_patologia[TAM];
    int numero_pacientes;
    int i;
    float media_temperaturas;
    fp=fopen("datos_hospital.txt","r");
    if(fp==NULL) {
        printf("Cannot open file.\n");
    }
    else {
        //Esquema de recorrido
        fgets(cad,TAM,fp);
        while(!feof(fp)){
        //Procesamiento
            if(cad[0]!='#'){
                if(strcmp(cad,"NUMBER SAMPLES")==0){
                    fscanf(fp,"%d",&numero_pacientes);
                    float temperaturas[numero_pacientes];
                    for(i=0;i<numero_pacientes;i++){
                        fscanf(fp,"%f",&temperaturas[i]);
                    }
                    media_temperaturas=calcula_media(temperaturas,numero_pacientes);
                    printf("La temperatura media es:%f",media_temperaturas);
                }
                else{
                    strcpy(nombre_patologia,cad);
                    printf("El nombre de enfermedad es: %s",nombre_patologia);
                }
            }
            fgets(cad,TAM,fp);
        }

        fclose(fp);
    }
}

float calcula_media(float temperaturas[],int numero_pacientes){
    int i;
    float media=0;
    for(i=0;i<numero_pacientes;i++){
        media=media+temperaturas[i];
    }
    media=media/numero_pacientes;
    return media;
}


Título: Re: Programa en C
Publicado por: MAFUS en 22 Diciembre 2017, 12:45 pm
Estructura bien el ejemplo del archivo, sino no hay forma de entenderlo. Bueno, sí la hay, pero da pereza.