es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Falsas asignaciones de min y max en una función.

Tengo una función que se supone que encuentra el mínimo y el máximo en una matriz utilizando una estructura.
Pero de alguna manera, la función asigna valores incorrectos a las variables min y max. ¿Alguien podría por favor explicarme dónde está mi error? Muchas gracias. P.D. En mi tarea, la función no necesita tomar el primer elemento de la matriz.

min_max_t min_max(unsigned int *array, int size)
{
    min_max_t flag;
    flag.min = array[1];
    flag.max = array[1];
    printf("Flag.min: %d | ", flag.min);
    printf("Flag.max: %d\n", flag.max);
    for (int i = 1; i < size; i++)
    {
        printf("i = %d - [A:%d - Min:%d - Max:%d]\n", i, array[i], flag.min, flag.max);
        if(array[i] > flag.max)
        {
            flag.max = array[i];
        }
        else if (array[i] < flag.min)
        {
            flag.min = array[i];
        }
        printf("i = %d - [A:%d - Min:%d - Max:%d]\n\n", i, array[i], flag.min, flag.max);
    }
    return flag;
}

Captura de pantalla del proceso de la función: enlace

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay un par de posibles errores en esta función. Primero, la función comienza la iteración desde el segundo elemento del arreglo (es decir, array[1]). Si el elemento más pequeño está en la primera posición, se perderá. Segundo, la condición else if asume que el elemento no es mayor que el máximo actual. Si es igual al máximo, se asignará como el nuevo mínimo. Para solucionar estos problemas, la función debería comenzar la iteración desde el primer elemento y usar declaraciones if en lugar de else if.

    Aquí hay una versión corregida de la función:

    min_max_t min_max(unsigned int *array, int size)
    {
        min_max_t flag;
        flag.min = array[0];
        flag.max = array[0];
        printf("Flag.min: %d | ", flag.min);
        printf("Flag.max: %d\n", flag.max);
        for (int i = 1; i < size; i++)
        {
            printf("i = %d - [A:%d - Min:%d - Max:%d]\n", i, array[i], flag.min, flag.max);
            if(array[i] < flag.min)
            {
                flag.min = array[i];
            }
            if (array[i] > flag.max)
            {
                flag.max = array[i];
            }
            printf("i = %d - [A:%d - Min:%d - Max:%d]\n\n", i, array[i], flag.min, flag.max);
        }
        return flag;
    }
    

Comments are closed.