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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con subprograma que calcule promedio de vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con subprograma que calcule promedio de vector  (Leído 2,769 veces)
adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
ayuda con subprograma que calcule promedio de vector
« en: 12 Noviembre 2018, 23:26 pm »

Hola necesito ayuda con este ejercicio, me da como resultado 0, no le encuentro el error al codigo


/*Generar un subprograma que permita, dado un vector de 5400 posiciones,
 obtener el promedio de los elementos del vector. Los valores del vector son enteros, y el resultado real.*/
 
 
  #include<stdlib.h>
 #include <stdio.h>
 #include<time.h>
 
 int promedio_V(int vector[], int );
 int vector[5400], i; const int tam= 5400;
 int main(){
    
    
     srand(time(0));
    
    for(i=0; i<5400; i++){
       
       vector= 1+ rand() % 100;
       
    }
       for (i=0;i<5400; i++){
    printf("\n%i", vector);}
 
 
    printf ("el promedio del vector es %.2f", promedio_V(vector,tam));
    return 0;}
    
int promedio_V(int vector[], int tam) {
   float suma=0;
   
   for (i=0; i<tam; i++){
      
      suma=(suma+ vector[tam])/5400;
      
   }
      
   return suma ;
   
}


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #1 en: 14 Noviembre 2018, 03:31 am »

Hola Adriana, deje en comentarios las lineas de codigo que estaban algo mal
Código
  1. #include<stdlib.h>
  2. #include <stdio.h>
  3. #include<time.h>
  4.  
  5. int promedio_V(int vector[]);
  6. int vector[5400], i; const int tam= 5400;
  7. int main(){
  8.  
  9.  
  10.     srand(time(0));
  11.  
  12.    for(i=0; i<5400; i++){
  13.  
  14.       vector[i]= 1+ rand() % 100;//vector= 1+ rand() % 100;
  15.  
  16.    }
  17.    for (i=0;i<5400; i++){
  18.   printf("\n%d", vector[i]);//printf("\n%i", vector);}
  19. }
  20.  
  21.  
  22.    printf ("el promedio del vector es %d", promedio_V(vector));//printf ("el promedio del vector es %.2f", promedio_V(vector,tam));
  23.    return 0;}
  24.  
  25. int promedio_V(int vector[]) {//int promedio_V(int vector[], int tam) {
  26.   int suma=0;//float suma=0;
  27.  
  28.   for (i=0; i<tam; i++){
  29.  
  30.      suma+=vector[i];//suma=(suma+ vector[tam])/5400;
  31.  
  32.   }
  33.  
  34.   return suma/tam ;//return suma ;
  35.  
  36. }
  37.  


« Última modificación: 14 Noviembre 2018, 03:35 am por Beginner Web » En línea

7w7
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #2 en: 14 Noviembre 2018, 04:10 am »

Varias cosas a tener en cuenta. Aunque en este programa al ser sencillo no afectan al funcionamiento:
 
Hay que limitar el uso de variables globales, ya que estas se pueden alterar desde cualquier parte del programa. Por eso es mejor declarar como global y constante el tamaño del vector pero el vector es mejor declararlo dentro del main (date cuenta de que si el vector es global no es necesario pasarlo como parámetro de la función ya que se puede usar directamente).

Si declaramos una constante <TAM> para el tamaño del vector, usar esa constante en la declaración del vector. Así si queremos cambiar el tamaño del vector sólo tendríamos que cambiarlo en el valor de <TAM> y el programa ya estaría modificado.

En el prototipo de la función es cierto que no hace falta indicar el nombre de las variables, solo su tipo. Pero ya que está el nombre del vector, quedaría mejor poner el nombre del segundo parámetro (el tamaño en este caso). Recalcar que al ser variables globales no sería necesario pasarlas como parámetros ya que ya existen en todo el programa. Nótese también que en el main se utiliza la variable <TAM> que es global mientras que en el cuerpo de la función se utiliza <tam> ya que es el nombre con el que nos referimos al segundo parámetro. Podría eliminarse ese segundo parámetro y usar <TAM> dentro de la función también.

En el main hay dos bucles: uno para rellenar el vector y otro para mostrar cada elemento. Esto se puede hacer en un solo bucle para ahorrar tiempo y no tener que recorrer el bucle completo dos veces.
Además de eso se especifica que el resultado es real, por lo que la función debe devolver un float o un double, no un int.

Puedes probar a cambiar algunas de las cosas que he comentado arriba para entender su funcionamiento y si tienes alguna duda no dudes en preguntar.
El código final quedaría algo por el estilo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. const int TAM = 5400;
  6.  
  7. float promedio_V(int vector[], int tam);
  8.  
  9. int main(){
  10. int vector[TAM];
  11.  
  12. srand(time(0));
  13.  
  14. for(int i = 0; i < TAM; i++){
  15. vector[i] = 1 + rand() % 100;
  16. printf("%d\n", vector[i]);
  17. }
  18.  
  19. printf("El promedio del vector es %.2f\n", promedio_V(vector, TAM));
  20.  
  21. return 0;
  22. }
  23.  
  24. float promedio_V(int vector[], int tam){
  25. float suma = 0;
  26.  
  27. for(int i = 0; i < tam; i++)
  28. suma += vector[i];
  29.  
  30. return suma/tam;
  31. }
  32.  
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #3 en: 15 Noviembre 2018, 17:40 pm »

muchas gracias chicos voy a probar modificar el codigo con sus sugerencias!!
En línea

adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #4 en: 15 Noviembre 2018, 18:14 pm »

Varias cosas a tener en cuenta. Aunque en este programa al ser sencillo no afectan al funcionamiento:
 
Hay que limitar el uso de variables globales, ya que estas se pueden alterar desde cualquier parte del programa. Por eso es mejor declarar como global y constante el tamaño del vector pero el vector es mejor declararlo dentro del main (date cuenta de que si el vector es global no es necesario pasarlo como parámetro de la función ya que se puede usar directamente).

Si declaramos una constante <TAM> para el tamaño del vector, usar esa constante en la declaración del vector. Así si queremos cambiar el tamaño del vector sólo tendríamos que cambiarlo en el valor de <TAM> y el programa ya estaría modificado.

En el prototipo de la función es cierto que no hace falta indicar el nombre de las variables, solo su tipo. Pero ya que está el nombre del vector, quedaría mejor poner el nombre del segundo parámetro (el tamaño en este caso). Recalcar que al ser variables globales no sería necesario pasarlas como parámetros ya que ya existen en todo el programa. Nótese también que en el main se utiliza la variable <TAM> que es global mientras que en el cuerpo de la función se utiliza <tam> ya que es el nombre con el que nos referimos al segundo parámetro. Podría eliminarse ese segundo parámetro y usar <TAM> dentro de la función también.

En el main hay dos bucles: uno para rellenar el vector y otro para mostrar cada elemento. Esto se puede hacer en un solo bucle para ahorrar tiempo y no tener que recorrer el bucle completo dos veces.
Además de eso se especifica que el resultado es real, por lo que la función debe devolver un float o un double, no un int.

Puedes probar a cambiar algunas de las cosas que he comentado arriba para entender su funcionamiento y si tienes alguna duda no dudes en preguntar.
El código final quedaría algo por el estilo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. const int TAM = 5400;
  6.  
  7. float promedio_V(int vector[], int tam);
  8.  
  9. int main(){
  10. int vector[TAM];
  11.  
  12. srand(time(0));
  13.  
  14. for(int i = 0; i < TAM; i++){
  15. vector[i] = 1 + rand() % 100;
  16. printf("%d\n", vector[i]);
  17. }
  18.  
  19. printf("El promedio del vector es %.2f\n", promedio_V(vector, TAM));
  20.  
  21. return 0;
  22. }
  23.  
  24. float promedio_V(int vector[], int tam){
  25. float suma = 0;
  26.  
  27. for(int i = 0; i < tam; i++)
  28. suma += vector[i];
  29.  
  30. return suma/tam;
  31. }
  32.  


Hola!! hice las modificaciones que me sugeriste, el tema es que sigue sin dar el resultado, compila pero siempre me da como resultado 0.00
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #5 en: 16 Noviembre 2018, 04:10 am »

Podrías copiar el código del programa para echarle un vistazo?
Ya que yo probé a ejecutar el programa con las modificaciones que había hecho y si me funcionaba.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
adriana13

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #6 en: 16 Noviembre 2018, 20:06 pm »

el codigo completo es este: con las modificaciones tal cual me indicaste

/*Generar un subprograma que permita, dado un vector de 5400 posiciones,
 obtener el promedio de los elementos del vector. Los valores del vector son enteros, y el resultado real.*/
 
 
  #include<stdlib.h>
 #include <stdio.h>
 #include<time.h>
 const int TAM= 5400;
 float promedio_V(int vector[], int tamx );

 int main(){
    int vector[TAM];
    int i;
     srand(time(0));
    
    for(int i=0; i<5400; i++){
       
       vector = 1+ rand() % 100;
       printf("\n%i", vector);
    }
    
 
    printf ("\nel promedio del vector es %.2f", promedio_V(vector,TAM));
    return 0;}
    
   float promedio_V(int vector[], int tamx) {
   int i;
   float suma=0;
   
   for ( int i=0; i<tamx; i++){
      
      suma += vector;
      return suma/tamx;}
   }
      
   
   
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: ayuda con subprograma que calcule promedio de vector
« Respuesta #7 en: 16 Noviembre 2018, 22:16 pm »

El código tiene los siguientes errores, todos en <promedio_V>:
- En primer lugar estás declarando dos veces la i. Dentro del bucle for se puede declarar el contador (i en este caso) usando <int i = 0> pero si ya está declarado de antes dentro del for solo debe aparecer    <i = 0>. Es decir, tienes que eliminar una de las dos declaraciones.
- Dentro del for no estás accediendo a cada posición del vector. Para ello tienes que usar el operador de indexación [ ] de esta forma <vector[posicion]>.
- El for solo debe repetir la instrucción <suma += vector>, no el return también. El return va fuera del for.

Con todo esto el código quedaría así:
Código
  1. float promedio_V(int vector[], int tamx) {
  2.   float suma=0;
  3.  
  4.   for (int i = 0; i < tamx; i++){
  5.      suma += vector[i];
  6.   }
  7.  return suma/tamx;
  8. }

Además comentarte que cuando tienes un bloque de sentencias (if, while, for,...) que sólo repite una instrucción, esta no es necesario ponerla entre { }. Es decir que el for se puede hacer así (esto ya depende de gustos):

Código
  1. for(int i = 0; i < tamx; i++)
  2.    suma += vector[i];
  3. return suma/tamx;

También en el for de la función <main> para mostrar cada elemento del vector; debes usar el [ ] para referirte a cada posición del vector (tanto para guardar un valor en él como para mostrarlo). El código quedaría así:

Código
  1. for(int i=0; i<5400; i++){  
  2.    vector[i] = 1+ rand() % 100;
  3.    printf("\n%i", vector[i]);
  4. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con un programa que calcule la diferencia entre dos fechas
Programación C/C++
davisinful 1 4,558 Último mensaje 10 Noviembre 2011, 09:15 am
por do-while
Ayuda con programa calculador de promedio en C++ « 1 2 »
Programación C/C++
chilenoide 13 7,210 Último mensaje 25 Octubre 2012, 05:24 am
por flony
ayuda sacar promedio.
Java
andrex.125 1 2,701 Último mensaje 2 Septiembre 2013, 16:56 pm
por 1mpuls0
Ayuda en C++ Código que Calcule la Desviación Estándar?
Programación C/C++
sendwuk 2 15,260 Último mensaje 28 Marzo 2015, 15:17 pm
por Usuario Invitado
Ayuda c++ promedio
Programación C/C++
Mrxxxxx 3 2,345 Último mensaje 30 Marzo 2017, 03:37 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines