jueves, 18 de junio de 2015
Trabajo Practico 3
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
TP 3 - Condicionales
Introducción:
Cuando necesitamos que nuestro programa deje de tener una ejecución lineal, debemos hacer uso de los condicionales. Estos nos ayudan a ejecutar diferentes partes de código dadas ciertas “condiciones”.
Los condicionales se basan en el Álgebra de Boole, la cual tiene las siguientes reglas:
a) Solo existen 2 valores posibles, VERDADERO y FALSO (TRUE y FALSE de ahora en más) b) Existen 2 operadores Booleanos que se van a utilizar en clase, OR y AND (cuando programamos se usan || y &&).
c) El operador OR retorna TRUE si al menos 1 de las variable usadas es TRUE. Por ejemplo:
TRUE OR TRUE = TRUE TRUE OR FALSE = TRUE FALSE OR TRUE = TRUE FALSE OR FALSE = FALSE
d) El operador AND retorna TRUE si ambas variable usadas son TRUE. Por ejemplo: TRUE AND TRUE = TRUE
TRUE AND FALSE = FALSE
FALSE AND TRUE = FALSE FALSE AND FALSE = FALSE
e) Todo valor de verdad puede ser negado. Por ejemplo: NOT(TRUE) = FALSE
NOT(FALSE) = TRUE
Cuando empezamos a programar, debemos tener en cuenta que, un valor de verdad puede ser asignado a una variable, tanto directamente como indirectamente.
Por ejemplo:
Vemos las diferentes maneras de indicar que esta lloviendo directamente asignando un valor booleano a la variable:
boolean estaLloviendo = TRUE; boolean estaLloviendo = NOT(TRUE); boolean estaLloviendo = FALSE;
O, dados los valores de otras variables booleanas y usando operadores Booleanos, definimos el valor de otra variable. En este ejemplo es necesario que se cumplan todas las condiciones para que el resultado sea TRUE, ya que hacemos uso del operador AND (&&):
boolean hayNiebla = TRUE; boolean noTengoLuces = TRUE; boolean tomeMuchoAlcohol = TRUE;
boolean voyATenerUnAccidente = hayNiebla && noTengoLuces &&
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
tomeMuchoAlcohol;
Podemos modificar las opciones anteriores para definir con que al menos se cumpla una condicion, sera suficiente para que la variable “voyATenerUnAccidente” sea TRUE, y eso es haciendo uso del operador OR (||):
boolean hayNiebla = FALSE;
boolean noTengoLuces = !TRUE; //El operador ! es usado para negar un valor de verdad.
boolean tomeMuchoAlcohol = TRUE;
boolean voyATenerUnAccidente = hayNiebla || noTengoLuces || tomeMuchoAlcohol;
Otra manera, sería asignando valores haciendo uso de los operadores de comparación
(IGUAL, MENOR, MENOR o IGUAL, MAYOR, MAYOR o IGUAL, DISTINTO)
int miNumero = 10;
boolean esNegativo = miNumero < 0;
boolean esPositivo = miNumero > 0;
boolean esPar = miNumero % 2 == 0; //Investigar que es el %
boolean esImpar = miNumero % 2 != 0;
Una vez que tenemos las variables booleanas, debemos hacer uso de las mismas con alguna estructura de programación. La misma es el IF. La sintaxis son las siguientes:
if(CONDICIÓN BOOLEANA){ CÓDIGO
}
if(CONDICIÓN BOOLEANA){ CÓDIGO
}else{
}
CÓDIGO
if(CONDICIÓN BOOLEANA){ CÓDIGO
}else if(CONDICIÓN BOOLEANA){ CÓDIGO
}else if(CONDICIÓN BOOLEANA){ CÓDIGO
}else{
}
CÓDIGO
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
Supongamos que deseamos imprimir sólo los números pares:
void draw(){
miNumero++;
boolean esPar = miNumero % 2 == 0;
if(esPar){
println(miNumero);
}
}
Supongamos que deseamos imprimir todos los números, pero con un texto anterior:
void draw(){
miNumero++;
boolean esPar = miNumero % 2 == 0;
if(esPar){
println(“PAR: ” + miNumero);
}else{
}
}
println(“IMPAR: ” + miNumero);
Supongamos de imprimir los número múltiplos de 3, múltiplos de 2, y los que no son múltiplos de ninguno
void draw(){
miNumero++;
boolean esMultiplo3 = miNumero % 3 == 0; boolean esMultiplo2 = miNumero % 2 == 0; if(esMultiplo3 ){
println(“MULTIPLO 3: ” + miNumero);
}else if (esMultiplo2 ){
println(“MULTIPLO 2: ” + miNumero);
}else {
println(“NO ES MULTIPLO: ” + miNumero);
}
}
Que trampa tiene este último ejercicio?
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
Ejercicios:
0) Realizar un programa que permita dibujar (como con un lápiz) solo de la mitad derecha de la pantalla.
1) Realizar un programa que permita dibujar (como con un lápiz) solo una zona circular de radio 100 que parte desde el centro de la pantalla.
2) Realizar un programa que permita dibujar (como con un lápiz) solo una zona cuadrada de lado 100, centrada en la pantalla. Al presionar una tecla, el lápiz se tiene que convertir en una goma de borrar que me permita eliminar de la pantalla lo dibujado a medida que movemos el mouse.
3) Realizar un programa que permita dibujar (como con un lápiz) con color ROJO. Al presionar la tecla "A" que empiece a pintar en color AZUL. Al presionar la tecla "V" que comience a pintar en color VERDE. Y al presionar "R" que vuelva a pintar en color ROJO
4) Realizar un programa que permita dibujar (como con un lápiz), pero al presionar una zona cuadrada ubicada en la esquina inferior derecha de 20 X 20, se borre toda la pantalla.
5) Cree un programa que me permita dibujar una elipse que siga la posición del mouse. Al hacer click debe cambiar de color rojo al azul, y viceversa. De esta forma la elipse alternará entre rojo y azul como tantos click haga.
6) Modificar el ejercicio anterior para que solo alterne cuando se encuentra dentro de la zona cuadrada ubicada en el centro de la pantalla. La zona tiene un ancho y alto de 100 pixels
7) Modificar el ejercicio 5 para que el cambio se produzca cuando cruzan las 2 diagonales principales de la pantalla. En una zona cambiará de ROJO a AZUL, en otra zona de VERDE a AMARILLO, en otra zona de Cuadrado a Triángulo, y en la última solo dibujara como un lápiz.
8) Crear un programa que me permita dibujar una elipse en pantalla que se mueva desde la derecha hacia la izquierda en un principio. Al llegar al borde de la pantalla, debe cambiar el sentido desde la izquierda hacia la derecha. Lo mismo debe suceder con el margen
izquierdo.
9) Basándonos en el ejercicio 8), debemos modificar el programa para que al hacer click se modifique el sentido de los objetos de forma que se empiecen a mover de abajo hacia arriba, y de forma inversa cuando lleguen a los bordes.
10) Modificar el programa del ejercicio 8), para que al hacer click sobre la elipse la misma se detenga, y retorne a su movimiento anterior cuando se haga click sobre la elipse nuevamente.
11) Realizar un programa que permita realizar la acción de un Boton. El Botón será implementado en un programa que me permita arrancar el movimiento de una bola y detenerlo. En el mismo debe haber 2 botones, uno para arrancar y otro para detener la bola.
12) Dados 2 botones en la pantalla (implementados por el alumno) y una elipse ubicada en el centro moviéndose hacia la derecha; al ser presionado 1 de ellos, hará que el sentido de la elipse sea hacia la izquierda; al presionar el otro botón, hará que el sentido sea hacia la derecha. Si la elipse toca alguno de los 2 bordes, debe aparecer un texto diciendo "PERDISTE!"
13) Modificar el ejercicio 12) para que también se controle el movimiento horizontal, aplicando la misma lógica en los bordes.
14) Realizar un programa con la misma base del ejercicio 12, pero sin botones. En la pantalla debe aparecer un contador que va a marcar las veces que hicimos click en la pantalla. La elipse va a comenzar moviéndose en una dirección aleatoria (Arriba,Abajo,Derecha, Izquierda). Al hacer click en la elipse, esta cambiará de dirección, pero aleatoria también. El fin es ver cuantos clicks se pueden hacer antes de que la elipse toque el borde.
15) Modificar el ejercicio 14) para que cada 10 clicks aumente la velocidad de la elipse en 5 pixels.
16) Realizar un programa que dibuje una Bola que pueda ir rebotando por las paredes de la pantalla.
17) Realizar un objeto circular que aumente y disminuya su diámetro automáticamente entre un valor mínimo y uno máximo. El objeto debe moverse junto con la posición del mouse y deberá tener 20 pixels de diámetro mínimo y 200 de máximo.
18) Realizar un programa que permita el movimiento de un rectángulo que, comenzando en el extremo superior izquierdo, se mueva hasta el extremo derecho, luego descienda hasta
la esquina inferior derecha, de allí se mueva hasta la esquina inferior izquierda y después ascienda hasta la posición de salida. Al llegar a cada esquina deberá cambiar de color.
19) Realizar un programa que me permita hacer 3 clicks en la pantalla. El primero debe permitir que se dibuje una línea vertical en la posición X del mouse en la pantalla, el segundo, otra línea vertical en la pantalla dada por la posición en X del mouse. El tercer click me va a cambiar de color el área comprendida entre ambas zonas, teniendo que hacer click en la zona entre ambas líneas.
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
Razonamiento
7) Modificar el ejercicio 5 para que el cambio se produzca cuando cruzan las 2 diagonales principales de la pantalla. En una zona cambiará de ROJO a AZUL, en otra zona de VERDE a AMARILLO, en otra zona de Cuadrado a Triángulo, y en la última solo dibujara como un lápiz.
a) Primero debemos partir el problema, para poder resolverlo de una forma mas practica. Las partes serían:
- Resolver la mitad del área que cruza la diagonal desde el punto (0,0) al (400,400)
- Resolver la mitad del área que cruza la diagonal desde el punto (0,400) al (400,0)
- Resolver la intersección de las 4 zonas solicitadas
- Resolver como tomar los clicks en cada zona
b) Resolver la mitad del área que cruza la diagonal desde el punto (0,0) al (400,400)
color miColor;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
void draw(){
if(mouseX > mouseY){
miColor = color(255,0,0);
}else{
miColor = color(0,0,255);
} fill(miColor); ellipse(mouseX,mouseY,50,50);
}
c) Resolver la mitad del área que cruza la diagonal desde el punto (0,400) al (400,0). Existe una propiedad que define que aquellos puntos que se encuentran de la mitad superior derecha, la suma de su parte Y y X no es mayor al width ,entonces:
color miColor;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
void draw(){
if(mouseX + mouseY < 400){
miColor = color(255,0,0);
}else{
miColor = color(0,0,255);
} fill(miColor); ellipse(mouseX,mouseY,50,50);
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
}
d) Resolver la intersección del cuarto superior de la pantalla:
color miColor;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
void draw(){
if((mouseX + mouseY < 400) && (mouseX > mouseY)){
miColor = color(255,0,0);
}else{
miColor = color(0,0,255);
} fill(miColor); ellipse(mouseX,mouseY,50,50);
}
d) Resolver la intersección del cuarto inferior de la pantalla:
color miColor;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
void draw(){
if((mouseX + mouseY < 400) && (mouseX > mouseY)){
miColor = color(255,0,0);
}else if((mouseX + mouseY > 400) && (mouseX < mouseY)){
miColor = color(0,255,0);
}
else{
}
miColor = color(0,0,255);
fill(miColor);
ellipse(mouseX,mouseY,50,50);
}
e) Resolver la intersección del cuarto derecho de la pantalla:
color miColor;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
void draw(){
if((mouseX + mouseY < 400) && (mouseX > mouseY)){
miColor = color(255,0,0);
}else if((mouseX + mouseY > 400) && (mouseX < mouseY)){
miColor = color(0,255,0);
}
else if((mouseX + mouseY > 400) && (mouseX > mouseY)){
miColor = color(255,255,0);
}
else{
}
miColor = color(0,0,255);
fill(miColor);
ellipse(mouseX,mouseY,50,50);
}
f) Ahora, debemos resolver el manejo de los click. Lo mejor, es reproducir la lógica en el método mousePressed(). Usamos una variable booleana para lograr la lógica de cambiar de un valor a otro.
color miColor;
boolean click;
void setup(){
size(400,400);
miColor = color(255,0,0);
}
void draw(){
if((mouseX + mouseY < 400) && (mouseX > mouseY)){
miColor = color(255,0,0);
}else if((mouseX + mouseY > 400) && (mouseX < mouseY)){
miColor = color(0,255,0);
}
else if((mouseX + mouseY > 400) && (mouseX > mouseY)){
miColor = color(255,255,0);
}
else{
}
miColor = color(0,0,255);
fill(miColor);
ellipse(mouseX,mouseY,50,50);
}
void mousePressed(){
click = !click;
if((mouseX + mouseY < 400) && (mouseX > mouseY)){
}else if((mouseX + mouseY > 400) && (mouseX < mouseY)){
Dpto. Producción Multimedial - Tecnología Multimedia 1 - 2015
}
else if((mouseX + mouseY > 400) && (mouseX > mouseY)){
}
else{
}
}
Suscribirse a:
Comentarios (Atom)