2.8. Funciones aritméticas y estructuras de control

Las operaciones aritméticas y las estructuras de control funcionan en conjunto para dotar a los programas con posibilidades de elección y procesamiento muchos más complejos y configurables. De esta manera, los desarrollos expanden sus funcionalidades, pudiendo realizar prácticamente cualquier tipo de elección y operación. Es fundamental aprender a utilizar estos elementos para el correcto aprendizaje del lenguaje Processing.

2.8.1. Funciones aritméticas

Como se ha visto en ejemplos anteriores, muchas veces es necesario realizar operaciones matemáticas dentro de los programas, ya sea para representar determinados datos mediante su procesamiento, o para resolver algún tipo de condición.

Las opciones de suma, resta, multiplicación, división, módulo, sumar uno, restar uno y restricción de valores están disponibles en Processing de la misma forma que en casi cualquier lenguaje de programación.

 

Para comenzar a trabajar con estos operadores, hay que tener noción de la precedencia de los operadores, y el agrupamiento de los mismos. Esto, básicamente, tiene que ver con que, si tenemos varias operaciones en una misma línea de código, se debe tener en cuanta cuál resolverá Processing primero, cuál después, y así hasta el final. Processing realizará primero las operaciones de división (/), multiplicación (*) y módulo (%), luego la suma (+) y resta (-), dejando para el final la operación igual (=), y los atajos de cada operación (*= , /=, %=, +=, -=).

Dentro de las funciones aritméticas que maneja Processing existen algunas muy útiles que servirán para realizar restricciones de valores, funciones que a veces ahorran varias líneas de código. Las funciones ceil(), floor(), round(), min() y max() son utilizadas para realizar estas restricciones numéricas.

Estas funciones devuelven un valor después de realizar una operación. Este valor puede ser asignado a una variable y así generar la restricción del valor. A continuación, presentamos una reseña de cómo utilizar estas funciones:

ceil() devuelve el número entero próximo más alto al número con coma indicado.
floor() devuelve el número entero próximo más bajo al número con coma indicado.
round() devuelve el número entero más cercano al número con coma indicado. El límite siempre es 0.5, o sea, si el un número es, por ejemplo, 1.5 round() devuelve 2.
min() devuelve el menor valor de una secuencia de números. max() devuelve el mayor valor de una secuencia de números. Ambas funciones solo aceptan dos o tres valores.


En general, estas funciones son muy útiles si se deben asignar extremos o tomar decisiones de límites en los programas.

Una serie de ejemplos complementarios muestran cómo utilizar estas funciones en Processing:
CAP2EjemploComplementario9.pde
CAP2EjemploComplementario9.pde
CAP2EjemploComplementario9.pde
CAP2EjemploComplementario9.pde

 

2.8.2. Estructuras de control

Como en todo lenguaje de programación, Processing cuenta con las estructuras básicas de control de flujo de datos de un programa. Es interesante pensar en la potencia que esto le da a Processing cuando estamos hablando de un programa que básicamente dibuja e interactúa con el usuario.

Condicional if
Este es uno de los condicionales más conocidos. Mediante una condición determinada, if realiza o no una determinada acción preestablecida. La sintaxis es la siguiente:

if(condición)
{
acción;
}

Por supuesto, dentro de if puede revisar cualquier condición lógica que contenga los operandos lógicos correspondientes:

And(&&) Las dos condiciones se deben cumplir para que la condición sea verdadera.
Or(||) Por lo menos una de las condiciones se debe cumplir para que la condición sea verdadera.
Negador (!=) Si un elemento es diferente al otro, la condición es verdadera.
Igual (=) Si un elemento es igual al otro, la condición es verdadera.

Lectura Obligatoria
Las operaciones lógicas son herramientas sumamente utilizadas dentro de los lenguajes de programación. De hecho, existe toda una rama de la matemática que se encarga de este tipo de operaciones, la cual se denomina lógica. Conocer características de este tipo de matemática, permite mejorar el nivel de programación, por lo tanto, revisar estas operaciones es, sin duda, una herramienta sumamente útil. A continuación, se propone la lectura de un anexo que revisa los rudimentos básicos de estas operatorias.

 

Lectura Obligatoria
Lipschutz, S. (1992), “Lógica, Tablas de Verdad” en: Matemáticas para computación, McGraw Hill, México, 76-94.

 

Condicional switch-case
También existe otro condicional llamado switch() el cual actúa en conjunto con case. La estructura de usa switch(), es la siguiente:

int num;

switch(num) {
case 0:
acción;
break;
case 1:
acción;
break;
}

Así, con todos los casos que se desean utilizar. Esta estructura sirve para generar múltiples acciones supeditadas a las variaciones de una sola variable.

2.8.3. Estructuras de repetición

Para realizar acciones repetitivas, se utilizan las estructuras de repetición for() y while().

La sintaxis para for() es la siguiente:

for (variable_inicial; condición; valor_para_terminar_loop)
{
acción;
}

//Mediante el siguiente loop se dibujan 20 líneas diagonales
for (int i = 20; i < width; i += 1)
{
line(20, i, width, i+15);
}

 

Para el caso de while, la sintaxis es la siguiente:

while (condición)
{
acción;
}

Mientras for() repite la iteración una cantidad de veces, while() repetirá la acción mientras se cumple una condición dada.

Se pueden visualizar diferentes formas de trabajar con condicionales y estructuras de repetición y observar la potencia que estas funciones pueden dar a Processing mediante los siguientes ejemplos complementarios:
CAP2EjemploComplementario13.pde
CAP2EjemploComplementario14.pde
CAP2EjemploComplementario15.pde
CAP2EjemploComplementario16.pde
CAP2EjemploComplementario17.pde
CAP2EjemploComplementario18.pde

 

Actividad 8

Tomar uno de los ejemplos complementarios y adaptarlo para generar un programa nuevo.