fundamentos de programación clase 3: booleanos ... · contenido en la clase de hoy veremos:...

37
Fundamentos de programación clase 3: Booleanos, condiciones y expresiones condicionales Profesor: Jairo Ernesto Maldonado G. http://eisc.univalle.edu.co/cursos/ http://campusvirtual.univalle.edu.co [email protected] Autor: Ángela Villota

Upload: others

Post on 20-Oct-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Fundamentos de programaciónclase 3: Booleanos, condiciones y expresiones

condicionales

Profesor: Jairo Ernesto Maldonado G.http://eisc.univalle.edu.co/cursos/

http://campusvirtual.univalle.edu.co [email protected]

Autor: Ángela Villota

Page 2: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Recordemos

Hasta el día de hoy escribimos programas en scheme siguiendo las siguientes reglas: Las operaciones se escriben usando notación prefija. Todas las expresiones empiezan y terminan con

paréntesis. Las variables se definen así:

(define <nombre> <valor>)

(

Los programas se escriben así:(define <encabezado> <cuerpo>)

(

encabezado → (<nombre> <parámetros>)

(

cuerpo → una expresión en scheme (bien escrita)

u

21/02/09http://eisc.univalle.edu.co/cursos/

Page 3: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Contenido

En la clase de hoy veremos:1. Booleanos, álgebra booleana.

2. condiciones simples y compuestas.

– Expresiones condicionales.

4. Programas con expresiones condicionales.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 4: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Álgebra booleana

Álgebra: es una rama de las matemáticas en relación con el estudio de la estructura, relación y cantidad.

Álgebra booleana: es el álgebra de dos valores. Estos suelen ser 0 y 1, T y F ó como vamos a usar en esta clase falso y verdadero.

Operadores: existen 3 operadores básicos conjunción (and Ʌ), disyunción (or Ⅴ) y negación (not ∼)

)

21/02/09http://eisc.univalle.edu.co/cursos/

Page 5: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Tablas de verdad Negación: Consiste en cambiar el valor de verdad.

Disyunción: el valor de verdad resultante será true cuando una o todos los valores de verdad sean verdaderos.

Conjunción: el valor de verdad resultante será true solo si todos los valores de verdad son verdaderos.

NegaciónDisyunción Conjunción

21/02/09http://eisc.univalle.edu.co/cursos/

Page 6: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Booleanos en scheme Podemos trabajar con datos de tipo booleano en

scheme.

Existen dos palabras reservadas (true y false) que nos permiten denotar verdadero y falso.

Existen los operadores de negación conjunción y disyunción. Se escriben así:

(and <booleano> <booleano>)

)

(or <booleano> <booleano>)

)

(not <booleano>)

)

<booleano> → true, false21/02/09http://eisc.univalle.edu.co/cursos/

Page 7: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Booleanos en scheme Para buscar más operaciones con booleanos puede

abrir la ayuda.

Ejercicio: qué resulta al ejecutar las siguientes instrucciones: (and true false)

(

(or true false)

(

(not false)

(

(boolean? (and true false))

(

(boolean? (* 2 1))

(

21/02/09http://eisc.univalle.edu.co/cursos/

Page 8: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Ejemplo

Resultados:

21/02/09http://eisc.univalle.edu.co/cursos/

Page 9: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Condiciones Una condición en scheme es una expresión que

puede tomar el valor de falso o verdadero: x = y: ``x es igual a y'' x < y: ``x es menor que y''�

x > y: ``x mayor que y'' Note que: <, >, <=, >=, son operadores que

siempre usamos con números, o con variables que denotan números.

Pero... estas operaciones no tienen como resultado un número, sino un valor de verdad (booleano)!!!

Para escribir condiciones en scheme podemos usar cualquier operación que de como resultado un booleano.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 10: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Ejemplos de condiciones: (= 4 5) (< 4 5) (> 4 5) (number? false)

(

(boolean? 67)

(

(boolean=? true false)

(

21/02/09http://eisc.univalle.edu.co/cursos/

Page 11: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Condiciones compuestas En ocasiones queremos escribir condiciones que

tienen varios aspectos en cuenta, por ejemplo: Si hoy es miércoles ó sábado y no hay bloqueo vamos a

clase de fundamentos.

Si su salario es mayor a 3 SM y menor que 7 SM entonces usted paga un impuesto del 4%.

Para escribir este tipo de condiciones usamos los operadores del álgebra booleana (and not y or)

o

(hoy = miércoles or hoy = sábado ) and (not bloqueo)

b

(salario > 3) and (salario < 7)

Los valores de verdad resultantes se obtienen aplicando las tablas de verdad

21/02/09http://eisc.univalle.edu.co/cursos/

Page 12: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Ejemplos de condiciones compuestas (or (= 4 5) (< 4 5) )

(

(define x 3)

(

(and (> x 0) (< x 5))

(

(or (= 4 5) (< 4 5) )

(

(define x 3)

(

(and (> x 0) (< x 5))

(

Ejercicio: cual es el resultado de: (and (> 4 3) (<= 10 100))

(

(or (> 4 3) (= 10 100))

(

(not (= 2 3)) 21/02/09http://eisc.univalle.edu.co/cursos/

Page 13: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales Problema: Desarrolle en scheme un programa que

calcule la nota definitiva de un estudiante en una materia dada. Las entradas son las notas del estudiante y el código de la materia. Las definitivas en las asignaturas se calculan así: cálculo : parcial 1 y 2: 30% quices 40%

Inglés: parcial 1: 50%, parcial 2: 20% quices: 30%

fundamentos: parcial 1: 25%, parcial 2: 45, quices: 30%

deporte: parcial 1: 70%, parcial 2 20%, quices: 10%

Aplicaremos la estrategia de diseño para solucionar este problema!! 21/02/09http://eisc.univalle.edu.co/cursos/

Page 14: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Entendiendo el problema:

contrato:

calcula_def : simbolo num num num -> numero

propósito:

;calcula la definitiva de una materia, el nombre de la materia es un simbolo, las notas son numeros

plantilla: (define (calcula_def materia n1 n2 n3) ....)

(

21/02/09http://eisc.univalle.edu.co/cursos/

Page 15: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Proponiendo ejemplos:

Ejemplos:

Si la materia es cálculo y las notas son 3 en primer

parcial, 2.8 el segundo y 4.5 quices el programa debe

retornar:

Si la materia es fundamentos y las notas son: 4.5 primer

parcial, 3.8 segundo y 4.2 quices, el programa debe

retornar:

Y si la materia fuera inglés o deporte con las notas

anteriores? 21/02/09http://eisc.univalle.edu.co/cursos/

Page 16: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales resolviendo los ejemplos anteriores encontramos

que: el programa debe retornar soluciones distintas,

dependiendo de la materia, aun cuando las entradas sean las mismas.

Pero ... ¿Cuál es la más adecuada?

¿Cuál es el dato importante?

¿Qué valores puede tomar y que debe hacer el programa en cada caso?

21/02/09http://eisc.univalle.edu.co/cursos/

Page 17: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales

Una expresión condicional se utiliza cuando existen varias alternativas para dar solución a un programa.

Dependiendo de alguna condición, el programa escoge una (solo una) alternativa y la sigue.

Para escribir las diferentes alternativas en una sola expresión en scheme usamos expresiones condicionales:

21/02/09http://eisc.univalle.edu.co/cursos/

Page 18: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales

Sintaxis (Forma 1)

S

(cond

[<condición 1> <respuesta 1>]

[<condición 2> <respuesta 2>]

:

[<condición n> <respuesta n>] )

]

<condición> → una condición simple o compuesta

<respuesta> → una expresión en scheme.21/02/09http://eisc.univalle.edu.co/cursos/

Page 19: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales

Sintaxis (Forma 2):

(cond

[<condición 1> <respuesta 1>]

:

[<condición n-1> <respuesta n-1>]

[else <respuesta n>] )

]

<condición> → una condición simple o compuesta

<respuesta> → una expresión en scheme.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 20: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales: ejemplos

Ejemplo 1:(cond [(< n 10) 5.0] [(< n 20) 5] [(< n 30) true])

[

Ejemplo 2:(cond [(<= n 1000) .040] [(<= n 5000) .045] [(<= n 10000) .055] [(> n 10000) .060])

[

(cond [(< n 10) 30 12] [(> n 25) false] [(> n 20) 0])

[

(cond [(<= n 1000) .040] [(<= n 5000) .045] [(<= n 10000) .055] [else .060])

[

21/02/09http://eisc.univalle.edu.co/cursos/

Page 21: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresiones condicionales:

cual es el valor de la expresión:(cond [(<= n 1000) .040] [(<= n 5000) .045] [(<= n 10000) .055] [(> n 10000) .060])

[

cuando n es (a) 500, (b) 2800, (c) 15000?

21/02/09http://eisc.univalle.edu.co/cursos/

Page 22: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Retomando el problema inicial... Problema: Desarrolle en scheme un programa que

calcule la nota definitiva de un estudiante en una materia dada. Las entradas son las notas del estudiante y el código de la materia. Las definitivas en las asignaturas se calculan así: cálculo : parcial 1 y 2: 30% quices 40%

Inglés: parcial 1: 50%, parcial 2: 20% quices: 30%

fundamentos: parcial 1: 25%, parcial 2: 45, quices: 30%

deporte: parcial 1: 70%, parcial 2 20%, quices: 10%

21/02/09http://eisc.univalle.edu.co/cursos/

Page 23: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Funciones con expresiones condicionales

contrato:

calcula_def : simbolo num num num -> numero

propósito:

;calcula la definitiva de una materia, el nombre de la materia es un simbolo, las notas son numeros

plantilla: (define (calcula_def materia n1 n2 n3) ....)

(

Para escribir una plantilla debemos primero saber cuantas condiciones necesitamos evaluar.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 24: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Proponiendo ejemplos:

Ejemplos:

Si la materia es cálculo y las notas son 3 en primer

parcial, 2.8 el segundo y 4.5 quices el programa debe

retornar:

Si la materia es fundamentos y las notas son: 4.5 primer

parcial, 3.8 segundo y 4.2 quices, el programa debe

retornar:

Y si la materia fuera inglés o deporte con las notas

anteriores? 21/02/09http://eisc.univalle.edu.co/cursos/

Page 25: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Análisis de datos ¿Cuantas alternativas tenemos?

¿Cual es el dato que cambia?

¿Cuales son los posibles valores que puede tomar?

¿Cual es la respuesta del programa en cada uno de los casos?

Esto se llama análisis de datos y es un nuevo paso de la estrategia de diseño.

Después de hacer el análisi de los datos puedo proponer una plantilla.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 26: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Funciones con condicionales

Plantilla para una función que tiene como cuerpo una expresión condicional con 4 clausulas:

(define (calcula_def mat n1 n2 n3)

(

(cond [<condicion 1> <respuesta 1>][<condicion 1> <respuesta 1>][<condicion 1> <respuesta 1>] [<condicion 1> <respuesta 1>] )

]

)

)

21/02/09http://eisc.univalle.edu.co/cursos/

Page 27: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Condicionales aplicados al ejemplo Retomemos las condiciones y alternativas:

Si se desea calcular la definitiva de cálculo :def= n1*0,3 + n2*0,3 + n3*0,4

Si se desea calcular la definitiva de Inglés: def= n1*0,5 + n2*0,2 + n3* 0,3

Si se desea calcular la definitiva de fundamentos: def= n1*0,25 + n2*0,45+ n3*0,3

Si se desea calcular la definitiva de deporte: def=n1*0,7 + n2*0,2 + n3*0,1

21/02/09http://eisc.univalle.edu.co/cursos/

Page 28: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Condiciones

Escribimos las condiciones en scheme:1. Si se desea calcular la definitiva de inglés,

(symbol=? mat 'ingles)

– Si se desea calcular la definitiva de fundamentos (symbol=? mat 'fund)

– Si se desea calcular la definitiva de deportes, (symbol=? mat 'deportes)

– Si se desea calcular la definitiva de cálculo, (symbol=? mat 'calculo)

21/02/09http://eisc.univalle.edu.co/cursos/

Page 29: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Alternativas

Escribimos las respuestas en scheme: def= n1*0,3 + n2*0,3 + n3*0,4 def= n1*0,5 + n2*0,2 + n3* 0,3 def= n1*0,25 + n2*0,45+ n3*0,3 def=n1*0,7 + n2*0,2 + n3*0,1

21/02/09http://eisc.univalle.edu.co/cursos/

Page 30: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Expresión condicional

Ahora ponemos las condiciones y las respuestas en la plantilla del programa:

(cond

[ (symbol=? materia 'ingles) ...]

[ (symbol=? materia 'fund) ...]

[ (symbol=? materia 'deportes) ... ]

[ (symbol=? materia 'calculo) ...] )

]

Y luego reemplazamos los ... por las respuestas

21/02/09http://eisc.univalle.edu.co/cursos/

Page 31: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

¿Y la estrategia de diseño?

En todo momento la hemos usado!

Para “atacar” problemas en donde hay condicionales debemos analizar el enunciado con el fin de encontrar las diferentes condiciones y alternativas. lo hicimos al principio!!!

Este paso se llama el análisis de los datos.

El análisis de los datos se hace mientras se entiende el problema, antes de los ejemplos y nos ayuda a refinar la plantilla. (Agregamos a la plantilla inicial la expresión condicional de la diap. anterior)

e

21/02/09http://eisc.univalle.edu.co/cursos/

Page 32: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Estrategia de diseño con expresiones condicionales

Entender el propósito del problema

Analizar los datos: � encontrar las distintas condiciones.

Escribir ejemplos: al menos uno por cada condición.

Escribir el programa: condicional con preguntas y respuestas

Realizar pruebas

21/02/09http://eisc.univalle.edu.co/cursos/

Page 33: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Hasta ahora nuestro programa va:

calcula_def: symbol numero numero numero->numero

propósito: calcula la definitiva de una materia, el nombre de la materia es una entrada

análisis de datos: ver diapo 18, 19 y 20

plantilla:

(define (calcula_def mat n1 n2 n3)

(

(cond

[ (symbol=? materia 'ingles) ...]

[ (symbol=? materia 'fund) ...]

[ (symbol=? materia 'deportes) ... ]

[ (symbol=? materia 'calculo) ...] ) )

]

21/02/09http://eisc.univalle.edu.co/cursos/

Page 34: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Ejercicio en clase

En parejas, y siguiendo los pasos de la estrategia de diseño que faltan, termine el programa de la diapositiva anterior.

21/02/09http://eisc.univalle.edu.co/cursos/

Page 35: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

Resumen de scheme

El día de hoy incluimos una nueva expresión a nuestro lenguaje: condicionales.

Esto quiere decir que de ahora en adelante el cuerpo de un programa puede ser una expresión numérica o un condicional.

También se añadimos un nuevo tipo de datos: símbolos (symbol en inglés) un símbolo es una secuencia de caracteres precedidos por ' (comilla simple)

s

21/02/09http://eisc.univalle.edu.co/cursos/

Page 36: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

gramática de scheme

programa → (define <encabezado> <cuerpo>)

p

variable → (define <nombre> <expresión>)

v

encabezado → <nombre> <parámetros> <cuerpo> → expresión <expresión> → número| símbolo | operación

con números | condicional | llamado a un programa

21/02/09http://eisc.univalle.edu.co/cursos/

Page 37: Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos: 1.Booleanos, álgebra booleana. 2.condiciones simples y compuestas. –Expresiones condicionales

21/02/09http://eisc.univalle.edu.co/cursos/