Función MIN y MAX en C

Ammar Ali 12 octubre 2023
Función MIN y MAX en C

Este tutorial discutirá el uso de macros o bucles para implementar las funciones MIN y MAX en C.

la Función MIN y MAX en C

Las funciones MIN y MAX se utilizan para encontrar el número mínimo y máximo de dos valores y no están predefinidas en lenguaje C. Si queremos utilizar las funciones MIN y MAX, debemos definirlas en C.

Podemos utilizar macros para definir las funciones MIN y MAX en lenguaje C. Una macro es un segmento de código que se utiliza para definir funciones y valores de variables.

Cuando llamamos a una macro, se reemplaza por su valor o función. Por ejemplo, podemos definir el valor de una variable como PI, y cuando usamos el nombre PI en nuestro código, el nombre será reemplazado por su valor.

También podemos definir una macro como una función que será llamada si escribimos su nombre en el código. Usamos la palabra clave #define para definir macros en el lenguaje C.

Por ejemplo, definamos las funciones MIN y MAX utilizando macros en lenguaje C. Vea el código a continuación.

#include <stdio.h>
#define MIN(i, j) (((i) < (j)) ? (i) : (j))
#define MAX(i, j) (((i) > (j)) ? (i) : (j))
int main() {
  printf("Min = %d\n", MIN(0, 10));
  printf("Max = %d", MAX(0, 10));
  return 0;
}

Producción :

Min = 0
Max = 10

En el código anterior, el ? símbolo es el operador ternario y se utiliza en lugar de la declaración if-else. Si la condición anterior al operador ternario es verdadera, la salida será igual al lado izquierdo de los dos puntos :, y si la condición es falsa, la salida será igual al lado derecho de los dos puntos :.

En el código anterior, usamos corchetes porque la entrada también puede ser una expresión como a+b, y la salida cambiará si no usamos corchetes. También podemos usar la instrucción if-else en lugar del operador ternario.

El código anterior creará problemas en caso de un efecto secundario de doble evaluación en el que pasamos una expresión dentro de una función. Podemos usar el comando __typeof__ para definir las funciones MIN y MAX para evitar el problema anterior, brindándonos más seguridad y menos errores.

El comando __typeof__ se refiere al tipo de una expresión. Podemos usar el comando typeof con expresiones y un tipo.

Por ejemplo, definamos las funciones MIN y MAX anteriores usando el comando __typeof__. Vea el código a continuación.

#include <stdio.h>
#define MAX(x, y)       \
  ({                    \
    typeof(x) _x = (x); \
    typeof(y) _y = (y); \
    _x > _y ? _x : _y;  \
  })

#define MIN(x, y)       \
  ({                    \
    typeof(x) _x = (x); \
    typeof(y) _y = (y); \
    _x < _y ? _x : _y;  \
  })
int main() {
  printf("Min = %d\n", MIN(0, 10));
  printf("Max = %d", MAX(0, 10));
  return 0;
}

Producción :

Min = 0
Max = 10

En el código anterior, usamos el comando __typeof__ para referirnos al tipo de las entradas y luego usamos el operador ternario para definir la declaración if-else. Podemos ver que la salida es la misma que en el ejemplo anterior.

El código anterior puede evitar el problema de la doble evaluación porque la macro anterior evaluará los argumentos solo una vez. Los métodos anteriores solo funcionan en el caso de dos entradas enteras.

Si queremos encontrar el número mínimo y máximo presente en una matriz de números, no podemos usar los métodos anteriores porque, en los métodos anteriores, estamos comparando solo dos números. En el caso de una matriz, tenemos que comparar todos los elementos para encontrar el valor mínimo o máximo presente en la matriz.

Podemos almacenar el primer elemento de la matriz en una variable y luego podemos usar un ciclo para comparar este elemento con otros elementos de la matriz.

En el caso del número máximo, si el siguiente elemento es mayor que el siguiente elemento presente en la matriz, significa que el elemento que se guarda no es el elemento máximo presente en la matriz, y reemplazaremos el elemento guardado con el siguiente elemento, y repetiremos este procedimiento hasta que el elemento guardado se compare con todos los elementos presentes en la matriz.

En caso de un número mínimo, reemplazaremos el elemento guardado con el siguiente elemento solo si el siguiente elemento es menor que el elemento guardado, y repetiremos este procedimiento hasta que el elemento guardado se compare con todos los elementos presentes en la matriz.

#include <stdio.h>

int MAX(int My_array[], int len);
int MIN(int My_array[], int len);
int main() {
  int My_array[] = {6, 3, 15, 9, 10, 50, 99, 11};
  int len = sizeof(My_array) / sizeof(My_array[0]);
  int numMax = MAX(My_array, len);
  int numMin = MIN(My_array, len);
  printf("Max number = %d\n", numMax);
  printf("Min number = %d", numMin);
  return 0;
}

int MAX(int My_array[], int len) {
  int num = My_array[0];
  for (int i = 1; i < len; i++) {
    if (My_array[i] > num) {
      num = My_array[i];
    }
  }
  return num;
}

int MIN(int My_array[], int len) {
  int num = My_array[0];
  for (int i = 1; i < len; i++) {
    if (My_array[i] < num) {
      num = My_array[i];
    }
  }
  return num;
}

Producción :

Max number = 99
Min number = 3

En el código anterior, creamos dos funciones, MAX() y MIN(), que tienen dos argumentos de entrada. El primer argumento es la matriz dada y el segundo es la longitud de la matriz.

Usamos la función sizeof() para encontrar el tamaño de toda la matriz y lo dividimos por el tamaño del primer elemento de la matriz para obtener la longitud de la matriz dada.

Dentro de las funciones MAX() y MIN(), almacenamos el primer elemento de la matriz en una variable, y luego lo comparamos con todos los demás elementos de la matriz usando un ciclo que se detendrá cuando el número entero i se vuelve igual a la longitud de la matriz, lo que significa que el bucle ha llegado al final de la matriz.

Dentro del bucle, usamos una declaración if para comparar el siguiente elemento de la matriz con el valor que guardamos, y reemplazamos su valor si el siguiente elemento es mayor que el elemento guardado en el caso de MAX() y en la función MIN(), reemplazaremos el valor si el siguiente elemento es más pequeño que el elemento guardado. Usamos la función printf() para imprimir el valor devuelto por las funciones MIN() y MAX().

El código anterior solo funcionará para una matriz de un tipo de datos entero, pero también podemos cambiar el código anterior para encontrar los números mínimo y máximo en el caso de otros tipos de datos como float. En el código anterior, tenemos que cambiar el tipo de datos int a float en el caso de una matriz de tipos de datos float.

Por ejemplo, el tipo de datos de la matriz se convertirá en float, y el tipo de datos de la variable utilizada para almacenar el primer elemento de la matriz también se convertirá en float, y el tipo de datos de la longitud seguirá siendo el mismo.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - C Function