SlideShare una empresa de Scribd logo
Escuela de Ingeniería y Sistemas de ComputaciónClase 1
Fundamentos de Programación
Nombre: Esteban Andrés Díaz Mina
Ingeniero de Sistemas (UV)
Especialista en Redes de Comunicación (UV)
Magister en E-Learning (UNAB-UOC)
E-mail : esteban.diaz@correounivalle.edu.co
Fundamentos de Programación
Diseño de programas desde la especificación hasta
la implementación.
Usar buenas practicas de programación como
Principios básico del Desarrollo de Software
Fundamentos de Programación
Las clases se dictan con videobeam y/o en la sala de
computo.
Se promoverá la participación activa de los estudiantes
mediante actividades en clase.
Para el diseño de programas se usan dos innovaciones
Pedagógicas:
unas guías de diseño que orientan al estudiante en todo el
proceso y un ambiente de programación para principiantes,
que se adapta a medida que los usuarios se van volviendo
expertos.
Fundamentos de Programación
Fundamentos de Programación
Actividad Porcentaje
Talleres en Clase, Quices, Participación 30%
Examen Parcial 25%
Examen Final 45%
http://www.racket-lang.org/
Fundamentos de Programación
How to Design Programs
Matthias Felleisen
Robert Bruce Findler
Matthew Flatt
Shriram Krishnamurthi
Disponible en:
http://www.htdp.org
Fundamentos de Programación
En este curso se debe usar el Entorno de Desarrollo
Integrado DrRacket para la definición de las funciones.
Fundamentos de Programación
Ventana
de definición
Ventana
de interacción
Fundamentos de Programación
Funcional.
Relativamente pequeño. (Versión 6.11 – 76 MB)
Fácil de aprender.
Programas usualmente son más cortos.
Utilizado para enseñar programación.
Fundamentos de Programación
Racket puede ejecutar una línea de código tan
pronto como se escribe en la ventana de
interacción.
> (+ 17 8)
25
Fundamentos de Programación
Suponga que queremos hallar la solución de la
siguiente expresión:
3 + 2 * 7
Parece fácil, sin embargo, se puede dar más de
una interpretación. ¿Cuáles?
Fundamentos de Programación
Se pueden pensar que la expresión se reduce a
“5 * 7” o a “3 + 14” dependiendo de que
operación se realice primero. Lo cual puede
ocasionar ambigüedad.
3 + 2 * 7
¿Cómo se puede evitar este tipo de error?
Fundamentos de Programación
Evaluación Sencilla
Se pueden adicionar paréntesis para delimitar parte
de la expresión.
(3 + (2 * 7))
Por medio de lo anterior, obtenemos total claridad.
Se aprecia que primero se debe multiplicar 2 y 7;
luego a este resultado sumarle 3.
Fundamentos de Programación
Notación Prefija
Racket usa notación prefija, en este tipo de evaluación
se invoca primero el operador, seguido por los
argumentos.
( <operador> <argumentos> )
Ejemplos:
(+ 5 3)
(* 4 6)
(* 7 (- 6 5))
(* 2 3 5)
Fundamentos de Programación
Usando el Stepper
DrRacket incluye una herramienta que presenta paso a
paso la evaluación de una expresión.
El Paso a Paso muestra el orden de evaluación de las
expresiones.
Ejemplo:
(/ (+ 2 7) (/ (* 6 4) (- 12 4) ))
Fundamentos de Programación
Scheme
 Enteros 9, -5, 0, -48
 Números Reales 3.14159, 2.78
 Fraccionarios 1/2, 5/3
 Símbolos x, y, pi, radio
a menudo son usados para los nombres de:
Una función
Un parámetro
Una variable
Fundamentos de Programación
Scheme
Hay alrededor de 100 símbolos predefinidos en Racket,
incluyendo operadores aritméticos:
Símbolo Nombre
+ Adición
- Sustracción
* Multiplicación
/ División
Fundamentos de Programación
Primer Ejemplo
Suponga que queremos usar la función predefinida
“sqrt”, la cual retorna la raíz cuadrada de su parámetro.
Por ejemplo, se puede escribir lo siguiente en Racket:
(sqrt 121)
Fundamentos de Programación
Primer Ejemplo
Igualmente se puede escribir:
(sqrt 2)
Sin embargo, el resultado que se aprecia es:
#i1.4142135623730951
¿Qué significa “#i”?
Esta es una forma en la que Racket indica la
aproximación en un cálculo.
Fundamentos de Programación
Se ofrecen numerosas funciones de uso común:
– (sqrt A) →
– (expt A B) →
– (exp A) →
– (modulo A B) → residuo de la división entera A/B
A
B
A
A
e
Fundamentos de Programación
Considere:
Parámetros
de la función
Nombre de
la función
Cuerpo de
la función
Asocia el cuerpo al
nombre y parámetros
Fundamentos de Programación
f(x) = x * x
Vocabulario (Funciones)
Predecible, reproducible.
Cada vez que se aplica a la función el mismo
parámetro, se obtiene el mismo resultado.
Si f(x)= x * x * x f(2) = 8.
Nada cambia en los parámetros.
Cada vez que se llama una función, no se
modifica el valor del parámetro. Es decir “La
función no altera nada en el mundo.”
Si f(x)= x * x * x f(2) = 8. El 2 no se modifica.
Fundamentos de Programación
Composición
Se pueden realizar composición de múltiples
funciones.
Por ejemplo: f(x)= x * x * x g(x) = x+5
Calcular el resultado de: g(f(2))
El llamado interno f(2), retorna 8; así que el llamado
externo g(8), retorna 13.
g(f(2))  g(8)  13
Fundamentos de Programación
Funciones en Scheme
Consideremos nuevamente la función f(x) = x * x
Se empieza por asignar un nombre apropiado a la
función:
(define (cuadrado x)
Se continúa adicionando el cuerpo correspondiente
(define (cuadrado x)
(* x x)
)
Fundamentos de Programación
Funciones en Scheme
(define (cuadrado x)
(* x x)
)
Posteriormente, se prueba la función
(cuadrado 7) (cuadrado 10)
49 100
Fundamentos de Programación
Funciones en Scheme
; Genera el cuadrado de un número
(define (cuadrado x)
(* x x ))
; Genera la suma de cuadrados
(define (sumaCuadrados x y)
(+ (cuadrado x) (cuadrado y)))
Fundamentos de Programación
Funciones en Scheme
Formule las siguientes funciones matemáticas
como una función en Racket:
Fundamentos de Programación
Escuela de Ingeniería y Sistemas de ComputaciónClase 2
Fundamentos de Programación
Aunque para el interprete no tenga relevancia el estilo;
como una buena practica de programación, nosotros
siempre lo mantendremos!
Considerando el buen estilo, se usarán identaciones y
se mantendrá en el mejor formato las definiciones de
las funciones.
Fundamentos de Programación
Fundamentos de Programación
Buen estilo de Definición de Función
(define (hipotenusa lado1 lado2)
(sqrt (+
(* lado1 lado1)
(* lado2 lado2))))
Lo anterior es opuesto a:
(define (hipotenusa lado1 lado2) (sqrt (+ (* lado1 lado1) (* lado2 lado2))))
Fundamentos de Programación
(define (hipotenusa lado1 lado2)
(sqrt (+
(* lado1 lado 1)
(* lado2 lado 2))))
(define (hipotenusa lado1 lado2)
(sqrt (+
(cuadrado lado1)
(cuadrado lado2))))
Fundamentos de Programación
Algunas constantes comunes como e y  tienen
nombres predefindos en DrRacket
e equivale a #i2.718281828459045
pi equivale a #i3.141592653589793
Otras constantes como velocidad_maxima pueden ser
definidas en DrRacket:
(define velocidad_maxima 60)
Fundamentos de Programación
Definición de la función que calcula el área de un Circulo
(define (areaCirculo radio)
(* pi (* radio radio)))
Posteriormente ejecutamos la función, suministrando
todos los valores necesarios para las variables.
(areaCirculo 10)  #i314.1592653589793
Fundamentos de Programación
Errores de Sintaxis
Comparable a los errores gramaticales en los lenguajes
naturales.
DrRacket verifica que todo el código este correctamente
organizado de acuerdo a las reglas.
Errores en Tiempo de Ejecución
Dividir por cero, por ejemplo.
Número incorrecto de parámetros cuando se intenta ejecutar
la función.
( Error Semántico)
Fundamentos de Programación
Errores Lógicos
La “gramática” está correcta, pero la solución no
es apropiada para el problema.
Por ejemplo, se solicita una función que determine
el cuadrado de un número y se realiza una función
que determina la raíz cuadrada de un número.
Fundamentos de Programación
(* (8) 2)
(2 * 4)
(/ * 3 5)
(/ 3 0)
(define (func2 a) (+ b 2))
(define func1 (a) (+ a 2))
(define (func3 1) (+ a 2))
Fundamentos de Programación
Una fábrica produce gorros en forma de cilindro. El
administrador de la empresa requiere saber cuánto
material es requerido para la elaboración de los
gorros.
Fundamentos de Programación
Área total del cilindro:
Donde,
r: radio de la base
h: la altura del cono
)(2 hrr 
El Dodecaedro es un poliedro formado por doce caras
pentagonales.
El área y el volumen de este poliedro se puede calcular
con las siguientes formulas:
Donde a es la longitud de una de las aristas.
)525(53 2
 aA
4
)5715(3


a
V
Fundamentos de Programación
a. Escriba una función para calcular el área del dodecaedro.
b. Escriba una función para calcular el volumen del dodecaedro.
Lengua Extranjera
Gramática
Vocabulario
Frases, Sentencias
Conversación
Lenguaje de Computadora
Sintaxis
Palabras Reservadas
Abstracción
Solución de Problemas
Empieza a … desde el primer día
Fundamentos de Programación
Guía para programar.
Desarrollar Programas:
Bien Documentados
Organizados y de
Alta Calidad
Fundamentos de Programación
Aplicar la función a las entradas de los ejemplos
Verificar que las salidas esperadas correspondan
con las obtenidas.
Descubrir los errores
Pruebas
Formular cómo la función calcula su resultado.
Desarrollar una expresión en Racket que use
primitivas, otras funciones y las variables.
Transformar las expresiones matemáticas asociadas
al problema, cuando estén disponibles
Definir la funciónCuerpo
Buscar ejemplos asociados al problema.
Crear ejemplos.
Validar los resultados, si es posible.
Caracterizar la relación
entrada-salida por medio de
ejemplos
Ejemplo
Escoger un nombre que se ajuste al problema.
Estudiar el problema y determinar los datos de
entrada que requiere la función.
Asociar una variable por entrada.
Describir que debería producir la función a partir
de las variables
Formular el contrato y la cabecera así:
;; nombre: numero_1 …  numero_2
;; Calcular numero_2 desde numero_1 …
(define (nombre x1 …)…)
Describir el propósito de la
función.
Dar el nombre a la función.
Especificar la naturaleza de
los datos de entrada y de
salida;
Formular la cabecera
Propósito
Contrato
Cabecera
ActividadObjetivoFase
;;Propósito:
;;Una breve descripción del problema.
;;Contrato:
;;<nombre> : <tipos de variable>  <tipos de variable>
;;Ejemplo:
;; <ejemplo de qué se quiere colocar>
;; debe producir <ejemplo de que debería ocurrir>
;;Definición
;;<aquí se coloca el código>
;;Pruebas
;;<aquí se colocan las pruebas>
Fundamentos de Programación
;; Nombre: Luís Ramírez
;; Código: 201812345
;; Taller 1- Ejercicio 3.
Diseño del Programa:
;; Propósito: Una breve descripción del problema.
;; Contrato: <nombre> : <tipos de variable> -> <tipos de variable>
;; Ejemplo: <ejemplo de qué se quiere colocar>
debe producir <ejemplo de que debería ocurrir>
;; Definición <aquí se coloca el código>
;; Pruebas <aquí se colocan las pruebas>
Fundamentos de Programación
Escriba la receta de diseño para una función que
calcule el área de un círculo.
Fundamentos de Programación
;; Calcular el área de un círculo a partir del radio.
Fundamentos de Programación
;; Contrato: areaCirculo : número -> número
Fundamentos de Programación
;; Cabecera
(define (areaCirculo radio)
…
)
Fundamentos de Programación
;; Ejemplo: (areaCirculo 5) debe producir 78.539
;; (areaCirculo 1) debe producir 3.1415
También puede ser:
;;Ejemplo: (areaCirculo 5) 78.539
;; (areaCirculo 1) 3.1415
Fundamentos de Programación
;; Definición
(define (areaCirculo radio)
(* 3.1415 (* radio radio))
)
Fundamentos de Programación
;; Pruebas:
(areaCirculo 5) ;; se espera 78.539
(areaCirculo 1) ;; se espera 3.1415
Fundamentos de Programación
¿Es importante seguir estos pasos?
SI!
Fundamentos de Programación
La fuerza de atracción entre dos masas m1 y m2,
separadas por una distancia d, está dada por la formula:
Donde G es la constante de gravitación universal:
2
21 )**(
d
mmG
F 
8
10*673.6 
G
Fundamentos de Programación
Escriba la receta de diseño para un programa que obtenga
la fuerza Gravitacional a partir de las masas de los dos
cuerpos y la distancia entre ellas.
Escuela de Ingeniería y Sistemas de ComputaciónClase 3
Fundamentos de Programación
En los programas no solamente se permiten representar
funciones matemáticas, como las vistas hasta ahora.
Al programar también se permite controlar la
realización de un cálculo si se cumplen o no ciertas
condiciones.
El manejo de condiciones dota de un gran poder
expresivo a los lenguajes de programación, y por lo
tanto permiten construir programas más complejos.
Fundamentos de Programación
Ejemplos:
¿El número de estudiantes matriculados en el curso
750080M es superior a 40?
¿El avión tiene suficiente combustible para llegar al
aeropuerto de Santiago de Cali?
¿El estudiante con código 201634567 aprobó más de la
mitad de los créditos?
Fundamentos de Programación
Un booleano es un tipo de dato fundamental para
el manejo de las condiciones.
Los Booleanos representan los valores de verdad
true y false
Fundamentos de Programación
Las funciones que permiten determinar la
satisfacción o no de cierta propiedad en un conjunto
de valores se conocen como Predicados.
Fundamentos de Programación
Los predicados tienen las siguientes propiedades:
1. Producen un valor de verdad; en DrRacket
true o false.
2. Los nombres generalmente finalizan con el
carácter ? (los predicados propios de DrRacket
tienen esta característica).
Fundamentos de Programación
(number? <valor>)
Determina si <valor> es o no es un número.
(odd? <valor>)
Retorna true si <valor> es un número impar, en caso
contrario retorna false.
(even? <valor>)
Retorna true si <valor> es un número par, en caso
contrario retorna false.
Fundamentos de Programación
integer? : (any -> bool)
negative? : (number -> bool)
positive? : (number -> bool)
real? : (any -> bool)
boolean? : (any -> boolean)
boolean=? : (boolean boolean -> boolean)
Fundamentos de Programación
;; Determina si la edad de una persona corresponde a
;; la de un menor de edad.
(define (es-menor? edad)
(< edad 18))
Fundamentos de Programación
Pregunta
¿Cómo se pueden usar los predicados para tomar
decisiones?
Respuesta
Se utilizarán en enunciados o instrucciones
condicionales.
Fundamentos de Programación
Los enunciados condicionales se pueden construir
por medio de la función predefinida en Scheme,
cond.
Su sintaxis o formato es el siguiente:
(cond (cond
[ pregunta1 respuesta1 ] [ pregunta1 respuesta1 ]
[ pregunta2 respuesta2 ] [ pregunta2 respuesta2 ]
… …
[ preguntan respuestan ] ) [ else respuestan ] )
Fundamentos de Programación
Interrogante
“Qué significa [pregunta respuesta]?”
Solución
“pregunta” es donde se especifica la condición que se
puede cumplir; para ello, se pueden usar predicados, o
en general expresiones condicionales.
“respuesta” indica que debe ocurrir cuando “pregunta” es
verdadera, es decir, su valor es true.
Fundamentos de Programación
Pregunta: ¿Cuantas pregunta-respuesta se pueden manejar en un cond?
Respuesta: Tantas como necesite.
Pregunta: ¿ Qué significa else?
Respuesta: else permite manejar aquellos datos que no se han satisfecho
por ninguna de las condiciones anteriores, la respuesta
asociada, es la respuesta para todos estos casos.
Pregunta: ¿La receta de diseño es diferente al manejar programas
con condiciones ?”
Respuesta: Sí.
Fundamentos de Programación
< Menor
> Mayor
= Igual
<= Menor o Igual
>= Mayor o Igual
Fundamentos de Programación
Fundamentos de Programación
Expresión
Matemática
Expresión
DrRacket
Resultado
X = Y 14 = 15
10 = 10
(= 14 15)
(= 10 10)
false
true
X < Y 5 < 5
5 < 6
(< 5 5)
(< 5 6)
false
true
X > Y 4 > 12
12 > 4
(> 4 12)
(> 12 4)
false
true
Al referirnos a ciertas situaciones, en ocasiones,
involucramos varias condiciones, estas se relacionan por
medio del conectivo y (AND) y el conectivo o (OR).
Ejemplos:
Si apruebo FDP y Matemáticas podré matricular MDI.
Si hoy es Martes o Miércoles entonces tengo clases de
Lectura de Textos Académicos en Ingles.
Fundamentos de Programación
En ocasiones, también requerimos expresar la negación de
un acontecimiento como parte de una condición:
Si un número entero positivo no es Primo entonces es
Compuesto.
Si la nota final de Juan Parra en el curso de Matemáticas
no está entre 2.0 y 2.95, entonces no puede habilitar.
Fundamentos de Programación
(and (>= nota 3.0) (<= nota 5.0))
(or (>= x 60) (< y 30))
(not (= edad 20))
¿La variable nota está 3.0 y 5.0?
¿El valor de x es mayor o igual que 60, o el valor de y es
menor que 30?
¿La edad es diferente a 20?
Fundamentos de Programación
En ocasiones no es necesario evaluar las expresiones
lógicas en su totalidad; se usa de manera inteligente la
semántica del “AND” y del “OR” mediante la
evaluación en corto circuito.
Fundamentos de Programación
(and (> 5 2) (< 2 5) (= 2 5))
(and (= 2 5) (> 5 2) (< 2 5))
(or (> 3 9) (< 9 3) (= 3 3))
(or (> 6 3) (< 3 6) (= 3 3))
Fundamentos de Programación
Suponga que se dispone de una función que
determina el precio unitario de venta de DVD’s, el
precio se calcula dependiendo de la cantidad de
artículos que compre el cliente:
 Entre 1 y 5  $250.000 cada uno.
 Entre 6 y 10  $220.000 cada uno.
 Más de 10  $200.000 cada uno.
Fundamentos de Programación
Corresponde a la primera etapa del proceso de diseño de Programas.
En esta fase se indica que conocemos de los datos que la función requiere.
Análisis y Definiciones de Datos:
Si se compran entre 1 y 5, el precio por unidad es de 250.000
Si se compran entre 6 y 10, el precio por unidad es de 220.000
Si se compran más de 10, el precio por unidad es de 200.000
Fundamentos de Programación
Se ofrece una pequeña descripción de los datos que se
están usando.
Se aprecia que el precio por unidad varía según la
cantidad de DVD’s a comprar.
La respuesta es un número!
Fundamentos de Programación
Determinar el precio por unidad a partir de la
cantidad de DVDs que un cliente desee comprar .
Fundamentos de Programación
La anterior fase, nos ofrece suficiente información
para poder establecer el contrato.
;; Contrato: precioUnidad : número --> número
La función recibe una cantidad, y produce el
precio por unidad.
Fundamentos de Programación
(define (precioUnidad cantidad) …)
Fundamentos de Programación
;; (precioUnidad 1) debe retornar 250.000
;; (precioUnidad 3) debe retornar 250.000
;; (precioUnidad 8) debe retornar 220.000
;; (precioUnidad 10) debe retornar 220.000
;; (precioUnidad 11) debe retornar 200.000
Se debe diseñar por lo menos ejemplo por cada
condición:
Fundamentos de Programación
¿Qué hacer con la cantidad igual a 0?
Esta entrada no se adapta al problema.
Fundamentos de Programación
La definición se basa en el análisis de datos.
;; Definición
(define (precioUnidad cantidad)
(cond
[ . . . ? . . . ]
[ . . . ? . . . ]
)
)
Pregunta: ¿Cuántas condiciones se necesitan?
Respuesta: Observemos el análisis y definición de datos!
Fundamentos de Programación
;;Definición
(define (precioUnidad cantidad)
(cond
[(<= cantidad 5) … ]
[(and (>= cantidad 6)(<= cantidad 10)) … ]
[(> cantidad 10) … ]
)
)
Se aprecia que se manejaron tres casos.
Se debe ser cuidadoso al cubrir el rango de posibilidades.
Fundamentos de Programación
;; Definición
(define (precioUnidad cantidad)
(cond
[(<= cantidad 5) 250000]
[(and (>= cantidad 6)(<= cantidad 10)) 220000]
[(> cantidad 10) 200000 ]
)
)
Fundamentos de Programación
;; Definición
(define (precioUnidad cantidad)
(cond
[(<= cantidad 0) “Error, Entrada NO válida”]
[(<= cantidad 5) 250000]
[(and (>= cantidad 6)(<= cantidad 10)) 220000]
[(> cantidad 10) 200000 ]
)
)
Fundamentos de Programación
Se deben manejar pruebas por cada ejemplo:
> (precioUnidad 1)
;; debe producir 250000
> (precioUnidad 3)
;; debe producir 250000
> (precioUnidad 8)
;; debe producir 220000
> (precioUnidad 12)
;; debe producir 200000
Fundamentos de Programación
;; Pruebas
> (= (precioUnidad 3) 250000)
> (= (precioUnidad 8) 220000)
> (= (precioUnidad 12) 200000)
Con este estilo de pruebas se puede observar si
cada una de las pruebas fue exitosa; cada una de
ellas debe responder “true”.
Fundamentos de Programación
Un símbolo es una secuencia de caracteres que por sí
mismos no tienen significado.
Los programas y los usuarios lo dotan de significado.
Hemos visto que símbolos como sqrt y + tienen un
significado predefinido.
Fundamentos de Programación
Otros símbolos como hipotenusa y cuadrado se han
definido y tienen asociado el nombre de una función.
Sin embargo, algunos símbolos son sólo símbolos sin
significado adicional. En este caso, para que Racket no
trate de asignarle significado, se precede el símbolo
con una Comilla Simple ( ‘ ).
Fundamentos de Programación
Predicados para Symbol
symbol=? : (symbol symbol -> boolean)
symbol? : (any -> boolean)
> (symbol=? ‘one ‘one) > (symbol=? ‘one ‘two)
true false
> (symbol? ‘UV) > (symbol? 45)
true false
Fundamentos de Programación
Como ocurre con los números, los símbolos pueden ser
retornados desde las funciones que diseñamos. Igualmente
podemos pasar símbolos a una función.
(define (diaSemana numerodia )
(cond
[ (= numerodia 1) ‘Domingo ]
[ (= numerodia 2) ‘Lunes ]
[ (= numerodia 3) ‘Martes ]
[ (= numerodia 4) ‘Miércoles ]
[ (= numerodia 5) ‘Jueves ]
[ (= numerodia 6) ‘Viernes ]
[ (= numerodia 7) ‘Sábado ]
)
) ¿ Cuál es el contrato de la función?
Fundamentos de Programación
Se requiere una función, a la cual se le ingrese el día de la
semana y retorne el número que le corresponde.
¿ Cuál es el contrato de la función?
Fundamentos de Programación
(define (diaSemana dia )
(cond
[ (symbol=? 'Domingo dia) 1 ]
[ (symbol=? 'Lunes dia) 2 ]
[ (symbol=? 'Martes dia) 3 ]
[ (symbol=? 'Miércoles dia) 4 ]
[ (symbol=? 'Jueves dia) 5 ]
[ (symbol=? 'Viernes dia) 6 ]
[ (symbol=? 'Sábado dia) 7 ]
[else "El dia está errado“ ]
)
)
Fundamentos de Programación
En DrRacket, se pueden definir piezas de datos
compuestos llamadas Strings.
Los Strings no son atómicos como los símbolos; ellos se
pueden descomponer en muchas partes.
“Esta es una cadena de caracteres”
(define nombre “Anyali Ruiz”)
Fundamentos de Programación
Predicados para String
string=? : (string string ... -> boolean)
string? : (any -> boolean)
Fundamentos de Programación
Escriba la Receta de Diseño para una función que
determine si un año es bisiesto.
Un año es bisiesto si es múltiplo de 4:
(por ejemplo 1984).
Sin embargo, los años múltiplos de 100 sólo son
bisiestos cuando a la vez son múltiplos de 400:
(por ejemplo, 1000 no fue bisiesto,
mientras que 2400 sí lo será).
Fundamentos de Programación
Escriba la Receta de Diseño para un programa que
reciba un argumento real y que devuelva
“EL NUMERO ES POSITIVO”, si el número es
positivo; “EL NUMERO ES NEGATIVO” si es
negativo o ‘CERO, si es cero.
Utilice los predicados:
real? negative? positive?.
Fundamentos de Programación
Desarrollar una función (llamada impuesto) que
calcula el impuesto a partir del pago bruto (sin
descuentos). Por un pago de $240 o menos el impuesto
es del 0% , por un pago de más de $240 hasta de $480
el impuesto es del 15% por un pago de más de $480 el
impuesto es del 28%.
Fundamentos de Programación
Desarrollar una función (llamada pago-neto) que
determine el pago neto de un empleado a partir del
número de horas trabajadas (valor-hora es $12).
El pago neto es igual al pago bruto (sin descuentos)
menos el impuesto.
Fundamentos de Programación
;; Propósito: Calcular el valor correspondiente
;; al impuesto a partir del pago bruto.
;; Contrato: impuesto: numero -> numero
;; Cabecera: (define ( impuesto pago-bruto )...)
Fundamentos de Programación
;; (impuesto 220) debe producir 0
;; (impuesto 250) debe producir 37.5
;; (impuesto 500) debe producir 140.0
Fundamentos de Programación
;;(define (impuesto pago-bruto)
;; (cond
;; [(<= pago-bruto 0) “Error”]
;; [(<= pago-bruto 240) ... ]
;; [(<= pago-bruto 480) ... ]
;; [(> pago-bruto 480) ... ]
)
)
Fundamentos de Programación
(define (impuesto pago-bruto)
(cond
[(<= pago-bruto 0) “Error”]
[(<= pago-bruto 240) 0 ]
[(<= pago-bruto 480) (* 0.15 pago-bruto)]
[(> pago-bruto 480) (* 0.28 pago-bruto)]
)
)
Fundamentos de Programación
;; Contrato: pago-neto: numero -> numero
;; Propósito: Calcular el pago-neto
;; (con descuento ) a partir del número de
;; horas trabajadas
;; Cabecera:
;; (define ( pago-neto horas-trabajadas )...)
Fundamentos de Programación
;; (pago-neto 10) debe producir 120
;; (pago-neto 30) debe producir 306
;; (pago-neto 50) debe producir 460
Fundamentos de Programación
;; definición de variables
(define VALOR-HORA 12)
(define (pago-neto horas-trabajadas)
(- ( * VALOR-HORA horas-trabajadas)
(impuesto ( * VALOR-HORA horas-trabajadas))
)
)
Fundamentos de Programación
;; Pruebas función pago-neto
(pago-neto 10) ;; debe producir 120
(pago-neto 30) ;; debe producir 306
(pago-neto 50) ;; debe producir 432
Fundamentos de Programación
Escriba un programa que permita calcular la nota
final de un estudiante del curso Fundamentos de
Programación que consta de 3 notas entre 1.0 - 5.0,
la primera nota vale 24%, la segunda 34% y la
tercera 42%. La nota final se obtiene de acuerdo a la
siguiente tabla:
Nota Nota Final
[3.0 – 5.0] Gana
[1.0 – 3.0) Pierde
Fundamentos de Programación
(define (promedio a b c)
(+ (* a 0.24)(* b 0.34) (* c 0.42)))
(define (nota a b c)
(cond
[(>= (promedio a b c) 3.0)"Gana"]
[else "Pierde"]))
Fundamentos de Programación
(define (nota-f a b c)
(cond
[(and (>= a 1) (<= a 5) (>= b 1) (<= b 5)
(>= c 1) (<= c 5)) (nota a b c)]
[else "Error, alguna de las notas están
fuera de rango"]))
Fundamentos de Programación
>(nota-f 5.0 1.5 5.1)
;"Error, alguna de las notas están fuera de rango”.
>(nota-f 2.3 1.5 3.2)
;"Pierde“
>(nota-f 5.0 1.5 5.0)
;"Gana"
Fundamentos de Programación
Realice en DrRacket una función llamada
nota_Asignatura que permita a un profesor
obtener la nota final de un estudiante, dadas las
notas correspondiente a los talleres y los exámenes.
La evaluación del curso se hará teniendo en cuenta
la siguiente tabla:
Talleres 30%
Primer Parcial 30%
Examen Final 40%
Fundamentos de Programación
(define (notaAsig t p f)
(+ (* t 0.4) (* p 0.3) (* f 0.3)))
Fundamentos de Programación
Defina una nueva función asignaturas que tiene
como parámetros de entrada además de las nota
obtenidas, un código de la asignatura con el fin de
calcular la nota de la asignatura deseada, teniendo
en cuenta la sgte tabla:
Código Talleres Primer Parcial Examen Final
750081M 30% 30% 40%
750082M 10% 40% 50%
750083M 20% 30% 50%
750084M 40% 30% 30%
Fundamentos de Programación
(define (notaAsig81 t p f)
(+ (* t 0.3) (* p 0.3) (* f 0.4)))
(define (notaAsig82 t p f)
(+ (* t 0.1) (* p 0.4) (* f 0.5)))
(define (notaAsig83 t p f)
(+ (* t 0.2) (* p 0.3) (* f 0.5)))
(define (notaAsig84 t p f)
(+ (* t 0.4) (* p 0.3) (* e 0.3)))
Fundamentos de Programación
(define (Asignatura1 cod t p f)
(cond
[(symbol=? cod '750081M)(notaAsig81 t p f)]
[(symbol=? cod '750082M)(notaAsig82 t p f)]
[(symbol=? cod '750083M)(notaAsig83 t p f)]
[(symbol=? cod '750084M)(notaAsig84 t p f)]
[else "El código No se encuentra"]
)
)
Fundamentos de Programación
(define (Asignatura cod t p f)
(cond
[(not(symbol? cod)) "El Código debe ser un symbol"]
[ (or
(< t 1.0) (> t 5.0)
(< p 1.0) (> p 5.0)
(< f 1.0) (> f 5.0))
"Alguna de las notas esta fuera del rango
permitido"]
[else (Asignatura1 cod t p f)]))
Fundamentos de Programación
(Asignatura '750084N 3 4 5)
(Asignatura '750084M 3 4 5)
(Asignatura '750084M 5.1 4 5)
Fundamentos de Programación
Fundamentos de Programación
Universidad del Valle – Sede PacíficoClase 4
Una estructura es usada para agrupar datos que
mantienen una fuerte relación.
Esto corresponde a una unidad que se puede
manipular por diferentes funciones sin perdida
del significado de sus datos.
Fundamentos de Programación
Persona
Nombre, Apellido, edad, e-mail.
Universidad
Nombre, Ciudad, Año Fundación, Rector
CD
Artista, Género, Número de canciones.
Fundamentos de Programación
La Secretaría Académica de la Universidad requiere tener
información de los estudiantes que permita: enviar cartas,
generar y enviar recibos de pago considerando los
estímulos académicos.
La información que se podría almacenar es:
Nombre del estudiante Apellido del estudiante
Dirección Valor de la Matricula
Puesto Programa Académico
Fundamentos de Programación
(define-struct <nombre de la estructura>
(<nombre del primer campo>
<nombre del segundo campo>
…
<nombre del último campo>
)
)
Fundamentos de Programación
(define-struct estudiante (nombre apellido dirección
valorMatricula puesto programa))
Ahora tenemos la posibilidad de almacenar información
del estudiante usando la estructura estudiante.
ACLARACIÓN:
NO hemos almacenado información acerca de algún estudiante
en particular. Sólo se ha creado un tipo de estructura de datos
que describe la información que se puede almacenar de cada
estudiante.
Fundamentos de Programación
Considere la definición de estructura estudiante:
(define-struct estudiante (nombre apellido direccion
valorMatricula puesto programa))
La anterior definición permite utilizar las siguientes
funciones, creadas por DrRacket:
CONSTRUCTOR:
(make-estudiante <nom> <ape><dir> <valMat> <pu> <pr>)
Fundamentos de Programación
Siempre que se define una estructura,
automáticamente Racket nos ofrece diversas
funciones que nos permiten manipular la nueva
estructura.
Fundamentos de Programación
(estudiante-nombre <estudiante>)
(estudiante-apellido <estudiante>)
(estudiante-direccion <estudiante>)
(estudiante-valorMatricula <estudiante>)
(estudiante-puesto <estudiante>)
(estudiante-programa <estudiante>)
Fundamentos de Programación
Considere:
(define Sofia (make-estudiante
‘Sofia
‘Lopez
‘Kra24#12-40
400000
1
2711))
(estudiante? Sofia)
Fundamentos de Programación
Ahora podemos acceder a la información de
la siguiente forma:
> (estudiante-nombre Sofia)
>‘Sofia
> (estudiante-direccion Sofia)
>”Kra24#12-40”
>(estudiante-valorMatricula Sofia)
>400000
Fundamentos de Programación
struct? : (any -> boolean)
nombreEstructura? : (any ->boolean)
Ejemplo:
(estudiante? ‘estudiante)
Fundamentos de Programación
Cada estructura definida tiene unos campos que pueden
tomar valores en cierto dominio.
Por ejemplo la estructura estudiante tiene seis campos: tres
symbol y tres number
¿Cómo podemos prevenir, instrucciones como:
(make-estudiante ‘Luis ‘Marquez 2 1900 2 280000)?”
Fundamentos de Programación
Desafortunadamente no se puede prevenir construir
instancias de estructura con valores diferentes a los
esperados. Sin embargo, se puede comunicar al usuario
acerca de lo que se espera almacenar en las estructuras.
Esto se realiza por medio de COMENTARIOS.
Fundamentos de Programación
Consideraremos la estructura punto, la cual además
de sus coordenadas x & y, tendrá un color asociado;
vamos a establecer que todos tienen el mismo radio.
Fundamentos de Programación
;; Análisis y Definición de Datos
(define-struct punto (x y color))
;; Un punto es una estructura:
;; (make-punto a b c) , donde a y b son números, y
c es un color.
Fundamentos de Programación
;; Análisis y Definición de Datos
(define-struct punto (x y color))
;; Un punto es una estructura:
;; (make-punto a b c) , donde a y b son números, y
c es un color.
Se indica al usuario lo que debe ser pasado al
constructor para crear una instancia Punto.
Fundamentos de Programación
Se quiere realizar una función que a partir de dos
puntos determine la distancia entre ellos.
Fundamentos de Programación
(define-struct punto (x y color))
;; Un punto es una estructura:
(make-punto a b c)
;; donde a y b son números, y c es un color.
Fundamentos de Programación
;; A partir de dos puntos, determinar la distancia
entre ellos.
;; distancia: punto punto -> número
Fundamentos de Programación
;; (distancia (make-punto 1 1 ‘azul)
(make-punto 4 5 ‘rojo))
;;debe producir 5.
Fundamentos de Programación
;; (define (procesando-puntos punto1 punto2)
;; ( . . . (punto-x punto1) . . .
;; . . . (punto-y punto1) . . .
;; . . . (punto-color punto1) . . .
;; . . . (punto-x punto2) . . .
;; . . . (punto-y punto2) . . .
;; . . . (punto-color punto2) . . .))
Fundamentos de Programación
(define (distancia-auxiliar dx dy)
(sqrt
(+
(* dx dx) (* dy dy))))
(define (distancia punto1 punto2)
(distancia-auxiliar
(-(punto-x punto2) (punto-x punto1))
(-(punto-y punto2) (punto-y punto1))
)
)
Fundamentos de Programación
;;(distancia (make-punto 1 1 ‘azul)
(make-punto 4 5 ‘rojo))
;; produce 5
Fundamentos de Programación
Desarrollar una función tiempo->segundos que
tome una estructura tiempo (horas, minutos,
segundos) y produzca el número de total de
segundos.
Fundamentos de Programación
(define-struct tiempo (horas minutos segundos))
;; tiempo es una estructura
;; (make-tiempo h m s) donde h, m,s son números
;; Propósito: Calcular el número total de segundos
;; a partir de cierto tiempo.
;; Contrato: tiempo->segundos: tiempo -> número
Fundamentos de Programación
;; Cabecera:
;; (define ( tiempo->segundos atiempo )...)
;; Ejemplos:
;; (tiempo->segundos (make-tiempo 1 0 0))
;; debe producir 3600
;; (tiempo->segundos (make-tiempo 10 30 30 ) )
;; debe producir 37830
Fundamentos de Programación
(define-struct tiempo (horas minutos segundos))
(define (tiempo->segundos atiempo)
(+
(* 3600 ( tiempo-horas atiempo))
(* 60 ( tiempo-minutos atiempo))
(tiempo-segundos atiempo)
)
)
Fundamentos de Programación
Escuela de Ingeniería y Sistemas de Computación
Fundamentos de Programación
Clase 5
En Racket, como en la mayoría de lenguajes de
programación, existen definiciones de datos
que se refieren a su propia definición.
¿Qué quiere decir esto?
Fundamentos de Programación
Consideremos la fila de
espera en un banco...
Fundamentos de Programación
Sí, simplemente ese
es su estado actual.
Fundamentos de Programación
¿Puede una fila tener
una sola persona?
Sí.
¿Que hay detrás de la persona que
se encuentra en la fila?
Una fila vacía.
Fundamentos de Programación
Las personas son adicionadas
o removidas de la fila.
Sin importar cuantas
Personas haya,
sigue siendo fila.
¿Por qué?
¿Qué ocurre cuando hay más personas en la fila?
Fundamentos de Programación
1. Una fila vacía o
2. Al menos un cliente y detrás una fila.
Una fila puede ser:
Fundamentos de Programación
Sin importar cuantas personas estén en la fila;
¿Con cuales clientes puede tratar el cajero directamente?
Respuesta: El primer cliente.
Es el único que es accesible directamente.
¿Cómo el cajero puede interactuar con el resto de la fila?
Respuesta: Tratando el primer cliente.
Operaciones sobre una fila
Fundamentos de Programación
Una lista corresponde a un concepto
computacional (en particular, es un tipo de
dato) muy utilizado para la representación de
datos en los lenguajes de programación.
De las Filas a las Listas
Fundamentos de Programación
Podemos ver la relación de este concepto con el de fila
Una fila puede ser:
1. Una fila vacía.
2. Al menos tiene una persona seguida de una fila.
Una lista puede ser:
1. Una lista vacía.
2. Al menos tiene un ??? y un lista de ???.
??? – Significa que las listas NO están limitadas a un tipo
de información en particular
De las Filas a las Listas
Fundamentos de Programación
Las listas se construyen en DrRacket a partir de una
unidad fundamental llamada pareja, la cual se
construye utilizando la instrucción cons.
CONS (PAREJAS)
Listas y la sintaxis en Racket
Fundamentos de Programación
Pareja es una de las estructuras de datos más
utilizada en DrRacket.
Gráficamente, una pareja se puede representar así:
Cons(pareja)
Fundamentos de Programación
Para acceder a los dos componentes, usaremos dos funciones
propias de DrRacket:
(first <pareja>) recupera el dato almacenado en la primera parte
de la pareja
(rest <pareja>) recupera el dato almacenado en la segunda
parte de la pareja
Cons(pareja)
Fundamentos de Programación
first rest
(cons <item> <item>) Crea una pareja
(first <pareja>) Accede al frente de la pareja
(rest <pareja>) Accede a la parte posterior de la
pareja
(cons? <dato>) Determina si el dato es una
pareja o no.
Como trabajar con parejas
Fundamentos de Programación
Las listas son usadas para almacenar gran variedad
de datos.
Podemos crear
listas de números,
listas de símbolos,
listas de string,
listas de listas, etc.
Listas
Fundamentos de Programación
Las listas hacen parte de los tipos de datos dinámicos; es
decir, se pueden crear listas que almacenen poca o
mucha información, dependiendo de las necesidades.
También se puede modificar el número de elementos
que tiene.
Listas
Fundamentos de Programación
Una lista puede ser:
1. La lista vacía, empty, o
2. (cons z loz)
donde z es un ??? y loz es una lista de ???.
empty representa la lista vacía.
??? indica el tipo de información que se puede
almacenar en la lista.
Definición de Listas
Fundamentos de Programación
Toda lista va a ser una pareja, con la restricción de que
el segundo componente sea una lista; una lista puede
ser empty.
Por lo tanto, nos apoyaremos en el constructor cons
para la creación de listas.
CONS, en este caso, toma dos argumentos:
Una pieza de datos para almacenar en la lista y la lista
donde se va almacenar.
Creación de Listas
Fundamentos de Programación
(cons 3 empty)
Dato a
almacenar
La lista sobre la cual
se adicionan valores.
Recuerde que
empty es una lista!
Ejemplo de Creación Listas
Fundamentos de Programación
(cons 1 (cons 2 (cons 3 empty)))
Adicionando más valores a la Lista
Fundamentos de Programación
(cons 1 (cons 2 (cons 3 empty)))
(first(cons 1 (cons 2 (cons 3 empty))))
(rest(cons 1 (cons 2 (cons 3 empty)))))
Trabajando con Listas
Fundamentos de Programación
Defina una lista que contenga los meses del
año. (Symbol)
Defina una lista que contenga los países
Bolivarianos. (String).
Trabajando con Listas
Fundamentos de Programación
Defina la una variable para cada lista del punto
anterior.
(define meses (…))
(define bolivarianos (…))
Trabajando con Listas
Fundamentos de Programación
Podemos anidar los operadores first y rest.
(first (rest (rest meses)))
(rest (rest (rest meses )))
(first (rest bolivarianos)))
(rest (rest bolivarianos)))
Trabajando con Listas
Fundamentos de Programación
172
(empty? <value>)
Determina si el valor corresponde a una lista vacía o no.
(list? <value>)
Determina si el valor corresponde a una lista o no
¿Qué devolverá (list? empty)?
Trabajando con Listas
Fundamentos de Programación
Las listas son construidas como un caso especial
de las parejas, lo que limita el acceso a solamente
su primer elemento, usando first, y al resto de la
lista, usando rest.
Como procesar las Listas
Fundamentos de Programación
Las listas pueden tener cualquier número de
elementos. Por lo tanto, las funciones que
manipulan las listas deben tener la suficiente
flexibilidad para tratar cualquier cantidad de
elementos presentes en ellas.
Como procesar las Listas
Fundamentos de Programación
Para el manejo de listas las funciones usan un
ingrediente bastante popular y potente presente
en los lenguajes de programación.
Recursión.
Como procesar las Listas
Fundamentos de Programación
La recursión se presenta cuando una función se
llama a sí misma.
Es un poderoso mecanismo para realizar procesos
repetitivos.
Las funciones realmente llaman a una “copia” de sí
mismas.
Muy útil, especialmente para tipos dinámicos de
datos.
Recursión
Fundamentos de Programación
Las tres características de la Recursión son:
1. La Función se llama a sí misma.
2. Existe una condición de terminación.
3. Cada vez se acerca más a la condición de terminación.
Características de la Recursión
Fundamentos de Programación
Respecto a las listas, su manejo se apoya en la
recursión.
Se dispone de una condición de parada que
permite detener el procesamiento.
La lista vacía (empty)
Se dispone de una operación que paulatinamente
aproxima a la condición de parada. (rest …)
Como se procesa una Lista
Fundamentos de Programación
Definición del Problema:
Escribir una función sumList que a partir de una
lista de números, determine la suma de los
elementos presentes en la lista.
Procesando una Lista de números
Fundamentos de Programación
;;Análisis y Definición de Datos:
;; Una lista-de-números consiste de:
;; 1) la lista vacía, empty o
;; 2) (cons n lon) donde n es un número
;; y lon es una lista-de-números.
Receta de Diseño
¡Esta definición de datos es recursiva!
Fundamentos de Programación
;; Propósito:
;; Esta función suma todos los números presentes
;; en la lista de entrada.
;; Contrato: sumList: lista-de-números --> número
Receta de Diseño
Fundamentos de Programación
;; Ejemplos:
(sum-list(cons 1 (cons 2 (cons 3 empty))))
;; debe producir 6
;; (sum-list(cons 3.5 (cons 4 (cons –5 empty))))
;; debe producir 2.5
Receta de Diseño
Fundamentos de Programación
183
;; Definición
(define (sumList listaNum)
(cond
((empty? listaNum) 0)
(else
(+ (first listaNum)
(sumList (rest listaNum))))))
Receta de Diseño
Fundamentos de Programación
;;Pruebas:
(= 6 (sumList (cons 1 (cons 2 (cons 3 empty)))))
(= 2.5 (sumList (cons 3.5 (cons 4 (cons –5 empty)))))
Receta de Diseño
Fundamentos de Programación
Definir una función que reciba un número y una
lista; la función debe retornar true si el número
está presente en una lista de números, de lo
contrario retorne false.
Ejercicios
Fundamentos de Programación
Definir una función (llamada contiene-
simbolos?), que toma un símbolo y una lista de
símbolos y determina si el símbolo está en la
lista.
Ejercicios
Fundamentos de Programación
Definir una función (llamada contiene-cadena?),
que toma una cadena y una lista de cadenas y
determina si la cadena está en la lista.
Ejercicios
Fundamentos de Programación
Definir una estructura para una biblioteca, tal que los
registros tengan id, titulo, autor y número de paginas.
Definir las siguientes funciones:
a. Una función que determine el promedio de paginas
de los libros presentes en una biblioteca.
b. Una función que retorne la información del libro a
partir del id.
Fundamentos de Programación
Definir una estructura para una librería, tal que sus
registros (libros) tengan como campos:
código, titulo, editorial y año de publicación.
Definir las siguientes funciones:
a. Una función que determine el año de publicación a partir
del código.
b. Una función que determine el número de libros cuyo año
de publicación es superior al 2010.
c. Una función que muestre la lista de libros adquiridos en
los últimos cinco años.
Fundamentos de Programación
Escuela de Ingeniería y Sistemas de ComputaciónClase 6
Una secuencia an es una función desde el subconjunto
de los enteros (puede ser {0,1,...,n} o {1,2,...,n}) a un
conjunto S. Usamos el símbolo an para denotar la
imagen del entero n. Se llama a an un término de la
secuencia.
Usamos la notación {an} para describir una secuencia.
Las secuencias se describen listando sus términos en
orden de subíndice creciente.
Fundamentos de Programación
Una progresión geométrica es una secuencia de la forma a, ar,
ar2, ....,arn; donde el termino inicial a y el radio común r son
números reales.
Radio Común: valor constante, resultado del cociente de
cualquier término entre su predecesor.
Ex. La secuencia 5, 15, 45, 135,...., es una progresión
geométrica, cuya solución general an= 3an-1 , n≥0, a0=5.
Fundamentos de Programación
Teorema: La solución particular de la función
recursiva an= dan-1 , donde n≥ 0, d es una
constante y a0=A, es única y está dada por an=
Adn, n≥0.
La solución particular de an= 3an-1 , n≥0, a0=5 es
an= 5(3)n
Fundamentos de Programación
Una progresión aritmética es una secuencia de la
forma a, a+d, a+2d, ......a+nd. donde el termino inicial
a y la diferencia común d son números reales.
La secuencia -1, 3, 7, 11, ...., es una progresión
aritmética, con termino inicial –1 y diferencia común
es 4, cuya solución es la secuencia {sn} con sn=-1+4n.
Fundamentos de Programación
Escriba en Racket un programa que permita
calcular la suma de los n primeros términos de las
siguientes series:
1 + 2 + 3 + 4 + 5 + 6 + 7 +…+ n
1 * 2 * 3 * 4 * 5 * 6 * 7 *….* n
2 + 4 + 6 + 8 + 10 + 12 + 14 +…+ 2n
3 + 5 + 7 + 9 + 11 + 13 + 15 +…+ (2n+1)
-4 + 6 – 8 + 10 – 12 + 14 – 16 +…+ (-1)n(2n+2)
Fundamentos de Programación
Escriba en DrRacket un programa que permita
calcular la suma de los n primeros términos de
la siguiente serie:
..
)!18..!1(
18
)!14..1(
15
)!12..!1(
12
)!87654321(
9
)!6!5!4!3!2!1(
6
)!21(
3












Fundamentos de Programación
Escriba en DrRacket un programa que permita
calcular la suma de los n primeros términos de
la siguiente serie:
......
16!
16
14)..(1
14
12!
12
10)..(1
10
8!
8
6)5432(1
6







 !4
4
)21(
2
Fundamentos de Programación
Desarrollar una función (llamada add), que
tome dos números naturales, llamados n y x,
luego genere n + x sin usar el operador + de
DrRacket.
Fundamentos de Programación
1)!(2n
x
1)(...
7!
x
5!
x
3!
x
xsen(x)
12n
n
753



1)!(2n
x
1)(
1-2n
1-n


15
14
120
112
120
32160240
120
32
6
8
2
5!
2
3!
2
2sen(2)
53



Fundamentos de Programación
(define (serieseno x n)
(cond
[(= n 0)0]
[else (+
(* (expt -1 (sub1 n)) (/ (expt x (sub1 (* 2 n)))
(fact (sub1 (* 2 n))))) (serieseno x (sub1 n)))]))
1)!(2n
x
1)(...
7!
x
5!
x
3!
x
xsen(x)
12n
n
753



1)!(2n
x
1)(
1-2n
1-n


Fundamentos de Programación
(define (serieseno1 x n)
(cond
[(= n 0)0]
[(=(modulo n 2)0)
(- (serieseno1 x (sub1 n)) (/ (expt x (sub1 (* 2 n)))
(fact (sub1 (* 2 n)))))]
[else (+ (serieseno1 x (sub1 n))
(/ (expt x (sub1 (* 2 n))) (fact (sub1 (* 2 n)))))]))
1)!(2n
x
1)(...
7!
x
5!
x
3!
x
xsen(x)
12n
n
753



Fundamentos de Programación
(serieseno1 2 3) ;14/15
(serieseno #i2 3) ; #i0.9333333333333334
(sin 2) ; #i0.9092974268256817
(serieseno #i10 50) ;#i-0.54402111088927
(sin 10) ;#i-0.5440211108893698
(= (serieseno #i20 50)
(serieseno1 #i20 50)) ; true
Fundamentos de Programación
(2n)!
x
1)(...
6!
x
4!
x
2!
x
1cos(x)
2n
n
642

3
1
24
8
24
164824
24
16
2
4
1
4!
2
2!
2
1cos(2)
42





1))!(2(n
x
1)(
1)-2(n
1-n


Fundamentos de Programación
(define (seriecoseno x n)
(cond
[(= n 0)0]
[else (+
(* (expt -1 (sub1 n)) (/ (expt x (* 2 (sub1 n)))
(fact (* 2 (sub1 n))))) (seriecoseno x (sub1 n)))]))
n)!(2
x
1)(...
6!
x
4!
x
2!
x
1cos(x)
n2
n
642

1))!(2(n
x
1)(
1)-2(n
1-n


Fundamentos de Programación
(define (seriecoseno1 x n)
(cond
[(= n 0)0]
[(=(modulo n 2)0)
(- (seriecoseno1 x (sub1 n)) (/ (expt x (* 2 (sub1 n)))
(fact (* 2 (sub1 n)))))]
[else (+ (seriecoseno1 x (sub1 n))
(/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))]))
(2n)!
x
1)(...
6!
x
4!
x
2!
x
1cos(x)
2n
n
642

Fundamentos de Programación
(define (seriecoseno2 x n)
(cond
[(= n 1)1]
[(even? n)
(- (seriecoseno2 x (sub1 n)) (/ (expt x (* 2 (sub1 n)))
(fact (* 2 (sub1 n)))))]
[else (+ (seriecoseno2 x (sub1 n))
(/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))]))
(2n)!
x
1)(...
6!
x
4!
x
2!
x
1cos(x)
2n
n
642

Fundamentos de Programación
n!
x
1)(...
3!
x
2!
x
x1x)(exp
n
n
32

5
2
4
21
2!
2
212)(exp
2

1)!(n
x
1)(
1)-(n
1-n


Fundamentos de Programación
(define (serieex x n)
(cond
[(= n 0)0]
[else (+
(/ (expt x (sub1 n))
(fact (sub1 n))) (serieex x (sub1 n)))]))
n!
x
1)(...
3!
x
2!
x
x1x)(exp
n
n
32

1)!(n
x
1)(
1)-(n
1-n


Fundamentos de Programación
(serieex #i2 2) ;#i3.0
(exp 2) ;#i7.38905609893065
(serieex #i2 20) ;#i7.3890560989301735
(serieex #i2 100) ;#i7.389056098930649
(serieex #i10 200) ;#i22026.46579480671
(exp 10) ;#i22026.465794806725
Fundamentos de Programación
Escuela de Ingeniería y Sistemas de Computación
Árboles
Clase 7
Un árbol es una estructura discreta que está formada
por un conjunto de vértices conectados por medio de
aristas y donde no hay circuitos.
¿Qué son los árboles?
Fundamentos de Programación
Es una de las estructuras más utilizadas en
computación, y se requiere aprender a
representarlas y el manejo de sus operaciones.
¿Por qué los árboles?
Fundamentos de Programación
Un árbol binario es una estructura recursiva,
generalmente compuesta por un elemento raíz y
por dos subárboles: el subárbol izquierdo y el
subárbol derecho.
Árboles Binarios
Fundamentos de Programación
¿Cómo construir un árbol en un lenguaje de
programación?
Se puede resumir en los siguientes pasos:
Pensar que datos se quieren almacenar y definir las
estructuras correspondientes.
Que tipo de árbol se quiere usar y definir la estructura
para los vértices.
Construir el árbol con los datos que se requiera.
Árboles Binarios
Fundamentos de Programación
Los árboles binarios se caracterizan porque cada
vértice está conectado a lo sumo con otros dos
vértices, de manera directa; es decir, usando una
sola arista entre cada par de vértices.
Se dice que un vértice está conectado a los otros
dos vértices, por medio de dos ramas o enlaces:
uno llamado enlace o rama izquierda, y el otro,
enlace o rama derecha.
Árboles Binarios
Fundamentos de Programación
20
2115
arbol1
Ejemplo de árbol binario
Fundamentos de Programación
Primer paso:
No se necesita definir estructuras para almacenar la
información de los vértices, ya que solo va a tener
números.
Construcción de un árbol binario
Fundamentos de Programación
Segundo paso:
Se va a usar árboles binarios, por lo tanto se requiere que
la construcción de la estructura vértice tenga tres partes:
Construcción de un árbol binario
Fundamentos de Programación
Segundo paso:
Un campo para guardar la información del vértice.
Un campo para acceder a uno de los otros vértices:
acceso al vértice conectado por medio de la rama
izquierda.
Un campo para acceder al otro vértice: el acceso al
vértice conectado por medio de la rama derecha.
Construcción de un árbol binario
Fundamentos de Programación
En DrRacket se puede escribir así:
(define-struct vertice (info izq der))
donde a la estructura asociada a los vertices, se le ha
llamado vértice y a sus campos info, izq y der.
En info se guardará un número, en izq y der se
guardaran nodos.
Construcción de un árbol binario
Fundamentos de Programación
Tercer paso:
Ahora se construye el árbol, empezando por el vértice
raíz.
(define arbol1 (make-vertice 20
(make-vertice 15 empty empty)
(make-vertice 21 empty empty)))
Construcción de un árbol binario
Fundamentos de Programación
La definición de un árbol binario será:
1. empty
2. (make-vertice info izq der)
donde info es un número, izq, der son árbol binario.
Lo anterior indica que un árbol puede estar vacío, y que
su definición se hace a partir de los vértices.
Definición de datos de un árbol binario:
Fundamentos de Programación
Ejemplo árbol binarios
20
15 21
2051
arbol2
Ejemplo de árbol binario
Fundamentos de Programación
Definición de arbol2
(define arbol2
(make- vertice 20
(make- vertice 15 empty empty)
(make- vertice 21
(make- vertice 51 empty empty)
(make-vertice 20 empty empty)
)
)
)
Definición de arbol2
Fundamentos de Programación
Operaciones sobre árboles binarios
Las operaciones que se utilizan para acceder a los
elementos de los árboles binarios son las mismas
que se utilizarían para acceder a una estructura con
estructuras
Operaciones sobre un árbol binario
Fundamentos de Programación
Funciones sobre árboles binarios
Desarrollar una función que retorne el número de
elementos de un árbol binario
Funciones sobre un árbol binario
Fundamentos de Programación
Contrato
elementosArbol: arbol-binario --> número
Contrato
Fundamentos de Programación
Ejemplo
(define arbolPrueba
(make-vertice 10
(make-vertice 2 empty empty) empty))
(elementosArbol arbolPrueba)
;;debe producir 2
Ejemplo
Fundamentos de Programación
Definición
(define (elementosArbol arbol1)
(cond
[ (empty? arbol1) 0]
[ else (+ 1 (+
(elementosArbol (vertice-izq arbol1))
(elementosArbol (vertice-der arbol1))
)
)
]
)
)
Definición
Fundamentos de Programación
Desarrollar una función que determine si un
símbolo está en un árbol binario
Problema
Fundamentos de Programación
Definición
(define (busquedaArbol sim arbol1)
(cond
[ (empty? arbol1) false]
[ else
(cond
[ (symbol=? sim (vertice-info arbol1)) true]
[ else (or
(busquedaArbol sim (vertice-der arbol1))
(busquedaArbol sim (vertice-izq arbol1))
)
] ) ] ))
Definición
Fundamentos de Programación
Árbol binario de búsqueda
Un árbol binario de búsqueda es un árbol binario,
donde cada vértice tiene un valor mayor que los
vértices situados a su izquierda, y tiene un valor
menor que los vértices situados a su derecha.
Es una estructura eficiente al momento de hacer
búsquedas.
Árbol Binario de Búsqueda
Fundamentos de Programación
Árbol binario de búsqueda
Un arbol-binario-busqueda es:
1. empty
2. (make-nodo info izq der)
donde: izq y der son arbol-binario-busqueda.
Todos los valores tomados por los vértices a la
izquierda deben ser menores que info.
Todos los valores tomados por los vértices a la
derecha deben ser mayores que info.
Árbol Binario de Búsqueda
Fundamentos de Programación
Árbol binario de búsqueda
Escriba una función que permita
determinar si un número se encuentra en un Árbol
Binario de Búsqueda
Árbol Binario de Búsqueda
21
2318
Fundamentos de Programación
Aplicación de los Árboles
Los investigadores médicos representan la
información familiar mediante árboles para estudiar
enfermedades de tipo hereditarias.
Por ejemplo, requieren buscar en algún momento
sobre un árbol familiar, un cierto tipo de color de
ojos.
Trabajaremos en la representación de árboles
familiares y funciones para procesarlos.
Aplicaciones de los Árboles
Fundamentos de Programación
Solución
Para resolver este problema utilizaremos el tipo de
dato abstracto ARBOL que modela de forma adecuada
la información requerida.
Solución
Fundamentos de Programación
Análisis y Definición de Datos
Paso 1:
Análisis y Definición de Datos
Necesitamos una estructura para
representar los nodos del árbol.
Esta estructura debe almacenar
los datos necesarios del problema:
(define-struct hijo (padre madre nombre edad ojos))
Análisis y Definición de Datos
Fundamentos de Programación
Análisis y Definición de Datos
Se define un árbol familiar de ancestros como una colección
de nodos donde:
Un nodoAFamiliar es:
1. empty o
2. (make-hijo p m no fn co) donde p y m son de tipo
nodoAFamiliar, no y co son símbolos; y fn es un número.
(define-struct hijo (padre madre nombre fechaNac ColorOjos))
Análisis y Definición de Datos
Fundamentos de Programación
Ejemplo
;PADRES
(define Eva (make-hijo empty empty 'Eva 1965 ‘blue))
(define Fred (make-hijo empty empty 'Fred 1966 ‘brown))
;HIJO
(define Gustav (make-hijo Fred Eva 'Gustav 1988 ‘brown))
Análisis y Definición de Datos
Fundamentos de Programación
¿Cómo se establecen
las conexiones del hijo al padre en esta representación?
Pregunta
Fundamentos de Programación
Paso 2 y 3: Contrato y Propósito
Una vez se tiene el modelo para representar la información
del problema, se pasa a trabajar en la función.
;; CONTRATO:
ancestro-ojos-azules? : nodoAFamiliar -> booleano
;; PROPOSITO:
Determinar si un nodoAFamiliar contiene una estructura
hijo con ojos azules.
Contrato y Propósito
Fundamentos de Programación
Ejemplo
Fundamentos de Programación
Definición
Fundamentos de Programación
;; Primera Generación (ABUELOS):
(define Carl (make-hijo empty empty 'Carl 1926 'verde))
(define Bettina (make-hijo empty empty 'Bettina 1926 'verde))
;; Segunda Generación (HIJOS):
(define Adam (make-hijo Carl Bettina 'Adam 1950 'amarillo))
(define Dave (make-hijo Carl Bettina 'Dave 1955 'negro))
(define Eva (make-hijo Carl Bettina 'Eva 1965 'azul))
(define Fred (make-hijo empty empty 'Fred 1966 'gris))
;; Tercera Generación (NIETOS):
(define Gustav (make-hijo Fred Eva 'Gustav 1988 'cafe))
Pruebas
Fundamentos de Programación
;;llamado función
(ancestro-ojos-azules? Carl) ;;false
(ancestro-ojos-azules? Gustav) ;;true
Pruebas
Fundamentos de Programación

Más contenido relacionado

La actualidad más candente

Organigrama
OrganigramaOrganigrama
Organigrama
Griselda Medina
 
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOSUN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
Mitzi Linares Vizcarra
 
Introducción a la Administracion
Introducción a la AdministracionIntroducción a la Administracion
Introducción a la Administracion
Moishef HerCo
 
Presentacion fdd
Presentacion fddPresentacion fdd
Presentacion fdd
Ricardo Valentino
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
Noralma Yanez
 
Modelo V
Modelo VModelo V
Modelo V
Melissa Ortega
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo
 
Estimación de-costos-del-software-1 (1)
Estimación de-costos-del-software-1 (1)Estimación de-costos-del-software-1 (1)
Estimación de-costos-del-software-1 (1)
JOnh LopSuar
 
Análisis de sistemas informáticos alexis diaz
Análisis de sistemas informáticos   alexis diazAnálisis de sistemas informáticos   alexis diaz
Análisis de sistemas informáticos alexis diaz
Alexis Díaz
 
Metodo v
Metodo vMetodo v
Metodo v
Mayra Romero
 
2. Cascada De Fase Solapada
2. Cascada De Fase Solapada2. Cascada De Fase Solapada
2. Cascada De Fase Solapada
Jofrahona Rojinegro
 
Documento técnico n 89 propuestas metodologicas para el levantamiento y mo...
Documento técnico n  89   propuestas metodologicas para el levantamiento y mo...Documento técnico n  89   propuestas metodologicas para el levantamiento y mo...
Documento técnico n 89 propuestas metodologicas para el levantamiento y mo...
auditormilano
 
las organizaciones formales e informales.pptx
las organizaciones formales e informales.pptxlas organizaciones formales e informales.pptx
las organizaciones formales e informales.pptx
KikeJoi
 
Procesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITECProcesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITEC
mrojas_unitec
 
10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes
Ramiro Estigarribia Canese
 
La Organización como etapa del Proceso Administrativo
La Organización como etapa del Proceso AdministrativoLa Organización como etapa del Proceso Administrativo
La Organización como etapa del Proceso Administrativo
Mili Herrera
 
Procesos administrativos.
Procesos administrativos. Procesos administrativos.
Procesos administrativos.
Carolina Yustiz
 
4 1 personalizacion de metodologias
4 1 personalizacion de metodologias4 1 personalizacion de metodologias
4 1 personalizacion de metodologias
landeta_p
 
359287107 cuadro-comparativo-de-los-ciclos-de-vida
359287107 cuadro-comparativo-de-los-ciclos-de-vida359287107 cuadro-comparativo-de-los-ciclos-de-vida
359287107 cuadro-comparativo-de-los-ciclos-de-vida
Oscare Coy
 
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMASTÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
Genesis Acosta
 

La actualidad más candente (20)

Organigrama
OrganigramaOrganigrama
Organigrama
 
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOSUN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
UN MÉTODO PARA DEFINIR ARQUITECTURA DE PROCESOS
 
Introducción a la Administracion
Introducción a la AdministracionIntroducción a la Administracion
Introducción a la Administracion
 
Presentacion fdd
Presentacion fddPresentacion fdd
Presentacion fdd
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
 
Modelo V
Modelo VModelo V
Modelo V
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Estimación de-costos-del-software-1 (1)
Estimación de-costos-del-software-1 (1)Estimación de-costos-del-software-1 (1)
Estimación de-costos-del-software-1 (1)
 
Análisis de sistemas informáticos alexis diaz
Análisis de sistemas informáticos   alexis diazAnálisis de sistemas informáticos   alexis diaz
Análisis de sistemas informáticos alexis diaz
 
Metodo v
Metodo vMetodo v
Metodo v
 
2. Cascada De Fase Solapada
2. Cascada De Fase Solapada2. Cascada De Fase Solapada
2. Cascada De Fase Solapada
 
Documento técnico n 89 propuestas metodologicas para el levantamiento y mo...
Documento técnico n  89   propuestas metodologicas para el levantamiento y mo...Documento técnico n  89   propuestas metodologicas para el levantamiento y mo...
Documento técnico n 89 propuestas metodologicas para el levantamiento y mo...
 
las organizaciones formales e informales.pptx
las organizaciones formales e informales.pptxlas organizaciones formales e informales.pptx
las organizaciones formales e informales.pptx
 
Procesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITECProcesos de Software EGEL-UNITEC
Procesos de Software EGEL-UNITEC
 
10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes
 
La Organización como etapa del Proceso Administrativo
La Organización como etapa del Proceso AdministrativoLa Organización como etapa del Proceso Administrativo
La Organización como etapa del Proceso Administrativo
 
Procesos administrativos.
Procesos administrativos. Procesos administrativos.
Procesos administrativos.
 
4 1 personalizacion de metodologias
4 1 personalizacion de metodologias4 1 personalizacion de metodologias
4 1 personalizacion de metodologias
 
359287107 cuadro-comparativo-de-los-ciclos-de-vida
359287107 cuadro-comparativo-de-los-ciclos-de-vida359287107 cuadro-comparativo-de-los-ciclos-de-vida
359287107 cuadro-comparativo-de-los-ciclos-de-vida
 
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMASTÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
TÉCNICAS DE ORGANIZACIÓN. ORGANIGRAMAS
 

Similar a FdP_Diapositivas_2018

Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
Ronal Palomino
 
7. operadores y estructura secuencial
7. operadores y estructura secuencial7. operadores y estructura secuencial
7. operadores y estructura secuencial
rcarrerah
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
Cesar Sanchez Mosso
 
Fundamentos de Programacion
Fundamentos de ProgramacionFundamentos de Programacion
Fundamentos de Programacion
neyvajms
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
Edison López Díaz
 
Semana 1 - Principios de Algoritmos.pdf
Semana 1 - Principios de Algoritmos.pdfSemana 1 - Principios de Algoritmos.pdf
Semana 1 - Principios de Algoritmos.pdf
CarlosJahnsen3
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
José Juan Mora Pérez
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
Abrirllave
 
Logica computacional conceptos basicos
Logica computacional conceptos basicosLogica computacional conceptos basicos
Logica computacional conceptos basicos
moni26011993
 
Video Primer Bimestre Metodologia Abierta
Video Primer Bimestre Metodologia AbiertaVideo Primer Bimestre Metodologia Abierta
Video Primer Bimestre Metodologia Abierta
Danilo Jaramillo
 
01 metprogramacion
01 metprogramacion01 metprogramacion
01 metprogramacion
ConfesorAD
 
Guia examen diagnostico_pseint
Guia examen diagnostico_pseintGuia examen diagnostico_pseint
Guia examen diagnostico_pseint
LeidyEspinoza6
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
Valentin Manzano
 
Algoritmos
Algoritmos Algoritmos
Programación
ProgramaciónProgramación
Programación
belenramiz
 
Introducción a los algoritmos y programación 1
Introducción a los algoritmos y programación   1Introducción a los algoritmos y programación   1
Introducción a los algoritmos y programación 1
Jeckson Loza
 
Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)
tonytenorio2
 
5. Diseño de un algoritmo
5. Diseño de un algoritmo5. Diseño de un algoritmo
5. Diseño de un algoritmo
rcarrerah
 
TEMA11.ppt
TEMA11.pptTEMA11.ppt
TEMA11.ppt
AntonelaCanet
 
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Nerys Ramírez Mordán
 

Similar a FdP_Diapositivas_2018 (20)

Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
7. operadores y estructura secuencial
7. operadores y estructura secuencial7. operadores y estructura secuencial
7. operadores y estructura secuencial
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
 
Fundamentos de Programacion
Fundamentos de ProgramacionFundamentos de Programacion
Fundamentos de Programacion
 
Conceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programaciónConceptos básicos de un lenguaje de programación
Conceptos básicos de un lenguaje de programación
 
Semana 1 - Principios de Algoritmos.pdf
Semana 1 - Principios de Algoritmos.pdfSemana 1 - Principios de Algoritmos.pdf
Semana 1 - Principios de Algoritmos.pdf
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
 
Logica computacional conceptos basicos
Logica computacional conceptos basicosLogica computacional conceptos basicos
Logica computacional conceptos basicos
 
Video Primer Bimestre Metodologia Abierta
Video Primer Bimestre Metodologia AbiertaVideo Primer Bimestre Metodologia Abierta
Video Primer Bimestre Metodologia Abierta
 
01 metprogramacion
01 metprogramacion01 metprogramacion
01 metprogramacion
 
Guia examen diagnostico_pseint
Guia examen diagnostico_pseintGuia examen diagnostico_pseint
Guia examen diagnostico_pseint
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Algoritmos
Algoritmos Algoritmos
Algoritmos
 
Programación
ProgramaciónProgramación
Programación
 
Introducción a los algoritmos y programación 1
Introducción a los algoritmos y programación   1Introducción a los algoritmos y programación   1
Introducción a los algoritmos y programación 1
 
Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)
 
5. Diseño de un algoritmo
5. Diseño de un algoritmo5. Diseño de un algoritmo
5. Diseño de un algoritmo
 
TEMA11.ppt
TEMA11.pptTEMA11.ppt
TEMA11.ppt
 
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
Curso de R: 1.1. introducción al lenguaje (Objetos y operadores básicos)
 

Más de ead1943

Obrien_2_2017
Obrien_2_2017Obrien_2_2017
Obrien_2_2017
ead1943
 
Obrien_1_2017
Obrien_1_2017Obrien_1_2017
Obrien_1_2017
ead1943
 
Grafos 8.3.1 2017
Grafos 8.3.1 2017Grafos 8.3.1 2017
Grafos 8.3.1 2017
ead1943
 
Presentacion 2017
Presentacion 2017Presentacion 2017
Presentacion 2017
ead1943
 
Rediseño Curricular
Rediseño CurricularRediseño Curricular
Rediseño Curricular
ead1943
 
Grafos 8.1 2016
Grafos 8.1 2016Grafos 8.1 2016
Grafos 8.1 2016
ead1943
 

Más de ead1943 (6)

Obrien_2_2017
Obrien_2_2017Obrien_2_2017
Obrien_2_2017
 
Obrien_1_2017
Obrien_1_2017Obrien_1_2017
Obrien_1_2017
 
Grafos 8.3.1 2017
Grafos 8.3.1 2017Grafos 8.3.1 2017
Grafos 8.3.1 2017
 
Presentacion 2017
Presentacion 2017Presentacion 2017
Presentacion 2017
 
Rediseño Curricular
Rediseño CurricularRediseño Curricular
Rediseño Curricular
 
Grafos 8.1 2016
Grafos 8.1 2016Grafos 8.1 2016
Grafos 8.1 2016
 

Último

LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJELA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
jecgjv
 
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLMExamen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Juan Martín Martín
 
Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024
israelsouza67
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Alejandrino Halire Ccahuana
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
ViriEsteva
 
Docentes y el uso de chatGPT en el Aula Ccesa007.pdf
Docentes y el uso de chatGPT   en el Aula Ccesa007.pdfDocentes y el uso de chatGPT   en el Aula Ccesa007.pdf
Docentes y el uso de chatGPT en el Aula Ccesa007.pdf
Demetrio Ccesa Rayme
 
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
valerytorresmendizab
 
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIACONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
ginnazamudio
 
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
20minutos
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
RAMIREZNICOLE
 
Planificación Ejemplo con la metodología TPACK
Planificación Ejemplo con la metodología  TPACKPlanificación Ejemplo con la metodología  TPACK
Planificación Ejemplo con la metodología TPACK
ssusera6697f
 
Todo sobre el acta constitutiva de la empresa.pdf
Todo sobre el acta constitutiva de la empresa.pdfTodo sobre el acta constitutiva de la empresa.pdf
Todo sobre el acta constitutiva de la empresa.pdf
La Paradoja educativa
 
Las diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdfLas diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdf
La Paradoja educativa
 
1° T3 Examen Zany de primer grado compl
1° T3 Examen Zany  de primer grado compl1° T3 Examen Zany  de primer grado compl
1° T3 Examen Zany de primer grado compl
ROCIORUIZQUEZADA
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
MauricioSnchez83
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
EricaCouly1
 
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdfEl Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
Robert Zuñiga Vargas
 
2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado
GiselaBerrios3
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Demetrio Ccesa Rayme
 

Último (20)

LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJELA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
LA PEDAGOGIA AUTOGESTONARIA EN EL PROCESO DE ENSEÑANZA APRENDIZAJE
 
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLMExamen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLM
 
Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024Evaluacion del tercer trimestre del 2023-2024
Evaluacion del tercer trimestre del 2023-2024
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
 
Docentes y el uso de chatGPT en el Aula Ccesa007.pdf
Docentes y el uso de chatGPT   en el Aula Ccesa007.pdfDocentes y el uso de chatGPT   en el Aula Ccesa007.pdf
Docentes y el uso de chatGPT en el Aula Ccesa007.pdf
 
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
665033394-TODAS-LAS-SANGRES-resumen-Por-Capitulos.pdf
 
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIACONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
CONTENIDOS Y PDA DE LA FASE 3,4 Y 5 EN NIVEL PRIMARIA
 
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
Examen de Lengua Castellana y Literatura de la EBAU en Castilla-La Mancha 2024.
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
 
Planificación Ejemplo con la metodología TPACK
Planificación Ejemplo con la metodología  TPACKPlanificación Ejemplo con la metodología  TPACK
Planificación Ejemplo con la metodología TPACK
 
Todo sobre el acta constitutiva de la empresa.pdf
Todo sobre el acta constitutiva de la empresa.pdfTodo sobre el acta constitutiva de la empresa.pdf
Todo sobre el acta constitutiva de la empresa.pdf
 
Las diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdfLas diversas Sociedades Mercantiles Mexico.pdf
Las diversas Sociedades Mercantiles Mexico.pdf
 
A VISITA DO SENHOR BISPO .
A VISITA DO SENHOR BISPO                .A VISITA DO SENHOR BISPO                .
A VISITA DO SENHOR BISPO .
 
1° T3 Examen Zany de primer grado compl
1° T3 Examen Zany  de primer grado compl1° T3 Examen Zany  de primer grado compl
1° T3 Examen Zany de primer grado compl
 
Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1Mauricio-Presentación-Vacacional- 2024-1
Mauricio-Presentación-Vacacional- 2024-1
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
 
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdfEl Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
 
2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado2° año LA VESTIMENTA-ciencias sociales 2 grado
2° año LA VESTIMENTA-ciencias sociales 2 grado
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
 

FdP_Diapositivas_2018

  • 1. Escuela de Ingeniería y Sistemas de ComputaciónClase 1 Fundamentos de Programación
  • 2. Nombre: Esteban Andrés Díaz Mina Ingeniero de Sistemas (UV) Especialista en Redes de Comunicación (UV) Magister en E-Learning (UNAB-UOC) E-mail : esteban.diaz@correounivalle.edu.co Fundamentos de Programación
  • 3. Diseño de programas desde la especificación hasta la implementación. Usar buenas practicas de programación como Principios básico del Desarrollo de Software Fundamentos de Programación
  • 4. Las clases se dictan con videobeam y/o en la sala de computo. Se promoverá la participación activa de los estudiantes mediante actividades en clase. Para el diseño de programas se usan dos innovaciones Pedagógicas: unas guías de diseño que orientan al estudiante en todo el proceso y un ambiente de programación para principiantes, que se adapta a medida que los usuarios se van volviendo expertos. Fundamentos de Programación
  • 5. Fundamentos de Programación Actividad Porcentaje Talleres en Clase, Quices, Participación 30% Examen Parcial 25% Examen Final 45%
  • 7. How to Design Programs Matthias Felleisen Robert Bruce Findler Matthew Flatt Shriram Krishnamurthi Disponible en: http://www.htdp.org Fundamentos de Programación
  • 8. En este curso se debe usar el Entorno de Desarrollo Integrado DrRacket para la definición de las funciones. Fundamentos de Programación
  • 10. Funcional. Relativamente pequeño. (Versión 6.11 – 76 MB) Fácil de aprender. Programas usualmente son más cortos. Utilizado para enseñar programación. Fundamentos de Programación
  • 11. Racket puede ejecutar una línea de código tan pronto como se escribe en la ventana de interacción. > (+ 17 8) 25 Fundamentos de Programación
  • 12. Suponga que queremos hallar la solución de la siguiente expresión: 3 + 2 * 7 Parece fácil, sin embargo, se puede dar más de una interpretación. ¿Cuáles? Fundamentos de Programación
  • 13. Se pueden pensar que la expresión se reduce a “5 * 7” o a “3 + 14” dependiendo de que operación se realice primero. Lo cual puede ocasionar ambigüedad. 3 + 2 * 7 ¿Cómo se puede evitar este tipo de error? Fundamentos de Programación
  • 14. Evaluación Sencilla Se pueden adicionar paréntesis para delimitar parte de la expresión. (3 + (2 * 7)) Por medio de lo anterior, obtenemos total claridad. Se aprecia que primero se debe multiplicar 2 y 7; luego a este resultado sumarle 3. Fundamentos de Programación
  • 15. Notación Prefija Racket usa notación prefija, en este tipo de evaluación se invoca primero el operador, seguido por los argumentos. ( <operador> <argumentos> ) Ejemplos: (+ 5 3) (* 4 6) (* 7 (- 6 5)) (* 2 3 5) Fundamentos de Programación
  • 16. Usando el Stepper DrRacket incluye una herramienta que presenta paso a paso la evaluación de una expresión. El Paso a Paso muestra el orden de evaluación de las expresiones. Ejemplo: (/ (+ 2 7) (/ (* 6 4) (- 12 4) )) Fundamentos de Programación
  • 17. Scheme  Enteros 9, -5, 0, -48  Números Reales 3.14159, 2.78  Fraccionarios 1/2, 5/3  Símbolos x, y, pi, radio a menudo son usados para los nombres de: Una función Un parámetro Una variable Fundamentos de Programación
  • 18. Scheme Hay alrededor de 100 símbolos predefinidos en Racket, incluyendo operadores aritméticos: Símbolo Nombre + Adición - Sustracción * Multiplicación / División Fundamentos de Programación
  • 19. Primer Ejemplo Suponga que queremos usar la función predefinida “sqrt”, la cual retorna la raíz cuadrada de su parámetro. Por ejemplo, se puede escribir lo siguiente en Racket: (sqrt 121) Fundamentos de Programación
  • 20. Primer Ejemplo Igualmente se puede escribir: (sqrt 2) Sin embargo, el resultado que se aprecia es: #i1.4142135623730951 ¿Qué significa “#i”? Esta es una forma en la que Racket indica la aproximación en un cálculo. Fundamentos de Programación
  • 21. Se ofrecen numerosas funciones de uso común: – (sqrt A) → – (expt A B) → – (exp A) → – (modulo A B) → residuo de la división entera A/B A B A A e Fundamentos de Programación
  • 22. Considere: Parámetros de la función Nombre de la función Cuerpo de la función Asocia el cuerpo al nombre y parámetros Fundamentos de Programación f(x) = x * x
  • 23. Vocabulario (Funciones) Predecible, reproducible. Cada vez que se aplica a la función el mismo parámetro, se obtiene el mismo resultado. Si f(x)= x * x * x f(2) = 8. Nada cambia en los parámetros. Cada vez que se llama una función, no se modifica el valor del parámetro. Es decir “La función no altera nada en el mundo.” Si f(x)= x * x * x f(2) = 8. El 2 no se modifica. Fundamentos de Programación
  • 24. Composición Se pueden realizar composición de múltiples funciones. Por ejemplo: f(x)= x * x * x g(x) = x+5 Calcular el resultado de: g(f(2)) El llamado interno f(2), retorna 8; así que el llamado externo g(8), retorna 13. g(f(2))  g(8)  13 Fundamentos de Programación
  • 25. Funciones en Scheme Consideremos nuevamente la función f(x) = x * x Se empieza por asignar un nombre apropiado a la función: (define (cuadrado x) Se continúa adicionando el cuerpo correspondiente (define (cuadrado x) (* x x) ) Fundamentos de Programación
  • 26. Funciones en Scheme (define (cuadrado x) (* x x) ) Posteriormente, se prueba la función (cuadrado 7) (cuadrado 10) 49 100 Fundamentos de Programación
  • 27. Funciones en Scheme ; Genera el cuadrado de un número (define (cuadrado x) (* x x )) ; Genera la suma de cuadrados (define (sumaCuadrados x y) (+ (cuadrado x) (cuadrado y))) Fundamentos de Programación
  • 28. Funciones en Scheme Formule las siguientes funciones matemáticas como una función en Racket: Fundamentos de Programación
  • 29. Escuela de Ingeniería y Sistemas de ComputaciónClase 2 Fundamentos de Programación
  • 30. Aunque para el interprete no tenga relevancia el estilo; como una buena practica de programación, nosotros siempre lo mantendremos! Considerando el buen estilo, se usarán identaciones y se mantendrá en el mejor formato las definiciones de las funciones. Fundamentos de Programación
  • 32. Buen estilo de Definición de Función (define (hipotenusa lado1 lado2) (sqrt (+ (* lado1 lado1) (* lado2 lado2)))) Lo anterior es opuesto a: (define (hipotenusa lado1 lado2) (sqrt (+ (* lado1 lado1) (* lado2 lado2)))) Fundamentos de Programación
  • 33. (define (hipotenusa lado1 lado2) (sqrt (+ (* lado1 lado 1) (* lado2 lado 2)))) (define (hipotenusa lado1 lado2) (sqrt (+ (cuadrado lado1) (cuadrado lado2)))) Fundamentos de Programación
  • 34. Algunas constantes comunes como e y  tienen nombres predefindos en DrRacket e equivale a #i2.718281828459045 pi equivale a #i3.141592653589793 Otras constantes como velocidad_maxima pueden ser definidas en DrRacket: (define velocidad_maxima 60) Fundamentos de Programación
  • 35. Definición de la función que calcula el área de un Circulo (define (areaCirculo radio) (* pi (* radio radio))) Posteriormente ejecutamos la función, suministrando todos los valores necesarios para las variables. (areaCirculo 10)  #i314.1592653589793 Fundamentos de Programación
  • 36. Errores de Sintaxis Comparable a los errores gramaticales en los lenguajes naturales. DrRacket verifica que todo el código este correctamente organizado de acuerdo a las reglas. Errores en Tiempo de Ejecución Dividir por cero, por ejemplo. Número incorrecto de parámetros cuando se intenta ejecutar la función. ( Error Semántico) Fundamentos de Programación
  • 37. Errores Lógicos La “gramática” está correcta, pero la solución no es apropiada para el problema. Por ejemplo, se solicita una función que determine el cuadrado de un número y se realiza una función que determina la raíz cuadrada de un número. Fundamentos de Programación
  • 38. (* (8) 2) (2 * 4) (/ * 3 5) (/ 3 0) (define (func2 a) (+ b 2)) (define func1 (a) (+ a 2)) (define (func3 1) (+ a 2)) Fundamentos de Programación
  • 39. Una fábrica produce gorros en forma de cilindro. El administrador de la empresa requiere saber cuánto material es requerido para la elaboración de los gorros. Fundamentos de Programación Área total del cilindro: Donde, r: radio de la base h: la altura del cono )(2 hrr 
  • 40. El Dodecaedro es un poliedro formado por doce caras pentagonales. El área y el volumen de este poliedro se puede calcular con las siguientes formulas: Donde a es la longitud de una de las aristas. )525(53 2  aA 4 )5715(3   a V Fundamentos de Programación a. Escriba una función para calcular el área del dodecaedro. b. Escriba una función para calcular el volumen del dodecaedro.
  • 41. Lengua Extranjera Gramática Vocabulario Frases, Sentencias Conversación Lenguaje de Computadora Sintaxis Palabras Reservadas Abstracción Solución de Problemas Empieza a … desde el primer día Fundamentos de Programación
  • 42. Guía para programar. Desarrollar Programas: Bien Documentados Organizados y de Alta Calidad Fundamentos de Programación
  • 43. Aplicar la función a las entradas de los ejemplos Verificar que las salidas esperadas correspondan con las obtenidas. Descubrir los errores Pruebas Formular cómo la función calcula su resultado. Desarrollar una expresión en Racket que use primitivas, otras funciones y las variables. Transformar las expresiones matemáticas asociadas al problema, cuando estén disponibles Definir la funciónCuerpo Buscar ejemplos asociados al problema. Crear ejemplos. Validar los resultados, si es posible. Caracterizar la relación entrada-salida por medio de ejemplos Ejemplo Escoger un nombre que se ajuste al problema. Estudiar el problema y determinar los datos de entrada que requiere la función. Asociar una variable por entrada. Describir que debería producir la función a partir de las variables Formular el contrato y la cabecera así: ;; nombre: numero_1 …  numero_2 ;; Calcular numero_2 desde numero_1 … (define (nombre x1 …)…) Describir el propósito de la función. Dar el nombre a la función. Especificar la naturaleza de los datos de entrada y de salida; Formular la cabecera Propósito Contrato Cabecera ActividadObjetivoFase
  • 44. ;;Propósito: ;;Una breve descripción del problema. ;;Contrato: ;;<nombre> : <tipos de variable>  <tipos de variable> ;;Ejemplo: ;; <ejemplo de qué se quiere colocar> ;; debe producir <ejemplo de que debería ocurrir> ;;Definición ;;<aquí se coloca el código> ;;Pruebas ;;<aquí se colocan las pruebas> Fundamentos de Programación
  • 45. ;; Nombre: Luís Ramírez ;; Código: 201812345 ;; Taller 1- Ejercicio 3. Diseño del Programa: ;; Propósito: Una breve descripción del problema. ;; Contrato: <nombre> : <tipos de variable> -> <tipos de variable> ;; Ejemplo: <ejemplo de qué se quiere colocar> debe producir <ejemplo de que debería ocurrir> ;; Definición <aquí se coloca el código> ;; Pruebas <aquí se colocan las pruebas> Fundamentos de Programación
  • 46. Escriba la receta de diseño para una función que calcule el área de un círculo. Fundamentos de Programación
  • 47. ;; Calcular el área de un círculo a partir del radio. Fundamentos de Programación
  • 48. ;; Contrato: areaCirculo : número -> número Fundamentos de Programación
  • 49. ;; Cabecera (define (areaCirculo radio) … ) Fundamentos de Programación
  • 50. ;; Ejemplo: (areaCirculo 5) debe producir 78.539 ;; (areaCirculo 1) debe producir 3.1415 También puede ser: ;;Ejemplo: (areaCirculo 5) 78.539 ;; (areaCirculo 1) 3.1415 Fundamentos de Programación
  • 51. ;; Definición (define (areaCirculo radio) (* 3.1415 (* radio radio)) ) Fundamentos de Programación
  • 52. ;; Pruebas: (areaCirculo 5) ;; se espera 78.539 (areaCirculo 1) ;; se espera 3.1415 Fundamentos de Programación
  • 53. ¿Es importante seguir estos pasos? SI! Fundamentos de Programación
  • 54. La fuerza de atracción entre dos masas m1 y m2, separadas por una distancia d, está dada por la formula: Donde G es la constante de gravitación universal: 2 21 )**( d mmG F  8 10*673.6  G Fundamentos de Programación Escriba la receta de diseño para un programa que obtenga la fuerza Gravitacional a partir de las masas de los dos cuerpos y la distancia entre ellas.
  • 55. Escuela de Ingeniería y Sistemas de ComputaciónClase 3 Fundamentos de Programación
  • 56. En los programas no solamente se permiten representar funciones matemáticas, como las vistas hasta ahora. Al programar también se permite controlar la realización de un cálculo si se cumplen o no ciertas condiciones. El manejo de condiciones dota de un gran poder expresivo a los lenguajes de programación, y por lo tanto permiten construir programas más complejos. Fundamentos de Programación
  • 57. Ejemplos: ¿El número de estudiantes matriculados en el curso 750080M es superior a 40? ¿El avión tiene suficiente combustible para llegar al aeropuerto de Santiago de Cali? ¿El estudiante con código 201634567 aprobó más de la mitad de los créditos? Fundamentos de Programación
  • 58. Un booleano es un tipo de dato fundamental para el manejo de las condiciones. Los Booleanos representan los valores de verdad true y false Fundamentos de Programación
  • 59. Las funciones que permiten determinar la satisfacción o no de cierta propiedad en un conjunto de valores se conocen como Predicados. Fundamentos de Programación
  • 60. Los predicados tienen las siguientes propiedades: 1. Producen un valor de verdad; en DrRacket true o false. 2. Los nombres generalmente finalizan con el carácter ? (los predicados propios de DrRacket tienen esta característica). Fundamentos de Programación
  • 61. (number? <valor>) Determina si <valor> es o no es un número. (odd? <valor>) Retorna true si <valor> es un número impar, en caso contrario retorna false. (even? <valor>) Retorna true si <valor> es un número par, en caso contrario retorna false. Fundamentos de Programación
  • 62. integer? : (any -> bool) negative? : (number -> bool) positive? : (number -> bool) real? : (any -> bool) boolean? : (any -> boolean) boolean=? : (boolean boolean -> boolean) Fundamentos de Programación
  • 63. ;; Determina si la edad de una persona corresponde a ;; la de un menor de edad. (define (es-menor? edad) (< edad 18)) Fundamentos de Programación
  • 64. Pregunta ¿Cómo se pueden usar los predicados para tomar decisiones? Respuesta Se utilizarán en enunciados o instrucciones condicionales. Fundamentos de Programación
  • 65. Los enunciados condicionales se pueden construir por medio de la función predefinida en Scheme, cond. Su sintaxis o formato es el siguiente: (cond (cond [ pregunta1 respuesta1 ] [ pregunta1 respuesta1 ] [ pregunta2 respuesta2 ] [ pregunta2 respuesta2 ] … … [ preguntan respuestan ] ) [ else respuestan ] ) Fundamentos de Programación
  • 66. Interrogante “Qué significa [pregunta respuesta]?” Solución “pregunta” es donde se especifica la condición que se puede cumplir; para ello, se pueden usar predicados, o en general expresiones condicionales. “respuesta” indica que debe ocurrir cuando “pregunta” es verdadera, es decir, su valor es true. Fundamentos de Programación
  • 67. Pregunta: ¿Cuantas pregunta-respuesta se pueden manejar en un cond? Respuesta: Tantas como necesite. Pregunta: ¿ Qué significa else? Respuesta: else permite manejar aquellos datos que no se han satisfecho por ninguna de las condiciones anteriores, la respuesta asociada, es la respuesta para todos estos casos. Pregunta: ¿La receta de diseño es diferente al manejar programas con condiciones ?” Respuesta: Sí. Fundamentos de Programación
  • 68. < Menor > Mayor = Igual <= Menor o Igual >= Mayor o Igual Fundamentos de Programación
  • 69. Fundamentos de Programación Expresión Matemática Expresión DrRacket Resultado X = Y 14 = 15 10 = 10 (= 14 15) (= 10 10) false true X < Y 5 < 5 5 < 6 (< 5 5) (< 5 6) false true X > Y 4 > 12 12 > 4 (> 4 12) (> 12 4) false true
  • 70. Al referirnos a ciertas situaciones, en ocasiones, involucramos varias condiciones, estas se relacionan por medio del conectivo y (AND) y el conectivo o (OR). Ejemplos: Si apruebo FDP y Matemáticas podré matricular MDI. Si hoy es Martes o Miércoles entonces tengo clases de Lectura de Textos Académicos en Ingles. Fundamentos de Programación
  • 71. En ocasiones, también requerimos expresar la negación de un acontecimiento como parte de una condición: Si un número entero positivo no es Primo entonces es Compuesto. Si la nota final de Juan Parra en el curso de Matemáticas no está entre 2.0 y 2.95, entonces no puede habilitar. Fundamentos de Programación
  • 72. (and (>= nota 3.0) (<= nota 5.0)) (or (>= x 60) (< y 30)) (not (= edad 20)) ¿La variable nota está 3.0 y 5.0? ¿El valor de x es mayor o igual que 60, o el valor de y es menor que 30? ¿La edad es diferente a 20? Fundamentos de Programación
  • 73. En ocasiones no es necesario evaluar las expresiones lógicas en su totalidad; se usa de manera inteligente la semántica del “AND” y del “OR” mediante la evaluación en corto circuito. Fundamentos de Programación
  • 74. (and (> 5 2) (< 2 5) (= 2 5)) (and (= 2 5) (> 5 2) (< 2 5)) (or (> 3 9) (< 9 3) (= 3 3)) (or (> 6 3) (< 3 6) (= 3 3)) Fundamentos de Programación
  • 75. Suponga que se dispone de una función que determina el precio unitario de venta de DVD’s, el precio se calcula dependiendo de la cantidad de artículos que compre el cliente:  Entre 1 y 5  $250.000 cada uno.  Entre 6 y 10  $220.000 cada uno.  Más de 10  $200.000 cada uno. Fundamentos de Programación
  • 76. Corresponde a la primera etapa del proceso de diseño de Programas. En esta fase se indica que conocemos de los datos que la función requiere. Análisis y Definiciones de Datos: Si se compran entre 1 y 5, el precio por unidad es de 250.000 Si se compran entre 6 y 10, el precio por unidad es de 220.000 Si se compran más de 10, el precio por unidad es de 200.000 Fundamentos de Programación
  • 77. Se ofrece una pequeña descripción de los datos que se están usando. Se aprecia que el precio por unidad varía según la cantidad de DVD’s a comprar. La respuesta es un número! Fundamentos de Programación
  • 78. Determinar el precio por unidad a partir de la cantidad de DVDs que un cliente desee comprar . Fundamentos de Programación
  • 79. La anterior fase, nos ofrece suficiente información para poder establecer el contrato. ;; Contrato: precioUnidad : número --> número La función recibe una cantidad, y produce el precio por unidad. Fundamentos de Programación
  • 80. (define (precioUnidad cantidad) …) Fundamentos de Programación
  • 81. ;; (precioUnidad 1) debe retornar 250.000 ;; (precioUnidad 3) debe retornar 250.000 ;; (precioUnidad 8) debe retornar 220.000 ;; (precioUnidad 10) debe retornar 220.000 ;; (precioUnidad 11) debe retornar 200.000 Se debe diseñar por lo menos ejemplo por cada condición: Fundamentos de Programación
  • 82. ¿Qué hacer con la cantidad igual a 0? Esta entrada no se adapta al problema. Fundamentos de Programación
  • 83. La definición se basa en el análisis de datos. ;; Definición (define (precioUnidad cantidad) (cond [ . . . ? . . . ] [ . . . ? . . . ] ) ) Pregunta: ¿Cuántas condiciones se necesitan? Respuesta: Observemos el análisis y definición de datos! Fundamentos de Programación
  • 84. ;;Definición (define (precioUnidad cantidad) (cond [(<= cantidad 5) … ] [(and (>= cantidad 6)(<= cantidad 10)) … ] [(> cantidad 10) … ] ) ) Se aprecia que se manejaron tres casos. Se debe ser cuidadoso al cubrir el rango de posibilidades. Fundamentos de Programación
  • 85. ;; Definición (define (precioUnidad cantidad) (cond [(<= cantidad 5) 250000] [(and (>= cantidad 6)(<= cantidad 10)) 220000] [(> cantidad 10) 200000 ] ) ) Fundamentos de Programación
  • 86. ;; Definición (define (precioUnidad cantidad) (cond [(<= cantidad 0) “Error, Entrada NO válida”] [(<= cantidad 5) 250000] [(and (>= cantidad 6)(<= cantidad 10)) 220000] [(> cantidad 10) 200000 ] ) ) Fundamentos de Programación
  • 87. Se deben manejar pruebas por cada ejemplo: > (precioUnidad 1) ;; debe producir 250000 > (precioUnidad 3) ;; debe producir 250000 > (precioUnidad 8) ;; debe producir 220000 > (precioUnidad 12) ;; debe producir 200000 Fundamentos de Programación
  • 88. ;; Pruebas > (= (precioUnidad 3) 250000) > (= (precioUnidad 8) 220000) > (= (precioUnidad 12) 200000) Con este estilo de pruebas se puede observar si cada una de las pruebas fue exitosa; cada una de ellas debe responder “true”. Fundamentos de Programación
  • 89. Un símbolo es una secuencia de caracteres que por sí mismos no tienen significado. Los programas y los usuarios lo dotan de significado. Hemos visto que símbolos como sqrt y + tienen un significado predefinido. Fundamentos de Programación
  • 90. Otros símbolos como hipotenusa y cuadrado se han definido y tienen asociado el nombre de una función. Sin embargo, algunos símbolos son sólo símbolos sin significado adicional. En este caso, para que Racket no trate de asignarle significado, se precede el símbolo con una Comilla Simple ( ‘ ). Fundamentos de Programación
  • 91. Predicados para Symbol symbol=? : (symbol symbol -> boolean) symbol? : (any -> boolean) > (symbol=? ‘one ‘one) > (symbol=? ‘one ‘two) true false > (symbol? ‘UV) > (symbol? 45) true false Fundamentos de Programación
  • 92. Como ocurre con los números, los símbolos pueden ser retornados desde las funciones que diseñamos. Igualmente podemos pasar símbolos a una función. (define (diaSemana numerodia ) (cond [ (= numerodia 1) ‘Domingo ] [ (= numerodia 2) ‘Lunes ] [ (= numerodia 3) ‘Martes ] [ (= numerodia 4) ‘Miércoles ] [ (= numerodia 5) ‘Jueves ] [ (= numerodia 6) ‘Viernes ] [ (= numerodia 7) ‘Sábado ] ) ) ¿ Cuál es el contrato de la función? Fundamentos de Programación
  • 93. Se requiere una función, a la cual se le ingrese el día de la semana y retorne el número que le corresponde. ¿ Cuál es el contrato de la función? Fundamentos de Programación
  • 94. (define (diaSemana dia ) (cond [ (symbol=? 'Domingo dia) 1 ] [ (symbol=? 'Lunes dia) 2 ] [ (symbol=? 'Martes dia) 3 ] [ (symbol=? 'Miércoles dia) 4 ] [ (symbol=? 'Jueves dia) 5 ] [ (symbol=? 'Viernes dia) 6 ] [ (symbol=? 'Sábado dia) 7 ] [else "El dia está errado“ ] ) ) Fundamentos de Programación
  • 95. En DrRacket, se pueden definir piezas de datos compuestos llamadas Strings. Los Strings no son atómicos como los símbolos; ellos se pueden descomponer en muchas partes. “Esta es una cadena de caracteres” (define nombre “Anyali Ruiz”) Fundamentos de Programación
  • 96. Predicados para String string=? : (string string ... -> boolean) string? : (any -> boolean) Fundamentos de Programación
  • 97. Escriba la Receta de Diseño para una función que determine si un año es bisiesto. Un año es bisiesto si es múltiplo de 4: (por ejemplo 1984). Sin embargo, los años múltiplos de 100 sólo son bisiestos cuando a la vez son múltiplos de 400: (por ejemplo, 1000 no fue bisiesto, mientras que 2400 sí lo será). Fundamentos de Programación
  • 98. Escriba la Receta de Diseño para un programa que reciba un argumento real y que devuelva “EL NUMERO ES POSITIVO”, si el número es positivo; “EL NUMERO ES NEGATIVO” si es negativo o ‘CERO, si es cero. Utilice los predicados: real? negative? positive?. Fundamentos de Programación
  • 99. Desarrollar una función (llamada impuesto) que calcula el impuesto a partir del pago bruto (sin descuentos). Por un pago de $240 o menos el impuesto es del 0% , por un pago de más de $240 hasta de $480 el impuesto es del 15% por un pago de más de $480 el impuesto es del 28%. Fundamentos de Programación
  • 100. Desarrollar una función (llamada pago-neto) que determine el pago neto de un empleado a partir del número de horas trabajadas (valor-hora es $12). El pago neto es igual al pago bruto (sin descuentos) menos el impuesto. Fundamentos de Programación
  • 101. ;; Propósito: Calcular el valor correspondiente ;; al impuesto a partir del pago bruto. ;; Contrato: impuesto: numero -> numero ;; Cabecera: (define ( impuesto pago-bruto )...) Fundamentos de Programación
  • 102. ;; (impuesto 220) debe producir 0 ;; (impuesto 250) debe producir 37.5 ;; (impuesto 500) debe producir 140.0 Fundamentos de Programación
  • 103. ;;(define (impuesto pago-bruto) ;; (cond ;; [(<= pago-bruto 0) “Error”] ;; [(<= pago-bruto 240) ... ] ;; [(<= pago-bruto 480) ... ] ;; [(> pago-bruto 480) ... ] ) ) Fundamentos de Programación
  • 104. (define (impuesto pago-bruto) (cond [(<= pago-bruto 0) “Error”] [(<= pago-bruto 240) 0 ] [(<= pago-bruto 480) (* 0.15 pago-bruto)] [(> pago-bruto 480) (* 0.28 pago-bruto)] ) ) Fundamentos de Programación
  • 105. ;; Contrato: pago-neto: numero -> numero ;; Propósito: Calcular el pago-neto ;; (con descuento ) a partir del número de ;; horas trabajadas ;; Cabecera: ;; (define ( pago-neto horas-trabajadas )...) Fundamentos de Programación
  • 106. ;; (pago-neto 10) debe producir 120 ;; (pago-neto 30) debe producir 306 ;; (pago-neto 50) debe producir 460 Fundamentos de Programación
  • 107. ;; definición de variables (define VALOR-HORA 12) (define (pago-neto horas-trabajadas) (- ( * VALOR-HORA horas-trabajadas) (impuesto ( * VALOR-HORA horas-trabajadas)) ) ) Fundamentos de Programación
  • 108. ;; Pruebas función pago-neto (pago-neto 10) ;; debe producir 120 (pago-neto 30) ;; debe producir 306 (pago-neto 50) ;; debe producir 432 Fundamentos de Programación
  • 109. Escriba un programa que permita calcular la nota final de un estudiante del curso Fundamentos de Programación que consta de 3 notas entre 1.0 - 5.0, la primera nota vale 24%, la segunda 34% y la tercera 42%. La nota final se obtiene de acuerdo a la siguiente tabla: Nota Nota Final [3.0 – 5.0] Gana [1.0 – 3.0) Pierde Fundamentos de Programación
  • 110. (define (promedio a b c) (+ (* a 0.24)(* b 0.34) (* c 0.42))) (define (nota a b c) (cond [(>= (promedio a b c) 3.0)"Gana"] [else "Pierde"])) Fundamentos de Programación
  • 111. (define (nota-f a b c) (cond [(and (>= a 1) (<= a 5) (>= b 1) (<= b 5) (>= c 1) (<= c 5)) (nota a b c)] [else "Error, alguna de las notas están fuera de rango"])) Fundamentos de Programación
  • 112. >(nota-f 5.0 1.5 5.1) ;"Error, alguna de las notas están fuera de rango”. >(nota-f 2.3 1.5 3.2) ;"Pierde“ >(nota-f 5.0 1.5 5.0) ;"Gana" Fundamentos de Programación
  • 113. Realice en DrRacket una función llamada nota_Asignatura que permita a un profesor obtener la nota final de un estudiante, dadas las notas correspondiente a los talleres y los exámenes. La evaluación del curso se hará teniendo en cuenta la siguiente tabla: Talleres 30% Primer Parcial 30% Examen Final 40% Fundamentos de Programación
  • 114. (define (notaAsig t p f) (+ (* t 0.4) (* p 0.3) (* f 0.3))) Fundamentos de Programación
  • 115. Defina una nueva función asignaturas que tiene como parámetros de entrada además de las nota obtenidas, un código de la asignatura con el fin de calcular la nota de la asignatura deseada, teniendo en cuenta la sgte tabla: Código Talleres Primer Parcial Examen Final 750081M 30% 30% 40% 750082M 10% 40% 50% 750083M 20% 30% 50% 750084M 40% 30% 30% Fundamentos de Programación
  • 116. (define (notaAsig81 t p f) (+ (* t 0.3) (* p 0.3) (* f 0.4))) (define (notaAsig82 t p f) (+ (* t 0.1) (* p 0.4) (* f 0.5))) (define (notaAsig83 t p f) (+ (* t 0.2) (* p 0.3) (* f 0.5))) (define (notaAsig84 t p f) (+ (* t 0.4) (* p 0.3) (* e 0.3))) Fundamentos de Programación
  • 117. (define (Asignatura1 cod t p f) (cond [(symbol=? cod '750081M)(notaAsig81 t p f)] [(symbol=? cod '750082M)(notaAsig82 t p f)] [(symbol=? cod '750083M)(notaAsig83 t p f)] [(symbol=? cod '750084M)(notaAsig84 t p f)] [else "El código No se encuentra"] ) ) Fundamentos de Programación
  • 118. (define (Asignatura cod t p f) (cond [(not(symbol? cod)) "El Código debe ser un symbol"] [ (or (< t 1.0) (> t 5.0) (< p 1.0) (> p 5.0) (< f 1.0) (> f 5.0)) "Alguna de las notas esta fuera del rango permitido"] [else (Asignatura1 cod t p f)])) Fundamentos de Programación
  • 119. (Asignatura '750084N 3 4 5) (Asignatura '750084M 3 4 5) (Asignatura '750084M 5.1 4 5) Fundamentos de Programación
  • 120. Fundamentos de Programación Universidad del Valle – Sede PacíficoClase 4
  • 121. Una estructura es usada para agrupar datos que mantienen una fuerte relación. Esto corresponde a una unidad que se puede manipular por diferentes funciones sin perdida del significado de sus datos. Fundamentos de Programación
  • 122. Persona Nombre, Apellido, edad, e-mail. Universidad Nombre, Ciudad, Año Fundación, Rector CD Artista, Género, Número de canciones. Fundamentos de Programación
  • 123. La Secretaría Académica de la Universidad requiere tener información de los estudiantes que permita: enviar cartas, generar y enviar recibos de pago considerando los estímulos académicos. La información que se podría almacenar es: Nombre del estudiante Apellido del estudiante Dirección Valor de la Matricula Puesto Programa Académico Fundamentos de Programación
  • 124. (define-struct <nombre de la estructura> (<nombre del primer campo> <nombre del segundo campo> … <nombre del último campo> ) ) Fundamentos de Programación
  • 125. (define-struct estudiante (nombre apellido dirección valorMatricula puesto programa)) Ahora tenemos la posibilidad de almacenar información del estudiante usando la estructura estudiante. ACLARACIÓN: NO hemos almacenado información acerca de algún estudiante en particular. Sólo se ha creado un tipo de estructura de datos que describe la información que se puede almacenar de cada estudiante. Fundamentos de Programación
  • 126. Considere la definición de estructura estudiante: (define-struct estudiante (nombre apellido direccion valorMatricula puesto programa)) La anterior definición permite utilizar las siguientes funciones, creadas por DrRacket: CONSTRUCTOR: (make-estudiante <nom> <ape><dir> <valMat> <pu> <pr>) Fundamentos de Programación
  • 127. Siempre que se define una estructura, automáticamente Racket nos ofrece diversas funciones que nos permiten manipular la nueva estructura. Fundamentos de Programación
  • 128. (estudiante-nombre <estudiante>) (estudiante-apellido <estudiante>) (estudiante-direccion <estudiante>) (estudiante-valorMatricula <estudiante>) (estudiante-puesto <estudiante>) (estudiante-programa <estudiante>) Fundamentos de Programación
  • 130. Ahora podemos acceder a la información de la siguiente forma: > (estudiante-nombre Sofia) >‘Sofia > (estudiante-direccion Sofia) >”Kra24#12-40” >(estudiante-valorMatricula Sofia) >400000 Fundamentos de Programación
  • 131. struct? : (any -> boolean) nombreEstructura? : (any ->boolean) Ejemplo: (estudiante? ‘estudiante) Fundamentos de Programación
  • 132. Cada estructura definida tiene unos campos que pueden tomar valores en cierto dominio. Por ejemplo la estructura estudiante tiene seis campos: tres symbol y tres number ¿Cómo podemos prevenir, instrucciones como: (make-estudiante ‘Luis ‘Marquez 2 1900 2 280000)?” Fundamentos de Programación
  • 133. Desafortunadamente no se puede prevenir construir instancias de estructura con valores diferentes a los esperados. Sin embargo, se puede comunicar al usuario acerca de lo que se espera almacenar en las estructuras. Esto se realiza por medio de COMENTARIOS. Fundamentos de Programación
  • 134. Consideraremos la estructura punto, la cual además de sus coordenadas x & y, tendrá un color asociado; vamos a establecer que todos tienen el mismo radio. Fundamentos de Programación
  • 135. ;; Análisis y Definición de Datos (define-struct punto (x y color)) ;; Un punto es una estructura: ;; (make-punto a b c) , donde a y b son números, y c es un color. Fundamentos de Programación
  • 136. ;; Análisis y Definición de Datos (define-struct punto (x y color)) ;; Un punto es una estructura: ;; (make-punto a b c) , donde a y b son números, y c es un color. Se indica al usuario lo que debe ser pasado al constructor para crear una instancia Punto. Fundamentos de Programación
  • 137. Se quiere realizar una función que a partir de dos puntos determine la distancia entre ellos. Fundamentos de Programación
  • 138. (define-struct punto (x y color)) ;; Un punto es una estructura: (make-punto a b c) ;; donde a y b son números, y c es un color. Fundamentos de Programación
  • 139. ;; A partir de dos puntos, determinar la distancia entre ellos. ;; distancia: punto punto -> número Fundamentos de Programación
  • 140. ;; (distancia (make-punto 1 1 ‘azul) (make-punto 4 5 ‘rojo)) ;;debe producir 5. Fundamentos de Programación
  • 141. ;; (define (procesando-puntos punto1 punto2) ;; ( . . . (punto-x punto1) . . . ;; . . . (punto-y punto1) . . . ;; . . . (punto-color punto1) . . . ;; . . . (punto-x punto2) . . . ;; . . . (punto-y punto2) . . . ;; . . . (punto-color punto2) . . .)) Fundamentos de Programación
  • 142. (define (distancia-auxiliar dx dy) (sqrt (+ (* dx dx) (* dy dy)))) (define (distancia punto1 punto2) (distancia-auxiliar (-(punto-x punto2) (punto-x punto1)) (-(punto-y punto2) (punto-y punto1)) ) ) Fundamentos de Programación
  • 143. ;;(distancia (make-punto 1 1 ‘azul) (make-punto 4 5 ‘rojo)) ;; produce 5 Fundamentos de Programación
  • 144. Desarrollar una función tiempo->segundos que tome una estructura tiempo (horas, minutos, segundos) y produzca el número de total de segundos. Fundamentos de Programación
  • 145. (define-struct tiempo (horas minutos segundos)) ;; tiempo es una estructura ;; (make-tiempo h m s) donde h, m,s son números ;; Propósito: Calcular el número total de segundos ;; a partir de cierto tiempo. ;; Contrato: tiempo->segundos: tiempo -> número Fundamentos de Programación
  • 146. ;; Cabecera: ;; (define ( tiempo->segundos atiempo )...) ;; Ejemplos: ;; (tiempo->segundos (make-tiempo 1 0 0)) ;; debe producir 3600 ;; (tiempo->segundos (make-tiempo 10 30 30 ) ) ;; debe producir 37830 Fundamentos de Programación
  • 147. (define-struct tiempo (horas minutos segundos)) (define (tiempo->segundos atiempo) (+ (* 3600 ( tiempo-horas atiempo)) (* 60 ( tiempo-minutos atiempo)) (tiempo-segundos atiempo) ) ) Fundamentos de Programación
  • 148. Escuela de Ingeniería y Sistemas de Computación Fundamentos de Programación Clase 5
  • 149. En Racket, como en la mayoría de lenguajes de programación, existen definiciones de datos que se refieren a su propia definición. ¿Qué quiere decir esto? Fundamentos de Programación
  • 150. Consideremos la fila de espera en un banco... Fundamentos de Programación
  • 151. Sí, simplemente ese es su estado actual. Fundamentos de Programación
  • 152. ¿Puede una fila tener una sola persona? Sí. ¿Que hay detrás de la persona que se encuentra en la fila? Una fila vacía. Fundamentos de Programación
  • 153. Las personas son adicionadas o removidas de la fila. Sin importar cuantas Personas haya, sigue siendo fila. ¿Por qué? ¿Qué ocurre cuando hay más personas en la fila? Fundamentos de Programación
  • 154. 1. Una fila vacía o 2. Al menos un cliente y detrás una fila. Una fila puede ser: Fundamentos de Programación
  • 155. Sin importar cuantas personas estén en la fila; ¿Con cuales clientes puede tratar el cajero directamente? Respuesta: El primer cliente. Es el único que es accesible directamente. ¿Cómo el cajero puede interactuar con el resto de la fila? Respuesta: Tratando el primer cliente. Operaciones sobre una fila Fundamentos de Programación
  • 156. Una lista corresponde a un concepto computacional (en particular, es un tipo de dato) muy utilizado para la representación de datos en los lenguajes de programación. De las Filas a las Listas Fundamentos de Programación
  • 157. Podemos ver la relación de este concepto con el de fila Una fila puede ser: 1. Una fila vacía. 2. Al menos tiene una persona seguida de una fila. Una lista puede ser: 1. Una lista vacía. 2. Al menos tiene un ??? y un lista de ???. ??? – Significa que las listas NO están limitadas a un tipo de información en particular De las Filas a las Listas Fundamentos de Programación
  • 158. Las listas se construyen en DrRacket a partir de una unidad fundamental llamada pareja, la cual se construye utilizando la instrucción cons. CONS (PAREJAS) Listas y la sintaxis en Racket Fundamentos de Programación
  • 159. Pareja es una de las estructuras de datos más utilizada en DrRacket. Gráficamente, una pareja se puede representar así: Cons(pareja) Fundamentos de Programación
  • 160. Para acceder a los dos componentes, usaremos dos funciones propias de DrRacket: (first <pareja>) recupera el dato almacenado en la primera parte de la pareja (rest <pareja>) recupera el dato almacenado en la segunda parte de la pareja Cons(pareja) Fundamentos de Programación first rest
  • 161. (cons <item> <item>) Crea una pareja (first <pareja>) Accede al frente de la pareja (rest <pareja>) Accede a la parte posterior de la pareja (cons? <dato>) Determina si el dato es una pareja o no. Como trabajar con parejas Fundamentos de Programación
  • 162. Las listas son usadas para almacenar gran variedad de datos. Podemos crear listas de números, listas de símbolos, listas de string, listas de listas, etc. Listas Fundamentos de Programación
  • 163. Las listas hacen parte de los tipos de datos dinámicos; es decir, se pueden crear listas que almacenen poca o mucha información, dependiendo de las necesidades. También se puede modificar el número de elementos que tiene. Listas Fundamentos de Programación
  • 164. Una lista puede ser: 1. La lista vacía, empty, o 2. (cons z loz) donde z es un ??? y loz es una lista de ???. empty representa la lista vacía. ??? indica el tipo de información que se puede almacenar en la lista. Definición de Listas Fundamentos de Programación
  • 165. Toda lista va a ser una pareja, con la restricción de que el segundo componente sea una lista; una lista puede ser empty. Por lo tanto, nos apoyaremos en el constructor cons para la creación de listas. CONS, en este caso, toma dos argumentos: Una pieza de datos para almacenar en la lista y la lista donde se va almacenar. Creación de Listas Fundamentos de Programación
  • 166. (cons 3 empty) Dato a almacenar La lista sobre la cual se adicionan valores. Recuerde que empty es una lista! Ejemplo de Creación Listas Fundamentos de Programación
  • 167. (cons 1 (cons 2 (cons 3 empty))) Adicionando más valores a la Lista Fundamentos de Programación
  • 168. (cons 1 (cons 2 (cons 3 empty))) (first(cons 1 (cons 2 (cons 3 empty)))) (rest(cons 1 (cons 2 (cons 3 empty))))) Trabajando con Listas Fundamentos de Programación
  • 169. Defina una lista que contenga los meses del año. (Symbol) Defina una lista que contenga los países Bolivarianos. (String). Trabajando con Listas Fundamentos de Programación
  • 170. Defina la una variable para cada lista del punto anterior. (define meses (…)) (define bolivarianos (…)) Trabajando con Listas Fundamentos de Programación
  • 171. Podemos anidar los operadores first y rest. (first (rest (rest meses))) (rest (rest (rest meses ))) (first (rest bolivarianos))) (rest (rest bolivarianos))) Trabajando con Listas Fundamentos de Programación
  • 172. 172 (empty? <value>) Determina si el valor corresponde a una lista vacía o no. (list? <value>) Determina si el valor corresponde a una lista o no ¿Qué devolverá (list? empty)? Trabajando con Listas Fundamentos de Programación
  • 173. Las listas son construidas como un caso especial de las parejas, lo que limita el acceso a solamente su primer elemento, usando first, y al resto de la lista, usando rest. Como procesar las Listas Fundamentos de Programación
  • 174. Las listas pueden tener cualquier número de elementos. Por lo tanto, las funciones que manipulan las listas deben tener la suficiente flexibilidad para tratar cualquier cantidad de elementos presentes en ellas. Como procesar las Listas Fundamentos de Programación
  • 175. Para el manejo de listas las funciones usan un ingrediente bastante popular y potente presente en los lenguajes de programación. Recursión. Como procesar las Listas Fundamentos de Programación
  • 176. La recursión se presenta cuando una función se llama a sí misma. Es un poderoso mecanismo para realizar procesos repetitivos. Las funciones realmente llaman a una “copia” de sí mismas. Muy útil, especialmente para tipos dinámicos de datos. Recursión Fundamentos de Programación
  • 177. Las tres características de la Recursión son: 1. La Función se llama a sí misma. 2. Existe una condición de terminación. 3. Cada vez se acerca más a la condición de terminación. Características de la Recursión Fundamentos de Programación
  • 178. Respecto a las listas, su manejo se apoya en la recursión. Se dispone de una condición de parada que permite detener el procesamiento. La lista vacía (empty) Se dispone de una operación que paulatinamente aproxima a la condición de parada. (rest …) Como se procesa una Lista Fundamentos de Programación
  • 179. Definición del Problema: Escribir una función sumList que a partir de una lista de números, determine la suma de los elementos presentes en la lista. Procesando una Lista de números Fundamentos de Programación
  • 180. ;;Análisis y Definición de Datos: ;; Una lista-de-números consiste de: ;; 1) la lista vacía, empty o ;; 2) (cons n lon) donde n es un número ;; y lon es una lista-de-números. Receta de Diseño ¡Esta definición de datos es recursiva! Fundamentos de Programación
  • 181. ;; Propósito: ;; Esta función suma todos los números presentes ;; en la lista de entrada. ;; Contrato: sumList: lista-de-números --> número Receta de Diseño Fundamentos de Programación
  • 182. ;; Ejemplos: (sum-list(cons 1 (cons 2 (cons 3 empty)))) ;; debe producir 6 ;; (sum-list(cons 3.5 (cons 4 (cons –5 empty)))) ;; debe producir 2.5 Receta de Diseño Fundamentos de Programación
  • 183. 183 ;; Definición (define (sumList listaNum) (cond ((empty? listaNum) 0) (else (+ (first listaNum) (sumList (rest listaNum)))))) Receta de Diseño Fundamentos de Programación
  • 184. ;;Pruebas: (= 6 (sumList (cons 1 (cons 2 (cons 3 empty))))) (= 2.5 (sumList (cons 3.5 (cons 4 (cons –5 empty))))) Receta de Diseño Fundamentos de Programación
  • 185. Definir una función que reciba un número y una lista; la función debe retornar true si el número está presente en una lista de números, de lo contrario retorne false. Ejercicios Fundamentos de Programación
  • 186. Definir una función (llamada contiene- simbolos?), que toma un símbolo y una lista de símbolos y determina si el símbolo está en la lista. Ejercicios Fundamentos de Programación
  • 187. Definir una función (llamada contiene-cadena?), que toma una cadena y una lista de cadenas y determina si la cadena está en la lista. Ejercicios Fundamentos de Programación
  • 188. Definir una estructura para una biblioteca, tal que los registros tengan id, titulo, autor y número de paginas. Definir las siguientes funciones: a. Una función que determine el promedio de paginas de los libros presentes en una biblioteca. b. Una función que retorne la información del libro a partir del id. Fundamentos de Programación
  • 189. Definir una estructura para una librería, tal que sus registros (libros) tengan como campos: código, titulo, editorial y año de publicación. Definir las siguientes funciones: a. Una función que determine el año de publicación a partir del código. b. Una función que determine el número de libros cuyo año de publicación es superior al 2010. c. Una función que muestre la lista de libros adquiridos en los últimos cinco años. Fundamentos de Programación
  • 190. Escuela de Ingeniería y Sistemas de ComputaciónClase 6
  • 191. Una secuencia an es una función desde el subconjunto de los enteros (puede ser {0,1,...,n} o {1,2,...,n}) a un conjunto S. Usamos el símbolo an para denotar la imagen del entero n. Se llama a an un término de la secuencia. Usamos la notación {an} para describir una secuencia. Las secuencias se describen listando sus términos en orden de subíndice creciente. Fundamentos de Programación
  • 192. Una progresión geométrica es una secuencia de la forma a, ar, ar2, ....,arn; donde el termino inicial a y el radio común r son números reales. Radio Común: valor constante, resultado del cociente de cualquier término entre su predecesor. Ex. La secuencia 5, 15, 45, 135,...., es una progresión geométrica, cuya solución general an= 3an-1 , n≥0, a0=5. Fundamentos de Programación
  • 193. Teorema: La solución particular de la función recursiva an= dan-1 , donde n≥ 0, d es una constante y a0=A, es única y está dada por an= Adn, n≥0. La solución particular de an= 3an-1 , n≥0, a0=5 es an= 5(3)n Fundamentos de Programación
  • 194. Una progresión aritmética es una secuencia de la forma a, a+d, a+2d, ......a+nd. donde el termino inicial a y la diferencia común d son números reales. La secuencia -1, 3, 7, 11, ...., es una progresión aritmética, con termino inicial –1 y diferencia común es 4, cuya solución es la secuencia {sn} con sn=-1+4n. Fundamentos de Programación
  • 195. Escriba en Racket un programa que permita calcular la suma de los n primeros términos de las siguientes series: 1 + 2 + 3 + 4 + 5 + 6 + 7 +…+ n 1 * 2 * 3 * 4 * 5 * 6 * 7 *….* n 2 + 4 + 6 + 8 + 10 + 12 + 14 +…+ 2n 3 + 5 + 7 + 9 + 11 + 13 + 15 +…+ (2n+1) -4 + 6 – 8 + 10 – 12 + 14 – 16 +…+ (-1)n(2n+2) Fundamentos de Programación
  • 196. Escriba en DrRacket un programa que permita calcular la suma de los n primeros términos de la siguiente serie: .. )!18..!1( 18 )!14..1( 15 )!12..!1( 12 )!87654321( 9 )!6!5!4!3!2!1( 6 )!21( 3             Fundamentos de Programación
  • 197. Escriba en DrRacket un programa que permita calcular la suma de los n primeros términos de la siguiente serie: ...... 16! 16 14)..(1 14 12! 12 10)..(1 10 8! 8 6)5432(1 6         !4 4 )21( 2 Fundamentos de Programación
  • 198. Desarrollar una función (llamada add), que tome dos números naturales, llamados n y x, luego genere n + x sin usar el operador + de DrRacket. Fundamentos de Programación
  • 200. (define (serieseno x n) (cond [(= n 0)0] [else (+ (* (expt -1 (sub1 n)) (/ (expt x (sub1 (* 2 n))) (fact (sub1 (* 2 n))))) (serieseno x (sub1 n)))])) 1)!(2n x 1)(... 7! x 5! x 3! x xsen(x) 12n n 753    1)!(2n x 1)( 1-2n 1-n   Fundamentos de Programación
  • 201. (define (serieseno1 x n) (cond [(= n 0)0] [(=(modulo n 2)0) (- (serieseno1 x (sub1 n)) (/ (expt x (sub1 (* 2 n))) (fact (sub1 (* 2 n)))))] [else (+ (serieseno1 x (sub1 n)) (/ (expt x (sub1 (* 2 n))) (fact (sub1 (* 2 n)))))])) 1)!(2n x 1)(... 7! x 5! x 3! x xsen(x) 12n n 753    Fundamentos de Programación
  • 202. (serieseno1 2 3) ;14/15 (serieseno #i2 3) ; #i0.9333333333333334 (sin 2) ; #i0.9092974268256817 (serieseno #i10 50) ;#i-0.54402111088927 (sin 10) ;#i-0.5440211108893698 (= (serieseno #i20 50) (serieseno1 #i20 50)) ; true Fundamentos de Programación
  • 204. (define (seriecoseno x n) (cond [(= n 0)0] [else (+ (* (expt -1 (sub1 n)) (/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n))))) (seriecoseno x (sub1 n)))])) n)!(2 x 1)(... 6! x 4! x 2! x 1cos(x) n2 n 642  1))!(2(n x 1)( 1)-2(n 1-n   Fundamentos de Programación
  • 205. (define (seriecoseno1 x n) (cond [(= n 0)0] [(=(modulo n 2)0) (- (seriecoseno1 x (sub1 n)) (/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))] [else (+ (seriecoseno1 x (sub1 n)) (/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))])) (2n)! x 1)(... 6! x 4! x 2! x 1cos(x) 2n n 642  Fundamentos de Programación
  • 206. (define (seriecoseno2 x n) (cond [(= n 1)1] [(even? n) (- (seriecoseno2 x (sub1 n)) (/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))] [else (+ (seriecoseno2 x (sub1 n)) (/ (expt x (* 2 (sub1 n))) (fact (* 2 (sub1 n)))))])) (2n)! x 1)(... 6! x 4! x 2! x 1cos(x) 2n n 642  Fundamentos de Programación
  • 208. (define (serieex x n) (cond [(= n 0)0] [else (+ (/ (expt x (sub1 n)) (fact (sub1 n))) (serieex x (sub1 n)))])) n! x 1)(... 3! x 2! x x1x)(exp n n 32  1)!(n x 1)( 1)-(n 1-n   Fundamentos de Programación
  • 209. (serieex #i2 2) ;#i3.0 (exp 2) ;#i7.38905609893065 (serieex #i2 20) ;#i7.3890560989301735 (serieex #i2 100) ;#i7.389056098930649 (serieex #i10 200) ;#i22026.46579480671 (exp 10) ;#i22026.465794806725 Fundamentos de Programación
  • 210. Escuela de Ingeniería y Sistemas de Computación Árboles Clase 7
  • 211. Un árbol es una estructura discreta que está formada por un conjunto de vértices conectados por medio de aristas y donde no hay circuitos. ¿Qué son los árboles? Fundamentos de Programación
  • 212. Es una de las estructuras más utilizadas en computación, y se requiere aprender a representarlas y el manejo de sus operaciones. ¿Por qué los árboles? Fundamentos de Programación
  • 213. Un árbol binario es una estructura recursiva, generalmente compuesta por un elemento raíz y por dos subárboles: el subárbol izquierdo y el subárbol derecho. Árboles Binarios Fundamentos de Programación
  • 214. ¿Cómo construir un árbol en un lenguaje de programación? Se puede resumir en los siguientes pasos: Pensar que datos se quieren almacenar y definir las estructuras correspondientes. Que tipo de árbol se quiere usar y definir la estructura para los vértices. Construir el árbol con los datos que se requiera. Árboles Binarios Fundamentos de Programación
  • 215. Los árboles binarios se caracterizan porque cada vértice está conectado a lo sumo con otros dos vértices, de manera directa; es decir, usando una sola arista entre cada par de vértices. Se dice que un vértice está conectado a los otros dos vértices, por medio de dos ramas o enlaces: uno llamado enlace o rama izquierda, y el otro, enlace o rama derecha. Árboles Binarios Fundamentos de Programación
  • 216. 20 2115 arbol1 Ejemplo de árbol binario Fundamentos de Programación
  • 217. Primer paso: No se necesita definir estructuras para almacenar la información de los vértices, ya que solo va a tener números. Construcción de un árbol binario Fundamentos de Programación
  • 218. Segundo paso: Se va a usar árboles binarios, por lo tanto se requiere que la construcción de la estructura vértice tenga tres partes: Construcción de un árbol binario Fundamentos de Programación
  • 219. Segundo paso: Un campo para guardar la información del vértice. Un campo para acceder a uno de los otros vértices: acceso al vértice conectado por medio de la rama izquierda. Un campo para acceder al otro vértice: el acceso al vértice conectado por medio de la rama derecha. Construcción de un árbol binario Fundamentos de Programación
  • 220. En DrRacket se puede escribir así: (define-struct vertice (info izq der)) donde a la estructura asociada a los vertices, se le ha llamado vértice y a sus campos info, izq y der. En info se guardará un número, en izq y der se guardaran nodos. Construcción de un árbol binario Fundamentos de Programación
  • 221. Tercer paso: Ahora se construye el árbol, empezando por el vértice raíz. (define arbol1 (make-vertice 20 (make-vertice 15 empty empty) (make-vertice 21 empty empty))) Construcción de un árbol binario Fundamentos de Programación
  • 222. La definición de un árbol binario será: 1. empty 2. (make-vertice info izq der) donde info es un número, izq, der son árbol binario. Lo anterior indica que un árbol puede estar vacío, y que su definición se hace a partir de los vértices. Definición de datos de un árbol binario: Fundamentos de Programación
  • 223. Ejemplo árbol binarios 20 15 21 2051 arbol2 Ejemplo de árbol binario Fundamentos de Programación
  • 224. Definición de arbol2 (define arbol2 (make- vertice 20 (make- vertice 15 empty empty) (make- vertice 21 (make- vertice 51 empty empty) (make-vertice 20 empty empty) ) ) ) Definición de arbol2 Fundamentos de Programación
  • 225. Operaciones sobre árboles binarios Las operaciones que se utilizan para acceder a los elementos de los árboles binarios son las mismas que se utilizarían para acceder a una estructura con estructuras Operaciones sobre un árbol binario Fundamentos de Programación
  • 226. Funciones sobre árboles binarios Desarrollar una función que retorne el número de elementos de un árbol binario Funciones sobre un árbol binario Fundamentos de Programación
  • 227. Contrato elementosArbol: arbol-binario --> número Contrato Fundamentos de Programación
  • 228. Ejemplo (define arbolPrueba (make-vertice 10 (make-vertice 2 empty empty) empty)) (elementosArbol arbolPrueba) ;;debe producir 2 Ejemplo Fundamentos de Programación
  • 229. Definición (define (elementosArbol arbol1) (cond [ (empty? arbol1) 0] [ else (+ 1 (+ (elementosArbol (vertice-izq arbol1)) (elementosArbol (vertice-der arbol1)) ) ) ] ) ) Definición Fundamentos de Programación
  • 230. Desarrollar una función que determine si un símbolo está en un árbol binario Problema Fundamentos de Programación
  • 231. Definición (define (busquedaArbol sim arbol1) (cond [ (empty? arbol1) false] [ else (cond [ (symbol=? sim (vertice-info arbol1)) true] [ else (or (busquedaArbol sim (vertice-der arbol1)) (busquedaArbol sim (vertice-izq arbol1)) ) ] ) ] )) Definición Fundamentos de Programación
  • 232. Árbol binario de búsqueda Un árbol binario de búsqueda es un árbol binario, donde cada vértice tiene un valor mayor que los vértices situados a su izquierda, y tiene un valor menor que los vértices situados a su derecha. Es una estructura eficiente al momento de hacer búsquedas. Árbol Binario de Búsqueda Fundamentos de Programación
  • 233. Árbol binario de búsqueda Un arbol-binario-busqueda es: 1. empty 2. (make-nodo info izq der) donde: izq y der son arbol-binario-busqueda. Todos los valores tomados por los vértices a la izquierda deben ser menores que info. Todos los valores tomados por los vértices a la derecha deben ser mayores que info. Árbol Binario de Búsqueda Fundamentos de Programación
  • 234. Árbol binario de búsqueda Escriba una función que permita determinar si un número se encuentra en un Árbol Binario de Búsqueda Árbol Binario de Búsqueda 21 2318 Fundamentos de Programación
  • 235. Aplicación de los Árboles Los investigadores médicos representan la información familiar mediante árboles para estudiar enfermedades de tipo hereditarias. Por ejemplo, requieren buscar en algún momento sobre un árbol familiar, un cierto tipo de color de ojos. Trabajaremos en la representación de árboles familiares y funciones para procesarlos. Aplicaciones de los Árboles Fundamentos de Programación
  • 236. Solución Para resolver este problema utilizaremos el tipo de dato abstracto ARBOL que modela de forma adecuada la información requerida. Solución Fundamentos de Programación
  • 237. Análisis y Definición de Datos Paso 1: Análisis y Definición de Datos Necesitamos una estructura para representar los nodos del árbol. Esta estructura debe almacenar los datos necesarios del problema: (define-struct hijo (padre madre nombre edad ojos)) Análisis y Definición de Datos Fundamentos de Programación
  • 238. Análisis y Definición de Datos Se define un árbol familiar de ancestros como una colección de nodos donde: Un nodoAFamiliar es: 1. empty o 2. (make-hijo p m no fn co) donde p y m son de tipo nodoAFamiliar, no y co son símbolos; y fn es un número. (define-struct hijo (padre madre nombre fechaNac ColorOjos)) Análisis y Definición de Datos Fundamentos de Programación
  • 239. Ejemplo ;PADRES (define Eva (make-hijo empty empty 'Eva 1965 ‘blue)) (define Fred (make-hijo empty empty 'Fred 1966 ‘brown)) ;HIJO (define Gustav (make-hijo Fred Eva 'Gustav 1988 ‘brown)) Análisis y Definición de Datos Fundamentos de Programación
  • 240. ¿Cómo se establecen las conexiones del hijo al padre en esta representación? Pregunta Fundamentos de Programación
  • 241. Paso 2 y 3: Contrato y Propósito Una vez se tiene el modelo para representar la información del problema, se pasa a trabajar en la función. ;; CONTRATO: ancestro-ojos-azules? : nodoAFamiliar -> booleano ;; PROPOSITO: Determinar si un nodoAFamiliar contiene una estructura hijo con ojos azules. Contrato y Propósito Fundamentos de Programación
  • 244. ;; Primera Generación (ABUELOS): (define Carl (make-hijo empty empty 'Carl 1926 'verde)) (define Bettina (make-hijo empty empty 'Bettina 1926 'verde)) ;; Segunda Generación (HIJOS): (define Adam (make-hijo Carl Bettina 'Adam 1950 'amarillo)) (define Dave (make-hijo Carl Bettina 'Dave 1955 'negro)) (define Eva (make-hijo Carl Bettina 'Eva 1965 'azul)) (define Fred (make-hijo empty empty 'Fred 1966 'gris)) ;; Tercera Generación (NIETOS): (define Gustav (make-hijo Fred Eva 'Gustav 1988 'cafe)) Pruebas Fundamentos de Programación
  • 245. ;;llamado función (ancestro-ojos-azules? Carl) ;;false (ancestro-ojos-azules? Gustav) ;;true Pruebas Fundamentos de Programación