(Consulta) Ejercicio de Funciones en C - Facil pero no para mi.

Iniciado por palacio29, 22 Julio 2016, 02:06 AM

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

palacio29

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

AlbertoBSD

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
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

palacio29

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

AlbertoBSD

promedion=((double)suma)/((double)secuencia);

Creo que es eso
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

palacio29

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

palacio29

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.!