Problema con variables puntero

Iniciado por oxi12pek, 5 Noviembre 2012, 16:35 PM

0 Miembros y 1 Visitante están viendo este tema.

oxi12pek

Hola a todos! Tengo un problemilla con un programa. El programa tiene que calcular toda la suma de los elementos del array y su promedio mediante el uso de punteros y una funcion. Yo he escrito este programa:
void avg_sum(double a[],int n,double *avg, double *sum)
  {
  int i;

  for(i=0;i<n;i++)
    *sum+=a;
  *avg=(*sum/n);
  }
int main(void)
{
  double A[]={1,2,3,4,5,6.6,7.7,88.8,1,4},x,y;
  int j;

  avg_sum(A,j,&x,&y);
  printf("Suma total del array: %f\n",y);
  printf("Promedio del array: %f\n",x);
}
Me puede explicar alguien que estoy haciendo mal?
Gracias a todos !!
Algun dia lo sere...

rir3760

Los errores son dos:

* Al llamar a la función "avg_sum" su segundo argumento debe ser el numero de elementos en el array. Tu pasas el valor de "j" el cual es "no definido" o "basura".

* El valor inicial del acumulador (la variable "y") también es "no definido" o "basura", debes inicializarlo con cero.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

BatchianoISpyxolo

#include <stdio.h>
void avg_sum(double a[],int n,double *avg, double *sum)
  {
  int i;

  *sum = 0;

  for(i=0;i<n;i++) *sum+=a[i];
  *avg=(*sum/n);
  }

int main(void)
{
  double A[]={1,2,3,4,5,6.6,7.7,88.8,1,4},x,y;
  int j=10;

  avg_sum(A,j,&x,&y);
  printf("Suma total del array: %.2f\n",y);
  printf("Promedio del array: %.2f\n",x);
}


También faltaba indexar el array de doubles.
Puede que desees aprender a programar desde 0: www.espascal.es

oxi12pek

Y porque tengo que inicializar y??? No lo veo claro.
Algun dia lo sere...

BatchianoISpyxolo

Cita de: oxi12pek en  5 Noviembre 2012, 16:50 PM
Y porque tengo que inicializar y??? No lo veo claro.

O inicializas y o inicializas *sum dentro de la función.

Por que si no el la primera suma harías

sum = basura + a[0]

Porque y/*sum inicialmente tiene un valor basura, no tiene por qué ser 0.
Puede que desees aprender a programar desde 0: www.espascal.es

rir3760

Cita de: BatchianoISpyxolo en  5 Noviembre 2012, 16:48 PMTambién faltaba indexar el array de doubles.
Esa operacion:
*sum += a[i];
Si se encuentra en el primer mensaje pero oxi12pek no utilizo las etiquetas de código (debería) y por eso en su lugar aparece el texto en cursiva.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

oxi12pek

Vale. Ahora lo veo. Muchas gracias por tomarte un tiempo en contestar. Me has ayudado mucho.
SALUDOS
Algun dia lo sere...

BatchianoISpyxolo

Cita de: rir3760 en  5 Noviembre 2012, 17:11 PM
Esa operacion:
*sum += a[i];
Si se encuentra en el primer mensaje pero oxi12pek no utilizo las etiquetas de código (debería) y por eso en su lugar aparece el texto en cursiva.

Un saludo

Toda la razón. xD
Puede que desees aprender a programar desde 0: www.espascal.es