Programación Estructurada PROGRAMACIÓN ESTRUCTURADA Sesión No. 6 Nombre: Funciones Contextualización La implementación de funciones en los programas disminuye las líneas de código y estructuran mejor los datos que realizan tareas especializadas, pero la implementación de funciones va más allá de sólo repetir un instrucción desde muchos lugares del programa, que pasaría si en un programa que realiza operaciones aritméticas siempre sumara los mismos números, podría ser obsoleto el uso de funciones, sin embargo, existe un tipo de funciones que permite transformar lo que se le pida, esto, se logra con un paso de parámetros. Un parámetro es un dato central sobre el cual se ejecutara una tarea específica. Los parámetros (a los cuales se conocen como argumentos), son los elementos sobre los que una función ejecuta su código. Img_ send_data_to_funtion 1 PROGRAMACIÓN ESTRUCTURADA Introducción al Tema El manejo de funciones con pasos de parámetros son las más frecuentes a encontrar, ya que uno de los principales objetivos es lograr que una parte del código se pueda utilizar repetidamente con diversos datos. Ya hemos visto que en C, al efectuar la llamada a una función, el valor de los parámetros actuales se copia en los parámetros formales. Las funciones con pasos de parámetros podrán ayudar a trabajar con diversos datos y no sólo una operación de parámetro actual (o variable local de función). Las funciones pueden ejecutarse pidiéndole examinar cierta información mandada desde otra fuente del código, también, pueden llamarse así mismas para lograr refinar un proceso hasta que se obtenga un valor deseado, a esta cualidad se le conoce como función recursiva. 2 PROGRAMACIÓN ESTRUCTURADA Explicación 3.2 Funciones con paso de parámetros Para iniciar con este tema es preciso que se comprenda y se fije bien el concepto de parámetro. Un parámetro es un dato sobre el cual se desean realizar protocolos de evaluación y operación con el objetivo de buscar un resultado, ya sea matemático o lógico que sirva para que el elemento invocador de la función, pueda proseguir con el objetivo general del programa. Existen dos formas de paso de parámetros a una función: Paso de parámetros por valor. Como su nombre lo indica, los argumentos pasados como argumentos son valores, que bien pueden ser datos fijos o una variable cuyo valor haya sido obtenido previamente a la invocación de la función, al listar una variable como parámetro se creara una variable virtual con el valor copiado de la variable original, permitiendo mantener el valor de la variable original para su posterior uso sin que se vea afectada por los procesos de la función invocada. Paso de parámetros por referencia. A diferencia del tipo de paso de parámetros por valor, lo que se pasa es la variable en sí, evidentemente, con su valor. Al ser pasada la variable, si el contenido del parámetro correspondiente es modificado, entonces la variable pasada también queda modificada. En lenguaje C, no existe el paso de parámetros por referencia, todos los argumentos se pasan por valor, recordando la sintaxis de una función ilustremos un ejemplo de paso de parámetros: 3 PROGRAMACIÓN ESTRUCTURADA #include <stdio.h> Void ejemplo (int parametro) { Printf(“parámetro vale %d”, parametro); Parámetro = 20; } Main() { Int variable = 5; ejemplo (variable); Printf (“variable vale %d”, variable); } En el anterior ejemplo se produce un paso de parámetro por valor a la función ejemplo. Se está pasando una copia del contenido de variable a la función ejemplo, por ello el primer mensaje que se mostrará en la salida estándar será parámetro vale 5. Aunque en la segunda línea de la función se modifique el valor 4 PROGRAMACIÓN ESTRUCTURADA de parámetro, variable sigue conteniendo un 5, con lo que el segundo mensaje mostrando en la salida estándar será variable vale 5. 3.3 Funciones recursivas La recursión de una función consiste en la invocación de una función dentro de sí misma, es decir, que la función invocadora es la misma función invocada. Si la función se llama a sí misma antes de terminar, la función volverá a empezar. Por lo tanto, si esto continuará indefinidamente, el programa no tendría fin. La forma de evitar esto consiste en variar los parámetros que se pasan a la función en cada llamada y utilizarlos para saber si debe volverse a realizar la llamada o si la función debe terminar. Dado su especial relevancia y sus características, este tipo de llamadas se denominan llamadas recursivas y las funciones que realizan este tipo de llamadas se denominan funciones recursivas. La forma de entender cómo funcionan es estudiando la traza de ejecución de una función recursiva. Todas las funciones recursivas deben de distinguir entre al menos dos ramas de ejecución: Salida: en ella se encuentra el final de la función recursiva. Ocurre cuando los valores de los parámetros alcanzan la condición de salida. Recursión: esta rama es la que realiza la llamada recursiva. Cada vez que se realice una llamada recursiva hay que modificar los parámetros que se le pasan de forma que se aproximen cada vez más a la condición de salida. Es importante antes de hacer una función recursiva, asegurarse de contar con una validación o condición que ejecute una salida y que el dato a evaluar cambie su valor de cualquier forma para evitar que se cicle la función indefinidamente. 5 PROGRAMACIÓN ESTRUCTURADA Ejemplo de función recursiva: #include<conio.h> #include<stdio.h> int factorial(int dato){ if(1>= dato){ return 1; Con este valor aseguramos la salida de la recursión } else{ return dato * factorial(dato -1); Llamada recursiva a la función factorial. } } int main(){ int valor; printf(“Introduzca un numero %d”,valor); printf(“El factorial es %d”, factorial(valor)); getch(); } En el programa anterior, se le solicita un numero al usuario, posteriormente se pasa ese número a la variable factorial el cual realizará la multiplicación de ese número hasta que el valor = 1, una vez que disminuya a 1 la función se terminará, y no se volverá a llamar a sí misma. 6 PROGRAMACIÓN ESTRUCTURADA Conclusión Las funciones facilitan la estructuración de los programas especializando tareas de un objetivo global para buscar un resultado final, para poder hacer una función más útil es recomendable utilizar los pasos de parámetros, para poder analizar diversos valores. Las funciones recursivas son bastante optimas cuando se trata de realizar una búsqueda de un valor final sobre un parámetro enviado, sin embargo, se debe tener cuidado de no ciclar un programa, ya que de lo contrario, es probable que la misma computadora se bloquee al reservar espacio de memoria para operaciones infinitas. 7 PROGRAMACIÓN ESTRUCTURADA Para aprender más ¿Te pareció complicado el uso de la recursividad de una función? A continuación encontrar un video donde se explica de forma muy clara como trabaja una función recursiva utilizando nuestro ejemplo para comprender el orden de ejecución en el que se invoca la recursividad. https://www.youtube.com/watch?v=iw7Shsl5yC0 8 PROGRAMACIÓN ESTRUCTURADA Actividad de Aprendizaje Con la finalidad de reforzar los conocimientos adquiridos a lo largo de esta sesión, ahora tendrás que realizar la siguiente actividad. Instrucciones Escribe un ejemplo de un programa que muestre una función con parámetros en lenguaje C Imprimir la pantalla ya que esté escrito en C Convertir en imagen en formato JPG el programa realizado Subirlo a la plataforma de la asignatura Esta actividad te ayudará a comprender cómo funciona la función con parámetro en lenguaje C, así como su correcta utilización, lo cual te facilitará a entender las siguientes sesiones. Esta actividad representa el 5% de tu calificación y se tomará en cuenta lo siguiente: Tus datos generales. Título. El ejemplo de un programa con una función con parámetros en lenguaje C Ortografía y redacción. Referencias bibliográficas 9 PROGRAMACIÓN ESTRUCTURADA Bibliografía Badenas, J; (2001), Curso práctico de programación en C y C++, Castelló de la Plana: Universidad Jaume. Jordá, P; (s/f). Diseño e implementación de programas en lenguaje C, Valencia: Libro Docente. Cobo A; (s/f). Programar C desde un punto de vista científico, Madrid: Visión Libros Harvey, M; (2004), C / C++ y Java cómo programar, México: Pearson Educación. 10