ejercicios

Anuncio
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
Descargar