elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con codigo en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con codigo en C  (Leído 1,853 veces)
TheShocker

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Problema con codigo en C
« en: 21 Diciembre 2014, 15:07 pm »

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);
                         }
}


En línea

T. Collins

Desconectado Desconectado

Mensajes: 206


Ver Perfil
Re: Problema con codigo en C
« Respuesta #1 en: 21 Diciembre 2014, 15:33 pm »

Código
  1. float media_vector (int *v, int dim){
  2.      int i;
  3.      float media;
  4.      media = 0;
  5.      for(i=0;i<dim;i++){
  6.                          media = media + v[i]; // falta [i]
  7.                          }
  8.  
  9.      return media/dim;
  10.      }

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


« Última modificación: 21 Diciembre 2014, 15:37 pm por T. Collins » En línea

TheShocker

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Problema con codigo en C
« Respuesta #2 en: 21 Diciembre 2014, 16:35 pm »

Ya he modificado eso pero sigue saliendome 0, no consigo verlo XDD
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Problema con codigo en C
« Respuesta #3 en: 21 Diciembre 2014, 16:40 pm »

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
  1. 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
  1. 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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define DIM 100
  4.  
  5. void leer_vector(int *, int);
  6. float media_vector (int *, int);
  7. void escribir_vector(int *, int);
  8.  
  9. int main(int argc, char *argv[]) {
  10.  
  11.   int dim;
  12.   int vector[DIM];
  13.  
  14.   printf("Introduce la dimension del vector: ");
  15.   scanf("%d",&dim);
  16.  
  17.   leer_vector(vector,dim);
  18.  
  19.   printf("\n\n");
  20.  
  21.   escribir_vector(vector,dim);
  22.  
  23.   media_vector(vector,dim);
  24.  
  25.   printf("\n\nMedia: %f", media_vector(vector,dim) ); /* <-- revisa aqui */
  26.  
  27.   printf("\n\n");
  28.  
  29.   //system("PAUSE"); /* <-- solo para Windows */
  30.   getchar(); /* <-- es mas compatible */
  31.   return 0;
  32. }
  33.  
  34.  
  35. float media_vector (int *v, int dim) {
  36.  
  37.   int i;
  38.   float media;
  39.   media = 0;
  40.   for (i=0; i<dim; i++) {
  41.      media = media + v[i];
  42.   }
  43.  
  44.   return media/dim;
  45. }
  46.  
  47.  
  48. void leer_vector(int *v, int dim) {
  49.   int i;
  50.   for (i=0; i<dim; i++) {
  51.      printf("\nElemento (%d): ", i);
  52.      scanf("%d", &v[i] );
  53.   }
  54. }
  55.  
  56. void escribir_vector(int *v, int dim) {
  57.   int i;
  58.   for (i=0; i<dim; i++) {
  59.      printf("%4d\t", v[i] );
  60.   }
  61. }

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
« Última modificación: 21 Diciembre 2014, 16:42 pm por yoel_alejandro » En línea

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

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Problema con codigo en C
« Respuesta #4 en: 21 Diciembre 2014, 18:09 pm »

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

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Problema con codigo en C
« Respuesta #5 en: 22 Diciembre 2014, 01:20 am »

Encantado pues  ;-)
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con código
Programación Visual Basic
z3r0 Bug 7 2,199 Último mensaje 24 Noviembre 2005, 16:51 pm
por NYlOn
¿Cuál es la diferencia entre código objeto, código máquina y código binario?
Programación General
Aikanáro Anário 9 28,902 Último mensaje 23 Diciembre 2010, 15:19 pm
por pucheto
Extrayendo código fuente de una web (Problema con código generado por JS)
PHP
Littl3 4 7,798 Último mensaje 3 Marzo 2011, 04:13 am
por Nakp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines