Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 22 Julio 2016, 02:06 am



Título: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: palacio29 en 22 Julio 2016, 02:06 am
Hola

Tengo el siguiente ejercicio de funciones.

4) Definir una función que reciba como parámetro un arreglo de enteros (cuyo tamaño se desconoce, termina en 0) y que retorne la longitud promedio de las secuencias de números pares consecutivos.
Ej: En el arreglo a={1, 3, 2, 4, 16, 5, 2, 9, -4, 10, 22, 8, 14, 11, 39, 4, 63, 12, 60, 0};   se encuentran las secuencias (2, 4, 16) de longitud 3, (2) de longitud 1, (-4, 10, 22, 8, 14) de longitud 5, (4) de longitud 1 y (12, 60) de longitud 2.
La función retorna 2.4 que es la longitud promedio de las 5 secuencias de números pares consecutivos (3+1+5+1+2=12/5=2.4)

Les adjunto mi codigo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 1000
  5. void CARGA(int arreglo[N]);
  6. double PROMEDIO(int arreglo[N]);
  7. int main()
  8. {
  9.    int arreglo[N];
  10.  
  11.    printf ("Ingrese una secuencia de numeros: \n");
  12.    CARGA(arreglo);
  13.    printf ("El promedio es %.2lf",PROMEDIO(arreglo));
  14.  
  15.  
  16.    return 0;
  17. }
  18.  
  19. void CARGA(int arreglo[N])   ///CARGA DEL ARREGLO
  20. {
  21.    int i=0,numerin;
  22.  
  23.    do
  24.    {
  25.        scanf ("%d",&numerin);
  26.        if (numerin!=0)
  27.        {
  28.            arreglo[i]=numerin;
  29.            i++;
  30.        }
  31.    }
  32.    while (numerin!=0 && i<N);
  33.    arreglo[i]=0;
  34. }
  35. double PROMEDIO(int arreglo[N])
  36. {
  37.    int i=0,suma=0,longitud=0,secuencia=0,bandera=0;
  38.    double promedion=0;
  39.  
  40.    for (i=0;arreglo[i]!=0;i++)
  41.    {
  42.        if (arreglo[i]%2==0)   ///SI ES PAR
  43.        {
  44.            longitud++;        ///LONGITUD DE LA SECUENCIA
  45.  
  46.            if (bandera==0)
  47.            {
  48.                secuencia++;  
  49.                bandera=1;
  50.            }
  51.        }
  52.        else       ///SI NO ES PAR
  53.        {
  54.            bandera=0;
  55.            suma=suma+longitud;
  56.            longitud=0;
  57.        }
  58.    }
  59.  
  60.    printf ("\nLa suma es %d",suma);
  61.    printf ("\nEl numero de secuencias es %d",secuencia);
  62.    promedion=(double)suma/secuencia;
  63.    return promedion;
  64. }
  65.  
  66.  
  67.  


En teoria me tendria que dar 2.4 pero me da 2.0
Evalue que habia en la variable suma y habia 10 en vez de haber 12.
El numero de secuencias por lo que veo, lo calcule bien ya que dio el mismo : 5.
Entonces de alguna forma algo le estoy pifiando con la variable suma=suma+longitud que no me calcula bien, pero no se que es. Alguna idea?.Gracias de antemano


Título: Re: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: AlbertoBSD en 22 Julio 2016, 02:21 am
Hola, edita tu tema y vuelve a pegar tu codigo pero ahora dentrode la etiqueta llamada geshi seleecionas lenguaje C claro.

Ya que se lee mal asi, ademas si te fijas los indices de los arreglos (Los que estan entre corchetes) se perdieron

Saludos


Título: Re: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: palacio29 en 22 Julio 2016, 02:29 am
Hola, edita tu tema y vuelve a pegar tu codigo pero ahora dentrode la etiqueta llamada geshi seleecionas lenguaje C claro.

Ya que se lee mal asi, ademas si te fijas los indices de los arreglos (Los que estan entre corchetes) se perdieron

Saludos

Hola, ahi ya lo modifique


Título: Re: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: AlbertoBSD en 22 Julio 2016, 02:51 am
Código
  1. promedion=((double)suma)/((double)secuencia);

Creo que es eso


Título: Re: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: palacio29 en 22 Julio 2016, 03:20 am
Código
  1. promedion=((double)suma)/((double)secuencia);

Creo que es eso

Hola, lo probe pero sigue igual. Igualmente el problema es con la variable suma, deberia dar 12 y me da 10. Por eso al calcular el promedio no es el mismo 10/5=2.00. y deberia ser 12/5=2.4


Título: Re: (Consulta) Ejercicio de Funciones en C - Facil pero no para mi.
Publicado por: palacio29 en 22 Julio 2016, 06:50 am
Hola, lo probe pero sigue igual. Igualmente el problema es con la variable suma, deberia dar 12 y me da 10. Por eso al calcular el promedio no es el mismo 10/5=2.00. y deberia ser 12/5=2.4

Hola, ya lo solucione!!!. En el ejemplo la secuencia al final de todo es par y justo viene el 0 que es el fin del arreglo, entonces no pasaba la secuencia final en la variable suma.
Igualmente gracias,siempre me estas dando una mano.!