domingo, 18 de junio de 2017

Solución del ejercicio 18 de Processing


Aquí hemos "construido" un función "nuestra". Devuelve un número entero (por eso la declaramos como "int mcd") y necesita dos argumentos x e y (también de tipo entero), por eso se escribe

int mcd(int x, int y)

Después, lo que hay entre llaves es el interior de la función, donde se hacen los cálculos y se devuelve el resultado buscado (con el comando return).
Podríamos preguntarnos... ¿pero a dónde devuelve la función mcd el valor calculado? Pues la función mcd devuelve el valor a la parte del programa principal que lo ha llamado o "invocado". En este caso, en la línea

m = mcd(a,b);

es donde ocurre esto. La función mcd "toma" los valores de a y b, "hace sus cuentas" y devuelve el valor buscado, quedando el resultado almacenado en la variable m.

Nota 1: las variables declaradas dentro del la función mcd SON PRIVADAS, y no pueden usarse FUERA de la función mcd. (en este ejemplo, las variables x, y, r, y aux son variables privadas de la función)

Nota 2: también podemos ver que el programa principal (el bloque void setup( )) ha quedado muy reducido y simplificado, pero a costa de tener que "currarnos" la función mcd...

En clase veremos todo esto con detalle.

Cómo crear funciones

Veremos en clase algunos casos. Sin embargo veamos ahora un sencillo ejemplo.
Supongamos que necesitamos calcular la media aritmética de tres números enteros y que queremos resolver dicho cálculo mediante una función creada por nosotros.

Para resolver esto debemos:
1º) Indicar qué tipo de valor devuelve la función
2º) El nombre de la función
3º) Cuántos argumentos necesita la función y de qué tipo son.

Veamos cómo creamos nuestra función:
1º) El tipo de valor devuelto va a ser float (marcado en rojo), por eso escribimos float media
2º) El nombre de la función es media. La podemos llamar como queramos, siempre y cuando no coincida con alguna palabra reservada del lenguaje (como "else", "switch", "case") o algún nombre de otra función de la librería de Processing (como "pow", "random", "ellipse", etc).
3º) Nuestra función media necesita 3 argumentos: x, y y z, los tres de tipo int (marcados en azul)

Ya sabemos cómo se llama nuestra función (media), lo que necesita (tres int) y lo que nos da (un float).
Entonces, entre las llaves "{" y "}" se escribe el código que resuelve lo que tiene que "hacer" la función. En nuestro caso, se almacena en la variable m el valor (x+y+z)/3 y DESPUÉS SE DEVUELVE (O RETORNA) EL VALOR CALCULADO. Para eso sirve la instrucción return.
¿Y a dónde se devuelve?
Pues el valor retornado se devuelve a la parte del programa principal que lo ha llamado o "invocado".
Veamos un ejemplo completo:
Vemos el programa completo y el resultado al introducir los números 6, 7 y 10.
Atención a la instrucción

m = (x+y+z)/3.0;

El divisor está escrito en forma decimal, para obligar a Processing a realizar la división con decimales. Si escribimos simplemente

m = (x+y+z)/3;

el 3 es un número entero, y (x+y+z) también es un entero: entonces el operador / realizaría la división entera, cosa que no queremos.