BLOQUES DE RESPUESTA LÓGICA.
1.- Bloque AND Devuelve verdadero solamente si las dos informaciones lógicas de entrada son verdaderas. Se emplea cuando deban cumplirse varias cosas a la vez, por ejemplo para mostrar un mensaje de enhorabuena cuando se pulsa un botón de aceptar y la respuesta ha sido correcta. Si la salida del bloque se aplica a la entrada de otro AND, se aumenta el número de informaciones que deben ser ciertas.
2.- Bloque OR Devuelve verdadero si alguna información de las entradas es verdadera (una o las dos), si las dos son falsas devuelve falso. Por ejemplo para ejecutar una animación de dos formas posibles, pulsando un botón o una tecla concreta. Si la salida se aplica a otro bloque OR, el resultado es verdadero cuando sea verdadera una, dos o tres entradas.
3.- Bloque EXOR Devuelve verdadero si es verdadera una sola de las entradas, pero no las dos. Aplicando la salida a otro bloque EXOR, el resultado es verdadero cuando es verdadero un número impar de entradas, lo que se sigue cumpliendo para cualquier número de bloques conectados. Por ejemplo, encender una luz desde dos interruptores para apagar y encender con cualquiera de ellos, cumple la función EXOR.
4.- Bloque BÁSCULA O MEMORIA. Devuelve verdadero si la última entrada verdadera ha sido la primera (S). Dicho de otra forma, la salida se conecta con la entrada S o SET y se desconecta con la entrada R o RESET. Si ambas entradas son verdaderas a la vez, la salida es falsa (RESET prioritario). Por ejemplo, para ejecutar algo con un botón y pararlo con otro botón se necesita una memoria.
5.- Bloque INVERSOR. Devuelve verdadero si la información de su entrada es falsa y falso si la entrada es verdadera. Se utiliza siempre que se necesite lo contrario de una información ya disponible.
6.- Bloque DIVISOR BINARIO. La salida cambia de estado cada vez que se activa la entrada. La utilidad es similar a la de un interruptor: Una pulsación encienda la luz y otra pulsación la apaga.
7.- Bloque de FLANCO POSITIVO. Cuando la entrada es verdadera un tiempo prolongado, la salida solo es verdadera en el primer instante. Sabemos que el bloque de ejecución permanente se ejecuta en un segundo tantas veces como se especifique con la opción de ciclos por segundo. Sucede lo mismo con la etapa activa de una secuencia mientras sea falsa su condición de transición. Supongamos que queremos contar el número de veces que se pulsa una tecla, para lo que tendremos que sumar uno (a una variable, por ejemplo) cada vez que la tecla esté pulsada, pero la pulsación no será instantánea sino que durará un determinado número de ciclos y una sola pulsación sumaría uno por cada ciclo ejecutado. Un flanco positivo en la consulta de la tecla garantiza que resulte verdadera una sola vez por cada pulsación (un solo ciclo de programa) y así la cuenta será correcta.
La siguiente imagen muestra el ejemplo del párrafo anterior: El flanco positivo de la consulta de la tecla transmite verdadero (o valor 1) solo en el instante que se pulse una tecla, de forma que la suma se mantiene constante mientras no se pulse tecla, pero al pulsarla se incrementa en uno y se mantiene de nuevo constante aunque la tecla siga pulsada.
8.- Bloque de FLANCO NEGATIVO. Es similar al anterior excepto en que detecta cuándo se desactiva la entrada y devuelve verdadero solo en el instante en que se desactiva. Imaginemos una puerta de entrada con una barrera electrónica para detectar el paso de un automovil: La puerta debería cerrarse cuando el automovil haya entrado, pero no antes. Un flanco negativo de la señal de la barrera sería una condición perfecta para cerrar la puerta, pues informa en el momento que el automovil sobrepasa la barrera.
9.- Bloque de RETARDO A LA CONEXIÓN. Si se mantiene la primera entrada en estado verdadero, la salida tarda un tiempo en transmitir verdadero. Ese tiempo se define con un valor numérico en la segunda entrada, teniendo en cuenta que serán centésimas de segundo. Cuando la primera entrada se hace falsa, la salida también se hace falsa sin espera. Téngase en cuenta que este funcionamiento solo es posible si la aplicación mantiene actividad por sí misma, es decir, si el número de ciclos es mayor que cero, en caso contrario no ejecutaría el programa y se sobrepasaría el tiempo definido sin reacción alguna. Otra consecuencia es que el error posible en la medida del tiempo es igual al tiempo que pasa entre la ejecución de dos ciclos, por ejemplo un valor de 10 ciclos por segundo equivale a un error posible de 0.1 segundos. Esto también puede verse afectado por la actividad del ordenador, ajena a la aplicación que se ejecuta, ya que es impredecible el momento en el que el sistema desvía su atención a la comprobación de eventos, libera memoria que ya no se necesita, etc. La consecuencia es que algún ciclo pudiera tardar un poco más de tiempo en ejecutarse de lo previsto. La siguiente imagen representa el funcionamiento con la pulsación de cualquier tecla: Cuando se pulsa un tiempo mayor de 0.5 segundos, la imagen se dibujará hasta que se suelte la tecla, pero si se pulsa un tiempo menor de 0.5 segundos, la imagen no llegará a dibujarse.
10.- Bloque de RETARDO A LA DESCONEXIÓN. Cuando se activa la primera entrada, la salida también se activa sin espera. Cuando la entrada se desactiva, la salida aún se mantiene conectada un cierto tiempo. Dicho tiempo se determina en centésimas de segundo en la segunda entrada. Valen aquí las mismas consideraciones que para el bloque anterior, en lo que respecta al número de ciclos por segundo y el error en la medida del tiempo. La siguiente imagen muestra el funcionamiento de este bloque cuando se activa con cualquier tecla: Cuando se pulsa la tecla, la imagen sigue sin dibujarse. Cuando se suelta, la imagen se dibuja durante 0.5 segundos.
11.- Bloque GENERADOR DE IMPULSOS. Si se mantiene verdadera la primera entrada, la salida devuelve impulsos a intervalos regulares de tiempo. Dicho tiempo se define en centésimas de segundo en la segunda entrada. Cada impulso es una señal que se mantiene en estado verdadero un solo ciclo de programa. Como sucede con los dos bloques anteriores, es necesario mantener un número de ciclos mayor que cero para su correcto funcionamiento y el error posible es igualmente el tiempo que transcurre entre dos ciclos consecutivos. El ejemplo de la siguiente imagen contiene un generador de impulsos que dará un impulso cada 0.5 segundos si se mantiene pulsada cualquier tecla. Puesto que cada impulso solo dura un ciclo de programa, el retardo a la desconexión alarga la duración de cada impulso en 0.25 segundos y la imagen se vería parpadeando en pantalla dos veces por segundo.
12.- Bloque comparador MENOR QUE... La salida solo es verdadera si el valor numérico de la primera entrada es menor que el valor de la segunda entrada.
13.- Bloque comparador MENOR O IGUAL QUE... La salida solo es verdadera si el valor numérico de la primera entrada es menor o igual que el valor de la segunda entrada.
14.- Bloque comparador IGUAL QUE... La salida solo es verdadera si los dos valores numéricos de las entradas son iguales.
15.- Bloque comparador DISTINTO QUE... La salida solo es verdadera si los dos valores numéricos de las entradas son distintos.
16.- Bloque comparador MAYOR O IGUAL QUE... La salida solo es verdadera si el valor numérico de la primera entrada es mayor o igual que el valor de la segunda entrada.
17.- Bloque comparador MAYOR QUE... La salida solo es verdadera si el valor numérico de la primera entrada es mayor que el valor de la segunda entrada.
18.- Bloque de ESTADO DE UN BIT. ¿Sabía que un solo valor entero contiene 32 informaciones lógicas?... ¡Cierto! porque AutoJava trabaja con valores enteros de 32 bits, cada uno de los cuales es una información lógica verdadera o falsa (o bien un valor numérico igual a 1 o a 0 respectivamente). Un valor entero, representado en este sistema de numeración tan especial (sistema binario), es una larga fila de ceros y unos, por ejemplo, el valor 25 sería lo siguiente:
Cada cifra o bit solo puede ser 0 o 1 (equivalente a falso o verdadero) y la posición que ocupa se define de derecha a izquierda comenzando por 0 y acabando en 31. Por ejemplo, el bít número 3 es un 1 o verdadero. No vamos a profundizar aquí en el sistema binario, pero sí podemos utilizar datos enteros como pequeños almacenes de informaciones lógicas. El bloque de estado de un bit informa del estado de cualquiera de los 32 bits del dato entero (variable o constante) que pongamos en la segunda entrada, siendo el número de bit a consultar el que se indique en la primera entrada.
Lógicamente, si existe un bloque para consultar el estado de un bit, debería existir otro bloque que permita cambiar su estado. esta operación es la que hace el bloque 27 (cambio de un bit), que encontrará más adelante.
19.- Bloque COMPARADOR DE TEXTOS. Asignando informaciones de texto en las entradas, la salida solo es verdadera si ambos textos son idénticos. Por ejemplo, si tenemos la respuesta correcta a una pregunta y tenemos la respuesta del usuario, si las comparamos y resulta verdadero es que la respuesta del usuario ha sido correcta.
BLOQUES ESPECIALES DE RESPUESTA NUMÉRICA.
20.- Bloque TEMPORIZADOR. Su salida devuelve el tiempo (en centésimas de segundo) que la entrada se mantiene en estado verdadero. Cuando la entrada se desactiva, el tiempo vuelve a tener valor 0. Este bloque sirve para medir tiempos y tomar decisiones dependientes del tiempo transcurrido, pero a diferencia de los bloque 9 y 10, que transmiten directamente unainformación lógica, en este bloque la decisión lógica ha de ser elaborada mediante bloques de comparación. El ejemplo de la siguiente imagen es equivalente a un retardo a la conexión, ya que si se pulsa una tecla más de 0.5 segundos, el valor del temporizador será mayor de 50 centésimas de segundo y se cumple la comparación, haciendo que la imagen se dibuje. Cuando se suelte la tecla, el tiempo vuelve a 0, la comparación no se cumple y la imagen desaparece.
21.- Bloque CONTADOR. Su salida devuelve el número de impulsos que se hayan recibido por la primera entrada (un impulso es una información lógica que se hace verdadera y luego falsa). Se emplea para contar cuántas veces orurre una determinada condición, como por ejemplo cuántas veces se pulsa un determinado botón. Si la señal que se aplica a la segunda entrada se hace verdadera, el valor de la cuenta vuelve a cero. Si la entrada se mantiene verdadera a medida que se ejecutan ciclos de programa, sumará uno a la cuenta en cada ciclo. Para contar impulsos de entrada y no ciclos, debe ponerse un bloque de FLANCO POSITIVO en la entrada.
22.- Bloque SET. Si la primera entrada es falsa, el dato de la segunda entrada no se transmite a la salida y el valor de salida se mantiene fijo. Cuando la primera entrada se activa, el valor de la segunda entrada sí se transmite a la salida (viene a ser como un interruptor que abre o cierra el paso de información numérica). Con un flanco positivo en la primera entrada, la salida se queda con el valor que tenga la entrada en el instante de la conexión de la primera entrada, como si fuera una cámara que saca una instantánea de un valor numérico variable en el momento que se pulsa un botón.
23.- Bloque INCREMENTAL. La necesidad de aumentar y disminuir un valor se presenta con frecuencia, por ejemplo, un componente al que hagamos avanzar y retroceder paso puede simular una animación adelante y atrás o bien contenidos a modo de presentación en la que avanzamos y retrocedemos pantalla. También sucede cuando leemos o modificamos datos de forma ordenada o calculamos una función punto a punto. El valor de salida podrá variar entre 0 y el valor que asignemos en la segunda entrada. Si la primera entrada es verdadera, la salida se irá incrementando y si es falsa se irá decrementando. Los límites 0 y el máximo no se pueden sobrepasar, por lo que al llegar a uno de ellos se mantiene el valor de salida a menos que se invierta el sentido con la primera entrada. La indicación "bool" de la parte superior representa un dato lógico que habilita o deshabilita la operación. Si es verdadero (bloque habilitado), la salida aumenta o disminuye dependiendo de la primera entrada. Si es falso (deshabilitado), la salida permanece constante. Como dato de habilitación se admite constante lógica verdadera o falsa y variable lógica. Si se acepta variable, ésta ya debe existir para poder establecer la asignación. Del estado de la variable dependerá que el valor de salida varíe o se mantenga bloqueado. En el ejemplo, al pulsar el botón izquierdo del ratón, el valor de salida se incrementa o decrementa entre 0 y 100 dependiendo de que se pulse o no cualquier tecla. En el elemento texto_lleno04 se vería un valor que no sobrepasa los límites 0 y 100. Si en la consulta del ratón se intercala un flanco positivo, el valor no variará rápidamente, sino que lo hará de 1 en uno con cada pulsación.
24.- Bloque INCREMENTAL CÍCLICO. Su funcionamiento es similar al anterior excepto en que los límites 0 y máximo sí se pueden sobrepasar. Al sobrepasar el máximo, la salida vuelve a 0 y continúa su incremento. Al sobrepasar el valor 0, la salida vuelve al valor máximo y continúa su decremento. Por ejemplo, si un componente representa algo que da vueltas, es lógico repetir sus pasos cíclicamente.
25.- Bloque SELECTOR. Este bloque se comporta como un conmutador que por defecto deja pasar a la salida el dato de la segunda entrada. Pero el dato bool asignado puede hacerlo cambiar de estado y entonces pasa a la salida el valor de la primera entrada. El dato bool puede ser constante o variable, pero no tiene sentido que siempre sea verdadero o falso ya que un selector tiene la función de poder cambiar de estado.
26.- Bloque RANDOM o ALEATORIO. Cada vez que el dato bool asignado se haga verdadero, la salida devuelve un nuevo valor aleatorio comprendido entre los dos valores de entrada.
27.- Bloque de CAMBIO DE BIT. El valor de la segunda entrada, como todo valor entero, está compuesto por 32 bits o estados lógicos que se numeran de 0 a 31. El número de bit se indica en la primera entrada y el estado del dato lógico que se asigne será el estado que adoptará el bit seleccionado. Este bloque es complementario del 18 (estado de un bit), que puede consultar para más información.
28.- Bloque AND NUMÉRICO. Recibe dos valores numéricos (cuyo equivalente binario son 32 bits o estados lógicos) a los que aplica la operación AND bit a bit. Si los dos bits de igual posición son verdaderos, el bit resultante será verdadero y falso en caso contrario.
29.- Bloque OR NUÉRICO. Recibe dos valores numéricos (cuyo equivalente binario son 32 bits o estados lógicos) a los que aplica la operación OR bit a bit. Si alguno de los dos bits de igual posición es verdadero, el bit resultante será verdadero y falso en caso contrario.
30.- Bloque EXOR NUMÉRICO. Recibe dos valores numéricos (cuyo equivalente binario son 32 bits o estados lógicos) a los que aplica la operación EXOR bit a bit. Si uno solo de los dos bits de igual posición es verdadero, el bit resultante será verdadero y falso en caso contrario.
BLOQUES DE OPERACIONES MATEMÁTICAS.
31a 34.- Suma, resta, multiplicación y división. Como los símbolos indican, realizan las operaciones básicas con los valores de entrada y ponen el resultado en la salida. En la resta, toma el valor de la primera entrada y le resta el valor de la segunda entrada (el orden es importante). En la división sucede lo mismo, toma el valor de la primera entrada y lo divide entre el valor de la segunda. Si los datos son enteros, el resultado también lo será. Esto es importante en la división porque al dividir 7 entre 2, por ejemplo, el resultado será 3 y no 3.5. Sin embargo, al dividir 7.0 entre 2, el resultado será 3.5 puesto que 7.0 es real.
35.- Resto de división de enteros. Este bloque convierte a enteros los valores de entrada (caso de que no lo sean) y devuelve el resto de la división.
36.- Potencias. El valor de la segunda entrada lo eleva al valor de la primera entrada y devuelve el resultado.
37 y 38.- Máximo y mínimo. Estos bloques toman los valores de entrada y devuelven el valor mayor o menor respectivamente.
39.- Conversión a entero. Trabajar con valores enteros puede facilitar determinadas tareas como se describe en el ejemplo. Sin embargo, los datos con los que trabajar no siempre pueden ser enteros. Este bloque convierte a entero el valor de entrada. Veamos un ejemplo: Queremos dividir el panel en zonas como una cuadrícula y conocer en cuál de ellas se encuentra el ratón en todo momento. Puesto que las coordenadas son datos reales (porque el contenido escalado precisa coordenadas reales), cada coordenada del ratón se convierte a valor entero tal como se ve en la figura. El valor entero de cada coordenada es dividido entre 100 con el fin de que las zonas de la cuadrícula sean de 100 x 100. Como los bloques de división reciben valores enteros, el resultado es también entero, de modo que los resultados se corresponden con los de la cuadrícula de la imagen. Los bloques de color rojo pálido se encargan de encadenar texto para formar un texto único compuesto por número de casilla en horizontal, una coma y número de casilla en vertical. El texto final se verá en pantalla por la asignación al contenido del elemento texto_lleno04.
40.- Raíz cuadrada. Como su nombre indica, devuelve la raíz cuadrada del valor de entrada.
41.- Logaritmo neperiano. Devuelve el logaritmo neperiano del valor de entrada. No se ha previsto el logaritmo en otra base porque su conversión es sencilla: El logaritmo en base "a" de un valor "b", es igual que el logaritmo neperiano de "b" dividido entre el logaritmo neperiano de "a".
42.- Valor absoluto. Devuelve el valor absoluto del dato de entrada, es decir, siempre con signo positivo.
43 a 45.- Razones trigonométricas. Interpretan el valor de entrada como un ángulo expresado en grados y devuelven el seno, coseno y tangente respectivamente.
46 a 48.- Razones trigonométricas inversas. El arco seno y arco coseno solo actúan correctamente si el valor de entrada está entre -1 y 1 y devuelven el ángulo cuyo seno o coseno es igual que el valor de entrada (expresado en grados). El ángulo que devuelve el arco seno estará comprendido entre -90º y +90º y el que devuelve el arco coseno entre 0º y 180º. Puesto que la tangente puede variar entre -infinito y +infinito, el valor de entrada puede ser cualquiera y devuelve un ángulo entre -90º y +90º.
OTROS TIPOS DE BLOQUES.
49.- Código ascii. La primera entrada determina qué caracter del texto de la segunda entrada será convertido a su código ascii y devuelve su valor. El valor de selección (en primera entrada) comienza por 0 para el primer caracter.
50.- Posición de texto. Este bloque devuelve la posición en la que un texto o caracter se localiza dentro de otra cadena de texto. El texto o caracter a buscar se aplica en la primera entrada y el texto donde buscarlo en la segunda entrada. La búsqueda comienza desde la posición que se indique con el dato numérico asignado (podrá ser constante o variable). Si la posición de búsqueda se define con una variable, ésta ya debe estar creada cuando se inserte el bloque. En el caso de no encontrarse el texto buscado devuelve el valor -1 por lo que también aporta información sobre la existencia o no del texto buscado. Por ejemplo, al buscar "bc" en la cadena "abcdeabcde" comenzando desde la posición 0, devolverá el valor 1, ya que es la primera posición donde se localiza una coincidencia. Si la búsqueda comienza desde la posición 2, devolverá 6 porque existe otra coincidencia. Si la búsqueda comienza en posición 7, devolverá -1 (no se encuentra).
51.- Posición de texto hacia atrás. Su funcionamiento es idéntico al anterior excepto en que busca coincidencia hacia la izquierda en lugar de hacerlo hacia adelante.
52.- Número de caracteres. Al aplicar un texto a su entrada, devuelve el número de caracteres que contenga.
53 y 54.- Coordenada de un punto. Al aplicar un dato de punto en la entrada, estos bloques devuelven la coordenada X y la Y respectivamente. Se pueden generar datos de punto de diversas formas: Como variable o constante, como datos dentro de un área de texto y con el bloque 63, que devuelve dato de punto a partir de dos valores numéricos.
55 a 57.- Distancia entre dos puntos. En sus entradas se aplican dos datos de punto. El bloque 55 devuelve la distancia entre los dos puntos. El bloque 56 devuelve la diferencia entre la coordenada X del primer punto y la coordenada Y del segundo (puede ser negativo). El bloque 57 devuelve la diferencia entre la coordenada Y del primer punto y la coordenada Y del segundo (también puede ser negativo).
58 y 59.- Pendiente del segmento que une dos puntos y ángulo con la horizontal. Puesto que la coordenada Y aumenta hacia abajo, el ángulo aumenta en el sentido de las agujas del reloj. La pendiente es la tangente del ángulo y su signo depende de la posición de los puntos tal como vemos en la figura, donde los puntos 1 y 2 coresponden a los datos de primera y seguna entrada respectivamente. El ángulo que devuelve el bloque 59 varía entre 0º y 360º. Convertirlo a un sistema de ejes con aumento de la coordenada Y hacia arriba es sencillo, basta multiplicar a la coordenada Y por -1 y desplazar para posicionar el contenido en zona visible.
60.- Encadenado de texto y otros tipos de datos. Los textos o datos aplicados a las entradas se encadenan formando un solo texto que se transmite a la salida.
61.- Inserción de texto. El texto o dato de la primera entrada se inserta en el texto o dato de la segunda entrada en la posición que se indique con el dato numérico asignado (valor constante o variable). Este bloque ejecuta la operación siempre que se ejecute el bloque de programa en el que se encuentre. Para realizar la operación una sola vez, debería programarse en la etapa de una secuencia o en una subrutina de forma que el bloque de programa se ejecute condicionalmente (para poder ejecutarlo una sola vez).
62.- Borrado de texto. El texto en el que se desea borrar un determinado número de caracteres se aplica en la segunda entrada. Con la primera entrada se indica la posición en la comienza el borrado (0 si es desde el primer caracter) y con el dato numérico asignado se indica el número de caracteres a borrar. La asignación numérica puede ser un valor constante o una variable.
63.- Bloque generador de punto. Aplicando a sus entradas dos valores numéricos forma con ellos las coordenadas X e Y de un punto que transmite a la salida. La coordenada X corresponde a la primera entrada y la coordenada Y a la segunda.