Alternativa Condicional Clase 5 - unq.edu.ar
Transcript of Alternativa Condicional Clase 5 - unq.edu.ar
![Page 1: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/1.jpg)
Programación
Universidad Nacional de Quilmes
Clase 5Alternativa Condicional
![Page 2: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/2.jpg)
Pensemos el siguiente problemaQueremos pintar todas las celdas de un tablero de 5x5 de color negro, salvo aquellas que ya están pintadas de negro, en cuyo caso, queremos pintarlas de rojo.El cabezal comienza en la esquina inferior izquierda.A continuación se muestra un tablero de ejemplo, pero tener en cuenta que no sabemos a priori cuáles son las celdas pintadas de negro en el tablero con estado inicial.
Estado inicial del tablero Estado final del tablero
![Page 3: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/3.jpg)
Alternativa Condicional
![Page 4: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/4.jpg)
Definición
La alternativa condicional permite elegir en base a una condición
si un bloque de código debe ejecutarse o no.
Nos permite elegir dos caminos distintos de acción.
![Page 5: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/5.jpg)
SintaxisEn QDraw, la sintaxis de una alternativa condicional se escribe así:
si (CONDICIÓN) entonces{
BLOQUE SI LA CONDICIÓN SE CUMPLE (evalúa verdadero)
}sino{
BLOQUE SI LA CONDICIÓN NO SE CUMPLE (evalúa falso)
}
![Page 6: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/6.jpg)
Ejemplo simple
procedimiento PintarCelda() {si (<La celda está pintada de negro>) entonces {
PintarRojo} sino {
PintarNegro}
}
Aquí irá una instrucción del tipo condición que veremos más adelante
Se ejecuta el bloque de código superior (si) o el inferior (sino) dependiendo del estado de la celda actual. En este caso si está pintada de negro o no.
![Page 7: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/7.jpg)
Un ejemplo más completo
procedimiento PintarColumna () {/* …*/
repetir 4 veces {PintarCelda()MoverArrriba
}PintarCelda()
}
Poco a poco vamos enriqueciendo nuestro lenguaje con un repertorio mayor de instrucciones y nuevos conceptos. De esta manera, podemos sumar herramientas que al combinarse, nos permitan resolver problemas más complejos.
Veamos aquí un ejemplo de cómo podemos utilizar el procedimiento anterior, como parte de un procedimiento más general y ya conocido.
![Page 8: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/8.jpg)
Condiciones
![Page 9: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/9.jpg)
Definición
Las condiciones pueden tomar valores o bien verdaderos, o
bien falsos.
Son los que nos van a permitir discernir entre dos alternativas.
![Page 10: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/10.jpg)
Nuevas primitivas
Para poder consultar sobre el estado del tablero necesitamos
agregar a nuestro lenguaje una serie de nuevas primitivas que
representan esas condiciones.
Vamos a querer consultar por ejemplo, si una celda está pintada de
algún color, o si está vacía.
![Page 11: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/11.jpg)
Nuevas primitivas - SintaxisAdicionamos las siguientes instrucciones:
● estaPintadaDeNegro?: Denota Verdadero si la celda está pintada de color Negro, Falso en cualquier otro caso
● estaPintadaDeRojo?: Denota Verdadero si la celda está pintada de color Rojo, Falso en cualquier otro caso
● estaPintadaDeVerde?: Denota Verdadero si la celda está pintada de color Verde, Falso en cualquier otro caso
● estaVacia?: Denota Verdadero si la celda está vacía, Falso en cualquier otro caso
![Page 12: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/12.jpg)
Volviendo al ejemplo simple
procedimiento PintarCelda() {si (estaPintadaDeNegro?) entonces {
PintarRojo} sino {
PintarNegro}
}
Reemplazamos con la primitiva correspondiente
![Page 13: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/13.jpg)
Alternativa CondicionalForma acotada
![Page 14: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/14.jpg)
Analicemos el siguiente códigoSe necesita pintar todas las celdas del tablero de color negro, salvo aquellas que ya estén pintadas de negro, en cuyo caso, queremos simplemente ignorarlas.El cabezal comienza en la esquina inferior izquierda.
procedimiento PintarCelda() {
/**/si (estaVacia?) entonces {
PintarNegro} sino {
}}
Como parte del programa contamos con el siguiente procedimiento:
¿Notan algo raro?
Estado inicial del tablero Estado final del tablero
![Page 15: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/15.jpg)
Forma Acotada - Caso I
Por lo tanto, cuando necesitemos accionar mediante sólo una alternativa, el bloque de
código que no se utiliza, lo debemos eliminar por completo, simplificando así el código
y su lectura.
En este caso, la alternativa eliminada es aquella cuya condición evalúa falso (bloque
del "sino"). Quedando como resultado el siguiente código:
procedimiento PintarCelda() {
/**/si (estaVacia?) entonces {
PintarNegro}
}
¡Exacto! No tiene sentido que haya un bloque de código vacío.
![Page 16: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/16.jpg)
En este caso no se puede simplemente eliminar el bloque como en la situación anterior. Lo que conviene hacer aquí, es cambiar la pregunta negando la condición original, invirtiendo así la situación.
Quedando como resultado el siguiente código:
Forma Acotada - Caso IIAhora ¿qué pasa si la alternativa en desuso es aquella cuya condición evalúa verdadero (bloque del "si")?
procedimiento PintarCelda() {
si (estaPintadaDeNegro?) entonces {
} sino {
PintarNegro}
}
Mmm…
procedimiento PintarCelda() {
si (¬ estaPintadaDeNegro?) entonces {PintarNegro
}}
No tenemos bloques en desuso y seguimos cumpliendo con el propósito¿Les resulta familiar?
![Page 17: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/17.jpg)
Breve repaso de operadores lógicosComo podemos notar, las condiciones necesarias para evaluar las alternativas,
utilizan los operadores lógicos que ya conocemos.
Recordemos cómo funcionan los más utilizados, mediante su tabla de verdad:
p ¬p
V F
F V
Negación (¬)
p q p ∧ q
V V V
V F F
F V F
F F F
Conjunción (^)
p q p ∨ q
V V V
V F V
F V V
F F F
Disyunción (v)
![Page 18: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/18.jpg)
Veamos un ejemplo aplicando disyunción
procedimiento RecorrerColumna() {repetir 3 veces {
PintarDeVerdeSoloSiEsNegraORoja()MoverArriba
} PintarDeVerdeSoloSiEsNegraORoja()
}
Definir un procedimiento que pinte de verde la celda actual sólo si está pintada de negro o de rojo
Ahora definir el procedimiento RecorrerColumna() que recorra una columna de 4 celdas de alto y pinte de verde la celda actual sólo si está pintada de negro o de rojo
procedimiento PintarDeVerdeSoloSiEsNegraORoja()() {si(estaPintadaDeNegro? ∨ estaPintadaDeRojo?) entonces {
PintarVerde}
}
![Page 19: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/19.jpg)
Analicemos mejorEvaluar el procedimiento RecorrerColumna() para los siguientes tableros:
¿Cómo queda el estado final del tablero en cada caso, luego de haberse ejecutado el procedimiento?
![Page 20: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/20.jpg)
● La alternativa condicional permite elegir en base a una condición● Las condiciones pueden tomar valores o bien verdaderos, o bien falsos● En las condiciones podemos utilizar operadores lógicos como negación,
conjunción y disyunción● Utilizar la versión acotada en lugar de dejar bloques vacíos● La alternativa condicional no se puede anidar, al igual que la repetición simple
Resumiendo...
![Page 21: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/21.jpg)
Ejercicio para precalentar
![Page 22: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/22.jpg)
EnunciadoDado un tablero que consiste en una fila de celdas pintadas de
negro con algunas de ellas pintadas de rojo. Pinte solamente las
celdas rojas de color verde.Ejemplo de estado inicial de tablero
Ejemplo de estado final de tablero
![Page 23: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/23.jpg)
Para reflexionar...
"Estudiar no es un acto de consumir ideas, sino
de crearlas y recrearlas"
![Page 24: Alternativa Condicional Clase 5 - unq.edu.ar](https://reader036.fdocuments.net/reader036/viewer/2022080111/62e693877d47e12ace687720/html5/thumbnails/24.jpg)
Programación
Universidad Nacional de Quilmes
Clase 5Alternativa Condicional