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
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ónelse 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 declaracionesif
en lugar deelse if
.Aquí hay una versión corregida de la función: