;proposito: determinar el precio en pesos de un billete ida y vuelta en avión, conociendo la distancia a recorrer y el numero de das de estancia en la ciudad destino. Se sabe que si la distancia este entre 2000-5000 Km. y el numero de das este entre 15-20, el billete tiene una reducción del 30%, si la distancia es mayor que 5000 Km. y el numero de das este entre 5-10, el billete tiene una reducción del 20%. El precio del billete es de 15 dólares por kilómetro. Un dólar equivale a 2850 pesos.
;contrato: numero, numero -> numero
;prueba 1:(precio_billete 3000 18) -> 89775000
;prueba 2:(precio_billete 6000 8) -> 205200000
;prueba 3:(precio_billete 1000 2) -> 42750000
(define (precio_billete km_a_recorrer dias_estancia)
(cond
[(and (and (>= km_a_recorrer 2000) (<= km_a_recorrer 5000)) (and (>= dias_estancia 15) (<= dias_estancia 20))) (* 2850 (- (* km_a_recorrer 15)(* km_a_recorrer 15 0.3)))];la condicion se cumple y se descuenta un 30%
[(and (>= km_a_recorrer 5000) (>= dias_estancia 5) (<= dias_estancia 10)) (* 2850 (- (* km_a_recorrer 15)(* (* km_a_recorrer 15)0.2)))];la condicion se cumple y se descuenta un 20%
[else (* 2850 (* km_a_recorrer 15))];la condicion se cumple y no se hace ningun descuento
))
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;Escriba un programa que permita calcular la nota nal del curso Fundamentos de ProgramaciÛn que consta de 4 notas entre 1-100, la primera nota vale 15%, la segunda 20%, la tercera 25% y la cuarta 40%. La nota final se obtiene de acuerdo a la siguiente tabla: [80,100]= A, [60,80]= B, [40,60]= C, [1,40]= D
;contrato: numero, numero, numero, numero -> caracter/cadena
;prueba 1: (nota_final 10 20 30 15) -> "D"
;prueba 2: (nota_final 46 60 70 59) -> "C"
;prueba 3: (nota_final 60 74 66 77) -> "B"
;prueba 4: (nota_final 89 90 83 81) -> "A"
;prueba 5: (nota_final 120 200 300 156) -> "error las notas digitadas no estan en el rango permitido"
(define (promedio n1 n2 n3 n4)
(+ (* n1 0.15) (* n2 0.2) (* n3 0.25) (* n4 0.4)))
(define (nota_final n1 n2 n3 n4)
(cond
[(and (>= (promedio n1 n2 n3 n4) 1) (<= (promedio n1 n2 n3 n4) 40)) "D"]
[(and (>= (promedio n1 n2 n3 n4) 40) (<= (promedio n1 n2 n3 n4) 60)) "C"]
[(and (>= (promedio n1 n2 n3 n4) 60) (<= (promedio n1 n2 n3 n4) 80)) "B"]
[(and (>= (promedio n1 n2 n3 n4) 80) (<= (promedio n1 n2 n3 n4) 100)) "A"]
[else "ERROR las notas digitadas no estan en el rango permitido"]
)
)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;proposito: construya una funcion que de vuelva falso o verdadero si un numero es perfecto.
;contrato: numero, numero, numero -> booleano
;prueba1: (perfecto 6 1 0)-> #t
;prueba2: (perfecto 5 1 0)-> #f
(define (perfecto n cont acu)
(if (and (> n cont)(= (remainder n cont) 0))
(perfecto n(+ cont 1)(+ acu cont))
(if (>= n cont)
(perfecto n (+ cont 1) acu)
(if (= acu n)#t #f
)
)))
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;proposito: Calcular la suma de n primeros terminos de la siguiente serie; emplee una funcion auxiliar para calcular el valor del termino
;contrato: numero -> numero
;prueba: (sumaserie 3) -> 6 1/3
(define (valorn n);funcion auxiliar
(- (expt 2 n)(/ n(+ n 1)))
)
(define (sumaserie n);recursividad
(cond
[(= n 1) 1]
[else (+ n(valorn (- n 1)))]
)
)