fundamentos de programación clase 3: booleanos ... · contenido en la clase de hoy veremos:...
TRANSCRIPT
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
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/
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/
Á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/
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/
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/
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/
Ejemplo
Resultados:
21/02/09http://eisc.univalle.edu.co/cursos/
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/
Ejemplos de condiciones: (= 4 5) (< 4 5) (> 4 5) (number? false)
(
(boolean? 67)
(
(boolean=? true false)
(
21/02/09http://eisc.univalle.edu.co/cursos/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
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/
¿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/
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/
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/
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/
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/
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/
21/02/09http://eisc.univalle.edu.co/cursos/