Fundamentos de programación clase 3: Booleanos ... · Contenido En la clase de hoy veremos:...

Preview:

Citation preview

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 jaerma@eisc.univalle.edu.co

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/

Recommended