Test Foro de elhacker.net SMF 2.1

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000
void CARGA(int arreglo[N]);
double PROMEDIO(int arreglo[N]);
int main()
{
    int arreglo[N];

    printf ("Ingrese una secuencia de numeros: \n");
    CARGA(arreglo);
    printf ("El promedio es %.2lf",PROMEDIO(arreglo));


    return 0;
}

void CARGA(int arreglo[N])   ///CARGA DEL ARREGLO
{
    int i=0,numerin;

    do
    {
        scanf ("%d",&numerin);
        if (numerin!=0)
        {
            arreglo[i]=numerin;
            i++;
        }
    }
    while (numerin!=0 && i<N);
    arreglo[i]=0;
}
double PROMEDIO(int arreglo[N])
{
    int i=0,suma=0,longitud=0,secuencia=0,bandera=0;
    double promedion=0;

    for (i=0;arreglo[i]!=0;i++)
    {
        if (arreglo[i]%2==0)   ///SI ES PAR
        {
            longitud++;        ///LONGITUD DE LA SECUENCIA

            if (bandera==0)
            {
                secuencia++;   
                bandera=1;
            }
        }
        else       ///SI NO ES PAR
        {
            bandera=0;
            suma=suma+longitud;
            longitud=0;
        }
    }

    printf ("\nLa suma es %d",suma);
    printf ("\nEl numero de secuencias es %d",secuencia);
    promedion=(double)suma/secuencia;
    return promedion;
}





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
Cita de: 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

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
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
Cita de: AlbertoBSD en 22 Julio 2016, 02:51 AM
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
Cita de: palacio29 en 22 Julio 2016, 03:20 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.!