IP05 Funciones 1 En las páginas 4 y 6 del bloque de transparencias IP05 functions se muestra un ejemplo de definición de función (i.e. function) y un ejemplo de definición de acción (i.e. procedure), respectivamente. Explicad qué hace cada una y por qué la primera se ha definido como función y la segunda como acción. 2 En la transparencia 7 se dice que las definiciones de las acciones y funciones pueden aparecer antes o después del programa principal (i.e. main). Pero en la transparencia 8 se observa que una función o una acción sólo puede usarse después de haber sido declarada. Una función puede declararse y usarse antes de definirla mediante el uso de prototipos. Un prototipo contiene toda la información necesaria para usar correctamente una función: el tipo de valor que devuelve, su nombre y su lista de parámetros. En la transparencia 8 se muestra un ejemplo de prototipo double volume_sphere(double radius); La definición de una función consta de dos partes: cabecera y cuerpo. La cabecera de una función contiene la misma información que su prototipo. El cuerpo de una función contiene el código que ejecutará la función cuando sea invocada con unos datos concretos. La definición de una función debe incluir por tanto la especificación de su código. La definición de la función volume sphere aparece debajo de la definición de la función some geometry en la transparencia 8 del documento IP05 Functions. Observación: En los ejercicios que enviéis al jutge, y en los que realicéis en los controles y en el examen final no debéis usar prototipos, tal y como se indica en las normas de programación de PRO1. 3 Explicad qué hace cada una de las dos instrucciones que aparecen en la página 9. ¿Qué concepto relacionado con funciones y acciones ilustran? ¿Cómo se llaman las expresiones que aparecen entre paréntesis en esas instrucciones? 1 4 ¿Qué condiciones debe satisfacer la lista de argumentos de la llamada a una acción o función? Escribid una función que devuelva el máximo común divisor de dos números naturales mayores que cero y una acción que almacene el máximo común divisor de los dos números en un parámetro llamado resultado. ¿Qué tipo de expresiones pueden ser argumentos de parámetros que se pasan por valor y por referencia? Pensad en el ejemplo anterior. 5 Explicad el contenido del aviso de la transparencia 19. En este curso usaremos dos clasificaciones para distinguir distintos tipos de parámetros. La primera clasificación distingue dos tipos: parámetros que se pasan por valor y parámetros que se pasan por referencia. ¿Qué tipos incluye la segunda clasificación? ¿Qué relación existe entre estos últimos tipos, las funciones y las acciones? 6 En la transparencia 19 ¿Qué valores tendrán las variables ’divisor’ y ’x’ justo antes y justo después de ejecutar la siguiente instrucción del programa principal? p = is_prime(x + 3, divisor); 7 Explicad por qué es cierta la afirmación de que los valores de las variables ’a’, ’b’ y ’c’ serı́an 0, 8 y 8 después de ejecutar las tres instrucciones de la transparencia 22. 8 ¿Qué valores tendrán las variables ’a’ y ’b’ después de ejecutar las siguientes instrucciones suponiendo que la acción ’exchange(x,y)’ está definida como en la transparencia 23? int a = 5; int b = 10; exchange(a,b); 9 Definid una acción que calcule el máximo común divisor y el mı́nimo común múltiplo de dos naturales positivos y los almacene en dos parámetros llamados ’gcd’ y ’lcm’. Escribid un pequeño programa que incluya la definición de la acción, y una función ’main’ en la que se pidan dos valores naturales positivos, se llame correctamente a la acción y se muestren en la 2 pantalla el máximo común divisor y el mı́nimo común múltiplo de ambos números. En la definición de la función lmc de la página 25 ¿Es necesario el uso de paréntesis? ¿Obtendrı́amos el mismo resultado con la siguiente definición? int lmc(int a, int b) { return a/gcd(a,b)*b; } ¿Y con la siguiente? int lmc(int a, int b) { return (a*b)/gcd(a,b); } 3