28 de octubre de 2019

Funciones de biblioteca.

   Desde el primer ejemplo de este blog se ha estado haciendo uso de funciones: main es una función, printf, scanf, getchar, rand y srand también son funciones, y al uso de una función se le denomina invocación o llamado de función.

   Considere el problema de calcular las raíces de una ecuación de segundo grado utilizando la fórmula general mostrada en la siguiente fórmula:

Fórmula general para encontrar las raíces de una ecuación cuadrática.
 
    Una posible solución a dicho problema es el programa que se muestra en el Ejemplo 4.1, el cual es el ejemplo más elaborado hasta ahora en cuanto se refiere a los elementos que contiene, y con excepción de las líneas 6, 26 y 27, debería ser completamente comprendido. La línea 6 le indica al compilador que incluya la biblioteca de funciones matemáticas (math.h), ya que en las líneas 26 y 27 se hará uso de la función sqrt (square root), la cual calcula la raíz cuadrada de su argumento.

   Las líneas 26 y 27 muestran el uso de una función de biblioteca (sqrt), y a dicho uso se le denomina invocación o llamado de función. Piense en la invocación o llamado de función como el equivalente a presionar el botón correspondiente de una calculadora para obtener el cálculo de la raíz cuadrada de un número por ejemplo.

   Sin la función sqrt, el Ejemplo 4.1 no podría ser resuelto tan sencillamente, a menos que esas líneas fueran substituidas por el algoritmo correspondiente para calcular la raíz cuadrada de un número y no sólo eso, sino que el código en C de dicho algoritmo tendría que ser repetido dos veces al menos, en base a como está escrita la propuesta de solución del Ejemplo 4.1.

   Las funciones de las bibliotecas del lenguaje son cajas negras: se puede saber lo que realizan, los datos que necesitan para trabajar, y la salida que proporcionan, pero no se sabe con certeza cómo es que lo hacen porque no se tiene acceso a su código fuente.

   Al igual que las funciones matemáticas, las funciones en C operan sobre un conjunto de datos mismos que procesan o transforman y finalmente regresan un valor; pero tome en cuenta que no todos los problemas se basan en, o modelan funciones matemáticas, y que por otro lado, no todas las funciones que se pudieran necesitar para resolver un problema se encuentran disponibles en las bibliotecas de funciones del lenguaje, por lo que en muchos casos, se necesitarán construir funciones de elaboración propia, con servicios y funcionalidades específicas y para ello, es preciso conocer su estructura y cómo es que se definen.

   Una posible salida para el programa del Ejemplo 4.1 se muestra en la siguiente figura:

Una posible salida del Ejemplo 4.1.
 
    Tome en consideración que, dependiendo del compilador o de la distribución de GNU/Linux que utilice (si es el caso), es probable que el programa del Ejemplo 4.1 requiera del argumento "-lm" para su compilación. Para más detalles al respecto, puede consultar la entrada respecto a la compilación en línea utilizando el compilador de GNU/Linux.