Documente Academic
Documente Profesional
Documente Cultură
INTRODUCCIN
Se espera seguir mejorando en un futuro este material. Por ahora espero que sirva
como una base para aprender algunos conceptos de la programacinFuncional
en Scheme.
CONTENIDO
TEMA
1. CONCEPTOS MATEMATICOS BASICOS
PAG.
4
11
13
19
21
34
4. CONDICIONALES
35
TALLER CONDICIONALES
5. FUNCIONES AUXILIARES
48
51
60
63
TALLER RECURSIVIDAD
7. ESTRUCTURAS
74
75
TALLER ESTRUCTURAS
8. FUNCIONES CON ESTRUCTURAS
80
81
90
92
99
100
104
105
116
117
TALLER VECTORES
13. LOCAL
126
127
TALLER LOCAL
14. ARBOLES BINARIOS
129
130
Identificadores:
Tipos de Datos
Operadores y operandos
Expresiones
Los valores que se le asignan a una variable solo pueden tomar valores del mismo
tipo de la variable.
Los identificadores o sea los nombres que se le dan a las variables o constantes,
elegidas para el algoritmo o programa deben ser significativos y tener relacin con
el objeto que representan por ejemplo:
nombrePerson: puede ser el nombre de una variable para representar nombres de
personas.
Precio: para representar precios de diferentes artculos
Notas: para representar las notas de un curso.
Ejemplo
LongitudCircunferencia= 2*Pi * radio
5
TIPOS DE DATOS
Naturaleza del conjunto de valores que puede tomar una variable o constante.
Los tipos de datos se clasifican en:
Simples
a) Numricos (number): Permite representar valores escalares en forma numrica
Ejemplo 4, 2, 5, 3.14
b) Lgicos (boolean): Solo pueden tener dos valores cierto o falso. Representa el
resultado de una comparacin entre otros datos o expresiones.
Ejemplo la comparacin (5>3) es verdadera y la expresin (1>2) es falsa
calle_3
Sandra
Juan_Carlos_Lopez
Compuestos:
a) Estructuras
b) Listas
c) Arreglos
d) rboles
Que se estudiaran en captulos posteriores.
OPERADORES Y OPERANDOS
Elementos que relacionan de forma diferente dos valores de una o ms variables
y/o constantes.
Aritmticos: Permiten la realizacin de operaciones matemticas.
EXPRESION
RESULTADO
7/2
3.5
12 mod 7
4+2x5
14
EXPRESIONES:
Son combinaciones de constantes, variables (operandos), operadores, parntesis
y nombres de funciones. Ejemplos
A+ (b +3)/c
X= v + l
Segn el tipo de datos que manipulan estas pueden ser:
a) Aritmticas
b) Relacinales
e) Lgicas
PRIORIDAD DE LOS OPERADORES ARITMETICOS
1 : (exponenciacin)
2. mod (modulo o residuo de la divisin entre dos nmeros enteros),
div (cociente de la divisin entre dos nmeros enteros)
x(multiplicacin),
/ (divisin)
3. + (suma)
- (resta)
Como se observa hay operadores con igual nivel de prioridad.
Ejemplos
1) 4+2*5 2) 23*2/5
2.1*(1.5+3.0*4.1)
4+10
46/5
14
9.2
2) 3+5*(10- (2+4))
3+5*(10- 6)
3)
2.1*(1.5+12.3)
3+5*4
2.1*13.8
3+20
28.98
23
4) 3.5+5.09 - 3.5=
3.5+5.09-3.5=
8.59-3.5=
5.09
Cociente o div
1 3
Residuo o mod
En caso de que los nmeros no sean enteros no se les puede aplicar el mod por
ejemplo 6.7 mod 2 sera un error!
>
9
Menor que
<
<>
Igual
(not (=))
10
Ejemplos
Si a=10
b=20 c=30
1) a<b es Verdadero
3) a + b>c
2) c>a es Verdadero
4) a - b<c
10+20>30
10 - 20 < 30
30 >30
-10 < 30
Falso
Verdadero
5) a *b <>c
10*20<>30
200<>30
Verdadero
Or
Not
Negacin
Operador Operando 2
Resultado
AND
Operando 1
Operador Operando 2
Resultado
OR
Operando 1
Resultado
Not
V: Verdadero
F: Falso
Ejemplos
1) Si a=10, b=20 y c=30
(a<b) and (b<c)
(10<20) and (20 < 30)
V
and V
V
d =10
or
V
V
) and (
and
or
F )
F
3) Not (a=c) and (c>b)
12
and
V
TALLER 1: CONCEPTOS MATEMATICOS BASICOS
2. Para las siguientes variables segn el valor que contienen diga a que tipo
pertenecen:
a)
b)
c)
d)
e)
f)
g)
x=12.4
s=Hola mundo
cadena=hola
placa=3456
color=rojo
afirmacion=true
f=false
a)
b)
c)
d)
e)
f)
13
4. Si a=15 b=35 c=40, Resuelva las siguientes expresiones y diga que valor
toman
a) (a>b) or (a>c)
b) not ( (a+b)>c)
c) ((a>b) or (a <c)) and ((a = c) or (a >= b))
14
2. NOTACION PREFIJA
Antes de empezar a programar en Scheme debemos a aprender la notacin prefija
ya que en este lenguaje todas las expresiones matemticas se escriben en este
tipo de notacin.
En las expresiones prefijo todas las expresiones aritmticas estn en parntesis.
En la notacin prefija primero se especifica el operador y luego los operandos,
separados por espacios.
INFIJO 3 + 8 ----------> Los operadores van en medio de los operandos
POSTFIJO 3 8 + ----------> Los operadores van al final de los operandos
PREFIJO + 3 8 ----------> Los operadores van al inicio de los operandos
Paso de Notacin Infija a Prefija
Ejemplo
Pasar a notacin prefija las siguientes expresiones:
a) 2+8*5+6
2+(8*5)+6
(+ 2 (* 8 5)) + 6
(+ (+ 2 (* 8 5) ) 6)
2 .Luego se recorre la expresin de izquierda a derecha, cuando se encuentra un operador se abre parntesis
15
b) 3+ (2 - 5)
(+ 3 (2 - 5))
(+ 3 (- 2 5))
c) (1 8) / (10 - 100)
(- 1 8) / (- 10 100)
(/ (- 1 8) (- 10 100))
d) 1+2 - 3+4
(+ 1 2) 3 + 4
(- (+ 1 2) 3) +4
(+ (- (+ 1 2) 3) 4)16
e)
5 x + 4 x + 2 x4
(* 5 x x x) + (* 4 x x) + (* 2 x) 4
(+ (* 5x x x) (* 4 x x ) (* 2 x)) 4
(- (+ (* 5 x x x) (* 4 x x) (* 2 x)) 4)
16
a) (- (* 5 7) (+ (* 7 8) 8))
(- 35 (+ de
56izquierda
8))
Recorremos la expresin
a derecha y vamos resolviendo primero los parntesis ms internos.
(- 35 64)= -29
b) (* 5 73 (+ 1 6))
(* 365
Cuando se resuelve
lo que7)=
hay 2555
dentro del parntesis, se quita el parntesis y se escribe solo el resultado de la
c) (* (* 2 4) (+ 8 -9) 7)
(* 8 1 7)= - 56
d) (* 6 8 (+ 100 20))
(* 6 8 80)=3840
e) (- (* 18 3) 5)
(-
54 -5) = -59
f) (/ (+ (* 52 4) 6) 2)
(/ (+ 208 6) 2)
(/ 214 2)
107
g) (* (- (/ 98 3) 5) 4)
(* (- 32.6 5) 4)
17
(* 27.6 4)=110.4
h) (sqrt (+ (* 32 4) 16))
(sqrt (+ 128 16))
(sqrt 144)=12
remainder, obtiene el residuo de la divisin entre dos nmeros enteros.
i) (remainder (* 6 4) (/ 12 5))
(remainder 24 2.4) !error
j) (> 5 (* 10 4))
(> 5 40)
falso
k) (< (+ 8 2) 20)
(< 10 20)
verdadero
l) (not (= 2 3))
(not falso)
verdadero
18
2.
a) (> x 3)
(> 4 3)= verdadero
(> 2 3) =verdadero
(> 7/2 3)=verdadero
verdadero)= verdadero
(+ (+ 9(* 5 6))2)
b) 3 + (2 - 5)
(+ 3(2 - 5))
(+ 3(- 2 5))
c)
( 10 * 2) + (15 - 5)
(* 10 2) + (- 15 5)
(+(* 10 2)(- 15 5))
(*(+ 2 10 7)9)
(* 19 9 )
171
20
c) (/(+(* 52 4)6)2)
(/(+ 208 6)2)
(/ 214 2)
= 107
e)
10 5) (+ 35 15))
a) [ (25 + 5) * 2] - 60
b) 50 * [(-50 + -15) * (-80 + 20)]
c) 2 * [(-5 + -15) + (-80 + 90)]
21
d)
e)
f)
g)
i)
a3 b 3
3 Que respuestas devuelven las siguientes expresiones
b) (+ (* 2 (- 82 67.5)) 100)
c) (/ (+(* 52 4) 6)2)
d) (* (- (/ 98 3)5) 4)
e) (sqrt (+ (* 32 4) 16))
f) (remainder (* 6 4 ) (/ 12 5))
5 Para a) x=9
b) x = 3
c) x = 15/ 2
Para que la maquina entienda los algoritmos y los procese se necesitan que estn
escritos en un lenguaje propio de la maquina o sea un lenguaje de programacin.
Scheme nace a partir de list, sin embargo permite otras caractersticas como la
asignacin y por eso se le conoce como un lenguaje funcional impuro.
El valor de una expresin depende solo de los valores de sus subexpresiones, si
las tiene. Tiene una sintaxis sencilla, y muy poderosa.
Se basa en la evaluacin de expresiones en lugar de la ejecucin de
instrucciones.
Permite la reutilizacin de cdigo.
Datos fuertemente tipados: No acepta usar una variable en una funcin si sus
datos no coinciden
para
24
Ejemplo
Hagamos una funcin para sumar dos nmeros
x de tipo numrico
y de tipo numrico
Una vez tenemos claro estos paso hacemos el cuerpo del programa
Bueno para escribir una funcin en Scheme tengamos en cuenta las siguientes
cosas:
En Scheme todo va en parntesis, cada parntesis que abre debe cerrarse, para
iniciar una funcin utilizamos la palabra define para indicar que inicia el programa.
Luego se abre un parntesis en el cual se encierra el nombre que le damos a la
funcin, para darle el nombre pensemos en cul es el dato de salida, esos nos da
una idea de cmo podemos llamar a la funcin. Seguido al nombre del programa
vienen todas las variables o datos de entrada. Y luego viene la frmula que
resuelve el problema que debe estar escrita en prefijo.
25
;Cuerpo de la funcin
;Pruebas
(suma 7 8)
Observe que esta instruccin no va antecedida por ; (punto y coma), ya que se necesita que sea leda por e
(suma 20 30)
26
Ejemplo
Hacer un programa para hallar el rea de un triangulo
; Propsito: calcular el rea de un tringulo
; Anlisis
; Nombre funcin: AreaTriangulo
; Datos entrada:area: number y base:number
; Tipo de dato de salida: number
Nombre de la funcin
; Prueba
(area 3 4)
Tenga en cuenta que la instruccin que hace la prueba no va en comentario (antecedido por ;)
27
EL ENTORNO DE DR SCHEME
1) Hacemos clic en
Inicio->Todos los programas->PLT Scheme->Dr Scheme
28
30
4) Ejecutemos el programa
Posibles causas
32
Ejemplo
Hallar el rea de un cuadrado
; Funcin
(define (area l)
(* l l))
; Prueba
(area (read)) ; aca se llama la funcin y se le envia como parmetro el
valor ledo
33
EJERCICIOS RESUELTOS
Ejercicio 1
La presin, el volumen y la temperatura de una masa de aire se relacionan por la
frmula: Masa=(presion*volumen)/ (0.37 * (temperatura+460)). Realizar una
funcin que permita hallar la masa conociendo la formula anterior.
; Propsito: hallar la masa
; Anlisis
; Nombre funcin: masa
; Datos de entrada : presin: numrico, volumen: numrico,
temperatura: numrico
; Tipo de dato salida: numrico
; Cuerpo de la funcin
(define(masa presin volumen temperatura)
(/(* presin volumen)(* 0.37(+ temperatura 460))))
; Prueba
(masa 2 4 6)
Ejercicio 2
Todos los lunes, mircoles y viernes, una persona corre la misma ruta y
cronometra los tiempos obtenidos. Realizar una funcin para determinar el tiempo
promedio que la persona tarda en recorrer la ruta en estos tres das.
; Cuerpo de la funcin
(define (tiempodeRecorrido t1 t2 t3)
(/(+ t1 t2 t3 )3))
;Llamado de la funcin
(tiempodeRecorrido 20 30 40 )
Ejercicio 3
Dado 5 nmeros a, b, c, d, e. Disee una funcin que permita calcular el promedio
de ellos.
; Propsito : disear un programa que permita calcular el promedio de
cinco nmeros
; Anlisis
; Nombre funcin: promedio
; Datos de entrada : n1:numrico n2:numrico n3:numerico
n4:numerico n5:numerico
; Tipo dato salida: numrico
; Cuerpo de la funcin
(define(promedio n1 n2 n3 n4 n5)
(/ (+ n1 n2 n3 n4 n5)5))
;llamado de la funcin
35
(promedio 1 2 3 4 5)
Ejercicio 4
Hacer una funcin que calcule el rea de un cuadrado
; Cuerpo de la funcin
(define (areaCuadrado l)
(* l l))
; Llamado funcin
(areaCuadrado 20)
Ejercicio 5
Una empresa paga $8000 por hora a todos sus empleados, Desarrolle la funcin
que determine el ingreso del empleado.
;Llamado funcin
(ingreso 8)
Ejercicio 6
Realizar una funcin que permita calcular el rea de un crculo del cual se conoce
su dimetro (el dimetro es igual a dos veces el radio).
;Cuerpo de la funcin
(define (AreaCirculo Diametro)
( * 3.14( expt ( / Diametro 2) 2)))
;Prueba
(AreaCirculo 3)
37
1. Hacer una funcin que calcule el nuevo salario de un obrero si se sabe que
obtuvo un incremento del 25% sobre su salario anterior.
3. Hacer un programa para calcular la distancia entre dos puntos dados por la
formula
( y y ) +(x x )
2
4 r2
y el volumen por
4 3
r
3
38
3. CONDICIONALES
Definicin de variable
Antes de entrar en el tema de condicionales aprendamos a definir una variable en
Scheme. Una variable se define cuando se quiere dar un valor a la variable y de
ah en adelante cuando se hace referencia a la variable esta contiene el valor
definido en ella.
Ejemplo
(define p 3.14)
en
Scheme
el
programa
Funcin
Ejemplo
string?
string=?
(llamado tambin
alfanumerico o cadenas)
Devuelve false ya que son
son iguales, en caso de
cadenas diferentes
serlo devuelve true en
caso contrario retorna false
symbol?
symbol=?
boolean?
boolean=?
(symbol? Juguete)
Retorna true
devuelve false
CONDICIONALES EN SCHEME
Permiten resolver problemas donde existen diferentes alternativas o caminos a
tomar en su desarrollo.
Sentencia if
Veamos su sintaxis:
40
(accion2))
Ejemplo
Determinar si un nmero es par o no
Como se sabe un nmero es par cuando es divisible por 2 es decir el residuo de la
divisin del nmero por 2 es 0, para lo cual utilizamos el operador remainder.
;Anlisis
; Nombre funcin:ParImpar
; Datos de entrada: n:number
Cuando la condicin se cumple , es decir es verdadero que el residuo de n con 2 es igual a 0, se muestra por
(define (ParImpar n)
(if (= remainder n 2) 0) Es par
Es impar))
;Prueba
(ParImpar 10) ;devuelve Es par
(ParIMpar 7) ;devuelve Es impar
41
EJERCICIOS RESUELTOS
Ejercicio 1
Realizar una funcin que permita calcular el total que una persona debe pagar en
una llantera. El precio de cada llanta es de $300.000, si se compran menos de 5
llantas; y de $ 200.000 si se compran 5 o ms llantas.
; Definicin de la funcin
(define(valorpagar llanta)
(if (<=cantidasLlantas 5)(* cantidadLlantas 300000) (*
cantidadLlantas 200000)))
; Prueba
(valorpagar 6)
(valorpagar 3)
(valorpagar 5)
Ejercicio 2
Hacer una funcin que calcule el valor absoluto de un nmero.
; Anlisis
42
(define(absolutoNumero)
(if(<= numero 0)(* numero -1) (* numero 1)))
;prueba
(absoluto -5)
(absoluto -8)
(absoluto 6)
Ejercicio 3
Hacer una funcin que determine cunto gana un empleado, si el empleado
trabaja ms de 160 horas se le pagara a $3000 por hora, si trabaja 160 horas o
menos se le pagara la hora a $2500 por hora
; Anlisis
; Propsito: Determinar cunto gana un empleado
;Nombre funcin: salario
;Datos de entrada: HorasT: numrico
;Tipo dato salida: numrico
43
; Funcin:
(define(salario HorasT)
(if(> 160 HorasT)(* 3000 HorasT) (* 2500 HorasT)))
;Prueba:
(salario 190)
(salario 140)
(salario 160)
Ejercicio 4
Haga una funcin que lea dos nmeros los multipliqu y muestre su resultado,
solo si el segundo nmero es negativo
;Anlisis
; Propsito: multiplicar dos nmeros solo si el segundo es negativo
; Nombre: multiplicacin
;Datos de entrada: a: numrico b: numrico
;Datos de salida: numrico
; Funcin
(define (multiplicacion a b)
(if (< b 0) (* a b) "El segundo nmero no es negativo"))
; Prueba
(multiplicacion 4 -6)
44
(multiplicacion 4 7)
(multiplicacion 3 -1)
Ejercicio 5
Hacer una funcin que compruebe si dos nmeros son iguales
b:numrico
; Funcin
(define (igual a b)
(if (= a b) "son iguales" "son diferentes"))
; Prueba
(igual 2 4)
(igual 4 4)
(igual 0 0)
45
Sentencia Cond
Se utiliza cuando existen muchas condiciones o alternativas dentro de la funcin.
(cond
(condicion1 accion1)
(condicion2 accion3)
.
.
.
(condicionN accionN)
(else accionN))
46
Ejemplo
Determinar si un n dado es solucin de la ecuacin
4 n2+ 6 n+2=462
Ejemplo
En una Universidad existen tres programas acadmicos que son: Licenciatura
Matemticas, Tecnologa en Electrnica, y Tecnologa en Sistemas, los cuales
tienen un costo de $1.000.000 para Tecnologa Electrnica, $1.200.000 para
Matemticas y $1.300.000 para Tecnologa en Sistemas, adems de esto los
estudiantes tienen un descuento del 10% si pertenecen a estrato 2 y del 20% si
pertenecen a estrato 1: Hacer un programa que dado el estrato al cual pertenece
el estudiante y la carrera que quiere estudiar determine el costo de su matrcula.
47
y carrera: string
; Definicin de variables
(define TE Tecnologa en electrnica)
(define TS Tecnologa de Sistemas)
Se saca el porcentaje y se descuenta al valor original de la matrcula.
(define M Matematicas)
; Llamado de la funcin
(costo
TEfuncin
2) ; debe
devolver
900.000
El llamado
de la
se puede
hacer con
las variables ya definidas o con el nombre de la carrera.
(costo M 1); debe devolver 960.000
(costo Matematicas 1) ;debe devolver 960.000
EJERCICIOS RESUELTOS
Ejercicio 2
Hacer una funcin que lea tres nmeros distintos, valide que no sean iguales y
determine cul es el mayor.
;Cuerpo de la funcion:
( define ( iguales x y z )
( cond
(( and ( = x y ) ( = x z ) ( = z y ) ) "son iguales" )
(( and ( > y x ) ( > y z )) "y es mayor" )
(( and ( > x y ) ( > x z )) "x es mayor" )
(( and ( > z x ) ( > z y )) "z es mayor" )
( else "no pueden ser iguales" )))
49
;Llamado de la funcin
( iguales 1 1 4 )
50
Ejercicio 2
Desarrolle una funcin llamada soluciones que reciba los coeficientes a, b, c de
una ecuacin cuadrtica de la forma
a x 2+ bx+ c=0
y determine cuantas
b 2 4ac
b 2 4ac
No tiene solucin si
b 2 4ac
Por ejemplo si a=1, b=0 y c= 1 la ecuacin tiene 2 soluciones. Si a=2, b=4, c=2
la ecuacin tiene 1 solucin.
;Cuerpo de la funcin:
( define ( soluciones a b c )
( cond
[( > ( expt b 2 ) ( * 4 a c )) " tiene dos soluciones" ]
[( = ( expt b 2 ) ( * 4 a c )) "tiene una solucin" ]
[ else "no tiene solucin" ]))
51
;Llamado funcin
( soluciones 1 0 -1 )
Ejercicio 3
Hacer una funcin que sume dos nmeros solo si el segundo nmero es mayor al
primero.
; Funcin
( define ( suma num1 num2 )
( cond
[( < num1 num2 ) ( + num1 num2 )]
( else "el segundo nmero no es mayor" )))
; Prueba
( suma 7 8 )
Ejercicio 4
En un supermercado se hace una promocin, mediante la cual el cliente obtiene
un descuento dependiendo de un nmero que se escoge al azar, si el nmero
52
; Cuerpo funcin
( define ( descuento numAzar precio )
( cond
[( < numAzar 74 ) ( / ( * precio 15 ) 100 )]
[( >= numAzar 74 ) ( / ( * precio 20 ) 100 )]))
; Prueba
( descuento 75 100000 )
TALLER 4: CONDICIONALES
Ginecologa
35%
Traumatologa
25%
Pediatra
30%
El
Hacer una funcin que reciba el nombre de un rea del hospital y el monto
presupuestal y determine la cantidad de dinero que le corresponde a esta rea.
4. En una fbrica de computadoras se plantea ofrecer a los clientes un descuento
que depender del nmero de computadoras que compre. Si las computadoras
son menos de 5 se le dar un 10% de descuento sobre el total de la compra, si
el nmero de computadoras es mayor o igual a 5 pero menos de 10 se le
otorgara un descuento del 20%; y si son 10 o ms se les da un 40% de
descuento. El precio de cada computadora es de $1.100.000. Realice una
funcin que calcule cunto se paga finalmente por la compra de las
computadoras.
5. Haga una funcin que lea dos nmeros los multiplique y muestre su resultado,
solo si el segundo nmero es negativo.
54
6. Una Aerolnea desea saber cunto debe cobrar a sus pasajeros por la compra
de un tiquete, dependiendo de las siguientes condiciones:
Los destinos de la Aerolnea son Bogot y San Andrs
Un tiquete se puede comprar faltando 2, 1 o el mismo da del viaje (0)
Un tiquete comprado a Bogot faltando 2 das tiene un costo de $ 150000,
faltando 1 da su costo se eleva en un 5% y el mismo da en un 8% ms que
faltando 1 da, es decir un 8% ms sobre el valor del tiquete faltando 1 da.
A San Andrs el costo del tiquete es de $ 395.000 si es comprado faltando 1
da, si es faltando 2 das su costo se reduce en un 7% y si es el mismo da el
valor es mayor en un 5% sobre su valor.
55
5. FUNCIONES AUXILIARES
El uso de funciones auxiliares hace que el diseo de programas sea ms
manejable y agradable, permitiendo descomponer un problema en pequeos
subproblemas.
Se pueden definir mltiples funciones auxiliares, el orden de definicin no afecta
su llamado.
Desde una funcin se puede llamar a otra funcin.
Ejemplo
Si diseamos una funcin que calcule el rea de un crculo seria de la siguiente
forma.
; Cuerpo de la funcin
(define (areaCircunferencia radio))
(* 3.14 radio radio))
Ahora si luego queremos hacer una funcin para calcular el volumen de una
esfera, pero sabemos que el volumen de una esfera se puede calcular
multiplicando el rea del crculo por el radio, entonces como ya tenemos diseada
la funcin que calcula el rea del crculo podemos utilizarla para calcular el
volumen de la esfera.
56
; Funcin Principal
; Propsito: calcular el volumen de una esfera
; Anlisis de datos
; Nombre de la funcin: VolumenEsfera
; Datos de entrada: r : number
; Tipo de dato de salida: number
(define (VolumenEsfera r)
(* ( / 4 3) (areaCircunferencia r)))
Ejemplo
Usando la funcin auxiliar del rea de la circunferencia calcular el rea de un anillo
que tiene un radio externo y un radio interno
; Funcin auxiliar
; Propsito: calcular el rea de una circunferencia
;Anlisis de datos
;Nombre de la funcin: areaCircunferencia
; Datos de entrada: radio: number
57
;Cuerpo de la funcin
(define (areaCircunferencia radio)
(* 3.14 radio radio))
;************************************************
;Funcin principal
;Propsito: calcular el rea de un anillo
; Anlisis de datos
; Nombre de la funcin: areaAnillo
; Datos de entrada: rexterior :number, rinterior:number
; T.D.S:number
; Prueba
(areaAnillo 5 4)
EJERCICIOS RESUELTOS
Ejercicio 1
Un alumno desea saber cul ser su nota final en una materia, dado el nombre de
la materia. Estas materias se evalan como se muestra a continuacin:
La calificacin de matemticas se obtiene de la siguiente manera: Examen 90%.
Promedio de las tares 10%.
58
;Funcin
(define (notaMatematicas E T1 T2 T3)
(+ (* 0.9 E)
(* (/ (+ T1 T2 T3)3)0.1)))
;Prueba
(notaMatematicas 5 2 3 5)
;******************************
; Propsito:calcular la nota final de fsica
; Anlisis
; Nombre de la funcin: notaFisica
;Datos de entrada: E T1 T2 T3 number
; Tipos de datos de salida: number
; Funcin:
59
(define(notaFisica ex t1 t2 t3)
(+(* ex 0.8)(*(/(+ t1 t2 t3)3) 0.2)))
; Prueba:
(notaFisica 3 5 2 5)
;******************************************
; Propsito: Calcular la nota final de qumica
; Anlisis:
; Nombre de la funcin: notaQuimica
; Datos de entrada:E T1 T2 T3 number
; Tipos de datos de salida: number
; Funcin
(define(notaQuimica ex t1 t2 t3)
(+(* ex 0.85)(*(/(+ t1 t2 t3)3)0.15)))
; Prueba
(notaQuimica 4 1 3 3)
;**********************************************
; Propsito: dado el nombre de la materia y las notas, calcula la nota
para esta materia.
; Anlisis:
; Nombre de la funcin: calculonota
; Datos de entrada: materia: string
;e, t1, t2, t3: number
60
; Prueba
(calculonota "quimica" 5 5 5 5)
Ejercicio 2
Calcular el promedio general de las tres materias.
; Funcin
(define (promediogeneral em t1m t2m t3m ef t1f t2f t3f eq t1q
t2q t3q)
(/ (+ (nota_mat em t1m t2m t3m) (fisica ef t1f t2f t3f) (quimica eq
t1q t2q t3q)) 3))
61
; Prueba
(promediogeneral 3 5 2 3 4 4 2 5 3 5 1 2)
El llamado de una funcin tambin se puede recibir como dato de entrada de una
funcin.
Resolvamos el ejercicio 2 de esta forma.
Ejercicio 3
; Anlisis
; Datos de entrada: notaM notaf notaQ: numericos
; Datos de salida: numricos
(define (promedio notaM notaF NotaQ)
(/(+ notaM notaF NotaQ)3))
; Prueba"
(promedio (notaMatematicas 3 5 2 3) (notaFisica 4 4 2 5) (notaQuimica
3 5 1 2))
;*******************
Otra forma de resolver el ejercicio es definiendo en variables el llamado
de las funciones que calculan la nota en cada materia, y luego utilizar
estas variable en el llamado de la funcin promedio.
(promedio m f q)
Ejercicio 4
La caja de compensacin da un subsidio de vivienda a los empleados afiliados a
ella. Teniendo en cuenta que si gana $500.000 o menos se le da un subsidio de
$6.000.000
Si gana ms de $500.000 y menos o igual a $1500.000 se le da un subsidio de
$3.000.000
Si gana ms de $1.500.000 se le da un subsidio de $1.000.000.
Su salario esta dado dependiendo del nmero de horas que trabaja al mes
Si trabaja 160 horas o menos se le paga a $3000 la hora
Si trabaja ms de 160 horas se le paga a $2500 la hora
Realizar un programa que permita calcular el valor del subsidio del trabajador,
conociendo el nmero de horas trabajadas en el mes.
Utilice funciones auxiliares (para calcular el salario)
; Funcin
(define(salario h)(cond
((<= h 160) (* h 3000))
((> h 160) (* h 2500))))
63
; Prueba
(salario 160)
;*************************************************
; Funcin principal
; Propsito: calcular el subsidio que da la caja de compensacin a un
empleado
; Anlisis
; Dato entrada: horas: number
; TDS:number
;Funcin
(define (subsidio horas)
(cond
[(<= (salario horas) 500000)6000000]
[(and(> (salario horas)500000) (<(salario horas)1500000))30000000]
[(> (salario horas)1500000)1000000]
(else "dato invalido")))
; Prueba
(subsidio 170)
(subsidio 600)
;***************************************************************
64
; Funcin
(define (subsidio2 salario)
(cond
[(<= salario 500000)6000000]
[(and(> salario 500000) (< salario 1500000)) 3000000]
[(> salario 1500000)1000000]
(else "dato invalido")))
; Prueba
(subsidio2 (salario 170))
Reduccin:
65
5. Hacer otra funcin que diga a que elemento pertenece un signo zodiacal, dado
el da y mes de nacimiento. (utilizar la funcin anterior)
Tenga en cuenta:
Los signos zodiacales Aries, Leo y Sagitario pertenecen al Elemento Fuego
Los signos zodiacales Tauro, Virgo y Capricornio pertenecen al Elemento Tierra
Los signos zodiacales Gminis, Libra y Acuario pertenecen al Elemento Aire:
67
6. RECURSIVIDAD
La Recursin o Recursividad consiste en realizar una definicin de un concepto en
trminos del propio concepto que se est definiendo.
Ejemplos
Los nmeros naturales se pueden definir de la siguiente forma:
0 es un Nmero natural y el sucesor de un nmero natural es tambin un nmero
natural.
El factorial de un nmero natural n, es 1 si dicho nmero es 0,
o n multiplicado por el factorial del nmero n-1, en caso contrario.
Ejemplo
Realizar una funcin que sume los n primeros nmeros. Sumar los n primeros
nmeros es igual a la suma de los n-1 trminos ms n y as sucesivamente hasta
llegar a 1.
; Anlisis de datos
; Nombre de la funcin: suma
; Datos de entrada :n: number
; Tipo del dato de salida :number
; Prueba
(suma 5)
En una funcin recursiva en vez de llamar una funcin auxiliar diferente se llama a
ella misma y este proceso se repita hasta que se cumpla una condicin de parada
Ejemplo
Realizar una funcin recursiva que permita hallar la suma de la serie de los
nmeros impares, desde 1 hasta n.
; Cuerpo de la funcin
(define (impares n)
(cond
[(or (= n 1) (= n 0))1]
((= (remainder n 2) 0) (impares (- n 1 )))
(else (+ n (impares (- n 2)))) ))
;Prueba
(impares 5); devuelve 9
(impares 10) ;devuelve 25
Internamente el programa har algo as, aunque nosotros solo vemos el resultado
final. (Prueba paso a paso)
(impares 5)
(impares 5)
(impares 9)
(impares n)
( impares 9)
10
Ejemplo
70
= 4!
o sea que
5! = 5* !4
Y si nos damos cuenta
4!= 4* 3 * 2
Y 3!=3* 2 * 1
= 3!
= 2!
2!=2* 1
Entonces definamos la funcin factorial
;Cuerpo de la funcin
(define (factorial m)
(cond
((> m 1) (* m (factorial (- m 1)))]
[else 1]))
; Prueba
71
( * 5 (factorial 4))=120
(* 4 (factorial 3))=24
(* 3 (factorial 2))=6
(* 2 (factorial 1))=2
EJERCICIOS RESUELTOS
Ejercicio 1
Realizar una funcin que muestre los nmeros menores que n
; Cuerpo de la funcin
(define(menores n)
(cond
((< n 1)"Dato Invalido")
((= n 2)1)
(else(begin(display(- n 1))(menores(- n 1))))))
72
Ejercicio 2
Realizar una funcin que calcule la suma de los n primeros nmeros pares
;Funcin:
(define (par n)
(cond
((=(remainder n 2) 1) (par (- n 1)))
((or (= n 2) (= n 0)) n)
(else (+ n (par (- n 2))))))
;Prueba
(par 7)
(par 10) ;
Ejercicio 3
Mostrar los mltiplo de 7 hasta un nmero dado.
;Funcin:
(define (multiplos num n)
(cond
[(> (* 7 num) n) "termin. "]
[else (begin (display (* 7 num)) (display " ")(multiplos (+ num 1) n))]))
;********************
; Propsito: llamar a la funcin mltiplos
; Anlisis: dato de entrada n :numerico
; Tipo de dato de salida: numrico
; Funcin
(define (multiplosdeSiete n)
(multiplos 1 n))
; Prueba
(multiplosdeSiete 2000)
Ejercicio 4
Dado un nmero en decimal, obtener el equivalente binario.
;Funcin
(define (binario x)
(cond
;Prueba
(binario 20)
Ejercicio5.
Mostrar la serie matemtica de Fibbonaci
; Funcin principal
75
(define (serie-fib N)
(cond
[(< N 0) " "]
[else ( begin (serie-fib (- N 1))(display (fib N))(display " "))]))
; Prueba
(serie-fib 5)
Ejercicio 6
Mostrar los nmeros pares de 2 hasta n, donde n debe ser par
; Prueba
76
Ejercicio 7
Realizar una funcin que dado un trmino calcule el resultado de la sumas de los
trminos de la serie de Fibonacci hasta ese nmero.
;Cuerpo de la funcin
(define(Fibonacci n)
(cond
((= n 0)0)
((= n 1)1)
(else(+(Fibonacci(- n 1))(Fibonacci(- n 2))))))
Ejercicio 8
Realizar una funcin que calcule la potencia de un nmero, dado la base y el
exponente.
; Cuerpo de la funcin:
(define (potencia base exponente)
(cond
((= exponente 1)base)
(else(* base(potencia base(- exponente 1))))))
78
TALLER 6: RECURSIVIDAD
1 Lea un nmero y determine si es primo o no; un nmero es primo si no es
divisible por otro nmero diferente del mismo o la unidad.
Por ejemplo el nmero 7, aparte de el mismo y el nmero 1 no hay otro nmero
que lo divida, por lo tanto es primo.
2 Realizar una funcin que muestre los nmeros cuadrados desde n hasta 1.
3 Realizar una funcin que calcule el cociente de la divisin entre dos nmeros
por medio del mtodo se restas sucesivas. (investigar)
79
7. ESTRUCTURAS
80
Selectores
Son las operaciones que nos van a permitir acceder a los elementos de una
estructura
(NombreEstructura-nombreCampo (EstructuraParticular))
Ejemplo
Manejemos una estructura CD donde nos interesa el nombre, nmero de
canciones, autor y precio. Como vemos la estructura va a estar formado por los
campos nombre, autor que son de tipo string y los campos nmero de canciones y
precio que son de tipo numrico.
Definamos la estructura
(define-struct CD (nombreCD autor Ncanciones precio))
81
Ejemplo
Una estructura Fruta
Operador ?
Podemos comparar si una variable es de determinado tipo de estructura,
colocando el signo ? a la estructura base seguido de la variable, como se observa
a continuacin:
EJERCICIOS RESUELTOS
Ejercicio 1
Definir una estructura helado con los campos: sabor, cantidad y precio.
83
Ejercicio 2
Crear tres estructuras particulares de helados
Ejercicio 3
Definir una estructura de marcas de partes de una skateboard con los campos:
ruedas,rodamientos,trucks y madero. Y definir 4 estructuras particulares
;Definicin de estructuras.
(define-struct skateboard (ruedas rodamientos trucks madero))
84
Ejercicio 4
Aplique cada uno de selectores para obtener un campo distinto de cada estructura
particular de los ejercicios 2 y 3.
(helados-sabor Hela1)
(helados-cantidad Hela2)
(helados-precio Hela3)
(skateboard-madero board1)
(skateboard-rodamientos board2)
(skateboard-trucks board3)
(skateboard-ruedas board4)
TALLER 7: ESTRUCTURAS
85
Dato
de entrada:
Estudiante
Este ;es
el nombre
con el E:
que
se defini la estructura. La funcin recibe un dato de tipo Estudiante
; Tipo datos de salida: number
; Cuerpo de la funcin
define (promedio E)
(/ (+ (Estudiante-nota1 E) (Estudiante-nota2 E) (Estudiantes-nota3 E))
3))
; Prueba
(promedio estudiante1)
(promedio estudiante2)
Ejemplo
Desarrollar una funcin que calcule el rea de una estructura crculo o rectngulo.
; Cuerpo de la funcin
(define (area figurita)
(cond
[(rectangulo? figurita) (* (rectangulo-ancho figurita)(rectangulo-largo figurita))]
[(circulo? figurita) (* (circulo-radio figurita)3.14)]))
;Prueba
(area rectangulo1) ;retorna 20
(area circulito) ;retorna 6.28
Ejemplo
Hacer una funcin que reciba una estructura libro y retorne el mismo libro pero con
el precio incrementado en 15% si la editorial es oveja Negra, en un 10% si la
editorial es Planeta de lo contrario no incremente el precio del libro.
; Definicin de datos
(define-struct Libro (nombre autor editorial precio))
88
;Libro es una estructura donde los campos nombre, autor , editorial son de tipo
string y precio es de tipo number.
Como se modific un valor de un campo de la estructura entonces la estructura se debe volver a construir.
89
;Quedando finalmente
(make-libro 100 aos de soledad Gabriel Garca Mrquez Oveja Negra
80500)
Ejemplo
Desarrolle Un programa que a partir de dos artculos diferentes determine el
nombre del almacn que ms ventas al ao ha tenido.Cada artculo tiene la
siguiente informacin: nombre del artculo, nombre del almacn donde se vende el
artculo, costo de produccin unitario, valor venta unitario, nmero de ventas al
ao.
;Definicin de datos
(define-struct Articulo (nombreArticulo VVUnitario NVA Nalmacen
CostoProduccion))
;Articulo es una estructura donde nombreArticulo Nalmacen son string
y CostoProduccion y NVA son de tipo numrico
Las estructuras particulares se definen para probar o ejecutar la funcin, pero es opcional definirlas.
90
;Prueba
(Ventas articulo1 articulo2); Devuelve Carrefour
EJERCICIOS RESUELTOS
Ejercicio 1
Se tiene una estructura que contiene el marcador de un partido de futbol, realizar
una funcin determine quin gano el partido o si hubo empate
91
;Anlisis:
;Nombre de la funcin: resultado
;Datos de entrada: e1: estructura partido
; Tipo de Datos de salida: symbol
;Cuerpo de la funcin
(define (resultado e1 )
(cond
[(> (partido-goles1 e1)(partido-goles2 e1)) (partido-nombre1 e1)]
[(< (partido-goles1 e1)(partido-goles2 e1)) (partido-nombre2 e1)]
[else 'empate]))
; Prueba:
(resultado partidof1 )
(resultado partidof2 )
(resultado partidof3 )
92
Ejercicio 2
En una clnica donde se ofrecenvarios servicios se requiere un programa para
saber si el paciente tiene saldo pendiente o no con ellos.Se debe manejar una
estructura con los campos: nombre, tipo de servicio , valor consulta y saldo
;Definicin de la estructura
(define-struct cliente ( nombre T_S V_C saldo))
"tomas suarez"
'optometria
56000
; Funcin
(define (deuda deudor)
(cond
[(> (cliente-saldo deudor)0) (begin (display(cliente-nombre deudor))
(display " ") "Tiene saldo pendiente")]
[(= (cliente-saldo deudor)0)(begin (display(cliente-nombre deudor))
(display " ") "NO Tiene saldo pendiente")]
93
; Prueba
(deuda clien1)
(deuda clien2)
(deuda clien3)
Ejercicio 3
Se necesita un programa que calcule la nota final del curso de fundamentos de
programacin. Se tiene una estructura para almacenar cada nota, y se sabe que
talleres y quices tienen un valor del 30%, el primer parcial un valor del 30% y el
parcial final 40%.
; Definicin de la estructura
(define-struct notas( T_Q Parcial1 Parcial2 ))
94
; Funcin
(define (nota_final estru)
(+(*(notas-T_Q estru)0.3)(*(notas-Parcial1 estru)0.3)(*(notas-Parcial2
estru)0.4)))
; Prueba
(nota_final mis_notas)
2. A partir de dos estructuras estudiante con campos nombre, curso, nota1, nota2,
nota3. Crear un programa que devuelva el nombre del estudiante con promedio
mayor. (Utilice funciones auxiliares)
3. Desarrolle a partir de dos estructuras punto (cada uno con sus coordenadas x y)
a) Un programa que determine si los puntos son diferentes.
b) Un programa que determine si estn ubicados horizontalmente.
c) Un programa que determine si estn ubicados verticalmente
d) Un programa que retorne la distancia entre los dos puntos.
e) Un programa que retorne el punto ms cercano al origen.
95
4.Desarrolle una funcin llamada TiempoSegundos, (con los campos horas minutos
segundos) la cual recibe una estructura tiempo y genera el nmero total de
segundos. Por ejemplo: si la funcin recibe como dato de entrada la estructura
(make-tiempo 10 10 2) el programa devuelve 36602.
5 Defina una estructura de datos que represente un numero fraccionario (que tiene
numerador y denominador)
fraccionarios.
6
A partir de una estructura para los datos de estudiante, estos datos son nombre,
nota1, nota2, nota3 donde notas son parciales para el estudiante y tienen el mismo
valor, desarroll una funcin, que retorne la informacin de si el estudiante aprob o
no la materia.
Un programa que retorne el nombre del almacn que menos ventas en total ha
tenido
d Un programa que retorne el valor de venta unitario del artculo que menos se ha
vendido en el ao
e Un programa que retorne el promedio total de las ganancias dejadas en el ao
por los tres .artculos
Aclaracin: En un mismo almacn se puede vender ms de un artculo.
96
9. LISTAS SIMPLES
Una lista es una secuencia o coleccin de elementos de igual o diferente tipo. Es
otro tipo de datos compuesto.
Toda lista con al menos un elemento est conformada por el primer elemento y el
resto de la lista.
El resto de la lista son todos los elementos de la lista sin el primer elemento
Para obtener el primer elemento de la lista utilizamos el operador first
Y para obtener el resto de la lista usamos el operador rest
Una lista vaca se representa con la palabra empty
Para escribir una lista en Scheme se usa la palabra list seguida por los elementos
de la lista por ejemplo definamos la Lista de centros comerciales Exito
Carrefour Chipichape
97
Operadores de listas
Operador
Funcin
ejemplo
First
Obtiene el primer
elemento de una
lista
Rest
Obtiene el resto de
una lista
Append
Permite
concatenar dos
listas
Reverse
Obtiene la lista al
reves
Agrega un
elemento a una
lista
Cons
(list 8 7 5)
Ejemplo1
(first (list 1 3 5 6 7)) es igual a 1
(rest (list 1 3 5 6 7)) es igual a (list 3 5 6 7)
Ejemplo 2
Definicin de una lista de lista de ciudades
(define ciudades (list "Cali" "Bogota" "Medellin" "Manizales"))
Ejemplo 3
(define amigos(list "juan" "pedro" "laura" "raul"))
(first (rest(rest amigos))) es igual a Laura
(rest(rest(rest(rest amigos)))) es igual a empty
(rest(first amigos))error no se puede aplicar rest a un elemento
(append amigos ciudades) es igual a (list "Cali" "Bogota" "Medellin"
"Manizales" "juan""pedro" "laura" "raul")
(reverse (list 10 23 34)) es igual a (list 34 23 10)
(cons 56(list 10 23 34)) es igual a (list 56 10 23 34)
(reverse(append (list 12 13 14) (list 2 3) (list 3 7))) es igual a (list 7 3 3 2
14 13 12)
(cons 4(cons 5(list 2 3 6))) es igual (list 4 5 2 3 6)
Este tipo de funciones son recursivas y por lo general tienen como condicin de
parada que la lista sea vaca.
99
EJERCICIOS RESUELTOS
Ejercicio 1
Realizar una funcin que calcule el nmero de elementos de una lista
;Cuerpo de la funcin
(define (longitud lista))
(cond
[(empty? lista) 0]
[else (+1 (longitud (rest lista)))]))
Ejercicio 2
100
;Cuerpo de la funcin
(define (sumaElementos L)
(cond
[(empty? L) 0]
[else (+ (first L) (sumaElementos (rest L)))]))
;Prueba
(sumaElementos (list 10 12 5 )) ; devuelve 27
Ejercicio 3
Hacer una funcin que incremente en 100 los elementos de una lista de nmeros.
; Dato entrada:P:ListaNumeros
; Tipo dato salida:ListaNumeros
;Prueba
(incremento (list 10 30 50)) ;Devuelve (list 110 130 150)
Ejercicio 4
; Proposito: funcin que busca un elemento de tipo symbol en una lista
de smbolos
; Analisis:D.E:L:Lista de simbolos,
e:symbol
;T.D.S:boolean
; Funcin
(define (buscar L e)
(cond
((empty? L) false)
((symbol=? (first L) e) true)
(else (buscar (rest L) e))))
102
; Prueba
(buscar (list 'Juan 'Pedro 'Luis) 'Miguel)
(buscar (list 'Juan 'Pedro 'Luis) 'Luis)
(buscar empty 'Luis)
Ejercicio 5
Hacer una funcin que invierta una lista, sin usar el operador reverse
; Funcin
(define (invertir T)
(cond
[(empty? T) empty]
[else (append (invertir (rest T)) (cons (first T)empty) )]))
;Prueba
(invertir lista1)
103
5. Desarrollar una funcin llamada buscar que determine si un numero est en una
lista de nmeros.
9. Realizar una funcin que toma una lista de nmeros y dos nmeros (nuevo y
viejo) y genera otra lista donde las apariciones del viejo son reemplazadas por
las del nuevo.
10. Realizar una funcin que encuentre todos los divisores de un nmero y los
retorne en una lista.
104
9 LISTAS DE ESTRUCTURAS
Una de las aplicaciones de lista ms comunes es la de permitir el almacenamiento
de datos para luego consultarlos. Dicha informacin podra representar por
ejemplo informacin de una empresa sobre su personal, sueldo, periodo de
vacaciones.
Entonces las lista van a estar formadas por estructuras, pero primero se debe
definir la estructura para luego si definir la lista que va a estar formada por esas
estructuras.
Ejemplo
Hacer una funcin que busque un empleado dentro de una empresa y retorne true
(verdadero) si el empleado se encuentra en la empresa y false en caso contrario.
; Definicin de la estructura
(define-.struct empleado (nombre cedula salario))
; empledo es una estructura donde nombre es de tipo string, cedula y
salario de tipo number.
;Estructuras particulares
(define empleado1 (make-Empleado Juan Perez 578910
800 000))
105
(define (buscar n E)
(cond
[(empty E) false)]
[(string=? n (Empleado-nombre (first E))) true ]
[else (buscar n (rest E))]))
; Prueba
(buscar Carlos Salazar empresa1) ;devuelve true
Ejemplo
Crear una funcin llamada ElevarPrecios que tome una lista de artculos (el
articulo tiene los campos nombre del artculo, precio y cdigo del producto) y
produzca la lista con todos los precios de los artculos incrementados en un 5%.
; Definicin de datos
(define-struct articulo (nombre precio cdigo))
106
; Anlisis
; Datos de entrada: L: lista de artculos
; T.D.S: lista de artculos
; Cuerpo de la funcin
(define (incrementar L)
Cuando algn campo de la estructura de la lista cambia, se debe volver a construir la lista insertando de nuevo
(cond
[(empty? L) empty]
[else (cons (make-articulo (articulo-nombre (first L)) (* (articulo-precio
(first L)) 1.05) (articulo-codigo (first L))) (incrementar (rest L)))]))
; Prueba
(incrementar L1)
EJERCICIOS RESUELTOS
Ejercicio 1
Se tiene una lista de estudiantes, donde cada estudiante tiene los campos
nombre, cdigo y direccin. Realizar una funcin que dado el cdigo de un
estudiante diga si est matriculado.
; Anlisis
; Nombre funcin: buscar
;D.E: cod:number L:lista de estudiantes
;T.D: string
; Funcin
(define (buscar L cod)
(cond
[(empty? L)"no se encuentra matriculado"]
[(= cod (estudiante-codigo(first L)))"si se encuentra matriculado"]
[else (buscar (rest L) cod)]))
; Prueba
(buscar univalle 201205)
108
1. Desarrollar una lista de artculos donde la estructura artculo tenga los campos
nombre del artculo, cdigo y precio. Y realizar las siguientes funciones:
a) Una funcin que determine el nombre del artculo a partir del precio y el
almacn (la lista de artculos).
b) Una funcin que determine el precio del artculo a partir del nombre y el
almacn (la lista de artculos).
2. Dada una lista de estudiantes de la universidad con los campos nombre, cdigo y
curso, realizar una funcin que dado un cdigo determine si el estudiante se
encuentra matriculado en la universidad.
3. Dada un directorio telefnico de amigos donde cada amigo tiene nombre, direccin
y telfono, crear una funcin que dado el nombre devuelva el nmero telefnico
del amigo.
4. Implementar un diccionario, donde dada una palabra la funcin devuelva el
significado de la palabra.
5 Un curso tiene como informacin: el nombre de la asignatura, grupo, crditos,
saln, profesor, hora de inicio, hora finalizacin. Adems, debe considerar que
una escuela, por ejemplo, la escuela de ingeniera de sistemas es la encargada de
ofrecer determinados cursos dentro de la universidad.
a) Desarrolle un programa que a partir de una escuela, determine cul es el total
de crditos que ofrece.
b). Desarrollar un programa que a partir de una escuela, y del nombre de una
asignatura, determine cuantos cursos diferentes ofrece la escuela de esa
asignatura.
c) Desarrollar un programa que a partir de una escuela y del nombre de un
profesor, retorne la informacin de los cursos que el ensea.
109
10 MEMORIA Y SECUENCIACION
(begin (expresin1)
(expresion2)
(expresion3)
(expresin)
(expresin N + 1))
110
Ejemplo 1
(define x 10) ; x se define con valor 10
(set! x (+ x 12)) ;x toma el valor de 22
(set! x (* x 2)) ; x queda valiendo 44
X ; se imprime 44
(define l1 (list 2 3 4 ))
Sin memoria
(cons 5 l1)
(cons 6 l1)
Si se imprime l1 aparece con su valor original que es (list 2 3 4)
Ejemplo 2
Trabajando con funciones
111
(agregarlistaconmemoria l1 6)
l1
Y si ahora se inserta el 7
(agregarlistaconmemoria l1 7)
112
"llamemos la funcin"
113
; Funcin
(define (AreaTriangulo B A) (/(* B A)2))
;********************************************************
; Propsito: leer los datos y llamar a la funcin AreaTraingulo
; Anlisis:
; Datos entrada: void
( define (lectura)
114
; Prueba
(lectura)
EJERCICIOS RESUELTOS
Ejercicio 1
Desarrollar funciones para manejar la informacin de los estudiantes de la
universidad, las funciones deben permitir:
a) Agregar estudiantes
b) Consultar por el cdigo todos los datos de un estudiante (No usa memoria)
c) Borrar estudiantes, dado el cdigo.
a)
; Propsito: agregar estudiantes
; Anlisis
; Nombre funcin: agregar
; Dato entrada: est: string, cod:number, cur: number
;T.D.S:lista de estudiantes
115
; Definicin de la estructura
(define-struct estudiantes(nombre codigo curso))
; Funcin
(define(agregar est cod cur)
(begin(set! universidad(cons(make-estudiantes est cod
cur)universidad))universidad))
; Prueba
(agregar "Alexis" 1261736 2702)
(agregar "Jesenia" 1261748 2702)
b)
; Propsito: buscar por el cdigo y devolver el nombre y el curso
; Anlisis
; Nombre funcin: consultar
; Dato entrada: l: lista y codi: number
;T.D.S:string
; Cuerpo de la funcin
(define (consultar l codi)
116
(cond
[(empty? l)"no esta inscrito"]
[(= codi (estudiantes-codigo(first l)))(begin(display(estudiantes-nombre
(first l)))(display " ")(display(estudiantes-curso (first l)))))
[else (consultar (rest l) codi)]))
; Prueba
(consultar universidad 1261736)
(consultar universidad 126174)
c)
; Propsito: borrar un estudiante de la lista
; Anlisis
; Nombre funcin: eliminar
; Dato de entrada: nomb: string y L:lista
;T.D.S: lista
(define (eliminar nomb L)
(cond
[(empty? L) "no existe"]
[(string=? nomb (estudiantes-nombre (first L))) (begin (set! universidad
(rest L))universidad)]
[else(begin(set! universidad (cons(first L)(eliminar nomb (rest
L))))universidad)]))
; Prueba
117
Ejercicio 2
Hacer una funcin para determinar el nmero menor de una lista de nmeros
;Cuerpo de la funcin
(define (Menorlista L m)
(cond
[(empty? L ) m]
[(< m (first L)) (Menorlista (rest L) m)]
[(> m (first L)) (Menorlista (rest L) (first L))]
[(= m (first L)) (Menorlista (rest L) m)]))
;*********************************************
118
; Funcin
(define (primero L )
(begin (set! M (first L)) (Menorlista (rest L) M )))
; Prueba
(primero l1)
Ejercicio 3
Se requiere una funcin que permita afiliar un paciente a la EPS.
; Anlisis:
119
; Nombre de la funcin:afiliarpaciente
; Datos de entrada:nombre strind,numerohistoriaclinica y cedula:number
;T.D.S: lista pacientes afiliados
; Cuerpo de la funcin
(define (afiliarpaciente nom numhis ced)
(begin (set! comfenalco (cons (make-paciente nom numhis
ced)comfenalco))comfenalco))
; Prueba
(afiliarpaciente "juanita perez" 20123085 1123569857)
Ejercicio 4
Realizar una funcin que permita consultar por el nmero de historia clnica todos
los datos de un paciente de lista de historias clnicas.
; Definicin de datos
; Definicin de estructura
; Anlisis
; Nombre de la funcin:consultarpaciente
; Datos de entrada:numerohistoriaclinica L:lista de paciente
; T:D:S: estructura paciente
120
; Cuerpo de la funcin
(define(consultarpaciente L numhis)
(cond
[(empty? L)"no se encuentra en la clnica"]
[(= numhis (paciente-numerohistoriaclinica (first L))) (first L)]
[else(consultarpaciente(rest L)numhis)]))
; Prueba
(consultarpaciente comfenalco 20128536)
122
12. VECTORES
123
EJERCICIOS RESUELTOS
Ejercicio 1
Haga una funcin que determine si dos vectores presentan el mismo
tamao
;Propsito:Determinar si dos vectores tienen el mismo tamao y retorne
verdadero o falso
;Anlisis
;Nombre de la funcin:tamaoVectores
;Datos de entrada:v1 v2:vectores
;Tipo datos de salida:boolean
;Cuerpo de la funcin
(define (tamaoVectores v1 v2)
(if(=(vector-length v1) (vector-length v2)) true false))
;Prueba
(tamaoVectores v g)
(tamaoVectores x w)
Ejercicio 2
Haga una funcin que determine si dos vectores presentan los mismos valores en
todas sus posiciones
;Propsito:Determinar si dos vectores son iguales o diferentes
;Anlisis
;Nombre de la funcin:comparar
;Datos de entrada:v1 v2:vectores i:number
;Tipo datos de salida:boolean
124
;Cuerpo de la funcin
(define (comparar v1 v2 i)
(cond
((= -1 i) "son iguales")
((= (vector-ref v1 i) (vector-ref v2 i)) (comparar v1 v2 (- i 1)))
(else "son diferentes")))
;***********************************************
; Funcin principal
;Propsito: validar que los vectores tengan el mismo tamao antes de
compararlos
;Anlisis
;Nombre de la funcin:compararVectores
;Datos de entrada: v1,v2:vectores
;Tipo datos de salida:string
;Cuerpo de la funcin
(define (compararVectores v1 v2 )
(if (tamaoVectores v1 v2)(comparar v1 v2 (-(vector-length v1)1))"no
son iguales"))
;Prueba
(compararVectores (vector 8 15 20) (vector 6 9 88))
(compararVectores (vector 1 2 3) (vector 1 2 3))
(compararVectores v g)
125
Ejercicio 2
Haga una funcin que reciba dos vectores y los sume y devuelva como resultados
un vector.
;Cuerpo de la funcin
(define(sumarvector a b i)
(if (tamaoVectores a b)
(cond
[(= i(vector-length a))a]
[else(begin(vector-set! a i(+(vector-ref a i)(vector-ref b i)))
(sumarvector a b(+ i 1)))])
"los vectores no se pueden sumar porque no tienen igual tamao"))
;*****************************************************
; Funcin principal
;Propsito:llamar a la funcin que suma los dos vectores empezando
desde la posicin 0
;Anlisis
;Nombre de la funcin:suma
;Datos de entrada: v1 v2:vector
;Tipo datos de Salida:vector
126
;Cuerpo de la funcin
(define(suma v1 v2)
(sumarvector v1 v2 0))
;Prueba
(suma v g)
Ejercicio 3
Haga una funcin que reciba un vector de 20 posiciones donde se almacenan los
sueldos de n empleadosy diga cuantos empleados ganan ms del salario mnimo
actual que es $566700.
127
;Cuerpo de la funcin
(define(minimomayor v i)
(cond
[(=(vector-length v)i)m]
[ (>(vector-ref v i)566700) (begin(set! m(+ m 1))(minimomayor v(+
i 1)))]
[else(minimomayor v(+ i 1))]))
;*********************************************************
;Funcin principal
;Propsito: llamar a la funcin anterior, iniciando la posicin desde donde
se empieza a recorrer el vector en 0.
;Anlisis
;Nombre de la funcin:mayor
;Datos de entrada: v1:vector
;Tipo datos de Salida:number
;Cuerpo de la funcin
128
(define(mayor v)
(minimomayor v 0))
; Prueba
(mayor empleados)
Ejercicio 4
Realice una funcin que reciba como dato de entrada el vector de los sueldos de
los empleadosy retorne y muestre un vector con los sueldos menos el 10% de
cada sueldo.
Anlisis
;Nombre de la funcin:des
;Datos de entrada: v:vector
;Tipo datos de Salida:vector
;Cuerpo de la funcin
(define (des v)
(descuento empleados 0))
; Prueba
(des empleados)
Ejercicio 5
Haga una funcin que reciba dos vectores, los reste y devuelva como resultado un
vector.
;Cuerpo de la funcin
(define(restarvector c d i)
(if (tamaoVectores c d)
130
(cond
[(= i(vector-length c))g]
[else(begin(vector-set! g i(-(vector-ref c i)(vector-ref d i)))
(restarvector c d(+ i 1)))])
"los vectores no se pueden restar porque no tienen igual tamao"))
;**************************************************
; Funcin principal
;Propsito: llamar a la funcin anterior, iniciando la posicin desde donde
se empieza a recorrer el vector en 0.
;Anlisis
;Nombre de la funcin:resta
;Datos de entrada: v1 v2:vector
;Tipo datos de Salida:vector
;Cuerpo de la funcin
(define(resta v1 v2)
(restarvector v1 v2 0))
;Prueba
(resta w g)
(resta v g)
131
132
13. LOCAL
Permite encapsular u ocultar informacin a las dems funciones.
Sintaxis
<exp>= (local (<def-1><def_n><exp>)
(local ((define x 4)
(define (suma x y) (+ x y))))
(suma 3 x)
Ejemplo
El siguiente ejercicio se hace de forma global
(define x 5)
(define (suma x y) (+ x y))
(suma 3 x) ;Retorna 8
(suma 5 x) ;Este llamado esta fuera del local por lo tanto no se reconoce y el
programa genera un error.
Ejemplo
133
134
TALLER 13 LOCAL
c) (volumen 6)
d) realizar una funcin para hallar el promedio de una lista usando local
135
Ejercicio 1
Buscar un elemento en un rbol binario
; Funcin
(define (buscar A e)
(cond
( (empty? A) false)
((= (nodo-info A) e) true)
; Prueba
(buscar arbolito 7)
(buscar arbolito 10)
;***********************************************************
Ejercicio 2
Sumar los valores del campo informacin del rbol
; Propsito: suma el valor del campo informacin de un rbol
; Anlisis: Dato entrada: A:rbol
;TDS: number
;Funcin
(define (suma A)
(cond
((empty? A) 0)
(else (+ (nodo-info A) (suma (nodo-izq A)) (suma(nodo-der A))))))
;Prueba
(suma arbolito)
137