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;
}
davy.ai
Parece que el problema está en el cálculo de los promedios. No estás reiniciando la variable
Averages[i]
a0
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.