3 de diciembre de 2019

Consideraciones finales con arreglos.

Regresar un arreglo estático como valor de retorno de una función.

   Probablemente en la entrada referente a los arreglos bidimensionales se haya preguntado ¿Por qué la función suma del Ejemplo 6.8 recibe también como parámetro a la matriz resultado c?, ¿acaso no sería más conveniente y de mejor diseño regresar dicha matriz como valor de retorno de la función?

   Considere el Ejemplo 6.10 el cual propone, con base en los conceptos hasta ahora discutidos, una posible solución al planteamiento de la pregunta anterior.

   La línea 8 presenta una forma intuitiva en la que se expresaría el deseo de que la función regrese una matriz; note que la lista de parámetros se ha reducido en uno respecto de la función suma del Ejemplo 6.8. Tómese el tiempo necesario para comparar ambas funciones antes de continuar.

   Con la excepción del cambio expresado en el párrafo anterior, las funciones de los Ejemplos 6.8 y  6.10 son esencialmente la misma. El Ejemplo 6.10 no compila, ya que no es posible indicarle al compilador de C que regrese una matriz como el tipo de dato de retorno para una función.



   ¿Por qué no se puede indicar al compilador de C que regrese un arreglo?, además de que la gramática del lenguaje C no considera válida dicha expresión, se debe también a que las variables declaradas dentro de una función son variables automáticas y locales a ella, por lo tanto, sólo existen en el contexto de la propia función, por lo que cuando ésta termina, los datos son desechados antes de regresar el control de la ejecución del programa a la siguiente sentencia después de la invocación de la función, por lo que no tendría sentido regresar como valor de retorno una variable que ya fue desechada.

   Ahora bien, aún cuando dicha variable fuera afectada por el modificador static (véase la entrada referente a ámbitos de variables), la variable sólo sería accesible dentro del ámbito de la función.

   Finalmente, la respuesta a la pregunta expresada al inicio de esta entrada es: en general sería más conveniente y también un mejor diseño el enfoque del Ejemplo 6.10, pero en el lenguaje de programación C los arreglos no se pueden regresar como valor de retorno de función, al menos no con los arreglos estáticos declarados en tiempo de compilación y con las herramientas hasta ahora estudiadas; hace falta algo más, y ese algo más son los apuntadores, los cuales se estudiarán en entradas posteriores.

Otros algoritmos de ordenamiento.

   En la entrada Ordenamiento por burbuja se describe dicho algoritmo por su simplicidad en su funcionamiento y compresión, y porque es un algoritmo básico y elemental que debe conocerse por cualquier programador, sin embargo, no es el único algoritmo y dista mucho de ser el mejor en cuanto a eficiencia se refiere.

   Existen otros algoritmos de ordenamiento, en este sentido, se recomienda al lector revisar al menos esta información: Algoritmos de ordenamiento, para ampliar su perspectiva al respecto. En este sentido, resulta particularmente recomendable revisar y comprender los algoritmos de shell sort, merge sort y quick sort como parte del repertorio de herramientas que todo programador debería conocer.