es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo valores incorrectos al calcular valores promedio de un Array en C.

Estoy intentando leer los valores de una matriz guardada en un archivo, luego calcular el promedio de cada columna.

Este es mi resultado:

3.000000        -965.000000     3.000000        -1111.000000    -585.000000
2.000000        -337.000000     2.000000        -649.000000     687.000000
3.000000        922.000000      3.000000        -1160.000000    -699.000000
4.000000        -837.000000     4.000000        -283.000000     -1696.000000
2.400000        -389.000000     2.400000        -449.000000     -1237.000000

Promedios:
-531.000000     -59.000000      -186.200000     -561.600000     -414.040000

El tamaño del array se calcula a partir de la cantidad de datos en el archivo mediante la función “numOfLines”.
La matriz se lee correctamente desde el archivo, pero el cálculo parece estar mal de alguna manera.

Cualquier idea sobre la causa de este problema sería muy apreciada.

PD: Soy nuevo en la programación en C.

int numOfLines(FILE* Matrixfile) 
{ 
    int c, count;
    count = 0;
    for (;; ) {
        c = fgetc(Matrixfile);
        if (c == EOF)
            break;          

    if (c == '\n')
        ++count;        // fin de línea => incrementar contador de línea
}
rewind(Matrixfile);

return count;


}

int main()
{
    FILE* Matrixfile;
    Matrixfile = fopen("dataread.txt", "r");
    if (Matrixfile == NULL)
        return 1;

int Msize = numOfLines(Matrixfile);

printf("%d\n\n", Msize);


// Leyendo el archivo de texto en un array 2D
int i, j;

//Asignación del array
double** Matrix2;
Matrix2 = (double**)calloc(Msize, sizeof(double*));
for (int i = 0; i < Msize; i++)
    Matrix2[i] = (double*)calloc(Msize, sizeof(double));


for (i = 0; i < Msize; i++) {
    for (j = 0; j < Msize; j++) {
        fscanf(Matrixfile, "%lf", &Matrix2[i][j]);
    }

    char eol;                         // variable dummy
    fscanf(Matrixfile, "%c", &eol);     // leer el carácter \n
}

double* Averages;
Averages = (double*)calloc(Msize, sizeof(double));

//cálculo aquí

for (i = 0; i < Msize; i++) {
    for (j = 0; j < Msize; j++) {
        printf("%lf\t", Matrix2[i][j]);
        Averages[i] = Averages [i] + Matrix2[i][j]/Msize;
        if (j == Msize - 1)
            printf("\n");
    }

    //putc('\n', stdout);                 
}
printf("\n\nPromedios:\n");
for (i = 0; i < Msize; i++)
    printf("%lf\t", Averages[i]);

fclose(Matrixfile);


return 0;
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el cálculo de los promedios. No estás reiniciando la variable Averages[i] a 0 antes de cada iteración del bucle. Esto significa que los valores se están sumando a los valores de la iteración anterior, lo que resulta en promedios incorrectos.

    Intenta agregar Averages[i] = 0; antes del bucle interno para reiniciar el valor cada vez.

Comments are closed.