Ver Mensaje Individual
  #13 (permalink)  
Antiguo 22/06/2010, 23:10
AlanChavez
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 14 años, 4 meses
Puntos: 95
Respuesta: obtener la media de un vector

Te salen un monton de números simple y sencillamente porque estás asumiendo que el usuario ha metido los 100 números, siendo que 100, es solamente el tamaño máximo de tu vector.

En otras palabras:
Código C++:
Ver original
  1. while((op == 's' || op == 'S') && i < TAM){
  2. printf("Introduce un número: ");
  3. scanf("%lf", &v[i]);
  4. i++;
  5. printf("Otro? (s/n)");
  6. scanf("%1s", &op);
  7. }
  8. for(i=0; i<TAM; i++){
  9. media += v[i];

En While, estas teniendo una variable de control 'i' para mantener a tu vector dentro de los limites especificados (0<i<100)
Sin embargo cuando estas calculando la media, estas recorriendo el vector completo y si no has "limpiado" el vector, antes de utilizarlo, estas sumando la informacion que contenían anteriormente esas posiciones.

En otras palabras, tienes un vector de 100 posiciones. Cuando la computadora asigna el espacio de memoria para colocar a tu vector, no limpia la información que tenía ese vector.

Si tu llenas solo 20 casillas de ese vector, las otras 80 casillas restantes van a estar llenas de basura. En este caso, serían números enteros con diferentes valores.

Para corregir ese problema te propongo dos alternativas, y ambas igual de faciles de implementar.
La primera es que antes de empezar a pedir números, incluyas el siguiente proceso
Código C:
Ver original
  1. for(i=0;i<=TAM;i++)
  2. {
  3. v[i] = 0;
  4. }
De esta manera, todas las casillas de tu vector van a estar "limpias", es decir, cada casilla tendrá almacenado el valor 0, que al momento de recorrer tu vector, no alteraras la suma.

La siguiente alternativa es un poco mas tediosa, pero es la mas efectiva, es simplemente agregar una variable de control a tu programa, para que al momento de que recorras el vector, no lo recorra hasta la posicion numero 99

Te anexo el código modificado:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 100
  4.  
  5. int main(){
  6. double v[TAM];
  7. int i=0;
  8. int control_vector=0;
  9. char op='s';
  10. double media = 0.0;
  11. while((op == 's' || op == 'S') && i < TAM){
  12. printf("Introduce un número: ");
  13. scanf("%lf", &v[i]);
  14. i++;
  15. printf("Otro? (s/n)");
  16. scanf("%1s", &op);
  17. }
  18. control_vector = i;
  19. for(i=0; i<=control_vector; i++){
  20. media += v[i];
  21. }
  22. media = media/TAM;
  23. printf("La media es %lf\n", media);
  24. }

Agregué la variable control_vector.
Una vez que hayas terminado de llenar todas las posiciones del vector, le asignas el valor de la variable i (que para cuando salgas de While, va a contener el número máximo de casillas llenas). Y utilizas ese variable como límite o "tope" para el recorrido y el calculo de la media aritmetica de tu vector.