Advertisement
Guest User

Untitled

a guest
May 25th, 2015
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.56 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;OTÁVIO FLORES JACOBI - AULA PRATICA 4 E EXERCÍCIOS EXTRA-CLASSES ;;
  3. ;; _______________________________________ ;;
  4. ;; | | ;;
  5. ;; |DEFINIÇÕES DE ESTRUTURAS E TIPOS MISTOS| ;;
  6. ;; |_______________________________________| ;;
  7. ;;STRUCTS ;;
  8. ;; ;;
  9. (define-struct infracao (id cnh placa hora data tipo)) ;;
  10. ;;um elemento infracao de Infracao é uma estrutura ;;
  11. ;;(make-infracao i c p h d t), onde ;;
  12. ;; - i : Número, representa a identificação da infracao ;;
  13. ;; - c : Número, representa a CNH do motorista que cometeu a infracao ;;
  14. ;; - p : Símbolo, representa a placa do carro que cometeu a infracao ;;
  15. ;; - h : String, representa a hora da infracao (formato: "xx:xx") ;;
  16. ;; - d : String, representa a data da infracao (formato: "dd/mm/aaaa") ;;
  17. ;; - t : Símbolo, representa o tipo da infracao (possibilidades: 'gravissima 'grave 'moderada 'leve) ;;
  18. ;; ;;
  19. ;; ;;
  20. ;; ;;
  21. (define-struct condutor (nome cnh haba habb habc habd pontos direito)) ;;
  22. ;;um elemento condutor de Condutor é uma estrutura ;;
  23. ;;(make-condutor n c ha hb hc hd pont d), onde ;;
  24. ;; - n: String, representa o nome do condutor ;;
  25. ;; - c: Número, representa a CNH do condutor ;;
  26. ;; - ha: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria a ;;
  27. ;; - hb: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria b ;;
  28. ;; - hc: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria c ;;
  29. ;; - hd: Booleean, representa se o condutor tem ou não permissao para dirigr na categoria d ;;
  30. ;; - pont: Número, representa a pontuacao do condutor ;;
  31. ;; - d: Boolean, representa se o condutor tem ou não o direito de dirigir ;;
  32. ;; ;;
  33. ;; ;;
  34. (define-struct funcionário (nome cargo salário equipe)) ;;
  35. ;; Um elemento funcionário do conjunto Funcionário é uma estrutura: ;;
  36. ;; (make-funcionário n c s e), onde: ;;
  37. ;; - n : String, nome do funcionário ;;
  38. ;; - c : Símbolo, cargo do funcionário ;;
  39. ;; - s : Número, salário em reais do funcionário ;;
  40. ;; - e : Lista-de-funcionários ;;
  41. ;;
  42. ;;
  43. ;;um Noouempty é ;;
  44. ;;1. um Elemento do tipo No, ou ;;
  45. ;;2. empty ;;
  46. ;;
  47. (define-struct no(condutor left right)) ;;
  48. ;;Um elemento no do conjunto No é uma estrutura: ;;
  49. ;;(make-no c l r), onde ;;
  50. ;; - c : Condutor, e representa um condutor ;;
  51. ;; - l : Noouempty, e representa o condutor para a esquerda ;;
  52. ;; - r : Noouempty, e representa o condutor para a direita ;;
  53. ;; ;;
  54. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  55. ;; ;;
  56. ;; _________________________ ;;
  57. ;; | | ;;
  58. ;; | DEFINIÇÕES DE LISTAS | ;;
  59. ;; |_________________________| ;;
  60. ;;LISTS ;;
  61. ;; ;;
  62. ;; Uma Lista-de-funcionários é: ;;
  63. ;; 1. ou empty ;;
  64. ;; 2. ou (cons f ldf) onde: ;;
  65. ;; - f : Funcionário ;;
  66. ;; - ldf : Lista-de-funcionários ;;
  67. ;; ;;
  68. ;; Uma Lista-de-strings é: ;;
  69. ;;1. ou empty ;;
  70. ;;2. ou (cons s lds) onde: ;;
  71. ;; - s : String ;;
  72. ;; - lds: Lista-de-string ;;
  73. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  74. ;; ;;
  75. ;; _________________________ ;;
  76. ;; | | ;;
  77. ;; | DEFINIÇÕES DE ABPS | ;;
  78. ;; |_________________________| ;;
  79. ;; ;;
  80. ;;uma abpc é do tipo Árvore-binária de pesquisa ;;
  81. ;;abpc é ou: ;;
  82. ;;1-empty ;;
  83. ;;2-No ;;
  84. ;; - E é organizada pelo número da CNH ;;
  85. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  86. ;; _________________________ ;;
  87. ;; | | ;;
  88. ;; |DEFINIÇÕES DE INSTÂNCIAS | ;;
  89. ;; |_________________________| ;;
  90. ;; ;;
  91. ;; ;;
  92. ;;infracoes ;;
  93. (define infr1 (make-infracao 101 1234 'irk3102 "21/12/2014" "22:30" 'grave)) ;;
  94. (define infr2 (make-infracao 102 5787 'jff3179 "17/02/2015" "17:45" 'leve)) ;;
  95. (define infr3 (make-infracao 103 9084 'ijk3109 "20/03/1998" "04:20" 'gravissima)) ;;
  96. (define infr4 (make-infracao 104 1244 'irk3102 "10/03/2011" "22:30" 'moderada )) ;;
  97. (define infr5 (make-infracao 105 3001 'irk3102 "14/07/2003" "23:00" 'gravissima)) ;;
  98. (define infr6 (make-infracao 106 6666 'irk3102 "25/12/2001" "17:22" 'leve)) ;;
  99. (define infr7 (make-infracao 107 4242 'irk3102 "22/05/2009" "08:53" 'moderada)) ;;
  100. ;; ;;
  101. ;;condutores ;;
  102. (define bruno (make-condutor "bruno" 1234 true false false false 15 true)) ;;
  103. (define luciane (make-condutor "luciane" 2102 false true false false 0 true)) ;;
  104. (define elton (make-condutor "elton" 5787 true true true false 23 false)) ;;
  105. (define otavio (make-condutor "otavio" 1244 true true false false 14 true)) ;;
  106. (define pedro (make-condutor "pedro" 3001 true false true false 10 true)) ;;
  107. (define vinicius (make-condutor "vinicius" 1000 false true true true 3 true)) ;;
  108. (define joao (make-condutor "joao" 7823 true false false false 12 true)) ;;
  109. (define juriscleisson (make-condutor "juriscleisson" 0420 true true true true 32 false)) ;;
  110. (define rodrigo (make-condutor "rodrigo" 0666 true true false true 21 false)) ;;
  111. ;; ;;
  112. ;; Funcionários ;;
  113. (define Silvia (make-funcionário "Sílvia" 'fiscal-de-rua 4000 empty)) ;;
  114. (define Carlos (make-funcionário "Carlos" 'fiscal-de-rua 4500 empty)) ;;
  115. (define Fernando (make-funcionário "Fernando" 'fiscal-de-rua 4500 empty)) ;;
  116. (define Eq4 (list Silvia)) ;;
  117. (define Jorge (make-funcionário "Jorge" 'chefe-de-equipe 8500 Eq4)) ;;
  118. (define Eq3 (list Fernando Carlos)) ;;
  119. (define Julio (make-funcionário "Júlio" 'chefe-de-equipe 10000 Eq3)) ;;
  120. (define Gustavo (make-funcionário "Gustavo" 'vice-diretor 20000 empty)) ;;
  121. (define Eq2 (list Julio Jorge)) ;;
  122. (define Tatiana (make-funcionário "Tatiana" 'vice-diretor 22000 Eq2)) ;;
  123. (define Eq1 (list Gustavo Tatiana)) ;;
  124. (define Sergio (make-funcionário "Sérgio" 'diretor 30000 Eq1)) ;;
  125. ;; ;;
  126. ;;abps ;;
  127. (define abpc ;;
  128. (make-no bruno ;;
  129. (make-no rodrigo ;;
  130. (make-no juriscleisson ;;
  131. empty ;;
  132. empty) ;;
  133. (make-no vinicius ;;
  134. empty ;;
  135. empty)) ;;
  136. (make-no otavio ;;
  137. empty ;;
  138. (make-no pedro ;;
  139. (make-no luciane ;;
  140. empty ;;
  141. empty) ;;
  142. (make-no elton ;;
  143. empty ;;
  144. (make-no joao ;;
  145. empty ;;
  146. empty)))))) ;;
  147. ;; ;;
  148. ;; ;;
  149. ;; ;;
  150. ;; ;;
  151. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  152.  
  153. (define ldc (list bruno luciane elton otavio pedro vinicius joao juriscleisson rodrigo))
  154.  
  155. ;;Exercícios Extra Classe LAB 4
  156. ;;Questão 2
  157.  
  158. ; Contrato: gera-abp: Lista-de-condutores -> abp
  159. ; Objetivo: Gera uma abp através do critério CNH.
  160. (define (gera-abp ldc)
  161. (cond
  162. [(empty? ldc) empty]
  163. [else (insere-cond(gera-abp (rest ldc))(first ldc))]))
  164.  
  165.  
  166. ; Contrato: insere-cond: abp Condutor -> abp
  167. ; Objetivo: Dada uma abp identifica onde se deve inserir o condutor fornecido.
  168.  
  169. (define (insere-cond abc condutor)
  170. (cond
  171. [(empty? abc) (make-no condutor
  172. empty
  173. empty)]
  174. [(< (condutor-cnh condutor) (condutor-cnh (no-condutor abc))) (make-no
  175. (no-condutor abc)
  176. (insere-cond (no-left abc) condutor)
  177. (no-right abc))]
  178. [(> (condutor-cnh condutor) (condutor-cnh (no-condutor abc))) (make-no
  179. (no-condutor abc)
  180. (no-left abc)
  181. (insere-cond (no-right abc) condutor))]))
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193. ;;EXERCÍCIOS LAB 4
  194.  
  195. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  196.  
  197. ;;EX 3
  198. ;;achaNome : abp Número -> String
  199. ;;Obj: Recebe o Número da CNH referente a um condutor e retorna a String referente ao nome do condutor, procurando em um banco de dados(abp informada)
  200. ;;e retorna uma String de mensagem caso não seja encontrado o condutor.
  201. ;;ex: (achaNome abpc 2102) -> "luciane"
  202. ;;ex: (achaNome abpc 5798) -> "CNH não encontrada."
  203. (define (achaNome uma_abp uma_cnh)
  204. (cond
  205. [(empty? uma_abp) "CNH não encontrada."]
  206. [(> uma_cnh (condutor-cnh(no-condutor uma_abp)))(achaNome (no-right uma_abp) uma_cnh)]
  207. [(< uma_cnh (condutor-cnh(no-condutor uma_abp)))(achaNome (no-left uma_abp) uma_cnh)]
  208. [else (condutor-nome(no-condutor uma_abp))]))
  209.  
  210. ;;testes
  211. (check-expect (achaNome abpc 2102) "luciane")
  212. (check-expect (achaNome abpc 5798) "CNH não encontrada.")
  213. (check-expect (achaNome abpc 0420) "juriscleisson")
  214.  
  215. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  216.  
  217. ;;EX 4
  218. ;;acimaNomes: abp Número -> lds
  219. ;;Obj: Recebe uma abp e um Número referente a pontuação máxima, retorna uma lds com os nomes dos condutores que passaram essa pontuação
  220. ;;ex: (acimaNomes abpc 50) -> empty
  221. ;;ex: (acimaNomes abpc 20) -> (list "rodrigo" "juriscleisson" "elton")
  222.  
  223. (define (acimaNomes uma_abp max_pontos)
  224. (cond
  225. [(empty? uma_abp) empty]
  226. [(<= max_pontos (condutor-pontos (no-condutor uma_abp))) (cons
  227. (condutor-nome (no-condutor uma_abp))
  228. (append
  229. (acimaNomes(no-left uma_abp) max_pontos)
  230. (acimaNomes(no-right uma_abp) max_pontos)))]
  231. [else
  232. (append
  233. (acimaNomes (no-left uma_abp) max_pontos)
  234. (acimaNomes (no-right uma_abp) max_pontos))]))
  235. ;;testes
  236. (check-expect (acimaNomes abpc 50) empty)
  237. (check-expect (acimaNomes abpc 20) (list "rodrigo" "juriscleisson" "elton"))
  238. (check-expect (acimaNomes abpc 30) (list "juriscleisson"))
  239.  
  240. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  241.  
  242. ;;EX 5
  243. ;; salarioPessoa : ldf -> Número
  244. ;; Obj: Recebe uma lista de funcionários e retorna o seu salário total e de todos da equipe que trabalham com ele
  245. (define (salário-contratados ldf)
  246. (cond
  247. [(empty? ldf) 0]
  248. [else (+ (salário-funcionário-e-contratados (first ldf)) (salário-contratados (rest ldf)))]))
  249.  
  250.  
  251. ;; salário-funcionário-e-equipe : Funcionário -> Número
  252. ;; Obj: Recebe uma lista de funcionários e retorna o seu salário total e de todos da equipe que trabalham com ele
  253. (define (salário-funcionário-e-contratados func)
  254. (+ (funcionário-salário func) (salário-contratados (funcionário-equipe func))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement