Problema con codigo en C

Iniciado por TheShocker, 21 Diciembre 2014, 15:07 PM

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

TheShocker

Buenas, estoy aprendiendo a programar en C y tengo una duda.

Al compilar el programa y al hacer la media me devuelve como resultado un 0.0000 y no consigo ver cual es el problema

¿Alguien me echa una mano?








#include <stdio.h>
#include <stdlib.h>
#define DIM 100


void leer_vector(int *, int);
float media_vector (int *, int);
void escribir_vector(int *, int);

int main(int argc, char *argv[])

   
    int dim;
    int vector[DIM];
   
    printf("Introduce la dimension del vector: ");
    scanf("%d",&dim);
   
    leer_vector(vector,dim);
   
   
    printf("\n\n");
   
    escribir_vector(vector,dim);
   
    media_vector(vector,dim);
   
    printf("\n\nMedia: %f", media_vector);
   
    printf("\n\n");
   
  system("PAUSE");   
  return 0;
}


float media_vector (int *v, int dim){
      int i;
      float media;
      media = 0;
      for(i=1;i<=dim;i++){
                          media = media + v;
                          }
     
      return media/dim;
      }
     
     
void leer_vector(int *v, int dim){
     int i;
     for(i=1;i<=dim;i++){
                                      printf("\nElemento (%d): ", i);
                                           scanf("%d",&v);
                                           }
     }
     
void escribir_vector(int *v, int dim){
     int i;
     for(i=1;i<=dim;i++){
                         printf("%8d ", v);
                         }
}

T. Collins

#1
float media_vector (int *v, int dim){
     int i;
     float media;
     media = 0;
     for(i=0;i<dim;i++){
                         media = media + v[i]; // falta [i]
                         }
   
     return media/dim;
     }


Los arrays empiezan en 0 no en 1, los for tienes que ponerlos desde i=0 hasta i<dim

TheShocker

Ya he modificado eso pero sigue saliendome 0, no consigo verlo XDD

Yoel Alejandro

#3
Buenos días TheSocker, bienvenido al apasionante mundo de C.

Como T.Collins, los arrays en C comienzan en la posición 0. Y yo añadiría otros pequeños detalles. Primero, debes saber que la función system() invoca una llamda al sistema operativo, por lo tanto es dependiente del sistema de comandos de tu SO. Esto es, corre el riesgo de que tu programa no "corra" igual en un SO que en otro. Por eso yo recomiendo usar getchar() que es una función estándar (se ejecuta igual en cualquier plataforma) y realiza casi la misma función: esperar una pulsación de tecla de parte del usuario.

Otro detalle, en la función leer_vector() debes pasar a scanf la posición (esto es, la dirección de memoria) del elemento específico del array donde copiar el valor leído. Por eso:

Código (cpp) [Seleccionar]

scanf("%d", &v[i] );


Como sabrás, el operador "&" devuelve la dirección del elemento apuntado, en este caso la dirección de v[ i].

Y finalmente en el main(), donde mandas imprimir la media del vector, no puedes pasar como argumento simplemente el nombre de la función, sino que debes poner "media_vector(vector,dim)" con los argumentos donde media_vector() debe ser evaluada. Te quedaría:

Código (cpp) [Seleccionar]

printf("\n\nMedia: %f", media_vector(vector,dim) );


Esto es anidamiento de funciones; el valor de retorno de una función pasado como argumento de otra. Finalmente el código te quedaría:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#define DIM 100

void leer_vector(int *, int);
float media_vector (int *, int);
void escribir_vector(int *, int);

int main(int argc, char *argv[]) {

  int dim;
  int vector[DIM];

  printf("Introduce la dimension del vector: ");
  scanf("%d",&dim);

  leer_vector(vector,dim);

  printf("\n\n");

  escribir_vector(vector,dim);

  media_vector(vector,dim);

  printf("\n\nMedia: %f", media_vector(vector,dim) ); /* <-- revisa aqui */

  printf("\n\n");

  //system("PAUSE"); /* <-- solo para Windows */
  getchar(); /* <-- es mas compatible */
  return 0;
}


float media_vector (int *v, int dim) {

  int i;
  float media;
  media = 0;
  for (i=0; i<dim; i++) {
     media = media + v[i];
  }

  return media/dim;
}


void leer_vector(int *v, int dim) {
  int i;
  for (i=0; i<dim; i++) {
     printf("\nElemento (%d): ", i);
     scanf("%d", &v[i] );
  }
}

void escribir_vector(int *v, int dim) {
  int i;
  for (i=0; i<dim; i++) {
     printf("%4d\t", v[i] );
  }
}


Un ejemplo de corrida del programa:


Introduce la dimension del vector: 4

Elemento (0): 5

Elemento (1): 8

Elemento (2): 4

Elemento (3): 2


  5      8      4      2   

Media: 4.750000
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

TheShocker

Muchisimas gracias por la explicación, me ha quedado todo más claro y ya he conseguido hacer que funcione.

Yoel Alejandro

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)